§
    öyIfí�  ã                  ó^  — d Z ddlmZ ddlZddlZddlmZ ddlmZm	Z	m
Z
 ddlZddlmZmZmZ ddlmZ ddlmZmZ dd	lmZmZmZ dd
lmZ ddlmZ erddlmZ  G d„ de¦  «        ZdZdZ e effZ! e" e#d„ dD ¦   «         g d¢¦  «        fi d„ dD ¦   «         ¤ŽZ$d!d„Z% G d„ d e¦  «        Z&dS )"zBasic checker for Python code.é    )ÚannotationsN)ÚIterator)ÚTYPE_CHECKINGÚLiteralÚcast)ÚnodesÚobjectsÚutil)Úutils)ÚBaseCheckerr   )ÚHIGHÚ	INFERENCEÚ
Confidence)r   )ÚLinterStats)ÚPyLinterc                  ó   — e Zd ZdZdZdS )Ú_BasicCheckerzYPermits separating multiple checks with the same checker name into
    classes/file.
    ÚbasicN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úname© ó    úV/var/www/piapp/venv/lib/python3.11/site-packages/pylint/checkers/base/basic_checker.pyr   r      s   € € € € € ðð ð €D€D€Dr   r   Ú__reversed__)Ú__getitem__Ú__len__c                ó<   — g | ]}d                       d|g¦  «        ‘ŒS )ú.Úbuiltins)Újoin©Ú.0Úxs     r   ú
<listcomp>r'   *   s(   € ÐDÐDÐD qˆ�Š�:˜q�/Ñ	"Ô	"ÐDÐDÐDr   )ÚsetÚdictÚlist)zset()z{}z[]c                ó   — i | ]}||› d �“Œ	S )z()r   r$   s     r   ú
<dictcomp>r,   -   s0   € ð ð ð àð 	
ˆaˆ8ˆ8ˆ8ðð ð r   )zcollections.dequezcollections.ChainMapzcollections.Counterzcollections.OrderedDictzcollections.defaultdictzcollections.UserDictzcollections.UserListÚsectúreporter_nodes.SectionÚstatsr   Ú	old_statsúLinterStats | NoneÚreturnÚNonec                ó(  — i }dD ]–}t          t          d         |¦  «        }|                     |¦  «        }i ||<   |dk    rY|                     |¦  «        }||z
  }|dz  |z  }|d›||         d<   |                     |¦  «        }	|	dz  |z  }|d›||         d<   Œ—g d¢}
dD ]Å}t          t          d         |¦  «        }|                     |¦  «        }|r|                     |¦  «        nd	}|rt          j        ||¦  «        nd	}|
|t          |¦  «        |rt          |¦  «        nd
|r|nd
||                              dd¦  «        ||                              dd¦  «        gz  }
ŒÆ|  	                    t          j        |
dd¬¦  «        ¦  «         d	S )zzMake a report of.

    * percentage of different types documented
    * percentage of different types with a bad name
    )ÚmoduleÚclassÚmethodÚfunction)r8   r6   r7   r5   r   g      Y@z.2fÚpercent_documentedÚpercent_badname)ÚtypeÚnumberz
