§
    öyIfß. ã                  ó@	  — d Z ddlm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
mZ ddlmZmZ ddlmZ ddlmZmZmZmZ ddlZddlZddlmZmZmZ dd	lmZ dd
lmZ ddlm Z m!Z! ddl"m#Z#m$Z$ erddlm%Z% ddl&m'Z'  edej(        ¬¦  «        Z) edd¬¦  «        Z*ee*e)gdf         Z+ej,        ej-        ej.        ej/        fZ0dZ1ddhZ2h d£Z3 e4h d£¦  «        Z5 e4h d£¦  «        Z6dZ7dZ8dZ9dZ:dZ;dZ<dZ=d Z>d!Z?d"d#d$d%d&d'd(d)œZ@d*„ e@ A                    ¦   «         D ¦   «         ZB eCeB¦  «        ZD e4d+¦  «        ZEh d,£ZF e4h d-£¦  «        ZG G d.„ d/eH¦  «        ZI G d0„ d1eH¦  «        ZJ�d,d6„ZK�d-d8„ZL�d.d:„ZMejN         O                    ¦   «         Zd;ZP�d-d<„ZQ�d/d?„ZR�d0dC„ZS�d1dE„ZT�d2dG„ZU�d3�d4dH„ZV�d-dI„ZW�d5dL„ZX�d-dM„ZY�d6dN„ZZ�d7dP„Z[�d8dS„Z\ G dT„ dUeH¦  «        Z] G dV„ dWeH¦  «        Z^�d9dZ„Z_�d:d\„Z`�d;d^„Za�d<d`„Zb�d=db„Zc�d>dd„Zd�d?dg„Ze�d@di„Zf	 �dA�dBdp„Zg�dCdr„Zh�dDdt„Zi�dEdy„Zj�d.dz„Zk�dFd|„Zl�d-d}„Zm�d-d~„Zn�d-d„Zo�dGd�„Zp�dHd†„Zq�dId‰„Zr edŠ¬‹¦  «        	 �d3�dJd�„¦   «         Zs�dKd‘„Zt�dLd“„Zu�d-d”„Zv�dMd˜„ZweHf�dNdœ„Zx�dOdž„ZyeHf�dPd „ZzeHf�dQd¡„Z{�dRd£„Z|eHf�dSd¤„Z} edŠ¬‹¦  «        �dTd¥„¦   «         Z~�dUd¨„Z�d-d©„Z€�dVdª„Z��dVd«„Z‚�dVd¬„Zƒ�dVd­„Z„�dVd®„Z…�dVd¯„Z†�dVd°„Z‡�d/d±„Zˆ�d-d²„Z‰�dWdµ„ZŠ�dX�dYd¸„Z‹�dVd¹„ZŒ�dVdº„Z��dZd»„ZŽ�d[d½„Z��d[d¾„Z��d\d¿„Z‘ edŠ¬‹¦  «        	 �d3d¶dÀœ�d]dÅ„¦   «         Z’ edÆ¬‹¦  «        	 �d3�d^dÈ„¦   «         Z“�d_dË„Z”	 �d3�d`dÍ„Z•�d-dÎ„Z–�dadÐ„Z—�d.dÑ„Z˜�dbdÒ„Z™�d.dÓ„Zš�dcdÕ„Z›�d-dÖ„Zœ�d-d×„Z��dddÚ„Zž edŠ¬‹¦  «        �d-dÛ„¦   «         ZŸ�dedÝ„Z �dfdÞ„Z¡	 �d3�dgdß„Z¢�dTdà„Z£�dhdã„Z¤�dTdä„Z¥�didç„Z¦�djdé„Z§�dkdì„Z¨�dldð„Z©�dmdò„Zª�dndó„Z«�dndô„Z¬�d.dõ„Z­�dodö„Z®�dod÷„Z¯�dodø„Z°�d-dù„Z±�d-dú„Z²�dpdþ„Z³�dq�d „Z´�d-�d„Zµ�dr�d„Z¶e�ds�d„¦   «         Z·�dt�d„Z¸�du�d„Z¹�d-�d„Zº�dv�d„Z»�dw�d„Z¼�dx�d„Z½�dy�d„Z¾�dz�d„Z¿�d-�d„ZÀ�d{�d„ZÁ�d|�d „ZÂ�d}�d"„ZÃ�d~�d%„ZÄ e�d&¬‹¦  «        �d�d(„¦   «         ZÅ�d€�d*„ZÆ�d��d+„ZÇdS (‚  z7Some functions that may be useful for various checkers.é    )ÚannotationsN)ÚIterableÚIterator)Ú	lru_cacheÚpartial)ÚMatch)ÚTYPE_CHECKINGÚAnyÚCallableÚTypeVar)ÚTooManyLevelsErrorÚnodesÚutil)ÚInferenceContext)ÚAstroidError)Ú
ImportNodeÚ	Statement)ÚInferenceResultÚSuccessfulInferenceResult)Ú_lru_cache_wrapper)ÚBaseCheckerÚ_NodeT)ÚboundÚ	_CheckerTr   ÚbuiltinsÚabcÚ_py_abc>   úabc.abstractmethodúabc.abstractpropertyúabc.abstractclassmethodúabc.abstractstaticmethod>   ú	.Protocolútyping.Protocolútyping_extensions.Protocol>   Ú*ú&ú+ú^ú|Ú__iter__Ú	__aiter__Ú__next__Ú__getitem__Ú__class_getitem__Ú__setitem__Ú__delitem__Ú__contains__Úkeys)Ú__new__Ú__init__Ú__call__Ú__init_subclass__)$Ú__del__Ú__repr__Ú__str__Ú	__bytes__Ú__hash__Ú__bool__Ú__dir__Ú__len__Ú__length_hint__r*   Ú__reversed__Ú__neg__Ú__pos__Ú__abs__Ú
__invert__Ú__complex__Ú__int__Ú	__float__Ú	__index__Ú	__trunc__Ú	__floor__Ú__ceil__Ú	__enter__Ú
__aenter__Ú__getnewargs_ex__Ú__getnewargs__Ú__getstate__Ú
__reduce__Ú__copy__Ú__unicode__Ú__nonzero__Ú	__await__r+   Ú	__anext__Ú
__fspath__Ú__subclasses__)>Ú
__format__Ú__lt__Ú__le__Ú__eq__Ú__ne__Ú__gt__Ú__ge__Ú__getattr__Ú__getattribute__Ú__delattr__Ú
__delete__Ú__instancecheck__Ú__subclasscheck__r-   Ú__missing__r0   r1   Ú__add__Ú__sub__Ú__mul__Ú__truediv__Ú__floordiv__Ú__rfloordiv__Ú__mod__Ú
__divmod__Ú
__lshift__Ú
__rshift__Ú__and__Ú__xor__Ú__or__Ú__radd__Ú__rsub__Ú__rmul__Ú__rtruediv__Ú__rmod__Ú__rdivmod__Ú__rpow__Ú__rlshift__Ú__rrshift__Ú__rand__Ú__rxor__Ú__ror__Ú__iadd__Ú__isub__Ú__imul__Ú__itruediv__Ú__ifloordiv__Ú__imod__Ú__ilshift__Ú__irshift__Ú__iand__Ú__ixor__Ú__ior__Ú__ipow__Ú__setstate__Ú__reduce_ex__Ú__deepcopy__Ú__cmp__Ú
__matmul__Ú__rmatmul__Ú__imatmul__Ú__div__)Ú__setattr__Ú__get__Ú__set__r/   Ú__set_name__)Ú__exit__Ú	__aexit__)Ú	__round__)Ú__pow__)Nr   é   é   é   )r   rœ   )rœ   r�   c                ó$   — i | ]\  }}|D ]}||“ŒŒS © r    )Ú.0ÚparamsÚmethodsÚnames       úI/var/www/piapp/venv/lib/python3.11/site-packages/pylint/checkers/utils.pyú
<dictcomp>r¦   ¹   sE   € ð ð ð áˆ�Øðð ð 	ð 	ˆ&ðð ð ð ó    )&zbuiltins.tuplezbuiltins.listzbuiltins.dictzbuiltins.setzbuiltins.frozensetzbuiltins.typezcollections.dequezcollections.defaultdictzcollections.OrderedDictzcollections.Counterzcollections.ChainMapz_collections_abc.Awaitablez_collections_abc.Coroutinez_collections_abc.AsyncIterablez_collections_abc.AsyncIteratorz_collections_abc.AsyncGeneratorz_collections_abc.Iterablez_collections_abc.Iteratorz_collections_abc.Generatorz_collections_abc.Reversiblez_collections_abc.Containerz_collections_abc.Collectionz_collections_abc.Callablez_collections_abc.Setz_collections_abc.MutableSetz_collections_abc.Mappingz_collections_abc.MutableMappingz_collections_abc.Sequencez _collections_abc.MutableSequencez_collections_abc.ByteStringz_collections_abc.MappingViewz_collections_abc.KeysViewz_collections_abc.ItemsViewz_collections_abc.ValuesViewz!contextlib.AbstractContextManagerz&contextlib.AbstractAsyncContextManagerz
re.Patternzre.Match>   FNT>   únt._exitúsys.exitúposix._exitú_sitebuiltins.Quitterc                  ó   — e Zd ZdS )ÚNoSuchArgumentErrorN©Ú__name__Ú
__module__Ú__qualname__r    r§   r¥   r­   r­   ò   ó   € € € € € Ø€Dr§   r­   c                  ó   — e Zd ZdS )ÚInferredTypeErrorNr®   r    r§   r¥   r´   r´   ö   r²   r§   r´   Únodeúnodes.NodeNGÚreturnúIterable[nodes.NodeNG]c              #  ó    K  — t          | t          j        t          j        f¦  «        r!| j        D ]}t          |¦  «        E d{V —† ŒdS | V — dS )z9Recursively returns all atoms in nested lists and tuples.N)Ú
isinstancer   ÚTupleÚListÚeltsÚget_all_elements)rµ   Úchilds     r¥   r¾   r¾   ú   sp   è è € õ �$�œ¥e¤jÐ1Ñ2Ô2ð Ø”Yð 	/ð 	/ˆEÝ'¨Ñ.Ô.Ð.Ð.Ð.Ð.Ð.Ð.Ð.Ð.ð	/ð 	/ð ˆ
ˆ
ˆ
ˆ
ˆ
r§   Úboolc                ón   — t          | dd¦  «        dk    r|                      ¦   «         j        dk    rdS dS )zDReturn True if the node is referencing the "super" builtin function.r¤   NÚsuperr   TF)ÚgetattrÚrootr¤   ©rµ   s    r¥   Úis_superrÆ     s8   € åˆt�V˜TÑ"Ô" gÒ-Ð-°$·)²)±+´+Ô2BÀjÒ2PÐ2PØˆtØˆ5r§   únodes.FunctionDefc                ó|   — t          | j        ¦  «        dk    o$t          | j        d         t          j        ¦  «        S )z@Return true if the given function node only raises an exception.rœ   r   )ÚlenÚbodyrº   r   ÚRaiserÅ   s    r¥   Úis_errorrÌ     s,   € åˆtŒy‰>Œ>˜QÒÐH¥:¨d¬i¸¬l½E¼KÑ#HÔ#HÐHr§   )Ú__builtins__c                ó@   — | o|                       ¦   «         j        dk    S )zHReturns True if the given node is an object from the __builtin__ module.r   )rÄ   r¤   rÅ   s    r¥   Úis_builtin_objectrÏ     s   € àÐ2�D—I’I‘K”KÔ$¨
Ò2Ð2r§   r¤   Ústrc                ó&   — | t           v p| t          v S )zIReturn true if <name> could be considered as a builtin defined by python.)r   ÚSPECIAL_BUILTINS©r¤   s    r¥   Ú
is_builtinrÔ     s   € à•8ÐÐ7˜tÕ'7Ð7Ð7r§   Úvar_nodeÚvarnameÚscopec                ó(   — t          | ||¦  «        d uS ©N)Údefnode_in_scope)rÕ   rÖ   r×   s      r¥   Úis_defined_in_scoperÛ     s   € õ
 ˜H g¨uÑ5Ô5¸TÐAÐAr§   únodes.NodeNG | Nonec                óÒ  — t          |t          j        ¦  «        r‚|j        D ]x}t          |t          j        ¦  «        r||j        v r|c S t          |t          j        ¦  «        r5|j        D ]-}t          |t          j        ¦  «        r|j	        |k    r|c c S Œ.Œy�nÊt          |t          t          j        f¦  «        r3|                     t          j        ¦  «        D ]}|j	        |k    r|c S Œ�nvt          |t          j        ¦  «        rQ|j        D ]G\  }}|                     | ¦  «        r n,|r)t          |t          j        ¦  «        r|j	        |k    r|c S ŒH�nt          |t          j        t          j        f¦  «        r˜|j                             |¦  «        rf|j                             | ¦  «        rJ	 |j                             |¦  «         |j        }t-          | ||¦  «        }|S # t.          j        $ r Y nw xY w|S t3          |dd ¦  «        |k    r|S nMt          |t          j        ¦  «        r3t          |j	        t          j        ¦  «        r|j	        }|j	        |k    r|S d S )Nr¤   )rº   r   ÚIfrÊ   ÚNonlocalÚnamesÚAssignÚtargetsÚ
AssignNamer¤   ÚCOMP_NODE_TYPESÚForÚnodes_of_classÚWithÚitemsÚ	parent_ofÚLambdaÚFunctionDefÚargsÚis_argumentÚdefault_valueÚparentrÚ   ÚastroidÚ	NoDefaultrÃ   ÚExceptHandler)	rÕ   rÖ   r×   rµ   ÚtargetÚass_nodeÚexprÚidsÚdefnodes	            r¥   rÚ   rÚ   (  s�  € õ
 �%�œÑ"Ô"ð ' Ø”Jð 	&ð 	&ˆDÝ˜$¥¤Ñ/Ô/ð °G¸t¼zÐ4IÐ4IØ���Ý˜$¥¤Ñ-Ô-ð &Ø"œlð &ð &�FÝ! &­%Ô*:Ñ;Ô;ð &ÀÄÈwÒ@VÐ@VØ%˜˜˜˜˜øøñ	&õ 
�E�O­U¬YÐ7Ñ	8Ô	8ð  Ø×,Ò,­UÔ-=Ñ>Ô>ð 	 ð 	 ˆHØŒ} Ò'Ð'Ø���ð (ñ	 õ 
�E�5œ:Ñ	&Ô	&ð  Øœð 	ð 	‰IˆD�#Ø�~Š~˜hÑ'Ô'ð Ø�Øð •z #¥uÔ'7Ñ8Ô8ð ¸S¼XÈÒ=PÐ=PØ�
�
�
øùÝ	�E�EœL­%Ô*;Ð<Ñ	=Ô	=ð  ØŒ:×!Ò! 'Ñ*Ô*ð 	ð Œz×#Ò# HÑ-Ô-ð #ð#Ø”J×,Ò,¨WÑ5Ô5Ð5Ø!œL�EÝ.¨x¸À%ÑHÔH�Gð #�Nøõ Ô(ð ð ð Ø�Dðøøøð ˆLÝ�5˜& $Ñ'Ô'¨7Ò2Ð2ØˆLð 3å	�E�5Ô.Ñ	/Ô	/ð  Ý�e”j¥%Ô"2Ñ3Ô3ð 	 Ø”zˆHØŒ} Ò'Ð'Ø�Øˆ4s   Æ72G+ Ç+G=Ç<G=ú
nodes.Namec           
     óH  — | j         }|                      ¦   «         D �]3}t          | ||¦  «        }|€Œ|                     ¦   «         }t	          |g t
          ¢t          j        ‘t          j        ‘R ¦  «        rRt	          |t          j        ¦  «        r5|                      ¦   «         }||urt	          |t          j        ¦  «        r dS  dS |j	        | j	        k     r dS |                     ¦   «         D ]^}|j	        | j	        k    rŒt	          |t          j
        t          j        t          j        t          j        t          j        f¦  «        r  dS Œ_�Œ5|                      ¦   «         }|                     ¦   «         }|j        }	|r |j        |	k    r•|                     t          j        ¦  «        D ]}
|
j         |k    r dS Œ|                     t          j        t          j        f¦  «        D ]}|d„ |j        D ¦   «         v r dS Œ|                     ¦   «         }|r|j        |	k    °•dS )aR  Check if the given variable node is defined before.

    Verify that the variable node is defined by a parent node
    (e.g. if or with) earlier than `var_node`, or is defined by a
    (list, set, dict, or generator comprehension, lambda)
    or in a previous sibling node on the same line
    (statement_defining ; statement_using).
    NFTc                ó.   — g | ]}|d          p|d         ‘ŒS )rœ   r   r    )r¡   r¤   s     r¥   ú
