§
    ïyIf�… ã                   ó&  — d Z ddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlmZ ddlmZ ddlmZ ej        dk     r+ e ee
dd¦  «        ¦  «        r ee
j        ¦  «        e
_        dZd	Zd
Z	 ej        dk    rej                             d¦  «        ZnCej                              ej        d¦  «        pej                             d¦  «        d¦  «        Zn# e$ r dZY nw xY wdZdZ dddœZ!dZ"dZ#dddœZ$dZ% e&g d¢¦  «        Z' e&ej(        dgz   ¦  «        e'z
  Z) e&g d¢¦  «        Z* e&g d¢¦  «        Z+e+ ,                    g d¢¦  «        Z- e&g d ¢¦  «        Z. e&d!¦  «        Z/ e&e
j0        e
j1        g¦  «        Z1e1 ,                    e
j2        e
j3        g¦  «        Z4e4 ,                    e
j5        e
j6        g¦  «        Z7g d"¢Z8 ej9        d#¦  «        Z: ej9        d$¦  «        Z; ej9        d%¦  «        Z< ej9        d&¦  «        Z= ej9        d'¦  «        Z> ej9        d(¦  «        Z? ej9        d)¦  «        Z@ ej9        d*¦  «        ZA ej9        d+d,                     e)¦  «        z  ¦  «        ZB ej9        d-¦  «        ZC ej9        d.¦  «        ZD ej9        d/¦  «        ZE ej9        d0¦  «        ZF ej9        d1¦  «        ZG ej9        d2 H                    d,                     d3„ d4D ¦   «         ¦  «        ¦  «        ¦  «        ZI ej9        d5¦  «        ZJ ej9        d6¦  «        ZKej        d7k    re
jL        ZLe
jM        ZMe
jN        ZNnd8xZLxZMZNi i i d9œZOd:„ ZPd€d;„ZQeQd<„ ¦   «         ZReQd=„ ¦   «         ZSeQd>„ ¦   «         ZTeQd?„ ¦   «         ZUeQd@„ ¦   «         ZVdA„ ZWeQdB„ ¦   «         ZXeQdC„ ¦   «         ZYeQdD„ ¦   «         ZZeQdE„ ¦   «         Z[eQdF„ ¦   «         Z\eQdG„ ¦   «         Z]eQdH„ ¦   «         Z^eQdI„ ¦   «         Z_eQdJ„ ¦   «         Z`eQdK„ ¦   «         ZaeQdL„ ¦   «         ZbeQdM„ ¦   «         ZceQdN„ ¦   «         ZdeQdO„ ¦   «         ZeeQdP„ ¦   «         ZfeQdQ„ ¦   «         Zg e&dR¦  «         e&dS¦  «        z  ZhdT„ ZidU„ ZjeQdV„ ¦   «         ZkeQdW„ ¦   «         ZleQdX„ ¦   «         ZmeQdY„ ¦   «         ZneQdZ„ ¦   «         ZoeQd[„ ¦   «         ZpeQd\„ ¦   «         ZqeQd]„ ¦   «         ZreQd^„ ¦   «         Zsd_„ Ztd`„ Zu  eda¦  «         ej9        dbejv        ¦  «        jw        ¦  «        Zxdc„ Zydd„ Zzd�df„Z{ej|        fdg„Z}d‚di„Z~dj„ Zdk„ Z€ G dl„ dm¦  «        Z� G dn„ do¦  «        Z‚ G dp„ dqe‚¦  «        Zƒ G dr„ dse‚¦  «        Z„ G dt„ due„¦  «        Z… G dv„ dw¦  «        Z†defdx„Z‡dy„ Zˆ	 	 dƒd{„Z‰d„d}„ZŠd~„ Z‹eŒdk    r e‹¦   «          dS dS )…aŒ  
Check Python source code formatting, according to PEP 8.

For usage and a list of options, try this:
$ python pycodestyle.py -h

This program and its regression test suite live here:
https://github.com/pycqa/pycodestyle

Groups of errors and warnings:
E errors
W warnings
100 indentation
200 whitespace
300 blank lines
400 imports
500 line length
600 deprecation
700 statements
900 syntax error
é    N©Úfnmatch)Ú	lru_cache)ÚOptionParser)é   é
   Ú_compilez2.11.1z'.svn,CVS,.bzr,.hg,.git,__pycache__,.toxz&E121,E123,E126,E226,E24,E704,W503,W504Úwin32z~\.pycodestyleÚXDG_CONFIG_HOMEz	~/.configÚpycodestyle)z	setup.cfgztox.iniéO   é   é   )Ú	top_levelÚmethodéH   é   z+%(path)s:%(row)d:%(col)d: %(code)s %(text)sz%%(path)s:%(row)d: [%(code)s] %(text)s)ÚdefaultÚpylinti   )ÚFalseÚNoneÚTrueÚprint)ú>>ú**Ú*ú+ú-)r   r   ú/z//r   r   ú@)ú^ú&ú|z<<r   ú%)z**=z*=z/=z//=z+=z-=z!=ú<ú>z%=z^=z&=z|=ú==z<=z>=z<<=z>>=ú=ÚandÚinÚisÚorz->ú:=u    	Â )ÚdirectoriesÚfilesúlogical linesúphysical linesz([ \t]*)z\b[A-Z]\d{3}\bz	u?r?["\']z[\[({][ \t]|[ \t][\]}),;:](?!=)z[,;:]\s*(?:  |\t)z?(\bNone|\bFalse|\bTrue)?\s*([=!]=)\s*(?(1)|(None|False|True))\bz*\b(?<!is\s)(not)\s+[^][)(}{ ]+\s+(in|is)\szU[=!]=\s+type(?:\s*\(\s*([^)]*[^ )])\s*\))|\btype(?:\s*\(\s*([^)]*[^ )])\s*\))\s+[=!]=z(\s*)\b(?:%s)\b(\s*)r#   z*(?:[^,\s])(\s*)(?:[-+*/|!<=>%&^]+|:=)(\s*)z