old numberÚ
differencez%documentedz%badnameNÚNCÚ0é   é   )ÚchildrenÚcolsÚrheaders)r   r   Úget_node_countÚget_undocumentedÚget_bad_namesÚ
lint_utilsÚdiff_stringÚstrÚgetÚappendÚreporter_nodesÚTable)r-   r/   r0   Ú
nice_statsÚ	node_typeÚtotalÚundocumented_nodeÚ
documentedÚpercentÚbadname_nodeÚlinesÚnewÚoldÚdiff_strs                 r   Úreport_by_type_statsrZ   <   sæ  € ð -/€JØ>ð Hð Hˆ	Ý�Ð!HÔIÈ9ÑUÔUˆ	Ø×$Ò$ YÑ/Ô/ˆØ "ˆ
�9ÑØ�AŠ:ˆ:Ø %× 6Ò 6°yÑ AÔ AÐØÐ!2Ñ2ˆJØ! EÑ)¨UÑ2ˆGØ=DÐ:JÐ:JˆJ�yÔ!Ð"6Ñ7Ø ×.Ò.¨yÑ9Ô9ˆLØ# eÑ+¨uÑ4ˆGØ:AÐ7GÐ7GˆJ�yÔ!Ð"3Ñ4øØUÐUÐU€EØ>ð 
ð 
ˆ	Ý�Ð!HÔIÈ9ÑUÔUˆ	Ø×"Ò" 9Ñ-Ô-ˆØ5>ÐHˆi×&Ò& yÑ1Ô1Ð1ÀDˆØ7:ÐD•:Ô)¨#¨sÑ3Ô3Ð3ÀˆØØÝ�‰HŒHØÐ%�C�‰HŒHˆH Ø Ð*ˆHˆH dØ�yÔ!×%Ò%Ð&:¸CÑ@Ô@Ø�yÔ!×%Ò%Ð&7¸Ñ=Ô=ð
ñ 	
ˆˆð 	‡K‚K•Ô$¨e¸!ÀaÐHÑHÔHÑIÔIÐIÐIÐIr   c                  óþ  ‡ — e Zd ZdZdZi dd“dd“dd“d	d
“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd “d!d"“d#d$“d%d&d'd(d)d*d+œ¥Zd,d-effZd˜ˆ fd2„Zd™d3„Z	 e
j        d4d5¦  «        dšd8„¦   «         Z e
j        d4d5¦  «        d›d:„¦   «         Z e
j        d4d5¦  «        dœd<„¦   «         Zd�d@„ZedždC„¦   «         ZdŸdF„Zd dH„Z e
j        dIdJdKdLdM¦  «        d¡dO„¦   «         Zed¢dT„¦   «         Zed£dZ„¦   «         Z e
j        d[¦  «        d¤d\„¦   «         Z e
j        d]¦  «        d¥d_„¦   «         ZeZd¥d`„Z e
j        dadb¦  «        d¦dd„¦   «         Z e
j        da¦  «        d§df„¦   «         Z e
j        dadb¦  «        d¨dh„¦   «         Z e
j        da¦  «        d©dj„¦   «         Zdªdm„Z e
j        dndodpdqda¦  «        d«dr„¦   «         Z  e
j        dsdt¦  «        d¬dv„¦   «         Z! e
j        dw¦  «        d­dy„¦   «         Z" e
j        dz¦  «        d®d|„¦   «         Z#d¯d~„Z$d°d„Z%e&fd±dƒ„Z'	 d²d³d‰„Z(d«dŠ„Z) e
j        d‹¦  «        d´d�„¦   «         Z*dµd�„Z+d¶d’„Z, e
j        d“d”¦  «        dµd•„¦   «         Z- e
j        d”¦  «        d·d—„¦   «         Z.ˆ xZ/S )¸ÚBasicCheckera>  Basic checker.

    Checks for :
    * doc strings
    * number of arguments, local variables, branches, returns and statements in
    functions, methods
    * required module attributes
    * dangerous default values as arguments
    * redefinition of function / method / class
    * uses of the global statement
    r   ÚW0101)zUnreachable codeÚunreachablezbUsed when there is some code behind a "return" or "raise" statement, which will never be accessed.ÚW0102)z&Dangerous default value %s as argumentúdangerous-default-valuez_Used when a mutable value as list or dictionary is detected in a default value for an argument.ÚW0104)z!Statement seems to have no effectúpointless-statementzEUsed when a statement doesn't have (or at least seems to) any effect.ÚW0105)zString statement has no effectúpointless-string-statementzäUsed when a string is used as a statement (which of course has no effect). This is a particular case of W0104 with its own message so you can easily disable it if you're using those strings as documentation, instead of comments.ÚW0106)z&Expression "%s" is assigned to nothingúexpression-not-assignedzqUsed when an expression that is not a function call is assigned to nothing. Probably something else was intended.ÚW0108)zLambda may not be necessaryúunnecessary-lambdazåUsed when the body of a lambda expression is a function call on the same argument list as the lambda itself; such lambda expressions are in all but a few cases replaceable with the function being called in the body of the lambda.ÚW0109)zDuplicate key %r in dictionaryúduplicate-keyzDUsed when a dictionary expression binds the same key multiple times.ÚW0122)zUse of execú	exec-useda  Raised when the 'exec' statement is used. It's dangerous to use this function for a user input, and it's also slower than actual code in general. This doesn't mean you should never use it, but you should consider alternatives first and restrict the functions available.ÚW0123)zUse of evalú	eval-usedzµUsed when you use the "eval" function, to discourage its usage. Consider using `ast.literal_eval` for safely evaluating strings containing Python expressions from untrusted sources.ÚW0150)z3%s statement in finally block may swallow exceptionúlost-exceptionzÃUsed when a break or a return statement is found inside the finally clause of a try...finally block: the exceptions raised in the try clause will be silently swallowed instead of being re-raised.ÚW0199)z>Assert called on a populated tuple. Did you mean 'assert x,y'?úassert-on-tuplezA call of assert on a tuple will always evaluate to true if the tuple is not empty, and will always evaluate to false if it is.ÚW0124)z?Following "as" with another context manager looks like a tuple.úconfusing-with-statementa2  Emitted when a `with` statement component returns multiple values and uses name binding with `as` only for a part of those values, as in with ctx() as a, b. This can be misleading, since it's not clear if the context manager returns a tuple or if the node without a name binding is another context manager.ÚW0125)z3Using a conditional statement with a constant valueúusing-constant-testz‹Emitted when a conditional statement (If or ternary if) uses a constant value for its test. This might not be what the user intended to do.ÚW0126)zgUsing a conditional statement with potentially wrong function or method call due to missing parenthesesú$missing-parentheses-for-call-in-testzsEmitted when a conditional statement (If or ternary if) seems to wrongly call a function due to missing parenthesesÚW0127)z(Assigning the same variable %r to itselfúself-assigning-variablez<Emitted when we detect that a variable is assigned to itselfÚW0128)z$Redeclared variable %r in assignmentúredeclared-assigned-namezMEmitted when we detect that a variable was redeclared in the same assignment.ÚE0111)z/The first reversed() argument is not a sequenceúbad-reversed-sequencez�Used when the first argument to reversed() builtin isn't a sequence (does not implement __reversed__, nor __getitem__ and __len__)z$format function is not called on strúmisplaced-format-functionz½Emitted when format function is not called on str object. e.g doing print("value: {}").format(123) instead of print("value: {}".format(123)). This might not be what the user intended to do.)zUAssert statement has a string literal as its first argument. The assert will %s fail.úassert-on-string-literalzuUsed when an assert statement has a string literal as its first argument, which will cause the assert to always pass.)zDuplicate value %r in setúduplicate-valuezMThis message is emitted when a set contains the same value two or more times.)z%Named expression used without contextúnamed-expr-without-contextzyEmitted if named expression is used to do a regular assignment outside a context like if, for, while, or a comprehension.)z!Exception statement has no effectúpointless-exception-statementzjUsed when an exception is created without being assigned, raised or returned for subsequent use elsewhere.)z*'return' shadowed by the 'finally' clause.úreturn-in-finallyzŠEmitted when a 'return' statement is found in a 'finally' block. This will overwrite the return value of a function and should be avoided.)ÚE0119ÚW0129ÚW0130ÚW0131ÚW0133ÚW0134ÚRP0101zStatistics by typeÚlinterr   r2   r3   c                óN   •— t          ¦   «                              |¦  «         |  d S ©N)ÚsuperÚ__init__)ÚselfrŒ   Ú	__class__s     €r   r�   zBasicChecker.__init__  s'   ø€ Ý‰Œ×Ò˜Ñ Ô Ð ØÐ#Ð#Ð#r   c                óˆ   — | j         j        j        }|dk    | _        g | _        | j         j                             ¦   «          dS )z*Initialize visit variables and statistics.)é   é   N)rŒ   ÚconfigÚ
py_versionÚ
_py38_plusÚ_trysr/   Úreset_node_count)r‘   r—   s     r   ÚopenzBasicChecker.open  s?   € à”[Ô'Ô2ˆ
Ø$¨Ò.ˆŒØˆŒ
ØŒÔ×*Ò*Ñ,Ô,Ð,Ð,Ð,r   rv   rx   Únodeúnodes.Ifc                ó<   — |                       ||j        ¦  «         d S rŽ   ©Ú_check_using_constant_testÚtest©r‘   rœ   s     r   Úvisit_ifzBasicChecker.visit_if  ó"   € ð 	×'Ò'¨¨d¬iÑ8Ô8Ð8Ð8Ð8r   únodes.IfExpc                ó<   — |                       ||j        ¦  «         d S rŽ   rŸ   r¢   s     r   Úvisit_ifexpzBasicChecker.visit_ifexp"  r¤   r   únodes.Comprehensionc                óX   — |j         r |j         D ]}|                      ||¦  «         Œd S d S rŽ   )Úifsr    )r‘   rœ   Úif_tests      r   Úvisit_comprehensionz BasicChecker.visit_comprehension(  sL   € ð Œ8ð 	?Øœ8ð ?ð ?�Ø×/Ò/°°gÑ>Ô>Ð>Ð>ð	?ð 	?ð?ð ?r   ú,nodes.If | nodes.IfExp | nodes.Comprehensionr¡   únodes.NodeNG | Nonec           	     óB  — t           j        t           j        t           j        t           j        t           j        t          j        j        t          j	        t          j
        t           j        f	}t           j        t           j        t           j        t           j        f}t           j        t           j        t           j        t           j        t           j        f}d }t)          |t           j        g|¢|¢R ¦  «        }d }t)          ||¦  «        sft-          j        |¦  «        }t)          |t0          j        ¦  «        r7t)          |t           j        ¦  «        rt6                               |¦  «        \  }}nt)          |t           j        ¦  «        r|}|r’t-          j        |j        ¦  «        }	t)          |	t           j        ¦  «        r_d }
|	                     ¦   «         D ]'}t)          |j        t           j        ¦  «        sd}
 nd}
Œ(|
r|                       d|tB          ¬¦  «         d S |r|                       d|tB          ¬¦  «         d S t)          ||¦  «        rÒd }	 t)          |t           j        ¦  «        r#tE          | #                    |¦  «        ¦  «        }n<t)          |t           j        ¦  «        r"tE          | #                    |¦  «        ¦  «        }n# t          j$        $ r d }Y nw xY w|r|                       d|tB          ¬¦  «         |                       d|tB          ¬¦  «         d S d S )NFTrv   ©rœ   Ú
confidencerx   )%r   ÚModuleÚGeneratorExpÚLambdaÚFunctionDefÚClassDefÚastroidÚbasesÚ	GeneratorÚUnboundMethodÚBoundMethodÚDictÚTupleÚSetÚListÚCallÚBinOpÚBoolOpÚUnaryOpÚ	SubscriptÚ
isinstanceÚConstr   Ú
safe_inferr
   ÚUninferableBaseÚNamer\   Ú_name_holds_generatorÚfuncÚ _get_return_nodes_skip_functionsÚvalueÚadd_messager   r*   Úinfer_call_resultÚInferenceError)r‘   rœ   r¡   Úconst_nodesÚstructsÚexcept_nodesÚinferredÚemitÚmaybe_generator_callÚinferred_callÚall_returns_were_generatorÚreturn_nodeÚcall_inferreds                r   r    z'BasicChecker._check_using_constant_test0  s  € õ ŒLÝÔÝŒLÝÔÝŒNÝŒMÔ#ÝÔ!ÝÔÝŒLð

ˆõ ”:�uœ{­E¬Iµu´zÐBˆõ
 ŒJÝŒKÝŒLÝŒMÝŒOð
ˆð ˆÝ˜$¥¤Ð E¨wÐ E¸Ð EÐ EÑFÔFˆØ#ÐÝ˜$ Ñ-Ô-ð 		(ÝÔ'¨Ñ-Ô-ˆHÝ˜(¥DÔ$8Ñ9Ô9ð V½jØ•e”jñ?ô ?ð Võ .:×-OÒ-OÐPTÑ-UÔ-UÑ*�Ð*øõ ˜�eœjÑ)Ô)ð 	(Ø#'Ð Øð 	Ý!Ô,Ð-AÔ-FÑGÔGˆMÝ˜-­Ô):Ñ;Ô;ð ð .2Ð*Ø#0×#QÒ#QÑ#SÔ#Sð 6ð 6�KÝ% kÔ&7½Ô9KÑLÔLð Ø5:Ð2Ø˜Ø15Ð.Ð.Ø-ð Ø×$Ò$Ø-°DÅYð %ñ ô ð ð �Fàð 	UØ×ÒÐ2¸Í)ÐÑTÔTÐTÐTÐTÝ˜ +Ñ.Ô.ð 	Uð !ˆMð	%õ ˜h­Ô(9Ñ:Ô:ð KÝ$(¨×)CÒ)CÀDÑ)IÔ)IÑ$JÔ$J�M�MÝ ­%¬,Ñ7Ô7ð KÝ$(¨×)CÒ)CÀDÑ)IÔ)IÑ$JÔ$J�MøøÝÔ)ð %ð %ð %Ø $���ð%øøøàð Ø× Ò Ø:ØÝ(ð !ñ ô ð ð
 ×ÒÐ2¸Í)ÐÑTÔTÐTÐTÐTð)	Uð 	Us   ÉA9K
 Ë
KËKú
nodes.Nameútuple[bool, nodes.Call | None]c                óZ  — t          | t          j        ¦  «        sJ ‚d}d}|                      ¦   «                              | j        ¦  «        }|s||fS d„ |d         D ¦   «         }t          |d¦  «        }|�²t          t          j	        |f|¦  «        ¦  «        rd}nŒt          |d         ¦  «        dk    rst          |d         d         j        t          j        ¦  «        rHt          |d         d         j        j        t          j        ¦  «        r|d         d         j        j        }||fS )z¨Return whether `test` tests a name certain to hold a generator, or optionally
        a call that should be then tested to see if *it* returns only generators.
        FNc              3  óœ   K  — | ]G}t          |j        t          j        ¦  «        ¯!t          |j        j        t          j        ¦  «        V — ŒHd S rŽ   )rÅ   Úparentr   ÚAssignrÍ   r³   )r%   Úassign_names     r   ú	<genexpr>z5BasicChecker._name_holds_generator.<locals>.<genexpr>Œ  s^   è è € ð $
ð $
àÝ˜+Ô,­e¬lÑ;Ô;ð$
Ý�{Ô)Ô/µÔ1CÑDÔDð$
ð $
ð $
ð $
ð $
ð $
r   rA   Tr   )rÅ   r   rÉ   ÚframeÚlookupr   ÚnextÚallÚ	itertoolsÚchainÚlenrß   rà   rÍ   rÀ   )r¡   rÕ   rÖ   Úlookup_resultÚmaybe_generator_assignedÚ
first_items         r   rÊ   z"BasicChecker._name_holds_generator�  s>  € õ
 ˜$¥¤
Ñ+Ô+Ð+Ð+Ð+ØˆØ#ÐØŸ
š
™œ×+Ò+¨D¬IÑ6Ô6ˆØð 	.ØÐ-Ð-Ð-ð$
ð $
à,¨QÔ/ð$
ñ $
ô $
Ð õ
 Ð2°DÑ9Ô9ˆ
ØÐ!å•9”? J =Ð2JÑKÔKÑLÔLð HØ��õ �M !Ô$Ñ%Ô%¨Ò*Ð*Ý˜}¨QÔ/°Ô2Ô9½5¼<ÑHÔHð +å˜}¨QÔ/°Ô2Ô9Ô?ÅÄÑLÔLð +ð (5°QÔ'7¸Ô':Ô'AÔ'GÐ$ØÐ)Ð)Ð)r   Ú_únodes.Modulec                óD   — | j         j        j        dxx         dz  cc<   dS )z4Check module name, docstring and required arguments.r5   rA   N©rŒ   r/   Ú
node_count©r‘   rí   s     r   Úvisit_modulezBasicChecker.visit_moduleŸ  s,   € àŒÔÔ$ XÐ.Ð.Ô.°!Ñ3Ð.Ð.Ñ.Ð.Ð.r   únodes.ClassDefc                óD   — | j         j        j        dxx         dz  cc<   dS )zXCheck module name, docstring and redefinition
        increment branch counter.
        ÚklassrA   Nrð   rò   s     r   Úvisit_classdefzBasicChecker.visit_classdef£  s.   € ð 	ŒÔÔ$ WÐ-Ð-Ô-°Ñ2Ð-Ð-Ñ-Ð-Ð-r   rb   rƒ   rd   rf   r‚   ú
nodes.Exprc                óf  — |j         }t          |t          j        ¦  «        rýt          |j         t          ¦  «        rã|                     ¦   «         }t          |t          j        t          j        t          j        f¦  «        r…t          |t          j        ¦  «        r|j	        dk    rn_| 
                    ¦   «         }|�I|                     ¦   «         |u r3t          |t          j        t          j        t          j        f¦  «        rdS |                      d|¬¦  «         dS t          |t          j        ¦  «        rÄd}t          |j        t          j        ¦  «        r|j        j	        }n+t          |j        t          j        ¦  «        r|j        j        }|dd…                              ¦   «         rt+          j        |¦  «        nd}t          |t.          j        ¦  «        r|                      d|t2          ¬¦  «         dS t          |t          j        t          j        f¦  «        sdt          |j        t          j        t          j        f¦  «        r|j        j        |gk    s(t          |t          j        ¦  «        r|j         t@          u rdS t          |t          j!        ¦  «        r|                      d	|tD          ¬¦  «         dS tG          | $                    t          j        ¦  «        ¦  «        r,|                      d
|| %                    ¦   «         ¬¦  «         dS |                      d|¬¦  «         dS )z4Check for various kind of statements without effect.r�   Nrd   ©rœ   Ú rA   rƒ   r°   r‚   rf   ©rœ   Úargsrb   )&rÍ   rÅ   r   rÆ   rJ   Úscoper¶   r²   rµ   r   Úprevious_siblingrà   Ú	AnnAssignÚ	TypeAliasrÎ   rÀ   rË   rÉ   Ú	AttributeÚattrnameÚisupperr   rÇ   r	   ÚExceptionInstancer   ÚYieldÚAwaitrß   ÚTryÚTryStarÚbodyÚEllipsisÚ	NamedExprr   ÚanyÚnodes_of_classÚ	as_string)r‘   rœ   Úexprrþ   Úsiblingr   rÔ   s          r   Ú
visit_exprzBasicChecker.visit_expr©  sì  € ð ŒzˆÝ�d�EœKÑ(Ô(ð 	­Z¸¼
ÅCÑ-HÔ-Hð 	ð
 —J’J‘L”LˆEÝ˜%¥%¤.µ%´,ÅÔ@QÐ!RÑSÔSð Ý˜e¥UÔ%6Ñ7Ô7ð ¸E¼JÈ*Ò<TÐ<TØà"×3Ò3Ñ5Ô5�GàÐ+Ø#ŸMšM™OœO¨uÐ4Ð4Ý&Ø#¥e¤lµE´OÅUÄ_Ð%Uñô ð 5ð
 ˜Ø×ÒÐ9ÀÐÑEÔEÐEØˆFõ �d�EœJÑ'Ô'ð 	ØˆDÝ˜$œ)¥U¤ZÑ0Ô0ð *Ø”y”~��Ý˜DœI¥u¤Ñ7Ô7ð *Ø”yÔ)�ð
 26°b°q°b´×1AÒ1AÑ1CÔ1CÐM•uÔ'¨Ñ-Ô-Ð-ÈˆHÝ˜(¥GÔ$=Ñ>Ô>ð Ø× Ò Ø3¸$Í9ð !ñ ô ð ð ˆFõ �t�eœk­5¬;Ð7Ñ8Ô8ð	õ ˜4œ;­¬µE´MÐ(BÑCÔCð	ð ”KÔ$¨¨Ò.Ð.å˜4¥¤Ñ-Ô-ð /à26´*ÅÐ2HÐ2HàˆFÝ�d�EœOÑ,Ô,ð 	?Ø×ÒÐ9ÀÕQUÐÑVÔVÐVÐVÐVÝ�×$Ò$¥U¤ZÑ0Ô0Ñ1Ô1ð 	?Ø×ÒØ)°¸4¿>º>Ñ;KÔ;Kð ñ ô ð ð ð ð ×ÒÐ2¸ÐÑ>Ô>Ð>Ð>Ð>r   únodes.LambdaÚ	call_argsúlist[nodes.NodeNG]úIterator[nodes.NodeNG]c              #  óÌ   K  — |D ]^}t          |t          j        ¦  «        r>t          |j        t          j        ¦  «        r|j        j        | j        j        k    r|V — ŒZ|V — Œ_d S rŽ   )rÅ   r   ÚStarredrÍ   rÉ   r   rý   Úvararg)rœ   r  Úargs      r   Ú_filter_varargzBasicChecker._filter_varargó  st   è è € ð ð 	ð 	ˆCÝ˜#�uœ}Ñ-Ô-ð å˜sœy­%¬*Ñ5Ô5ðàœ	œ¨$¬)Ô*:Ò:Ð:à�I�I�Iøà�	�	�	�	ð	ð 	r   rý   ú#list[nodes.Starred | nodes.Keyword]Úvariadic_namerJ   Úboolc                ó@   ‡— |  pt          ˆfd„| D ¦   «         ¦  «        S )Nc              3  ó¶   •K  — | ]S}t          |j        t          j        ¦  «        r|j        j        ‰k    pt          |j        t          j        ¦  «         V — ŒTd S rŽ   )rÅ   rÍ   r   rÉ   r   )r%   Úar  s     €r   râ   z6BasicChecker._has_variadic_argument.<locals>.<genexpr>  sq   øè è € ð 
ð 
ð õ �q”w¥¤
Ñ+Ô+ð .Ø”” Ò-ð3å˜aœg¥u¤zÑ2Ô2Ð2ð
ð 
ð 
ð 
ð 
ð 
r   )r  )rý   r  s    `r   Ú_has_variadic_argumentz#BasicChecker._has_variadic_argument  sH   ø€ ð ˆxð 
�3ð 
ð 
ð 
ð 
ð ð	
ñ 
ô 
ñ 
ô 
ð 	
r   rh   c                ó  — |j         j        rdS |j        }t          |t          j        ¦  «        sdS t          |j        j        t          j        ¦  «        r+t          |j        j        j        t          j        ¦  «        rdS t          |j         j         ¦  «        }t          |  
                    ||j         ¦  «        ¦  «        }|j         j        r(|                      |j        |j         j        ¦  «        rdS n	|j        rdS |j         j        r(|                      |j        |j         j        ¦  «        rdS n	|j        rdS t!          |¦  «        t!          |¦  «        k    rdS t#          ||¦  «        D ]5\  }}t          |t          j        ¦  «        s dS |j        |j        k    r dS Œ6|j                             t          j        ¦  «        D ]'}|                     |j        ¦  «        d         |u r dS Œ(|                      d|j        |¬¦  «         dS )z'Check whether the lambda is suspicious.Nr   rh   )Úlinerœ   )rý   Údefaultsr
  rÅ   r   rÀ   rË   r  r  r*   r  Úkwargr"  Úkeywordsr  Ústarargsré   ÚziprÉ   r   r  rä   rÎ   Ú
fromlineno)r‘   rœ   ÚcallÚordinary_argsÚnew_call_argsr  Ú
passed_argr   s           r   Úvisit_lambdazBasicChecker.visit_lambda  s  € ð Œ9Ôð 	ð ˆFØŒyˆÝ˜$¥¤
Ñ+Ô+ð 	ð ˆFÝ�d”i”n¥e¤oÑ6Ô6ð 	½:ØŒIŒNÔ¥¤ñ<
ô <
ð 	ð
 ˆFå˜TœYœ^Ñ,Ô,ˆÝ˜T×0Ò0°°t´yÑAÔAÑBÔBˆØŒ9Œ?ð 	Ø×*Ò*¨4¬=¸$¼)¼/ÑJÔJð Ø�ðàŒ]ð 	ØˆFàŒ9Ôð 	Ø×*Ò*¨4¬=¸$¼)Ô:JÑKÔKð Ø�ðàŒ]ð 	ØˆFõ ˆ}ÑÔ¥ ]Ñ!3Ô!3Ò3Ð3ØˆFÝ" =°-Ñ@Ô@ð 	ð 	‰OˆC�Ý˜j­%¬*Ñ5Ô5ð Ø��ØŒx˜:œ?Ò*Ð*Ø��ð +ð ”I×,Ò,­U¬ZÑ8Ô8ð 	ð 	ˆDØ�{Š{˜4œ9Ñ%Ô% aÔ(¨DÐ0Ð0Ø��ð 1ð 	×ÒÐ-°D´OÈ$ÐÑOÔOÐOÐOÐOr   r`   únodes.FunctionDefc                óÖ   — |                      ¦   «         r | j        j        j        dxx         dz  cc<   n| j        j        j        dxx         dz  cc<   |                      |¦  «         dS )zeCheck function name, docstring, arguments, redefinition,
        variable names, max locals.
        r7   rA   r8   N)Ú	is_methodrŒ   r/   rñ   Ú_check_dangerous_defaultr¢   s     r   Úvisit_functiondefzBasicChecker.visit_functiondefH  s{   € ð
 �>Š>ÑÔð 	:ØŒKÔÔ(¨Ð2Ð2Ô2°aÑ7Ð2Ð2Ñ2Ð2àŒKÔÔ(¨Ð4Ð4Ô4¸Ñ9Ð4Ð4Ñ4Ø×%Ò% dÑ+Ô+Ð+Ð+Ð+r   c                óz  — dd„}|j         j        pg |j         j        pg z   }|D �]•}|sŒ	 t          |                     ¦   «         ¦  «        }n# t
          j        $ r Y Œ:w xY wt          |t
          j        ¦  «        �r<| 	                    ¦   «         t          v �r ||u r t          | 	                    ¦   «                  }nãt          |t
          j        ¦  «        s ||¦  «        r‡ ||¦  «        r|                     ¦   «         }nžt          |t          j        ¦  «        r |j        › d| 	                    ¦   «         › d�}nd|                     ¦   «         › d| 	                    ¦   «         › d�}n7|                     ¦   «         › dt          | 	                    ¦   «                  › d�}|                      d	||f¬