<listcomp>z%is_defined_before.<locals>.<listcomp>Œ  s%   € ÐIÐIÐI°$˜4 œ7Ð- d¨1¤gÐIÐIÐIr§   )r¤   Únode_ancestorsrÚ   r×   rº   rä   r   rê   rë   Úlinenorå   ÚWhilerç   ÚTryrò   Ú	statementÚprevious_siblingÚ
fromlinenoræ   rã   Ú
ImportFromÚImportrà   )rÕ   rÖ   rï   r÷   Údefnode_scopeÚvar_node_scopeÚdefnode_ancÚstmtÚ_noderý   Úassign_nodeÚimp_nodes               r¥   Úis_defined_beforer  X  sY  € ð Œm€GØ×)Ò)Ñ+Ô+ð  ñ  ˆÝ" 8¨W°fÑ=Ô=ˆØˆ?ØØŸš™œˆÝØÐN�_ÐN­e¬lÐN½EÔ<MÐNÐNñ
ô 
ð 
	õ ˜-­Ô):Ñ;Ô;ð !Ø!)§¢Ñ!1Ô!1�Ø!¨Ð6Ð6½:Ø"¥EÔ$5ñ<ô <Ð6ð !˜5˜5Ø�4�4ØŒ>˜HœOÒ+Ð+Ø�4�4à"×1Ò1Ñ3Ô3ð 	ð 	ˆKØÔ! X¤_Ò4Ð4ØÝØå”IÝ”KÝ”JÝ”IÝÔ'ðñ	ô 	ð 
ð �t�t�tð
ñ	ð ×ÒÑÔ€DØ×!Ò!Ñ#Ô#€EØŒ_€FØ
ð )�EÔ$¨Ò.Ð.Ø ×/Ò/µÔ0@ÑAÔAð 	ð 	ˆKØÔ 7Ò*Ð*Ø�t�tð +à×,Ò,­eÔ.>ÅÄÐ-MÑNÔNð 	ð 	ˆHØÐIÐI¸(¼.ÐIÑIÔIÐIÐIØ�t�tð Jà×&Ò&Ñ(Ô(ˆð ð )�EÔ$¨Ò.Ð.ð ˆ5r§   c                ó  ‡ — |s‰                       ¦   «         }t          |t          j        t          j        f¦  «        rNt          j        |j        j        d„ |j        j	        D ¦   «         ¦  «        }t          ˆ fd„|D ¦   «         ¦  «        S dS )zcReturn true if the given Name node is used in function or lambda
    default argument's value.
    c              3  ó   K  — | ]}|®|V — Œ	d S rÙ   r    )r¡   Úds     r¥   ú	<genexpr>z&is_default_argument.<locals>.<genexpr>š  s"   è è € Ð!UÐ!U¨ÀqÀ} !À}À}À}À}Ð!UÐ!Ur§   c              3  ód   •K  — | ]*}|                      t          j        ¦  «        D ]}|‰u V — Œ	Œ+d S rÙ   ©ræ   r   ÚName)r¡   Údefault_nodeÚdefault_name_noderµ   s      €r¥   r  z&is_default_argument.<locals>.<genexpr>œ  sc   øè è € ð 
ð 
àØ%1×%@Ò%@ÅÄÑ%LÔ%Lð
ð 
ð "ð  Ð%ð
ð 
ð 
ð 
ð 
ð 
ð 
r§   F)r×   rº   r   rë   rê   Ú	itertoolsÚchainrì   ÚdefaultsÚkw_defaultsÚany)rµ   r×   Úall_defaultss   `  r¥   Úis_default_argumentr  ’  s¦   ø€ ð ð Ø—
’
‘”ˆÝ�%�%Ô+­U¬\Ð:Ñ;Ô;ð 
Ý ”ØŒJÔÐ!UÐ!U¨U¬ZÔ-CÐ!UÑ!UÔ!Uñ
ô 
ˆõ ð 
ð 
ð 
ð 
à ,ð
ñ 
ô 
ñ 
ô 
ð 	
ð ˆ5r§   c                óâ   — |                       ¦   «         D ]Y}t          |t          j        ¦  «        r dS |j        s1t          |t          j        t          j        t          j        f¦  «        r nŒZdS )z6Return true if the name is used in function decorator.TF)rü   rº   r   Ú
DecoratorsÚis_statementrê   ÚComprehensionScopeÚListComp©rµ   rï   s     r¥   Úis_func_decoratorr#  ¥  s€   € à×%Ò%Ñ'Ô'ð ð ˆÝ�f�eÔ.Ñ/Ô/ð 	Ø�4�4ØÔð 	¥*Øå”ÝÔ(Ý”ðñ#
ô #
ð 	ð ˆEð	ð ˆ5r§   Úframeúnodes.ClassDefc                ó|   ‡— t          | t          j        ¦  «        sdS t          ˆfd„| j        D ¦   «         ¦  «        S )zkReturn whether `frame` is an astroid.Class node with `node` in the
    subtree of its bases attribute.
    Fc              3  óZ   •K  — | ]%}‰|                      t          j        ¦  «        v V — Œ&d S rÙ   r  )r¡   Úbaserµ   s     €r¥   r  z#is_ancestor_name.<locals>.<genexpr>¼  s8   øè è € ÐOÐO¸4ˆt�t×*Ò*­5¬:Ñ6Ô6Ð6ÐOÐOÐOÐOÐOÐOr§   )rº   r   ÚClassDefr  Úbases)r$  rµ   s    `r¥   Úis_ancestor_namer+  ¶  sC   ø€ õ �e�Uœ^Ñ,Ô,ð ØˆuÝÐOÐOÐOÐOÀ5Ä;ÐOÑOÔOÑOÔOÐOr§   c                ó\   — t          | j        t          j        ¦  «        o| j        j        | u S )z@Return True if node is the function being called in a Call node.)rº   rï   r   ÚCallÚfuncrÅ   s    r¥   Úis_being_calledr/  ¿  s%   € å�d”k¥5¤:Ñ.Ô.ÐK°4´;Ô3CÀtÐ3KÐKr§   c                óà   — | rkt          | t          j        t          j        t          j        f¦  «        r:| j        } | r1t          | t          j        t          j        t          j        f¦  «        °:| S )zHReturn the higher parent which is not an AssignName, Tuple or List node.)rº   r   rã   r»   r¼   rï   rÅ   s    r¥   Úassign_parentr1  Ä  s^   € à
ð •:˜d¥UÔ%5µu´{ÅEÄJÐ$OÑPÔPð ØŒ{ˆð ð •:˜d¥UÔ%5µu´{ÅEÄJÐ$OÑPÔPð à€Kr§   Ú
class_nodec                óš   — |                       ¦   «         D ]5}|j        dk    rŒ||v r#t          ||         t          j        ¦  «        r dS Œ6dS )zjReturn True if <name> is a method overridden from an ancestor
    which is not the base object class.
    ÚobjectTF)Ú	ancestorsr¤   rº   r   rë   )r2  r¤   Úancestors      r¥   Úoverrides_a_methodr7  Ë  s]   € ð ×(Ò(Ñ*Ô*ð ð ˆØŒ=˜HÒ$Ð$ØØ�8ÐÐ¥
¨8°D¬>½5Ô;LÑ MÔ MÐØ�4�4øØˆ5r§   ÚmessagesúVCallable[[AstCallbackMethod[_CheckerT, _NodeT]], AstCallbackMethod[_CheckerT, _NodeT]]c                 ó   ‡ — dˆ fd„}|S )aâ  Decorator to store messages that are handled by a checker method as an
    attribute of the function object.

    This information is used by ``ASTWalker`` to decide whether to call the decorated
    method or not. If none of the messages is enabled, the method will be skipped.
    Therefore, the list of messages must be well maintained at all times!
    This decorator only has an effect on ``visit_*`` and ``leave_*`` methods
    of a class inheriting from ``BaseChecker``.
    r.  ú$AstCallbackMethod[_CheckerT, _NodeT]r·   c                ó   •— ‰| _         | S rÙ   )Úchecks_msgs)r.  r8  s    €r¥   Ústore_messagesz2only_required_for_messages.<locals>.store_messagesæ  s   ø€ ð $ˆÔØˆr§   )r.  r;  r·   r;  r    )r8  r>  s   ` r¥   Úonly_required_for_messagesr?  ×  s)   ø€ ðð ð ð ð ð ð Ðr§   c                  ó   — e Zd ZdZdS )ÚIncompleteFormatStringz:A format string ended in the middle of a format specifier.N)r¯   r°   r±   Ú__doc__r    r§   r¥   rA  rA  ï  s   € € € € € ØDÐDÐDÐDr§   rA  c                  ó$   ‡ — e Zd ZdZdˆ fd„Zˆ xZS )ÚUnsupportedFormatCharacterz]A format character in a format string is not one of the supported
    format characters.
    ÚindexÚintr·   ÚNonec                óX   •— t          ¦   «                              |¦  «         || _        d S rÙ   )rÂ   r4   rE  )ÚselfrE  Ú	__class__s     €r¥   r4   z#UnsupportedFormatCharacter.__init__ø  s&   ø€ Ý‰Œ×Ò˜ÑÔÐØˆŒ
ˆ
ˆ
r§   )rE  rF  r·   rG  )r¯   r°   r±   rB  r4   Ú__classcell__)rJ  s   @r¥   rD  rD  ó  sG   ø€ € € € € ðð ðð ð ð ð ð ð ð ð ð r§   rD  Úformat_stringú/tuple[set[str], int, dict[str, str], list[str]]c                ó¼  ‡ — t          ¦   «         }i }g }d}dˆ fd„}d}|t          ‰ ¦  «        k     �r¦‰ |         }|dk    �r~ ||¦  «        \  }}d}|d	k    rRd
}	 ||¦  «        \  }}|}
|	dk    r+|d	k    r|	d
z  }	n|dk    r|	d
z  }	 ||¦  «        \  }}|	dk    °+|d
z
  }‰ |
|…         }|dv r ||¦  «        \  }}|dv °|dk    r|d
z  } ||¦  «        \  }}n*|t          j        v r ||¦  «        \  }}|t          j        v °|dk    rR ||¦  «        \  }}|dk    r|d
z  } ||¦  «        \  }}n*|t          j        v r ||¦  «        \  }}|t          j        v °|dv r ||¦  «        \  }}d}||vrt	          |¦  «        ‚|r|                     |¦  «         |||<   n |dk    r|d
z  }|                     |¦  «         |d
z  }|t          ‰ ¦  «        k     �°¦||||fS )a)  Parses a format string, returning a tuple (keys, num_args).

    Where 'keys' is the set of mapping keys in the format string, and 'num_args' is the number
    of arguments required by the format string. Raises IncompleteFormatString or
    UnsupportedFormatCharacter if a parse error occurs.
    r   ÚirF  r·   útuple[int, str]c                óV   •— | dz  } | t          ‰¦  «        k    rt          ‚| ‰|          fS )Nrœ   )rÉ   rA  )rO  rL  s    €r¥   Ú	next_charz&parse_format_string.<locals>.next_char  s5   ø€ Ø	ˆQ‰ˆØ•�MÑ"Ô"Ò"Ð"Ý(Ð(Ø�= Ô#Ð$Ð$r§   ú%Nú(rœ   ú)z#0- +r%   ú.ÚhlLzdiouxXeEfFgGcrs%a)rO  rF  r·   rP  )ÚsetrÉ   ÚstringÚdigitsrD  ÚaddÚappend)rL  r2   Ú	key_typesÚ	pos_typesÚnum_argsrR  rO  ÚcharÚkeyÚdepthÚ	key_startÚkey_endÚflagss   `            r¥   Úparse_format_stringrf  ý  s£  ø€ õ ‰5Œ5€DØ€IØ€IØ€Hð%ð %ð %ð %ð %ð %ð 	
€AØ
�c�-Ñ Ô Ò
 Ñ
 Ø˜QÔˆØ�3Š;‰;Ø�i ‘l”l‰GˆAˆtàˆCØ�sŠ{ˆ{Ø�Ø#˜) A™,œ,‘��4Ø�	Ø˜q’j�jØ˜s’{�{Ø ™
˜˜Ø š˜Ø ™
˜Ø'˜i¨™lœl‘G�A�tð ˜q’j�jð ˜a™%�Ø# I¨gÐ$5Ô6�ð ˜'�/�/Ø#˜) A™,œ,‘��4ð ˜'�/�/ð �sŠ{ˆ{Ø˜A‘�Ø#˜) A™,œ,‘��4�4à�fœmÐ+Ð+Ø'˜i¨™lœl‘G�A�tð �fœmÐ+Ð+ð �sŠ{ˆ{Ø#˜) A™,œ,‘��4Ø˜3’;�;Ø ‘M�HØ'˜i¨™lœl‘G�A�t�tà¥&¤-Ð/Ð/Ø"+ )¨A¡,¤,™˜˜4ð ¥&¤-Ð/Ð/ð �uˆ}ˆ}Ø#˜) A™,œ,‘��4à'ˆEØ˜5Ð Ð Ý0°Ñ3Ô3Ð3Øð 'Ø—’˜‘”�Ø!%�	˜#‘�Ø˜’�Ø˜A‘�Ø× Ò  Ñ&Ô&Ð&Ø	ˆQ‰ˆðg �c�-Ñ Ô Ò
 Ñ
 ðh �˜9 iÐ/Ð/r§   ú&tuple[str, Iterable[tuple[bool, str]]]c                ón   — 	 t          j        | ¦  «        S # t          $ r}t          ¦   «         |‚d }~ww xY wrÙ   )Ú_stringÚformatter_field_name_splitÚ
ValueErrorrA  )rL  Úes     r¥   Úsplit_format_field_namesrm  I  sE   € ð.ÝÔ1°-Ñ@Ô@Ð@øÝð .ð .ð .Ý$Ñ&Ô&¨AÐ-øøøøð.øøøs   ‚ –
4 /¯4úIterable[str | None]c              #  ó   K  — t          j        ¦   «         }	 |                     | ¦  «        }|D ]O}t          d„ |dd…         D ¦   «         ¦  «        rŒ$|d         }|d         }|V — |rt	          |¦  «        E d{V —† ŒPdS # t
          $ rC}|j        d                              d¦  «        rdV — dV — Y d}~dS t          | ¦  «        |‚d}~ww xY w)	zyGiven a format string, return an iterator
    of all the valid format fields.

    It handles nested fields as well.
    c              3  ó   K  — | ]}|d u V — Œ	d S rÙ   r    )r¡   Úitems     r¥   r  z(collect_string_fields.<locals>.<genexpr>]  s&   è è € Ð7Ð7 D�4˜4�<Ð7Ð7Ð7Ð7Ð7Ð7r§   rœ   Nr�   r   zcannot switch from manualÚ Ú1)	rY  Ú	FormatterÚparseÚallÚcollect_string_fieldsrk  rì   Ú
startswithrA  )rL  Ú	formatterÚparseiteratorÚresultr¤   ÚnestedÚexcs          r¥   rw  rw  R  s"  è è € õ Ô Ñ"Ô"€Ið=Ø!Ÿš¨Ñ6Ô6ˆØ#ð 	9ð 	9ˆFÝÐ7Ð7¨F°1°2°2¬JÐ7Ñ7Ô7Ñ7Ô7ð àØ˜!”9ˆDØ˜A”YˆFØˆJˆJˆJØð 9Ý0°Ñ8Ô8Ð8Ð8Ð8Ð8Ð8Ð8Ð8øð	9ð 	9øõ ð =ð =ð =àŒ8�AŒ;×!Ò!Ð"=Ñ>Ô>ð 		ð ˆHˆHˆHØˆIˆIˆIØˆFˆFˆFˆFˆFÝ$ ]Ñ3Ô3¸Ð<øøøøð=øøøs   —A'B  Â 
CÂ
(CÂ8CÃCú9tuple[list[tuple[str, list[tuple[bool, str]]]], int, int]c                ó2  — g }d}t          ¦   «         }t          | ¦  «        D ]ä}|rDt          |¦  «                             ¦   «         r#|                     t          |¦  «        ¦  «         ŒH|r•t          |¦  «        \  }}t          |t          j        ¦  «        r"|                     t          |¦  «        ¦  «         	 | 	                    |t          |¦  «        f¦  «         Œ¾# t          $ r}t          ¦   «         |‚d}~ww xY w|dz  }Œå||t          |¦  «        fS )ag  Parses a PEP 3101 format string, returning a tuple of
    (keyword_arguments, implicit_pos_args_cnt, explicit_pos_args).

    keyword_arguments is the set of mapping keys in the format string, implicit_pos_args_cnt
    is the number of arguments required by the format string and
    explicit_pos_args is the number of arguments passed with the position.
    r   Nrœ   )rX  rw  rÐ   Úisdigitr[  rm  rº   ÚnumbersÚNumberr\  Úlistrk  rA  rÉ   )rL  Úkeyword_argumentsÚimplicit_pos_args_cntÚexplicit_pos_argsr¤   ÚkeynameÚfielditeratorrl  s           r¥   Úparse_format_method_stringr‰  t  s4  € ð ÐØÐÝ™œÐÝ% mÑ4Ô4ð 'ð 'ˆØð 	'•C˜‘I”I×%Ò%Ñ'Ô'ð 	'Ø×!Ò!¥# d¡)¤)Ñ,Ô,Ð,Ð,Øð 		'Ý%=¸dÑ%CÔ%CÑ"ˆG�]Ý˜'¥7¤>Ñ2Ô2ð 4Ø!×%Ò%¥c¨'¡l¤lÑ3Ô3Ð3ð6Ø!×(Ò(¨'µ4¸Ñ3FÔ3FÐ)GÑHÔHÐHÐHøÝð 6ð 6ð 6Ý,Ñ.Ô.°AÐ5øøøøð6øøøð " QÑ&Ð!Ð!ØÐ3µSÐ9JÑ5KÔ5KÐKÐKs   Â;$C Ã 