\blambda\bz*^@@ -\d+(?:,\d+)? \+(\d+)(?:,(\d+))? @@.*$z^(async\s+def|def)\bz#^(async\s+def\s+|def\s+|class\s+|@)z
^\s*({})\bc              #   óB   K  — | ]}|                      d d¦  «        V — ŒdS )ú z\s+N)Úreplace)Ú.0Úss     ú?/var/www/piapp/venv/lib/python3.11/site-packages/pycodestyle.pyú	<genexpr>r8   ‹   s@   è è € ð "ð "¸Q !§)¢)¨C°Ñ"8Ô"8ð "ð "ð "ð "ð "ð "ó    )Údefz	async defÚforz	async forÚifÚelifÚelseÚtryÚexceptÚfinallyÚwithz
async withÚclassÚwhilez-^__([^\s]+)__(?::\s*[a-zA-Z.0-9_\[\]\"]+)? = z
except\s*:)r   é   éÿÿÿÿ)Úphysical_lineÚlogical_lineÚtreec                 ól   — d„ t          j        | ¦  «        j                             ¦   «         D ¦   «         S )Nc                 ó<   — g | ]}|j         |j        k    ¯|j        ‘ŒS © )ÚkindÚPOSITIONAL_OR_KEYWORDÚname)r5   Ú	parameters     r7   ú
<listcomp>z#_get_parameters.<locals>.<listcomp>£   s:   € ð Bð Bð BØàŒ~ Ô!@Ò@Ð@ð ŒNð AÐ@Ð@r9   )ÚinspectÚ	signatureÚ
parametersÚvalues)Úfunctions    r7   Ú_get_parametersrW   ¢   sC   € ðBð BåÔ  Ñ*Ô*Ô5×<Ò<Ñ>Ô>ðBñ Bô Bð Br9   c                 ób  — d„ }t          j        | ¦  «        rSt          | ¦  «        }|rA|d         dv r7|€!t                               | j        pd¦  «        } || |d         ||¦  «         nDt          j        | ¦  «        r0t          | j        ¦  «        dd…         ddgk    r || d|d¦  «         | S )	zRegister a new check object.c                 ó®   — | t           |         v r0t           |         |          d                              |pg ¦  «         d S |pdg|ft           |         | <   d S )Nr   Ú )Ú_checksÚextend)ÚcheckrM   ÚcodesÚargss       r7   Ú
_add_checkz"register_check.<locals>._add_check«   s\   € Ø•G˜D”MÐ!Ð!Ý�DŒM˜%Ô  Ô#×*Ò*¨5¨;°BÑ7Ô7Ð7Ð7Ð7à$) M¨b¨T°4Ð#8�G�DŒM˜%Ñ Ð Ð r9   r   )rG   rH   NrZ   r   ÚselfrI   )rR   Ú
isfunctionrW   ÚERRORCODE_REGEXÚfindallÚ__doc__ÚisclassÚ__init__)r]   r^   r`   r_   s       r7   Úregister_checkrh   ©   sÔ   € ð9ð 9ð 9õ
 Ô˜%Ñ Ô ð 3Ý˜uÑ%Ô%ˆØð 	4�D˜”GÐ@Ð@Ð@Øˆ}Ý'×/Ò/°´Ð0CÀÑDÔD�ØˆJ�u˜d 1œg u¨dÑ3Ô3Ð3øÝ	Œ˜Ñ	Ô	ð 3Ý˜5œ>Ñ*Ô*¨2¨A¨2Ô.°6¸6Ð2BÒBÐBØˆJ�u˜f e¨TÑ2Ô2Ð2Ø€Lr9   c                 ó¢   — t                                | ¦  «                             d¦  «        }t          |¦  «        D ]\  }}||k    r|dfc S ŒdS )a  Never mix tabs and spaces.

    The most popular way of indenting Python is with spaces only.  The
    second-most popular way is with tabs only.  Code indented with a
    mixture of tabs and spaces should be converted to using spaces
    exclusively.  When invoking the Python command line interpreter with
    the -t option, it issues warnings about code that illegally mixes
    tabs and spaces.  When using -tt these warnings become errors.
    These options are highly recommended!

    Okay: if a == 0:\n    a = 1\n    b = 1
    r   z/E101 indentation contains mixed spaces and tabsN)ÚINDENT_REGEXÚmatchÚgroupÚ	enumerate)rG   Úindent_charÚindentÚoffsetÚchars        r7   Útabs_or_spacesrr   À   sp   € õ ×Ò Ñ.Ô.×4Ò4°QÑ7Ô7€FÝ! &Ñ)Ô)ð Mð M‰ˆ�Ø�;ÒÐØÐLÐLÐLÐLÐLð ðMð Mr9   c                 ó–   — t                                | ¦  «                             d¦  «        }d|v r|                     d¦  «        dfS dS )z‚On new projects, spaces-only are strongly recommended over tabs.

    Okay: if True:\n    return
    W191: if True:\n\treturn
    r   ú	zW191 indentation contains tabsN)rj   rk   rl   Úindex)rG   ro   s     r7   Útabs_obsoleterv   Ô   sM   € õ ×Ò Ñ.Ô.×4Ò4°QÑ7Ô7€FØˆv€~€~Ø�|Š|˜DÑ!Ô!Ð#CÐCÐCð €~r9   c                 óä   — |                       d¦  «        } |                       d¦  «        } |                       d¦  «        } |                       d¦  «        }| |k    r|rt          |¦  «        dfS dS dS )a  Trailing whitespace is superfluous.

    The warning returned varies on whether the line itself is blank,
    for easier filtering for those who want to indent their blank lines.

    Okay: spam(1)\n#
    W291: spam(1) \n#
    W293: class Foo(object):\n    \n    bang = 12
    ú
úúz 	zW291 trailing whitespace)r   z#W293 blank line contains whitespaceN©ÚrstripÚlen)rG   Ústrippeds     r7   Útrailing_whitespacer   à   sƒ   € ð "×(Ò(¨Ñ.Ô.€MØ!×(Ò(¨Ñ.Ô.€MØ!×(Ò(¨Ñ0Ô0€MØ×#Ò# GÑ,Ô,€HØ˜Ò Ð Øð 	<Ý�x‘=”=Ð"<Ð<Ð<à;Ð;ð	 !Ð r9   c                 ó†   — ||k    r8|                       d¦  «        }| r|sdS || k    rt          |d         ¦  «        dfS dS dS )z—Trailing blank lines are superfluous.

    Okay: spam(1)
    W391: spam(1)\n

    However the last line should end with a new line (warning W292).
    ú
)r   zW391 blank line at end of filerF   zW292 no newline at end of fileNr{   )rG   ÚlinesÚline_numberÚtotal_linesÚstripped_last_lines        r7   Útrailing_blank_linesr†   ö   sj   € ð �kÒ!Ð!Ø*×1Ò1°&Ñ9Ô9ÐØð 	7Ð!3ð 	7Ø6Ð6Ø Ò.Ð.Ý�u˜R”y‘>”>Ð#CÐCÐCð "Ð!ð /Ð.r9   c                 ó¨  — |                       ¦   «         }t          |¦  «        }||k    r¤|s¤|dk    r|                     d¦  «        rdS |                     ¦   «         }t          |¦  «        dk    r|st          |¦  «        dk    r:|d         dk    r.t          |¦  «        t          |d         ¦  «        z
  |dz
  k     rdS ||k    r|d	||fz  fS dS dS dS )
aô  Limit all lines to a maximum of 79 characters.

    There are still many devices around that are limited to 80 character
    lines; plus, limiting windows to 80 characters makes it possible to
    have several windows side-by-side.  The default wrapping on such
    devices looks ugly.  Therefore, please limit all lines to a maximum
    of 79 characters. For flowing long blocks of text (docstrings or
    comments), limiting the length to 72 characters is recommended.

    Reports error E501.
    r   ú#!Nr   r   ú#rF   é   z'E501 line too long (%d > %d characters))r|   r}   Ú
startswithÚsplit)rG   Úmax_line_lengthÚ	multilinerƒ   ÚnoqaÚlineÚlengthÚchunkss           r7   Úmaximum_line_lengthr“     s  € ð ×ÒÑ!Ô!€DÝ�‰YŒY€FØ�ÒÐ¨Ðà˜!ÒÐ §¢°Ñ 5Ô 5ÐØˆFð —’‘”ˆÝ�‰[Œ[˜AÒÐ )ÐÝ�‰[Œ[˜AÒÐ &¨¤)¨sÒ"2Ð"2Ý�D‘	”	�C  r¤
™OœOÑ+¨oÀÑ.AÒAÐAØˆFØ�OÒ#Ð#Ø#ð &+Ø.4°oÐ-Fñ&Gð Hð Hð  ÐÐÐð $Ð#r9   c                 óP  — t                                | ¦  «        sdS |dz
  }|dk     rd}nt          ||dz
           ¦  «        }||k    rdS |t          |¦  «        k     rb||                              ¦   «         }|                     d¦  «        st                                |¦  «        rn|dz  }|t          |¦  «        k     °bdS |dz   }|t          |¦  «        k     r3||                              ¦   «         rn|dz  }|t          |¦  «        k     °3dS t          ||         ¦  «        |k    S )NFr   r   r    T)ÚSTARTSWITH_TOP_LEVEL_REGEXrk   Úexpand_indentr}   Ústripr‹   )rH   Úindent_levelr‚   rƒ   Úline_idxÚprev_indentr�   Únext_idxs           r7   Ú_is_one_linerrœ   -  sA  € Ý%×+Ò+¨LÑ9Ô9ð Øˆuà˜Q‰€Hà�!‚|€|Øˆˆå# E¨(°Q©,Ô$7Ñ8Ô8ˆà�\Ò!Ð!Øˆuà
•S˜‘Z”ZÒ
Ð
Ø�XŒ×$Ò$Ñ&Ô&ˆØ�Š˜sÑ#Ô#ð 	Õ(B×(HÒ(HÈÑ(NÔ(Nð 	Øà˜‰MˆHð •S˜‘Z”ZÒ
Ð
ð ˆuà˜!‰|€HØ
•S˜‘Z”ZÒ
Ð
Ø�Œ?× Ò Ñ"Ô"ð 	Øà˜‰MˆHð	 •S˜‘Z”ZÒ
Ð
ð ˆtå˜˜xœÑ)Ô)¨\Ò9Ð9r9   c	              #   óp  K  — t           d         }	t           d         }
|s||	k     rdS |                     d¦  «        r
|rdV — dS dS ||	k    s|r||
dz   k    rdd|z  fV — dS t                               | ¦  «        �rt	          | |||¦  «        r|dk    rdS |rÖ||
k    sÊ||k     sÆt
                               |¦  «        s®|}d	}|||	z
  dd
…         D ]n}|                     ¦   «         rXt          |¦  «        |k     rEt          |¦  «        }t                               | 	                    ¦   «         ¦  «        }|s|dk    r nŒo|rdd|
›d�fV — dS dd 
                    |
¦  «        fV — dS dS dS dS ||	k    rdd|	|fz  fV — dS dS | r*|s*||	k    r&|                     d¦  «        rdd|	|fz  fV — dS dS dS dS dS )aO  Separate top-level function and class definitions with two blank
    lines.

    Method definitions inside a class are separated by a single blank
    line.

    Extra blank lines may be used (sparingly) to separate groups of
    related functions.  Blank lines may be omitted between a bunch of
    related one-liners (e.g. a set of dummy implementations).

    Use blank lines in functions, sparingly, to indicate logical
    sections.

    Okay: def a():\n    pass\n\n\ndef b():\n    pass
    Okay: def a():\n    pass\n\n\nasync def b():\n    pass
    Okay: def a():\n    pass\n\n\n# Foo\n# Bar\n\ndef b():\n    pass
    Okay: default = 1\nfoo = 1
    Okay: classify = 1\nfoo = 1

    E301: class Foo:\n    b = 0\n    def bar():\n        pass
    E302: def a():\n    pass\n\ndef b(n):\n    pass
    E302: def a():\n    pass\n\nasync def b(n):\n    pass
    E303: def a():\n    pass\n\n\n\ndef b(n):\n    pass
    E303: def a():\n\n\n\n    pass
    E304: @decorator\n\ndef a():\n    pass
    E305: def a():\n    pass\na()
    E306: def a():\n    def b():\n        pass\n    def c():\n        pass
    r   r   Nr    )r   z/E304 blank lines found after function decoratorr   r   zE303 too many blank lines (%d)FrF   zE306 expected z/ blank line before a nested definition, found 0z$E301 expected {} blank line, found 0z&E302 expected %s blank lines, found %d)zdef zclass zIE305 expected %s blank lines after class or function definition, found %d)ÚBLANK_LINES_CONFIGr‹   r•   rk   rœ   ÚDOCSTRING_REGEXr—   r–   ÚSTARTSWITH_DEF_REGEXÚlstripÚformat)rH   Úblank_linesr˜   rƒ   Úblank_beforeÚprevious_logicalÚ previous_unindented_logical_lineÚprevious_indent_levelr‚   Útop_level_linesÚmethod_linesÚancestor_levelÚnestedr�   s                 r7   r£   r£   P  s  è è € õB )¨Ô5€OÝ% hÔ/€Làð  ¨Ò >Ð >ØˆØ×"Ò" 3Ñ'Ô'ð -/Øð 	GØFÐFÐFÐFÐFÐFð	Gð 	Gà
˜Ò
'Ð
'Øð (Ø)¨\¸AÑ-=Ò=Ð=àÐ1°KÑ?Ð?Ð?Ð?Ð?Ð?Ð?Ý	#×	)Ò	)¨,Ñ	7Ô	7ñ &/õ ˜,¨°e¸[ÑIÔIð	à˜AÒÐàˆFØð 	/Ø  LÒ0Ð0Ø)¨LÒ8Ð8Ý#×)Ò)Ð*:Ñ;Ô;ð 9ð ".�Ø�ð " +°Ñ"?Ð"CÀÐ"CÔDð "ð "�DØ—z’z‘|”|ð "­°dÑ(;Ô(;¸nÒ(LÐ(LÝ)6°tÑ)<Ô)<˜Ý!5×!;Ò!;¸D¿KºK¹M¼MÑ!JÔ!J˜Ø!ð " ^°qÒ%8Ð%8Ø!˜EøØð &Ø˜!Ø8D¸¸ðGð Gð Gð Gð Gð Gð Gð ÐC×JÒJØ$ñ&ô &ð &ð &ð &ð &ð &ð &ð% 1Ð0Ø8Ð8Ð8Ð8ð& ˜_Ò,Ð,ØÐ=Ø ðA/ñ /ð /ð /ð /ð /ð /ð /ð -Ð,ð ð /Øð/à˜OÒ+Ð+Ø,×7Ò7Ð8JÑKÔKð ,ð ð 5à ð8/ñ/ð /ð 	/ð 	/ð 	/ð 	/ð 	/ð/ð /ð /ð /à+Ð+Ð+Ð+r9   c              #   óT  K  — | }t                                |¦  «        D ]ˆ}|                     ¦   «         }|                     ¦   «         }|                     ¦   «         }|d                              ¦   «         r|dz   d|z  fV — Œe||dz
           dk    r|dv rdnd}||› d|› d	�fV — Œ‰d
S )aH  Avoid extraneous whitespace.

    Avoid extraneous whitespace in these situations:
    - Immediately inside parentheses, brackets or braces.
    - Immediately before a comma, semicolon, or colon.

    Okay: spam(ham[1], {eggs: 2})
    E201: spam( ham[1], {eggs: 2})
    E201: spam(ham[ 1], {eggs: 2})
    E201: spam(ham[1], { eggs: 2})
    E202: spam(ham[1], {eggs: 2} )
    E202: spam(ham[1 ], {eggs: 2})
    E202: spam(ham[1], {eggs: 2 })

    E203: if x == 4: print x, y; x, y = y , x
    E203: if x == 4: print x, y ; x, y = y, x
    E203: if x == 4 : print x, y; x, y = y, x
    rF   r   zE201 whitespace after '%s'ú,ú}])ÚE202ÚE203z whitespace before 'ú'N)ÚEXTRANEOUS_WHITESPACE_REGEXÚfinditerrl   r—   ÚstartÚisspace)rH   r�   rk   Útextrq   ÚfoundÚcodes          r7   Úextraneous_whitespacer¹   ¦  sØ   è è € ð( €DÝ,×5Ò5°dÑ;Ô;ð 	>ð 	>ˆØ�{Š{‰}Œ}ˆØ�zŠz‰|Œ|ˆØ—’‘”ˆØ�Œ8×ÒÑÔð 	>à˜!‘)Ð9¸DÑ@Ð@Ð@Ð@Ð@Ð@Ø�%˜!‘)Œ_ Ò#Ð#Ø" e˜m˜m�F�F°ˆDØ˜DÐ=Ð=°dÐ=Ð=Ð=Ð=Ð=Ð=Ð=øð	>ð 	>r9   c              #   óš  K  — t                                | ¦  «        D ]­}|                     ¦   «         \  }}d|v r|                     d¦  «        dfV — n,t	          |¦  «        dk    r|                     d¦  «        dfV — d|v r|                     d¦  «        dfV — Œ�t	          |¦  «        dk    r|                     d¦  «        dfV — Œ®dS )	z³Avoid extraneous whitespace around keywords.

    Okay: True and False
    E271: True and  False
    E272: True  and False
    E273: True and\tFalse
    E274: True\tand False
    rt   r   zE274 tab before keywordz#E272 multiple spaces before keywordr   zE273 tab after keywordz"E271 multiple spaces after keywordN)ÚKEYWORD_REGEXr³   Úgroupsr´   r}   ©rH   rk   ÚbeforeÚafters       r7   Úwhitespace_around_keywordsrÀ   Ç  së   è è € õ ×'Ò'¨Ñ5Ô5ð Gð GˆØŸš™œ‰ˆ�à�6ˆ>ˆ>Ø—+’+˜a‘.”.Ð";Ð;Ð;Ð;Ð;Ð;Ý�‰[Œ[˜1Š_ˆ_Ø—+’+˜a‘.”.Ð"GÐGÐGÐGÐGà�5ˆ=ˆ=Ø—+’+˜a‘.”.Ð":Ð:Ð:Ð:Ð:Ð:Ý�‰ZŒZ˜!Š^ˆ^Ø—+’+˜a‘.”.Ð"FÐFÐFÐFÐFøðGð Gr9   c              #   ó^  K  — t          ||dd…         ¦  «        D ]‘\  }}|j        |j        k    r||j        t          j        k    rgt          j        |j        ¦  «        rN|j        t          vr@|j        dk    r|j        dk    s*|j        dk    r|j        dk    s|j        dvr|j        dfV — Œ’dS )	zÂKeywords should be followed by whitespace.

    Okay: from foo import (bar, baz)
    E275: from foo import(bar, baz)
    E275: from importable.module import(bar, baz)
    E275: if(foo): bar
    r   Nr@   r   Úyieldú)z:
z%E275 missing whitespace after keyword)
ÚzipÚendr´   ÚtypeÚtokenizeÚNAMEÚkeywordÚ	iskeywordÚstringÚ
SINGLETONS)rH   ÚtokensÚtok0Útok1s       r7   Ú missing_whitespace_after_keywordrÐ   ß  sÑ   è è € õ ˜& &¨¨¨¤*Ñ-Ô-ð Dð D‰
ˆˆdð ŒH˜œ
Ò"Ð"Ø”	�Xœ]Ò*Ð*ÝÔ! $¤+Ñ.Ô.ð +à”¥:Ð-Ð-Ø”[ HÒ,Ð,°´ÀÒ1CÐ1CØ”[ GÒ+Ð+°´¸sÒ0BÐ0BØ” 5Ð(Ð(Ø”(ÐCÐCÐCÐCÐCøðDð Dr9   c              #   ó4  K  — | rdnd}| rdnd}||z  rd|d|z   dt          |¦  «        z   fz  fV — |                     d¦  «        }|r||k    rd|d|z   d	fz  fV — n|s||k    rd|d|z   d
fz  fV — |r |dk    rdnd}	||	z   }
||
k    rd|dz  fV — dS dS dS )aÂ  Use indent_size (PEP8 says 4) spaces per indentation level.

    For really old code that you don't want to mess up, you can continue
    to use 8-space tabs.

    Okay: a = 1
    Okay: if a == 0:\n    a = 1
    E111:   a = 1
    E114:   # a = 1

    Okay: for item in items:\n    pass
    E112: for item in items:\npass
    E115: for item in items:\n# Hi\n    pass

    Okay: a = 1\nb = 2
    E113: a = 1\n    b = 2
    E116: a = 1\n    # b = 2
    r   r   zE11%d %szE11%d %s (comment)r   z!indentation is not a multiple of ú:r   zexpected an indented blockzunexpected indentationrt   é   r   )rŠ   zover-indentedN)ÚstrÚendswith)rH   r¥   rn   r˜   r§   Úindent_sizeÚcÚtmplÚindent_expectÚexpected_indent_amountÚexpected_indent_levels              r7   ÚindentationrÜ   ö  sM  è è € ð, Ð ˆˆ˜q€AØ%Ð?ˆ:ˆ:Ð+?€DØ�kÑ!ð 
Ø�Ø�‰EØ/µ#°kÑ2BÔ2BÑBð
ñ 
ð 
ð 	
ð 	
ð 	
ð %×-Ò-¨cÑ2Ô2€MØð :˜Ð)>Ò>Ð>Ø�˜˜Q™Ð <Ð=Ñ=Ð=Ð=Ð=Ð=Ð=Øð :˜|Ð.CÒCÐCØ�˜˜Q™Ð 8Ð9Ñ9Ð9Ð9Ð9Ð9àð 1Ø&1°TÒ&9Ð&9  ¸qÐØ 5Ð8NÑ NÐØÐ/Ò/Ð/Ø�TÐ0Ñ0Ð0Ð0Ð0Ð0Ð0Ð0ð	1ð 1ð 0Ð/r9   c           
   #   ó\  K  — |d         d         d         }d|d         d         d         z   |z
  }	|s|	dk    rdS |                       d¦  «        }
dx}}|dk    r|fn||dz  f}dg|	z  }dg|	z  }dgg}dg}i }|d         d         }d}d}|d         g}|d	k    r0t          d
|d         d                              ¦   «         z   ¦  «         |D �]Ÿ\  }}}}}||d         |z
  k     }|r|d         |z
  }| o|t          v}|�rŒ|}|d	k    r$t          d|                     ¦   «         z   ¦  «         t	          |¦  «        |z
  ||<   |t
          j        k    o|dv }t          ||         ¦  «        D ]}||         ||         z
  }||v } | r nŒ||         r|||         k    } | o |dk    o|                     |d         ¦  «        }|r!||         r|d         ||         k    r|dfV — n«|r|s	|r|dfV — nž||         r|d         ||         k     r|dur|dfV — ny| s|
r||         d|z  k    r|r|s|dfV — |||<   nV|du r|d         ||<   nF||t          fv rn:|dk    rd}!n(||         rd}!n|s||         rd}!n|||<   ||k    rd}!nd}!|d|!z  fV — ||         rZ|t
          j
        t
          j        fvr@||         s8|d         ||<   d||d         <   |dk    rt          d|› d|d         › �¦  «         n¦|t
          j        t
          j        t          fv rt          ||d         <   nu|s|s|dv rd||d         dz   <   n^|s|s|s|dk    rd||d         dz   <   nC|dk    r=||d         d…                              ¦   «         r||                              |¦  «         |t
          j        k    �rž|dv r­|dz  }|                     d¦  «         |                     d¦  «         t!          |¦  «        |k    r|                     g ¦  «         ||                              |¦  «         ||xx         dz  cc<   |dk    r$t          d|›d|d         ›d||         ›�¦  «         nÀ|d v r¼|dk    r¶|                     ¦   «         p|d         }"|                     ¦   «          t%          |¦  «        D ]}#||#         |"k    rd||#<   Œt'          |¦  «        D ]}$|$|"k    r||$= Œ||dz   d…= |dz  }|rd|||         <   t%          |dd¦  «        D ]}%||%         r||%xx         dz  cc<    nŒt!          |¦  «        |dz   k    sJ ‚|d         |vr|||d         <   |d         |d         k    }|r||         ||d         |z
  <   �Œ¡|
r;t	          |¦  «        ||z   k    r'|d         |d         |z   f}&|rd!}'nd"}'|&d#|'z  fV — dS dS dS )$a2  Continuation lines indentation.

    Continuation lines should align wrapped elements either vertically
    using Python's implicit line joining inside parentheses, brackets
    and braces, or using a hanging indent.

    When using a hanging indent these considerations should be applied:
    - there should be no arguments on the first line, and
    - further indentation should be used to clearly distinguish itself
      as a continuation line.

    Okay: a = (\n)
    E123: a = (\n    )

    Okay: a = (\n    42)
    E121: a = (\n   42)
    E122: a = (\n42)
    E123: a = (\n    42\n    )
    E124: a = (24,\n     42\n)
    E125: if (\n    b):\n    pass
    E126: a = (\n        42)
    E127: a = (24,\n      42)
    E128: a = (24,\n    42)
    E129: if (a or\n    b):\n    pass
    E131: a = (\n    42\n 24)
    r   r   r   rF   NrÒ   rt   Fr   z>>> r   z... z]})z6E124 closing bracket does not match visual indentationz+E133 closing bracket is missing indentationTz7E128 continuation line under-indented for visual indentzIE123 closing bracket does not match indentation of opening bracket's line)ÚE122z missing indentation or outdented)ÚE127zover-indented for visual indent)ÚE131zunaligned for hanging indent)ÚE126z over-indented for hanging indent)ÚE121z!under-indented for hanging indentz%s continuation line %szbracket depth z indent to )ÚassertÚraiserB   r<   ú([{z seen, col z, visual min = ú)]}zE129 visually indented linezE125 continuation linez(%s with same indent as next logical line)rÕ   r   r|   ÚNEWLINEr–   rÇ   ÚOPÚreversedÚgetrÔ   ÚNLÚCOMMENTÚSTRINGÚFSTRING_STARTrµ   Úappendr}   ÚpopÚrangeÚlist)(rH   rÍ   r˜   Úhang_closingrn   rÖ   r�   ÚverboseÚ	first_rowÚnrowsÚindent_nextÚrowÚdepthÚvalid_hangsÚparensÚ
rel_indentÚ	open_rowsÚhangsÚindent_chancesÚlast_indentÚvisual_indentÚlast_token_multilinero   Ú
token_typer¶   r´   rÅ   r�   ÚnewlineÚclose_bracketÚopen_rowÚhangÚhanging_indentÚerrorrš   ÚdÚindÚidxÚposr¸   s(                                           r7   Úcontinued_indentationr     s  è è € ð: �q”	˜!”˜Q”€IØ��r”
˜1”˜aÔ Ñ  9Ñ,€EØð ˆu˜ŠzˆzØˆð ×'Ò'¨Ñ,Ô,€Kà€O€Cˆ%Ø$/°4Ò$7Ð$7�;�.�.Ø˜;¨™?Ð+ð ð ˆS�5‰[€Fà��u‘€Jà��€IàˆF€Eà€NØ˜”)˜A”,€KØ€MØ Ðà˜!ŒnÐ€FØ�!‚|€|Ýˆf�v˜a”y ”|×*Ò*Ñ,Ô,Ñ,Ñ-Ô-Ð-à.4ð F=ñ F=Ñ*ˆ
�D˜%  dà˜˜aœ 9Ñ,Ò,ˆØð 	MØ˜”(˜YÑ&ˆCØ.Ð.ÐL°:ÅWÐ3LˆGàñ C	?àˆKØ˜!Š|ˆ|Ý�f˜tŸ{š{™}œ}Ñ,Ñ-Ô-Ð-õ ,¨DÑ1Ô1°LÑ@ˆJ�s‰Oð (­8¬;Ò6ÐH¸4À5¸=ˆMõ % Y¨uÔ%5Ñ6Ô6ð ð �Ø! #”¨°HÔ)=Ñ=�Ø!%¨Ð!4�Ø!ð Ø�Eðà�UŒ|ð 8Ø"&¨%°¬,Ò"6�à!.Ð.ð :°4¸!²8ð :Ø+×/Ò/°°a´Ñ9Ô9ð ð ð +? ¨¤ð +?à˜”8˜v eœ}Ò,Ð,Ø ð #0ð 1ð 1ð 1ð 1øàð &? tð &?ð  ð OØÐ!NÐNÐNÐNÐNøØ˜”ð !? 5¨¤8¨f°U¬mÒ#;Ð#;Ø ¨Ð,Ð,à ð #>ð ?ð ?ð ?ð ?øàð ? Kð ?Ø$.¨s¤O°q¸;±Ò$FÐ$Fà ð D¨ð DØ ð #Cð Dð Dð Dð Dà#��e‘�Ø $Ð&Ð&à % a¤��u‘�Ø 4­ +Ð-Ð-ð ð ˜1’9�9ØF�E�EØ˜E”]ð 	LØE�E�EØ&ð L¨5°¬<ð LØB�E�Eà#'�E˜%‘LØ˜kÒ)Ð)Ø J˜˜à K˜ØÐ6¸Ñ>Ð>Ð>Ð>Ð>ð �3ŒKð 	)Ø¥8¤;µÔ0@Ð"AÐAÐAØ˜5”Mð Bà! !œHˆF�5‰MØ'+ˆN˜5 œ8Ñ$Ø˜!Š|ˆ|ÝÐC uÐCÐC¸¸q¼ÐCÐCÑDÔDÐDøà�HœO­XÔ-=½}ÐMÐMÐMÝ'*ˆN˜5 œ8Ñ$Ð$àð 	)˜Uð 	) tÐ/JÐ'JÐ'JØ)-ˆN˜3˜qœ6 A™:Ñ&Ð&àð 	)¨ð 	)°Eð 	)¸dÀdºl¸lØ)-ˆN˜3˜qœ6 A™:Ñ&Ð&Ø�SŠ[ˆ[˜T # a¤& ' 'œ]×2Ò2Ñ4Ô4ˆ[Ø�eÔ×#Ò# CÑ(Ô(Ð(ð �œÒ$Ñ$Ø�uˆ}ˆ}Ø˜‘
�Ø—’˜aÑ Ô Ð Ø—’˜TÑ"Ô"Ð"Ý�y‘>”> UÒ*Ð*Ø×$Ò$ RÑ(Ô(Ð(Ø˜%Ô ×'Ò'¨Ñ,Ô,Ð,Ø�s��”˜qÑ ��‘Ø˜a’<�<Ý�EØ ˜5˜5 %¨¤( ( (¨F°5¬M¨Mð;ñ <ô <ð <øà˜�� 5¨1¢9 9à$Ÿjšj™lœlÐ<¨k¸!¬n�Ø—	’	‘”�Ý˜u™œð &ð &�AØ˜a”y ;Ò.Ð.Ø$%˜˜q™	øÝ Ñ/Ô/ð 0ð 0�CØ˜kÒ)Ð)Ø*¨3Ð/øØ˜e a™i˜j˜jÐ)Ø˜‘
�Øð 9Ø48�N 6¨%¤=Ñ1Ý   b¨"Ñ-Ô-ð ð �CØ˜c”{ð Ø˜s˜˜œ qÑ(˜˜™Ø˜ðõ �v‘;”; %¨!¡)Ò+Ð+Ð+Ð+Ø�QŒx˜~Ð-Ð-à+/�˜u QœxÑ(à % a¤¨C°¬FÒ 2ÐØð 	=Ø-7¸¬_ˆJ�s˜1”v 	Ñ)Ñ*ùàð E•} TÑ*Ô*¨l¸[Ñ.HÒHÐHØ�QŒx˜ œ [Ñ0Ð1ˆØð 	,Ø0ˆDˆDà+ˆDØÐ=ÀÑDÐDÐDÐDÐDÐDÐDðEð EÐHÐHr9   c              #   ó®  K  — |d         \  }}}}}t          dt          |¦  «        ¦  «        D ]¦}||         \  }}}	}
}|t          j        k    r€|dv r||	|k    rv|t          j        k    s|dv rb|dk     s||dz
           d         dk    rGt          j        |¦  «        s3t          j        dk     s|dk    st          j	        |¦  «        s	|d	|z  fV — |}|}|
}Œ§d
S )a”  Avoid extraneous whitespace.

    Avoid extraneous whitespace in the following situations:
    - before the open parenthesis that starts the argument list of a
      function call.
    - before the open parenthesis that starts an indexing or slicing.

    Okay: spam(1)
    E211: spam (1)

    Okay: dict['key'] = list[index]
    E211: dict ['key'] = list[index]
    E211: dict['key'] = list [index]
    r   r   ú([r®   r   rC   ©r   é	   rÆ   zE211 whitespace before '%s'N)
rñ   r}   rÇ   rè   rÈ   rÉ   rÊ   ÚsysÚversion_infoÚissoftkeyword)rH   rÍ   Ú	prev_typeÚ	prev_textÚ__Úprev_endru   r  r¶   r´   rÅ   s              r7   Úwhitespace_before_parametersr  î  s  è è € ð  .4°A¬YÑ*€Iˆy˜"˜h¨Ý�q�#˜f™+œ+Ñ&Ô&ð ð ˆØ+1°%¬=Ñ(ˆ
�D˜%  bà�(œ+Ò%Ð%Ø�DˆLˆLØ�XÒÐØ�(œ-Ò'Ð'¨9¸Ð+=Ð+=à�QŠYˆY˜& ¨¡Ô+¨AÔ.°'Ò9Ð9åÔ! )Ñ,Ô,ð :õ Ô  6Ò)Ð)à˜VÒ#Ð#ÝÔ)¨)Ñ4Ô4ð $ð Ð9¸DÑ@Ð@Ð@Ð@Ð@Øˆ	Øˆ	Øˆˆð+ð r9   c              #   óš  K  — t                                | ¦  «        D ]­}|                     ¦   «         \  }}d|v r|                     d¦  «        dfV — n,t	          |¦  «        dk    r|                     d¦  «        dfV — d|v r|                     d¦  «        dfV — Œ�t	          |¦  «        dk    r|                     d¦  «        dfV — Œ®dS )	zžAvoid extraneous whitespace around an operator.

    Okay: a = 12 + 3
    E221: a = 4  + 5
    E222: a = 4 +  5
    E223: a = 4\t+ 5
    E224: a = 4 +\t5
    rt   r   zE223 tab before operatorz$E221 multiple spaces before operatorr   zE224 tab after operatorz#E222 multiple spaces after operatorN)ÚOPERATOR_REGEXr³   r¼   r´   r}   r½   s       r7   Úwhitespace_around_operatorr    së   è è € õ  ×(Ò(¨Ñ6Ô6ð Hð HˆØŸš™œ‰ˆ�à�6ˆ>ˆ>Ø—+’+˜a‘.”.Ð"<Ð<Ð<Ð<Ð<Ð<Ý�‰[Œ[˜1Š_ˆ_Ø—+’+˜a‘.”.Ð"HÐHÐHÐHÐHà�5ˆ=ˆ=Ø—+’+˜a‘.”.Ð";Ð;Ð;Ð;Ð;Ð;Ý�‰ZŒZ˜!Š^ˆ^Ø—+’+˜a‘.”.Ð"GÐGÐGÐGÐGøðHð Hr9   c              #   ó*  K  — d}t           j        }dx}}t           j        t           j        f}g }|D �]à\  }}	}
}}|t           j        k    r|	dv r|                     |	¦  «         nÎ|t          k    r|                     d¦  «         n­|t           j        k    r|	dk    r|                     d¦  «         n�|r|t           j        k    r|	dv r|                     ¦   «          nV|t          k    r|                     ¦   «          n6|d         dk    r*|t           j        k    r|	d	k    r|                     ¦   «          |t          v r�Œ|t           j        k    rk|	d
v rg||d         |d         dz   …         }|t          vrE|dvrA|	d	k    r|dd…         dgk    rn+|	d	k    r|dd…         ddgk    rn|	dk    r|dv rn	|
d|	›�fV — |r‡|
|k    r|dur|d         s|d         dfV — d}�n/|dk    r|	dv s|dk    r|	d	k    r�n|du s|d         r|dfV — n7|dk    r1d\  }}|dk    rd\  }}n|t          vrd\  }}|d         |›d|›d�fV — d}nÊ||v rÆ|�Ä|	d k    r/|dd…         dgk    s|dd…         d!gk    s|dd…         ddgk    rnt|	t          v rd}nh|	t          v rT|t           j        k    r|d"v s=|t           j        k    r/|t          vr&t          j        d#k     st          j        |¦  «        sd}n|	t"          v rd}|€	||
|k    f}n|r|
|k    r|dfV — d}|}|	}|}�ŒâdS )$aZ  Surround operators with the correct amount of whitespace.

    - Always surround these binary operators with a single space on
      either side: assignment (=), augmented assignment (+=, -= etc.),
      comparisons (==, <, >, !=, <=, >=, in, not in, is, is not),
      Booleans (and, or, not).

    - Each comma, semicolon or colon should be followed by whitespace.

    - If operators with different priorities are used, consider adding
      whitespace around the operators with the lowest priorities.

    Okay: i = i + 1
    Okay: submitted += 1
    Okay: x = x * 2 - 1
    Okay: hypot2 = x * x + y * y
    Okay: c = (a + b) * (a - b)
    Okay: foo(bar, key='word', *args, **kwargs)
    Okay: alpha[:-i]
    Okay: [a, b]
    Okay: (3,)
    Okay: a[3,] = 1
    Okay: a[1:4]
    Okay: a[:4]
    Okay: a[1:]
    Okay: a[1:4:2]

    E225: i=i+1
    E225: submitted +=1
    E225: x = x /2 - 1
    E225: z = x **y
    E225: z = 1and 1
    E226: c = (a+b) * (a-b)
    E226: hypot2 = x*x + y*y
    E227: c = a|b
    E228: msg = fmt%(errno, errmsg)
    E231: ['a','b']
    E231: foo(bar,baz)
    E231: [{'a':'b'}]
    FN>   Ú{ú(ú[ÚfÚlambdaÚl>   Ú}rÃ   ú]rF   rÒ   >   r­   rÒ   ú;r   r�   r!  éþÿÿÿr  r­   ú)]zE231 missing whitespace after Tr   z'E225 missing whitespace around operatorr   >   rÃ   r­   rÒ   rÃ   r   )ÚE226Ú
arithmeticr$   )ÚE228Úmodulo)ÚE227zbitwise or shiftz missing whitespace around z	 operatorr(   r   r®   r  )rÇ   rè   rÈ   rï   rî   rð   ÚFSTRING_ENDÚSKIP_COMMENTSÚ
WHITESPACEÚARITHMETIC_OPÚWS_NEEDED_OPERATORSÚUNARY_OPERATORSÚKEYWORDSr  r  rÉ   r  ÚWS_OPTIONAL_OPERATORS)rH   rÍ   Ú
need_spacer  r  r  Úoperator_typesÚbrace_stackr  r¶   r´   rÅ   r�   Ú	next_charr¸   Úoptypes                   r7   Úmissing_whitespacer<  /  s‡  è è € ðT €JÝ”€IØÐ€I�Ý”k¥8¤=Ð1€NØ€KØ.4ð oñ oÑ*ˆ
�D˜%  dØ�œÒ$Ð$¨°Ð)@Ð)@Ø×Ò˜tÑ$Ô$Ð$Ð$Ø�=Ò(Ð(Ø×Ò˜sÑ#Ô#Ð#Ð#Ø�8œ=Ò(Ð(¨T°XÒ-=Ð-=Ø×Ò˜sÑ#Ô#Ð#Ð#Øð 
	"Ø�Xœ[Ò(Ð(¨T°_Ð-DÐ-DØ—’Ñ!Ô!Ð!Ð!Ø�{Ò*Ð*Ø—’Ñ!Ô!Ð!Ð!à ”O sÒ*Ð*Ø¥(¤+Ò-Ð-Ø˜C’K�Kà—’Ñ!Ô!Ð!à�Ð&Ð&Ùà�œÒ$Ð$¨°Ð)@Ð)@Ø˜S œV C¨¤F¨Q¡JÐ.Ô/ˆIØ¥
Ð*Ð*¨yÀÐ/FÐ/Fà˜3’;�; ;¨r¨s¨sÔ#3¸°uÒ#<Ð#<Øà˜S’[�[ [°°°Ô%5¸#¸s¸Ò%CÐ%CØà˜S’[�[ Y°$Ð%6Ð%6ØàÐ!JÀ$Ð!JÐ!JÐJÐJÐJÐJàð G	#Ø˜Ò Ð à TÐ)Ð)°*¸Q´-Ð)Ø% aœ=ØDðFð Fð Fð Fà"�
‘
ð  Ò$Ð$¨°Ð)@Ð)@ð  Ò$Ð$¨°ª¨ñ à Ð%Ð%¨°A¬Ð%à"Ð$MÐMÐMÐMÐMÐMØ $Ò&Ð&Ø#7‘L�D˜&Ø  CÒ'Ð'Ø'7™˜˜f˜fØ"­-Ð7Ð7Ø'A™˜˜fØ% aœ=Ø37°4°4¸¸¸ð+Að Bð Bð Bð Bà"�
�
Ø˜>Ð)Ð)¨hÐ.Bà˜C’K�Kà# B C CÔ(¨S¨EÒ1Ð1à# B C CÔ(¨S¨EÒ1Ð1à# B C CÔ(¨S°#¨JÒ6Ð6ð ØÕ,Ð,Ð,Ø!�
�
Ø�Ð(Ð(ð ¥¤Ò+Ð+°	¸UÐ0BÐ0BØ¥¤Ò,Ð,Ø¥XÐ-Ð-ÝÔ(¨6Ò1Ð1Ý#Ô1°)Ñ<Ô<ð 2ð "&�JøØÕ.Ð.Ð.Ø!�
àÐ!ð '¨°Ò(9Ð:�
�
Øð # ¨Ò 1Ð 1àÐ IÐIÐIÐIÐIØ"�
Øˆ	Øˆ	Øˆ‰ð_oð or9   c              #   ó(  K  — | }t                                |¦  «        D ]r}|                     ¦   «         dz   }d|                     ¦   «         v r"|d|                     ¦   «         d         z  fV — ŒQ|d|                     ¦   «         d         z  fV — ŒsdS )z¬Avoid extraneous whitespace after a comma or a colon.

    Note: these checks are disabled by default

    Okay: a = (1, 2)
    E241: a = (1,  2)
    E242: a = (1,\t2)
    r   rt   zE242 tab after '%s'r   zE241 multiple spaces after '%s'N)ÚWHITESPACE_AFTER_COMMA_REGEXr³   r´   rl   )rH   r�   Úmr·   s       r7   Úwhitespace_around_commar@  Ð  s¨   è è € ð €DÝ)×2Ò2°4Ñ8Ô8ð Jð JˆØ—’‘	”	˜A‘ˆØ�1—7’7‘9”9ÐÐØÐ.°·²±´¸1´Ñ=Ð=Ð=Ð=Ð=Ð=àÐ:¸Q¿WºW¹Y¼YÀq¼\ÑIÐIÐIÐIÐIÐIðJð Jr9   c              #   óÚ  K  — d}d}d}d}d}t          t                               | ¦  «        ¦  «        }d}d}	|D ]°\  }
}}}}|
t          j        k    rŒ|rd}||k    r||fV — |rd}||k    r||	fV — |
t          j        k    re|dv r|dz  }nW|dv r|dz  }nM|r|d	k    r	|dk    rd
}n<|dk    r	|dk    rd}n-|r+|dk    r%|r|dk    rd
}||k    r||	fV — nd
}||k    r||fV — |sd}|}Œ±dS )ac  Don't use spaces around the '=' sign in function arguments.

    Don't use spaces around the '=' sign when used to indicate a
    keyword argument or a default parameter value, except when
    using a type annotation.

    Okay: def complex(real, imag=0.0):
    Okay: return magic(r=real, i=imag)
    Okay: boolean(a == b)
    Okay: boolean(a != b)
    Okay: boolean(a <= b)
    Okay: boolean(a >= b)
    Okay: def foo(arg: int = 42):
    Okay: async def foo(arg: int = 42):

    E251: def complex(real, imag = 0.0):
    E251: return magic(r = real, i = imag)
    E252: def complex(real, image: float=0.0):
    r   FNz8E251 unexpected spaces around keyword / parameter equalsz/E252 missing whitespace around parameter equalsr  r   r)  rÒ   Tr­   r(   )Úboolr    rk   rÇ   rë   rè   )rH   rÍ   rû   Úno_spaceÚrequire_spacer  Úannotated_func_argÚin_defÚmessageÚmissing_messager  r¶   r´   rÅ   r�   s                  r7   Ú(whitespace_around_named_parameter_equalsrI  ã  s·  è è € ð* €FØ€HØ€MØ€HØÐÝÕ&×,Ò,¨\Ñ:Ô:Ñ;Ô;€FàH€GØG€Oà.4ð  ð  Ñ*ˆ
�D˜%  dØ�œÒ$Ð$ØØð 	*ØˆHØ˜Ò Ð Ø Ð)Ð)Ð)Ð)Øð 	2Ø!ˆMØ˜Ò Ð Ø Ð1Ð1Ð1Ð1Ø�œÒ$Ð$Ø�tˆ|ˆ|Ø˜!‘��Ø˜��Ø˜!‘��Øð 2˜D CšK˜K¨F°aªK¨KØ%)Ð"Ð"Ø˜1’� ¨¢ Ø%*Ð"Ð"Øð 2˜D CšK˜KØ%ð 2¨&°Aª+¨+Ø$(�MØ Ò(Ð(Ø'¨Ð9Ð9Ð9Ð9øà#�HØ Ò(Ð(Ø'¨Ð1Ð1Ð1Ð1Øð +Ø%*Ð"àˆˆðA ð  r9   c              #   ó  K  — d}|D ]ý\  }}}}}|t           j        k    rÓ|d|d         …                              ¦   «         }|r-|d         |d         k    r|d         |d         dz   k     r|dfV — |                     d¦  «        \  }	}
}|	dvo|	                     d	¦  «        dd…         pd	}|r|s|dd…         t
          v r|d
fV — ŒÁ|r'|dk    s|d         dk    r|d	k    r|dfV — Œâ|r|dfV — Œë|t           j        k    r|}ŒþdS )uï  Separate inline comments by at least two spaces.

    An inline comment is a comment on the same line as a statement.
    Inline comments should be separated by at least two spaces from the
    statement. They should start with a # and a single space.

    Each line of a block comment starts with a # and one or multiple
    spaces as there can be indented text inside the comment.

    Okay: x = x + 1  # Increment x
    Okay: x = x + 1    # Increment x
    Okay: # Block comments:
    Okay: #  - Block comment list
    Okay: # Â - Block comment list
    E261: x = x + 1 # Increment x
    E262: x = x + 1  #Increment x
    E262: x = x + 1  #  Increment x
    E262: x = x + 1  # Â Increment x
    E265: #Block comment
    E266: ### Block comment
    )r   r   Nr   r   r   z.E261 at least two spaces before inline commentr3   z#:r‰   z*E262 inline comment should start with '# 'ú!z)E265 block comment should start with '# 'z+E266 too many leading '#' for block comment)rÇ   rì   r—   Ú	partitionr¡   r1  rë   )rH   rÍ   r  r  r¶   r´   rÅ   r�   Úinline_commentÚsymbolÚspÚcommentÚ
bad_prefixs                r7   Úwhitespace_before_commentrR  %  s’  è è € ð. €HØ.4ð ð Ñ*ˆ
�D˜%  dØ�Ô)Ò)Ð)Ø! ) 5¨¤8 )œ_×2Ò2Ñ4Ô4ˆNØð MØ˜A”; %¨¤(Ò*Ð*¨u°Q¬x¸(À1¼+È¹/Ò/IÐ/IØ#ØKðMð Mð Mð Mà"&§.¢.°Ñ"5Ô"5ÑˆF�B˜Ø tÐ+ÐO°·²¸sÑ1CÔ1CÀBÀQÀBÔ1GÐ1NÈ3ˆJØð OØð N ¨¨!¨¤µ
Ð!:Ð!:ØÐ!MÐMÐMÐMÐMøØð O ¨sÒ!2Ð!2°e¸A´hÀ²l°lØ Ò$Ð$ØÐ!LÐLÐLÐLÐLÐLØð OØÐ!NÐNÐNÐNÐNøØ�8œ;Ò&Ð&ØˆHøð%ð r9   c              #   óž   K  — | }|                      d¦  «        r/|                     d¦  «        }d|k     rd|d|…         vr|dfV — dS dS dS dS )a   Place imports on separate lines.

    Okay: import os\nimport sys
    E401: import sys, os

    Okay: from subprocess import Popen, PIPE
    Okay: from myclas import MyClass
    Okay: from foo.bar.yourclass import YourClass
    Okay: import myclass
    Okay: import foo.bar.yourclass
    úimport r­   rF   r'  Nz!E401 multiple imports on one line)r‹   Úfind)rH   r�   r·   s      r7   Úimports_on_separate_linesrV  R  sx   è è € ð €DØ‡‚�yÑ!Ô!ð =Ø—	’	˜#‘”ˆØ�Š:ˆ:˜# T¨&¨5¨&¤\Ð1Ð1ØÐ<Ð<Ð<Ð<Ð<Ð<Ð<ð=ð =àˆ:Ð1Ð1r9   c              #   óœ  ‡K  — d„ }d}|rdS | sdS |rdS | Š‰                      d¦  «        s‰                      d¦  «        r|                     dd¦  «        rdV — dS dS t          j        t          ‰¦  «        rdS t          ˆfd	„|D ¦   «         ¦  «        rdS  |‰¦  «        r$|                     d
d¦  «        rd|d<   dS d|d
<   dS d|d<   dS )aë  Place imports at the top of the file.

    Always put imports at the top of the file, just after any module
    comments and docstrings, and before module globals and constants.

    Okay: import os
    Okay: # this is a comment\nimport os
    Okay: '''this is a module docstring'''\nimport os
    Okay: r'''this is a module docstring'''\nimport os
    E402: a=1\nimport os
    E402: 'One string'\n"Two string"\nimport os
    E402: a=1\nfrom sys import x

    Okay: if x:\n    import os
    c                 óŠ   — | d         dv r
| dd …         } | r| d         dv r
| dd …         } | o| d         dk    p| d         dk    S )Nr   ÚuUbBr   ÚrRú"r±   rL   )r�   s    r7   Úis_string_literalz8module_imports_on_top_of_file.<locals>.is_string_literalx  s_   € Ø�Œ7�fÐÐØ˜˜˜”8ˆDØð 	�D˜”G˜t�O�OØ˜˜˜”8ˆDØÐ:˜˜aœ CšÐ9¨4°¬7°cª>Ð:r9   )r?   r@   r>   rA   rB   r<   r=   NrT  zfrom Úseen_non_importsF)r   z+E402 module level import not at top of filec              3   óB   •K  — | ]}‰                      |¦  «        V — Œd S ©N©r‹   )r5   Úkwr�   s     €r7   r8   z0module_imports_on_top_of_file.<locals>.<genexpr>Ž  s/   øè è € Ð<Ð< RˆT�_Š_˜RÑ Ô Ð<Ð<Ð<Ð<Ð<Ð<r9   Úseen_docstringT)r‹   rê   Úrerk   ÚDUNDER_REGEXÚany)rH   r˜   Úchecker_stater�   r\  Úallowed_keywordsr�   s         @r7   Úmodule_imports_on_top_of_filerh  f  sS  øè è € ð$;ð ;ð ;ðBÐð ð ØˆØð ØˆØð ØˆØ€DØ‡‚�yÑ!Ô!ð 1 T§_¢_°WÑ%=Ô%=ð 1Ø×ÒÐ/°Ñ7Ô7ð 	CØBÐBÐBÐBÐBÐBð	Cð 	Cå	Œ•, Ñ	%Ô	%ð 1ØˆÝ	Ð<Ð<Ð<Ð<Ð+;Ð<Ñ<Ô<Ñ	<Ô	<ð 1ð 	ˆØ	Ð	˜4Ñ	 Ô	 ð 1ð ×ÒÐ-¨uÑ5Ô5ð 	3Ø04ˆMÐ,Ñ-Ð-Ð-à.2ˆMÐ*Ñ+Ð+Ð+à,0ˆÐ(Ñ)Ð)Ð)r9   c              #   óâ  K  — | }t          |¦  «        dz
  }|                     d¦  «        }d}d„ dD ¦   «         }d|cxk     r|k     �rXn �nTt          |||…         |¦  «         |d         |d         k    rÿ|d	         |d
         k    rí|d         |d         k    rÛ||dz            dk    rÌt                               |d|¦  «        }|ro|d|                     ¦   «         …                              ¦   «         }|dd…         dk    r2|dd…                              ¦   «                              ¦   «         rdV — njt           
                    |¦  «        rdV — n t           
                    |¦  «        r|dfV — |}|                     d|dz   ¦  «        }d|cxk     r|k     �°Rn |                     d¦  «        }d|k     r4||k     r|dfV — n|dfV — |                     d|dz   ¦  «        }d|k     °2dS dS )až  Compound statements (on the same line) are generally
    discouraged.

    While sometimes it's okay to put an if/for/while with a small body
    on the same line, never do this for multi-clause statements.
    Also avoid folding such long lines!

    Always use a def statement instead of an assignment statement that
    binds a lambda expression directly to a name.

    Okay: if foo == 'blah':\n    do_blah_thing()
    Okay: do_one()
    Okay: do_two()
    Okay: do_three()

    E701: if foo == 'blah': do_blah_thing()
    E701: for x in lst: total += x
    E701: while t < 10: t = delay()
    E701: if foo == 'blah': do_blah_thing()
    E701: else: do_non_blah_thing()
    E701: try: something()
    E701: finally: cleanup()
    E701: if foo == 'blah': one(); two(); three()
    E702: do_one(); do_two(); do_three()
    E703: do_four();  # useless semicolon
    E704: def f(x): return 2*x
    E731: f = lambda x: 2*x
    r   rÒ   r   c                 ó   — i | ]}|d “ŒS )r   rL   )r5   rq   s     r7   ú
<dictcomp>z'compound_statements.<locals>.<dictcomp>¿  s   € Ð+Ð+Ð+˜$ˆd�AÐ+Ð+Ð+r9   z{}[]()rF   r  r%  r!  r&  r   rÃ   r(   N)r   z1E731 do not assign a lambda expression, use a def)r   z*E704 multiple statements on one line (def)z,E701 multiple statements on one line (colon)r'  z0E702 multiple statements on one line (semicolon)z$E703 statement ends with a semicolon)r}   rU  Úupdate_countsÚLAMBDA_REGEXÚsearchr´   r|   r—   Úisidentifierr    rk   Ú!STARTSWITH_INDENT_STATEMENT_REGEX)rH   r�   Ú	last_charr·   Ú
prev_foundÚcountsÚ	lambda_kwr¾   s           r7   Úcompound_statementsru  �  sa  è è € ð< €DÝ�D‘	”	˜A‘€IØ�IŠI�c‰NŒN€EØ€JØ+Ð+ (Ð+Ñ+Ô+€FØ
ˆuÐ
 Ð
 Ò
 Ð
 �yÒ
 Ñ
 Ð
 Ð
 Ñ
 Ý�d˜: eÐ+Ô,¨fÑ5Ô5Ð5à�s”˜v cœ{Ò*Ð*Ø�s”˜v cœ{Ò*Ð*Ø�s”˜v cœ{Ò*Ð*Ø�U˜Q‘Y” 3Ò&Ð&å$×+Ò+¨D°!°UÑ;Ô;ˆIØð ØÐ0˜yŸšÑ0Ô0Ð0Ô1×8Ò8Ñ:Ô:�Ø˜"˜#˜#”; #Ò%Ð%¨&°°"°¬+×*;Ò*;Ñ*=Ô*=×*JÒ*JÑ*LÔ*LÐ%ð%ð %ð %ð %àÝ#×)Ò)¨$Ñ/Ô/ð LØEÐEÐEÐEÐEÝ2×8Ò8¸Ñ>Ô>ð LØÐKÐKÐKÐKÐKØˆ
Ø—	’	˜#˜u q™yÑ)Ô)ˆð) ˆuÐ
 Ð
 Ò
 Ð
 �yÒ
 Ñ
 Ð
 Ð
 ð* �IŠI�c‰NŒN€EØ
ˆuŠ*ˆ*Ø�9ÒÐØÐKÐKÐKÐKÐKÐKàÐ?Ð?Ð?Ð?Ð?Ø—	’	˜#˜u q™yÑ)Ô)ˆð ˆuŠ*ˆ*ˆ*ˆ*ˆ*ˆ*r9   c              #   óÆ  K  — dx}x}}d}d}|D ]Ñ\  }}}	}
}|t           j        k    rd}|	d         |k    r|r
|r|s|dfV — |
d         |k    rh|                     d¦  «                             d¦  «        r3|
d         t	          |                     ¦   «         d         ¦  «        d	z
  f}nd}|
d         x}}n|	d         }|t           j        k    r|d
v r|d	z  }ŒÈ|dv r|d	z  }ŒÒdS )aB  Avoid explicit line join between brackets.

    The preferred way of wrapping long lines is by using Python's
    implied line continuation inside parentheses, brackets and braces.
    Long lines can be broken over multiple lines by wrapping expressions
    in parentheses.  These should be used in preference to using a
    backslash for line continuation.

    E502: aaa = [123, \\n       123]
    E502: aaa = ("bbb " \\n       "ccc")

    Okay: aaa = [123,\n       123]
    Okay: aaa = ("bbb "\n       "ccc")
    Okay: aaa = "bbb " \\n    "ccc"
    Okay: aaa = 123  # \\
    r   FNTz0E502 the backslash is redundant between bracketsr�   ú\rF   r   rå   ræ   )rÇ   rì   r|   rÕ   r}   Ú
splitlinesrè   )rH   rÍ   Ú
prev_startr  rû   rP  Ú	backslashr  r¶   r´   rÅ   r�   s               r7   Úexplicit_line_joinr{  Þ  s7  è è € ð$ &'Ð&€JÐ&�˜FØ€GØ€IØ.4ð ð Ñ*ˆ
�D˜%  dØ�Ô)Ò)Ð)ØˆGØ�Œ8�zÒ!Ð! fÐ!°Ð!À7Ð!ØÐOÐOÐOÐOÐOØˆqŒ6�XÒÐØ�{Š{˜6Ñ"Ô"×+Ò+¨DÑ1Ô1ð !Ø  œV¥S¨¯ªÑ):Ô):¸2Ô)>Ñ%?Ô%?À!Ñ%CÐD�	�	à �	Ø$'¨¤FÐ*ˆJ˜˜à˜qœˆJØ�œÒ$Ð$Ø�uˆ}ˆ}Ø˜!‘��Ø˜��Ø˜!‘�øð#ð r9   z()[]{},:.;@=%~)z...c                 ó<   — | t           j        k    p|dv o|t          vS )N>   r,   r)   )rÇ   rè   Ú_SYMBOLIC_OPS)r  r¶   s     r7   Ú_is_binary_operatorr~    s-   € à•h”kÒ!ð 	Ø�Ððð 	•MÐ!ð	r9   c              #   ó²   K  — d}d}d}d}| D ]I\  }}}}}	|t           j        k    rŒd|v sd|v r|t           j        k    rd}Œ4|||||||fV — |dv }d}|}|}ŒJdS )z³Private function to reduce duplication.

    This factors out the shared details between
    :func:`break_before_binary_operator` and
    :func:`break_after_binary_operator`.
    FTNrx   ry   z([{,;)rÇ   rì   rí   )
rÍ   Ú
line_breakÚunary_contextÚprevious_token_typeÚprevious_textr  r¶   r´   rÅ   r�   s
             r7   Ú_break_around_binary_operatorsr„    s¶   è è € ð €JØ€MàÐØ€MØ.4ð !ð !Ñ*ˆ
�D˜%  dØ�Ô)Ò)Ð)ØØ�DˆLˆL˜D D˜L˜L¨j½H¼OÒ.KÐ.KØˆJˆJà˜tÐ%8¸-Ø˜}¨eð5ð 5ð 5ð 5à  G˜OˆMØˆJØ",ÐØ ˆMˆMð!ð !r9   c              #   ó–   K  — t          |¦  «        D ]6}|\  }}}}}}}	t          ||¦  «        r|r|st          ||¦  «        s|	dfV — Œ7dS )aâ  
    Avoid breaks before binary operators.

    The preferred place to break around a binary operator is after the
    operator, not before it.

    W503: (width == 0\n + height == 0)
    W503: (width == 0\n and height == 0)
    W503: var = (1\n       & ~2)
    W503: var = (1\n       / -2)
    W503: var = (1\n       + -1\n       + -2)

    Okay: foo(\n    -x)
    Okay: foo(x\n    [])
    Okay: x = '''\n''' + ''
    Okay: foo(x,\n    -y)
    Okay: foo(x,  # comment\n    -y)
    z&W503 line break before binary operatorN©r„  r~  )
rH   rÍ   Úcontextr  r¶   r‚  rƒ  r€  r�  r´   s
             r7   Úbreak_before_binary_operatorrˆ  0  s—   è è € õ( 2°&Ñ9Ô9ð Bð Bˆà-4ñ	+ˆ�TÐ.°Ø	�] EÝ 
¨DÑ1Ô1ð 	B°jð 	BØ!ð	Bå'Ð(;Ø(5ñ7ô 7ð	Bð ÐAÐAÐAÐAÐAøðBð Br9   c              #   óž   K  — d}t          |¦  «        D ]8}|\  }}}}}}	}
t          ||¦  «        r|r|	st          ||¦  «        s|dfV — |
}Œ9dS )aF  
    Avoid breaks after binary operators.

    The preferred place to break around a binary operator is before the
    operator, not after it.

    W504: (width == 0 +\n height == 0)
    W504: (width == 0 and\n height == 0)
    W504: var = (1 &\n       ~2)

    Okay: foo(\n    -x)
    Okay: foo(x\n    [])
    Okay: x = '''\n''' + ''
    Okay: x = '' + '''\n'''
    Okay: foo(x,\n    -y)
    Okay: foo(x,  # comment\n    -y)

    The following should be W504 but unary_context is tricky with these
    Okay: var = (1 /\n       -2)
    Okay: var = (1 +\n       -1 +\n       -2)
    Nz%W504 line break after binary operatorr†  )rH   rÍ   ry  r‡  r  r¶   r‚  rƒ  r€  r�  r´   s              r7   Úbreak_after_binary_operatorrŠ  N  sœ   è è € ð. €JÝ1°&Ñ9Ô9ð ð ˆà-4ñ	+ˆ�TÐ.°Ø	�] EÝÐ 3°]ÑCÔCð 	FØð	Fà!ð	Fõ (¨
°DÑ9Ô9ð	Fð ÐEÐEÐEÐEÐEØˆ
ˆ
ðð r9   c              #   óx  K  — |rdS t                                | ¦  «        D ]˜}|                     d¦  «        p|                     d¦  «        }|                     d¦  «        dk    }d|rdnd|z   z  }|d	v rd
}nd}|dk    r|p|dk    o| }|d|rdndz  z  }|                     d¦  «        |›d|›d|›�fV — Œ™dS )aX  Comparison to singletons should use "is" or "is not".

    Comparisons to singletons like None should always be done
    with "is" or "is not", never the equality operators.

    Okay: if arg is not None:
    E711: if arg != None:
    E711: if None == arg:
    E712: if arg == True:
    E712: if False == arg:

    Also, beware of writing if x when you really mean if x is not None
    -- e.g. when testing whether a variable or argument that defaults to
    None was set to some other value.  The other value might have a type
    (such as a container) that could be false in a boolean context!
    Nr   r   r   r'   z'if cond is %s:'rZ   znot )r   ÚE711ÚE712r   r   z or 'if %scond:'z comparison to z should be )ÚCOMPARE_SINGLETON_REGEXr³   rl   r´   )rH   r�   rk   Ú	singletonÚsameÚmsgr¸   Únonzeros           r7   Úcomparison_to_singletonr“  q  s  è è € ð$ ð Øˆå(×1Ò1°,Ñ?Ô?ð 7ð 7ˆØ—K’K ‘N”NÐ4 e§k¢k°!¡n¤nˆ	Ø—’˜A‘” $Ò&ˆà ¨4Ð%; R R°V¸yÑ$HÑIˆØ˜	Ð!Ð!ØˆDˆDàˆDØ! VÒ+Ð4°ð ;Ø! WÒ,Ð9°T°ð àÐ%¨wÐ)B¨¨¸FÑCÑCˆCØ�kŠk˜!‰nŒnØ $   i i i°°ð 6ð 7ð 	7ð 	7ð 	7ð 	7ð7ð 7r9   c              #   ó¾   K  — t                                | ¦  «        }|r>|                     d¦  «        }|                     d¦  «        dk    r|dfV — dS |dfV — dS dS )aG  Negative comparison should be done using "not in" and "is not".

    Okay: if x not in y:\n    pass
    Okay: assert (X in Y or X is Z)
    Okay: if not (X in Y):\n    pass
    Okay: zz = x is not y
    E713: Z = not X in Y
    E713: if not X.B in Y:\n    pass
    E714: if not X is Y:\n    pass
    E714: Z = not X.B is Y
    r   r   r*   z+E713 test for membership should be 'not in'z0E714 test for object identity should be 'is not'N)ÚCOMPARE_NEGATIVE_REGEXrn  r´   rl   )rH   rk   r  s      r7   Úcomparison_negativer–  –  s„   è è € õ #×)Ò)¨,Ñ7Ô7€EØð JØ�kŠk˜!‰nŒnˆØ�;Š;�q‰>Œ>˜TÒ!Ð!ØÐDÐDÐDÐDÐDÐDÐDàÐIÐIÐIÐIÐIÐIÐIðJð Jr9   c              #   óê   K  — t                                | ¦  «        }|rR|sR|                     d¦  «        }|r|                     ¦   «         r|t          vrdS |                     ¦   «         dfV — dS dS dS )zÏObject type comparisons should `is` / `is not` / `isinstance()`.

    Do not compare types directly.

    Okay: if isinstance(obj, int):
    Okay: if type(obj) is int:
    E721: if type(obj) == type(1):
    r   NzgE721 do not compare types, for exact checks use `is` / `is not`, for instance checks use `isinstance()`)ÚCOMPARE_TYPE_REGEXrn  rl   ro  rÌ   r´   )rH   r�   rk   Úinsts       r7   Úcomparison_typerš  ¬  s¥   è è € õ ×%Ò% lÑ3Ô3€EØð 
�Tð 
Ø�{Š{˜1‰~Œ~ˆØð 	�D×%Ò%Ñ'Ô'ð 	¨D½
Ð,BÐ,BØˆFà�KŠK‰MŒMð5ð
ð 	
ð 	
ð 	
ð 	
ð 	
ð	
ð 
ð 
ð 
r9   c              #   ó~   K  — |rdS t                                | ¦  «        }|r|                     ¦   «         dfV — dS dS )zœWhen catching exceptions, mention specific exceptions when
    possible.

    Okay: except Exception:
    Okay: except BaseException:
    E722: except:
    NzE722 do not use bare 'except')ÚBLANK_EXCEPT_REGEXrk   r´   )rH   r�   rk   s      r7   Úbare_exceptr�  Â  sZ   è è € ð ð Øˆå×$Ò$ \Ñ2Ô2€EØð =Ø�kŠk‰mŒmÐ<Ð<Ð<Ð<Ð<Ð<Ð<ð=ð =r9   c              #   ó  K  — d}d}d}d}|d         \  }}}}	}
t          dt          |¦  «        ¦  «        D ]Ô}||         \  }}}}}dx}}|dv r|}d}n|�|dk    r||k    rd}|d	v r|dz  }n	|d
v r|dz  }|dk    s|dk    r|dk    r||v r|}|}|dv r||v r|}|}|�7|s5|t          |¦  «        dz
  k     r||dz            d         dv r|dv r||v r|}|}|dk    r||v r	|d|z  fV — |dk    r||v r	|d|z  fV — |r	|d|z  fV — |}|}ŒÕdS )aÇ  Never use the characters 'l', 'O', or 'I' as variable names.

    In some fonts, these characters are indistinguishable from the
    numerals one and zero. When tempted to use 'l', use 'L' instead.

    Okay: L = 0
    Okay: o = 123
    Okay: i = 42
    E741: l = 0
    E741: O = 123
    E741: I = 42

    Variables can be bound in several other contexts, including class
    and function definitions, lambda functions, 'global' and 'nonlocal'
    statements, exception handlers, and 'with' and 'for' statements.
    In addition, we have a special handling for function parameters.

    Okay: except AttributeError as o:
    Okay: with lock as L:
    Okay: foo(l=12)
    Okay: foo(l=I)
    Okay: for a in foo(l=12):
    Okay: lambda arg: arg * l
    Okay: lambda a=l[I:5]: None
    Okay: lambda x=a.I: None
    Okay: if l >= 12:
    E741: except AttributeError as O:
    E741: with lock as l:
    E741: global I
    E741: nonlocal l
    E741: def foo(l):
    E741: def foo(l=12):
    E741: l = foo(l=12)
    E741: for l in range(10):
    E741: [l for l in lines if l]
    E741: lambda l: None
    E741: lambda a=x[1:5], l: None
    E741: lambda **l:
    E741: def f(**l):
    E742: class I(object):
    E743: def l(x):
    NFr   )r$  ÚOÚIr   >   r:   r#  rÒ   Trå   ræ   r-   r(   )Úasr;   ÚglobalÚnonlocalz:,=)>   r   r#  r   r­   r   rC   z$E742 ambiguous class definition '%s'r:   z'E743 ambiguous function definition '%s'z!E741 ambiguous variable name '%s')rñ   r}   )rH   rÍ   Ú
func_depthÚ
seen_colonÚbrace_depthÚidents_to_avoidr  r  ry  r  r  ru   r  r¶   r´   rÅ   r�   Úidentr  s                      r7   Úambiguous_identifierr©  Ó  s  è è € ðX €JØ€JØ€KØ%€OØ5;¸A´YÑ2€Iˆy˜* h°Ý�q�#˜f™+œ+Ñ&Ô&ð 0ð 0ˆØ-3°E¬]Ñ*ˆ
�D˜%  dØÐˆ�àÐ)Ð)Ð)Ø$ˆJØˆJˆJàÐ&Ø˜’�Ø˜zÒ)Ð)àˆJà�5ˆ=ˆ=Ø˜1ÑˆKˆKØ�Uˆ]ˆ]Ø˜1ÑˆKà�4Š<ˆ<˜D CšK˜K¨K¸1Ò,<Ð,<Ø˜OÐ+Ð+Ø!�Ø �ð Ð;Ð;Ð;Ø�Ð&Ð&Ø�Ø�ð Ð&Øð 'à�˜F™œ a™Ò'Ð'¨F°5¸1±9Ô,=¸aÔ,@ÀFÐ,JÐ,JØÐ<Ð<Ð<Ø˜Ð'Ð'àˆEØˆCØ˜ÒÐØ�Ð&Ð&ØÐCÀdÑJÐJÐJÐJÐJØ˜ÒÐØ�Ð&Ð&ØÐFÈÑMÐMÐMÐMÐMØð 	CØÐ:¸UÑBÐBÐBÐBÐBØˆ	Øˆ
ˆ
ða0ð 0r9   c           	   #   óÎ  K  — |rdS g d¢}g }|D �]T\  }}}}}|t           j        t          hv rH|                     |d|                     |d         ¦  «        …                              ¦   «         ¦  «         |t           j        t          hv r°d|d         vr¦|\  }	}
|                     d¦  «        }|dk    r†|dz  }||         |vrX|	|                     dd|¦  «        z   }||	k    r|
|z   }n|| 	                    dd|¦  «        z
  dz
  }||dz
  fd	||         › d
�fV — |                     d|dz   ¦  «        }|dk    °†|t           j        t          hv r|                     ¦   «          �ŒVdS )zsInvalid escape sequences are deprecated in Python 3.6.

    Okay: regex = r'\.png$'
    W605: regex = '\.png$'
    N)rx   rw  r±   r[  ÚaÚbr"  ÚnÚrÚtÚvÚ0Ú1Ú2Ú3Ú4Ú5Ú6Ú7ÚxÚNÚuÚUrF   r®  rw  r   r   rx   zW605 invalid escape sequence '\r±   )rÇ   rí   rî   rï   ru   ÚlowerÚFSTRING_MIDDLErU  ÚcountÚrfindr/  rð   )rH   rÍ   r�   ÚvalidÚprefixesr  r¶   r´   Ú_Ú
start_lineÚ	start_colr  r�   Úcols                 r7   Ú#python_3000_invalid_escape_sequencerÇ  7  s½  è è € ð ð Øˆðð ð €Eð* €HØ)/ð ñ Ñ%ˆ
�D˜%  AØ�(œ/­=Ð9Ð9Ð9à�OŠO˜DÐ!6 $§*¢*¨T°"¬XÑ"6Ô"6Ð!6Ô7×=Ò=Ñ?Ô?Ñ@Ô@Ð@à�(œ/­>Ð:Ð:Ð:Ø˜( 2œ,Ð&Ð&Ø(-Ñ%�
˜IØ—i’i ‘o”o�Ø˜Q’h�hØ˜1‘H�CØ˜C”y¨Ð-Ð-Ø)¨D¯JªJ°t¸QÀÑ,DÔ,DÑD˜Ø :Ò-Ð-Ø"+¨c¡/˜C˜Cà"%¨¯
ª
°4¸¸CÑ(@Ô(@Ñ"@À1Ñ"D˜Cà! 3¨¡7˜OØK¸tÀC¼yÐKÐKÐKðð ð ð ð Ÿ)š) D¨#°©'Ñ2Ô2�Cð ˜Q’h�hð �(œ/­;Ð7Ð7Ð7Ø�LŠL‰NŒNˆNùð1ð r9   c              #   óÄ  K  — |�|rdS d}t          ¦   «         }|D ]D\  }}}}	}
|t                               t          j        g¦  «        vr|                     |
¦  «         ŒE|D �]|\  }}}}	}
|t          j        k    r|rŒ|t          j        t          j        fv �rC|�
|t          v �r7|
                     ¦   «         }t          |¦  «        D �]\  }}|d         |z   dk    r|
 
                    d¦  «        r  dS t          |¦  «        }|                     ¦   «         }|t          j        k    r5t          |¦  «        dk    r"|t          |d         ¦  «        z
  t          k     rŒ–t          |¦  «        dk    rK|dz   t          |¦  «        k     r5t          |¦  «        dk    r"|t          |d         ¦  «        z
  t          k     rŒô||k    r|d         |z   |f}|d||fz  fV — �Œ|}�Œ~dS )zÉLimit all doc lines to a maximum of 72 characters.

    For flowing long blocks of text (docstrings or comments), limiting
    the length to 72 characters is recommended.

    Reports warning W505
    Nr   r   rˆ   r   rF   z+W505 doc line too long (%d > %d characters))Úsetr0  ÚunionrÇ   rí   Úaddrì   ÚSKIP_TOKENSrx  rm   r‹   r}   rŒ   ÚMAX_DOC_LENGTH)rH   Úmax_doc_lengthr�   rÍ   Ú
prev_tokenÚ
skip_linesr  r¶   r´   rÅ   r�   r‚   Úline_numrG   r‘   r’   Ú	doc_errors                    r7   Úmaximum_doc_lengthrÓ  t  s'  è è € ð Ð ÐØˆà€JÝ‘”€Jà.4ð !ð !Ñ*ˆ
�D˜%  dØ�]×0Ò0µ(´/Ð1BÑCÔCÐCÐCØ�NŠN˜4Ñ Ô Ð øà.4ð  ñ  Ñ*ˆ
�D˜%  dà�œÒ(Ð(¨ZÐ(ØØ�(œ/­8Ô+;Ð<Ð<Ñ<àÐ! Zµ;Ð%>Ñ%>ØŸšÑ)Ô)�Ý/8¸Ñ/?Ô/?ð ;ñ ;Ñ+�H˜mØ˜Q”x (Ñ*¨aÒ/Ð/°D·O²OÀDÑ4IÔ4IÐ/Ø˜˜˜Ý  Ñ/Ô/�FØ*×0Ò0Ñ2Ô2�FØ!¥XÔ%5Ò5Ð5Ý ™KœK¨1Ò,Ð,Ø &­¨V°B¬Z©¬Ñ 8½>Ò IÐ IØ$Ý˜6‘{”{ aÒ'Ð'¨H°q©L½3¸u¹:¼:Ò,EÐ,EÝ ™KœK¨1Ò,Ð,Ø &­¨V°B¬Z©¬Ñ 8½>Ò IÐ IØ$Ø Ò.Ð.Ø%*¨1¤X°Ñ%8¸.Ð$I˜	Ø(ð +Aà"(¨.Ð!9ñ+:ð ;ð ;ð ;ð ;ùð  ˆ
‰
ð5 ð  r9   c                 óB  — 	 t          j        | ¦  «        5 }|                     ¦   «         cddd¦  «         S # 1 swxY w Y   dS # t          t          t
          f$ rC t          | d¬¦  «        5 }|                     ¦   «         cddd¦  «         cY S # 1 swxY w Y   Y dS w xY w)zRead the source code.Nzlatin-1)Úencoding)rÇ   ÚopenÚ	readlinesÚLookupErrorÚSyntaxErrorÚUnicodeError)Úfilenamer"  s     r7   r×  r×  ©  s3  € ð!ÝŒ]˜8Ñ$Ô$ð 	!¨Ø—;’;‘=”=ð	!ð 	!ð 	!ð 	!ñ 	!ô 	!ð 	!ð 	!ð 	!ð 	!ð 	!ð 	!øøøð 	!ð 	!ð 	!ð 	!ð 	!ð 	!øå�¥lÐ3ð !ð !ð !å�( YÐ/Ñ/Ô/ð 	!°1Ø—;’;‘=”=ð	!ð 	!ð 	!ð 	!ñ 	!ô 	!ð 	!ð 	!ð 	!ð 	!ð 	!ð 	!ð 	!ð 	!øøøð 	!ð 	!ð 	!ð 	!ð 	!ð 	!ð 	!ð!øøøsP   ‚A –7ªA ·;»A ¾;¿A Á(BÁ,BÂ BÂB	ÂBÂB	ÂBÂBc                  óp   — t          j        t          j        j        d¬¦  «                             ¦   «         S )zRead the value from stdin.Úignore)Úerrors)ÚioÚTextIOWrapperr  ÚstdinÚbufferÚreadrL   r9   r7   Ústdin_get_valuerä  ´  s)   € åÔ�CœIÔ,°XÐ>Ñ>Ô>×CÒCÑEÔEÐEr9   i   z# no(?:qa|pep8)\bc                 óä   — |                       d¦  «        } d| vr1t          | ¦  «        t          |                      ¦   «         ¦  «        z
  S d}| D ] }|dk    r|dz  dz  dz   }Œ|dk    r|dz  }Œ  |S )zXReturn the amount of indentation.

    Tabs are expanded to the next multiple of 8.
    z
rt   r   rÓ   r3   r   )r|   r}   r¡   )r�   Úresultrq   s      r7   r–   r–   ¼  sŽ   € ð
 �;Š;�vÑÔ€DØ�4ÐÐÝ�4‰yŒy�3˜tŸ{š{™}œ}Ñ-Ô-Ñ-Ð-Ø€FØð ð ˆØ�4Š<ˆ<Ø˜q‘[ 1‘_ qÑ(ˆFˆFØ�SŠ[ˆ[Ø�a‰KˆFˆFàØ€Mr9   c                 óÊ   — |                       | d         ¦  «        dz   }t          | ¦  «        dz
  }| dd…         dv r
|dz  }|dz  }| d|…         d||z
  z  z   | |d…         z   S )z7Replace contents with 'xxx' to prevent syntax matching.rF   r   éýÿÿÿN)z"""z'''r   r¹  )ru   r}   )r¶   r´   rÅ   s      r7   Úmute_stringré  Ï  s{   € ð �JŠJ�t˜B”xÑ Ô  1Ñ$€EÝ
ˆd‰)Œ)�a‰-€CàˆBˆCˆC„y�NÐ"Ð"Ø�‰
ˆØˆq‰ˆØ���Œ<˜#  u¡Ñ-Ñ-°°S°T°T´
Ñ:Ð:r9   ú.c                 óL  ‡‡— i }dx}}|                       ¦   «         D ]ç}|r|dd…         dk    r|dz  }Œ|dd…         dk    rht                               |¦  «        }d„ |                     ¦   «         D ¦   «         \  }}||                              t          |||z   ¦  «        ¦  «         ŒŽ|dd…         dk    rK|dd…                              d	d¦  «        d
         }|dd…         dv r
|dd…         }t          ¦   «         ||<   Œèˆˆfd„|                     ¦   «         D ¦   «         S )z&Return a dictionary of matching lines.Nr   r   r   z@@ c              3   ó8   K  — | ]}t          |pd ¦  «        V — ŒdS )r²  N)Úint)r5   Úgs     r7   r8   zparse_udiff.<locals>.<genexpr>è  s,   è è € ÐGÐG¨a�C   S™MœMÐGÐGÐGÐGÐGÐGr9   z+++r   rt   r   r   )zb/zw/zi/c                 ó|   •— i | ]8\  }}|¯t          |‰¦  «        ¯t          j                             ‰|¦  «        |“Œ9S rL   )Úfilename_matchÚosÚpathÚjoin)r5   ÚfilepathÚrowsÚparentÚpatternss      €€r7   rk  zparse_udiff.<locals>.<dictcomp>ñ  sY   ø€ ð ð ð áˆX�tØðõ # 8¨XÑ6Ô6ðÝ
Œ�Š�V˜XÑ&Ô&¨ðð ð r9   )	rx  Ú
HUNK_REGEXrk   r¼   Úupdaterñ   rŒ   rÉ  Úitems)	Údiffr÷  rö  Úrvrò  rö   r�   Ú
hunk_matchrø   s	    ``      r7   Úparse_udiffrþ  Û  s_  øø€ ð 
€BØÐ€Dˆ5Ø—’Ñ!Ô!ð ð ˆØð 	Ø�B�Q�BŒx˜3ŠˆØ˜‘
�ØØ���Œ8�uÒÐÝ#×)Ò)¨$Ñ/Ô/ˆJØGÐG°:×3DÒ3DÑ3FÔ3FÐGÑGÔG‰LˆS�%ØˆtŒH�OŠO�E # s¨U¡{Ñ3Ô3Ñ4Ô4Ð4Ð4Ø�"�1�"ŒX˜ÒÐØ˜˜˜”8—>’> $¨Ñ*Ô*¨1Ô-ˆDð �B�Q�BŒxÐ-Ð-Ð-Ø˜A˜B˜B”x�Ý‘u”uˆBˆt‰Høðð ð ð ð à "§¢¡
¤
ðñ ô ð r9   c                 ój  — | sg S t          | t          ¦  «        r| S g }|                      d¦  «        D ]}|                     ¦   «         }d|v r=t          j                             t          j                             ||¦  «        ¦  «        }|                     | 	                    d¦  «        ¦  «         Œ€|S )zQParse a comma-separated list of paths.

    Return a list of absolute paths.
    r­   r   )
Ú
isinstancerò   rŒ   r—   rñ  rò  Úabspathró  rï   r|   )Úvaluerö  Úpathsrò  s       r7   Únormalize_pathsr  ø  s§   € ð
 ð Øˆ	Ý�%�ÑÔð ØˆØ€EØ—’˜CÑ Ô ð 'ð 'ˆØ�zŠz‰|Œ|ˆØ�$ˆ;ˆ;Ý”7—?’?¥2¤7§<¢<°¸Ñ#=Ô#=Ñ>Ô>ˆDØ�Š�T—[’[ Ñ%Ô%Ñ&Ô&Ð&Ð&Ø€Lr9   Tc                 óB   ‡ — |s|S t          ˆ fd„|D ¦   «         ¦  «        S )z{Check if patterns contains a pattern that matches filename.

    If patterns is unspecified, this always returns True.
    c              3   ó8   •K  — | ]}t          ‰|¦  «        V — Œd S r_  r   )r5   ÚpatternrÛ  s     €r7   r8   z!filename_match.<locals>.<genexpr>  s-   øè è € ÐBÐB¨g�w�x Ñ)Ô)ÐBÐBÐBÐBÐBÐBr9   )re  )rÛ  r÷  r   s   `  r7   rð  rð  
  s5   ø€ ð
 ð ØˆÝÐBÐBÐBÐB¸ÐBÑBÔBÑBÔBÐBr9   c                 ó8   — | D ]}||v r||xx         dz  cc<   ŒdS )z^Adds one to the counts of each appearance of characters in s,
        for characters in countsr   NrL   )r6   rs  rq   s      r7   rl  rl    s=   € ð ð ð ˆØ�6ˆ>ˆ>Ø�4ˆLˆLŒL˜AÑˆLˆL‰Løðð r9   c                 ó„   — | d         t           v p1| d         | d         d         d …                              ¦   «         dk    S )Nr   r   r   r   z\
)rç   r¡   )Útokens    r7   Ú_is_eol_tokenr    s<   € Ø�Œ8•wÐÐK %¨¤(¨5°¬8°A¬;¨<¨<Ô"8×"?Ò"?Ñ"AÔ"AÀVÒ"KÐKr9   c                   ób   — e Zd ZdZ	 	 dd„Zd„ Zd„ Zd„ Zd„ Zd„ Z	d	„ Z
d
„ Zd„ Zd„ Zd„ Zdd„ZdS )ÚCheckerz;Load a Python source file, tokenize it, check coding style.Nc                 ó  — |€t          |¦  «        j        }n|rJ ‚d | _        |j        | _        |j        | _        |j        | _        |j	        | _	        |j
        | _
        |j        | _        d| _        d| _        |j        | _        |j        | _        |j        | _        || _        i | _        |€d| _        |pg | _        n™|dk    r.d| _        t'          ¦   «                              d¦  «        | _        ne|€\	 t+          |¦  «        | _        nM# t,          $ r9 t/          j        ¦   «         d d…         \  }}|j        › d|› �| _        g | _        Y nw xY w|| _        | j        r~t5          | j        d         d         ¦  «        }|dv rZ|d	k    r| j        d         d