¦  «         �Œ—dS )z0Check for dangerous default values as arguments.Úinternal_nodeúnodes.NodeNGr2   r  c                ód   — t          | t          j        t          j        t          j        f¦  «        S rŽ   )rÅ   r   r¿   r¾   r¼   )r6  s    r   Úis_iterablez:BasicChecker._check_dangerous_default.<locals>.is_iterableX  s   € Ý˜m­e¬j½%¼)ÅUÄZÐ-PÑQÔQÐQr   z() (ú)z (r`   rü   N)r6  r7  r2   r  )rý   r%  Úkw_defaultsrå   Úinferr·   rÐ   rÅ   ÚInstanceÚqnameÚDEFAULT_ARGUMENT_SYMBOLSÚpytyper   rÀ   r   r  rÎ   )r‘   rœ   r9  r%  ÚdefaultrÍ   Úmsgs          r   r3  z%BasicChecker._check_dangerous_defaultU  sì  € ð	Rð 	Rð 	Rð 	Rð ”IÔ&Ð,¨"°´Ô1FÐ1LÈ"ÑMˆØð 	Tñ 	TˆGØð ØðÝ˜WŸ]š]™_œ_Ñ-Ô-��øÝÔ)ð ð ð Ø�ðøøøõ ˜5¥'Ô"2Ñ3Ô3ñTà—K’K‘M”MÕ%=Ð=Ñ=à˜GÐ#Ð#Ý2°5·;²;±=´=ÔA�C�CÝ ¥wÔ'7Ñ8Ô8ð _¸K¸KÈÑ<NÔ<Nð _ð #�{ 7Ñ+Ô+ð IØ#Ÿlšl™nœn˜˜Ý# G­U¬ZÑ8Ô8ð IØ!&¤ÐAÐA°·²±´ÐAÐAÐA˜˜à!(×!2Ò!2Ñ!4Ô!4ÐHÐH¸¿º¹¼ÐHÐHÐH˜˜ð %×.Ò.Ñ0Ô0Ð^Ð^Õ4LÈUÏ[Ê[É]Ì]Ô4[Ð^Ð^Ð^�CØ× Ò Ð!:ÀÈSÈFÐ ÑSÔSÐSùð?	Tð 	Ts   «!AÁAÁAr^   rp   únodes.Returnc                ót   — |                       |¦  «         |                      |dt          j        f¦  «         dS )zÞReturn node visitor.

        1 - check if the node has a right sibling (if so, that's some
        unreachable code)
        2 - check if the node is inside the 'finally' clause of a 'try...finally'
        block
        r2   N)Ú_check_unreachableÚ_check_not_in_finallyr   rµ   r¢   s     r   Úvisit_returnzBasicChecker.visit_return}  s<   € ð 	×Ò Ñ%Ô%Ð%à×"Ò" 4¨µEÔ4EÐ3GÑHÔHÐHÐHÐHr   únodes.Continuec                ó0   — |                       |¦  «         dS )z]Check is the node has a right sibling (if so, that's some unreachable
        code).
        N©rE  r¢   s     r   Úvisit_continuezBasicChecker.visit_continueŠ  ó   € ð
 	×Ò Ñ%Ô%Ð%Ð%Ð%r   únodes.Breakc                óŠ   — |                       |¦  «         |                      |dt          j        t          j        f¦  «         dS )zÝBreak node visitor.

        1 - check if the node has a right sibling (if so, that's some
        unreachable code)
        2 - check if the node is inside the 'finally' clause of a 'try...finally'
        block
        ÚbreakN)rE  rF  r   ÚForÚWhiler¢   s     r   Úvisit_breakzBasicChecker.visit_break‘  s?   € ð 	×Ò Ñ%Ô%Ð%à×"Ò" 4¨µ5´9½e¼kÐ2JÑKÔKÐKÐKÐKr   únodes.Raisec                ó0   — |                       |¦  «         dS )z]Check if the node has a right sibling (if so, that's some unreachable
        code).
        NrJ  r¢   s     r   Úvisit_raisezBasicChecker.visit_raiseŸ  rL  r   Ú	call_nodeú
nodes.Callc                óÌ  — t          |j        t          j        ¦  «        sd S |j        j        dk    rd S t          j        |j        j        ¦  «        }t          |t          j	        ¦  «        rd S |sp|j        j        }t          |t          j
        ¦  «        sd S t          |j        t          j        ¦  «        r+|j        j        dk    r|                      d|¬¦  «         d S d S d S d S )NÚformatÚprintr   rú   )rÅ   rË   r   r  r  r   rÇ   r  r
   rÈ   rÀ   rÉ   r   rÎ   )r‘   rV  r  Ú	call_exprs       r   Ú _check_misplaced_format_functionz-BasicChecker._check_misplaced_format_function¦  sô   € Ý˜)œ.­%¬/Ñ:Ô:ð 	ØˆFØŒ>Ô" hÒ.Ð.ØˆFåÔ 	¤Ô 3Ñ4Ô4ˆÝ�d�DÔ0Ñ1Ô1ð 	ØˆFØð 
	Nð "œÔ+ˆIÝ˜i­¬Ñ4Ô4ð Ø�å˜9œ>­5¬:Ñ6Ô6ðNà”NÔ'¨7Ò2Ð2à× Ò Ð!<À9Ð ÑMÔMÐMÐMÐMð
	Nð 
	NðNð Nà2Ð2r   rn   rl   r~   r   c                ó   — t          j        |¦  «        r|                      |t          ¬¦  «         |                      |¦  «         t          |j        t          j        ¦  «        r“|j        j	        }|| 
                    ¦   «         v ss||                     ¦   «         v s_|dk    r|                      d|¬¦  «         dS |dk    r|                      |¦  «         dS |dk    r|                      d|¬¦  «         dS dS dS dS dS )	zVisit a Call node.)r±   Úexecrl   rú   ÚreversedÚevalrn   N)r   Úis_terminating_funcrE  r   r\  rÅ   rË   r   rÉ   r   rã   ÚrootrÎ   Ú_check_reversed)r‘   rœ   r   s      r   Ú
visit_callzBasicChecker.visit_call»  s  € õ Ô$ TÑ*Ô*ð 	@Ø×#Ò# DµYÐ#Ñ?Ô?Ð?Ø×-Ò-¨dÑ3Ô3Ð3Ý�d”i¥¤Ñ,Ô,ð 
	=Ø”9”>ˆDð ˜DŸJšJ™LœLÐ(Ð(¨D°D·I²I±K´KÐ,?Ð,?Ø˜6’>�>Ø×$Ò$ [°tÐ$Ñ<Ô<Ð<Ð<Ð<Ø˜ZÒ'Ð'Ø×(Ò(¨Ñ.Ô.Ð.Ð.Ð.Ø˜V’^�^Ø×$Ò$ [°tÐ$Ñ<Ô<Ð<Ð<Ð<ð
	=ð 
	=ð )Ð(Ð,?Ð,?ð
 $�^r   rr   r€   únodes.Assertc                ó�  — t          |j        t          j        ¦  «        r:t	          |j        j        ¦  «        dk    r|                      d|t          ¬¦  «         t          |j        t          j        ¦  «        rKt          |j        j	        t          ¦  «        r.|j        j	        rd}nd}|                      d||f¬¦  «         dS dS dS )	z:Check whether assert is used on a tuple or string literal.r   rr   r°   ÚneverÚalwaysr€   rü   N)rÅ   r¡   r   r½   ré   ÚeltsrÎ   r   rÆ   rÍ   rJ   )r‘   rœ   Úwhens      r   Úvisit_assertzBasicChecker.visit_assertÓ  sÎ   € õ �d”i¥¤Ñ-Ô-ð 	Lµ#°d´i´nÑ2EÔ2EÈÒ2IÐ2IØ×ÒÐ.°TÅdÐÑKÔKÐKå�d”i¥¤Ñ-Ô-ð 	Rµ*¸T¼Y¼_ÍcÑ2RÔ2Rð 	RØŒyŒð  Ø��à�Ø×ÒÐ7¸dÈ$ÈÐÑQÔQÐQÐQÐQð	Rð 	Rð 	Rð 	Rr   rj   ú
nodes.Dictc                óB  — t          ¦   «         }|j        D ]ˆ\  }}t          |t          j        ¦  «        r|j        }n0t          |t          j        ¦  «        r|                     ¦   «         }nŒW||v r|                      d||¬¦  «         | 	                    |¦  «         Œ‰dS )z"Check duplicate key in dictionary.rj   rü   N)
r(   ÚitemsrÅ   r   rÆ   rÍ   r  r  rÎ   Úadd)r‘   rœ   ÚkeysÚkrí   Úkeys         r   Ú
visit_dictzBasicChecker.visit_dictà  s¤   € õ ‰uŒuˆØ”Jð 		ð 		‰DˆAˆqÝ˜!�Uœ[Ñ)Ô)ð Ø”g��Ý˜A�uœÑ/Ô/ð Ø—k’k‘m”m��àØ�dˆ{ˆ{Ø× Ò  °tÀ#Ð ÑFÔFÐFØ�HŠH�S‰MŒMˆMˆMð		ð 		r   r�   ú	nodes.Setc                óê   — t          ¦   «         }|j        D ]\}t          |t          j        ¦  «        r|j        }nŒ%||v r|                      d||t          ¬¦  «         |                     |¦  «         Œ]dS )zCheck duplicate value in set.r�   )rœ   rý   r±   N)	r(   ri  rÅ   r   rÆ   rÍ   rÎ   r   ro  )r‘   rœ   ÚvaluesÚvrÍ   s        r   Ú	visit_setzBasicChecker.visit_setï  sŽ   € õ ‘”ˆØ”ð 		ð 		ˆAÝ˜!�Uœ[Ñ)Ô)ð Øœ��àØ˜ˆˆØ× Ò Ø%¨D°uÍð !ñ ô ð ð �JŠJ�uÑÔÐÐð		ð 		r   ú	nodes.Tryc                óÌ   — | j                              |¦  «         |j        D ]A}|                     t          j        ¦  «        D ]}|                      d|t          ¬¦  «         Œ ŒBdS )úUpdate try block flag.r„   r°   N)r™   rL   Ú	finalbodyr  r   ÚReturnrÎ   r   )r‘   rœ   Ú
final_noderÙ   s       r   Ú	visit_tryzBasicChecker.visit_tryþ  s~   € àŒ
×Ò˜$ÑÔÐàœ.ð 	Yð 	YˆJØ)×8Ò8½¼ÑFÔFð Yð Y�Ø× Ò Ð!4¸;ÕSWÐ ÑXÔXÐXÐXðYð	Yð 	Yr   c                ó8   — | j                              ¦   «          dS )r{  N)r™   Úpoprò   s     r   Ú	leave_tryzBasicChecker.leave_try  s   € àŒ
�ŠÑÔÐÐÐr   úFnodes.Return | nodes.Continue | nodes.Break | nodes.Raise | nodes.Callr±   r   c                ó<  — |                      ¦   «         }|�…t          |t          j        ¦  «        rQt          |t          j        ¦  «        r7t          |j        t          j        ¦  «        r|                      ¦   «         }|€dS |                      d||¬¦  «         dS dS )zCheck unreachable code.Nr^   r°   )Únext_siblingrÅ   r   r}  ÚExprrÍ   r  rÎ   )r‘   rœ   r±   Úunreachable_statements       r   rE  zBasicChecker._check_unreachable
  sµ   € ð !%× 1Ò 1Ñ 3Ô 3ÐØ Ð,å˜4¥¤Ñ.Ô.ð	åÐ4µe´jÑAÔAð	õ Ð4Ô:½E¼KÑHÔHð	ð )>×(JÒ(JÑ(LÔ(LÐ%Ø(Ð0Ø�FØ×ÒØÐ$9Àjð ñ ô ð ð ð ð -Ð,r   r   únodes.Break | nodes.ReturnÚ	node_nameÚbreaker_classesútuple[nodes.NodeNG, ...]c                óö   — | j         sdS |j        }|}|r`t          ||¦  «        sRt          |d¦  «        r#||j        v r|                      d||¬¦  «         dS |}|j        }|rt          ||¦  «        ¯NdS dS dS dS )záCheck that a node is not inside a 'finally' clause of a
        'try...finally' statement.

        If we find a parent which type is in breaker_classes before
        a 'try...finally' block we skip the whole check.
        Nr|  rp   rü   )r™   rß   rÅ   Úhasattrr|  rÎ   )r‘   rœ   r‰  rŠ  Ú_parentÚ_nodes         r   rF  z"BasicChecker._check_not_in_finally   sÇ   € ð Œzð 	ØˆFà”+ˆØˆØð 	#�j¨°/ÑBÔBð 	#Ý�w Ñ,Ô,ð °¸'Ô:KÐ1KÐ1KØ× Ò Ð!1¸À9Ð ÑMÔMÐMØ�ØˆEØ”lˆGð ð 	#�j¨°/ÑBÔBð 	#ð 	#ð 	#ð 	#ð 	#ð 	#ð 	#ð 	#ð 	#r   c                ó¼  — 	 t          j        t          j        |d¬¦  «        ¦  «        }t          |t          j        ¦  «        rdS |€°t          |j        d         t          j        ¦  «        r‰	 t          |j        d         j
                             ¦   «         ¦  «        }n# t          j        $ r Y dS w xY wt          |dd¦  «        dk    r+t          j        |¦  «        r|                      d|¬¦  «         dS t          |t          j        t          j        f¦  «        rdS | j        s t          |t          j        ¦  «        r†t+          d„ t-          j        |j        f|j                             ¦   «         ¦  «        D ¦   «         ¦  «        r=	 |j        t6                    n'# t8          $ r |                      d|¬¦  «         Y nw xY wdS t;          |d	¦  «        rXt<          D ]5}|D ].}	 |                     |¦  «         Œ# t          j        $ r Y  nw xY w nŒ6|                      d|¬¦  «         dS dS |                      d|¬¦  «         dS # t           j         $ r Y dS w xY w)