C>Ã*C9Ã9C>Úattrnamec                ó|   — | d         dk    o0| dk    o*|                       d¦  «        o|                      d¦  «         S )zkReturn True if attribute name is protected (start with _ and some other
    details), False otherwise.
    r   Ú_Ú__)rx  Úendswith)rŠ  s    r¥   Úis_attr_protectedr�  ‘  sO   € ð
 	�Œ�sÒð 	HØ˜ŠOð	Hà×$Ò$ TÑ*Ô*ÐF¨x×/@Ò/@ÀÑ/FÔ/FÐGðr§   únodes.ClassDef | Nonec                óh  — |                       ¦   «         }t          j        t          j        t          j        f}|rxt          ||¦  «        rht          |t          j        ¦  «        sN|j        €dS |j                              ¦   «         }|r*t          ||¦  «        rt          |t          j        ¦  «        ¯N|S )z±Return the class that is wrapping the given node.

    The function returns a class for a method node (or a staticmethod or a
    classmethod), otherwise it returns `None`.
    N)	r$  r   ÚNodeNGrð   ÚUnboundMethodÚBaseInstancerº   r)  rï   )rµ   ÚklassÚnodes_to_checks      r¥   Únode_frame_classr—  œ  s¶   € ð �JŠJ‰LŒL€EåŒÝÔÝÔð€Nð 	ð%å�u˜nÑ-Ô-ð%õ ˜5¥%¤.Ñ1Ô1ð%ð
 Œ<ÐØ�4à”×"Ò"Ñ$Ô$ˆð 	ð%å�u˜nÑ-Ô-ð%õ ˜5¥%¤.Ñ1Ô1ð%ð €Lr§   úastroid.ClassDefúastroid.ClassDef | Nonec                óp   — | j                              ¦   «         }t          |t          j        ¦  «        r|ndS )zFReturn the class that is the outer class of given (nested) class_node.N)rï   r$  rº   rð   r)  )r2  Úparent_klasss     r¥   Úget_outer_classrœ  µ  s2   € àÔ$×*Ò*Ñ,Ô,€Lå% lµGÔ4DÑEÔEÐOˆ<ˆ<È4ÐOr§   úMatch[str] | Nonec                óT   — t          j        d¦  «        }|                     | ¦  «        S )zrCheck that attribute name is private (at least two leading underscores,
    at most one trailing underscore).
    z^_{2,10}.*[^_]+_?$)ÚreÚcompileÚmatch)rŠ  Úregexs     r¥   Úis_attr_privater£  ¼  s&   € õ ŒJÐ+Ñ,Ô,€EØ�;Š;�xÑ Ô Ð r§   Ú	call_nodeú
nodes.CallÚpositionú
int | NoneÚkeywordú
str | Nonec                óÄ   — |€|€t          d¦  «        ‚|�	 | j        |         S # t          $ r Y nw xY w|r%| j        r| j        D ]}|j        |k    r	|j        c S Œt          ‚)a  Returns the specified argument from a function call.

    :param nodes.Call call_node: Node representing a function call to check.
    :param int position: position of the argument.
    :param str keyword: the keyword of the argument.

    :returns: The node representing the argument, None if the argument is not found.
    :rtype: nodes.Name
    :raises ValueError: if both position and keyword are None.
    :raises NoSuchArgumentError: if no argument at the provided position or with
    the provided keyword.
    Nz2Must specify at least one of: position or keyword.)rk  rì   Ú
IndexErrorÚkeywordsÚargÚvaluer­   )r¤  r¦  r¨  r­  s       r¥   Úget_argument_from_callr¯  Ä  s¡   € ð Ð˜G˜OÝÐMÑNÔNÐNØÐð	Ø”> (Ô+Ð+øÝð 	ð 	ð 	ØˆDð	øøøàð !�9Ô%ð !ØÔ%ð 	!ð 	!ˆCØŒw˜'Ò!Ð!Ø”yÐ Ð Ð ð "õ Ðs   —$ ¤
1°1únodes.Name | Nonec                óÄ   — | j         D ]W}t          |j        ¦  «        }t          |t          j        ¦  «        r'|j        D ]}|d         j        |k    r|d         c c S Œ ŒXdS )a6  Returns the specified argument from a function's kwargs.

    :param nodes.Call call_node: Node representing a function call to check.
    :param str keyword: Name of the argument to be extracted.

    :returns: The node representing the argument, None if the argument is not found.
    :rtype: nodes.Name
    r   rœ   N)ÚkwargsÚ
safe_inferr®  rº   r   ÚDictrè   )r¤  r¨  r­  Úinferredrq  s        r¥   Úinfer_kwarg_from_callr¶  â  sy   € ð Ôð #ð #ˆÝ˜cœiÑ(Ô(ˆÝ�h¥¤
Ñ+Ô+ð 	#Ø œð #ð #�Ø˜”7”= GÒ+Ð+Ø œ7�N�N�N�N�Nð ,øð ˆ4r§   únodes.NodeNG | astroid.Instancec                ó¨   — t          | d¦  «        r|                      ¦   «         ng }t          d„ t          j        | g|¦  «        D ¦   «         ¦  «        S )zQReturn whether the given class node is subclass of
    exceptions.Exception.
    r5  c              3  ól   K  — | ]/}|j         d v o!|                     ¦   «         j         t          k    V — Œ0dS )>   Ú	ExceptionÚBaseExceptionN)r¤   rÄ   ÚEXCEPTIONS_MODULE)r¡   r6  s     r¥   r  z&inherit_from_std_ex.<locals>.<genexpr>ú  sY   è è € ð ð ð ð 	ŒÐ7Ð7ð 	6Ø�MŠM‰OŒOÔ Õ$5Ò5ðð ð ð ð ð r§   )Úhasattrr5  r  r  r  )rµ   r5  s     r¥   Úinherit_from_std_exr¾  õ  se   € õ %,¨D°+Ñ$>Ô$>ÐF�—’Ñ Ô Ð ÀB€IÝð ð õ "œ¨¨°	Ñ:Ô:ðñ ô ñ ô ð r§   Úhandlerúnodes.ExceptHandlerÚ
error_typeú9str | type[Exception] | tuple[str | type[Exception], ...]c                ó”   ‡— dd„Št          |t          ¦  «        s|f}ˆfd„|D ¦   «         }| j        sdS |                      |¦  «        S )	am  Check if the given exception handler catches
    the given error_type.

    The *handler* parameter is a node, representing an ExceptHandler node.
    The *error_type* can be an exception, such as AttributeError,
    the name of an exception, or it can be a tuple of errors.
    The function will return True if the handler catches any of the
    given errors.
    Úerrorústr | type[Exception]r·   rÐ   c                ó>   — t          | t          ¦  «        s| j        S | S rÙ   )rº   rÐ   r¯   )rÄ  s    r¥   Ústringify_errorz&error_of_type.<locals>.stringify_error  s!   € Ý˜%¥Ñ%Ô%ð 	"Ø”>Ð!Øˆr§   c                ó&   •— h | ]} ‰|¦  «        ’ŒS r    r    )r¡   rÄ  rÇ  s     €r¥   ú	<setcomp>z error_of_type.<locals>.<setcomp>  s#   ø€ ÐFÐFÐF°%�� uÑ-Ô-ÐFÐFÐFr§   F)rÄ  rÅ  r·   rÐ   )rº   ÚtupleÚtypeÚcatch)r¿  rÁ  Úexpected_errorsrÇ  s      @r¥   Úerror_of_typerÎ    sl   ø€ ðð ð ð õ
 �j¥%Ñ(Ô(ð #Ø �]ˆ
ØFÐFÐFÐF¸:ÐFÑFÔF€OØŒ<ð ØˆuØ�=Š=˜Ñ)Ô)Ð)r§   c                ó†   — | j         sdS | j         j        D ]*}	 t          |¦  «        r dS Œ# t          j        $ r Y Œ'w xY wdS )z?Detect if the given function node is decorated with a property.FT)Ú
decoratorsr   Ú_is_property_decoratorrð   ÚInferenceError)rµ   Ú	decorators     r¥   Údecorated_with_propertyrÔ    sn   € àŒ?ð ØˆuØ”_Ô*ð ð ˆ	ð	Ý% iÑ0Ô0ð Ø�t�tðøåÔ%ð 	ð 	ð 	ØˆDð	øøøàˆ5s   ™,¬>½>Úkindsc                óÎ   — t          | t          j        t          j        f¦  «        sdS | j        r5| j        j        D ](}t          |t          j        ¦  «        r|j        |v r dS Œ)dS )NFT)rº   rð   r“  r   rë   rÐ  Ú	AttributerŠ  )rµ   rÕ  rÓ  s      r¥   Ú_is_property_kindrØ  )  sq   € Ý�d�WÔ2µEÔ4EÐFÑGÔGð ØˆuØ„ð ØœÔ.ð 	ð 	ˆIÝ˜)¥U¤_Ñ5Ô5ð ¸)Ô:LÐPUÐ:UÐ:UØ�t�tøØˆ5r§   c                ó"   — t          | d¦  «        S )z-Check if the given node is a property setter.Úsetter©rØ  rÅ   s    r¥   Úis_property_setterrÜ  3  s   € å˜T 8Ñ,Ô,Ð,r§   c                ó"   — t          | d¦  «        S )z.Check if the given node is a property deleter.ÚdeleterrÛ  rÅ   s    r¥   Úis_property_deleterrß  8  s   € å˜T 9Ñ-Ô-Ð-r§   c                ó$   — t          | dd¦  «        S )zACheck if the given node is either a property setter or a deleter.rÚ  rÞ  rÛ  rÅ   s    r¥   Úis_property_setter_or_deleterrá  =  s   € å˜T 8¨YÑ7Ô7Ð7r§   rÓ  c                ó  — |                       ¦   «         D �]i}t          |t          j        ¦  «        r]|                     ¦   «         dv r dS |                     ¦   «         D ].}|j        dk    r!|                     ¦   «         j        dk    r  dS Œ/Œzt          |t          j        ¦  «        rÕt          | 
                    ¦   «         ¦  «        }t          |¦  «        dk    r¡t          |d         j        t          j        t          j        f¦  «        rpt          |d         j        ¦  «        }|rTt          |t           j        j        ¦  «        r5t          |j        t          j        ¦  «        rt)          |j        ¦  «        c S �ŒkdS )N>   úbuiltins.propertyúfunctools.cached_propertyTÚpropertyr   rœ   r   F)Úinferrº   r   r)  Úqnamer5  r¤   rÄ   rë   rƒ  Ú _get_return_nodes_skip_functionsrÉ   r®  r  r×  r³  rð   ÚobjectsÚPropertyÚfunctionrÔ  )rÓ  rµ  r6  Úreturnss       r¥   rÑ  rÑ  B  s{  € Ø—O’OÑ%Ô%ð Fñ FˆÝ�h¥¤Ñ/Ô/ð 	FØ�~Š~ÑÔÐ#UÐUÐUØ�t�tØ$×.Ò.Ñ0Ô0ð  ð  �Ø”= JÒ.Ð.°8·=²=±?´?Ô3GÈ:Ò3UÐ3UØ˜4˜4˜4øð õ ˜¥%Ô"3Ñ4Ô4ð 	Fõ +/Ø×9Ò9Ñ;Ô;ñ+ô +ˆGõ �7‰|Œ|˜qÒ Ð ¥ZØ˜”
Ô ¥5¤:­u¬Ð"?ñ&ô &Ð õ & g¨a¤jÔ&6Ñ7Ô7�àðFå" 8­W¬_Ô-EÑFÔFðFõ # 8Ô#4µeÔ6GÑHÔHðFõ
 3°8Ô3DÑEÔEÐEÐEÐEùØˆ5r§   r.  úPnodes.ClassDef | nodes.FunctionDef | astroid.BoundMethod | astroid.UnboundMethodÚqnamesúIterable[str]c                ó
  ‡— | j         r| j         j        ng }|D ]i}t          |t          j        ¦  «        r|j        }	 t          ˆfd„|                     ¦   «         D ¦   «         ¦  «        r dS ŒU# t          j        $ r Y Œfw xY wdS )zMDetermine if the `func` node has a decorator with the qualified name `qname`.c              3  óŽ   •K  — | ]?}|®t          |t          j        ¦  «        °|j        ‰v p|                     ¦   «         ‰v V — Œ@d S rÙ   )rº   r   ÚUninferableBaser¤   rç  )r¡   rO  rî  s     €r¥   r  z!decorated_with.<locals>.<genexpr>j  s[   øè è € ð ð àØ�=­°AµtÔ7KÑ)LÔ)L�=ð ”˜&Ð Ð7 A§G¢G¡I¤I°Ð$7à �=�=�=ðð r§   TF)	rÐ  r   rº   r-  r.  r  ræ  rð   rÒ  )r.  rî  rÐ  Údecorator_nodes    `  r¥   Údecorated_withrô  ]  sÇ   ø€ ð +/¬/ÐA�”Ô&Ð&¸r€JØ$ð ð ˆÝ�n¥e¤jÑ1Ô1ð 	1à+Ô0ˆNð	Ýð ð ð ð à'×-Ò-Ñ/Ô/ðñ ô ñ ô ð ð
 �t�tðøõ Ô%ð 	ð 	ð 	ØˆHð	øøøàˆ5s   ½-A.Á.B Á?B únodes.Decoratorsú)list[nodes.Attribute | nodes.Name | None]c                ó  — g }t          | dg ¦  «        D �]v}d}t          |t          j        ¦  «        rnt	          |j        ¦  «        }t          |t          j        ¦  «        r?|                     ¦   «         dk    r'|j                             |j        j	        ¦  «        \  }}n7t          |t          j
        ¦  «        r|                     |j	        ¦  «        \  }}|sŒÇ|d         }t          |t          j        t          j        f¦  «        sŒöt          |j        ¦  «        }d|v o
|j        dk    }d|v ot          |dd¦  «        dk    }	|s|	r@t	          |¦  «        }|�t          |t"          j        ¦  «        r|                     |¦  «         �Œx|S )a  Return a list of uninferable `typing.final` decorators in `node`.

    This function is used to determine if the `typing.final` decorator is used
    with an unsupported Python version; the decorator cannot be inferred when
    using a Python version lower than 3.8.
    r   NÚtypingr   ÚfinalrŠ  )rÃ   rº   r   r×  r³  rõ   ÚModulerç  Úlookupr¤   r  rð   r  r  Údictrà   Úmodnamer   rò  r\  )