d …         | j        d<   n6| j        d         d d…         dk    r| j        d         dd …         | j        d<   |p|j        | _        | j        j        | _        d| _        d S )Nr   Frá  r   Tr   ú: )éï   éÿþ  r  r   r   u   Ã¯Â»Â¿)Ú
StyleGuideÚoptionsÚ	_io_errorÚphysical_checksÚ_physical_checksÚlogical_checksÚ_logical_checksÚ
ast_checksÚ_ast_checksr�   rÎ  rÖ   Úfstring_startrŽ   ró   rô   rÛ  Ú_checker_statesr‚   rä  rx  r×  ÚOSErrorr  Úexc_infoÚ__name__ÚordÚreportr	  Úreport_errorr�   )	ra   rÛ  r‚   r  r!  ÚkwargsÚexc_typeÚexcÚord0s	            r7   rg   zChecker.__init__(  s  € àˆ?Ý  Ñ(Ô(Ô0ˆGˆGàÐÐÐØˆŒØ 'Ô 7ˆÔØ&Ô5ˆÔØ"Ô-ˆÔØ&Ô6ˆÔØ%Ô4ˆÔØ"Ô.ˆÔØˆÔØˆŒØ#Ô0ˆÔØ"Ô.ˆÔØ”ˆŒØ ˆŒà!ˆÔØÐØ#ˆDŒMØ˜ "ˆDŒJˆJØ˜Š_ˆ_Ø#ˆDŒMÝ(Ñ*Ô*×5Ò5°dÑ;Ô;ˆDŒJˆJØˆ]ð Ý& xÑ0Ô0�”
�
øÝð  ð  ð  Ý"%¤,¡.¤.°°!°Ô"4‘�˜3Ø$,Ô$5Ð!>Ð!>¸Ð!>Ð!>�”Ø�”
�
�
ð øøøð
 ˆDŒJØŒ:ð 	6Ý�t”z !”} QÔ'Ñ(Ô(ˆDØ�~Ð%Ð%Ø˜6’>�>Ø$(¤J¨q¤M°!°"°"Ô$5�D”J˜q‘M�MØ”Z ”] 2 A 2Ô&¨.Ò8Ð8Ø$(¤J¨q¤M°!°"°"Ô$5�D”J˜q‘MØÐ. ¤ˆŒØ œKÔ-ˆÔØˆŒ	ˆ	ˆ	s   Ã5D
 Ä
A EÅEc           	      óN  — t          j        ¦   «         dd…         \  }}t          |j        ¦  «        dk    r+|j        d         }t          |¦  «        dk    r
|dd…         }nd}|                      |d         |d         pdd|j        › d|j        d         › �| j        ¦  «         dS )	zCheck if the syntax is valid.Nr   r   r   )r   r   r   zE901 r  )r  r  r}   r_   r"  r  Úreport_invalid_syntax)ra   r$  r%  rp   s       r7   r(  zChecker.report_invalid_syntaxW  s®   € åœ,™.œ.¨¨!¨Ô,‰ˆ�3ÝˆsŒx‰=Œ=˜1ÒÐØ”X˜a”[ˆFÝ�6‰{Œ{˜QŠˆØ  ! œ�øàˆFØ×Ò˜& œ) V¨A¤Y ^°!ØD (Ô"3ÐDÐD°s´xÀ´{ÐDÐDØÔ4ñ	6ô 	6ð 	6ð 	6ð 	6r9   c                 ó¸   — | j         | j        k    rdS | j        | j                  }| xj         dz  c_         | j        €|dd…         t          v r|d         | _        |S )z(Get the next line from the input buffer.rZ   r   Nr   )rƒ   r„   r‚   rn   r1  )ra   r�   s     r7   ÚreadlinezChecker.readlined  sg   € àÔ˜tÔ/Ò/Ð/Ø�2ØŒz˜$Ô*Ô+ˆØÐÔ˜AÑÐÔØÔÐ#¨¨R¨a¨R¬µJÐ(>Ð(>Ø# AœwˆDÔØˆr9   c                 ó`   — g }|D ]%}|                      t          | |¦  «        ¦  «         Œ& ||Ž S )zRun a check plugin.)rï   Úgetattr)ra   r]   Úargument_namesÚ	argumentsrO   s        r7   Ú	run_checkzChecker.run_checkn  sD   € àˆ	Ø"ð 	2ð 	2ˆDØ×Ò�W T¨4Ñ0Ô0Ñ1Ô1Ð1Ð1Øˆu�iÐ Ð r9   c                 óR   — d|v r"| j                              |i ¦  «        | _        dS dS )z5Prepare custom state for the specific checker plugin.rf  N)r  Ú
setdefaultrf  )ra   rO   r-  s      r7   Úinit_checker_statezChecker.init_checker_stateu  s6   € à˜nÐ,Ð,Ø!%Ô!5×!@Ò!@ÀÀrÑ!JÔ!JˆDÔÐÐð -Ð,r9   c                 ó  — || _         | j        D ]q\  }}}|                      ||¦  «         |                      ||¦  «        }|�=|\  }}|                      | j        |||¦  «         |dd…         dk    r|d         | _        ŒrdS )z,Run all physical checks on a raw input line.Nr   ÚE101r   )rG   r  r2  r/  r"  rƒ   rn   )ra   r�   rO   r]   r-  ræ  rp   r¶   s           r7   Úcheck_physicalzChecker.check_physicalz  s¢   € à!ˆÔØ+/Ô+@ð 	/ð 	/Ñ'ˆD�%˜Ø×#Ò# D¨.Ñ9Ô9Ð9Ø—^’^ E¨>Ñ:Ô:ˆFØÐ!Ø!'‘�˜Ø×!Ò! $Ô"2°F¸DÀ%ÑHÔHÐHØ˜˜˜”8˜vÒ%Ð%Ø'+¨A¤w�DÔ$øð	/ð 	/r9   c                 óÐ  — g }g }d}dx}x}}| j         D �]\  }}}	}
}|t          v rŒ|sd|	fg}|t          j        k    r|                     |¦  «         Œ@|t          j        k    rt          |¦  «        }n|t          k    rdt          |¦  «        z  }|rK|	\  }}||k    r-| j	        |dz
           |dz
           }|dk    s|dvr	|dvrd|z   }n||k    r|||…         |z   }|                     |¦  «         |t          |¦  «        z  }|                     ||