z4Check that the argument to `reversed` is a sequence.r   )ÚpositionNr   Úiterr~   rú   c              3  óT   K  — | ]#}|j         d k    ot          j        |¦  «        V — Œ$dS )r)   N)r   r   Úis_builtin_object)r%   Úancestors     r   râ   z/BasicChecker._check_reversed.<locals>.<genexpr>W  sM   è è € ð ð à ð ”M VÒ+ÐQµÔ0GÈÑ0QÔ0Qðð ð ð ð ð r   Úgetattr)!r   rÇ   Úget_argument_from_callrÅ   r
   rÈ   rý   r   rÀ   rå   rË   r<  r·   rÐ   r–  r”  rÎ   r¿   r½   r˜   r=  r  rç   rè   Ú_proxiedÚ	ancestorsÚlocalsÚREVERSED_PROTOCOL_METHODÚKeyErrorr�  ÚREVERSED_METHODSÚNotFoundErrorÚNoSuchArgumentError)r‘   rœ   ÚargumentrË   ÚmethodsÚmeths         r   rc  zBasicChecker._check_reversed9  sí  € ð5	EÝÔ'­Ô(DÀTÐTUÐ(VÑ(VÔ(VÑWÔWˆHõ ˜(¥DÔ$8Ñ9Ô9ð Ø�ØÐõ ˜dœi¨œl­E¬JÑ7Ô7ð MðÝ# D¤I¨a¤LÔ$5×$;Ò$;Ñ$=Ô$=Ñ>Ô>˜˜øÝ"Ô1ð ð ð Ø˜˜ðøøøåØ˜f dñô àò ð  å$)Ô$;¸DÑ$AÔ$Að ð ×(Ò(Ð)@ÀtÐ(ÑLÔLÐLØ�å˜(¥U¤Zµ´Ð$=Ñ>Ô>ð Ø�ð
 ”?ð ¥z°(½GÔ<LÑ'MÔ'Mð Ýð ð å$-¤OØ!Ô*Ð,¨hÔ.?×.IÒ.IÑ.KÔ.Kñ%ô %ðñ ô ñ ô ð 
ðMØ œÕ(@ÔAÐAÐAøÝ#ð Mð Mð MØ×(Ò(Ð)@ÀtÐ(ÑLÔLÐLÐLÐLðMøøøà�Få�x Ñ+Ô+ð Eå/ð 	Ið 	I�GØ 'ð ð ˜ð"Ø$×,Ò,¨TÑ2Ô2Ð2Ð2øÝ&Ô4ð "ð "ð "Ø!˜E˜Eð"øøøð ˜ð "ð ×$Ò$Ð%<À4Ð$ÑHÔHÐHÐHÐHð ˜ð × Ò Ð!8¸tÐ ÑDÔDÐDÐDÐDøõg Ô(ð 	ð 	ð 	ØˆDˆDð	øøøsG   ‚(I Á.1B  Â B3Â2B3ÆF Æ!GÇGÇ%G;Ç;HÈHÉIÉIrt   ú
nodes.Withc                ó  — |j         }|r}t          ||dd …         ¦  «        D ]f\  }}t          |d         t          j        ¦  «        r?|d         €7t          |d         t          j        ¦  «        s|                      d|¬¦  «         Œed S d S )NrA   r   rt   rú   )rn  r)  rÅ   r   Ú
AssignNamerÀ   rÎ   )r‘   rœ   ÚpairsÚ	prev_pairÚpairs        r   Ú
visit_withzBasicChecker.visit_withr  s§   € ð ”
ˆØð 		LÝ#& u¨e°A°B°B¬iÑ#8Ô#8ð Lð L‘�	˜4Ý˜i¨œl­EÔ,<Ñ=Ô=ð LØ˜”G�O­J°t¸A´wÅÄ
Ñ,KÔ,K�Oð ×$Ò$Ð%?ÀdÐ$ÑKÔKÐKøð		Lð 		LðLð Lr   únodes.Assignc                óp  — |                      ¦   «         }|j        }g }|j        }t          |d         t          j        ¦  «        r7t          |¦  «        dk    rd S |d         j        }t          |¦  «        dk    rd S t          |j        t          j	        ¦  «        rt          |¦  «        dk    rd S |j        g}n_t          |j        t          j        ¦  «        r@t          |j        j        ¦  «        }t          |¦  «        |k    s|dk    rd S |j        j        }t          ||¦  «        D ]�\  }}t          |t          j	        ¦  «        sŒ t          |t          j        ¦  «        sŒ;t          |t          j        ¦  «        r
|j        |v rŒ_|j        |j        k    r|                      d|j        f|¬¦  «         ŒŽd S )Nr   rA   rz   ©rý   rœ   )rþ   rš  ÚtargetsrÅ   r   r½   ré   ri  rÍ   rÉ   r)  r¥  r¶   r   rÎ   )	r‘   rœ   rþ   Úscope_localsÚ	rhs_namesr­  Ú	rhs_countÚtargetÚlhs_names	            r   Ú_check_self_assigning_variablez+BasicChecker._check_self_assigning_variable‚  s¬  € ð —
’
‘”ˆØ”|ˆàˆ	Ø”,ˆÝ�g˜a”j¥%¤+Ñ.Ô.ð 	Ý�7‰|Œ|˜qÒ Ð à�Ø˜a”j”oˆGÝ�7‰|Œ|˜qÒ Ð à�å�d”j¥%¤*Ñ-Ô-ð 	(Ý�7‰|Œ|˜qÒ Ð Ø�Øœ˜ˆIˆIÝ˜œ
¥E¤KÑ0Ô0ð 	(Ý˜DœJœOÑ,Ô,ˆIÝ�7‰|Œ|˜yÒ(Ð(¨I¸ªN¨NØ�Øœ
œˆIå # G¨YÑ 7Ô 7ð 	ð 	ÑˆF�HÝ˜h­¬
Ñ3Ô3ð ØÝ˜f¥eÔ&6Ñ7Ô7ð Øõ ˜%¥¤Ñ0Ô0ð °V´[ÀLÐ5PÐ5PØØŒ{˜hœmÒ+Ð+Ø× Ò Ø-°V´[°NÈð !ñ ô ð øð	ð 	r   r­  úlist[nodes.NodeNG | None]c                ó>  — | j         j        j        }|D �]}t          |t          j        ¦  «        sŒg }|j        D ]’}t          |t          j        ¦  «        r|                      |g¦  «         Œ3t          |t          j        ¦  «        rE|j	        dk    r:|r| 
                    |j	        ¦  «        r  d S |                     |j	        ¦  «         Œ“t          j        |¦  «        }|                     ¦   «         D ]$\  }}|dk    r|                      d|f|¬¦  «         Œ%�Œ	d S )Nrí   rA   r|   r¬  )rŒ   r–   Údummy_variables_rgxrÅ   r   r½   ri  Ú_check_redeclared_assign_namer¥  r   ÚmatchrL   ÚcollectionsÚCounterÚmost_commonrÎ   )	r‘   r­  r¶  r±  Úfound_namesÚelementÚnamesr   Úcounts	            r   r·  z*BasicChecker._check_redeclared_assign_name«  sH  € Ø"œkÔ0ÔDÐàð 	ñ 	ˆFÝ˜f¥e¤kÑ2Ô2ð ØàˆKØ!œ;ð 5ð 5�Ý˜g¥u¤{Ñ3Ô3ð 5Ø×6Ò6¸°yÑAÔAÐAÐAÝ ­Ô)9Ñ:Ô:ð 5¸w¼|ÈsÒ?RÐ?RØ*ð Ð/B×/HÒ/HÈÌÑ/VÔ/Vð Ø˜˜˜Ø×&Ò& w¤|Ñ4Ô4Ð4øåÔ'¨Ñ4Ô4ˆEØ$×0Ò0Ñ2Ô2ð ð ‘��eØ˜1’9�9Ø×$Ò$Ø2¸$¸Àvð %ñ ô ð øñð	ð 	r   rz   r|   c                ód   — |                       |¦  «         |                      |j        ¦  «         d S rŽ   )r³  r·  r­  r¢   s     r   Úvisit_assignzBasicChecker.visit_assignÂ  s4   € ð 	×+Ò+¨DÑ1Ô1Ð1Ø×*Ò*¨4¬<Ñ8Ô8Ð8Ð8Ð8r   ú	nodes.Forc                ó<   — |                       |j        g¦  «         d S rŽ   )r·  r±  r¢   s     r   Ú	visit_forzBasicChecker.visit_forÉ  s    € à×*Ò*¨D¬K¨=Ñ9Ô9Ð9Ð9Ð9r   )rŒ   r   r2   r3   )r2   r3   )rœ   r�   r2   r3   )rœ   r¥   r2   r3   )rœ   r¨   r2   r3   )rœ   r­   r¡   r®   r2   r3   )r¡   rÛ   r2   rÜ   )rí   rî   r2   r3   )rí   rô   r2   r3   )rœ   rø   r2   r3   )rœ   r  r  r  r2   r  )rý   r  r  rJ   r2   r  )rœ   r  r2   r3   )rœ   r0  r2   r3   )rœ   rC  r2   r3   )rœ   rH  r2   r3   )rœ   rM  r2   r3   )rœ   rS  r2   r3   )rV  rW  r2   r3   )rœ   rW  r2   r3   )rœ   re  r2   r3   )rœ   rl  r2   r3   )rœ   rt  r2   r3   )rœ   ry  r2   r3   )rí   ry  r2   r3   )rœ   rƒ  r±   r   r2   r3   )r   )rœ   rˆ  r‰  rJ   rŠ  r‹  r2   r3   )rœ   r£  r2   r3   )rœ   rª  r2   r3   )r­  r´  r2   r3   )rœ   rÂ  r2   r3   )0r   r   r   r   r   ÚmsgsrZ   Úreportsr�   r›   r   Úonly_required_for_messagesr£   r§   r¬   r    ÚstaticmethodrÊ   ró   r÷   r  r  r"  r/  r4  Úvisit_asyncfunctiondefr3  rG  rK  rR  rU  r\  rd  rk  rs  rx  r  r‚  r   rE  rF  rc  r©  r³  r·  rÁ  rÄ  Ú__classcell__)r’   s   @r   r\   r\   f   sé  ø€ € € € € ð