rµ   rÐ  rÓ  Úimport_nodesrµ  rŒ  Úimport_nodeÚimport_namesÚis_from_importÚ	is_imports
             r¥   Úuninferable_final_decoratorsr  u  s   € ð €JÝ˜T 7¨BÑ/Ô/ð $-ñ $-ˆ	ØFJˆõ �i¥¤Ñ1Ô1ð 	?Ý! )¤.Ñ1Ô1ˆHÝ˜(¥E¤LÑ1Ô1ð M°h·n²nÑ6FÔ6FÈ(Ò6RÐ6RØ"+¤.×"7Ò"7¸	¼Ô8KÑ"LÔ"L‘��<øõ ˜	¥5¤:Ñ.Ô.ð 	?Ø'×.Ò.¨y¬~Ñ>Ô>‰OˆAˆ|ð
 ð 	ØØ" 1”oˆå˜+­¬½Ô8JÐ'KÑLÔLð 	Øå˜KÔ-Ñ.Ô.ˆð " \Ð1ÐV°{Ô7JÈhÒ7Vˆð  Ð-ð µ7Ø�z 4ñ4
ô 4
àò4ˆ	ð ð 	-˜Yð 	-Ý! )Ñ,Ô,ˆHØÐ¥:¨h½Ô8LÑ#MÔ#MÐØ×!Ò! )Ñ,Ô,Ð,ùØÐr§   i   )ÚmaxsizeÚis_abstract_cbúnodes.FunctionDef | Noneúdict[str, nodes.FunctionDef]c                óN  — |€t          t          t          ¬¦  «        }i }	 t          |                      ¦   «         ¦  «        }n# t
          j        $ r i cY S w xY w|D ]È}|                     ¦   «         D ]±}|}t          |t          j
        ¦  «        rNt          |¦  «        }|s|j        |v r||j        = ŒAt          |t          j        ¦  «        s|j        |v r||j        = t          |t          j        ¦  «        r+ ||¦  «        }|r|||j        <   Œž|s|j        |v r||j        = Œ²ŒÉ|S )aX  Get the unimplemented abstract methods for the given *node*.

    A method can be considered abstract if the callback *is_abstract_cb*
    returns a ``True`` value. The check defaults to verifying that
    a method is decorated with abstract methods.
    It will return a dictionary of abstract method
    names and their inferred objects.
    N)rî  )r   rô  ÚABC_METHODSÚreversedÚmrorð   ÚResolveErrorÚvaluesrº   r   rã   r³  r¤   rë   )rµ   r  Úvisitedr  r6  Úobjrµ  Úabstracts           r¥   Úunimplemented_abstract_methodsr  §  sk  € ð ÐÝ ¥½ÐDÑDÔDˆØ,.€GðÝ�t—x’x‘z”zÑ"Ô"ˆˆøÝÔð ð ð àˆ	ˆ	ˆ	ðøøøð ð *ð *ˆØ—?’?Ñ$Ô$ð 	*ð 	*ˆCØˆHÝ˜#�uÔ/Ñ0Ô0ð .Ý% c™?œ?�Øð ð
 ”x 7Ð*Ð*Ø# C¤HÐ-ØÝ! (­EÔ,=Ñ>Ô>ð .Ø”x 7Ð*Ð*Ø# C¤HÐ-Ý˜(¥EÔ$5Ñ6Ô6ð *ð *˜>¨(Ñ3Ô3�Øð *Ø(0�G˜CœHÑ%Ð%Ø!ð * c¤h°'Ð&9Ð&9Ø ¤Ð)øð9	*ð: €Ns   ¡!A ÁAÁAú&nodes.ExceptHandler | nodes.Try | Nonec                óà   — | }t           j        t           j        f}|r3t          |j        |¦  «        s|j        }|rt          |j        |¦  «        ¯|rt          |j        |¦  «        r|j        S dS )z>Return the ExceptHandler or the Try node in which the node is.N)r   rò   rÿ   rº   rï   )rµ   ÚcurrentÚignoress      r¥   Úfind_try_except_wrapper_noder  Ü  s�   € ð €GÝÔ"¥E¤IÐ.€GØ
ð !�* W¤^°WÑ=Ô=ð !Ø”.ˆð ð !�* W¤^°WÑ=Ô=ð !ð ð •:˜gœn¨gÑ6Ô6ð ØŒ~ÐØˆ4r§   únodes.ExceptHandler | Nonec                ó´   — |                       ¦   «         D ]B}t          |t          j        j        ¦  «        r dS t          |t
          j        ¦  «        r|c S ŒCdS )zJReturn the ExceptHandler in which the node is, without going out of scope.N)rü   rº   rð   Úscoped_nodesÚLocalsDictNodeNGr   rò   )rµ   r  s     r¥   Ú!find_except_wrapper_node_in_scoper  ê  sh   € ð ×&Ò&Ñ(Ô(ð ð ˆÝ�g�wÔ3ÔDÑEÔEð 	ð
 �4�4Ý�g�uÔ2Ñ3Ô3ð 	ØˆNˆNˆNð	àˆ4r§   c                ój  — t          | ¦  «        }|sdS t          |t          j        ¦  «        r|j        j        }|j        j        }n5t          j         	                    d„ |j        D ¦   «         ¦  «        }|j        }t          d„ |D ¦   «         ¦  «        }t          |t          t          f¦  «        }|p|S )z8Check if the given node is from a fallback import block.Fc              3  ó$   K  — | ]}|j         V — Œd S rÙ   )rÊ   )r¡   r¿  s     r¥   r  z)is_from_fallback_block.<locals>.<genexpr>  s5   è è € ð 3
ð 3
Ø$ˆGŒLð3
ð 3
ð 3
ð 3
ð 3
ð 3
r§   c              3  ób   K  — | ]*}t          |t          j        t          j        f¦  «        V — Œ+d S rÙ   )rº   r   r  r  )r¡   rÿ  s     r¥   r  z)is_from_fallback_block.<locals>.<genexpr>	  sJ   è è € ð ð àõ 	�;¥Ô!1µ5´<Ð @ÑAÔAðð ð ð ð ð r§   )r  rº   r   rò   rï   rÊ   Úhandlersr  r  Úfrom_iterabler  Ú#_except_handlers_ignores_exceptionsÚImportErrorÚModuleNotFoundError)rµ   ÚcontextÚ
other_bodyr  Úhas_fallback_importsÚignores_import_errors         r¥   Úis_from_fallback_blockr(  ú  sÞ   € å*¨4Ñ0Ô0€GØð Øˆuå�'�5Ô.Ñ/Ô/ð $Ø”^Ô(ˆ
Ø”>Ô*ˆˆå”_×2Ò2ð 3
ð 3
Ø(/Ô(8ð3
ñ 3
ô 3
ñ 
ô 
ˆ
ð Ô#ˆåð ð à%ðñ ô ñ ô Ðõ ?Ø•;Õ 3Ð4ñô Ðð  Ð7Ð#7Ð7r§   r  Ú
exceptionsú3tuple[type[ImportError], type[ModuleNotFoundError]]c                óf   ‡— t          t          |¬¦  «        Št          ˆfd„| D ¦   «         ¦  «        S )N)rÁ  c              3  ó.   •K  — | ]} ‰|¦  «        V — Œd S rÙ   r    )r¡   r¿  r.  s     €r¥   r  z6_except_handlers_ignores_exceptions.<locals>.<genexpr>  s+   øè è € Ð5Ð5 ˆtˆt�G‰}Œ}Ð5Ð5Ð5Ð5Ð5Ð5r§   )r   rÎ  r  )r  r)  r.  s     @r¥   r!  r!    s:   ø€ õ •=¨ZÐ8Ñ8Ô8€DÝÐ5Ð5Ð5Ð5¨HÐ5Ñ5Ô5Ñ5Ô5Ð5r§   Ú	exceptionútype[Exception] | strú list[nodes.ExceptHandler] | Nonec                ó€   ‡— t          | ¦  «        }t          |t          j        ¦  «        rˆfd„|j        D ¦   «         S g S )aZ  Return the collections of handlers handling the exception in arguments.

    Args:
        node (nodes.NodeNG): A node that is potentially wrapped in a try except.
        exception (builtin.Exception or str): exception or name of the exception.

    Returns:
        list: the collection of handlers that are handling the exception or None.
    c                ó4   •— g | ]}t          |‰¦  «        ¯|‘ŒS r    )rÎ  )r¡   r¿  r-  s     €r¥   rû   z*get_exception_handlers.<locals>.<listcomp>)  s8   ø€ ð 