f¦  «         |
\  }}�Œd	 
                    |¦  «        | _        |o!t          d	 
                    |¦  «        ¦  «        | _        |S )
z!Build a logical line from tokens.r   Nr¹  r   r­   z{[(r®   r3   rZ   )rÍ   rÌ  rÇ   rì   rï   rí   ré  r¾  r}   r‚   ró  rH   r�   )ra   ÚlogicalÚcommentsr‘   Úprev_rowÚprev_colÚmappingr  r¶   r´   rÅ   r�   Ú	start_rowrÅ  r  s                  r7   Úbuild_tokens_linezChecker.build_tokens_line†  s²  € àˆØˆØˆØ(,Ð,ˆÐ,�8˜gØ26´+ð 	'ñ 	'Ñ.ˆJ˜˜e S¨$Ø�[Ð(Ð(ØØð 'Ø˜u˜:˜,�Ø�XÔ-Ò-Ð-Ø—’ Ñ%Ô%Ð%ØØ�Xœ_Ò,Ð,Ý" 4Ñ(Ô(��Ø�~Ò-Ð-Ø�S ™YœY‘�Øð ;Ø).Ñ&�˜IØ˜yÒ(Ð(Ø $¤
¨8°a©<Ô 8¸ÀA¹Ô F�IØ  CÒ'Ð'¨I¸UÐ,BÐ,BØ,0¸Ð,=Ð,=Ø" T™z˜øØ Ò*Ð*Ø ¨Ð 2Ô3°dÑ:�DØ�NŠN˜4Ñ Ô Ð Ø•c˜$‘i”iÑˆFØ�NŠN˜F C˜=Ñ)Ô)Ð)Ø#&Ñ ˆX�x‘xØŸGšG GÑ,Ô,ˆÔØÐ8¥ b§g¢g¨hÑ&7Ô&7Ñ!8Ô!8ˆŒ	Øˆr9   c                 ó¼  — | j                              ¦   «          |                      ¦   «         }|sdS d„ |D ¦   «         }|d         d         \  }}| j        |dz
           }t	          |d|…         ¦  «        | _        | j        | j        k     r| j        | _        | j        dk    r.t          | j
        dd…                              ¦   «         ¦  «         | j        D ]Ä\  }}}| j        dk    rt          d|z   ¦  «         |                      ||¦  «         |                      ||¦  «        pd	D ]r\  }	}