ð 
ð €DðYØð 
ðYð 	ð 
ðYð 	ð 
ðYð$ 	ð 
ð%Yð4 	ð 
ð5Yð@ 	ð 
ðAYðP 	ð 
ðQYðZ 	ð 
ð[Yðj 	ð 
ðkYðz 	ð 
ð{YðJ 	ð 
ðKYðX 	ð 
ðYYðj 	ð 
ðkYðx 	ð 
ðyYðF 	ð 
ðGYðP 	ð 
ðQYðZ 	ð 
ð[Yðh
ð
ð
ð

ð
ð
ðgYð Yð Y€Dðv Ð.Ð0DÐEÐG€Gð$ð $ð $ð $ð $ð $ð-ð -ð -ð -ð &€UÔ%ØÐEñô ð9ð 9ð 9ñô ð9ð &€UÔ%ØÐEñô ð9ð 9ð 9ñô ð9ð &€UÔ%ØÐEñô ð?ð ?ð ?ñô ð?ð
OUð OUð OUð OUðb ð*ð *ð *ñ „\ð*ð:4ð 4ð 4ð 4ð3ð 3ð 3ð 3ð &€UÔ%ØØ'Ø$Ø!Ø$ñô ðA?ð A?ð A?ñô ðA?ðF ðð ð ñ „\ðð ð
ð 
ð 
ñ „\ð
ð &€UÔ%Ð&:Ñ;Ô;ð7Pð 7Pð 7Pñ <Ô;ð7Pðr &€UÔ%Ð&?Ñ@Ô@ð,ð ,ð ,ñ AÔ@ð,ð /Ðð&Tð &Tð &Tð &TðP &€UÔ% mÐ5EÑFÔFð
Ið 
Ið 
Iñ GÔFð
Ið &€UÔ% mÑ4Ô4ð&ð &ð &ñ 5Ô4ð&ð &€UÔ% mÐ5EÑFÔFðLð Lð Lñ GÔFðLð &€UÔ% mÑ4Ô4ð&ð &ð &ñ 5Ô4ð&ðNð Nð Nð Nð* &€UÔ%ØØØØ#Øñô ð=ð =ð =ñô ð=ð" &€UÔ%Ð&7Ð9SÑTÔTð
Rð 
Rð 
Rñ UÔTð
Rð &€UÔ% oÑ6Ô6ðð ð ñ 7Ô6ðð &€UÔ%Ð&7Ñ8Ô8ðð ð ñ 9Ô8ððYð Yð Yð Yðð ð ð ð "&ðð ð ð ð ð4 57ð	#ð #ð #ð #ð #ð27Eð 7Eð 7Eð 7Eðr &€UÔ%Ð&@ÑAÔAðLð Lð Lñ BÔAðLð'ð 'ð 'ð 'ðRð ð ð ð. &€UÔ%Ø!Ð#=ñô ð9ð 9ð 9ñô ð9ð &€UÔ%Ð&@ÑAÔAð:ð :ð :ñ BÔAð:ð :ð :ð :ð :r   r\   )r-   r.   r/   r   r0   r1   r2   r3   )'r   Ú
__future__r   r¹  rç   Úcollections.abcr   Útypingr   r   r   r·   r   r	   r
   Úpylintr   rH   Úpylint.checkersr   Úpylint.interfacesr   r   r   Úpylint.reporters.ureportsrM   Úpylint.utilsr   Úpylint.lint.pylinterr   r   r›  ÚSEQUENCE_PROTOCOL_METHODSr�  r)   r)  r?  rZ   r\   r   r   r   ú<module>rÕ     s  ðð
 %Ð $à "Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ø Ð Ð Ð Ø $Ð $Ð $Ð $Ð $Ð $Ø /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ð /à €€€Ø (Ð (Ð (Ð (Ð (Ð (Ð (Ð (Ð (Ð (à &Ð &Ð &Ð &Ð &Ð &Ø .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø =Ð =Ð =Ð =Ð =Ð =Ø $Ð $Ð $Ð $Ð $Ð $àð .Ø-Ð-Ð-Ð-Ð-Ð-ðð ð ð ð �Kñ ô ð ð *Ð Ø6Ð Ø-Ð0HÐ/JÐKÐ ð  ˜4Ø€CØDÐDÐ,CÐDÑDÔDØÐÐñô ðð ð
ð ð
ðñ ô ðð Ð ð(&Jð &Jð &Jð &JðTe:ð e:ð e:ð e:ð e:�=ñ e:ô e:ð e:ð e:ð e:r   