ð 
ð 
Øµ}ÀWÈiÑ7XÔ7Xð
Øð
ð 
ð 
r§   )r  rº   r   rÿ   r  )rµ   r-  r$  s    ` r¥   Úget_exception_handlersr2    s[   ø€ õ +¨4Ñ0Ô0€GÝ�'�5œ9Ñ%Ô%ð 
ð
ð 
ð 
ð 
Ø#*Ô#3ð
ñ 
ô 
ð 	
ð €Ir§   úIterator[nodes.With]c              #  ót   K  — |                       ¦   «         D ] }t          |t          j        ¦  «        r|V — Œ!dS )zFGet all contextlib.with statements in the ancestors of the given node.N)rü   rº   r   rç   )rµ   Ú	with_nodes     r¥   Úget_contextlib_with_statementsr6  /  sI   è è € à×(Ò(Ñ*Ô*ð ð ˆ	Ý�i¥¤Ñ,Ô,ð 	ØˆOˆOˆOøðð r§   Úcallc                óz  — t          |t          ¦  «        s|j        }| j        D ]–}t	          |¦  «        }t          |t
          j        ¦  «        r|j        |k    r dS Œ:t          |t
          j        ¦  «        rB|j	        D ]:}t	          |¦  «        }t          |t
          j        ¦  «        r|j        |k    r  dS Œ;Œ—dS )z7Check if the given node suppresses the given exception.TF)
rº   rÐ   r¯   rì   r³  r   r)  r¤   r»   r½   )r7  r-  r­  rµ  ÚeltÚinferred_elts         r¥   Ú_suppresses_exceptionr;  6  sÉ   € õ �i¥Ñ%Ô%ð 'ØÔ&ˆ	ØŒyð  ð  ˆÝ˜c‘?”?ˆÝ�h¥¤Ñ/Ô/ð 
	 ØŒ} 	Ò)Ð)Ø�t�tð *å˜¥%¤+Ñ.Ô.ð 	 Ø”}ð  ð  �Ý)¨#™œ�å˜|­U¬^Ñ<Ô<ð à$Ô)¨YÒ6Ð6à˜4˜4˜4øøØˆ5r§   c              #  ó0  K  — t          | ¦  «        D ]ƒ}|j        D ]y\  }}t          |t          j        ¦  «        rZt          |j        ¦  «        }t          |t          j        ¦  «        r,|                     ¦   «         dk    rt          ||¦  «        r|V — ŒzŒ„dS )a>  Return the contextlib suppressors handling the exception.

    Args:
        node (nodes.NodeNG): A node that is potentially wrapped in a contextlib.suppress.
        exception (builtin.Exception): exception or name of the exception.

    Yields:
        nodes.With: A with node that is suppressing the exception.
    zcontextlib.suppressN)
r6  rè   rº   r   r-  r³  r.  r)  rç  r;  )rµ   r-  r5  rq  rŒ  rµ  s         r¥   Úget_contextlib_suppressorsr=  L  s¬   è è € õ 4°DÑ9Ô9ð 	(ð 	(ˆ	Ø ”ð 	(ð 	(‰GˆD�!Ý˜$¥¤
Ñ+Ô+ð (Ý% d¤iÑ0Ô0�å˜x­¬Ñ8Ô8ð(à ŸšÑ(Ô(Ð,AÒAÐAå,¨T°9Ñ=Ô=ð (Ø'˜˜˜øð	(ð	(ð 	(r§   únodes.Raisec                óT   — t          | ¦  «        }t          |t          j        ¦  «        S )a  Check if the node is directly under a Try/Except statement
    (but not under an ExceptHandler!).

    Args:
        node (nodes.Raise): the node raising the exception.

    Returns:
        bool: True if the node is inside a try/except statement, False otherwise.
    )r  rº   r   rÿ   )rµ   r$  s     r¥   Úis_node_inside_try_exceptr@  d  s#   € õ +¨4Ñ0Ô0€GÝ�g�uœyÑ)Ô)Ð)r§   c                ód   — t          | |¦  «        }|rdS t          t          | |¦  «        ¦  «        S )z�Check if the node is in a Try which handles the given exception.

    If the exception is not given, the function is going to look for bare
    excepts.
    T)r2  r  r=  )rµ   r-  Úmanaging_handlerss      r¥   Únode_ignores_exceptionrC  r  s:   € õ /¨t°YÑ?Ô?ÐØð ØˆtÝÕ)¨$°	Ñ:Ô:Ñ;Ô;Ð;r§   c                óÎ  — t          | ¦  «        rdS |                      ¦   «         }|�-|j        dk    r"|                     ¦   «         j        t          v rdS |                      ¦   «         D ]0}|j        dk    r#|                     ¦   «         j        t          v r dS Œ1|                      ¦   «         D ]6}|j                             ¦   «         | u r| 	                    d¬¦  «        r dS Œ7dS )zWReturn true if the given class node should be considered as an abstract
    class.
    TNÚABCMetaÚABCF)Úpass_is_abstract)
Úis_protocol_classÚdeclared_metaclassr¤   rÄ   ÚABC_MODULESr5  r£   rï   r$  Úis_abstract)rµ   Úmetar6  Úmethods       r¥   Úclass_is_abstractrN  €  sò   € õ ˜ÑÔð Øˆtð ×"Ò"Ñ$Ô$€DØÐØŒ9˜	Ò!Ð! d§i¢i¡k¤kÔ&6½+Ð&EÐ&EØ�4à—N’NÑ$Ô$ð ð ˆØŒ=˜EÒ!Ð! h§m¢m¡o¤oÔ&:½kÐ&IÐ&Ià�4�4øà—,’,‘.”.ð ð ˆØŒ=×ÒÑ Ô  DÐ(Ð(Ø×!Ò!°5Ð!Ñ9Ô9ð Ø�t�tøØˆ5r§   r®  Úattrc                óÂ  — 	 |                       |¦  «        }n# t          j        $ r Y dS w xY w|d         }t          |t          j        ¦  «        r�t          |t          j        t          j        f¦  «        }|€dS t          |j	        t          j
        ¦  «        r%t          d„ |j	        j        D ¦   «         ¦  «        rdS t          |j	        t          j        ¦  «        rdS dS )NFr   Tc              3  óJ   K  — | ]}t          |t          j        ¦  «        V — Œd S rÙ   )rº   r   ÚConst)r¡   Úns     r¥   r  z,_supports_protocol_method.<locals>.<genexpr>¬  s.   è è € ÐUÐU°!•:˜a¥¤Ñ-Ô-ÐUÐUÐUÐUÐUÐUr§   )rÃ   rð   ÚNotFoundErrorrº   r   rã   Úget_node_first_ancestor_of_typerá   Ú	NamedExprr®  ÚBaseContainerrv  r½   rR  )r®  rO  Ú
attributesÚfirstÚthis_assign_parents        r¥   Ú_supports_protocol_methodr[  ›  sò   € ðØ—]’] 4Ñ(Ô(ˆ
ˆ
øÝÔ ð ð ð Øˆuˆuðøøøð �qŒM€Eõ �%�Ô)Ñ*Ô*ð Ý<Ø•E”L¥%¤/Ð2ñ
ô 
Ðð Ð%à�4ÝÐ(Ô.µÔ0CÑDÔDð 	ÝÐUÐUÐ7IÔ7OÔ7TÐUÑUÔUÑUÔUð Ø�uÝÐ(Ô.µ´Ñ<Ô<ð 	Ø�5Øˆ4s   ‚ ˜+ª+c                ó~   — t           j        t           j        t           j        t           j        f}t          | |¦  «        S rÙ   )r   r!  ÚSetCompÚDictCompÚGeneratorExprº   )rµ   Úcomprehensionss     r¥   Úis_comprehensionra  ³  s0   € åŒÝŒÝŒÝÔð	€Nõ �d˜NÑ+Ô+Ð+r§   c                óV   — t          | t          ¦  «        ot          | t          ¦  «        S rÙ   )r[  ÚGETITEM_METHODÚKEYS_METHOD©r®  s    r¥   Ú_supports_mapping_protocolrf  ½  s+   € Ý$Ø�~ñô ð 8å
# E­;Ñ
7Ô
7ð8r§   c                ó,   — t          | t          ¦  «        S rÙ   )r[  ÚCONTAINS_METHODre  s    r¥   Ú"_supports_membership_test_protocolri  Ã  s   € Ý$ U­OÑ<Ô<Ð<r§   c                óV   — t          | t          ¦  «        pt          | t          ¦  «        S rÙ   )r[  ÚITER_METHODrc  re  s    r¥   Ú_supports_iteration_protocolrl  Ç  s+   € Ý$ U­KÑ8Ô8ð Õ<UØ�~ñ=ô =ð r§   c                ó,   — t          | t          ¦  «        S rÙ   )r[  ÚAITER_METHODre  s    r¥   Ú"_supports_async_iteration_protocolro  Í  s   € Ý$ U­LÑ9Ô9Ð9r§   c                ó,   — t          | t          ¦  «        S rÙ   )r[  rc  re  s    r¥   Ú_supports_getitem_protocolrq  Ñ  ó   € Ý$ U­NÑ;Ô;Ð;r§   c                ó,   — t          | t          ¦  «        S rÙ   )r[  ÚSETITEM_METHODre  s    r¥   Ú_supports_setitem_protocolru  Õ  rr  r§   c                ó,   — t          | t          ¦  «        S rÙ   )r[  ÚDELITEM_METHODre  s    r¥   Ú_supports_delitem_protocolrx  Ù  rr  r§   c                óÞ   — |                       ¦   «         }|                     d¦  «        }|                     d¦  «        }|                     d¦  «        p|                     d¦  «        }|p|p|S )NÚmixinr  r(  )ÚlowerrŽ  rx  )r¤   ÚlnameÚis_mixinrK  Úis_bases        r¥   Ú_is_abstract_class_namer  Ý  sg   € Ø�JŠJ‰LŒL€EØ�~Š~˜gÑ&Ô&€HØ×"Ò" :Ñ.Ô.€KØ×Ò˜vÑ&Ô&Ð@¨%¯.ª.¸Ñ*@Ô*@€GØÐ-�{Ð- gÐ-r§   c                óº   — | �Xt          | t          j        ¦  «        r5t          | ¦  «        rdS t	          | dd ¦  «        }|�t          |¦  «        rdS | j        } | ­XdS )NTr¤   F)rº   r   r)  rN  rÃ   r  rï   ©rµ   r¤   s     r¥   Úis_inside_abstract_classr‚  å  sq   € Ø
Ð
Ý�d�EœNÑ+Ô+ð 	Ý  Ñ&Ô&ð Ø�tÝ˜4 ¨Ñ.Ô.ˆDØÐÕ$;¸DÑ$AÔ$AÐØ�tØŒ{ˆð Ð
ð ˆ5r§   Úprotocol_callbackúCallable[[nodes.NodeNG], bool]c                ó>  — t          | t          j        ¦  «        r4t          | ¦  «        sdS |                      ¦   «         }|� ||¦  «        rdS t          | t
          j        ¦  «        r4t          | ¦  «        sdS |                      ¦   «         rdS  || ¦  «        rdS t          | t          j        ¦  «        rdS t          | t
          j	        j
        ¦  «        rEt          | j        t
          j        ¦  «        r&t          | j        ¦  «        r| j        }  || ¦  «        S dS ©NTF)rº   r   r)  Úhas_known_basesÚ	metaclassrð   r”  Úhas_dynamic_getattrr   r*  ÚProxyÚ_proxied)r®  rƒ  rL  s      r¥   Ú_supports_protocolrŒ  ñ  s2  € õ �%�œÑ(Ô(ð Ý˜uÑ%Ô%ð 	Ø�4à�ŠÑ Ô ˆØÐØ Ð  Ñ&Ô&ð Ø�tÝ�%�Ô-Ñ.Ô.ð Ý˜uÑ%Ô%ð 	Ø�4Ø×$Ò$Ñ&Ô&ð 	Ø�4ØÐ˜UÑ#Ô#ð 	Ø�4å�%�Ô1Ñ2Ô2ð Øˆtõ 	�5�'œ-Ô-Ñ.Ô.ð(å�u”~¥wÔ';Ñ<Ô<ð(õ ˜EœNÑ+Ô+ð(ð
 ”ˆØ Ð  Ñ'Ô'Ð'àˆ5r§   FÚcheck_asyncc                óD   — |rt           }nt          }t          | |¦  «        S rÙ   )ro  rl  rŒ  )r®  r�  Úprotocol_checks      r¥   Úis_iterabler�    s&   € Øð 6Ý;ˆˆå5ˆÝ˜e ^Ñ4Ô4Ð4r§   c                ó,   — t          | t          ¦  «        S rÙ   )rŒ  rf  re  s    r¥   Ú
is_mappingr’    ó   € Ý˜eÕ%?Ñ@Ô@Ð@r§   c                óN   — t          | t          ¦  «        }|pt          | ¦  «        S rÙ   )rŒ  ri  r�  )r®  Ú	supporteds     r¥   Úsupports_membership_testr–    s%   € Ý" 5Õ*LÑMÔM€IØÐ*� EÑ*Ô*Ð*r§   c                óÎ   — t          | t          j        ¦  «        r7t          | t          ¦  «        rdS t          |¦  «        rt          |¦  «        rdS t          | t          ¦  «        S )NT)	rº   r   r)  r[  ÚCLASS_GETITEM_METHODÚis_postponed_evaluation_enabledÚ"is_node_in_type_annotation_contextrŒ  rq  )r®  rµ   s     r¥   Úsupports_getitemr›  #  sk   € Ý�%�œÑ(Ô(ð Ý$ UÕ,@ÑAÔAð 	Ø�4Ý*¨4Ñ0Ô0ð 	Õ5WØñ6
ô 6
ð 	ð �4Ý˜eÕ%?Ñ@Ô@Ð@r§   rŒ  c                ó,   — t          | t          ¦  «        S rÙ   )rŒ  ru  ©r®  rŒ  s     r¥   Úsupports_setitemrž  .  r“  r§   c                ó,   — t          | t          ¦  «        S rÙ   )rŒ  rx  r�  s     r¥   Úsupports_delitemr   2  r“  r§   c                óZ   — t          | dd ¦  «        }t          |¦  «        r
 |¦   «         S d S )NÚpytype)rÃ   Úcallable)rµ   r¢  s     r¥   Ú_get_python_type_of_noder¤  6  s3   € Ý'.¨t°X¸tÑ'DÔ'D€FÝ�ÑÔð Øˆv‰xŒxˆØˆ4r§   )Úcompare_constantsr$  úInferenceContext | Noner¥  úInferenceResult | Nonec               ó2  — t          ¦   «         }	 |                      |¬¦  «        }t          |¦  «        }n+# t          j        $ r Y dS t
          $ r}t          |‚d}~ww xY wt          |t          j	        ¦  «        s"| 
                    t          |¦  «        ¦  «         	 |D ]¨}t          |¦  «        }||vr dS |rGt          |t          j        ¦  «        r-t          |t          j        ¦  «        r|j        |j        k    r dS t          |t          j        ¦  «        r-t          |t          j        ¦  «        rt!          ||¦  «        r dS Œ©n8# t          j        $ r Y dS t"          $ r |cY S t
          $ r}t          |‚d}~ww xY wt%          |¦  «        dk    r|ndS )aI  Return the inferred value for the given node.

    Return None if inference failed or if there is some ambiguity (more than
    one node has been inferred of different types).

    If compare_constants is True and if multiple constants are inferred,
    unequal inferred values are also considered ambiguous and return None.
    ©r$  Nrœ   )rX  ræ  Únextrð   rÒ  rº  r   rº   r   rò  r[  r¤  r   rR  r®  rë   Ú function_arguments_are_ambiguousÚStopIterationrÉ   )	rµ   r$  r¥  Úinferred_typesÚ	infer_genr®  rl  rµ  Úinferred_types	            r¥   r³  r³  =  sï  € õ '*¡e¤e€Nð"Ø—J’J w�JÑ/Ô/ˆ	Ý�Y‘”ˆˆøÝÔ!ð ð ð ØˆtˆtÝð "ð "ð "Ý Ð!øøøøð"øøøõ �e�TÔ1Ñ2Ô2ð <Ø×ÒÕ3°EÑ:Ô:Ñ;Ô;Ð;ð"Ø!ð 	ð 	ˆHÝ4°XÑ>Ô>ˆMØ NÐ2Ð2Ø�t�tà!ðå˜x­¬Ñ5Ô5ðõ ˜u¥e¤kÑ2Ô2ðð ”N e¤kÒ1Ð1à�t�tå˜8¥UÔ%6Ñ7Ô7ðå˜u¥eÔ&7Ñ8Ô8ðõ 5°X¸uÑEÔEðð
 �t�tøð!	øõ" Ô!ð ð ð ØˆtˆtÝð ð ð ØˆˆˆÝð "ð "ð "Ý Ð!øøøøð"øøøå˜Ñ'Ô'¨1Ò,Ð,ˆ5ˆ5°$Ð6sS   �%6 ¶AÁ	AÁAÁAÂE
 Â8AE
 ÄAE
 ÅE
 Å
E?ÅE?Å)	E?Å2E:Å:E?i   úlist[InferenceResult]c                ó¢   — 	 t          |                      |¬¦  «        ¦  «        S # t          j        $ r g cY S t          $ r}t
          |‚d }~ww xY w)Nr©  )rƒ  ræ  rð   rÒ  rº  r   )rµ   r$  rl  s      r¥   Ú	infer_allr²  t  sh   € ð"Ý�D—J’J w�JÑ/Ô/Ñ0Ô0Ð0øÝÔ!ð ð ð Øˆ	ˆ	ˆ	Ýð "ð "ð "Ý Ð!øøøøð"øøøs   ‚"% ¥A¸	AÁA	Á	AÚfunc1Úfunc2c                óx  — |                       ¦   «         |                      ¦   «         k    rdS | j        j        |j        j        f| j        j        |j        j        fg}|D ]Ú}d |v rŒt	          |d         ¦  «        t	          |d         ¦  «        k    r dS t          |Ž D ]š\  }}t          |t          j        ¦  «        r/t          |t          j        ¦  «        r|j	        |j	        k    r  dS ŒNt          |t          j
        ¦  «        r/t          |t          j
        ¦  «        r|j        |j        k    r  dS Œ—  dS ŒÛdS )NTr   rœ   F)Úargnamesrì   r  r  rÉ   Úziprº   r   rR  r®  r  r¤   )r³  r´  Úpairs_of_defaultsÚzippable_defaultÚdefault1Údefault2s         r¥   r«  r«  €  s^  € ð ‡~‚~ÑÔ˜5Ÿ>š>Ñ+Ô+Ò+Ð+Øˆtð 
ŒÔ	˜eœjÔ1Ð2Ø	ŒÔ	 ¤Ô!7Ð8ðÐð .ð ð ÐØÐ#Ð#Ð#ØÝÐ Ô"Ñ#Ô#¥sÐ+;¸AÔ+>Ñ'?Ô'?Ò?Ð?Ø�4�4Ý"%Ð'7Ð"8ð 	ð 	ÑˆH�hÝ˜(¥E¤KÑ0Ô0ð µZÀÍ%Ì+Ñ5VÔ5Vð Ø”> X¤^Ò3Ð3Ø˜4˜4˜4ð 4å˜H¥e¤jÑ1Ô1ð µjÀÍ5Ì:Ñ6VÔ6Vð Ø”= H¤MÒ1Ð1Ø˜4˜4˜4ð 2ð �t�t�tð	ð ˆ5r§   r•  c                óì   — 	 | j         S # t          $ r Y nw xY w| j        D ]L}t          ||¬¦  «        }t	          |t
          j        ¦  «        r|| u st          ||¬¦  «        s
d| _          dS ŒMd| _         dS )z=Return true if all base classes of a class could be inferred.r©  FT)Ú_all_bases_knownÚAttributeErrorr*  r³  rº   r   r)  r‡  )r•  r$  r(  r{  s       r¥   r‡  r‡  ›  sª   € ðØÔ%Ð%øÝð ð ð Øˆðøøøà”ð ð ˆÝ˜D¨'Ð2Ñ2Ô2ˆå˜6¥5¤>Ñ2Ô2ð	à˜ˆˆÝ" 6°7Ð;Ñ;Ô;ð ð &+ˆEÔ"Ø�5�5ð	 ð
 "€EÔØˆ4s   ‚	 ‰
•c                óš   — | d u pGt          | t          j        ¦  «        o| j        d u p$t          | t          j        ¦  «        o
| j        dk    S )NrG  )rº   r   rR  r®  r  r¤   rÅ   s    r¥   Úis_nonerÀ  °  sP   € à�ˆð 	BÝ�t�Uœ[Ñ)Ô)Ð@¨d¬j¸DÐ.@ð	Bå�t�UœZÑ(Ô(Ð@¨T¬Y¸&Ò-@ðr§   ú SuccessfulInferenceResult | Nonec                óV  — t          ¦   «         }	 |                      ¦   «         D ]W}t          |t          j        ¦  «        st          |¦  «        rŒ,|                     |¦  «         t          |¦  «        dk    r dS ŒXn# t          j	        $ r Y dS w xY w|r| 
                    ¦   «         ndS )z“Return the inferred type for `node`.

    If there is more than one possible type, or if inferred type is Uninferable or None,
    return None
    rœ   N)rX  ræ  rº   r   rò  rÀ  r[  rÉ   rð   rÒ  Úpop)rµ   ÚtypesÚvar_types      r¥   Ú	node_typerÆ  ¸  sÀ   € õ -0©E¬E€EðØŸ
š
™œð 	ð 	ˆHÝ˜(¥DÔ$8Ñ9Ô9ð ½WÀXÑ=NÔ=Nð ØØ�IŠI�hÑÔÐÝ�5‰zŒz˜AŠ~ˆ~Ø�t�tð ð		øõ Ô!ð ð ð ØˆtˆtðøøøàÐ)ˆ5�9Š9‰;Œ;ˆ; TÐ)s   �A)A= Á;A= Á=BÂBc                ó  — d}t          | t          j        ¦  «        sdS | j        r| j        j        ng }|D ]Ñ}t          |t          j        ¦  «        r|j        }nt          |t          j        ¦  «        r|}nŒBt          |t          j        ¦  «        r|j        dk    rŒh	 t          |j	         
                    ¦   «         ¦  «        }n# t          j        $ r Y Œ¡w xY wt          |t          j        ¦  «        rt          ||¦  «        c S ŒÒdS )z>Check if the given function node is a singledispatch function.)zfunctools.singledispatchzsingledispatch.singledispatchFÚregister)rº   r   rë   rÐ  r-  r.  r×  rŠ  rª  rõ   ræ  rð   rÒ  rô  )rµ   Úsingledispatch_qnamesrÐ  rÓ  r.  Úfunc_defs         r¥   Ú(is_registered_in_singledispatch_functionrË  Í  s,  € ðÐõ
 �d�EÔ-Ñ.Ô.ð Øˆuà*.¬/ÐA�”Ô&Ð&¸r€JØð Cð Cˆ	õ �i¥¤Ñ,Ô,ð 	Ø”>ˆDˆDÝ˜	¥5¤?Ñ3Ô3ð 	ØˆDˆDàå˜$¥¤Ñ0Ô0ð 	°D´MÀZÒ4OÐ4OØð	Ý˜DœIŸOšOÑ-Ô-Ñ.Ô.ˆHˆHøÝÔ%ð 	ð 	ð 	ØˆHð	øøøõ �h¥Ô 1Ñ2Ô2ð 	CÝ! (Ð,AÑBÔBÐBÐBÐBð	Cð ˆ5s   Â&CÃCÃCc                ó6  — t          | t          j        ¦  «        r| j        }nt          | t          j        ¦  «        r| }nd S t          |t          j        ¦  «        r|j        dk    rd S t          |j        ¦  «        }t          |t          j        ¦  «        sd S |S )NrÈ  )	rº   r   r-  r.  r×  rŠ  r³  rõ   rë   )rµ   r.  rÊ  s      r¥   Úfind_inferred_fn_from_registerrÍ  ñ  s”   € õ �$�œ
Ñ#Ô#ð ØŒyˆˆÝ	�D�%œ/Ñ	*Ô	*ð Øˆˆàˆtå�d�EœOÑ,Ô,ð °´ÀÒ0KÐ0KØˆtå˜$œ)Ñ$Ô$€HÝ�h¥Ô 1Ñ2Ô2ð Øˆtà€Or§   c                ó„   — d}| j         r| j         j        ng }|D ]%}t          |¦  «        }|rt          ||¦  «        c S Œ&dS )zDCheck if the given function node is a singledispatchmethod function.)zfunctools.singledispatchmethodz#singledispatch.singledispatchmethodF)rÐ  r   rÍ  rô  )rµ   Úsingledispatchmethod_qnamesrÐ  rÓ  rÊ  s        r¥   Ú.is_registered_in_singledispatchmethod_functionrÐ    sm   € ð#Ðð
 +/¬/ÐA�”Ô&Ð&¸r€JØð Ið Iˆ	Ý1°)Ñ<Ô<ˆØð 	IÝ! (Ð,GÑHÔHÐHÐHÐHð	Ið ˆ5r§   rF  c                óh  — t          | dd¦  «        rt          | j        d         ¦  «        S t          | dd¦  «        rt          | j        d         ¦  «        S t          | dd¦  «        rt          | j        d         ¦  «        S t          | dd¦  «        rt          | j        d         ¦  «        S | j        S )zèGet the last lineno of the given node.

    For a simple statement this will just be node.lineno,
    but for a node that has child statements (e.g. a method) this will be the lineno of the last
    child statement recursively.
    Ú	finalbodyFéÿÿÿÿÚorelser  rÊ   )rÃ   Úget_node_last_linenorÒ  rÔ  r  rÊ   rý   rÅ   s    r¥   rÕ  rÕ    s°   € õ ˆt�[ %Ñ(Ô(ð 8Ý# D¤N°2Ô$6Ñ7Ô7Ð7õ ˆt�X˜uÑ%Ô%ð 5Ý# D¤K°¤OÑ4Ô4Ð4åˆt�Z Ñ'Ô'ð 7Ý# D¤M°"Ô$5Ñ6Ô6Ð6åˆt�V˜UÑ#Ô#ð 3Ý# D¤I¨b¤MÑ2Ô2Ð2àŒ;Ðr§   c                ó<   — |                       ¦   «         }d|j        v S )z<Check if the postponed evaluation of annotations is enabled.r   )rÄ   Úfuture_imports)rµ   Úmodules     r¥   r™  r™  .  s   € à�YŠY‰[Œ[€FØ˜FÔ1Ð1Ð1r§   c                ó~  — | | j         }}	 t          |t          j        ¦  «        r|j        |k    sgt          |t          j        ¦  «        r(|g |j        ¢|j        ¢|j        ¢|j	        ‘|j
        ‘R v s%t          |t          j        ¦  «        r|j        |k    rdS ||j         }}t          |t          j        ¦  «        rdS Œ´)z“Check if node is in type annotation context.

    Check for 'AnnAssign', function 'Arguments',
    or part of function return type annotation.
    TF)rï   rº   r   Ú	AnnAssignÚ
annotationÚ	Argumentsr   Úposonlyargs_annotationsÚkwonlyargs_annotationsÚvarargannotationÚkwargannotationrë   rì  rú  )rµ   Úcurrent_nodeÚparent_nodes      r¥   rš  rš  4  sô   € ð !% d¤k�+€Lðå�{¥E¤OÑ4Ô4ð	àÔ&¨,Ò6Ð6Ý˜+¥u¤Ñ7Ô7ð 7àðØÔ(ðàÔ4ðð Ô3ðð Ô,ð	ð
 Ô+ðð ðð õ ˜+¥uÔ'8Ñ9Ô9ðð Ô# |Ò3Ð3à�4Ø$/°Ô1C�kˆÝ�k¥5¤<Ñ0Ô0ð 	Ø�5ð'r§   r¿   rï   c                óê   — t          d„ | |fD ¦   «         ¦  «        sdS |                      ¦   «         D ]@}	 t          j                             ||¦  «        r dS Œ'# t          j        j        $ r Y Œ=w xY wdS )zÛCheck if first node is a subclass of second node.

    :param child: Node to check for subclass.
    :param parent: Node to check for superclass.
    :returns: True if child is derived from parent. False otherwise.
    c              3  óJ   K  — | ]}t          |t          j        ¦  «        V — Œd S rÙ   )rº   r   r)  )r¡   rµ   s     r¥   r  z!is_subclass_of.<locals>.<genexpr>Y  s.   è è € ÐLÐL°D�z˜$¥¤Ñ/Ô/ÐLÐLÐLÐLÐLÐLr§   FT)rv  r5  rð   ÚhelpersÚ
is_subtyper)  Ú_NonDeducibleTypeHierarchy)r¿   rï   r6  s      r¥   Úis_subclass_ofrè  R  s›   € õ ÐLÐL¸UÀF¸OÐLÑLÔLÑLÔLð Øˆuà—O’OÑ%Ô%ð ð ˆð	ÝŒ×)Ò)¨(°FÑ;Ô;ð Ø�t�tðøåÔ!Ô<ð 	ð 	ð 	ØˆHð	øøøàˆ5s   µ AÁA0Á/A0c                óf   — t          | dd¦  «        }t          |ot          | ddg¦  «        ¦  «        S )z²Check if a node is a function stub decorated with typing.overload.

    :param node: Node to check.
    :returns: True if node is an overload function stub. False otherwise.
    rÐ  Nztyping.overloadÚoverload)rÃ   rÀ   rô  )rµ   rÐ  s     r¥   Úis_overload_stubrë  e  s8   € õ ˜˜|¨TÑ2Ô2€JÝ�
ÐT�~¨dÐ5FÈ
Ð4SÑTÔTÑUÔUÐUr§   Úclsc                ó$  — t          | t          j        ¦  «        sdS |                      ¦   «         t          v rdS | j        D ]N}	 |                     ¦   «         D ]!}|                     ¦   «         t          v r  dS Œ"Œ:# t          j        $ r Y ŒKw xY wdS )zºCheck if the given node represents a protocol class.

    :param cls: The node to check
    :returns: True if the node is or inherits from typing.Protocol directly, false otherwise.
    FT)	rº   r   r)  rç  ÚTYPING_PROTOCOLSr*  ræ  rð   rÒ  )rì  r(  Úinf_bases      r¥   rH  rH  p  s¸   € õ �c�5œ>Ñ*Ô*ð Øˆuð ‡y‚y�{„{Õ&Ð&Ð&Øˆtà”	ð ð ˆð	Ø ŸJšJ™LœLð  ð  �Ø—>’>Ñ#Ô#Õ'7Ð7Ð7Ø˜4˜4˜4ð 8ð øõ Ô%ð 	ð 	ð 	ØˆHð	øøøàˆ5s   Á2A;Á9A;Á;BÂBc                ó”   — t          | t          j        ¦  «        o.t          | j        t          j        ¦  «        o| j        j        |k    S )z6Checks if node is a function call with the given name.)rº   r   r-  r.  r  r¤   r�  s     r¥   Úis_call_of_namerñ  ‡  s?   € õ 	�4�œÑ$Ô$ð 	#Ý�t”y¥%¤*Ñ-Ô-ð	#àŒIŒN˜dÒ"ðr§   c                ób  — |p| j         }t          |t          j        t          j        t          j        t          j        f¦  «        r#| |j        u p|j                             | ¦  «        S t          |t          j	        ¦  «        r	| |j
        v S t          |d¦  «        o|                     | ¦  «        S )z>Returns true if the given node is being tested for truthiness.rÀ   )rï   rº   r   rþ   rÞ   ÚIfExpÚAssertÚtestré   ÚComprehensionÚifsrñ  r"  s     r¥   Úis_test_conditionrø  �  s›   € ð
 Ð"�t”{€FÝ�&�5œ;­¬µ%´+½u¼|ÐLÑMÔMð BØ�v”{Ð"ÐA f¤k×&;Ò&;¸DÑ&AÔ&AÐAÝ�&�%Ô-Ñ.Ô.ð "Ø�v”zÐ!Ð!Ý˜6 6Ñ*Ô*ÐE¨v×/?Ò/?ÀÑ/EÔ/EÐEr§   c                óX   — | j         dk    rdS t          d„ | j        D ¦   «         ¦  «        S )zTest if ClassDef node is Type.rË  Tc              3  ó`   K  — | ])}t          |t          j        ¦  «        o