t          |	t           ¦  «        s4|t#          j        ||	¦  «                 \  }}|d         |d         |	z   |z
  f}	|                      |	d         |	d         |
|¦  «         ŒsŒÅ| j
        r+| j        | _        | j
        | _        | j        s| j
        | _        d| _        g | _        dS )
z:Build a line from tokens and run all logical checks on it.Nc                 ó   — g | ]\  }}|‘ŒS rL   rL   )r5   rp   rÃ  s      r7   rQ   z)Checker.check_logical.<locals>.<listcomp>°  s   € Ð;Ð;Ð;¡i f¨a˜6Ð;Ð;Ð;r9   r   r   r   éP   r   z   rL   )r!  Úincrement_logical_liner=  r‚   r–   r˜   r¤   r£   rô   r   rH   r|   r  r2  r/  r   ÚtupleÚbisectÚbisect_leftr"  r§   r¥   r¦   rÍ   )ra   r;  Úmapping_offsetsr<  rÅ  rÄ  rO   r]   r-  rp   r¶   Útoken_offsetr  s                r7   Úcheck_logicalzChecker.check_logical©  s  € àŒ×*Ò*Ñ,Ô,Ð,Ø×(Ò(Ñ*Ô*ˆØð 	ØˆFà;Ð;°7Ð;Ñ;Ô;ˆØ!(¨¤¨A¤Ñˆ�IØ”Z 	¨A¡Ô.ˆ
Ý)¨*°Z°i°ZÔ*@ÑAÔAˆÔØÔ˜tÔ/Ò/Ð/Ø $Ô 0ˆDÔØŒ<˜1ÒÐÝ�$Ô# C R CÔ(×/Ò/Ñ1Ô1Ñ2Ô2Ð2Ø+/Ô+?ð 	Eð 	EÑ'ˆD�%˜ØŒ|˜qÒ Ð Ý�e˜d‘lÑ#Ô#Ð#Ø×#Ò# D¨.Ñ9Ô9Ð9Ø $§¢¨u°nÑ EÔ EÐ KÈð Eð E‘�˜Ý! &­%Ñ0Ô0ð Fð )0µÔ0BØ'¨ñ11ô 11ô )2Ñ%�L #à! !œf c¨!¤f¨v¡o¸Ñ&DÐE�FØ×!Ò! &¨¤)¨V°A¬Y¸¸eÑDÔDÐDÐDðEð Ôð 	JØ)-Ô):ˆDÔ&Ø$(Ô$5ˆDÔ!ØÔ$ð JØ8<Ô8I�Ô5ØˆÔØˆŒˆˆr9   c                 ó¸  — 	 t          d                     | j        ¦  «        ddt          ¦  «        }n1# t          t
          t          f$ r |                      ¦   «         cY S w xY w| j        D ]o\  }}} ||| j	        ¦  «        }| 
                    ¦   «         D ]C\  }}}}	| j        rt          | j        |dz
           ¦  «        s|                      ||||	¦  «         ŒDŒpdS )z,Build the file's AST and run all AST checks.rZ   Úexecr   N)Úcompileró  r‚   ÚPyCF_ONLY_ASTÚ