|j        d k    V — Œ*dS )rË  N)rº   r   r  r¤   )r¡   Úbs     r¥   r  z#is_classdef_type.<locals>.<genexpr>¡  s:   è è € ÐRÐRÀ!�z˜!�UœZÑ(Ô(Ð=¨Q¬V°vÒ-=ÐRÐRÐRÐRÐRÐRr§   )r¤   r  r*  rÅ   s    r¥   Úis_classdef_typerü  �  s3   € à„y�FÒÐØˆtÝÐRÐRÀtÄzÐRÑRÔRÑRÔRÐRr§   ú!nodes.ClassDef | astroid.InstanceÚ	attr_namec                óT  — | j                              |dg¦  «        d         }|r;t          |t          j        ¦  «        r!t          |j        t          j        ¦  «        rdS | j        D ]@}t          |¦  «        }|r-t          |t          j	        ¦  «        rt          ||¦  «        r dS ŒAdS )zQTest if attribute is typed annotation in current node
    or any base nodes.
    Nr   TF)ÚlocalsÚgetrº   r   rã   rï   rÚ  r*  r³  r)  Úis_attribute_typed_annotation)rµ   rþ  Ú	attributer(  rµ  s        r¥   r  r  ¤  sº   € ð ”—’ 	¨D¨6Ñ2Ô2°1Ô5€Iàðå�y¥%Ô"2Ñ3Ô3ðõ �yÔ'­¬Ñ9Ô9ðð
 ˆtØ”
ð ð ˆÝ˜dÑ#Ô#ˆàð	å˜8¥U¤^Ñ4Ô4ð	õ .¨h¸	ÑBÔBð	ð
 �4�4øØˆ5r§   c                óR   — | j         dk    o|                      ¦   «         j         dk    S )NÚEnumÚenum)r¤   rÄ   rÅ   s    r¥   Úis_enumr  ¼  s$   € ØŒ9˜ÒÐ= 4§9¢9¡;¤;Ô#3°vÒ#=Ð=r§   únodes.AssignNameÚtyping_namec                ó:  — t          | j        t          j        ¦  «        sdS | j        j        }t          |t          j        ¦  «        r|j        }t          |t          j        ¦  «        r|j        |k    s%t          |t          j	        ¦  «        r|j
        |k    rdS dS )z½Test if AssignName node has `typing_name` annotation.

    Especially useful to check for `typing._SpecialForm` instances
    like: `Union`, `Optional`, `Literal`, `ClassVar`, `Final`.
    FT)rº   rï   r   rÚ  rÛ  Ú	Subscriptr®  r  r¤   r×  rŠ  )rµ   r	  rÛ  s      r¥   Úis_assign_name_annotated_withr  À  s’   € õ �d”k¥5¤?Ñ3Ô3ð ØˆuØ”Ô'€JÝ�*�eœoÑ.Ô.ð &ØÔ%ˆ
å�:�uœzÑ*Ô*ðàŒO˜{Ò*Ð*Ý�j¥%¤/Ñ2Ô2ð +àÔ ;Ò.Ð.àˆtØˆ5r§   únodes.For | nodes.Comprehensionc                ól  — t          | j        t          j        ¦  «        r t          | j        j        t          j        ¦  «        r|| j        j        j        dk    rgt          | j        j        ¦  «        }t          |t          j	        ¦  «        sdS | j         
                    ¦   «                              d¦  «        d         S t          | j        t          j        t          j        f¦  «        rIt          | j        ¦  «        }t          |t          j        ¦  «        sdS | j         
                    ¦   «         S dS )zøGet the name of the dictionary which keys are being iterated over on
    a ``nodes.For`` or ``nodes.Comprehension`` node.

    If the iterating object is not either the keys method of a dictionary
    or a dictionary itself, this returns None.
    r2   Nz.keysr   )rº   Úiterr   r-  r.  r×  rŠ  r³  rð   ÚBoundMethodÚ	as_stringÚ
rpartitionr  r´  ©rµ   rµ  s     r¥   Úget_iterating_dictionary_namer  Õ  sø   € õ 	�4”9�eœjÑ)Ô)ð<å�t”y”~¥u¤Ñ7Ô7ð<ð ŒIŒNÔ# vÒ-Ð-å˜dœiœnÑ-Ô-ˆÝ˜(¥GÔ$7Ñ8Ô8ð 	Ø�4ØŒy×"Ò"Ñ$Ô$×/Ò/°Ñ8Ô8¸Ô;Ð;õ �$”)�eœj­%¬/Ð:Ñ;Ô;ð %Ý˜dœiÑ(Ô(ˆÝ˜(¥E¤JÑ/Ô/ð 	Ø�4ØŒy×"Ò"Ñ$Ô$Ð$àˆ4r§   únodes.Subscriptúnodes.Constc                ó€   — t          | j        ¦  «        }t          |t          j        ¦  «        st          d¦  «        ‚|S )zûReturns the value 'subscript.slice' of a Subscript node.

    :param node: Subscript Node to extract value from
    :returns: Const Node containing subscript value
    :raises InferredTypeError: if the subscript node cannot be inferred as a Const
    z3Subscript.slice cannot be inferred as a nodes.Const)r³  Úslicerº   r   rR  r´   r  s     r¥   Úget_subscript_const_valuer  ñ  s<   € õ ˜$œ*Ñ%Ô%€HÝ�h¥¤Ñ,Ô,ð WÝÐ UÑVÔVÐVà€Or§   Ú
importnoder   rý  c                ó  — t          | t          j        ¦  «        rd| j        r]|                      ¦   «         }t          |t          j        ¦  «        r/	 |                     || j        ¬¦  «        S # t          $ r |cY S w xY w|S )aÇ  Get a prepared module name from the given import node.

    In the case of relative imports, this will return the
    absolute qualified module name, which might be useful
    for debugging. Otherwise, the initial module name
    is returned unchanged.

    :param importnode: node representing import statement.
    :param modname: module name from import statement.
    :returns: absolute qualified module name of the module
        used in import.
    )Úlevel)rº   r   r  r  rÄ   rú  Úrelative_to_absolute_namer   )r  rý  rÄ   s      r¥   Úget_import_namer  ÿ  s›   € õ �*�eÔ.Ñ/Ô/ð °JÔ4Dð Ø�ŠÑ Ô ˆÝ�d�EœLÑ)Ô)ð 	ðØ×5Ò5Ø :Ô#3ð 6ñ ô ð øõ &ð ð ð Ø���ðøøøà€Ns   ÁA- Á-A<Á;A<únodes.Ifc                ó  — t          | j        t          j        ¦  «        ra| j        j        }t          |t          j        ¦  «        r|j        }t          |t          j        ¦  «        r|                     ¦   «         dk    rdS dS )zÙReturn True if IF stmt is a sys.version_info guard.

    >>> import sys
    >>> if sys.version_info > (3, 8):
    >>>     from typing import Literal
    >>> else:
    >>>     from typing_extensions import Literal
    zsys.version_infoTF)	rº   rõ  r   ÚCompareÚleftr  r®  r×  r  )rµ   r®  s     r¥   Úis_sys_guardr#    sr   € õ �$”)�Uœ]Ñ+Ô+ð Ø”	”ˆÝ�e�Uœ_Ñ-Ô-ð 	 Ø”KˆEå�u�eœoÑ.Ô.ð	à—’Ñ!Ô!Ð%7Ò7Ð7à�4àˆ5r§   c                óÊ   ‡ ‡— t          ˆ ˆfd„‰                      ¦   «                              t          j        t          j        t          j        f¦  «        D ¦   «         ¦  «        S )zaCheck if the given variable name is reassigned in the same scope after the
    current node.
    c              3  óN   •K  — | ]}|j         ‰k    o|j        ‰j        k    V — Œ d S rÙ   )r¤   rý   )r¡   Úarµ   rÖ   s     €€r¥   r  z.is_reassigned_after_current.<locals>.<genexpr>2  sL   øè è € ð ð àð 	
Œ�'ÒÐ4˜aœh¨¬Ò4ðð ð ð ð ð r§   )r  r×   ræ   r   rã   r)  rë   ©rµ   rÖ   s   ``r¥   Úis_reassigned_after_currentr(  .  sm   øø€ õ ð ð ð ð ð à—’‘”×,Ò,ÝÔ�uœ~­uÔ/@ÐAñ
ô 
ðñ ô ñ ô ð r§   c                óœ   ‡ ‡— t          ˆ ˆfd„‰                      ¦   «                              t          j        ¦  «        D ¦   «         ¦  «        S )z^Check if the given variable name is deleted in the same scope after the current
    node.
    c              3  óv   •K  — | ]3}|j         D ])}t          |d d¦  «        ‰k    o|j        ‰j        k    V — Œ*Œ4dS )r¤   N)râ   rÃ   rý   )r¡   Údel_noderó   rµ   rÖ   s      €€r¥   r  z+is_deleted_after_current.<locals>.<genexpr>>  sp   øè è € ð ð àØÔ&ðð ð õ 	�˜ Ñ%Ô%¨Ò0ÐP°V´]ÀTÄ[Ò5Pðð ð ð ð ð ð r§   )r  r×   ræ   r   ÚDeleter'  s   ``r¥   Úis_deleted_after_currentr-  :  s[   øø€ õ ð ð ð ð ð àŸ
š
™œ×3Ò3µE´LÑAÔAðñ ô ñ ô ð r§   c                ó  — t          | j        ¦  «        dk    ont          | j        d         t          j        ¦  «        oIt          | j        d         j        t          j        ¦  «        o| j        d         j        j        t          k    S )zBChecks whether a function body only consists of a single Ellipsis.rœ   r   )rÉ   rÊ   rº   r   ÚExprr®  rR  ÚEllipsisrÅ   s    r¥   Úis_function_body_ellipsisr1  E  sk   € õ 	ˆDŒI‰Œ˜!Òð 	1Ý�t”y ”|¥U¤ZÑ0Ô0ð	1å�t”y ”|Ô)­5¬;Ñ7Ô7ð	1ð ŒI�aŒLÔÔ$­Ò0ð	r§   c                óF   — t          | t          j        ¦  «        o| j         S rÙ   )rº   r   rW  r½   rÅ   s    r¥   Úis_base_containerr3  O  s   € Ý�d�EÔ/Ñ0Ô0ÐB¸¼°]ÐBr§   c                óF   — t          | t          j        ¦  «        o| j         S rÙ   )rº   r   r´  rè   rÅ   s    r¥   Úis_empty_dict_literalr5  S  s   € Ý�d�EœJÑ'Ô'Ð:°´
¨NÐ:r§   c                óz   — t          | t          j        ¦  «        o!t          | j        t          ¦  «        o| j         S rÙ   )rº   r   rR  r®  rÐ   rÅ   s    r¥   Úis_empty_str_literalr7  W  s0   € å�4�œÑ%Ô%ÐX­*°T´ZÅÑ*EÔ*EÐXÈdÌjÈ.ðr§   c                ó²   — t          | t          j        ¦  «        o=t          | j        t          j        ¦  «        ot          | j        j        t
          ¦  «        S )zIReturns true if a node is a nodes.Return that returns a constant boolean.)rº   r   ÚReturnr®  rR  rÀ   rÅ   s    r¥   Úreturns_boolr:  ]  óE   € õ 	�4�œÑ&Ô&ð 	/Ý�t”z¥5¤;Ñ/Ô/ð	/å�t”zÔ'­Ñ.Ô.ðr§   c                ó²   — t          | t          j        ¦  «        o=t          | j        t          j        ¦  «        ot          | j        j        t
          ¦  «        S )zIReturns true if a node is a nodes.Assign that returns a constant boolean.)rº   r   rá   r®  rR  rÀ   rÅ   s    r¥   Úassigned_boolr=  f  r;  r§   Úancestor_typeú'type[_NodeT] | tuple[type[_NodeT], ...]ú_NodeT | Nonec                ó\   — |                       ¦   «         D ]}t          ||¦  «        r|c S ŒdS )zIReturn the first parent node that is any of the provided types (or None).N©rü   rº   )rµ   r>  r6  s      r¥   rU  rU  o  sD   € ð ×'Ò'Ñ)Ô)ð ð ˆÝ�h Ñ.Ô.ð 	ØˆOˆOˆOð	àˆ4r§   ú/tuple[None, None] | tuple[_NodeT, nodes.NodeNG]c                óh   — | }|                       ¦   «         D ]}t          ||¦  «        r||fc S |}ŒdS )a  Modified version of get_node_first_ancestor_of_type to also return the
    descendant visited directly before reaching the sought ancestor.

    Useful for extracting whether a statement is guarded by a try, except, or finally
    when searching for a Try ancestor.
    ©NNrB  )rµ   r>  r¿   r6  s       r¥   Ú-get_node_first_ancestor_of_type_and_its_childrF  y  sS   € ð €EØ×'Ò'Ñ)Ô)ð ð ˆÝ�h Ñ.Ô.ð 	%Ø˜eÐ$Ð$Ð$Ð$ØˆˆØˆ:r§   c                óæ  — |                       ¦   «         D �]Z}t          |t          j        ¦  «        sŒt          |j        t          j        ¦  «        r«|j        j        dk    rŒN|j                             |j        j        ¦  «        d         }|s dS |d         }t          |t          j        ¦  «        r|j	        dk    r dS t          |j        ¦  «        }t          |t          j        ¦  «        r|j        du r dS Œèt          |j        t          j        ¦  «        rS|j        j        dk    r�Œt          |j        j        ¦  «        }t          |t          j        ¦  «        r|j        dk    r dS �Œ\dS )z4Check if a node is guarded by a TYPE_CHECKING guard.r	   rœ   Fr   rø  T)rü   rº   r   rÞ   rõ  r  r¤   rû  r  rý  r³  rR  r®  r×  rŠ  rõ   rú  )rµ   r6  Úlookup_resultÚmaybe_import_fromrµ  Úinferred_modules         r¥   Úin_type_checking_blockrK  Š  sb  € à×'Ò'Ñ)Ô)ð ñ ˆÝ˜(¥E¤HÑ-Ô-ð 	ØÝ�h”m¥U¤ZÑ0Ô0ð 	ØŒ}Ô! _Ò4Ð4ØØ$œM×0Ò0°´Ô1CÑDÔDÀQÔGˆMØ ð Ø�u�uØ -¨aÔ 0ÐåÐ,­eÔ.>Ñ?Ô?ðà%Ô-°Ò9Ð9à�t�tÝ! (¤-Ñ0Ô0ˆHÝ˜(¥E¤KÑ0Ô0ð °X´^ÀuÐ5LÐ5LØ�t�tøÝ˜œ¥u¤Ñ7Ô7ð 	ØŒ}Ô%¨Ò8Ð8ÙÝ(¨¬Ô);Ñ<Ô<ˆOå˜?­E¬LÑ9Ô9ðà#Ô(¨HÒ4Ð4à�t�tùàˆ5r§   Únames_to_checkútuple[str, ...]c                óè  — t          | t          j        ¦  «        r{	 |                      | j        ¦  «        d         d         }n# t
          $ r Y dS w xY wt          |t          j        ¦  «        r'|j        dk    o|                     | j        ¦  «        |v S n\t          | t          j	        ¦  «        rBt          | j        ¦  «        }t          |t          j        ¦  «        o|j        dk    o| j        |v S dS )zkCheck if `node` is a member of the `typing` module and has one of the names from
    `names_to_check`.
    rœ   r   Frø  )rº   r   r  rû  r¤   r«  r  rý  Ú	real_namer×  r³  rõ   rú  rŠ  )rµ   rL  Úimport_fromrJ  s       r¥   Úis_typing_memberrQ  «  s  € õ �$�œ
Ñ#Ô#ð 
ð	ØŸ+š+ d¤iÑ0Ô0°Ô3°AÔ6ˆKˆKøÝð 	ð 	ð 	Ø�5�5ð	øøøõ �k¥5Ô#3Ñ4Ô4ð 	àÔ# xÒ/ð GØ×)Ò)¨$¬)Ñ4Ô4¸ÐFðð	õ
 
�D�%œ/Ñ	*Ô	*ð 
Ý$ T¤YÑ/Ô/ˆå�­¬Ñ5Ô5ð 0ØÔ$¨Ò0ð0à” Ð/ð	
ð
 ˆ5s   œ&A Á