ValueErrorrÙ  Ú	TypeErrorr(  r  rÛ  Úrunr�   r"  )
ra   rI   rO   Úclsr  ÚcheckerÚlinenorp   r¶   r]   s
             r7   Ú	check_astzChecker.check_astÌ  s  € ð	0Ý˜2Ÿ7š7 4¤:Ñ.Ô.°°F½MÑJÔJˆDˆDøÝ�K­Ð3ð 	0ð 	0ð 	0Ø×-Ò-Ñ/Ô/Ð/Ð/Ð/ð	0øøøà!Ô-ð 	Cð 	C‰MˆD�#�rØ�c˜$ ¤Ñ.Ô.ˆGØ/6¯{ª{©}¬}ð Cð CÑ+�˜  eØ”zð C­¨d¬j¸À!¹Ô.DÑ)EÔ)Eð CØ×%Ò% f¨f°d¸EÑBÔBÐBøðCð	Cð 	Cs   ‚/2 ²+A ÁA c              #   óÂ  K  — | j         r%|                      ddd| j         z  t          ¦  «         t          j        | j        ¦  «        }	 d}|D ]`}|d         d         | j        k    r dS |d         ot          |d         ¦  «        | _        |                      ||¦  «         |V — |d         }ŒadS # t          t          j
        f$ r |                      ¦   «          Y dS w xY w)z9Tokenize file, run physical line checks and yield tokens.r   r   zE902 %srZ   r   Nr   )r  r"  r×  rÇ   Úgenerate_tokensr*  r„   r�   Úmaybe_check_physicalrÙ  Ú
TokenErrorr(  )ra   ÚtokengenÚprev_physicalr
  s       r7   rT  zChecker.generate_tokensØ  s  è è € àŒ>ð 	KØ×Ò˜a  I°´Ñ$>Å	ÑJÔJÐJÝÔ+¨D¬MÑ:Ô:ˆð
	)ØˆMØ!ð )ð )�Ø˜”8˜A”; Ô!1Ò1Ð1Ø�F�FØ! !œHÐ7­¨e°A¬h©¬�”	Ø×)Ò)¨%°Ñ?Ô?Ð?Ø���Ø % a¤��ð)ð )øõ �XÔ0Ð1ð 	)ð 	)ð 	)Ø×&Ò&Ñ(Ô(Ð(Ð(Ð(Ð(ð	)øøøs   Á	B0 Á)AB0 Â0*CÃCc                 ó”  — |j         t          k    r|j        d         | _        dS t	          |¦  «        r>|j        dk    r|                      |¦  «         dS |                      |j        ¦  «         dS |j         t          j        k    r	d|j	        v s|j         t          k    r¨t          |j        ¦  «        rdS |j         t          k    r| j        }n|j        d         }|j        d         }d| _        || _        t          ||¦  «        D ]8}|                      | j        |dz
           dz   ¦  «         | xj        dz  c_        Œ9d| _        dS dS )z9If appropriate for token, check current physical line(s).r   rZ   rx   NTr   F)rÆ   rî   r´   r  r  r�   r5  rÇ   rí   rË   r/  r�   rÅ   rŽ   rƒ   rñ   r‚   )ra   r
  rX  r´   rÅ   rƒ   s         r7   rU  zChecker.maybe_check_physicalé  s^  € ð Œ:�Ò&Ð&Ø!&¤¨Q¤ˆDÔÐÐå˜5Ñ!Ô!ð (	#ð Œz˜RÒÐØ×#Ò# MÑ2Ô2Ð2Ð2Ð2à×#Ò# E¤JÑ/Ô/Ð/Ð/Ð/à”
�hœoÒ-Ð-°$¸%¼,Ð2FÐ2FØ”
�kÒ)Ð)õ" �E”JÑÔð Ø�ØŒz�[Ò(Ð(ØÔ*��àœ Aœ�Ø”)˜A”,ˆCà!ˆDŒNØ$ˆDÔÝ$ U¨CÑ0Ô0ð &ð &�Ø×#Ò# D¤J¨{¸Q©Ô$?À$Ñ$FÑGÔGÐGØÐ Ô  AÑ%Ð Ô Ð Ø"ˆDŒNˆNˆNð= *Ð)r9   r   c                 óö  — | j                              | j        | j        ||¦  «         t	          | j        ¦  «        | _        | j        r|                      ¦   «          d| _        d| _	        dx| _
        | _        d| _        d| _        g | _        dx| _        | _        d}|                      ¦   «         D �]t}| j                             |¦  «         |dd…         \  }}| j        dk    r�|d         d         |d         d         k    r1d                     |d         d         pd|d         d         ¦  «        }nd|d         d         z  }t+          d	|d         d         ›d
|›d
t,          j        |d                  ›d
|›�¦  «         |t,          j        k    r|dv r|dz  }Œì|dv r|dz  }Œö|s||t2          v rs|t,          j        k    r|                      ¦   «          d| _        �Œ.t	          | j        ¦  «        dk    r| xj        dz  c_        | j        d= �Œ`|                      ¦   «          �Œv| j        r4|                      | j        d         ¦  «         |                      ¦   «          | j                              ¦   «         S )z!Run all checks on the input file.r   NrZ   r   r   z[{}:{}]r   zl.%szl.rt   rå   r®   rF   )r!  Ú	init_filerÛ  r‚   r}   r„   r  rR  rƒ   rn   r˜   r§   r¥   r¦   rÍ   r£   r¤   rT  rï   rô   r¢   r   rÇ   Útok_namerè   rç   rG  r5  Úget_file_results)ra   ÚexpectedÚline_offsetrû   r
  r  r¶   r  s           r7   Ú	check_allzChecker.check_all  s�  € àŒ×Ò˜dœm¨T¬Z¸À;ÑOÔOÐOÝ˜tœz™?œ?ˆÔØÔð 	Ø�NŠNÑÔÐØˆÔØˆÔØ9:Ð:ˆÔ˜DÔ6Ø "ˆÔØ02ˆÔ-ØˆŒØ/0Ð0ˆÔ˜4Ô,ØˆØ×)Ò)Ñ+Ô+ð 	-ñ 	-ˆEØŒK×Ò˜uÑ%Ô%Ð%Ø$ Q q SœzÑˆJ˜ØŒ|˜qÒ Ð Ø˜”8˜A”; %¨¤(¨1¤+Ò-Ð-Ø#×*Ò*¨5°¬8°A¬;Ð+<¸"¸eÀA¼hÀq¼kÑJÔJ�C�Cà  5¨¤8¨A¤;Ñ.�CÝ�Ø˜Q”x ”{�{�{ C C C­Ô):¸5À¼8Ô)DÐ)DÐ)DÀdÀdðLñ Mô Mð Mà�Xœ[Ò(Ð(Ø˜5�=�=Ø˜a‘K�F�FØ˜U�]�]Ø˜a‘K�FøØð 
-Ø¥Ð(Ð(Ø!¥XÔ%5Ò5Ð5Ø×*Ò*Ñ,Ô,Ð,Ø,-˜Ô)Ñ)Ý˜Tœ[Ñ)Ô)¨QÒ.Ð.àÐ(Ô(¨AÑ-Ð(Ô(Ø œK¨˜N™Nà×*Ò*Ñ,Ô,Ð,ùØŒ;ð 	!Ø×Ò ¤
¨2¤Ñ/Ô/Ð/Ø×ÒÑ Ô Ð ØŒ{×+Ò+Ñ-Ô-Ð-r9   )NNNN©Nr   )r  Ú
__module__Ú__qualname__re   rg   r(  r*  r/  r2  r5  r=  rG  rR  rT  rU  r`  rL   r9   r7   r  r  %  sè   € € € € € ØEÐEà,0Ø&*ð-ð -ð -ð -ð^6ð 6ð 6ðð ð ð!ð !ð !ðKð Kð Kð

/ð 
/ð 
/ð!ð !ð !ðF!ð !ð !ðF
Cð 
Cð 
Cð)ð )ð )ð"/#ð /#ð /#ðb+.ð +.ð +.ð +.ð +.ð +.r9   r  c                   ó^   — e Zd ZdZdZd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zdd„Zdd„Zdd„Zd„ ZdS )Ú
BaseReportz"Collect the results of the checks.Fc                 óª   — |j         | _        |j        | _        d| _        d| _        t                               | j        d¦  «        | _        i | _	        d S ra  )
Úbenchmark_keysÚ_benchmark_keysÚignore_codeÚ_ignore_codeÚelapsedÚtotal_errorsÚdictÚfromkeysÚcountersÚmessages)ra   r  s     r7   rg   zBaseReport.__init__M  sJ   € Ø&Ô5ˆÔØ#Ô/ˆÔàˆŒØˆÔÝŸš dÔ&:¸AÑ>Ô>ˆŒØˆŒˆˆr9   c                 ó6   — t          j         ¦   «         | _        dS )zStart the timer.N)ÚtimeÚ_start_time©ra   s    r7   r´   zBaseReport.startV  s   € åœ9™;œ;ˆÔÐÐr9   c                 óF   — t          j         ¦   «         | j        z
  | _        dS )zStop the timer.N)rr  rs  rk  rt  s    r7   ÚstopzBaseReport.stopZ  s   € å”y‘{”{ TÔ%5Ñ5ˆŒˆˆr9   c                 ó¾   — || _         || _        |pd| _        || _        d| _        | j        dxx         dz  cc<   | j        dxx         t          |¦  «        z  cc<   dS )úSignal a new file.rL   r   r/   r   r1   N)rÛ  r‚   r^  r_  Úfile_errorsro  r}   )ra   rÛ  r‚   r^  r_  s        r7   r[  zBaseReport.init_file^  st   € à ˆŒØˆŒ
Ø ˜ BˆŒØ&ˆÔØˆÔØŒ�gÐÐÔ !Ñ#ÐÐÑØŒÐ&Ð'Ð'Ô'­3¨u©:¬:Ñ5Ð'Ð'Ñ'Ð'Ð'r9   c                 ó0   — | j         dxx         dz  cc<   dS )zSignal a new logical line.r0   r   N)ro  rt  s    r7   rA  z!BaseReport.increment_logical_lineh  s&   € àŒ�oÐ&Ð&Ô&¨!Ñ+Ð&Ð&Ñ&Ð&Ð&r9   c                 óX  — |dd…         }|                       |¦  «        rdS || j        v r| j        |xx         dz  cc<   nd| j        |<   |dd…         | j        |<   || j        v rdS | j        r| j        st          | j        ¦  «         | xj        dz  c_        | xj        dz  c_        |S )ú&Report an error, according to options.Nr   r   é   )	rj  ro  rp  r^  Úprint_filenamery  r   rÛ  rl  )ra   rƒ   rp   r¶   r]   r¸   s         r7   r	  zBaseReport.errorl  sÜ   € à�B�Q�BŒxˆØ×Ò˜TÑ"Ô"ð 	ØˆFØ�4”=Ð Ð ØŒM˜$ÐÐÔ 1Ñ$ÐÐÑÐà"#ˆDŒM˜$ÑØ"& q r r¤(ˆDŒM˜$Ñà�4”=Ð Ð ØˆFØÔð 	! tÔ'7ð 	!Ý�$”-Ñ Ô Ð ØÐÔ˜AÑÐÔØÐÔ˜QÑÐÔØˆr9   c                 ó   — | j         S )z6Return the count of errors and warnings for this file.)ry  rt  s    r7   r]  zBaseReport.get_file_results  s   € àÔÐr9   rZ   c                 óH   ‡ ‡— t          ˆˆ fd„‰ j        D ¦   «         ¦  «        S )z.Return the total count of errors and warnings.c              3   ó\   •K  — | ]&}|                      ‰¦  «        ¯‰j        |         V — Œ'd S r_  )r‹   ro  ©r5   ÚkeyÚprefixra   s     €€r7   r8   z'BaseReport.get_count.<locals>.<genexpr>…  sW   øè è € ð Gð GØ¨s¯~ª~¸fÑ/EÔ/EðG�4”= Ô%ð Gð Gð Gð Gð Gð Gr9   )Úsumrp  ©ra   r„  s   ``r7   Ú	get_countzBaseReport.get_countƒ  sN   øø€ åð Gð Gð Gð Gð GØ"œmðGñ Gô Gñ Gô Gð 	Gr9   c                 óH   ‡ ‡— ˆˆ fd„t          ‰ j        ¦  «        D ¦   «         S )a
  Get statistics for message codes that start with the prefix.

        prefix='' matches all errors and warnings
        prefix='E' matches all errors
        prefix='W' matches all warnings
        prefix='E4' matches all errors that have to do with imports
        c                 ó|   •— g | ]8}|                      ‰¦  «        ¯‰j        |         d ›d|›d‰j        |         ›�‘Œ9S )r¸  r3   )r‹   ro  rp  r‚  s     €€r7   rQ   z-BaseReport.get_statistics.<locals>.<listcomp>�  se   ø€ ð Lð Lð LØ°C·N²NÀ6Ñ4JÔ4JðL ¤¨cÔ 2Ð 2Ð 2Ð 2°C°C°C¸¼ÀsÔ9KÐ9KÐLð Lð Lð Lr9   )Úsortedrp  r†  s   ``r7   Úget_statisticszBaseReport.get_statisticsˆ  sG   øø€ ðLð Lð Lð Lð LÝ! $¤-Ñ0Ô0ðLñ Lô Lð 	Lr9   c                 óT   — |                       |¦  «        D ]}t          |¦  «         ŒdS )z9Print overall statistics (number of errors and warnings).N)r‹  r   )ra   r„  r�   s      r7   Úprint_statisticszBaseReport.print_statistics“  s6   € à×'Ò'¨Ñ/Ô/ð 	ð 	ˆDÝ�$‰KŒKˆKˆKð	ð 	r9   c                 óâ   — t          d                     | j        d¦  «        ¦  «         | j        r=| j        D ]7}t          d| j        |         | j        z  || j        |         fz  ¦  «         Œ6dS dS )zPrint benchmark numbers.z{:<7.2f} {}zseconds elapsedz%-7d %s per second (%d total)N)r   r¢   rk  rh  ro  )ra   rƒ  s     r7   Úprint_benchmarkzBaseReport.print_benchmark˜  s”   € åˆm×"Ò" 4¤<Ð1BÑCÔCÑDÔDÐDØŒ<ð 	,ØÔ+ð ,ð ,�ÝÐ5Ø”} SÔ)¨D¬LÑ8¸#Ø”} SÔ)ð+ñ+ñ ,ô ,ð ,ð ,ð	,ð 	,ð,ð ,r9   N©rZ   )r  rb  rc  re   r~  rg   r´   rv  r[  rA  r	  r]  r‡  r‹  r�  r�  rL   r9   r7   re  re  H  sÛ   € € € € € Ø,Ð,à€Nðð ð ð'ð 'ð 'ð6ð 6ð 6ð6ð 6ð 6ð,ð ,ð ,ðð ð ð& ð  ð  ðGð Gð Gð Gð
	Lð 	Lð 	Lð 	Lðð ð ð ð