AÁAr  r   c                óx   ‡— t          | t          j        ¦  «        ot          ˆfd„| j        D ¦   «         ¦  «        S )zEReturns True if stmt is inside the else branch for a parent For stmt.c              3  óN   •K  — | ]}|                      ‰¦  «        p|‰k    V — Œ d S rÙ   )ré   )r¡   Ú	else_stmtr  s     €r¥   r  z%in_for_else_branch.<locals>.<genexpr>Ç  sL   øè è € ð 1ð 1Ø;Dˆ	×Ò˜DÑ!Ô!Ð6 Y°$Ò%6ð1ð 1ð 1ð 1ð 1ð 1r§   )rº   r   rå   r  rÔ  )rï   r  s    `r¥   Úin_for_else_branchrU  Ä  sR   ø€ õ �f�eœiÑ(Ô(ð ­Sð 1ð 1ð 1ð 1ØHNÌð1ñ 1ô 1ñ .ô .ð r§   ró   ú&nodes.AssignName | nodes.BaseContainerúIterator[str]c              #  óÜ   K  — t          | t          j        ¦  «        r| j        �| j        V — dS dS t          | t          j        ¦  «        r| j        D ]}t          |¦  «        E d{V —† ŒdS dS )zBYield the names of assignment targets, accounting for nested ones.N)rº   r   rã   r¤   rW  r½   Úfind_assigned_names_recursive)ró   r9  s     r¥   rY  rY  Ì  sž   è è € õ �&�%Ô*Ñ+Ô+ð :ØŒ;Ð"Ø”+ÐÐÐÐÐð #Ð"å	�F�EÔ/Ñ	0Ô	0ð :Ø”;ð 	:ð 	:ˆCÝ4°SÑ9Ô9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9ð:ð :ð	:ð 	:r§   ú+nodes.For | nodes.Comprehension | nodes.SetúIterator[bool]c              #  óX  K  — t          | t          j        ¦  «        rdV — dS t          | t          j        ¦  «        r!| j        D ]}t          |¦  «        E d{V —† ŒdS t          | t          j        t          j        f¦  «        r$| j        j        D ]}t          |¦  «        E d{V —† ŒdS dS )z6Yield ``True`` if a Starred node is found recursively.TN)	rº   r   ÚStarredÚSetr½   Úhas_starred_node_recursiverå   rö  r  )rµ   r9  s     r¥   r_  r_  Ø  sá   è è € õ �$�œÑ&Ô&ð 7Øˆ
ˆ
ˆ
ˆ
ˆ
Ý	�D�%œ)Ñ	$Ô	$ð 7Ø”9ð 	7ð 	7ˆCÝ1°#Ñ6Ô6Ð6Ð6Ð6Ð6Ð6Ð6Ð6Ð6ð	7ð 	7å	�D�5œ9¥eÔ&9Ð:Ñ	;Ô	;ð 7Ø”9”>ð 	7ð 	7ˆCÝ1°#Ñ6Ô6Ð6Ð6Ð6Ð6Ð6Ð6Ð6Ð6ð7ð 7ð	7ð 	7r§   c                ó^  — 	 |                       ¦   «         D ]€}t          |t          j        t          j        f¦  «        r dS t          |d¦  «        s dS t          |                     d¦  «        ¦  «        }|j	        |u r dS t          |dd¦  «        � dS Œ�dS # t          j        $ r Y dS w xY w)zgReturn whether any inferred value of `node` is hashable.

    When finding ambiguity, return True.
    TÚigetattrr;   r®  NF)ræ  rº   r   r)  r   rò  r½  rª  ra  rï   rÃ   rð   rÒ  )rµ   rµ  Úhash_fns      r¥   Úis_hashablerc  æ  sÑ   € ðØŸ
š
™œð 		ð 		ˆHÝ˜(¥U¤^µTÔ5IÐ$JÑKÔKð Ø�t�tÝ˜8 ZÑ0Ô0ð Ø�t�tÝ˜8×,Ò,¨ZÑ8Ô8Ñ9Ô9ˆGØŒ~ Ð)Ð)Ø�t�tÝ�w ¨Ñ.Ô.Ð:Ø�t�tð ;àˆuøÝÔ!ð ð ð Øˆtˆtðøøøs)   ‚=B ÁB Á,B ÂB ÂB ÂB,Â+B,r"  Úrightc                óÀ  — t          | t          j        ¦  «        r›t          |t          j        ¦  «        r�	 t          | ¦  «        j        t          |¦  «        j        k    rdS | j        } |j        }n# t
          $ r Y dS w xY wt          | t          j        ¦  «        rt          |t          j        ¦  «        °�|                      ¦   «         |                     ¦   «         k    S )NF)rº   r   r  r  r®  r´   r  )r"  rd  s     r¥   Úsubscript_chain_is_equalrf  ü  s×   € Ý
�T�5œ?Ñ
+Ô
+ð µ
¸5Å%Ä/Ñ0RÔ0Rð ð
	å)¨$Ñ/Ô/Ô5Ý,¨UÑ3Ô3Ô9ò:ð :ð �uà”:ˆDØ”KˆEˆEøÝ ð 	ð 	ð 	Ø�5�5ð	øøøõ �T�5œ?Ñ
+Ô
+ð µ
¸5Å%Ä/Ñ0RÔ0Rð ð �>Š>ÑÔ˜uŸšÑ0Ô0Ò0Ð0s   ¶*A1 Á"A1 Á1
A?Á>A?ú#nodes.AssignName | nodes.AssignAttrÚsidec                óÖ  — t          |t          j        ¦  «        r,t          | t          j        ¦  «        r| j        |j        k    S dS t          |t          j        ¦  «        rDt          | t          j        ¦  «        r*|                      ¦   «         |                     ¦   «         k    S t          |t          j        ¦  «        r*t          | t          j        ¦  «        rt          | |¦  «        S dS )zKDetermine whether the target name-like node is referenced in the side node.F)
rº   r   r  rã   r¤   r×  Ú
AssignAttrr  r  rf  )ró   rh  s     r¥   Ú_is_target_name_in_binop_siderk    sÆ   € õ �$�œ
Ñ#Ô#ð Ý�f�eÔ.Ñ/Ô/ð 	,Ø”; $¤)Ò+Ð+ØˆuÝ�$�œÑ(Ô(ð 6­Z¸ÅÔ@PÑ-QÔ-Qð 6Ø×ÒÑ!Ô! T§^¢^Ñ%5Ô%5Ò5Ð5Ý�$�œÑ(Ô(ð 6­Z¸ÅÄÑ-PÔ-Pð 6Ý'¨°Ñ5Ô5Ð5àˆ5r§   únodes.Assignútuple[bool, str]c                ó  — t          | j        t          j        ¦  «        sdS | j        }| j        d         }t          |t          j        t          j        t          j        f¦  «        sdS t          |j        t          j	        ¦  «        r(t          |j        j        t          t          f¦  «        rdS t          |j        t          j        ¦  «        st          |j        t          j        ¦  «        rdS t          ||j        ¦  «        r	d|j        fS |j        t           v rht          ||j        ¦  «        rSt#          |j        ¦  «        }t          |t          j	        ¦  «        r#t          |j        t$          ¦  «        r	d|j        fS dS dS )zjDetermine if the node is assigning itself (with modifications) to itself.

    For example: x = 1 + x
    )Frr  r   T)rº   r®  r   ÚBinOprâ   rã   rj  r  r"  rR  rÐ   Úbytesr-  rd  rk  ÚopÚCOMMUTATIVE_OPERATORSr³  rF  )rµ   Úbinopró   Úinferred_lefts       r¥   Úis_augmented_assignru    sa  € õ
 �d”j¥%¤+Ñ.Ô.ð ØˆyàŒJ€EØŒ\˜!Œ_€Få�f�uÔ/µÔ1AÅ5Ä?ÐSÑTÔTð Øˆyõ �%”*�eœkÑ*Ô*ð ­zØŒ
Ô�3¥˜,ñ0ô 0ð ð ˆyõ �%”*�eœjÑ)Ô)ð ­Z¸¼ÅUÄZÑ-PÔ-Pð Øˆyå$ V¨U¬ZÑ8Ô8ð Ø�U”Xˆ~Ðð 	ŒÕ)Ð)Ð)Ý)¨&°%´+Ñ>Ô>ð 	*õ # 5¤:Ñ.Ô.ˆÝ�m¥U¤[Ñ1Ô1ð 	"µjØÔ¥ñ7
ô 7
ð 	"ð ˜œ�>Ð!ØˆyØˆ9r§   Úqualified_module_nameú	list[str]c                ó~   ‡— |                       d¦  «        Šˆfd„t          t          ‰¦  «        ¦  «        D ¦   «         S )zÝSplit the names of the given module into subparts.

    For example,
        _qualified_name_parts('pylint.checkers.ImportsChecker')
    returns
        ['pylint', 'pylint.checkers', 'pylint.checkers.ImportsChecker']
    rV  c                óP   •— g | ]"}d                       ‰d|dz   …         ¦  «        ‘Œ#S )rV  r   rœ   )Újoin)r¡   rO  rà   s     €r¥   rû   z)_qualified_name_parts.<locals>.<listcomp>N  s2   ø€ ÐBÐBÐB¨1ˆC�HŠH�U˜1˜q 1™u˜9Ô%Ñ&Ô&ÐBÐBÐBr§   )ÚsplitÚrangerÉ   )rv  rà   s    @r¥   Ú_qualified_name_partsr}  E  s@   ø€ ð "×'Ò'¨Ñ,Ô,€EØBÐBÐBÐBµµc¸%±j´jÑ0AÔ0AÐBÑBÔBÐBr§   Úignored_modulesc                ó’   — t          |¦  «        }t          | ¦  «        D ]'}||v r dS |D ]}t          j        ||¦  «        r  dS ŒŒ(dS r†  )rX  r}  Úfnmatch)rv  r~  Úcurrent_moduleÚignores       r¥   Úis_module_ignoredrƒ  Q  sx   € õ ˜/Ñ*Ô*€OÝ/Ð0EÑFÔFð ð ˆà˜_Ð,Ð,Ø�4�4Ø%ð 	ð 	ˆFåŒ˜~¨vÑ6Ô6ð Ø�t�t�tðð	ð ˆ5r§   c                óx   ‡ — t          ‰ t          j        ¦  «        ot          ˆ fd„t          D ¦   «         ¦  «        S )Nc              3  ó*   •K  — | ]}‰j         |u V — Œd S rÙ   re  )r¡   r®  rµ   s     €r¥   r  z%is_singleton_const.<locals>.<genexpr>a  s;   øè è € ð 1ð 1Ø %ˆŒ
�eÐð1ð 1ð 1ð 1ð 1ð 1r§   )rº   r   rR  r  ÚSINGLETON_VALUESrÅ   s   `r¥   Úis_singleton_constr‡  `  sN   ø€ Ý�d�EœKÑ(Ô(ð ­Sð 1ð 1ð 1ð 1Ý)9ð1ñ 1ô 1ñ .ô .ð r§   c                ó”  — t          | j        t          j        ¦  «        st          | j        t          j        ¦  «        rt          | j        t          j        ¦  «        rdS 	 | j                             ¦   «         D ]0}t          |d¦  «        r| 	                    ¦   «         t          v r dS Œ1n# t          t          j        f$ r Y nw xY wdS )z9Detect call to exit(), quit(), os._exit(), or sys.exit().Frç  T)rº   r.  r   r×  r  rï   rê   ræ  r½  rç  ÚTERMINATING_FUNCS_QNAMESr¬  rð   rÒ  r  s     r¥   Úis_terminating_funcrŠ  f  sÕ   € õ �t”y¥%¤/Ñ2Ô2ðå˜DœI¥u¤zÑ2Ô2ðõ �d”k¥5¤<Ñ0Ô0ðð
 ˆuðØœ	ŸšÑ)Ô)ð 	ð 	ˆHå˜ 'Ñ*Ô*ðà—N’NÑ$Ô$Õ(@Ð@Ð@à�t�tøð	øõ �7Ô1Ð2ð ð ð Øˆðøøøð ˆ5s   Á!AB, Â*B, Â,CÃCc                ó^   — 	 |                      | ¦  «         dS # t          j        $ r Y dS w xY wr†  )rÃ   rð   rT  )r¤   r•  s     r¥   Úis_class_attrrŒ  |  sC   € ðØ�Š�dÑÔÐØˆtøÝÔ ð ð ð Øˆuˆuðøøøs   ‚ ™,«,rq  c                ó(   — ddddddddd	d
dœ
|          S )a  Returns the inverse comparator given a comparator.

    E.g. when given "==", returns "!="

    :param str op: the comparator to look up.

    :returns: The inverse of the comparator in string format
    :raises KeyError: if input is not recognized as a comparator
    ú!=ú==ú>=ú<=ú>ú<únot inÚinúis notÚis)
r�  rŽ  r“  r’  r‘  r�  r•  r”  r—  r–  r    )rq  s    r¥   Úget_inverse_comparatorr˜  „  s;   € ð ØØØØØØØØØðð ð 	ô
ð 
r§   Ú	test_nodeúGnodes.Compare | nodes.Name | nodes.UnaryOp | nodes.BoolOp | nodes.BinOpc                óö  — d|                       ¦   «         › �}t          | t          j        ¦  «        r| j                              ¦   «         }�n,t          | t          j        ¦  «        rd|                       ¦   «         › d�}nùt          | t          j        ¦  «        rß| j        }| j        d         \  }}t          j	        t          j        t          j        t          j
        t          j        f}t          ||¦  «        rd|                      ¦   «         › d�n|                      ¦   «         }t          ||¦  «        rd|                      ¦   «         › d�n|                      ¦   «         }|› dt          |¦  «        › d|› �}|S )Nznot znot (rU  r   rT  ú )r  rº   r   ÚUnaryOpÚoperandÚBoolOpr!  r"  Úopsrê   ró  rV  r˜  )r™  ÚmsgÚlhsr   ÚrhsÚlower_priority_expressionss         r¥   Únot_condition_as_stringr¥  œ  sl  € ð )�×$Ò$Ñ&Ô&Ð
(Ð
(€CÝ�)�Uœ]Ñ+Ô+ð ;ØÔ×)Ò)Ñ+Ô+ˆ‰Ý	�I�uœ|Ñ	,Ô	,ð ;Ø.�i×)Ò)Ñ+Ô+Ð.Ð.Ð.ˆˆÝ	�I�uœ}Ñ	-Ô	-ð ;ØŒnˆØ”= Ô#‰ˆˆSåŒLÝŒMÝŒLÝŒKÝŒOð&
Ð"õ ˜#Ð9Ñ:Ô:ð!Ð"�—’‘”Ð"Ð"Ð"Ð"à—’‘”ð 	õ ˜#Ð9Ñ:Ô:ð!Ð"�—’‘”Ð"Ð"Ð"Ð"à—’‘”ð 	ð
 Ð:Ð:Õ-¨cÑ2Ô2Ð:Ð:°SÐ:Ð:ˆØ€Jr§   iè  únodes.LocalsDictNodeNGc                óì   — 	 t          |                      |¦  «        ¦  «        }n# t          t          f$ r Y dS w xY w	 ||         }n# t          $ r Y dS w xY wt	          |t
          j        ¦  «        r|S dS )zGet overridden method if any.N)rª  Úlocal_attr_ancestorsr¬  ÚKeyErrorrº   r   rë   )r•  r¤   rï   Ú	meth_nodes       r¥   Úoverridden_methodr«  ¼  s¡   € ð
Ý�e×0Ò0°Ñ6Ô6Ñ7Ô7ˆˆøÝ�8Ð$ð ð ð ØˆtˆtðøøøðØ˜4”Lˆ	ˆ	øÝð ð ð ð ˆtˆtðøøøõ �)�UÔ.Ñ/Ô/ð ØÐØˆ4s   ‚"% ¥:¹:¾A Á
AÁArG  c                 ó�   — t           t          t          t          t          t
          t          g} | D ]}|                     ¦   «          ŒdS )z-Clear caches holding references to AST nodes.N)rN  rU  r²  rë  r«  r  r³  Úcache_clear)Úcaches_holding_node_referencesÚlrus     r¥   Úclear_lru_cachesr°  Ð  sP   € õ 	ÝÝÝÝÝ&ÝðEÐ"ð .ð ð ˆØ�ŠÑÔÐÐðð r§   c                óX  — |                       ¦   «         }t          |t          j        ¦  «        r?|                     d¦  «        r*|                     ¦   «                              ¦   «         dk    rdS |j                             d¦  «        }|€dS | j	        d„ |d         j
        D ¦   «         v S )z_Return `True` if `node` is an Enum member (is an item of the
    `__members__` container).
    z	enum.Enumr  FÚ__members__Nc                ó"   — g | ]\  }}|j         ‘ŒS r    rÓ   )r¡   r®  Úname_objs      r¥   rû   z"is_enum_member.<locals>.<listcomp>ð  s   € ÐOÐOÐO©?¨5°(˜œÐOÐOÐOr§   r   )r$  rº   r   r)  Úis_subtype_ofrÄ   rç  r   r  r¤   rè   )rµ   r$  Úmemberss      r¥   Úis_enum_memberr·  ß  s£   € ð
 �JŠJ‰LŒL€Eå�u�eœnÑ-Ô-ðà×"Ò" ;Ñ/Ô/ðð �:Š:‰<Œ<×ÒÑÔ 6Ò)Ð)àˆuàŒl×Ò˜}Ñ-Ô-€Gà€ØˆuØŒ9ÐOÐO¸gÀa¼jÔ>NÐOÑOÔOÐOÐOr§   )rµ   r¶   r·   r¸   )rµ   r¶   r·   rÀ   )rµ   rÇ   r·   rÀ   )r¤   rÐ   r·   rÀ   )rÕ   r¶   rÖ   rÐ   r×   r¶   r·   rÀ   )rÕ   r¶   rÖ   rÐ   r×   r¶   r·   rÜ   )rÕ   rø   r·   rÀ   rÙ   )rµ   r¶   r×   rÜ   r·   rÀ   )r$  r%  rµ   r¶   r·   rÀ   )rµ   r¶   r·   r¶   )r2  r%  r¤   rÐ   r·   rÀ   )r8  rÐ   r·   r9  )rL  rÐ   r·   rM  )rL  rÐ   r·   rg  )rL  rÐ   r·   rn  )rL  rÐ   r·   r~  )rŠ  rÐ   r·   rÀ   )rµ   r¶   r·   r�  )r2  r˜  r·   r™  )rŠ  rÐ   r·   r�  rE  )r¤  r¥  r¦  r§  r¨  r©  r·   rø   )r¤  r¥  r¨  rÐ   r·   r°  )rµ   r·  r·   rÀ   )r¿  rÀ  rÁ  rÂ  r·   rÀ   )rµ   r¶   rÕ  rÐ   r·   rÀ   )rÓ  rø   r·   rÀ   )r.  rí  rî  rï  r·   rÀ   )rµ   rõ  r·   rö  )rµ   r%  r  r  r·   r  )rµ   r¶   r·   r  )rµ   r¶   r·   r  )r  rÀ  r)  r*  r·   rÀ   )rµ   r¶   r-  r.  r·   r/  )rµ   r¶   r·   r3  )r7  r¥  r-  r.  r·   rÀ   )rµ   r¶   r-  r.  r·   r3  )rµ   r>  r·   rÀ   )rµ   r¶   r-  r.  r·   rÀ   )rµ   r%  r·   rÀ   )r®  r¶   rO  rÐ   r·   rÀ   )r®  r¶   r·   rÀ   )r®  r¶   rƒ  r„  r·   rÀ   )F)r®  r¶   r�  rÀ   r·   rÀ   )r®  r¶   rµ   r¶   r·   rÀ   )r®  r¶   rŒ  r¶   r·   rÀ   )rµ   r¶   r·   r©  )rµ   r¶   r$  r¦  r¥  rÀ   r·   r§  )rµ   r¶   r$  r¦  r·   r°  )r³  rÇ   r´  rÇ   r·   rÀ   )r•  r%  r$  r¦  r·   rÀ   )rµ   r¶   r·   rÁ  )rµ   r¶   r·   r  )rµ   r¶   r·   rF  )r¿   r%  rï   r%  r·   rÀ   )rì  r¶   r·   rÀ   )rµ   r¶   r¤   rÐ   r·   rÀ   )rµ   r¶   rï   rÜ   r·   rÀ   )rµ   rý  rþ  rÐ   r·   rÀ   )rµ   r  r	  rÐ   r·   rÀ   )rµ   r  r·   r©  )rµ   r  r·   r  )r  r   rý  r©  r·   r©  )rµ   r  r·   rÀ   )rµ   r¶   rÖ   rÐ   r·   rÀ   )rµ   rÜ   r·   rÀ   )rµ   r¶   r>  r?  r·   r@  )rµ   r¶   r>  r?  r·   rC  )rµ   r¶   rL  rM  r·   rÀ   )rï   r¶   r  r   r·   rÀ   )ró   rV  r·   rW  )rµ   rZ  r·   r[  )r"  r  rd  r  r·   rÀ   )ró   rg  rh  rÜ   r·   rÀ   )rµ   rl  r·   rm  )rv  rÐ   r·   rw  )rv  rÐ   r~  rï  r·   rÀ   )rµ   r¥  r·   rÀ   )r¤   rÐ   r•  r%  r·   rÀ   )rq  rÐ   r·   rÐ   )r™  rš  r·   rÐ   )r•  r¦  r¤   r©  r·   r  )r·   rG  )rµ   r  r·   rÀ   )ÈrB  Ú
__future__r   r   r€  r  r�  rŸ  rY  Úcollections.abcr   r   Ú	functoolsr   r   r   rø  r	   r
   r   r   ri  Úastroid.objectsrð   r   r   r   Úastroid.contextr   Úastroid.exceptionsr   Úastroid.nodes._base_nodesr   r   Úastroid.typingr   r   r   Úpylint.checkersr   r’  r   r   ÚAstCallbackMethodr!  r]  r^  r_  rä   r¼  rJ  r	  Ú	frozensetrî  rr  rk  rn  ÚNEXT_METHODrc  r˜  rt  rw  rh  rd  Ú_SPECIAL_METHODS_PARAMSrè   ÚSPECIAL_METHODS_PARAMSrX  Ú	PYMETHODSÚSUBSCRIPTABLE_CLASSES_PEP585r†  r‰  rº  r­   r´   r¾   rÆ   rÌ   Ú__dict__ÚcopyrÒ   rÏ   rÔ   rÛ   rÚ   r  r  r#  r+  r/  r1  r7  r?  rA  rD  rf  rm  rw  r‰  r�  r—  rœ  r£  r¯  r¶  r¾  rÎ  rÔ  rØ  rÜ  rß  rá  rÑ  rô  r  r  r  r  r(  r!  r2  r6  r;  r=  r@  rC  rN  r[  ra  rf  ri  rl  ro  rq  ru  rx  r  r‚  rŒ  r�  r’  r–  r›  rž  r   r¤  r³  r²  r«  r‡  rÀ  rÆ  rË  rÍ  rÐ  rÕ  r™  rš  rè  rë  rH  rñ  rø  rü  r  r  r  r  r  r  r#  r(  r-  r1  r3  r5  r7  r:  r=  rU  rF  rK  rQ  rU  rY  r_  rc  rf  rk  ru  r}  rƒ  r‡  rŠ  rŒ  r˜  r¥  r«  r°  r·  r    r§   r¥   ú<module>rÊ     s¶  ðð
 >Ð =à "Ð "Ð "Ð "Ð "Ð "à €€€Ø €€€Ø Ð Ð Ð Ø €€€Ø 	€	€	€	Ø €€€Ø .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ø (Ð (Ð (Ð (Ð (Ð (Ð (Ð (Ø Ð Ð Ð Ð Ð Ø 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8à €€€Ø Ð Ð Ð Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø +Ð +Ð +Ð +Ð +Ð +Ø ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ø EÐ EÐ EÐ EÐ EÐ EÐ EÐ Eàð ,Ø,Ð,Ð,Ð,Ð,Ð,à+Ð+Ð+Ð+Ð+Ð+à	ˆ� ¤Ð	.Ñ	.Ô	.€ØˆG�K }Ð5Ñ5Ô5€	Ø˜i¨Ð0°$Ð6Ô7Ð ð 
„NØ	„MØ	„NØ	Ôð	€ð Ð Ø�iÐ €ðð ð €ð �9ØBÐBÐBñô Ð ð "˜	Ð";Ð";Ð";Ñ<Ô<Ð Ø€Ø€Ø€Ø€Ø*Ð Ø€Ø€Ø €Ø€ð Cð%ðL?ð@ LØ ØØðWlð lÐ ð\ð à2×8Ò8Ñ:Ô:ðñ ô Ð ð
 ˆCÐ&Ñ'Ô'€	à(˜yð'ñ) ô ) Ð ðV 'Ð&Ð&Ð à$˜9ØDÐDÐDñô Ð ð
	ð 	ð 	ð 	ð 	˜)ñ 	ô 	ð 	ð	ð 	ð 	ð 	ð 	˜	ñ 	ô 	ð 	ñð ð ð ñð ð ð ñIð Ið Ið Ið
 Ô×!Ò!Ñ#Ô#€Ø$Ð ñ3ð 3ð 3ð 3ñ
8ð 8ð 8ð 8ñ
Bð Bð Bð Bñ-ð -ð -ð -ñ`7ð 7ð 7ð 7ñtñ ð ð ð ñ&ð ð ð ñ"Pð Pð Pð PñLð Lð Lð Lñ
ð ð ð ñ	ð 	ð 	ð 	ñð ð ð ð0Eð Eð Eð Eð E˜Yñ Eô Eð Eðð ð ð ð  ñ ô ð ñI0ð I0ð I0ð I0ñX.ð .ð .ð .ñ=ð =ð =ð =ñDLð Lð Lð Lñ:ð ð ð ñð ð ð ñ2Pð Pð Pð Pñ!ð !ð !ð !ð OSññ ð ð ð ñ<ð ð ð ñ&	ð 	ð 	ð 	ñ*ð *ð *ð *ñ6
ð 
ð 
ð 
ñð ð ð ñ-ð -ð -ð -ñ
.ð .ð .ð .ñ
8ð 8ð 8ð 8ñ
ð ð ð ñ6ð ð ð ñ0/ð /ð /ð /ðd €�4ÐÑÔàEIñ1ñ 1ð 1ð 1ñ Ôð1ñhð ð ð ñð ð ð ñ 8ð 8ð 8ð 8ñ26ð 6ð 6ð 6ð <Eðñ ð ð ð ñ(ð ð ð ð :Cðñ ð ð ð ð. <Eð(ñ (ð (ð (ð (ñ0*ð *ð *ð *ð <Eð<ñ <ð <ð <ð <ð €�4ÐÑÔñð ð ñ Ôðñ4ð ð ð ñ0,ð ,ð ,ð ,ñ8ð 8ð 8ð 8ñ=ð =ð =ð =ñð ð ð ñ:ð :ð :ð :ñ<ð <ð <ð <ñ<ð <ð <ð <ñ<ð <ð <ð <ñ.ð .ð .ð .ñ	ð 	ð 	ð 	ñð ð ð ñB5ñ 5ð 5ð 5ð 5ñAð Að Að Añ+ð +ð +ð +ñ
Að Að Að AñAð Að Að AñAð Að Að Añð ð ð ð €�4ÐÑÔð (,ñ37ð $ð	37ð 37ñ 37ð 37ð 37ñ Ôð37ðl €�3ÐÑÔà;?ñ"ñ "ð "ð "ñ Ôð"ñð ð ð ð8 ?Cññ ð ð ð ñ*ð ð ð ñ*ð *ð *ð *ñ*!ð !ð !ð !ñHð ð ð ñ(ð ð ð ñ"ð ð ð ñ02ð 2ð 2ð 2ñð ð ð ñ<ð ð ð ð& €�4ÐÑÔñVð Vð Vñ ÔðVñð ð ð ñ.ð ð ð ð #'ñ
Fñ 
Fð 
Fð 
Fð 
FñSð Sð Sð Sñð ð ð ñ0>ð >ð >ð >ñð ð ð ñ*ð ð ð ñ8ð ð ð ñð ð ð ñ2ð ð ð ñ,	ð 	ð 	ð 	ñð ð ð ñð ð ð ñCð Cð Cð Cñ;ð ;ð ;ð ;ñð ð ð ñð ð ð ñð ð ð ñð ð ð ññ ð ð ñ"ñ ð ð ñBñ ð ð ð2 ññ ð ñ „ðñ	:ñ 	:ð 	:ð 	:ñ7ñ 7ð 7ð 7ññ ð ð ñ,1ñ 1ð 1ð 1ñ"ñ ð ð ñ %ñ %ð %ð %ñP	Cñ 	Cð 	Cð 	Cññ ð ð ññ ð ð ññ ð ð ñ,ñ ð ð ñ
ñ 
ð 
ð 
ñ0ñ ð ð ð@ €‘4ÐÑÔññ ð ñ Ôðñ&ñ ð ð ñPñ Pð Pð Pð Pð Pr§   