,ð ,ð ,ð ,ð ,r9   re  c                   ó   — e Zd ZdZdZdS )Ú
FileReportz:Collect the results of the checks and print the filenames.TN)r  rb  rc  re   r~  rL   r9   r7   r’  r’  ¢  s   € € € € € ØDÐDà€N€N€Nr9   r’  c                   ó<   ‡ — e Zd ZdZˆ fd„Zˆ fd„Zˆ fd„Zd„ Zˆ xZS )ÚStandardReportz,Collect and print the results of the checks.c                 ó
  •— t          ¦   «                              |¦  «         t                               |j                             ¦   «         |j        ¦  «        | _        |j        | _        |j	        | _
        |j        | _        d S r_  )Úsuperrg   ÚREPORT_FORMATrê   r¢   r½  Ú_fmtÚrepeatÚ_repeatÚshow_sourceÚ_show_sourceÚ	show_pep8Ú
_show_pep8©ra   r  Ú	__class__s     €r7   rg   zStandardReport.__init__«  si   ø€ Ý‰Œ×Ò˜Ñ!Ô!Ð!Ý!×%Ò% g¤n×&:Ò&:Ñ&<Ô&<Ø&-¤nñ6ô 6ˆŒ	à”~ˆŒØ#Ô/ˆÔØ!Ô+ˆŒˆˆr9   c                 óZ   •— g | _         t          ¦   «                              ||||¦  «        S )rx  )Ú_deferred_printr–  r[  )ra   rÛ  r‚   r^  r_  r   s        €r7   r[  zStandardReport.init_file³  s0   ø€ à!ˆÔÝ‰wŒw× Ò Ø�e˜X {ñ4ô 4ð 	4r9   c                 óÜ   •— t          ¦   «                              ||||¦  «        }|rD| j        |         dk    s| j        r,| j                             ||||dd…         |j        f¦  «         |S )r|  r   r}  N)r–  r	  ro  rš  r¢  rï   re   )ra   rƒ   rp   r¶   r]   r¸   r   s         €r7   r	  zStandardReport.error¹  sz   ø€ å‰wŒw�}Š}˜[¨&°$¸Ñ>Ô>ˆØð 	F�T”] 4Ô(¨AÒ-Ð-°´Ð-ØÔ ×'Ò'Ø˜f d¨D°°°¬H°e´mÐDñFô Fð Fàˆr9   c           
      óX  — | j                              ¦   «          | j         D �]\  }}}}}t          | j        | j        | j        |z   |dz   ||dœz  ¦  «         | j        rz|t          | j        ¦  «        k    rd}n| j        |dz
           }t          | 	                    ¦   «         ¦  «         t          t          j        dd|d|…         ¦  «        dz   ¦  «         | j        r&|r$t          d|                     ¦   «         z   ¦  «         t          j                             ¦   «          �Œ| j        S )	z9Print results and return the overall count for this file.r   )rò  rø   rÆ  r¸   r¶   rZ   z\Sr3   Nr!   z    )r¢  Úsortr   r˜  rÛ  r_  rœ  r}   r‚   r|   rc  Úsubrž  r—   r  ÚstdoutÚflushry  )ra   rƒ   rp   r¸   r¶   Údocr�   s          r7   r]  zStandardReport.get_file_resultsÁ  s8  € àÔ×!Ò!Ñ#Ô#Ð#Ø48Ô4Hð 	ñ 	Ñ0ˆK˜  t¨SÝ�$”)ØœØÔ'¨+Ñ5¸fÀq¹jØ dðð ñ ñ ô ð ð
 Ô ð ?Ø¥ T¤Z¡¤Ò0Ð0Ø�D�Dàœ: k°A¡oÔ6�DÝ�d—k’k‘m”mÑ$Ô$Ð$Ý•b”f˜U C¨¨g¨v¨g¬Ñ7Ô7¸#Ñ=Ñ>Ô>Ð>ØŒð , 3ð ,Ý�f˜sŸyšy™{œ{Ñ*Ñ+Ô+Ð+õ ŒJ×ÒÑÔÐÑØÔÐr9   )	r  rb  rc  re   rg   r[  r	  r]  Ú__classcell__©r   s   @r7   r”  r”  ¨  s   ø€ € € € € Ø6Ð6ð,ð ,ð ,ð ,ð ,ð4ð 4ð 4ð 4ð 4ðð ð ð ð ð ð  ð  ð  ð  ð  ð  r9   r”  c                   ó,   ‡ — e Zd ZdZˆ fd„Zˆ fd„Zˆ xZS )Ú
DiffReportz9Collect and print the results for the changed lines only.c                 ób   •— t          ¦   «                              |¦  «         |j        | _        d S r_  )r–  rg   Úselected_linesÚ	_selectedrŸ  s     €r7   rg   zDiffReport.__init__á  s)   ø€ Ý‰Œ×Ò˜Ñ!Ô!Ð!Ø Ô/ˆŒˆˆr9   c                 óx   •— || j         | j                 vrd S t          ¦   «                              ||||¦  «        S r_  )r°  rÛ  r–  r	  )ra   rƒ   rp   r¶   r]   r   s        €r7   r	  zDiffReport.errorå  s8   ø€ Ø˜dœn¨T¬]Ô;Ð;Ð;ØˆFÝ‰wŒw�}Š}˜[¨&°$¸Ñ>Ô>Ð>r9   )r  rb  rc  re   rg   r	  rª  r«  s   @r7   r­  r­  Þ  sW   ø€ € € € € ØCÐCð0ð 0ð 0ð 0ð 0ð?ð ?ð ?ð ?ð ?ð ?ð ?ð ?ð ?r9   r­  c                   óJ   — e Zd ZdZd„ Zdd„Zdd„Zdd„Zd„ Zdd	„Z	d
„ Z
d„ ZdS )r  z-Initialize a PEP-8 instance with few options.c                 ó<  — |                      dt          ¦  «        | _        |                      dd¦  «        }|                      dd¦  «        }|                      dd ¦  «        }t          |i |¤Ž}|rd n|                     dd ¦  «        }|                     dd ¦  «        }t          |||||¦  «        \  }	| _        |r+|	j                             |¦  «         d|v r|d         | _        | j	        | _
        |	| _        |	j        s|	j        rt          nt          |	_        t!          |	j        pd¦  «        |	_        |	j        s;|	j        s4t&          r-t!          t&                               d	¦  «        ¦  «        |	_        n"|	j        rd
nt!          |	j        ¦  «        |	_        t*          d d …         |	_        | j        |	_        |                      d¦  «        |	_        |                      d¦  «        |	_        |                      d¦  «        |	_        |                      ¦   «          d S )NÚchecker_classÚ
parse_argvFÚconfig_fileÚparserr  rô   rL   r­   r�  rG   rH   rI   )rð   r  r´  rm  rê   Úprocess_optionsr  Ú__dict__rù  Ú
input_fileÚrunnerr  ÚreporterÚquietre  r”  rB  ÚselectrÝ  ÚDEFAULT_IGNORErŒ   ÚBENCHMARK_KEYSrg  ri  Ú
get_checksr  r  r  Úinit_report)
ra   r_   r#  rµ  r¶  r·  Úoptions_dictÚarglistrô   r  s
             r7   rg   zStyleGuide.__init__î  sü  € à#ŸZšZ¨½ÑAÔAˆÔØ—Z’Z ¨eÑ4Ô4ˆ
Ø—j’j °Ñ6Ô6ˆØ—’˜H dÑ+Ô+ˆå˜TÐ, VÐ,Ð,ˆØ$ÐI�$�$¨,×*:Ò*:¸7ÀDÑ*IÔ*IˆØ×"Ò" 9¨dÑ3Ô3ˆÝ-Ø�Z ¨f°gñ?ô ?Ñˆ�”àð 	3ØÔ×#Ò# LÑ1Ô1Ð1Ø˜,Ð&Ð&Ø)¨'Ô2�”
à”oˆŒØˆŒàÔð 	OØ-4¬]ÐN�z˜zÅˆGÔå˜wœ~Ð3°Ñ4Ô4ˆŒØ”ð 	P '¤.ð 	Pµnð 	På"¥>×#7Ò#7¸Ñ#<Ô#<Ñ=Ô=ˆGŒNˆNð '.¤nÐO˜U˜U½%ÀÄÑ:OÔ:OˆGŒNÝ!/°°°Ô!2ˆÔØ"Ô.ˆÔØ"&§/¢/°/Ñ"BÔ"BˆÔØ!%§¢°Ñ!@Ô!@ˆÔØ!Ÿ_š_¨VÑ4Ô4ˆÔØ×ÒÑÔÐÐÐr9   Nc                 óf   —  |p| j         j        | j         ¦  «        | j         _        | j         j        S )zInitialize the report instance.)r  r¼  r!  )ra   r¼  s     r7   rÂ  zStyleGuide.init_report	  s-   € à@˜xÐ@¨4¬<Ô+@À$Ä,ÑOÔOˆŒÔØŒ|Ô"Ð"r9   c                 ó„  — |€| j         }| j        j        }| j        }|                     ¦   «          	 |D ]W}t
          j                             |¦  «        r|                      |¦  «         Œ7|  	                    |¦  «        s ||¦  «         ŒXn# t          $ r t          d¦  «         Y nw xY w|                     ¦   «          |S )zRun all checks on the paths.Nz... stopped)r  r  r!  r»  r´   rñ  rò  ÚisdirÚ	input_dirÚexcludedÚKeyboardInterruptr   rv  )ra   r  r!  r»  rò  s        r7   Úcheck_fileszStyleGuide.check_files	  sÕ   € àˆ=Ø”JˆEØ”Ô$ˆØ”ˆØ�Š‰Œˆð	!Øð !ð !�Ý”7—=’= Ñ&Ô&ð !Ø—N’N 4Ñ(Ô(Ð(Ð(ØŸš tÑ,Ô,ð !Ø�F˜4‘L”L�Løð	!øõ
 !ð 	!ð 	!ð 	!Ý�-Ñ Ô Ð Ð Ð ð	!øøøà�Š‰ŒˆØˆs   ²AB ÂB)Â(B)r   c                 ó¦   — | j         j        rt          d|z  ¦  «         |                      ||| j         ¬¦  «        }|                     ||¬¦  «        S )z'Run all checks on a Python source file.zchecking %s)r‚   r  )r^  r_  )r  rô   r   r´  r`  )ra   rÛ  r‚   r^  r_  Úfcheckers         r7   rº  zStyleGuide.input_file*	  s^   € àŒ<Ôð 	,Ý�- (Ñ*Ñ+Ô+Ð+Ø×%Ò%Ø˜E¨4¬<ð &ñ 9ô 9ˆà×!Ò!¨8ÀÐ!ÑMÔMÐMr9   c                 óx  — |                      d¦  «        }|                      |¦  «        rdS | j        j        j        }| j        j        }| j        j        }| j        }t          j	        |¦  «        D ]È\  }}}|rt          d|z   ¦  «         |dxx         dz  cc<   t          |¦  «        D ]-}	|                      |	|¦  «        r|                     |	¦  «         Œ.t          |¦  «        D ]Q}
t          |
|¦  «        r?|                      |
|¦  «        s) |t          j                             ||
¦  «        ¦  «         ŒRŒÉdS )z9Check all files in this directory and all subdirectories.r   r   z
directory r.   r   N)r|   rÉ  r  r!  ro  rô   rÛ  r»  rñ  Úwalkr   rŠ  Úremoverð  rò  ró  )ra   Údirnamero  rô   Úfilepatternsr»  ÚrootÚdirsr/   ÚsubdirrÛ  s              r7   rÈ  zStyleGuide.input_dir2	  sZ  € à—.’. Ñ%Ô%ˆØ�=Š=˜Ñ!Ô!ð 	Ø�1Ø”<Ô&Ô/ˆØ”,Ô&ˆØ”|Ô,ˆØ”ˆÝ!#¤¨Ñ!1Ô!1ð 	9ð 	9ÑˆD�$˜Øð +Ý�l TÑ)Ñ*Ô*Ð*Ø�]Ð#Ð#Ô# qÑ(Ð#Ð#Ñ#Ý  ™,œ,ð (ð (�Ø—=’= ¨Ñ.Ô.ð (Ø—K’K Ñ'Ô'Ð'øÝ" 5™MœMð 9ð 9�õ # 8¨\Ñ:Ô:ð9àŸš h°Ñ5Ô5ð9ð �F�2œ7Ÿ<š<¨¨hÑ7Ô7Ñ8Ô8Ð8øð9ð	9ð 	9r9   c                 óJ  — | j         j        sdS t          j                             |¦  «        }t          || j         j        ¦  «        rdS |r t          j                             ||¦  «        }t          j                             |¦  «        }t          || j         j        ¦  «        S )zxCheck if the file should be excluded.

        Check if 'options.exclude' contains a pattern matching filename.
        FT)r  Úexcluderñ  rò  Úbasenamerð  ró  r  )ra   rÛ  rö  rØ  s       r7   rÉ  zStyleGuide.excludedJ	  sŒ   € ð
 Œ|Ô#ð 	Ø�5Ý”7×#Ò# HÑ-Ô-ˆÝ˜( D¤LÔ$8Ñ9Ô9ð 	Ø�4Øð 	6Ý”w—|’| F¨HÑ5Ô5ˆHÝ”7—?’? 8Ñ,Ô,ˆÝ˜h¨¬Ô(<Ñ=Ô=Ð=r9   c                 óö   ‡— t          ‰¦  «        dk     r't          ˆfd„| j        j        D ¦   «         ¦  «        rdS ‰                     | j        j        ¦  «        o‰                     | j        j        ¦  «         S )zàCheck if the error code should be ignored.

        If 'options.select' contains a prefix of the error code,
        return False.  Else, if 'options.ignore' contains a prefix of
        the error code, return True.
        r   c              3   óB   •K  — | ]}|                      ‰¦  «        V — Œd S r_  r`  )r5   r6   r¸   s     €r7   r8   z)StyleGuide.ignore_code.<locals>.<genexpr>`	  sC   øè è € ð !?ð !?Ø%&ð "#§¢¨dÑ!3Ô!3ð !?ð !?ð !?ð !?ð !?ð !?r9   F)r}   re  r  r¾  r‹   rÝ  )ra   r¸   s    `r7   ri  zStyleGuide.ignore_codeY	  s‡   ø€ õ ˆt‰9Œ9�qŠ=ˆ=�Sð !?ð !?ð !?ð !?Ø*.¬,Ô*=ð!?ñ !?ô !?ñ ?ô ?ˆ=à�5Ø—’ ¤Ô 3Ñ4Ô4ð 9Ø—O’O D¤LÔ$7Ñ8Ô8Ð8ð	:r9   c                 óê   ‡ — g }t           |                              ¦   «         D ]B\  }}|\  }}t          ˆ fd„|D ¦   «         ¦  «        r|                     |j        ||f¦  «         ŒCt          |¦  «        S )z½Get all the checks for this category.

        Find all globally visible functions where the first argument
        name starts with argument_name and which contain selected tests.
        c              3   óH   •K  — | ]}|o‰                      |¦  «         V — Œd S r_  )ri  )r5   r¸   ra   s     €r7   r8   z(StyleGuide.get_checks.<locals>.<genexpr>o	  s9   øè è € ÐKÐK¸T˜Ð7 ×!1Ò!1°$Ñ!7Ô!7Ð8ÐKÐKÐKÐKÐKÐKr9   )r[   rú  re  rï   r  rŠ  )ra   Úargument_nameÚchecksr]   Úattrsr^   r_   s   `      r7   rÁ  zStyleGuide.get_checksf	  s„   ø€ ð ˆÝ# MÔ2×8Ò8Ñ:Ô:ð 	=ð 	=‰LˆE�5Ø!‰MˆU�DÝÐKÐKÐKÐKÀUÐKÑKÔKÑKÔKð =Ø—’˜uœ~¨u°dÐ;Ñ<Ô<Ð<øÝ�f‰~Œ~Ðr9   r_  )NNr   )r  rb  rc  re   rg   rÂ  rË  rº  rÈ  rÉ  ri  rÁ  rL   r9   r7   r  r  ë  s«   € € € € € Ø7Ð7ð#ð #ð #ðJ#ð #ð #ð #ð
ð ð ð ð$Nð Nð Nð Nð9ð 9ð 9ð0>ð >ð >ð >ð:ð :ð :ðð ð ð ð r9   r  c                 óH  — t          | |d¬¦  «        }g d¢|_        |                     ddddd¬	¦  «         |                     d
dddd¬	¦  «         |                     ddddd¬	¦  «         |                     dddd¬¦  «         |                     ddt          d¬¦  «         |                     dddd¬¦  «         |                     ddd d!¬¦  «         |                     d"dd d#t          z  ¬¦  «         |                     d$dd%¬&¦  «         |                     d'dd(¬&¦  «         |                     d)dd*¬&¦  «         |                     d+dd,¬&¦  «         |                     d-d.d/t
          d0¬1¦  «         |                     d2d.d/d3d4¬1¦  «         |                     d5d.d/t          d6¬1¦  «         |                     d7dd8¬&¦  «         |                     d9d:d;d<¬¦  «         |                     d=dd>¬&¦  «         |                     d?¦  «        }|                     d@ddA¬&¦  «         |S )Bz"Create the parser for the program.z%prog [options] input ...)ÚprogÚversionÚusage)r×  rÛ  r¾  rÝ  zmax-line-lengthzmax-doc-lengthzindent-sizezhang-closingr¿  r¢   r½  z	show-pep8zshow-sourceÚ
statisticsrô   z-vz	--verboser   r¿  z(print status messages, or debug with -vv)r   ÚactionÚhelpz-qz--quietz+report only file names, or nothing with -qqz-rz--repeatTÚ
store_truez1(obsolete) show all occurrences of the same errorz--firstÚstore_falser™  z#show first occurrence of each error)rå  Údestræ  z	--excluder÷  z[exclude files or directories which match these comma separated patterns (default: %default)©Úmetavarr   ræ  z
--filenamez*.pyzjwhen parsing directories, only check filenames matching these comma separated patterns (default: %default)z--selectrÞ  rZ   z&select errors and warnings (e.g. E,W6)z--ignorez2skip errors and warnings (e.g. E4,W) (default: %s)z--show-sourcezshow source code for each error)rå  ræ  z--show-pep8z3show text of PEP 8 for each error (implies --first)z--statisticszcount errors and warningsz--countzgprint total number of errors and warnings to standard error and set exit code to 1 if total is not nullz--max-line-lengthrí  r­  z3set maximum allowed line length (default: %default))rÆ   rë  r   ræ  z--max-doc-lengthNzSset maximum allowed doc line length and perform these checks (unchecked if not set)z--indent-sizez9set how many spaces make up an indent (default: %default)z--hang-closingzNhang closing bracket instead of matching indentation of opening bracket's linez--formatr¢   r   z.set the error format [default|pylint|<custom>]z--diffzSreport changes only within line number ranges in the unified diff received on STDINzTesting Optionsz--benchmarkzmeasure processing speed)r   Úconfig_optionsÚ
add_optionÚDEFAULT_EXCLUDEr¿  ÚMAX_LINE_LENGTHÚINDENT_SIZEÚadd_option_group)rá  râ  r·  rl   s       r7   Ú
get_parserrò  t	  sw  € å˜t¨WØ ;ð=ñ =ô =€FðFð Fð F€FÔð ×Ò�d˜K°¸7ØEð ñ Gô Gð Gà
×Ò�d˜I¨q¸ØHð ñ Jô Jð Jà
×Ò�d˜J°¸\ØNð ñ Pô Pð Pà
×Ò�i¨¸HØ@ð ñ Bô Bð Bà
×Ò�k¨:½ðJð ñ Kô Kð Kð ×Ò�l¨JÀð1ð ñ 2ô 2ð 2ð ×Ò�j¨(¸BØCð ñ Eô Eð Eà
×Ò�j¨(¸Bð+Ý-;ñ<ð ñ =ô =ð =ð ×Ò�o¨lØ<ð ñ >ô >ð >à
×Ò�m¨Lð/ð ñ 0ô 0ð 0ð ×Ò�n¨\Ø6ð ñ 8ô 8ð 8à
×Ò�i¨ð/ð ñ 0ô 0ð 0ð ×ÒÐ)°¸sÝ-ð1ð ñ 2ô 2ð 2ð ×ÒÐ(¨u¸cØ"ðAð ñ Bô Bð Bð ×Ò�o¨E¸3Ý)ð1ð ñ 2ô 2ð 2ð ×ÒÐ&¨|ðCð ñ Dô Dð Dð ×Ò�j¨(¸IØKð ñ Mô Mð Mà
×Ò�h |ð@ð ñ Aô Að Að ×#Ò#Ð$5Ñ6Ô6€EØ	×Ò�]¨<Ø4ð ñ 6ô 6ð 6à€Mr9   c           
      ól  ‡— t          j        ¦   «         }| j        }t          j        }t
          r\t          j                             t
          ¦  «        r8| j        rt          dt
          z  ¦  «         | 
                    t
          ¦  «         |o;t          j                             t          j                             |¦  «        ¦  «        xŠ}|rf| 
                    ˆfd„t          D ¦   «         ¦  «        r‰}| j        rt          d‰z  ¦  «         n$t          j                             ‰¦  «        \  Š}|°f|rMt          j                             |¦  «        r.| j        rt          d|z  ¦  «         | 
                    |¦  «         d}|                     |j        ¦  «        r|j        }n+|                     d¦  «        rd}t#          j        d¦  «         |�r`d„ |j        D ¦   «         }	|                     g ¦  «        \  }
}|                     |¦  «        D �]}|                     d	d
¦  «        |j        vrt          d|z  ¦  «         Œ3| j        dk    r7t          d                     ||                     ||¦  «        ¦  «        ¦  «         |                     d
d	¦  «        }|	|         }|dv r|                     ||¦  «        }nG|dv r|                     ||¦  «        }n,|                     ||¦  «        }|dk    rt9          ||¦  «        }t;          |
||¦  «         �Œ|                     ||
¬¦  «        \  } }| S )a{  Read and parse configurations.

    If a config file is specified on the command line with the
    "--config" option, then only it is used for configuration.

    Otherwise, the user configuration (~/.config/pycodestyle) and any
    local configurations in the current directory or above will be
    merged together (in that order) using the read method of
    ConfigParser.
    zuser configuration: %sc              3   óX   •K  — | ]$}t           j                             ‰|¦  «        V — Œ%d S r_  )rñ  rò  ró  )r5   Úfnrö  s     €r7   r8   zread_config.<locals>.<genexpr>Í	  s3   øè è € ÐIÐI°B•r”w—|’| F¨BÑ/Ô/ÐIÐIÐIÐIÐIÐIr9   zlocal configuration: in %szcli configuration: %sNÚpep8z0[pep8] section is deprecated. Use [pycodestyle].c                 ó6   — i | ]}|j         |j        p|j        “ŒS rL   )ré  rÆ   rå  ©r5   Úos     r7   rk  zread_config.<locals>.<dictcomp>á	  s%   € ÐNÐNÐN°a�q”v˜qœvÐ1¨¬ÐNÐNÐNr9   rÃ  r   z  unknown option '%s' ignoredr   z	  {} = {})rí  r¿  )rç  rè  r×  )rU   )ÚconfigparserÚRawConfigParserÚconfigrñ  ÚcurdirÚUSER_CONFIGrò  Úisfilerô   r   rã  r  ÚcommonprefixÚPROJECT_CONFIGrŒ   Úhas_sectionrá  ÚwarningsÚwarnÚoption_listÚ
parse_argsr  r4   rì  r¢   rê   ÚgetintÚ
getbooleanr  Úsetattr)r  r_   rÄ  r·  rü  Úcli_confÚ	local_dirÚtailÚpycodestyle_sectionr  Únew_optionsr  ÚoptÚnormalized_optÚopt_typer  rö  s                   @r7   Úread_configr  µ	  sW  ø€ õ Ô)Ñ+Ô+€FàŒ~€Hå”	€Iåð !•r”w—~’~¥kÑ2Ô2ð !ØŒ?ð 	:ÝÐ*­[Ñ8Ñ9Ô9Ð9Ø�Š•KÑ Ô Ð àÐH�RœWŸ_š_­R¬W×-AÒ-AÀ$Ñ-GÔ-GÑHÔHÐH€FˆTØ
ð /Ø�;Š;ÐIÐIÐIÐI½.ÐIÑIÔIÑIÔIð 	ØˆIØŒð =ÝÐ2°VÑ;Ñ<Ô<Ð<ØÝœŸš vÑ.Ô.‰ˆ�ð ð /ð ð •B”G—N’N 8Ñ,Ô,ð ØŒ?ð 	6ÝÐ)¨HÑ4Ñ5Ô5Ð5Ø�Š�HÑÔÐàÐØ×Ò˜&œ+Ñ&Ô&ð JØ$œkÐÐØ	×	Ò	˜FÑ	#Ô	#ð JØ$ÐÝŒÐHÑIÔIÐIàñ GØNÐN¸6Ô;MÐNÑNÔNˆð #×-Ò-¨bÑ1Ô1Ñˆ�bð —>’>Ð"5Ñ6Ô6ð 	8ñ 	8ˆCØ�{Š{˜3 Ñ$Ô$¨FÔ,AÐAÐAÝÐ5¸Ñ;Ñ<Ô<Ð<ØØŒ Ò"Ð"Ý�k×(Ò(¨Ø)/¯ªÐ4GÈÑ)MÔ)MñOô Oñ Pô Pð Pà Ÿ[š[¨¨cÑ2Ô2ˆNØ" >Ô2ˆHØÐ+Ð+Ð+ØŸšÐ&9¸3Ñ?Ô?��ØÐ:Ð:Ð:Ø×)Ò)Ð*=¸sÑCÔC��àŸ
š
Ð#6¸Ñ<Ô<�Ø! YÒ.Ð.Ý+¨E°9Ñ=Ô=�EÝ�K °Ñ7Ô7Ð7Ñ7ð ×)Ò)¨'¸+Ð)ÑFÔF‰ˆ�"Ø€Nr9   Fc           	      ó¦  — |st          ¦   «         }|                     d¦  «        sT|                     dd|j        ›dd                     |j        ¦  «        ›d�¬¦  «        }|                     dd|d	¬
¦  «         | s|sg } |                     | ¦  «        \  }}d|_        |�||_	        |r@|s>|j
        st          d„ t          D ¦   «         ¦  «        rdg}n|                     d¦  «         t          ||| |¦  «        }|o|j        dk    ot           |_        t#          |j        ¦  «        |_        t'          |j        ¦  «        |_        t#          |j        ¦  «        |_        t#          |j        ¦  «        |_        |j
        rOt.          |_        t1          ¦   «         }t3          ||j        |d         ¦  «        |_        t7          |j        ¦  «        }||fS )zÖProcess options passed either via arglist or command line args.

    Passing in the ``config_file`` parameter allows other tools, such as
    flake8 to specify their own options to be processed in pycodestyle.
    z--configÚConfigurationz'The project options are read from the [z‡] section of the tox.ini file or the setup.cfg file located in any parent folder of the path(s) being processed.  Allowed options are: z, rê  )Údescriptionrò  zuser config file locationrê  Nc              3   óT   K  — | ]#}t           j                             |¦  «        V — Œ$d S r_  )rñ  rò  Úexists)r5   rO   s     r7   r8   z"process_options.<locals>.<genexpr>
  sD   è è € ð ;ð ;Ø#'õ  "œwŸ~š~¨dÑ3Ô3ð ;ð ;ð ;ð ;ð ;ð ;r9   zinput not specifiedr   r   )rò  Ú
has_optionrñ  rá  ró  rì  rí  r  r¼  rô   rû  re  r  r	  r  r½  r’  Ú_parse_multi_optionsrÛ  r  r×  r¾  rÝ  r­  rä  rþ  r¯  rŠ  )	rÄ  rµ  r¶  r·  rô   rl   r  r_   rá  s	            r7   r¸  r¸  ÿ	  s  € ð ð Ý‘”ˆØ×Ò˜ZÑ(Ô(ð ;Ø×'Ò'¨¨ð Œ[ˆ[ˆ[˜$Ÿ)š) FÔ$9Ñ:Ô:Ð:Ð:ð<ð (ñ >ô >ˆð
 	×Ò˜¨V¸[Ø9ð 	ñ 	;ô 	;ð 	;ð ð ˜:ð Øˆð ×'Ò'¨Ñ0Ô0�O€WˆdØ€GÔð ÐØ!ˆŒàð 0˜$ð 0ØŒ<ð 	0�3ð ;ð ;Ý+9ð;ñ ;ô ;ñ ;ô ;ð 	0à�5ˆDˆDà�LŠLÐ.Ñ/Ô/Ð/Ý˜' 4¨°&Ñ9Ô9€GØ!ÐG g¤m°qÒ&8ÐG½Z€GÔå+¨GÔ,<Ñ=Ô=€GÔÝ% g¤oÑ6Ô6€G„OÝ)¨'¬.Ñ9Ô9€G„NÝ)¨'¬.Ñ9Ô9€G„Nà„|ð .Ý%ˆÔÝÑ!Ô!ˆÝ!,¨U°GÔ4DÀdÈ1ÄgÑ!NÔ!NˆÔÝ�gÔ,Ñ-Ô-ˆà�Dˆ=Ðr9   r­   c                 óH   — | rd„ |                       |¦  «        D ¦   «         S | S )zgSplit and strip and discard empties.

    Turns the following:

    A,
    B,

    into ["A", "B"]
    c                 ó^   — g | ]*}|                      ¦   «         ¯|                      ¦   «         ‘Œ+S rL   )r—   rø  s     r7   rQ   z(_parse_multi_options.<locals>.<listcomp>>
  s-   € ÐKÐKÐK˜aÀÇÂÁÄÐK�—’‘	”	ÐKÐKÐKr9   )rŒ   )r  Úsplit_tokens     r7   r  r  3
  s1   € ð ð ØKÐK 7§=¢=°Ñ#=Ô#=ÐKÑKÔKÐKàˆr9   c                  óÜ  — ddl } 	 |                       | j        d„ ¦  «         n# t          $ r Y nw xY wt          d¬¦  «        }|j        }|                     ¦   «         }|j        r|                     ¦   «          |j        r| 	                    ¦   «          |j
        rQ|j        r4t          j                             t          |j
        ¦  «        dz   ¦  «         t          j        d¦  «         dS dS )z.Parse options and run checks on Python source.r   Nc                 ó*   — t          j        d¦  «        S )Nr   )r  Úexit)ÚsignumÚframes     r7   ú<lambda>z_main.<locals>.<lambda>I
  s   € ½C¼HÀQ¹K¼K€ r9   T)rµ  rx   r   )ÚsignalÚSIGPIPEÚAttributeErrorr  r  rË  rä  r�  Ú	benchmarkr�  rl  r¿  r  ÚstderrÚwriterÔ   r  )r#  Ústyle_guider  r!  s       r7   Ú_mainr*  C
  s  € à€M€M€MðØ�Š�f”nÐ&GÐ&GÑHÔHÐHÐHøÝð ð ð Øˆðøøøõ ¨Ð-Ñ-Ô-€KØÔ!€Gà×$Ò$Ñ&Ô&€FàÔð "Ø×ÒÑ!Ô!Ð!àÔð !Ø×ÒÑ Ô Ð àÔð ØŒ=ð 	>ÝŒJ×Ò�S Ô!4Ñ5Ô5¸Ñ<Ñ=Ô=Ð=ÝŒ�‰Œˆˆˆðð s   †# £
0¯0Ú__main__r_  )Nrê  )T)NFNNN)r­   )�re   rC  rú  rR   rß  rÉ   rñ  rc  r  rr  rÇ   r  r   Ú	functoolsr   Úoptparser   r  Úcallabler,  r	   Ú__version__rî  r¿  Úplatformrò  Ú
expanduserrþ  ró  ÚgetenvÚImportErrorr  rï  rž   rÍ  rð  r—  rK  Ú	frozensetrÌ   Úkwlistr5  r4  r2  rÊ  r6  r3  r1  rë   rç   ÚINDENTÚDEDENTrÌ  rì   Ú
ERRORTOKENr0  rÀ  rJ  rj   rc   rŸ   r²   r>  rŽ  r•  r˜  r»   r  rm  rø  r    r•   r¢   rp  rd  rœ  rî   r¾  r/  r[   rW   rh   rr   rv   r   r†   r“   rœ   r£   r¹   rÀ   rÐ   rÜ   r  r  r  r<  r@  rI  rR  rV  rh  ru  r{  r}  r~  r„  rˆ  rŠ  r“  r–  rš  r�  r©  rÇ  rÓ  r×  rä  r   rn  r�   r–   ré  rþ  rý  r  rð  rl  r  r  re  r’  r”  r­  r  rò  r  r¸  r  r*  r  rL   r9   r7   ú<module>r9     s!  ðð8ð ð* €€€Ø Ð Ð Ð Ø €€€Ø 	€	€	€	Ø €€€Ø 	€	€	€	Ø 	€	€	€	Ø 
€
€
€
Ø €€€Ø €€€Ø €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø !Ð !Ð !Ð !Ð !Ð !ð 	Ô˜7Ò"Ð"Øˆ��˜ :¨tÑ4Ô4Ñ5Ô5ð 	#ð "˜	 (Ô"3Ñ4Ô4€HÔà€à;€Ø9€ð	Ø
„|�wÒÐØ”g×(Ò(Ð):Ñ;Ô;ˆˆà”g—l’lØˆBŒIÐ'Ñ(Ô(ÐK¨B¬G×,>Ò,>¸{Ñ,KÔ,KØñ
ô 
ˆøøð ð ð ð Ø€K€K€Kðøøøð *€Ø€ð àð	ð Ð ð €Ø€à<Ø5ðð €ð
 €ØˆYÐ0Ð0Ð0Ñ1Ô1€
Øˆ9�W”^ w iÑ/Ñ0Ô0°:Ñ=€Ø�)Ð7Ð7Ð7Ñ8Ô8€Ø�	Ð?Ð?Ð?Ñ@Ô@€Ø%×+Ò+Ð,LÐ,LÐ,LÑMÔMÐ Ø�ið !)ð !)ð !)ñ *ô *Ð ð ˆY�yÑ!Ô!€
Ø
ˆ)�X”[ (Ô"2Ð3Ñ
4Ô
4€Ø�mŠm˜Xœ_¨h¬oÐ>Ñ?Ô?€à×!Ò! 8Ô#3°XÔ5HÐ"IÑJÔJ€ØLÐLÐL€àˆrŒz˜+Ñ&Ô&€Ø�"”*Ð.Ñ/Ô/€Ø�"”*˜\Ñ*Ô*€Ø(˜bœjÐ)KÑLÔLÐ Ø)˜rœzÐ*>Ñ?Ô?Ð Ø$˜"œ*ð &Fñ Gô GÐ à#˜œð %1ñ 2ô 2Ð à�R”Zð4ñô Ð ð �”
Ð2°T·Y²Y¸xÑ5HÔ5HÑHÑIÔI€Ø�”ÐIÑJÔJ€ØˆrŒz˜-Ñ(Ô(€ØˆRŒZÐEÑFÔF€
Ø!�r”zÐ"9Ñ:Ô:Ð Ø'˜RœZÐ(NÑOÔOÐ Ø$. B¤JØ×Ò˜Ÿšð "ð "ð Cð "ñ "ô "ñ ô ñ ô ñ
%ô 
%Ð !ð ˆrŒzÐJÑKÔK€Ø�R”Z Ñ.Ô.Ð àÔ�wÒÐØÔ*€MØÔ,€NØÔ&€K€Kà35Ð5€MÐ5�N [à°¸BÐ
?Ð
?€ðBð Bð Bðð ð ð ð. ðMð Mñ „ðMð& ðDð Dñ „ðDð ð<ð <ñ „ð<ð* ðDð Dñ „ðDð  ðHð Hñ „ðHðJ :ð  :ð  :ðF ðR/ð R/ñ „ðR/ðj ð>ð >ñ „ð>ð@ ðGð Gñ „ðGð. ðDð Dñ „ðDð, ð&1ð &1ñ „ð&1ðR ðJEð JEñ „ðJEðZ ð%ð %ñ „ð%ðP ðHð Hñ „ðHð. ð]ð ]ñ „ð]ð@ ðJð Jñ „ðJð$ ð>ð >ñ „ð>ðB ð)ð )ñ „ð)ðX ð=ð =ñ „ð=ð& ð31ð 31ñ „ð31ðl ð=*ð =*ñ „ð=*ð@ ð%ð %ñ „ð%ðV �	Ð*Ñ+Ô+¨i¨i¸Ñ.AÔ.AÑA€ðð ð ð!ð !ð !ð4 ðBð Bñ „ðBð: ðð ñ „ððD ð!7ð !7ñ „ð!7ðH ðJð Jñ „ðJð* ð
ð 
ñ „ð
ð* ð=ð =ñ „ð=ð  ð`ð `ñ „ð`ðF ð8ð 8ñ „ð8ðx ð, ð , ñ „ð, ðh!ð !ð !ðFð Fð Fð
 €y€y��~„~�j�b”jÐ!5°r´tÑ<Ô<ÔCÑDÔD€ðð ð ð&	;ð 	;ð 	;ðð ð ð ð: #%¤)ð ð ð ð ð$Cð Cð Cð Cðð ð ðLð Lð Lð`.ð `.ð `.ð `.ð `.ñ `.ô `.ð `.ðF	W,ð W,ð W,ð W,ð W,ñ W,ô W,ð W,ðtð ð ð ð �ñ ô ð ð3 ð 3 ð 3 ð 3 ð 3 �Zñ 3 ô 3 ð 3 ðl
?ð 
?ð 
?ð 
?ð 
?�ñ 
?ô 
?ð 
?ðFð Fð Fð Fð Fñ Fô Fð FðR "¨;ð >ð >ð >ð >ðBGð Gð GðT AEØ)-ð1ð 1ð 1ð 1ðhð ð ð ð ð ð ð6 ˆzÒÐØ	€E�G„G€G€G€Gð Ðs   Á>A)C( Ã(C2Ã1C2