§
    ñyIf%” ã                  óò  — U 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	Z	ddl
mZmZmZmZ ddlmZ ddlmZmZmZmZmZmZmZ ddlmZmZmZ ddlmZmZ dd	lm Z m!Z! dd
l"m#Z#m$Z$m%Z% ddl&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1 ddl2m3Z3 ddl4m5Z5 ddl6m7Z7 ddl8m9Z9 ddl:m;Z; ddl<m=Z=m>Z>m?Z?m@Z@ ejA        dk    rddlmBZB nddlCmBZB erddlmDZD ddl6mEZE dàd„ZF ejG        de;¬¦  «        ZH ejG        dejI        ¬¦  «        ZJed         ZKeeHeKee$         eejL        eM                  gef         ZNeeHee$         gej        ee?eJf         ddf         f         ZOeeHee$         gej        e?dee>         f         f         ZPeeHeQge=f         ZRejS        dádâd„¦   «         ZTdádãd"„ZU eV¦   «         ZWdádâd#„ZXdádâd$„ZYdádâd%„ZZ G d&„ d'e7j[        eej\        ¬(¦  «        Z] G d)„ d*e7j^        e7j_        e7j[        ¦  «        Z` G d+„ d,e7j^        e7j_        e7j[        ¦  «        Za G d-„ d.e7j_        e7j^        ¦  «        Zbd/Zc G d0„ d1e7jd        ¦  «        Zed2„ Zf	 dädåd6„Zg	 dádæd<„Zh G d=„ d>e7j_        e7j[        ¦  «        Zi G d?„ d@e7jj        ¦  «        Zk G dA„ dBe7jd        e7jj        ¦  «        Zl G dC„ dDe7jd        e7jj        ¦  «        Zm G dE„ dFe7jd        e7jn        e7jj        ¦  «        Zo G dG„ dHe7jn        ¦  «        Zp G dI„ dJe;¦  «        Zq G dK„ dLe7j^        e7jj        ¦  «        Zr G dM„ dNe;¦  «        Zsejt        eju        ejv        ejw        ejx        ejy        dO„ dP„ dQœZzdRe{dS<   dTdUhZ| G dV„ dWe;¦  «        Z} G dX„ dYe;¦  «        Z~ G dZ„ d[e7j^        e¦  «        Z G d\„ d]e7j^        e7jj        ¦  «        Z€ G d^„ d_e;¦  «        Z� G d`„ dae7j[        ¦  «        Z‚ G db„ dce7jd        e7jj        ¦  «        Zƒ G dd„ dee;e¦  «        Z„ G df„ dge7jj        ¦  «        Z… G dh„ die7j^        ¦  «        Z† G dj„ dke7j‡        e7jd        e7jj        ¦  «        Zˆ G dl„ dme7j‰        e7jd        e7jj        ¦  «        ZŠ G dn„ doeŠ¦  «        Z‹ G dp„ dqe;¦  «        ZŒ G dr„ dse7j�        ¦  «        ZŽ G dt„ due;¦  «        Z� G dv„ dwe7j^        e7jj        ¦  «        Z� G dx„ dye7j‰        e7jj        ¦  «        Z‘ G dz„ d{e;¦  «        Z’ G d|„ d}e7j�        ¦  «        Z“ G d~„ de;¦  «        Z” G d€„ d�e]¦  «        ZL G d‚„ dƒe7j^        e7jj        ¦  «        Z• G d„„ d…e7jd        ¦  «        Z– G d†„ d‡e7j^        e7jj        ¦  «        Z— G dˆ„ d‰e7jj        ¦  «        Z˜ G dŠ„ d‹e7jj        ¦  «        Z™ G dŒ„ d�e]¦  «        Zš G dŽ„ d�e;¦  «        Z› G d�„ d‘e7j[        ¦  «        Zœ G d’„ d“e;¦  «        Z� G d”„ d•e7j‰        e7jj        ¦  «        Zž G d–„ d—e7j‰        e7jj        ¦  «        ZŸ G d˜„ d™e]¦  «        Z  G dš„ d›e7jd        e7jj        ¦  «        Z¡ G dœ„ d�e7jd        ¦  «        ZG G dž„ dŸe7jd        ¦  «        Z¢d d¡d¢dd£œZ£ G d¤„ d¥e7jn        ¦  «        Z¤ G d¦„ d§e7j‰        e7jj        ¦  «        Z¥ G d¨„ d©e7j‰        e7jd        e7jj        ¦  «        Z¦ G dª„ d«e¦¦  «        Z§ G d¬„ d­e;¦  «        Z¨ G d®„ d¯e¨¦  «        Z© G d°„ d±e7j^        ¦  «        Zª G d²„ d³e;¦  «        Z« G d´„ dµe;¦  «        Z¬ G d¶„ d·e7jd        ¦  «        Z­ G d¸„ d¹e7jd        ¦  «        Z® G dº„ d»e;¦  «        Z¯ G d¼„ d½e7jj        e7j‡        ¦  «        Z° G d¾„ d¿e;¦  «        Z± G dÀ„ dÁe7j‡        ¦  «        Z² G dÂ„ dÃe±¦  «        Z³ G dÄ„ dÅe±¦  «        Z´ G dÆ„ dÇe±¦  «        Zµ G dÈ„ dÉe7jd        e±¦  «        Z¶ G dÊ„ dËe±¦  «        Z· G dÌ„ dÍe7jd        e±¦  «        Z¸ G dÎ„ dÏe7jd        e±¦  «        Z¹ G dÐ„ dÑe±¦  «        Zºe»eLe¼e e½e„e¾eš e¿d¦  «        e e¿eÀ¦  «        e e¿dÒ¦  «        eeÁeeMeeÂeeÃeeQeeÄeiZÅdÓe{dÔ<   dçdÙ„ZÆdèdÝ„ZÇdédß„ZÈdS )êz;Module for some node classes. More nodes in scoped_nodes.pyé    )ÚannotationsN)Ú	GeneratorÚIterableÚIteratorÚMapping)Úcached_property)ÚTYPE_CHECKINGÚAnyÚCallableÚClassVarÚLiteralÚOptionalÚUnion)Ú
decoratorsÚ	protocolsÚutil)ÚInstanceÚ_infer_stmts)Ú_EMPTY_OBJECT_MARKERÚContext)ÚCallContextÚInferenceContextÚcopy_context)ÚAstroidBuildingErrorÚAstroidErrorÚAstroidIndexErrorÚAstroidTypeErrorÚAstroidValueErrorÚAttributeInferenceErrorÚInferenceErrorÚNameInferenceErrorÚ	NoDefaultÚParentMissingErrorÚ_NonDeducibleTypeHierarchy)Údunder_lookup)ÚAstroidManager)Ú_base_nodes)ÚOP_PRECEDENCE)ÚNodeNG)ÚConstFactoryResultÚInferenceErrorInfoÚInferenceResultÚSuccessfulInferenceResult)é   é   )ÚSelf©Únodes)ÚLocalsDictNodeNGÚreturnÚboolc                óF   — t          | t          t          ¦  «        ¦  «        S ©N)Ú
isinstanceÚtupleÚ	CONST_CLS©Úvalues    úN/var/www/piapp/venv/lib/python3.11/site-packages/astroid/nodes/node_classes.pyÚ	_is_constr>   C   s   € Ý�e�U¥9Ñ-Ô-Ñ.Ô.Ð.ó    Ú_NodesT)ÚboundÚ_BadOpMessageT)ÚListÚTupleÚ
AssignNameÚ
AssignAttrNÚcontextúInferenceContext | Nonec              #  óÆ  K  — t          | t          t          f¦  «        r8| j        D ]+}|t          j        u r|V — Œt          ||¦  «        E d{V —† Œ,| |dœS t          |                      |¦  «        t          j        ¦  «        }|| u r	|V — | |dœS |                      |¦  «        D ]7}t          |t          j	        ¦  «        r|V — Œ!t          ||¦  «        E d{V —† Œ8| |dœS )zˆrecursively generate nodes inferred by the given statement.
    If the inferred value is a list or a tuple, recurse on the elements
    N©ÚnoderG   )
r8   rC   rD   Úeltsr   ÚUninferableÚunpack_inferÚnextÚinferÚUninferableBase)ÚstmtrG   ÚeltÚinferreds       r=   rN   rN   _   s*  è è € õ
 �$��u˜Ñ&Ô&ð 2Ø”9ð 	2ð 	2ˆCØ•dÔ&Ð&Ð&Ø�	�	�	ØÝ# C¨Ñ1Ô1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ø¨Ð1Ð1Ð1å�D—J’J˜wÑ'Ô'­Ô)9Ñ:Ô:€HØ�4ÐÐØˆˆˆØ¨Ð1Ð1Ð1à—J’J˜wÑ'Ô'ð 7ð 7ˆÝ�h¥Ô 4Ñ5Ô5ð 	7ØˆNˆNˆNˆNå# H¨gÑ6Ô6Ð6Ð6Ð6Ð6Ð6Ð6Ð6Ð6à WÐ-Ð-Ð-r?   Ú
exceptionsúlist[str] | Nonec                ó  — i }i }| }|                       ¦   «         D ]}d||<   |||<   |}Œ|}|                      ¦   «         D �]K}||v �rAt          |t          ¦  «        rK|€I|                     |¦  «        \  }}|                     ||         ¦  «        \  }	}
d|	|fv r dS |	|k    r dS nÞt          |t          ¦  «        rÉ|                     |¦  «        \  }}|                     ||         ¦  «        \  }	}
|
|urw|dk    o|	dk    o|                     |¦  «        }|dk    o |	dk    o||                              |¦  «        }|dk    o|	dk    }|dk    o|	dk    }t          ||||f¦  «        r dS n|dk    r|	dk    r|||         uc S  dS |}�ŒMdS )	aÙ  return true if the two given statements are mutually exclusive

    `exceptions` may be a list of exception names. If specified, discard If
    branches and check one of the statement is in an exception handler catching
    one of the given exceptions.

    algorithm :
     1) index stmt1's parents
     2) climb among stmt2's parents until we find a common parent
     3) if the common parent is a If or Try statement, look if nodes are
        in exclusive branches
    é   NÚtestFTÚhandlersÚbodyÚorelse)Únode_ancestorsr8   ÚIfÚlocate_childÚTryÚcatchÚany)Ústmt1Ústmt2rU   Ústmt1_parentsÚchildrenÚpreviousrK   Úc2attrÚc2nodeÚc1attrÚc1nodeÚ first_in_body_caught_by_handlersÚ!second_in_body_caught_by_handlersÚfirst_in_else_other_in_handlersÚ second_in_else_other_in_handlerss                  r=   Úare_exclusiverp   z   sG  € ð €MØ€HØ€HØ×$Ò$Ñ&Ô&ð ð ˆØˆ�dÑØ!ˆ�‰Øˆˆà€HØ×$Ò$Ñ&Ô&ð .ñ .ˆØ�=Ð Ñ õ ˜$¥Ñ#Ô#ð (:¨
Ð(:Ø!%×!2Ò!2°8Ñ!<Ô!<‘�˜Ø!%×!2Ò!2°8¸D´>Ñ!BÔ!B‘�˜Ø˜f fÐ-Ð-Ð-ð !˜5˜5Ø˜VÒ#Ð#à˜4˜4ð $õ ˜D¥#Ñ&Ô&ð :Ø!%×!2Ò!2°8Ñ!<Ô!<‘�˜Ø!%×!2Ò!2°8¸D´>Ñ!BÔ!B‘�˜Ø Ð'Ð'à *Ò,ð 7Ø" fÒ,ð7à$ŸNšN¨:Ñ6Ô6ð 5ð  &Ò(ð =Ø" jÒ0ð=à$ TœN×0Ò0°Ñ<Ô<ð 6ð  *Ò,ÐC°¸8Ò1Cð 4ð  (Ò*ÐC¨v¸Ò/Cð 5õ à<Ø=Ø;Ø<ð	ñô ð $ð  $˜t˜tð$ð ˜zÒ)Ð)¨f¸
Ò.BÐ.BØ#¨8°D¬>Ð9Ð9Ð9Ð9Ø�5�5Øˆ‰Øˆ5r?   c                ó¦  — t          | t          ¦  «        r1t          | j        t          t	          d¦  «        f¦  «        r| j        S n…| €dS 	 t          |                      |¬¦  «        ¦  «        }t          |t          ¦  «        r0t          |j        t          t	          d¦  «        f¦  «        r|j        S n# t          t          f$ r Y nw xY wt          S )z'Get the value of the given slice index.N©rG   )
r8   ÚConstr<   ÚintÚtyperO   rP   r    ÚStopIterationÚ_SLICE_SENTINEL)ÚindexrG   rT   s      r=   Ú_slice_valuery   È   s×   € õ �%�ÑÔð *Ý�e”k¥C­¨d©¬Ð#4Ñ5Ô5ð 	Ø”;Ðð	à	ˆØˆtð
	*Ý˜EŸKšK°˜KÑ8Ô8Ñ9Ô9ˆHõ ˜(¥EÑ*Ô*ð *Ý˜hœn­sµD¸±J´JÐ.?Ñ@Ô@ð *Ø#œ>Ð)øøõ ¥Ð.ð 	ð 	ð 	ØˆDð	øøøõ Ðs   Á#B5 Â5C	ÃC	c                ó
  — t          | j        |¦  «        }t          | j        |¦  «        }t          | j        |¦  «        }t	          d„ |||fD ¦   «         ¦  «        rt          |||¦  «        S t          d| | j        |¬¦  «        ‚)Nc              3  ó(   K  — | ]}|t           uV — Œd S r7   )rw   ©Ú.0Úelems     r=   ú	<genexpr>z_infer_slice.<locals>.<genexpr>ç   s'   è è € Ð
HÐ
H¨4ˆ4•Ð&Ð
HÐ
HÐ
HÐ
HÐ
HÐ
Hr?   z'Could not infer slice used in subscript©ÚmessagerK   rx   rG   )ry   ÚlowerÚupperÚstepÚallÚslicer   Úparent)rK   rG   r‚   rƒ   r„   s        r=   Ú_infer_slicerˆ   ã   s’   € Ý˜œ WÑ-Ô-€EÝ˜œ WÑ-Ô-€EÝ˜œ	 7Ñ+Ô+€DÝ
Ð
HÐ
H°E¸5À$Ð3GÐ
HÑ
HÔ
HÑHÔHð )Ý�U˜E 4Ñ(Ô(Ð(å
Ø9ØØŒkØð	ñ ô ð r?   c                óê  — 	 t          |t          ¦  «        r@t          ||¬¦  «        }|                      ¦   «         }||         |_        | j        |_        |S t          |t          ¦  «        r||j                 S nh# t          $ r}t          d| ||¬¦  «        |‚d}~wt          $ r}t          d| ||¬¦  «        |‚d}~wt          $ r}t          d| ||¬¦  «        |‚d}~ww xY wt          d|› d�¦  «        ‚)	zHGet a slice or an item, using the given *index*, for the given sequence.rr   z&Slice {index!r} cannot index containerr€   NzIndex {index!s} out of rangeúType error {error!r}zCould not use ú as subscript index)r8   ÚSlicerˆ   Ú	__class__rL   r‡   rs   r<   Ú
ValueErrorr   Ú
IndexErrorr   Ú	TypeErrorr   )ÚinstancerL   rx   rG   Úindex_sliceÚnew_clsÚexcs          r=   Ú_container_getitemr•   ò   sY  € ðÝ�e�UÑ#Ô#ð 	Ý& u°gÐ>Ñ>Ô>ˆKØ×(Ò(Ñ*Ô*ˆGØ Ô,ˆGŒLØ%œ_ˆGŒNØˆNÝ�e�UÑ#Ô#ð 	%Ø˜œÔ$Ð$ð	%øåð ð ð ÝØ<ØØØð	
ñ 
ô 
ð
 ð	øøøøõ ð ð ð ÝØ2ØØØð	
ñ 
ô 
ð
 ð	øøøøõ ð ð ð ÝØ*°ÀÐPWð
ñ 
ô 
àð	øøøøðøøøõ
 ÐF¨EÐFÐFÐFÑ
GÔ
GÐGs6   ‚AA: Á!A: Á:
CÂBÂCÂ%B9Â9CÃCÃCc                  ó²   ‡ — e Zd ZdZdZd!ˆ fd„Zd"d„Zed#d„¦   «         Zd„ Z	d$d%d„Z
ej        d&d„¦   «         Zd„ Zej        	 d$d'd„¦   «         Z	 d$d(d „Zˆ xZS ))ÚBaseContainerz.Base class for Set, FrozenSet, Tuple and List.©rL   Úlinenoú
int | NoneÚ
col_offsetr‡   úNodeNG | NoneÚ
end_linenoÚend_col_offsetr4   ÚNonec               ód   •— g | _         	 t          ¦   «                              |||||¬¦  «         d S ©N©r™   r›   r�   rž   r‡   )rL   ÚsuperÚ__init__©Úselfr™   r›   r‡   r�   rž   r�   s         €r=   r¤   zBaseContainer.__init__  sI   ø€ ð 68ˆŒ	Ø'å‰Œ×ÒØØ!Ø!Ø)Øð 	ñ 	
ô 	
ð 	
ð 	
ð 	
r?   rL   úlist[SuccessfulInferenceResult]c                ó   — || _         d S r7   r˜   )r¦   rL   s     r=   ÚpostinitzBaseContainer.postinit,  ó   € ØˆŒ	ˆ	ˆ	r?   úIterable[Any]r0   c                óH   —  | ddddd¬¦  «        }d„ |D ¦   «         |_         |S )zÊCreate a node of this type from the given list of elements.

        :param elts: The list of elements that the node should contain.

        :returns: A new node containing the given elements.
        N©r™   r›   r‡   r�   rž   c                óN   — g | ]"}t          |¦  «        rt          |¦  «        n|‘Œ#S © )r>   Úconst_factory©r}   Úes     r=   ú
<listcomp>z/BaseContainer.from_elements.<locals>.<listcomp>>  s0   € ÐKÐKÐKÀ­°1©¬Ð<•] 1Ñ%Ô%Ð%¸1ÐKÐKÐKr?   r˜   )ÚclsrL   rK   s      r=   Úfrom_elementszBaseContainer.from_elements/  sF   € ð ˆsØØØØØð
ñ 
ô 
ˆð LÐKÀdÐKÑKÔKˆŒ	Øˆr?   c                ó   — | j         S )z‰An iterator over the elements this node contains.

        :returns: The contents of this node.
        :rtype: iterable(NodeNG)
        r˜   ©r¦   s    r=   ÚiteredzBaseContainer.iteredA  s   € ð ŒyÐr?   NrG   rH   r5   c                ó*   — t          | j        ¦  «        S )zeDetermine the boolean value of this node.

        :returns: The boolean value of this node.
        )r5   rL   ©r¦   rG   s     r=   Ú
bool_valuezBaseContainer.bool_valueI  s   € õ
 �D”I‰ŒÐr?   Ústrc                ó   — dS )úeGet the name of the type that this node represents.

        :returns: The name of the type.
        Nr¯   r·   s    r=   ÚpytypezBaseContainer.pytypeP  s   € € € r?   c              #  ó$   K  — | j         E d {V —† d S r7   r˜   r·   s    r=   Úget_childrenzBaseContainer.get_childrenW  s&   è è € Ø”9ÐÐÐÐÐÐÐÐÐr?   Úkwargsr
   úIterator[Self]c              +  ó  K  — t          d„ | j        D ¦   «         ¦  «        }|rf|                      |¦  «        } t          | ¦  «        | j        | j        | j        | j        | j        ¬¦  «        }| 	                    |¦  «         |V — d S | V — d S )Nc              3  óN   K  — | ] }t          |t          t          f¦  «        V — Œ!d S r7   )r8   ÚStarredÚ	NamedExprr±   s     r=   r   z'BaseContainer._infer.<locals>.<genexpr>`  sB   è è € ð %
ð %
Ø45�J�q�7¥IÐ.Ñ/Ô/ð%
ð %
ð %
ð %
ð %
ð %
r?   r­   )
rb   rL   Ú_infer_sequence_helperru   r™   r›   r‡   r�   rž   r©   )r¦   rG   rÂ   Úhas_starred_named_exprÚvaluesÚnew_seqs         r=   Ú_inferzBaseContainer._inferZ  s¹   è è € õ "%ð %
ð %
Ø9=¼ð%
ñ %
ô %
ñ "
ô "
Ðð "ð 	Ø×0Ò0°Ñ9Ô9ˆFØ •d˜4‘j”jØ”{Øœ?Ø”{Øœ?Ø#Ô2ðñ ô ˆGð ×Ò˜VÑ$Ô$Ð$àˆMˆMˆMˆMˆMàˆJˆJˆJˆJˆJr?   c                ó  — g }| j         D ]û}t          |t          ¦  «        rwt          j        |j        |¦  «        }|st          | |¬¦  «        ‚t          |d¦  «        st          | |¬¦  «        ‚|                     | 	                    |¦  «        ¦  «         ŒŽt          |t          ¦  «        rCt          j        |j        |¦  «        }|st          | |¬¦  «        ‚|                     |¦  «         Œæ|                     |¦  «         Œü|S )z-Infer all values based on BaseContainer.elts.rJ   rL   )rL   r8   rÆ   r   Ú
safe_inferr<   r    ÚhasattrÚextendrÈ   rÇ   Úappend)r¦   rG   rÊ   rS   Ústarredr<   s         r=   rÈ   z$BaseContainer._infer_sequence_helperr  s  € ð ˆà”9ð 	#ð 	#ˆCÝ˜#�wÑ'Ô'ð #Ýœ/¨#¬)°WÑ=Ô=�Øð EÝ(¨d¸GÐDÑDÔDÐDÝ˜w¨Ñ/Ô/ð EÝ(¨d¸GÐDÑDÔDÐDà—’˜g×<Ò<¸WÑEÔEÑFÔFÐFÐFÝ˜C¥Ñ+Ô+ð #Ýœ¨¬	°7Ñ;Ô;�Øð EÝ(¨d¸GÐDÑDÔDÐDØ—’˜eÑ$Ô$Ð$Ð$à—’˜cÑ"Ô"Ð"Ð"Øˆr?   ©r™   rš   r›   rš   r‡   rœ   r�   rš   rž   rš   r4   rŸ   )rL   r§   r4   rŸ   )rL   r«   r4   r0   r7   )rG   rH   r4   r5   ©r4   r¼   )rG   rH   rÂ   r
   r4   rÃ   )rG   rH   r4   r§   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú_astroid_fieldsr¤   r©   Úclassmethodrµ   r¸   r»   ÚabcÚabstractmethodr¿   rÁ   r   Úraise_if_nothing_inferredrÌ   rÈ   Ú__classcell__©r�   s   @r=   r—   r—     s#  ø€ € € € € Ø8Ð8à€Oð
ð 
ð 
ð 
ð 
ð 
ð(ð ð ð ð ðð ð ñ „[ðð"ð ð ðð ð ð ð ð 	Ôðð ð ñ Ôððð ð ð Ô)ð ,0ðð ð ð ñ *Ô)ðð0 26ðð ð ð ð ð ð ð ð r?   r—   )Ú	metaclassc                  óž   ‡ — e Zd ZdZdZdˆ fd„Zej        Z	 e	j
        e	j        	 ddd„¦   «         ¦   «         Ze	j
        	 ddd„¦   «         Zˆ xZS )rE   a  Variation of :class:`ast.Assign` representing assignment to a name.

    An :class:`AssignName` is the name of something that is assigned to.
    This includes variables defined in a function signature or in a loop.

    >>> import astroid
    >>> node = astroid.extract_node('variable = range(10)')
    >>> node
    <Assign l.1 at 0x7effe1db8550>
    >>> list(node.get_children())
    [<AssignName.variable l.1 at 0x7effe1db8748>, <Call l.1 at 0x7effe1db8630>]
    >>> list(node.get_children())[0].as_string()
    'variable'
    ©Únamerã   r¼   r™   rt   r›   r‡   r)   r�   rš   rž   r4   rŸ   c               ód   •— || _         	 t          ¦   «                              |||||¬¦  «         d S r¡   ©rã   r£   r¤   ©r¦   rã   r™   r›   r‡   r�   rž   r�   s          €r=   r¤   zAssignName.__init__¤  sI   ø€ ð ˆŒ	Ø+å‰Œ×ÒØØ!Ø!Ø)Øð 	ñ 	
ô 	
ð 	
ð 	
ð 	
r?   NrG   rH   rÂ   r
   ú;Generator[InferenceResult, None, InferenceErrorInfo | None]c                óÐ   — t          | j        t          ¦  «        r| j                             |¦  «        S t	          |                      |¬¦  «        ¦  «        }t          ||¦  «        S )zVInfer an AssignName: need to inspect the RHS part of the
        assign node.
        rr   ©r8   r‡   Ú	AugAssignrP   ÚlistÚassigned_stmtsr   ©r¦   rG   rÂ   Ústmtss       r=   rÌ   zAssignName._infer¾  ó\   € õ �d”k¥9Ñ-Ô-ð 	.Ø”;×$Ò$ WÑ-Ô-Ð-å�T×(Ò(°Ð(Ñ9Ô9Ñ:Ô:ˆÝ˜E 7Ñ+Ô+Ð+r?   c                ó°  — ddl m} ddlm} |                      | j        ¦  «        \  }}|sg ||                      ¦   «         ¦  «        }|r|                     | j        ¦  «        \  }}|s)t          | j        |                      ¦   «         |¬¦  «        ‚t          |¦  «        }| j        |_	         || |¦  «        |j
        | j        <   t          |||¦  «        S )zQInfer a Name: use name lookup rules.

        Same implementation as Name._infer.r   ©Úget_constraints©Ú_higher_function_scope©rã   ÚscoperG   ©Úastroid.constraintrò   Úastroid.helpersrô   Úlookuprã   rö   r!   r   Ú
lookupnameÚconstraintsr   ©	r¦   rG   rÂ   rò   rô   Úframerî   Úparent_functionÚ_s	            r=   Ú	infer_lhszAssignName.infer_lhsÌ  sø   € ð 	7Ð6Ð6Ð6Ð6Ð6Ø:Ð:Ð:Ð:Ð:Ð:à—{’{ 4¤9Ñ-Ô-‰ˆˆuØð 
	ð 5Ð4°T·Z²Z±\´\ÑBÔBˆOØð =Ø*×1Ò1°$´)Ñ<Ô<‘��5àð Ý(Øœ¨$¯*ª*©,¬,Àðñ ô ð õ ˜wÑ'Ô'ˆØ!œYˆÔØ)8¨¸¸uÑ)EÔ)EˆÔ˜DœIÑ&å˜E 7¨EÑ2Ô2Ð2r?   ©rã   r¼   r™   rt   r›   rt   r‡   r)   r�   rš   rž   rš   r4   rŸ   r7   ©rG   rH   rÂ   r
   r4   rç   )rÕ   rÖ   r×   rØ   Ú_other_fieldsr¤   r   Úassend_assigned_stmtsrì   r   rÝ   Úpath_wrapperrÌ   r  rÞ   rß   s   @r=   rE   rE   Ž  sÃ   ø€ € € € € ð
ð ð €Mð
ð 
ð 
ð 
ð 
ð 
ð* Ô4€Nðð Ô)ØÔà15ð
,ð 
,ð 
,ð 
,ñ Ôñ *Ô)ð
,ð Ô)à15ð3ð 3ð 3ð 3ñ *Ô)ð3ð 3ð 3ð 3ð 3r?   rE   c                  ó(   ‡ — e Zd ZdZdZdˆ fd„Zˆ xZS )ÚDelNameah  Variation of :class:`ast.Delete` representing deletion of a name.

    A :class:`DelName` is the name of something that is deleted.

    >>> import astroid
    >>> node = astroid.extract_node("del variable #@")
    >>> list(node.get_children())
    [<DelName.variable l.1 at 0x7effe1da4d30>]
    >>> list(node.get_children())[0].as_string()
    'variable'
    râ   rã   r¼   r™   rt   r›   r‡   r)   r�   rš   rž   r4   rŸ   c               ód   •— || _         	 t          ¦   «                              |||||¬¦  «         d S r¡   rå   ræ   s          €r=   r¤   zDelName.__init__û  sI   ø€ ð ˆŒ	Ø-å‰Œ×ÒØØ!Ø!Ø)Øð 	ñ 	
ô 	
ð 	
ð 	
ð 	
r?   r  ©rÕ   rÖ   r×   rØ   r  r¤   rÞ   rß   s   @r=   r  r  ê  sN   ø€ € € € € ð
ð 
ð €Mð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
r?   r  c                  ón   ‡ — e Zd ZdZdZdˆ fd„Zd„ Zej        ej	        	 ddd„¦   «         ¦   «         Z
ˆ xZS )ÚNameaÊ  Class representing an :class:`ast.Name` node.

    A :class:`Name` node is something that is named, but not covered by
    :class:`AssignName` or :class:`DelName`.

    >>> import astroid
    >>> node = astroid.extract_node('range(10)')
    >>> node
    <Call l.1 at 0x7effe1db8710>
    >>> list(node.get_children())
    [<Name.range l.1 at 0x7effe1db86a0>, <Const.int l.1 at 0x7effe1db8518>]
    >>> list(node.get_children())[0].as_string()
    'range'
    râ   rã   r¼   r™   rt   r›   r‡   r)   r�   rš   rž   r4   rŸ   c               ód   •— || _         	 t          ¦   «                              |||||¬¦  «         d S r¡   rå   ræ   s          €r=   r¤   zName.__init__#  sI   ø€ ð ˆŒ	Ø0å‰Œ×ÒØØ!Ø!Ø)Øð 	ñ 	
ô 	
ð 	
ð 	
ð 	
r?   c              #  ót   K  — | V — |                       ¦   «         D ]}|                     ¦   «         E d {V —† Œd S r7   )rÁ   Ú_get_name_nodes)r¦   Ú
child_nodes     r=   r  zName._get_name_nodes8  s[   è è € Øˆ
ˆ
ˆ
à×+Ò+Ñ-Ô-ð 	4ð 	4ˆJØ!×1Ò1Ñ3Ô3Ð3Ð3Ð3Ð3Ð3Ð3Ð3Ð3ð	4ð 	4r?   NrG   rH   rÂ   r
   rç   c                ó°  — ddl m} ddlm} |                      | j        ¦  «        \  }}|sg ||                      ¦   «         ¦  «        }|r|                     | j        ¦  «        \  }}|s)t          | j        |                      ¦   «         |¬¦  «        ‚t          |¦  «        }| j        |_	         || |¦  «        |j
        | j        <   t          |||¦  «        S )zZInfer a Name: use name lookup rules

        Same implementation as AssignName._infer_lhs.r   rñ   ró   rõ   r÷   rý   s	            r=   rÌ   zName._infer>  sø   € ð 	7Ð6Ð6Ð6Ð6Ð6Ø:Ð:Ð:Ð:Ð:Ð:à—{’{ 4¤9Ñ-Ô-‰ˆˆuØð 
	ð 5Ð4°T·Z²Z±\´\ÑBÔBˆOØð =Ø*×1Ò1°$´)Ñ<Ô<‘��5àð Ý(Øœ¨$¯*ª*©,¬,Àðñ ô ð õ ˜wÑ'Ô'ˆØ!œYˆÔØ)8¨¸¸uÑ)EÔ)EˆÔ˜DœIÑ&å˜E 7¨EÑ2Ô2Ð2r?   r  r7   r  )rÕ   rÖ   r×   rØ   r  r¤   r  r   rÝ   r  rÌ   rÞ   rß   s   @r=   r  r    s—   ø€ € € € € ðð ð €Mð
ð 
ð 
ð 
ð 
ð 
ð*4ð 4ð 4ð Ô)ØÔà15ð3ð 3ð 3ð 3ñ Ôñ *Ô)ð3ð 3ð 3ð 3ð 3r?   r  ÚDEPRECATED_ARGUMENT_DEFAULTc                  óž  ‡ — e Zd ZU dZdZdZded<   	 ded<   	 ded	<   	 ded
<   	 ded<   	 ded<   	 ded<   	 ded<   	 ded<   	 ded<   	 ded<   	 ded<   	 ded<   	 ded<   	 ded<   	 	 	 d<d=ˆ fd"„Z	 	 	 	 	 d>d?d#„Ze	j
        Z	 d$„ Zed@ˆ fd&„¦   «         Zed'„ ¦   «         Zdd(œdAd,„ZdBd.„Zd/„ ZdCd1„Zefd2„Zd3„ Zej        	 dDdEd;„¦   «         Zˆ xZS )FÚ	ArgumentsaR  Class representing an :class:`ast.arguments` node.

    An :class:`Arguments` node represents that arguments in a
    function definition.

    >>> import astroid
    >>> node = astroid.extract_node('def foo(bar): pass')
    >>> node
    <FunctionDef.foo l.1 at 0x7effe1db8198>
    >>> node.args
    <Arguments l.1 at 0x7effe1db82e8>
    )ÚargsÚdefaultsÚ
kwonlyargsÚposonlyargsÚposonlyargs_annotationsÚkw_defaultsr   ÚvarargannotationÚkwargannotationÚkwonlyargs_annotationsÚtype_comment_argsÚtype_comment_kwonlyargsÚtype_comment_posonlyargs)ÚvarargÚkwargúlist[AssignName] | Noner  úlist[NodeNG] | Noner  úlist[AssignName]r  r  úlist[NodeNG | None] | Noner  úlist[NodeNG | None]r   r  r  r  r  r   rœ   r  r  úAssignName | NoneÚvararg_nodeÚ
kwarg_nodeNr!  ú
str | Noner"  r‡   r)   r4   rŸ   c                ó�   •— t          ¦   «                              |dddd¬¦  «         || _        	 || _        	 || _        || _        dS )zPAlmost all attributes can be None for living objects where introspection failed.N©r‡   r™   r›   r�   rž   )r£   r¤   r!  r"  r)  r*  )r¦   r!  r"  r‡   r)  r*  r�   s         €r=   r¤   zArguments.__init__Ë  s^   ø€ õ 	‰Œ×ÒØØØØØð 	ñ 	
ô 	
ð 	
ð ˆŒØ8àˆŒ
Ø@à&ˆÔØ$ˆŒˆˆr?   c                óÔ   — || _         || _        || _        || _        || _        || _        || _        || _        |	| _        |
| _	        |€g }|| _
        |€g }|| _        |€g }|| _        d S r7   )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   s                 r=   r©   zArguments.postinitæ  s•   € ð  ˆŒ	Ø ˆŒØ$ˆŒØ&ˆÔØ&ˆÔØ&ˆÔØ&<ˆÔ#Ø'>ˆÔ$ð !1ˆÔØ.ˆÔØÐ$Ø "ÐØ!2ˆÔØ"Ð*Ø&(Ð#Ø'>ˆÔ$Ø#Ð+Ø')Ð$Ø(@ˆÔ%Ð%Ð%r?   c                ó   — | j         |u r|S d S r7   ©r‡   ©r¦   rþ   rã   s      r=   Ú_infer_namezArguments._infer_name  s   € ØŒ;˜%ÐÐØˆKØˆtr?   rt   c                ób   •— t          ¦   «         j        }t          || j        j        pd¦  «        S )zƒThe first line that this node appears on in the source code.

        Can also return 0 if the line can not be determined.
        r   )r£   Ú
fromlinenoÚmaxr‡   )r¦   r™   r�   s     €r=   r4  zArguments.fromlineno  s+   ø€ õ ‘”Ô#ˆÝ�6˜4œ;Ô1Ð6°QÑ7Ô7Ð7r?   c                ó  — t          t          j        | j        pd| j        pd¦  «        ¦  «        }| j        r|                     | j        ¦  «         || j        pdz  }| j        r|                     | j        ¦  «         |S )zùGet all the arguments for this node. This includes:
        * Positional only arguments
        * Positional arguments
        * Keyword arguments
        * Variable arguments (.e.g *args)
        * Variable keyword arguments (e.g **kwargs)
        r¯   )	rë   Ú	itertoolsÚchainr  r  r)  rÑ   r  r*  )r¦   Úretvals     r=   Ú	argumentszArguments.arguments  s   € õ •i”o tÔ'7Ð'=¸2ÀÄÀÈbÑRÔRÑSÔSˆØÔð 	,Ø�MŠM˜$Ô*Ñ+Ô+Ð+Ø�$”/Ð' RÑ'ˆØŒ?ð 	+Ø�MŠM˜$œ/Ñ*Ô*Ð*àˆr?   ©Úskippable_namesr<  úset[str] | Noner¼   c               óX  — g }g }| j         }| j         rW| j        pg }| j         t          |¦  «         d…         }| j         dt          | j         ¦  «        t          |¦  «        z
  …         }| j        rE|                     t          | j        || j        |¬¦  «        ¦  «         |                     d¦  «         | j        r:|                     t          | j        |t          | dd¦  «        |¬¦  «        ¦  «         | j        r|                     d| j        › �¦  «         | j	        rQ| j        s|                     d¦  «         |                     t          | j	        | j
        | j        |¬¦  «        ¦  «         | j        r|                     d| j        › �¦  «         d                     |¦  «        S )zoGet the arguments formatted as string.

        :returns: The formatted arguments.
        :rtype: str
        Nr;  ú/r   Ú*ú**ú, )r  r  Úlenr  rÑ   Ú_format_argsr  Úgetattrr!  r  r  r  r"  Újoin)r¦   r<  ÚresultÚpositional_only_defaultsÚpositional_or_keyword_defaultsr  s         r=   Úformat_argszArguments.format_args1  sÚ  € ð ˆØ#%Ð Ø)-¬Ð&ØŒ=ð 	WØ”9�? ˆDØ-1¬]½CÀ¹I¼I¸:¸<¸<Ô-HÐ*Ø'+¤}Ð5Uµs¸4¼=Ñ7IÔ7IÍCÐPTÉIÌIÑ7UÐ5UÔ'VÐ$àÔð 		Ø�MŠMÝØÔ$Ø,ØÔ0Ø$3ð	ñ ô ñô ð ð �MŠM˜#ÑÔÐØŒ9ð 	Ø�MŠMÝØ”IØ2Ý˜D -°Ñ6Ô6Ø$3ð	ñ ô ñô ð ð Œ;ð 	-Ø�MŠMÐ+˜dœkÐ+Ð+Ñ,Ô,Ð,ØŒ?ð 
	Ø”;ð #Ø—’˜cÑ"Ô"Ð"Ø�MŠMÝØ”OØÔ$ØÔ/Ø$3ð	ñ ô ñô ð ð Œ:ð 	-Ø�MŠMÐ+˜tœzÐ+Ð+Ñ,Ô,Ð,Ø�yŠy˜Ñ Ô Ð r?   úYtuple[dict[str, tuple[str | None, str | None]], dict[str, tuple[str | None, str | None]]]c                ó‚  — i }i }g }| j         }| j         rW| j        pg }| j         t          |¦  «         d…         }| j         dt          | j         ¦  «        t          |¦  «        z
  …         }t          | j        ¦  «        D ]R\  }}| j        |         d}	}|�|                     ¦   «         }|r||                              ¦   «         }	||	f||j        <   ŒSt          | j        ¦  «        D ]‰\  }}
| j        |         d}	}|�|                     ¦   «         }|rQt          | j        ¦  «        t          |¦  «        z
  }||z
  }|dk    r"||         �||                              ¦   «         }	||	f||
j        <   ŒŠ| j	        r)| j
        }|�|                     ¦   «         }|df|| j	        <   t          | j        ¦  «        D ]W\  }}| j        |         }|�|                     ¦   «         }| j        |         }	|	�|	                     ¦   «         }	||	f||j        <   ŒX| j        r)| j        }|�|                     ¦   «         }|df|| j        <   ||fS )ay  Get the arguments as dictionary with information about typing and defaults.

        The return tuple contains a dictionary for positional and keyword arguments with their typing
        and their default value, if any.
        The method follows a similar order as format_args but instead of formatting into a string it
        returns the data that is used to do so.
        Néÿÿÿÿ)r  r  rC  Ú	enumerater  r  Ú	as_stringrã   r   r!  r  r  r  r  r"  r  )r¦   Úpos_onlyÚkw_onlyrH  rI  r  rx   ÚposonlyÚ
annotationÚdefaultÚargÚdefaults_offsetÚdefault_indexr"  s                 r=   Ú_get_arguments_datazArguments._get_arguments_datac  s›  € ð >@ˆØ<>ˆð $&Ð Ø)-¬Ð&ØŒ=ð 	WØ”9�? ˆDØ-1¬]½CÀ¹I¼I¸:¸<¸<Ô-HÐ*Ø'+¤}Ð5Uµs¸4¼=Ñ7IÔ7IÍCÐPTÉIÌIÑ7UÐ5UÔ'VÐ$å'¨Ô(8Ñ9Ô9ð 	;ð 	;‰NˆE�7Ø"&Ô">¸uÔ"EÀt˜ˆJØÐ%Ø'×1Ò1Ñ3Ô3�
Ø'ð FØ2°5Ô9×CÒCÑEÔE�Ø&0°'Ð%:ˆH�W”\Ñ"Ð"å# D¤IÑ.Ô.ð 	7ð 	7‰JˆE�3Ø"&Ô"2°5Ô"9¸4˜ˆJØÐ%Ø'×1Ò1Ñ3Ô3�
Ø-ð XÝ"% d¤i¡.¤.µ3Ð7UÑ3VÔ3VÑ"V�Ø %¨Ñ 7�à! BÒ&Ð&Ø6°}ÔEÐQà<¸]ÔK×UÒUÑWÔW�GØ",¨gÐ!6ˆH�S”XÑÐàŒ;ð 	7ØÔ.ˆJØÐ%Ø'×1Ò1Ñ3Ô3�
Ø%/°Ð$6ˆH�T”[Ñ!å% d¤oÑ6Ô6ð 	8ð 	8‰LˆE�5ØÔ4°UÔ;ˆJØÐ%Ø'×1Ò1Ñ3Ô3�
ØÔ& uÔ-ˆGØÐ"Ø!×+Ò+Ñ-Ô-�Ø#-¨wÐ"7ˆG�E”JÑÐàŒ:ð 	5ØÔ-ˆJØÐ%Ø'×1Ò1Ñ3Ô3�
Ø#-¨tÐ"4ˆG�D”JÑà˜Ð Ð r?   c                óî  ‡ — ˆ fd„‰ j         D ¦   «         }t          |‰ j        ¦  «        d         }|�Ht          ‰ j        ¦  «        |k    r0‰ j        |         �‰ j        |         S t          ‰ j        |¬¦  «        ‚t          ||¦  «        d         }|�O|t          |¦  «        t          ‰ j        ¦  «        z
  t          ‰ j        ¦  «        z
  z
  }|dk    r‰ j        |         S t          ‰ j        |¬¦  «        ‚)zÿGet the default value for an argument.

        :param argname: The name of the argument to get the default value for.
        :type argname: str

        :raises NoDefault: If there is no default value defined for the
            given argument.
        c                ó>   •— g | ]}|j         ‰j        ‰j        fv¯|‘ŒS r¯   )rã   r!  r"  )r}   rU  r¦   s     €r=   r³   z+Arguments.default_value.<locals>.<listcomp>±  s5   ø€ ð 
ð 
ð 
Ø¨S¬X¸d¼kÈ4Ì:Ð=VÐ-VÐ-VˆCÐ-VÐ-VÐ-Vr?   r   N)Úfuncrã   )r:  Ú	_find_argr  rC  r  r"   r‡   r  )r¦   Úargnamer  rx   Úidxs   `    r=   Údefault_valuezArguments.default_value¨  s  ø€ ð
ð 
ð 
ð 
Øœ>ð
ñ 
ô 
ˆõ ˜' 4¤?Ñ3Ô3°AÔ6ˆØÐ¥C¨Ô(8Ñ$9Ô$9¸EÒ$AÐ$AØÔ Ô&Ð2ØÔ'¨Ô.Ð.Ý ¤°7Ð;Ñ;Ô;Ð;å˜' 4Ñ(Ô(¨Ô+ˆØÐØ�3˜t™9œ9¥s¨4¬=Ñ'9Ô'9Ñ9½CÀÔ@PÑ<QÔ<QÑQÑRˆCØ�aŠxˆxØ”} SÔ)Ð)å˜Tœ[¨wÐ7Ñ7Ô7Ð7r?   r5   c                óp   — || j         k    rdS || j        k    rdS |                      |¦  «        d         duS )zÉCheck if the given name is defined in the arguments.

        :param name: The name to check for.
        :type name: str

        :returns: Whether the given name is defined in the arguments,
        TrX   N)r!  r"  Úfind_argname©r¦   rã   s     r=   Úis_argumentzArguments.is_argumentÃ  sF   € ð �4”;ÒÐØ�4Ø�4”:ÒÐØ�4Ø× Ò  Ñ&Ô& qÔ)°Ð5Ð5r?   c                óž   — |t           k    rt          j        dt          d¬¦  «         | j        rt          || j        ¦  «        \  }}|r||fS dS )a  Get the index and :class:`AssignName` node for given name.

        :param argname: The name of the argument to search for.
        :type argname: str

        :returns: The index and node for the argument.
        :rtype: tuple(str or None, AssignName or None)
        z0The rec argument will be removed in astroid 3.1.é   ©Ú
stacklevel©NN)r  ÚwarningsÚwarnÚDeprecationWarningr:  r\  )r¦   r]  Úrecrx   Úarguments        r=   ra  zArguments.find_argnameÑ  sj   € ð Õ-Ò-Ð-ÝŒMØBÝ"Øðñ ô ð ð
 Œ>ð 	'Ý'¨°´Ñ@Ô@‰OˆE�8Øð 'Ø˜h�Ð&Øˆzr?   c              #  óL  K  — | j         pdE d {V —† | j        D ]}|�|V — Œ	| j        pdE d {V —† | j        �| j        E d {V —† | j        E d {V —† | j        pdD ]}|�|V — Œ	| j        D ]}|�|V — Œ	| j        �	| j        V — | j        �	| j        V — | j	        D ]}|�|V — Œ	d S )Nr¯   )
r  r  r  r  r  r  r   r  r  r  )r¦   rS   s     r=   rÁ   zArguments.get_childrenæ  sC  è è € ØÔ#Ð) rÐ)Ð)Ð)Ð)Ð)Ð)Ð)àÔ/ð 	ð 	ˆCØˆØ�	�	�	øà”9�? Ð"Ð"Ð"Ð"Ð"Ð"Ð"àŒ=Ð$Ø”}Ð$Ð$Ð$Ð$Ð$Ð$Ð$Ø”?Ð"Ð"Ð"Ð"Ð"Ð"Ð"àÔ#Ð) rð 	ð 	ˆCØˆØ�	�	�	øàÔ#ð 	ð 	ˆCØˆØ�	�	�	øàÔ Ð,ØÔ'Ð'Ð'Ð'àÔÐ+ØÔ&Ð&Ð&Ð&àÔ.ð 	ð 	ˆCØˆØ�	�	�	øð	ð 	r?   r¦   únodes.ArgumentsrG   rH   rÂ   r
   ú&Generator[InferenceResult, None, None]c                óf   — ddl m} |�|j        €t          | |¬¦  «        ‚ || |j        |¦  «        S )Nr   )Ú_arguments_infer_argnamerJ   )Úastroid.protocolsrr  rû   r    )r¦   rG   rÂ   rr  s       r=   rÌ   zArguments._infer  sN   € ð
 	?Ð>Ð>Ð>Ð>Ð>àˆ?˜gÔ0Ð8Ý  d°GÐ<Ñ<Ô<Ð<Ø'Ð'¨¨gÔ.@À'ÑJÔJÐJr?   rh  )r!  r+  r"  r+  r‡   r)   r)  r(  r*  r(  r4   rŸ   )NNNNN)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&  r4   rŸ   )r4   rt   ©r<  r=  r4   r¼   )r4   rK  ©r4   r5   r7   )r¦   ro  rG   rH   rÂ   r
   r4   rp  )rÕ   rÖ   r×   rØ   rÙ   r  Ú__annotations__r¤   r©   r   Úarguments_assigned_stmtsrì   r2  r   r4  r:  rJ  rX  r_  rc  r  ra  rÁ   r   rÝ   rÌ   rÞ   rß   s   @r=   r  r  `  s©  ø€ € € € € € ðð ð.€Oð  (€Mà!Ð!Ð!Ñ!ðð "Ð!Ð!Ñ!ØKà Ð Ð Ñ ØCà!Ð!Ð!Ñ!Ø=à+Ð+Ð+Ñ+ØVà$Ð$Ð$Ñ$ØLà0Ð0Ð0Ñ0ØQà/Ð/Ð/Ñ/ØOà*Ð*Ð*Ñ*ðð 1Ð0Ð0Ñ0ðð 2Ð1Ð1Ñ1ðð $Ð#Ð#Ñ#Ø@à"Ð"Ð"Ñ"ØHà"Ð"Ð"Ñ"Ø0à!Ð!Ð!Ñ!Ø1ð *.Ø(,ð%ð %ð %ð %ð %ð %ð %ðJ +/Ø)-Ø8<Ø>BØ?Cð$Að $Að $Að $Að $AðL Ô7€Nððð ð ð
 ð8ð 8ð 8ð 8ð 8ñ „_ð8ð ðð ñ „_ðð" AEð 0!ð 0!ð 0!ð 0!ð 0!ð 0!ðdC!ð C!ð C!ð C!ðJ8ð 8ð 8ð66ð 6ð 6ð 6ð )Dð ð ð ð ð*ð ð ð> Ô)àBFðKð Kð Kð Kñ *Ô)ðKð Kð Kð Kð Kr?   r  c                óR   — t          |¦  «        D ]\  }}|j        | k    r||fc S ŒdS )Nrh  )rN  rã   )r]  r  ÚirU  s       r=   r\  r\    s?   € Ý˜D‘/”/ð ð ‰ˆˆ3ØŒ8�wÒÐØ�c�6ˆMˆMˆMð àˆ:r?   r<  r=  r¼   c                óŒ  — |€t          ¦   «         }g }| €dS |€g }|�t          | ¦  «        t          |¦  «        z
  }t          j        | |¦  «        }t	          |¦  «        D ]Ð\  }\  }}	|j        |v rŒt          |t          ¦  «        r,|                     dt          |j
        ¦  «        › d�¦  «         ŒS|j        }
d}|	�|
d|	                     ¦   «         z   z  }
d}|                     |
¦  «         |�?||k    r9|||z
           �.|dxx         ||||z
                                ¦   «         z   z  cc<   ŒÑd                     |¦  «        S )	NÚ ú(ú)ú=z: z = rM  rB  )ÚsetrC  r7  Úzip_longestrN  rã   r8   rD   rÑ   rD  rL   rO  rF  )r  r  r   r<  rÊ   Údefault_offsetÚpackedry  rU  rS  r]  Údefault_seps               r=   rD  rD    st  € ð ÐÝ™%œ%ˆØ€FØ€|ØˆrØÐØˆØÐÝ˜T™œ¥S¨¡]¤]Ñ2ˆÝÔ" 4¨Ñ5Ô5€FÝ )¨&Ñ 1Ô 1ð Yð YÑˆÑˆC�ØŒ8�Ð&Ð&ØÝ�c�5Ñ!Ô!ð 	YØ�MŠMÐ7�l¨3¬8Ñ4Ô4Ð7Ð7Ð7Ñ8Ô8Ð8Ð8à”hˆGØˆKØÐ%Ø˜4 *×"6Ò"6Ñ"8Ô"8Ñ8Ñ8�Ø#�Ø�MŠM˜'Ñ"Ô"Ð"àÐ#¨¨^Ò(;Ð(;Ø˜A Ñ.Ô/Ð;Ø˜2�J�J”J +°¸¸^Ñ9KÔ0L×0VÒ0VÑ0XÔ0XÑ"XÑX�J�J‘JøØ�9Š9�VÑÔÐr?   rK   ú"nodes.AssignAttr | nodes.AttributerÂ   r
   ú4Generator[InferenceResult, None, InferenceErrorInfo]c              +  óx  K  — ddl m} ddlm} | j                             |¦  «        D �] }t          |t          j        ¦  «        r|V — Œ"t          |¦  «        }|j
        }	 ||_
        t          ||t          f¦  «        r3t          ||¦  «        r|n|j        } || |¬¦  «        |j        | j        <   | j        dk    r|j        dk    rt          j        V — n!|                     | j        |¦  «        E d{V —† n# t$          t&          t(          f$ r Y nw xY w||_
        Œö# ||_
        w xY wt+          | |¬¦  «        S )	zMInfer an AssignAttr/Attribute node by using getattr on the associated object.r   rñ   ©ÚClassDef)rþ   ÚargvÚsysNrJ   )rø   rò   Úastroid.nodesrˆ  ÚexprrP   r8   r   rQ   r   Ú	boundnoder   Ú_proxiedrü   Úattrnamerã   rM   Úigetattrr   r    ÚAttributeErrorr+   )rK   rG   rÂ   rò   rˆ  ÚownerÚold_boundnoderþ   s           r=   Ú_infer_attributer”  8  s”  è è € ð 3Ð2Ð2Ð2Ð2Ð2Ø&Ð&Ð&Ð&Ð&Ð&à”—’ Ñ)Ô)ð .ñ .ˆÝ�e�TÔ1Ñ2Ô2ð 	ØˆKˆKˆKØå˜wÑ'Ô'ˆØÔ)ˆð	.Ø %ˆGÔÝ˜% (­HÐ!5Ñ6Ô6ð XÝ!+¨E°8Ñ!<Ô!<ÐP˜˜À%Ä.�Ø5D°_ÀTÐQVÐ5WÑ5WÔ5W�Ô# D¤MÑ2ØŒ} Ò&Ð&¨5¬:¸Ò+>Ð+>õ Ô&Ð&Ð&Ð&Ð&à Ÿ>š>¨$¬-¸ÑAÔAÐAÐAÐAÐAÐAÐAÐAøøå#ÝÝð
ð 	ð 	ð 	ð
 ˆDð	øøøð !.ˆGÔÐø ˆGÔÐ-Ð-Ð-Ð-Ý 4°Ð9Ñ9Ô9Ð9s+   Á"BC:Ã9DÃ:DÄDÄDÄDÄ	D(c                  óÖ   ‡ — e Zd ZU dZded<   dZdZdˆ fd„Zdd„Ze	j
        Z	 d„ Zej        ej        	 ddd„¦   «         ¦   «         Zej        ej        	 ddd„¦   «         ¦   «         Zˆ xZS ) rF   a‘  Variation of :class:`ast.Assign` representing assignment to an attribute.

    >>> import astroid
    >>> node = astroid.extract_node('self.attribute = range(10)')
    >>> node
    <Assign l.1 at 0x7effe1d521d0>
    >>> list(node.get_children())
    [<AssignAttr.attribute l.1 at 0x7effe1d52320>, <Call l.1 at 0x7effe1d522e8>]
    >>> list(node.get_children())[0].as_string()
    'self.attribute'
    r)   rŒ  ©rŒ  ©r�  r�  r¼   r™   rt   r›   r‡   r�   rš   rž   r4   rŸ   c               ód   •— || _         	 t          ¦   «                              |||||¬¦  «         d S r¡   ©r�  r£   r¤   ©r¦   r�  r™   r›   r‡   r�   rž   r�   s          €r=   r¤   zAssignAttr.__init__q  sI   ø€ ð !ˆŒØ:å‰Œ×ÒØØ!Ø!Ø)Øð 	ñ 	
ô 	
ð 	
ð 	
ð 	
r?   c                ó   — || _         d S r7   r–  ©r¦   rŒ  s     r=   r©   zAssignAttr.postinit†  rª   r?   c              #  ó   K  — | j         V — d S r7   r–  r·   s    r=   rÁ   zAssignAttr.get_childrenŽ  ó   è è € ØŒiˆˆˆˆˆr?   NrG   rH   rÂ   r
   rç   c                óÐ   — t          | j        t          ¦  «        r| j                             |¦  «        S t	          |                      |¬¦  «        ¦  «        }t          ||¦  «        S )zVInfer an AssignAttr: need to inspect the RHS part of the
        assign node.
        rr   ré   rí   s       r=   rÌ   zAssignAttr._infer‘  rï   r?   c                ó   — t          | |fi |¤ŽS r7   ©r”  ©r¦   rG   rÂ   s      r=   r  zAssignAttr.infer_lhsŸ  ó   € õ
    gÐ8Ð8°Ð8Ð8Ð8r?   ©r�  r¼   r™   rt   r›   rt   r‡   r)   r�   rš   rž   rš   r4   rŸ   ©rŒ  r)   r4   rŸ   r7   r  )rÕ   rÖ   r×   rØ   rv  rÙ   r  r¤   r©   r   r  rì   rÁ   r   rÝ   r  rÌ   r  rÞ   rß   s   @r=   rF   rF   _  s  ø€ € € € € € ð
ð 
ð €L€L�Là€OØ!€Mð
ð 
ð 
ð 
ð 
ð 
ð*ð ð ð ð Ô4€Nððð ð ð Ô)ØÔà15ð
,ð 
,ð 
,ð 
,ñ Ôñ *Ô)ð
,ð Ô)ØÔà15ð9ð 9ð 9ð 9ñ Ôñ *Ô)ð9ð 9ð 9ð 9ð 9r?   rF   c                  ó>   — e Zd ZU dZdZded<   	 ded<   	 dd	„Zd
„ ZdS )ÚAsserta  Class representing an :class:`ast.Assert` node.

    An :class:`Assert` node represents an assert statement.

    >>> import astroid
    >>> node = astroid.extract_node('assert len(things) == 10, "Not enough things"')
    >>> node
    <Assert l.1 at 0x7effe1d527b8>
    ©rY   Úfailr)   rY   rœ   r©  r4   rŸ   c                ó"   — || _         || _        d S r7   )r©  rY   )r¦   rY   r©  s      r=   r©   zAssert.postinitº  s   € ØˆŒ	ØˆŒ	ˆ	ˆ	r?   c              #  ó@   K  — | j         V — | j        �| j        V — d S d S r7   r¨  r·   s    r=   rÁ   zAssert.get_children¾  s0   è è € ØŒiˆˆˆàŒ9Ð Ø”)ˆOˆOˆOˆOˆOð !Ð r?   N)rY   r)   r©  rœ   r4   rŸ   ©rÕ   rÖ   r×   rØ   rÙ   rv  r©   rÁ   r¯   r?   r=   r§  r§  §  se   € € € € € € ðð ð '€Oà€L€L�LØ6àÐÐÑØ5ðð ð ð ðð ð ð ð r?   r§  c                  ó‚   — e Zd ZU dZded<   	 ded<   	 ded<   	 dZd	Zdd„Zej	        Z
	 d„ Zedd„¦   «         Zd„ Zd„ ZdS )ÚAssigna  Class representing an :class:`ast.Assign` node.

    An :class:`Assign` is a statement where something is explicitly
    asssigned to.

    >>> import astroid
    >>> node = astroid.extract_node('variable = range(10)')
    >>> node
    <Assign l.1 at 0x7effe1db8550>
    úlist[NodeNG]Útargetsr)   r<   rœ   Útype_annotation©r°  r<   ©r±  r4   rŸ   c                ó0   — || _         || _        || _        d S r7   )r°  r<   r±  )r¦   r°  r<   r±  s       r=   r©   zAssign.postinitÝ  s    € ð ˆŒØˆŒ
Ø.ˆÔÐÐr?   c              #  ó6   K  — | j         E d {V —† | j        V — d S r7   r²  r·   s    r=   rÁ   zAssign.get_childrenì  s4   è è € Ø”<ÐÐÐÐÐÐÐàŒjÐÐÐÐÐr?   úlist[nodes.Assign]c                ó    — | g| j         j        ¢S r7   )r<   Ú_assign_nodes_in_scoper·   s    r=   r¸  zAssign._assign_nodes_in_scopeñ  s   € àÐ9�t”zÔ8Ð9Ð9r?   c              #  óH   K  — | j                              ¦   «         E d {V —† d S r7   )r<   Ú_get_yield_nodes_skip_functionsr·   s    r=   rº  z&Assign._get_yield_nodes_skip_functionsõ  s2   è è € Ø”:×=Ò=Ñ?Ô?Ð?Ð?Ð?Ð?Ð?Ð?Ð?Ð?Ð?r?   c              #  óH   K  — | j                              ¦   «         E d {V —† d S r7   )r<   Ú_get_yield_nodes_skip_lambdasr·   s    r=   r¼  z$Assign._get_yield_nodes_skip_lambdasø  s2   è è € Ø”:×;Ò;Ñ=Ô=Ð=Ð=Ð=Ð=Ð=Ð=Ð=Ð=Ð=r?   N)r°  r¯  r<   r)   r±  rœ   r4   rŸ   )r4   r¶  )rÕ   rÖ   r×   rØ   rv  rÙ   Ú_other_other_fieldsr©   r   Úassign_assigned_stmtsrì   rÁ   r   r¸  rº  r¼  r¯   r?   r=   r®  r®  Å  sÊ   € € € € € € ð	ð 	ð ÐÐÑØ$à€M€M�MØ4à"Ð"Ð"Ñ"ØTà*€OØ.Ðð/ð /ð /ð /ð Ô4€Nððð ð ð
 ð:ð :ð :ñ „_ð:ð@ð @ð @ð>ð >ð >ð >ð >r?   r®  c                  ój   — e Zd ZU dZdZdZded<   	 ded<   	 ded	<   	 d
ed<   	 dd„Zej	        Z
	 d„ ZdS )Ú	AnnAssigna  Class representing an :class:`ast.AnnAssign` node.

    An :class:`AnnAssign` is an assignment with a type annotation.

    >>> import astroid
    >>> node = astroid.extract_node('variable: List[int] = range(10)')
    >>> node
    <AnnAssign l.1 at 0x7effe1d4c630>
    ©ÚtargetrS  r<   )ÚsimpleúName | Attribute | SubscriptrÂ  r)   rS  rœ   r<   rt   rÃ  r4   rŸ   c                ó>   — || _         || _        || _        || _        d S r7   )rÂ  rS  r<   rÃ  )r¦   rÂ  rS  rÃ  r<   s        r=   r©   zAnnAssign.postinit  s$   € ð ˆŒØ$ˆŒØˆŒ
ØˆŒˆˆr?   c              #  óR   K  — | j         V — | j        V — | j        �| j        V — d S d S r7   rÁ  r·   s    r=   rÁ   zAnnAssign.get_children'  sF   è è € ØŒkÐÐÐØŒoÐÐÐàŒ:Ð!Ø”*ÐÐÐÐÐð "Ð!r?   N)
rÂ  rÄ  rS  r)   rÃ  rt   r<   rœ   r4   rŸ   )rÕ   rÖ   r×   rØ   rÙ   r  rv  r©   r   Úassign_annassigned_stmtsrì   rÁ   r¯   r?   r=   rÀ  rÀ  ü  s—   € € € € € € ðð ð 8€OØ€Mà(Ð(Ð(Ñ(Ø$àÐÐÑØ;àÐÐÑØ4à€K€K�KØGð
ð 
ð 
ð 
ð Ô7€Nððð ð ð ð r?   rÀ  c                  óÎ   ‡ — e Zd ZU dZdZdZded<   	 ded<   	 d$ˆ fd„Zd%d„Ze	j
        Z	 d&d'd„Zd„ Zˆ fd„Zˆ fd„Z	 d&d(d„Zej        ej        	 d&d)d#„¦   «         ¦   «         Zˆ xZS )*rê   züClass representing an :class:`ast.AugAssign` node.

    An :class:`AugAssign` is an assignment paired with an operator.

    >>> import astroid
    >>> node = astroid.extract_node('variable += 1')
    >>> node
    <AugAssign l.1 at 0x7effe1db4d68>
    ©rÂ  r<   ©ÚoprÄ  rÂ  r)   r<   rË  r¼   r™   rt   r›   r‡   r�   rš   rž   r4   rŸ   c               ód   •— || _         	 t          ¦   «                              |||||¬¦  «         d S r¡   ©rË  r£   r¤   ©r¦   rË  r™   r›   r‡   r�   rž   r�   s          €r=   r¤   zAugAssign.__init__E  sM   ø€ ð ˆŒð	õ
 	‰Œ×ÒØØ!Ø!Ø)Øð 	ñ 	
ô 	
ð 	
ð 	
ð 	
r?   c                ó"   — || _         || _        d S r7   rÉ  ©r¦   rÂ  r<   s      r=   r©   zAugAssign.postinit]  ó   € ØˆŒØˆŒ
ˆ
ˆ
r?   NrG   rH   c                ól   — 	 |                       |¬¦  «        }d„ |D ¦   «         S # t          $ r g cY S w xY w)a&  Get a list of type errors which can occur during inference.

        Each TypeError is represented by a :class:`BadBinaryOperationMessage` ,
        which holds the original exception.

        :returns: The list of possible type errors.
        :rtype: list(BadBinaryOperationMessage)
        rr   c                óF   — g | ]}t          |t          j        ¦  «        ¯|‘ŒS r¯   ©r8   r   ÚBadBinaryOperationMessage©r}   rG  s     r=   r³   z)AugAssign.type_errors.<locals>.<listcomp>q  ó;   € ð ð ð àÝ˜f¥dÔ&DÑEÔEðØðð ð r?   )Ú_infer_augassignr    ©r¦   rG   Úresultss      r=   Útype_errorszAugAssign.type_errorsf  sd   € ð	Ø×+Ò+°GÐ+Ñ<Ô<ˆGðð à%ðñ ô ð øõ
 ð 	ð 	ð 	ØˆIˆIˆIð	øøøó   ‚!$ ¤3²3c              #  ó.   K  — | j         V — | j        V — d S r7   rÉ  r·   s    r=   rÁ   zAugAssign.get_childreny  s(   è è € ØŒkÐÐÐØŒjÐÐÐÐÐr?   c              #  ó–   •K  — | j                              ¦   «         E d{V —† t          ¦   «                              ¦   «         E d{V —† dS ©z7An AugAssign node can contain a Yield node in the valueN)r<   rº  r£   ©r¦   r�   s    €r=   rº  z)AugAssign._get_yield_nodes_skip_functions}  s[   øè è € à”:×=Ò=Ñ?Ô?Ð?Ð?Ð?Ð?Ð?Ð?Ð?Ý‘7”7×:Ò:Ñ<Ô<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<r?   c              #  ó–   •K  — | j                              ¦   «         E d{V —† t          ¦   «                              ¦   «         E d{V —† dS rß  )r<   r¼  r£   rà  s    €r=   r¼  z'AugAssign._get_yield_nodes_skip_lambdas‚  s[   øè è € à”:×;Ò;Ñ=Ô=Ð=Ð=Ð=Ð=Ð=Ð=Ð=Ý‘7”7×8Ò8Ñ:Ô:Ð:Ð:Ð:Ð:Ð:Ð:Ð:Ð:Ð:r?   úGGenerator[InferenceResult | util.BadBinaryOperationMessage, None, None]c              #  óÔ  K  — |pt          ¦   «         }|                     ¦   «         }| j                             |¬¦  «        }| j                             |¬¦  «        }t          j        ||¦  «        D ]u\  }}t          d„ ||fD ¦   «         ¦  «        rt          j
        V —  dS 	 |                      ||| || j        ¬¦  «        E d{V —† ŒX# t          $ r t          j
        V — Y Œrw xY wdS )z0Inference logic for augmented binary operations.rr   c              3  óJ   K  — | ]}t          |t          j        ¦  «        V — Œd S r7   ©r8   r   rQ   ©r}   r<   s     r=   r   z-AugAssign._infer_augassign.<locals>.<genexpr>“  ó/   è è € ÐSÐS¸u•:˜e¥TÔ%9Ñ:Ô:ÐSÐSÐSÐSÐSÐSr?   N)ÚleftÚrightÚbinary_opnoderG   Úflow_factory)r   ÚclonerÂ  r  r<   rP   r7  Úproductrb   r   rM   Ú_infer_binary_operationÚ_get_aug_flowr$   )r¦   rG   Úrhs_contextÚlhs_iterÚrhs_iterÚlhsÚrhss          r=   rØ  zAugAssign._infer_augassign‡  sB  è è € ð Ð/Õ-Ñ/Ô/ˆà—m’m‘o”oˆà”;×(Ò(°Ð(Ñ9Ô9ˆØ”:×#Ò#¨KÐ#Ñ8Ô8ˆå!Ô)¨(°HÑ=Ô=ð 	'ð 	'‰HˆC�ÝÐSÐSÈÈcÈ
ÐSÑSÔSÑSÔSð åÔ&Ð&Ð&Ð&Ø��ð	'Ø×7Ò7ØØØ"&Ø#Ø!%Ô!3ð 8ñ ô ð ð ð ð ð ð ð ð øõ .ð 'ð 'ð 'ÝÔ&Ð&Ð&Ð&Ð&Ð&ð'øøøð	'ð 	's   Â$%C
Ã
C%Ã$C%r¦   únodes.AugAssignrÂ   r
   rp  c                óN   — |                       | j        |t          j        ¦  «        S r7   )Ú_filter_operation_errorsrØ  r   rÕ  r¢  s      r=   rÌ   zAugAssign._infer£  s)   € ð
 ×,Ò,ØÔ! 7­DÔ,Jñ
ô 
ð 	
r?   ©rË  r¼   r™   rt   r›   rt   r‡   r)   r�   rš   rž   rš   r4   rŸ   )rÂ  rÄ  r<   r)   r4   rŸ   r7   ©rG   rH   )rG   rH   r4   râ  )r¦   rõ  rG   rH   rÂ   r
   r4   rp  )rÕ   rÖ   r×   rØ   rÙ   r  rv  r¤   r©   r   r¾  rì   rÛ  rÁ   rº  r¼  rØ  r   rÝ   r  rÌ   rÞ   rß   s   @r=   rê   rê   /  sE  ø€ € € € € € ðð ð *€OØ€Mà(Ð(Ð(Ñ(Ø$à€M€M�MØ3ð
ð 
ð 
ð 
ð 
ð 
ð0ð ð ð ð Ô4€Nððð ð ð ð ð&ð ð ð=ð =ð =ð =ð =ð
;ð ;ð ;ð ;ð ;ð 26ð'ð 'ð 'ð 'ð 'ð8 Ô)ØÔàBFð
ð 
ð 
ð 
ñ Ôñ *Ô)ð
ð 
ð 
ð 
ð 
r?   rê   c                  ó¸   ‡ — e Zd ZU dZdZdZded<   	 ded<   	 d#ˆ fd„Zd$d„Zd%d&d„Z	d„ Z
d„ Zd'd„Z	 d%d(d„Zej        ej        	 d%d)d"„¦   «         ¦   «         Zˆ xZS )*ÚBinOpzêClass representing an :class:`ast.BinOp` node.

    A :class:`BinOp` node is an application of a binary operator.

    >>> import astroid
    >>> node = astroid.extract_node('a + b')
    >>> node
    <BinOp l.1 at 0x7f23b2e8cfd0>
    ©rè  ré  rÊ  r)   rè  ré  rË  r¼   r™   rt   r›   r‡   r�   rš   rž   r4   rŸ   c               ód   •— || _         	 t          ¦   «                              |||||¬¦  «         d S r¡   rÍ  rÎ  s          €r=   r¤   zBinOp.__init__Á  óI   ø€ ð ˆŒØå‰Œ×ÒØØ!Ø!Ø)Øð 	ñ 	
ô 	
ð 	
ð 	
ð 	
r?   c                ó"   — || _         || _        d S r7   rü  )r¦   rè  ré  s      r=   r©   zBinOp.postinitÖ  ó   € ØˆŒ	ØˆŒ
ˆ
ˆ
r?   NrG   rH   c                ól   — 	 |                       |¬¦  «        }d„ |D ¦   «         S # t          $ r g cY S w xY w)a%  Get a list of type errors which can occur during inference.

        Each TypeError is represented by a :class:`BadBinaryOperationMessage`,
        which holds the original exception.

        :returns: The list of possible type errors.
        :rtype: list(BadBinaryOperationMessage)
        rr   c                óF   — g | ]}t          |t          j        ¦  «        ¯|‘ŒS r¯   rÔ  rÖ  s     r=   r³   z%BinOp.type_errors.<locals>.<listcomp>å  r×  r?   )Ú_infer_binopr    rÙ  s      r=   rÛ  zBinOp.type_errorsÚ  sd   € ð	Ø×'Ò'°Ð'Ñ8Ô8ˆGðð à%ðñ ô ð øõ
 ð 	ð 	ð 	ØˆIˆIˆIð	øøørÜ  c              #  ó.   K  — | j         V — | j        V — d S r7   rü  r·   s    r=   rÁ   zBinOp.get_childrení  s%   è è € ØŒiˆˆˆØŒjÐÐÐÐÐr?   c                ó&   — t           | j                 S r7   ©r(   rË  r·   s    r=   Úop_precedencezBinOp.op_precedenceñ  ó   € Ý˜TœWÔ%Ð%r?   r5   c                ó   — | j         dk    S )NrA  rÊ  r·   s    r=   Úop_left_associativezBinOp.op_left_associativeô  s   € àŒw˜$ŠÐr?   rÂ   r
   rp  c              +  óî  K  — | j         }| j        }|pt          ¦   «         }t          |¦  «        }t          |¦  «        }|                     |¬¦  «        }|                     |¬¦  «        }t          j        ||¦  «        D ]t\  }	}
t          d„ |
|	fD ¦   «         ¦  «        rt          j	        V —  dS 	 |  
                    |	|
| || j        ¦  «        E d{V —† ŒW# t          $ r t          j	        V — Y Œqw xY wdS )z!Binary operation inference logic.rr   c              3  óJ   K  — | ]}t          |t          j        ¦  «        V — Œd S r7   rå  ræ  s     r=   r   z%BinOp._infer_binop.<locals>.<genexpr>  rç  r?   N)rè  ré  r   r   rP   r7  rí  rb   r   rM   rî  Ú_get_binop_flowr$   )r¦   rG   rÂ   rè  ré  Úlhs_contextrð  rñ  rò  ró  rô  s              r=   r  zBinOp._infer_binopø  sL  è è € ð ŒyˆØ”
ˆð
 Ð/Õ-Ñ/Ô/ˆÝ" 7Ñ+Ô+ˆÝ" 7Ñ+Ô+ˆØ—:’: k�:Ñ2Ô2ˆØ—;’; {�;Ñ3Ô3ˆÝ!Ô)¨(°HÑ=Ô=ð 	'ð 	'‰HˆC�ÝÐSÐSÈÈcÈ
ÐSÑSÔSÑSÔSð åÔ&Ð&Ð&Ð&Ø��ð'Ø×7Ò7Ø˜˜d G¨TÔ-Añô ð ð ð ð ð ð ð ð øõ .ð 'ð 'ð 'ÝÔ&Ð&Ð&Ð&Ð&Ð&ð'øøøð	'ð 	's   Â2$CÃC2Ã1C2r¦   únodes.BinOpc                óN   — |                       | j        |t          j        ¦  «        S r7   )r÷  r  r   rÕ  r¢  s      r=   rÌ   zBinOp._infer  s)   € ð
 ×,Ò,ØÔ˜w­Ô(Fñ
ô 
ð 	
r?   rø  )rè  r)   ré  r)   r4   rŸ   r7   rù  ru  ©rG   rH   rÂ   r
   r4   rp  )r¦   r  rG   rH   rÂ   r
   r4   rp  )rÕ   rÖ   r×   rØ   rÙ   r  rv  r¤   r©   rÛ  rÁ   r  r
  r  r   Úyes_if_nothing_inferredr  rÌ   rÞ   rß   s   @r=   rû  rû  ­  s$  ø€ € € € € € ðð ð (€OØ€Mà€L€L�LØAà€M€M�MØBð
ð 
ð 
ð 
ð 
ð 
ð*ð ð ð ðð ð ð ð ð&ð ð ð&ð &ð &ðð ð ð ð
 26ð'ð 'ð 'ð 'ð 'ð8 Ô'ØÔà>Bð
ð 
ð 
ð 
ñ Ôñ (Ô'ð
ð 
ð 
ð 
ð 
r?   rû  c                  ó’   ‡ — e Zd ZdZdZdZ	 	 	 ddddœd ˆ fd„Zd!d"d„Zd„ Zd„ Z	e
j        e
j        	 d!d#d„¦   «         ¦   «         Zˆ xZS )$ÚBoolOpzêClass representing an :class:`ast.BoolOp` node.

    A :class:`BoolOp` is an application of a boolean operator.

    >>> import astroid
    >>> node = astroid.extract_node('a and b')
    >>> node
    <BinOp l.1 at 0x7f23b2e71c50>
    ©rÊ   rÊ  N©r�   rž   rË  r¼   r™   rš   r›   r‡   rœ   r�   rž   r4   rŸ   c               ót   •— || _         	 g | _        	 t          ¦   «                              |||||¬¦  «         dS )aò  
        :param op: The operator.

        :param lineno: The line that this node appears on in the source code.

        :param col_offset: The column that this node appears on in the
            source code.

        :param parent: The parent node in the syntax tree.

        :param end_lineno: The last line this node appears on in the source code.

        :param end_col_offset: The end column this node appears on in the
            source code. Note: This is after the last symbol.
        r¢   N)rË  rÊ   r£   r¤   rÎ  s          €r=   r¤   zBoolOp.__init__,  sS   ø€ ð2 ˆŒØà$&ˆŒØ7å‰Œ×ÒØØ!Ø!Ø)Øð 	ñ 	
ô 	
ð 	
ð 	
ð 	
r?   rÊ   r$  c                ó   — |�	|| _         dS dS )znDo some setup after initialisation.

        :param values: The values being applied to the operator.
        Nr  ©r¦   rÊ   s     r=   r©   zBoolOp.postinitS  s   € ð
 ÐØ ˆDŒKˆKˆKð Ðr?   c              #  ó$   K  — | j         E d {V —† d S r7   r  r·   s    r=   rÁ   zBoolOp.get_children[  ó&   è è € Ø”;ÐÐÐÐÐÐÐÐÐr?   c                ó&   — t           | j                 S r7   r  r·   s    r=   r  zBoolOp.op_precedence^  r  r?   r¦   únodes.BoolOprG   rH   rÂ   r
   rç   c              +  ó&  ‡K  — | j         }| j        dk    rt          j        }nt          j        }	 ˆfd„|D ¦   «         }n# t
          $ r t          j        V — Y dS w xY wt          j	        |Ž D ]•}t          d„ |D ¦   «         ¦  «        rt          j        V — Œ*d„ |D ¦   «         }t          d„ |D ¦   «         ¦  «        rt          j        V — Œ^t          j        }t          ||¦  «        D ]\  }}	 ||	¦  «        r|V —  nŒ|V — Œ–t          | ‰¬¦  «        S )zÂInfer a boolean operation (and / or / not).

        The function will calculate the boolean operation
        for all pairs generated through inference for each component
        node.
        Úorc                ó<   •— g | ]}|                      ‰¬ ¦  «        ‘ŒS )rr   )rP   )r}   r<   rG   s     €r=   r³   z!BoolOp._infer.<locals>.<listcomp>s  s'   ø€ ÐPÐPÐPÀ˜uŸ{š{°7˜{Ñ;Ô;ÐPÐPÐPr?   Nc              3  óJ   K  — | ]}t          |t          j        ¦  «        V — Œd S r7   rå  ©r}   Úitems     r=   r   z BoolOp._infer.<locals>.<genexpr>y  s/   è è € ÐKÐK¸d•:˜d¥DÔ$8Ñ9Ô9ÐKÐKÐKÐKÐKÐKr?   c                ó6   — g | ]}|                      ¦   «         ‘ŒS r¯   )r»   r"  s     r=   r³   z!BoolOp._infer.<locals>.<listcomp>~  s"   € Ð>Ð>Ð>°˜4Ÿ?š?Ñ,Ô,Ð>Ð>Ð>r?   c              3  óJ   K  — | ]}t          |t          j        ¦  «        V — Œd S r7   rå  r"  s     r=   r   z BoolOp._infer.<locals>.<genexpr>  s/   è è € ÐRÐR¸d•:˜d¥DÔ$8Ñ9Ô9ÐRÐRÐRÐRÐRÐRr?   rJ   )rÊ   rË  ÚoperatorÚtruthÚnot_r    r   rM   r7  rí  rb   Úzipr+   )
r¦   rG   rÂ   rÊ   Ú	predicateÚinferred_valuesÚpairÚbool_valuesr<   r»   s
    `        r=   rÌ   zBoolOp._infera  sv  øè è € ð ”ˆØŒ7�dŠ?ˆ?Ý œˆIˆIå œˆIð	ØPÐPÐPÐPÈÐPÑPÔPˆOˆOøÝð 	ð 	ð 	ÝÔ"Ð"Ð"Ð"Ø�4�4ð	øøøõ Ô% Ð7ð 	ð 	ˆDÝÐKÐKÀdÐKÑKÔKÑKÔKð åÔ&Ð&Ð&Ð&Øà>Ð>¸Ð>Ñ>Ô>ˆKÝÐRÐRÀkÐRÑRÔRÑRÔRð åÔ&Ð&Ð&Ð&Øõ Ô$ˆEÝ%(¨¨{Ñ%;Ô%;ð ð Ñ!��zØ�9˜ZÑ(Ô(ð Ø�K�K�KØ�Eðð ���øå! t°WÐ=Ñ=Ô=Ð=s   °? ¿AÁA©NNN)rË  r¼   r™   rš   r›   rš   r‡   rœ   r�   rš   rž   rš   r4   rŸ   r7   ©rÊ   r$  r4   rŸ   )r¦   r  rG   rH   rÂ   r
   r4   rç   )rÕ   rÖ   r×   rØ   rÙ   r  r¤   r©   rÁ   r  r   rÝ   r  rÌ   rÞ   rß   s   @r=   r  r    sç   ø€ € € € € ðð ð "€OØ€Mð
 "Ø!%Ø $ð%
ð "&Ø%)ð%
ð %
ð %
ð %
ð %
ð %
ð %
ð %
ðN!ð !ð !ð !ð !ðð ð ð&ð &ð &ð Ô)ØÔà?Cð2>ð 2>ð 2>ð 2>ñ Ôñ *Ô)ð2>ð 2>ð 2>ð 2>ð 2>r?   r  c                  ó   — e Zd ZdZdS )ÚBreakz§Class representing an :class:`ast.Break` node.

    >>> import astroid
    >>> node = astroid.extract_node('break')
    >>> node
    <Break l.1 at 0x7f23b2e9e5c0>
    N©rÕ   rÖ   r×   rØ   r¯   r?   r=   r1  r1  ˜  ó   € € € € € ðð ð ð r?   r1  c                  óÂ   — e Zd ZU dZdZded<   	 ded<   	 ded<   	 dd„Zedd„¦   «         Zedd„¦   «         Z	d„ Z
ej        ej        	 ddd„¦   «         ¦   «         Zdd„ZdS )ÚCallzêClass representing an :class:`ast.Call` node.

    A :class:`Call` node is a call to a function, method, etc.

    >>> import astroid
    >>> node = astroid.extract_node('function()')
    >>> node
    <Call l.1 at 0x7f23b2e71eb8>
    ©r[  r  Úkeywordsr)   r[  r¯  r  úlist[Keyword]r7  r4   rŸ   c                ó0   — || _         || _        || _        d S r7   r6  )r¦   r[  r  r7  s       r=   r©   zCall.postinit¸  s   € ð ˆŒ	ØˆŒ	Ø ˆŒˆˆr?   úlist[Starred]c                ó$   — d„ | j         D ¦   «         S )z/The positional arguments that unpack something.c                ó<   — g | ]}t          |t          ¦  «        ¯|‘ŒS r¯   )r8   rÆ   )r}   rU  s     r=   r³   z!Call.starargs.<locals>.<listcomp>Â  s'   € ÐEÐEÐE˜­J°s½GÑ,DÔ,DÐE�ÐEÐEÐEr?   )r  r·   s    r=   ÚstarargszCall.starargs¿  s   € ð FÐE˜tœyÐEÑEÔEÐEr?   c                ó$   — d„ | j         D ¦   «         S )z,The keyword arguments that unpack something.c                ó    — g | ]}|j         ­	|‘ŒS r7   ©rU  )r}   Úkeywords     r=   r³   zCall.kwargs.<locals>.<listcomp>Ç  s   € ÐLÐLÐL˜G¸¼Ð8K�Ð8KÐ8KÐ8Kr?   )r7  r·   s    r=   rÂ   zCall.kwargsÄ  s   € ð MÐL t¤}ÐLÑLÔLÐLr?   c              #  óP   K  — | j         V — | j        E d {V —† | j        E d {V —† d S r7   r6  r·   s    r=   rÁ   zCall.get_childrenÉ  sK   è è € ØŒiˆˆˆà”9ÐÐÐÐÐÐÐà”=Ð Ð Ð Ð Ð Ð Ð Ð Ð r?   NrG   rH   rÂ   r
   r…  c              +  óæ  K  — t          |¦  «        }d|_        |�,|                      |                     ¦   «         ¦  «        |_        | j                             |¦  «        D ]€}t          |t          j	        ¦  «        r|V — Œ!	 t          |d¦  «        r>t          | j        | j        |¬¦  «        |_        |                     | |¬¦  «        E d{V —† Œq# t           $ r Y Œ}w xY wt#          | |¬¦  «        S )z?Infer a Call node by trying to guess what the function returns.NÚinfer_call_result)r  r7  Úcallee)ÚcallerrG   rJ   )r   r�  Ú_populate_context_lookuprì  Úextra_contextr[  rP   r8   r   rQ   rÏ   r   r  r7  ÚcallcontextrD  r    r+   )r¦   rG   rÂ   rI  rE  s        r=   rÌ   zCall._inferÐ  s1  è è € õ # 7Ñ+Ô+ˆØ $ˆÔØÐØ(,×(EÒ(EÀgÇmÂmÁoÄoÑ(VÔ(VˆKÔ%à”i—o’o gÑ.Ô.ð 	ð 	ˆFÝ˜&¥$Ô"6Ñ7Ô7ð Ø���Øð	Ý˜6Ð#6Ñ7Ô7ð Ý.9Ø!œY°´Àvð/ñ /ô /�KÔ+ð  &×7Ò7Ø#¨[ð  8ñ  ô  ð ð ð ð ð ð ð øøõ "ð ð ð Ø�ðøøøå! t°WÐ=Ñ=Ô=Ð=s   ÂACÃ
CÃCc                ó®   — i }|€|S | j         D ]'}t          |t          ¦  «        r|||j        <   Œ"|||<   Œ(| j        �| j        ng }|D ]}|||j        <   Œ|S )zEAllows context to be saved for later for inference inside a function.)r  r8   rÆ   r<   r7  )r¦   rG   Úcontext_lookuprU  r7  rA  s         r=   rG  zCall._populate_context_lookupë  s‡   € àBDˆØˆ?Ø!Ð!Ø”9ð 	.ð 	.ˆCÝ˜#�wÑ'Ô'ð .Ø,3�˜sœyÑ)Ð)à&-�˜sÑ#Ð#Ø$(¤MÐ$=�4”=�=À2ˆØð 	4ð 	4ˆGØ,3ˆN˜7œ=Ñ)Ð)ØÐr?   )r[  r)   r  r¯  r7  r8  r4   rŸ   )r4   r:  )r4   r8  r7   ©rG   rH   rÂ   r
   r4   r…  rù  )rÕ   rÖ   r×   rØ   rÙ   rv  r©   Úpropertyr=  rÂ   rÁ   r   rÝ   r  rÌ   rG  r¯   r?   r=   r5  r5  ¢  s
  € € € € € € ðð ð 3€Oà€L€L�LØàÐÐÑØ;àÐÐÑØ8ð!ð !ð !ð !ð ðFð Fð Fñ „XðFð ðMð Mð Mñ „XðMð!ð !ð !ð Ô)ØÔà15ð>ð >ð >ð >ñ Ôñ *Ô)ð>ð2ð ð ð ð ð r?   r5  c                ó
   — | |v S r7   r¯   ©ÚaÚbs     r=   ú<lambda>rR    s
   € �q˜A�v€ r?   c                ó
   — | |vS r7   r¯   rO  s     r=   rR  rR    s
   € ˜1 A˜:€ r?   )z==z!=ú<z<=ú>z>=Úinznot inz%dict[str, Callable[[Any, Any], bool]]ÚCOMPARE_OPSÚiszis notc                  óp   — e Zd ZU dZdZded<   	 ded<   	 dd	„Zd
„ Zd„ Ze	dd„¦   «         Z
dd„Z	 d d!d„ZdS )"ÚCompareaL  Class representing an :class:`ast.Compare` node.

    A :class:`Compare` node indicates a comparison.

    >>> import astroid
    >>> node = astroid.extract_node('a <= b <= c')
    >>> node
    <Compare l.1 at 0x7f23b2e9e6d8>
    >>> node.ops
    [('<=', <Name.b l.1 at 0x7f23b2e9e2b0>), ('<=', <Name.c l.1 at 0x7f23b2e9e390>)]
    ©rè  Úopsr)   rè  úlist[tuple[str, NodeNG]]r\  r4   rŸ   c                ó"   — || _         || _        d S r7   r[  )r¦   rè  r\  s      r=   r©   zCompare.postinit   s   € ØˆŒ	ØˆŒˆˆr?   c              #  ó>   K  — | j         V — | j        D ]	\  }}|V — Œ
dS )zÏGet the child nodes below this node.

        Overridden to handle the tuple fields and skip returning the operator
        strings.

        :returns: The children.
        :rtype: iterable(NodeNG)
        Nr[  )r¦   r   Ú
comparators      r=   rÁ   zCompare.get_children$  sA   è è € ð ŒiˆˆˆØ!œXð 	ð 	‰MˆAˆzØÐÐÐÐð	ð 	r?   c                ó(   — | j         d         d         S )zsAn optimized version of list(get_children())[-1]

        :returns: The last child.
        :rtype: NodeNG
        rM  rX   )r\  r·   s    r=   Ú
last_childzCompare.last_child1  s   € ð Œx˜Œ|˜AŒÐr?   rK   r-   r
   c                óN   — t          j        |                      ¦   «         ¦  «        S r7   )ÚastÚliteral_evalrO  )rK   s    r=   Ú_to_literalzCompare._to_literal<  s   € õ
 Ô §¢Ñ 0Ô 0Ñ1Ô1Ð1r?   Ú	left_iterúIterable[InferenceResult]rË  r¼   Ú
right_iterúbool | util.UninferableBasec                ó@  — d}|t           v rt          j        S t          |         }t	          j        ||¦  «        D ]ß\  }}t          |t          j        ¦  «        st          |t          j        ¦  «        rt          j        c S 	 |                      |¦  «        |                      |¦  «        }}n+# t          t          t          f$ r t          j        cY c S w xY w	  |||¦  «        }n# t          $ r}	t          |	‚d}	~	ww xY w|€|}ŒË||k    rt          j        c S Œà|€J ‚|S )a‰  
        If all possible combinations are either True or False, return that:
        >>> _do_compare([1, 2], '<=', [3, 4])
        True
        >>> _do_compare([1, 2], '==', [3, 4])
        False

        If any item is uninferable, or if some combinations are True and some
        are False, return Uninferable:
        >>> _do_compare([1, 3], '<=', [2, 4])
        util.Uninferable
        N)ÚUNINFERABLE_OPSr   rM   rW  r7  rí  r8   rQ   rf  ÚSyntaxErrorrŽ   r‘  r�   r   )
r¦   rg  rË  ri  r9  Úop_funcrè  ré  rŒ  r”   s
             r=   Ú_do_comparezCompare._do_compareC  se  € ð$ #ˆØ•Ð Ð ÝÔ#Ð#Ý˜b”/ˆå$Ô,¨Y¸
ÑCÔCð 	(ð 	(‰KˆD�%Ý˜$¥Ô 4Ñ5Ô5ð (½Ø•tÔ+ñ:ô :ð (õ Ô'Ð'Ð'Ð'ð(Ø"×.Ò.¨tÑ4Ô4°d×6FÒ6FÀuÑ6MÔ6M�e��øÝ¥­^Ð<ð (ð (ð (ÝÔ'Ð'Ð'Ð'Ð'Ð'ð(øøøð0Ø�w˜t UÑ+Ô+��øÝð 0ð 0ð 0Ý&¨CÐ/øøøøð0øøøð ˆ~Ø��Ø˜4’�ÝÔ'Ð'Ð'Ð'ð  ð Ð!Ð!Ð!Øˆs*   Â*B-Â-#CÃCÃC&Ã&
C=Ã0C8Ã8C=NrG   rH   rÂ   ú9Generator[nodes.Const | util.UninferableBase, None, None]c              +  óŒ  K  — d}| j         }| j        }t          |                     |¬¦  «        ¦  «        }|D ]f\  }}t          |                     |¬¦  «        ¦  «        }		 |                      |||	¦  «        }n# t
          $ r t          j        }Y  nw xY w|dur n|	}Œg|t          j        u r|V — dS t          |¦  «        V — dS )z#Chained comparison inference logic.Trr   N)	r\  rè  rë   rP   ro  r   r   rM   rs   )
r¦   rG   rÂ   r9  r\  Ú	left_noderó  rË  Ú
right_noderô  s
             r=   rÌ   zCompare._infers  sû   è è € ð /3ˆàŒhˆØ”Iˆ	Ý�9—?’?¨7�?Ñ3Ô3Ñ4Ô4ˆà!ð 
	ð 
	‰NˆB�
å�z×'Ò'°Ð'Ñ8Ô8Ñ9Ô9ˆCðØ×)Ò)¨#¨r°3Ñ7Ô7��øÝ#ð ð ð ÝÔ)�Ø��ðøøøð ˜TÐ!Ð!Ø�ØˆCˆCØ•TÔ%Ð%Ð%ØˆLˆLˆLˆLˆLå˜‘-”-ÐÐÐÐÐs   Á!A9Á9BÂB)rè  r)   r\  r]  r4   rŸ   )rK   r-   r4   r
   )rg  rh  rË  r¼   ri  rh  r4   rj  r7   )rG   rH   rÂ   r
   r4   rp  )rÕ   rÖ   r×   rØ   rÙ   rv  r©   rÁ   rb  Ústaticmethodrf  ro  rÌ   r¯   r?   r=   rZ  rZ    sÇ   € € € € € € ð
ð 
ð &€Oà€L€L�LØGà!Ð!Ð!Ñ!ØMðð ð ð ðð ð ðð ð ð ð2ð 2ð 2ñ „\ð2ð.ð .ð .ð .ðb 26ð ð  ð  ð  ð  ð  ð  r?   rZ  c                  ó~   — e Zd ZU dZdZdZdZ	 ded<   	 ded<   	 ded	<   	 d
ed<   	 dd„Ze	j
        Z	 d„ Zdd„Zd„ ZdS )ÚComprehensionaÄ  Class representing an :class:`ast.comprehension` node.

    A :class:`Comprehension` indicates the loop inside any type of
    comprehension including generator expressions.

    >>> import astroid
    >>> node = astroid.extract_node('[x for x in some_values]')
    >>> list(node.get_children())
    [<Name.x l.1 at 0x7f23b2e352b0>, <Comprehension l.1 at 0x7f23b2e35320>]
    >>> list(node.get_children())[1].as_string()
    'for x in some_values'
    ©rÂ  ÚiterÚifs)Úis_asyncTr)   rÂ  rx  r¯  ry  r5   rz  r4   rŸ   c                ó>   — || _         || _        || _        || _        d S r7   )rÂ  rx  ry  rz  )r¦   rÂ  rx  ry  rz  s        r=   r©   zComprehension.postinit®  s$   € ð ˆŒØˆŒ	ØˆŒØ ˆŒˆˆr?   c                ó   — | S )zwThe type of assignment that this node performs.

        :returns: The assignment type.
        :rtype: NodeNG
        r¯   r·   s    r=   Úassign_typezComprehension.assign_type¿  s	   € ð ˆr?   Úmystmtú_base_nodes.Statement | Nonec                óŒ   — | |u r"t          |t          t          f¦  «        r|gdfS n|                      ¦   «         |u r|gdfS |dfS )zmethod used in filter_stmtsTF)r8   rs   r  Ú	statement)r¦   Úlookup_noderK   rî   r~  s        r=   Ú_get_filtered_stmtsz!Comprehension._get_filtered_stmtsÇ  sd   € ð �6ˆ>ˆ>Ý˜+­­t }Ñ5Ô5ð +Ø#�} dÐ*Ð*ð+ð �^Š^ÑÔ Ð'Ð'ð �6˜4�<Ðà�eˆ|Ðr?   c              #  óH   K  — | j         V — | j        V — | j        E d {V —† d S r7   rw  r·   s    r=   rÁ   zComprehension.get_children×  s?   è è € ØŒkÐÐÐØŒiˆˆˆà”8ÐÐÐÐÐÐÐÐÐr?   N)
rÂ  r)   rx  r)   ry  r¯  rz  r5   r4   rŸ   )r~  r  )rÕ   rÖ   r×   rØ   rÙ   r  Úoptional_assignrv  r©   r   Úfor_assigned_stmtsrì   r}  rƒ  rÁ   r¯   r?   r=   rv  rv  Ž  s¼   € € € € € € ðð ð 0€OØ!€Mà€OØ:à€N€N�NØ3à€L€L�LØ5àÐÐÑØJà€N€N�NØ?ð
!ð 
!ð 
!ð 
!ð Ô1€Nððð ð ðð ð ð ð ð ð ð ð r?   rv  c                  ó–   ‡ — e Zd ZdZdZ	 	 	 	 d dddœd!ˆ fd„Zej        Zej	        Z
ˆ fd„Zd"d#d„Zd$d„Zd„ Zd%d„Zd"d#d„Z	 d"d&d„Zˆ xZS )'rs   aÜ  Class representing any constant including num, str, bool, None, bytes.

    >>> import astroid
    >>> node = astroid.extract_node('(5, "This is a string.", True, None, b"bytes")')
    >>> node
    <Tuple.tuple l.1 at 0x7f23b2e358d0>
    >>> list(node.get_children())
    [<Const.int l.1 at 0x7f23b2e35940>,
    <Const.str l.1 at 0x7f23b2e35978>,
    <Const.bool l.1 at 0x7f23b2e359b0>,
    <Const.NoneType l.1 at 0x7f23b2e359e8>,
    <Const.bytes l.1 at 0x7f23b2e35a20>]
    )r<   ÚkindNr  r<   r
   r™   rš   r›   r‡   rœ   rˆ  r+  r�   rž   r4   rŸ   c               óž   •— || _         	 || _        	 t          ¦   «                              |||||¬¦  «         t	          j        | d¦  «         dS )a}  
        :param value: The value that the constant represents.

        :param lineno: The line that this node appears on in the source code.

        :param col_offset: The column that this node appears on in the
            source code.

        :param parent: The parent node in the syntax tree.

        :param kind: The string prefix. "u" for u-prefixed strings and ``None`` otherwise. Python 3.8+ only.

        :param end_lineno: The last line this node appears on in the source code.

        :param end_col_offset: The end column this node appears on in the
            source code. Note: This is after the last symbol.
        r¢   N)r<   rˆ  r£   r¤   r   )	r¦   r<   r™   r›   r‡   rˆ  r�   rž   r�   s	           €r=   r¤   zConst.__init__ï  sd   ø€ ð8  ˆŒ
Ø5à $ˆŒ	Øfå‰Œ×ÒØØ!Ø!Ø)Øð 	ñ 	
ô 	
ð 	
õ 	Ô˜$ Ñ%Ô%Ð%Ð%Ð%r?   c                ó`   •— |dk    rt           ‚t          ¦   «                              |¦  «        S )Nr<   )r‘  r£   Ú__getattr__)r¦   rã   r�   s     €r=   r‹  zConst.__getattr__  s,   ø€ ð �7Š?ˆ?Ý Ð Ý‰wŒw×"Ò" 4Ñ(Ô(Ð(r?   rG   rH   c                óV  — t          |t          ¦  «        r|j        }nGt          |t          ¦  «        rt	          ||¬¦  «        }n t          dt          |¦  «        › d�¦  «        ‚	 t          | j        t          t          f¦  «        rt          | j        |         ¦  «        S no# t          $ r }t          d| j        ›d|›�¦  «        |‚d}~wt          $ r}t          d| ||¬¦  «        |‚d}~wt          $ r}t          d	| ||¬¦  «        |‚d}~ww xY wt          | ›d
| j        › d�¦  «        ‚)a%  Get an item from this node if subscriptable.

        :param index: The node to use as a subscript index.
        :type index: Const or Slice

        :raises AstroidTypeError: When the given index cannot be used as a
            subscript index, or if this node is not subscriptable.
        rr   zCould not use type r‹   zCould not index z with NzIndex {index!r} out of ranger€   rŠ   z (value=r}  )r8   rs   r<   rŒ   rˆ   r   ru   r¼   ÚbytesrŽ   r   r�   r   r�   )r¦   rx   rG   Úindex_valuer”   s        r=   ÚgetitemzConst.getitem)  sŒ  € õ �e�UÑ#Ô#ð 	Øœ+ˆKˆKÝ˜�uÑ%Ô%ð 	Ý& u°gÐ>Ñ>Ô>ˆKˆKõ #ØF¥d¨5¡k¤kÐFÐFÐFñô ð ð	Ý˜$œ*¥s­E lÑ3Ô3ð 6Ý˜TœZ¨Ô4Ñ5Ô5Ð5ð6øåð 	ð 	ð 	Ý#ØF 4¤:ÐFÐF°{ÐFÐFñô àðøøøøõ ð 	ð 	ð 	Ý#Ø6ØØØð	ñ ô ð
 ðøøøøõ ð 	ð 	ð 	Ý"Ø.°TÀÐPWðñ ô àðøøøøð	øøøõ
  $Ð?Ð?°$´*Ð?Ð?Ð?Ñ@Ô@Ð@s0   Á&:B" Â"
DÂ,CÃDÃC(Ã(DÃ5D	Ä	Dr5   c                ó   — dS )zÖCheck if the node has a custom __getattr__ or __getattribute__.

        :returns: Whether the class has a custom __getattr__ or __getattribute__.
            For a :class:`Const` this is always ``False``.
        Fr¯   r·   s    r=   Úhas_dynamic_getattrzConst.has_dynamic_getattrQ  s	   € ð ˆur?   c                ó    — t          | j        t          ¦  «        rd„ | j        D ¦   «         S t          dt	          | j        ¦  «        ›�¦  «        ‚)zàAn iterator over the elements this node contains.

        :returns: The contents of this node.
        :rtype: iterable(Const)

        :raises TypeError: If this node does not represent something that is iterable.
        c                ó,   — g | ]}t          |¦  «        ‘ŒS r¯   )r°   r|   s     r=   r³   z Const.itered.<locals>.<listcomp>b  s    € Ð?Ð?Ð?¨D•M $Ñ'Ô'Ð?Ð?Ð?r?   zCannot iterate over type )r8   r<   r¼   r�   ru   r·   s    r=   r¸   zConst.iteredY  sP   € õ �d”j¥#Ñ&Ô&ð 	@Ø?Ð?°D´JÐ?Ñ?Ô?Ð?ÝÐHµD¸¼Ñ4DÔ4DÐHÐHÑIÔIÐIr?   r¼   c                ó4   — | j                              ¦   «         S )r¾   )rŽ  Úqnamer·   s    r=   r¿   zConst.pytypee  s   € ð
 Œ}×"Ò"Ñ$Ô$Ð$r?   c                ó*   — t          | j        ¦  «        S ©zzDetermine the boolean value of this node.

        :returns: The boolean value of this node.
        :rtype: bool
        )r5   r<   rº   s     r=   r»   zConst.bool_valuel  ó   € õ �D”JÑÔÐr?   rÂ   úIterator[Const]c              +  ó   K  — | V — d S r7   r¯   r¢  s      r=   rÌ   zConst._infert  ó   è è € ð ˆ
ˆ
ˆ
ˆ
ˆ
r?   ©NNNN)r<   r
   r™   rš   r›   rš   r‡   rœ   rˆ  r+  r�   rš   rž   rš   r4   rŸ   r7   rù  ru  rÔ   )rG   rH   rÂ   r
   r4   r™  )rÕ   rÖ   r×   rØ   r  r¤   r   Úconst_infer_unary_opÚinfer_unary_opÚconst_infer_binary_opÚinfer_binary_opr‹  r�  r‘  r¸   r¿   r»   rÌ   rÞ   rß   s   @r=   rs   rs   Þ  s/  ø€ € € € € ðð ð &€Mð
 "Ø!%Ø $Øð*&ð "&Ø%)ð*&ð *&ð *&ð *&ð *&ð *&ð *&ð *&ðX Ô3€NØÔ5€Oð	)ð 	)ð 	)ð 	)ð 	)ð&Að &Að &Að &Að &AðPð ð ð ð
Jð 
Jð 
Jð%ð %ð %ð %ð ð  ð  ð  ð  ð 26ðð ð ð ð ð ð ð ð r?   rs   c                  ó   — e Zd ZdZdS )ÚContinuez°Class representing an :class:`ast.Continue` node.

    >>> import astroid
    >>> node = astroid.extract_node('continue')
    >>> node
    <Continue l.1 at 0x7f23b2e35588>
    Nr2  r¯   r?   r=   r¢  r¢  z  r3  r?   r¢  c                  ó:   — e Zd ZU dZdZded<   	 dd„Zdd	„Zd
„ ZdS )Ú
Decoratorsa™  A node representing a list of decorators.

    A :class:`Decorators` is the decorators that are applied to
    a method or function.

    >>> import astroid
    >>> node = astroid.extract_node('''
    @property
    def my_property(self):
        return 3
    ''')
    >>> node
    <FunctionDef.my_property l.2 at 0x7f23b2e35d30>
    >>> list(node.get_children())[0]
    <Decorators l.1 at 0x7f23b2e35d68>
    r1   r¯  r2   r4   rŸ   c                ó   — || _         d S r7   r1   )r¦   r2   s     r=   r©   zDecorators.postinit›  ó   € ØˆŒ
ˆ
ˆ
r?   r3   c                ó®   — | j         st          | ¬¦  «        ‚| j         j         st          | j         ¬¦  «        ‚| j         j                              ¦   «         S ©z·The first parent node defining a new scope.
        These can be Module, FunctionDef, ClassDef, Lambda, or GeneratorExp nodes.

        :returns: The first parent scope node.
        ©rÂ  )r‡   r#   rö   r·   s    r=   rö   zDecorators.scopež  sV   € ð Œ{ð 	2Ý$¨DÐ1Ñ1Ô1Ð1ØŒ{Ô!ð 	9Ý$¨D¬KÐ8Ñ8Ô8Ð8ØŒ{Ô!×'Ò'Ñ)Ô)Ð)r?   c              #  ó$   K  — | j         E d {V —† d S r7   r1   r·   s    r=   rÁ   zDecorators.get_children«  s&   è è € Ø”:ÐÐÐÐÐÐÐÐÐr?   N)r2   r¯  r4   rŸ   ©r4   r3   )	rÕ   rÖ   r×   rØ   rÙ   rv  r©   rö   rÁ   r¯   r?   r=   r¤  r¤  „  sm   € € € € € € ðð ð" !€OàÐÐÑØ1ðð ð ð ð*ð *ð *ð *ðð ð ð ð r?   r¤  c                  óH   ‡ — e Zd ZU dZdZdZded<   	 dˆ fd„Zdd„Zd„ Z	ˆ xZ
S )ÚDelAttra  Variation of :class:`ast.Delete` representing deletion of an attribute.

    >>> import astroid
    >>> node = astroid.extract_node('del self.attr')
    >>> node
    <Delete l.1 at 0x7f23b2e35f60>
    >>> list(node.get_children())[0]
    <DelAttr.attr l.1 at 0x7f23b2e411d0>
    r–  r—  r)   rŒ  r�  r¼   r™   rt   r›   r‡   r�   rš   rž   r4   rŸ   c               ód   •— || _         	 t          ¦   «                              |||||¬¦  «         d S r¡   r™  rš  s          €r=   r¤   zDelAttr.__init__À  sI   ø€ ð !ˆŒØ>å‰Œ×ÒØØ!Ø!Ø)Øð 	ñ 	
ô 	
ð 	
ð 	
ð 	
r?   c                ó   — || _         d S r7   r–  rœ  s     r=   r©   zDelAttr.postinitÕ  rª   r?   c              #  ó   K  — | j         V — d S r7   r–  r·   s    r=   rÁ   zDelAttr.get_childrenØ  rž  r?   r¤  r¥  ©rÕ   rÖ   r×   rØ   rÙ   r  rv  r¤   r©   rÁ   rÞ   rß   s   @r=   r­  r­  ¯  s„   ø€ € € € € € ðð ð  €OØ!€Mà€L€L�LØ-ð
ð 
ð 
ð 
ð 
ð 
ð*ð ð ð ðð ð ð ð ð ð r?   r­  c                  ó6   ‡ — e Zd ZdZdZdˆ fd„Zdd„Zd„ Zˆ xZS )ÚDeletezûClass representing an :class:`ast.Delete` node.

    A :class:`Delete` is a ``del`` statement this is deleting something.

    >>> import astroid
    >>> node = astroid.extract_node('del self.attr')
    >>> node
    <Delete l.1 at 0x7f23b2e35f60>
    ©r°  r™   rt   r›   r‡   r)   r�   rš   rž   r4   rŸ   c               ód   •— g | _         	 t          ¦   «                              |||||¬¦  «         d S r¡   )r°  r£   r¤   r¥   s         €r=   r¤   zDelete.__init__é  sI   ø€ ð &(ˆŒØ$å‰Œ×ÒØØ!Ø!Ø)Øð 	ñ 	
ô 	
ð 	
ð 	
ð 	
r?   r°  r¯  c                ó   — || _         d S r7   r´  )r¦   r°  s     r=   r©   zDelete.postinitý  ó   € ØˆŒˆˆr?   c              #  ó$   K  — | j         E d {V —† d S r7   r´  r·   s    r=   rÁ   zDelete.get_children 	  s&   è è € Ø”<ÐÐÐÐÐÐÐÐÐr?   )r™   rt   r›   rt   r‡   r)   r�   rš   rž   rš   r4   rŸ   )r°  r¯  r4   rŸ   ©	rÕ   rÖ   r×   rØ   rÙ   r¤   r©   rÁ   rÞ   rß   s   @r=   r³  r³  Ü  sq   ø€ € € € € ðð ð #€Oð
ð 
ð 
ð 
ð 
ð 
ð(ð ð ð ð ð  ð  ð  ð  ð  ð  r?   r³  c                  óš   ‡ — e Zd ZdZdZd&ˆ fd„Zd'd„Zej        Z	d(d„Z
d„ Zd„ Zd„ Z	 d)d*d„Zd)d+d„Z	 d)d,d „Zed-d$„¦   «         Zd.d%„Zˆ xZS )/ÚDictzöClass representing an :class:`ast.Dict` node.

    A :class:`Dict` is a dictionary that is created with ``{}`` syntax.

    >>> import astroid
    >>> node = astroid.extract_node('{1: "1"}')
    >>> node
    <Dict.dict l.1 at 0x7f23b2e35cc0>
    ©Úitemsr™   rš   r›   r‡   rœ   r�   rž   r4   rŸ   c               ód   •— g | _         	 t          ¦   «                              |||||¬¦  «         d S r¡   )r½  r£   r¤   r¥   s         €r=   r¤   zDict.__init__	  sK   ø€ ð EGˆŒ
Ø>å‰Œ×ÒØØ!Ø!Ø)Øð 	ñ 	
ô 	
ð 	
ð 	
ð 	
r?   r½  ú-list[tuple[InferenceResult, InferenceResult]]c                ó   — || _         dS )ztDo some setup after initialisation.

        :param items: The key-value pairs contained in the dictionary.
        Nr¼  )r¦   r½  s     r=   r©   zDict.postinit%	  s   € ð
 ˆŒ
ˆ
ˆ
r?   úLiteral['builtins.dict']c                ó   — dS )r¾   zbuiltins.dictr¯   r·   s    r=   r¿   zDict.pytype.	  ó	   € ð
 ˆr?   c              #  ó4   K  — | j         D ]\  }}|V — |V — ŒdS )zïGet the key and value nodes below this node.

        Children are returned in the order that they are defined in the source
        code, key first then the value.

        :returns: The children.
        :rtype: iterable(NodeNG)
        Nr¼  )r¦   Úkeyr<   s      r=   rÁ   zDict.get_children5	  s;   è è € ð œ*ð 	ð 	‰JˆC�ØˆIˆIˆIØˆKˆKˆKˆKð	ð 	r?   c                ó:   — | j         r| j         d         d         S dS )z™An optimized version of list(get_children())[-1]

        :returns: The last child, or None if no children exist.
        :rtype: NodeNG or None
        rM  rX   Nr¼  r·   s    r=   rb  zDict.last_childB	  s$   € ð Œ:ð 	%Ø”:˜b”> !Ô$Ð$Øˆtr?   c                ó$   — d„ | j         D ¦   «         S )z�An iterator over the keys this node contains.

        :returns: The keys of this node.
        :rtype: iterable(NodeNG)
        c                ó   — g | ]\  }}|‘ŒS r¯   r¯   )r}   rÅ  r   s      r=   r³   zDict.itered.<locals>.<listcomp>R	  s   € Ð/Ð/Ð/™˜˜a�Ð/Ð/Ð/r?   r¼  r·   s    r=   r¸   zDict.iteredL	  s   € ð 0Ð/ D¤JÐ/Ñ/Ô/Ð/r?   Nrx   úConst | SlicerG   rH   r)   c                ó   — | j         D ]è\  }}t          |t          ¦  «        r[t          j        ||¦  «        }t          |t
          ¦  «        sŒE	 |                     ||¦  «        c S # t          t          f$ r Y Œqw xY w| 	                    |¦  «        D ]]}t          |t          j
        ¦  «        rŒt          |t          ¦  «        r+t          |t          ¦  «        r|j        |j        k    r|c c S Œ^Œét          |¦  «        ‚)aT  Get an item from this node.

        :param index: The node to use as a subscript index.

        :raises AstroidTypeError: When the given index cannot be used as a
            subscript index, or if this node is not subscriptable.
        :raises AstroidIndexError: If the given index does not exist in the
            dictionary.
        )r½  r8   Ú
DictUnpackr   rÎ   r»  r�  r   r   rP   rQ   rs   r<   )r¦   rx   rG   rÅ  r<   Úinferred_valueÚinferredkeys          r=   r�  zDict.getitemT	  s#  € ð œ*ð 	%ð 	%‰JˆC�å˜#�zÑ*Ô*ð Ý!%¤°¸Ñ!@Ô!@�Ý! .µ$Ñ7Ô7ð ØðØ)×1Ò1°%¸ÑAÔAÐAÐAÐAøÝ(Õ*;Ð<ð ð ð Ø�Hðøøøð  #Ÿyšy¨Ñ1Ô1ð %ð %�Ý˜k­4Ô+?Ñ@Ô@ð ØÝ˜k­5Ñ1Ô1ð %µjÀÍÑ6NÔ6Nð %Ø"Ô(¨E¬KÒ7Ð7Ø$˜˜˜˜˜øð%õ   Ñ&Ô&Ð&s   ÁA&Á&A:Á9A:c                ó*   — t          | j        ¦  «        S r—  )r5   r½  rº   s     r=   r»   zDict.bool_valueu	  r˜  r?   rÂ   r
   úIterator[nodes.Dict]c              +  óX  K  — t          d„ | j        D ¦   «         ¦  «        s| V — d S |                      |¦  «        } t          | ¦  «        | j        | j        | j        | j        | j        ¬¦  «        }| 	                    t          |                     ¦   «         ¦  «        ¦  «         |V — d S )Nc              3  óF   K  — | ]\  }}t          |t          ¦  «        V — Œd S r7   )r8   rË  )r}   Úkr   s      r=   r   zDict._infer.<locals>.<genexpr>€	  s0   è è € ÐDÐD±°°A•:˜a¥Ñ,Ô,ÐDÐDÐDÐDÐDÐDr?   r­   )rb   r½  Ú
_infer_mapru   r™   r›   r‡   r�   rž   r©   rë   )r¦   rG   rÂ   r½  rË   s        r=   rÌ   zDict._infer}	  s°   è è € õ ÐDÐD¸¼ÐDÑDÔDÑDÔDð 	ØˆJˆJˆJˆJˆJà—O’O GÑ,Ô,ˆEØ •d˜4‘j”jØ”{Øœ?Ø”{Øœ?Ø#Ô2ðñ ô ˆGð ×Ò�T %§+¢+¡-¤-Ñ0Ô0Ñ1Ô1Ð1ØˆMˆMˆMˆMˆMr?   Úlhs_dictú:dict[SuccessfulInferenceResult, SuccessfulInferenceResult]Úrhs_dictc                óÎ   — t          j        |                      ¦   «         |                     ¦   «         ¦  «        }d„ |D ¦   «         }t          |                     ¦   «         ¦  «        S )a*  Delete nodes that equate to duplicate keys.

        Since an astroid node doesn't 'equal' another node with the same value,
        this function uses the as_string method to make sure duplicate keys
        don't get through

        Note that both the key and the value are astroid nodes

        Fixes issue with DictUnpack causing duplicate keys
        in inferred Dict items

        :param lhs_dict: Dictionary to 'merge' nodes into
        :param rhs_dict: Dictionary with nodes to pull from
        :return : merged dictionary of nodes
        c                óB   — i | ]\  }}|                      ¦   «         ||f“ŒS r¯   )rO  )r}   rÅ  r<   s      r=   ú
<dictcomp>z1Dict._update_with_replacement.<locals>.<dictcomp>¤	  s*   € ÐTÐTÐT¹
¸¸U�c—m’m‘o”o¨¨U |ÐTÐTÐTr?   )r7  r8  r½  ÚdictrÊ   )rÔ  rÖ  Úcombined_dictÚ
string_maps       r=   Ú_update_with_replacementzDict._update_with_replacementŽ	  sV   € õ( "œ¨¯ªÑ(8Ô(8¸(¿.º.Ñ:JÔ:JÑKÔKˆàTÐTÀmÐTÑTÔTˆ
å�J×%Ò%Ñ'Ô'Ñ(Ô(Ð(r?   c                ó  — i }| j         D ]ú\  }}t          |t          ¦  «        rpt          j        ||¦  «        }|st
          ‚t          |t          ¦  «        st          | |¬¦  «        ‚|                     |¦  «        }|                      ||¦  «        }ŒŠt          j        ||¬¦  «        }t          j        ||¬¦  «        }t          d„ ||fD ¦   «         ¦  «        rt          | |¬¦  «        ‚|                      |||i¦  «        }Œû|S )z%Infer all values based on Dict.items.rJ   rr   c              3  ó   K  — | ]}| V — Œd S r7   r¯   r|   s     r=   r   z"Dict._infer_map.<locals>.<genexpr>¹	  s$   è è € Ð>Ð> D˜4�xÐ>Ð>Ð>Ð>Ð>Ð>r?   )
r½  r8   rË  r   rÎ   r    r»  rÓ  rÝ  rb   )	r¦   rG   rÊ   rã   r<   Údouble_starredÚunpack_itemsrÅ  Ú
safe_values	            r=   rÓ  zDict._infer_map¨	  s%  € ð NPˆØœ:ð 	Rð 	R‰KˆD�%Ý˜$¥
Ñ+Ô+ð RÝ!%¤°¸Ñ!@Ô!@�Ø%ð )Ý(Ð(Ý! .µ$Ñ7Ô7ð EÝ(¨d¸GÐDÑDÔDÐDØ-×8Ò8¸ÑAÔA�Ø×6Ò6°v¸|ÑLÔL��å”o d°GÐ<Ñ<Ô<�Ý!œ_¨U¸GÐDÑDÔD�
ÝÐ>Ð>¨S°*Ð,=Ð>Ñ>Ô>Ñ>Ô>ð EÝ(¨d¸GÐDÑDÔDÐDà×6Ò6°vÀÀZÐ?PÑQÔQ��Øˆr?   rÓ   )r½  r¿  r4   rŸ   )r4   rÁ  r7   )rx   rÉ  rG   rH   r4   r)   rù  )rG   rH   rÂ   r
   r4   rÏ  )rÔ  rÕ  rÖ  rÕ  r4   rÕ  )rG   rH   r4   rÕ  )rÕ   rÖ   r×   rØ   rÙ   r¤   r©   r   Údict_infer_unary_oprž  r¿   rÁ   rb  r¸   r�  r»   rÌ   rt  rÝ  rÓ  rÞ   rß   s   @r=   r»  r»  	  s9  ø€ € € € € ðð ð !€Oð
ð 
ð 
ð 
ð 
ð 
ð(ð ð ð ð Ô2€Nðð ð ð ðð ð ðð ð ð0ð 0ð 0ð HLð'ð 'ð 'ð 'ð 'ðB ð  ð  ð  ð  ð 26ðð ð ð ð ð" ð)ð )ð )ñ „\ð)ð2ð ð ð ð ð ð ð r?   r»  c                  ó>   — e Zd ZU dZdZded<   	 dd„Zd„ Zd	„ Zd
„ Z	dS )ÚExpra6  Class representing an :class:`ast.Expr` node.

    An :class:`Expr` is any expression that does not have its value used or
    stored.

    >>> import astroid
    >>> node = astroid.extract_node('method()')
    >>> node
    <Call l.1 at 0x7f23b2e352b0>
    >>> node.parent
    <Expr l.1 at 0x7f23b2e35278>
    r;   r)   r<   r4   rŸ   c                ó   — || _         d S r7   r;   ©r¦   r<   s     r=   r©   zExpr.postinitÓ	  r¦  r?   c              #  ó   K  — | j         V — d S r7   r;   r·   s    r=   rÁ   zExpr.get_childrenÖ	  ó   è è € ØŒjÐÐÐÐÐr?   c              #  ód   K  — | j         j        s!| j                              ¦   «         E d {V —† d S d S r7   )r<   Úis_functionrº  r·   s    r=   rº  z$Expr._get_yield_nodes_skip_functionsÙ	  sL   è è € ØŒzÔ%ð 	DØ”z×AÒAÑCÔCÐCÐCÐCÐCÐCÐCÐCÐCÐCð	Dð 	Dr?   c              #  ód   K  — | j         j        s!| j                              ¦   «         E d {V —† d S d S r7   )r<   Ú	is_lambdar¼  r·   s    r=   r¼  z"Expr._get_yield_nodes_skip_lambdasÝ	  sL   è è € ØŒzÔ#ð 	BØ”z×?Ò?ÑAÔAÐAÐAÐAÐAÐAÐAÐAÐAÐAð	Bð 	Br?   N©r<   r)   r4   rŸ   ©
rÕ   rÖ   r×   rØ   rÙ   rv  r©   rÁ   rº  r¼  r¯   r?   r=   rå  rå  À	  s|   € € € € € € ðð ð !€Oà€M€M�MØ#ðð ð ð ðð ð ðDð Dð DðBð Bð Bð Bð Br?   rå  c                  ó€   ‡ — e Zd ZdZdZ	 	 	 ddddœdˆ fd„Zdd„Zej        ej	        	 ddd„¦   «         ¦   «         Z
ˆ xZS )Ú	EmptyNodezAHolds an arbitrary object in the :attr:`LocalsDictNodeNG.locals`.Nr  r™   rŸ   r›   r‡   r�   rž   r4   c               óT   •— t          ¦   «                              |||||¬¦  «         d S r¡   ©r£   r¤   r¥   s         €r=   r¤   zEmptyNode.__init__ç	  ó?   ø€ õ 	‰Œ×ÒØØ!Ø!Ø)Øð 	ñ 	
ô 	
ð 	
ð 	
ð 	
r?   r5   c                ó0   — | j         d uo| j         t          uS r7   )Úobjectr   r·   s    r=   Úhas_underlying_objectzEmptyNode.has_underlying_objectø	  s   € ØŒ{ $Ð&ÐR¨4¬;Õ>RÐ+RÐRr?   rG   rH   rÂ   r
   rp  c              +  óî   K  — |                       ¦   «         st          j        V — d S 	 t          ¦   «                              | j        |¬¦  «        E d {V —† d S # t          $ r t          j        V — Y d S w xY w)Nrr   )r÷  r   rM   r&   Úinfer_ast_from_somethingrö  r   r¢  s      r=   rÌ   zEmptyNode._inferû	  s¾   è è € ð
 ×)Ò)Ñ+Ô+ð 	'ÝÔ"Ð"Ð"Ð"Ð"Ð"ð'Ý)Ñ+Ô+×DÒDØ”K¨ð Eñ ô ð ð ð ð ð ð ð ð ð øõ  ð 'ð 'ð 'ÝÔ&Ð&Ð&Ð&Ð&Ð&Ð&ð'øøøs   ¨.A ÁA4Á3A4r.  ©r™   rŸ   r›   rŸ   r‡   rŸ   r�   rŸ   rž   rŸ   r4   rŸ   ru  r7   r  )rÕ   rÖ   r×   rØ   rö  r¤   r÷  r   rÝ   r  rÌ   rÞ   rß   s   @r=   rñ  rñ  â	  s¼   ø€ € € € € ØKÐKà€Fð ØØð	
ð  Ø#ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð"Sð Sð Sð Sð Ô)ØÔà15ð'ð 'ð 'ð 'ñ Ôñ *Ô)ð'ð 'ð 'ð 'ð 'r?   rñ  c                  ó|   — e Zd ZU dZdZdZded<   	 ded<   	 ded	<   	 ej        Z		 dd„Z
d„ Zed„ ¦   «         Zdd„ZdS )ÚExceptHandlera¦  Class representing an :class:`ast.ExceptHandler`. node.

    An :class:`ExceptHandler` is an ``except`` block on a try-except.

    >>> import astroid
    >>> node = astroid.extract_node('''
        try:
            do_something()
        except Exception as error:
            print("Error!")
        ''')
    >>> node
    <Try l.2 at 0x7f23b2e9d908>
    >>> node.handlers
    [<ExceptHandler l.4 at 0x7f23b2e9e860>]
    ©ru   rã   r[   ©r[   rœ   ru   r(  rã   r¯  r[   r4   rŸ   c                ó0   — || _         || _        || _        d S r7   rý  )r¦   ru   rã   r[   s       r=   r©   zExceptHandler.postinit0
  s   € ð ˆŒ	ØˆŒ	ØˆŒ	ˆ	ˆ	r?   c              #  ód   K  — | j         �	| j         V — | j        �	| j        V — | j        E d {V —† d S r7   rý  r·   s    r=   rÁ   zExceptHandler.get_children:
  sL   è è € ØŒ9Ð Ø”)ˆOˆOˆOàŒ9Ð Ø”)ˆOˆOˆOà”9ÐÐÐÐÐÐÐÐÐr?   c                ó\   — | j         r| j         j        S | j        r| j        j        S | j        S ©úPThe line on which the beginning of this block ends.

        :type: int
        )rã   Útolinenoru   r™   r·   s    r=   Úblockstart_tolinenoz!ExceptHandler.blockstart_tolinenoC
  s6   € ð Œ9ð 	&Ø”9Ô%Ð%ØŒ9ð 	&Ø”9Ô%Ð%ØŒ{Ðr?   rU   rV   r5   c                ó~   ‡— | j         �‰€dS t          ˆfd„| j                              ¦   «         D ¦   «         ¦  «        S )zzCheck if this node handles any of the given

        :param exceptions: The names of the exceptions to check for.
        NTc              3  ó*   •K  — | ]}|j         ‰v V — Œd S r7   râ   )r}   rK   rU   s     €r=   r   z&ExceptHandler.catch.<locals>.<genexpr>V
  s*   øè è € ÐSÐS¨t�4”9 
Ð*ÐSÐSÐSÐSÐSÐSr?   )ru   rb   r  )r¦   rU   s    `r=   ra   zExceptHandler.catchO
  sH   ø€ ð
 Œ9Ð 
Ð 2Ø�4ÝÐSÐSÐSÐS°t´y×7PÒ7PÑ7RÔ7RÐSÑSÔSÑSÔSÐSr?   N)ru   rœ   rã   r(  r[   r¯  r4   rŸ   ©rU   rV   r4   r5   )rÕ   rÖ   r×   rØ   rÙ   Ú_multi_line_block_fieldsrv  r   Úexcepthandler_assigned_stmtsrì   r©   rÁ   r   r  ra   r¯   r?   r=   rü  rü  
  s¿   € € € € € € ðð ð" /€OØ(ÐàÐÐÑØ+àÐÐÑØ<àÐÐÑØ$àÔ;€Nððð ð ð ðð ð ð ð	ð 	ñ „_ð	ðTð Tð Tð Tð Tð Tr?   rü  c                  ó–   — e Zd ZU dZdZdZdZdZ	 ded<   	 ded<   	 d	ed
<   	 d	ed<   	 ded<   	 dd„Z	e
j        Z	 ed„ ¦   «         Zd„ ZdS )ÚForz¿Class representing an :class:`ast.For` node.

    >>> import astroid
    >>> node = astroid.extract_node('for thing in things: print(thing)')
    >>> node
    <For l.1 at 0x7f23b2e8cf28>
    ©rÂ  rx  r[   r\   r³  ©r[   r\   Tr)   rÂ  rx  r¯  r[   r\   rœ   r±  r4   rŸ   c                óL   — || _         || _        || _        || _        || _        d S r7   )rÂ  rx  r[   r\   r±  )r¦   rÂ  rx  r[   r\   r±  s         r=   r©   zFor.postinit
  s.   € ð ˆŒØˆŒ	ØˆŒ	ØˆŒØ.ˆÔÐÐr?   c                ó   — | j         j        S r  )rx  r  r·   s    r=   r  zFor.blockstart_tolineno’
  ó   € ð ŒyÔ!Ð!r?   c              #  ób   K  — | j         V — | j        V — | j        E d {V —† | j        E d {V —† d S r7   r  r·   s    r=   rÁ   zFor.get_childrenš
  sY   è è € ØŒkÐÐÐØŒiˆˆˆà”9ÐÐÐÐÐÐÐØ”;ÐÐÐÐÐÐÐÐÐr?   N)rÂ  r)   rx  r)   r[   r¯  r\   r¯  r±  rœ   r4   rŸ   )rÕ   rÖ   r×   rØ   rÙ   r½  r	  r…  rv  r©   r   r†  rì   r   r  rÁ   r¯   r?   r=   r  r  Y
  sÑ   € € € € € € ð
ð ð ;€OØ.ÐØ1Ðà€Oðð
 €N€N�NØ#à€L€L�LØ&àÐÐÑØ/àÐÐÑØ9à"Ð"Ð"Ñ"ØTð/ð /ð /ð /ð Ô1€Nðð ð"ð "ñ „_ð"ðð ð ð ð r?   r  c                  ó   — e Zd ZdZdS )ÚAsyncFora°  Class representing an :class:`ast.AsyncFor` node.

    An :class:`AsyncFor` is an asynchronous :class:`For` built with
    the ``async`` keyword.

    >>> import astroid
    >>> node = astroid.extract_node('''
    async def func(things):
        async for thing in things:
            print(thing)
    ''')
    >>> node
    <AsyncFunctionDef.func l.2 at 0x7f23b2e416d8>
    >>> node.body[0]
    <AsyncFor l.3 at 0x7f23b2e417b8>
    Nr2  r¯   r?   r=   r  r  ¢
  s   € € € € € ðð ð ð r?   r  c                  ó2   — e Zd ZU dZdZded<   	 d
d„Zd„ Zd	S )ÚAwaita¨  Class representing an :class:`ast.Await` node.

    An :class:`Await` is the ``await`` keyword.

    >>> import astroid
    >>> node = astroid.extract_node('''
    async def func(things):
        await other_func()
    ''')
    >>> node
    <AsyncFunctionDef.func l.2 at 0x7f23b2e41748>
    >>> node.body[0]
    <Expr l.3 at 0x7f23b2e419e8>
    >>> list(node.body[0].get_children())[0]
    <Await l.3 at 0x7f23b2e41a20>
    r;   r)   r<   r4   rŸ   c                ó   — || _         d S r7   r;   rç  s     r=   r©   zAwait.postinitÌ
  r¦  r?   c              #  ó   K  — | j         V — d S r7   r;   r·   s    r=   rÁ   zAwait.get_childrenÏ
  ré  r?   Nrî  r¬  r¯   r?   r=   r  r  µ
  sV   € € € € € € ðð ð" !€Oà€M€M�MØðð ð ð ðð ð ð ð r?   r  c                  ó|   ‡ — e Zd ZdZdZ	 	 	 	 ddddœdˆ fd„Zej        ej        	 	 d d!d„¦   «         ¦   «         Z	ˆ xZ
S )"Ú
ImportFromzÌClass representing an :class:`ast.ImportFrom` node.

    >>> import astroid
    >>> node = astroid.extract_node('from my_package import my_module')
    >>> node
    <ImportFrom l.1 at 0x7f23b2e415c0>
    )ÚmodnameÚnamesÚlevelr   Nr  Úfromnamer+  r  úlist[tuple[str, str | None]]r  rš   r™   r›   r‡   rœ   r�   rž   r4   rŸ   c               ó„   •— || _         	 || _        	 || _        	 t          ¦   «                              |||||¬¦  «         dS )a†  
        :param fromname: The module that is being imported from.

        :param names: What is being imported from the module.

        :param level: The level of relative import.

        :param lineno: The line that this node appears on in the source code.

        :param col_offset: The column that this node appears on in the
            source code.

        :param parent: The parent node in the syntax tree.

        :param end_lineno: The last line this node appears on in the source code.

        :param end_col_offset: The end column this node appears on in the
            source code. Note: This is after the last symbol.
        r¢   N)r  r  r  r£   r¤   )
r¦   r  r  r  r™   r›   r‡   r�   rž   r�   s
            €r=   r¤   zImportFrom.__init__Þ
  si   ø€ ð> $,ˆŒð	ð
 49ˆŒ
ð	ð "'ˆŒ
ð	õ 	‰Œ×ÒØØ!Ø!Ø)Øð 	ñ 	
ô 	
ð 	
ð 	
ð 	
r?   TrG   rH   Úasnamer5   rÂ   r
   rp  c                óN  — |pt          ¦   «         }|j        }|€t          | |¬¦  «        ‚|r;	 |                      |¦  «        }n$# t          $ r}t          | |¬¦  «        |‚d}~ww xY w	 |                      ¦   «         }n$# t          $ r}t          | |¬¦  «        |‚d}~ww xY w	 t          |¦  «        }||_        |                     |||  	                    ¦   «         u ¬¦  «        }t          ||¦  «        S # t          $ r&}t          t          |¦  «        | ||¬¦  «        |‚d}~ww xY w)z;Infer a ImportFrom node: return the imported module/object.NrJ   )Úignore_locals©rÂ  Ú	attributerG   )r   rû   r    Ú	real_namer   Údo_import_moduler   r   rE  Úrootr   r¼   )	r¦   rG   r!  rÂ   rã   r”   Úmodulerî   Úerrors	            r=   rÌ   zImportFrom._infer  st  € ð Ð/Õ-Ñ/Ô/ˆØÔ!ˆØˆ<Ý  d°GÐ<Ñ<Ô<Ð<Øð 	JðJØ—~’~ dÑ+Ô+��øÝ*ð Jð Jð Jå$¨$¸Ð@Ñ@Ô@ÀcÐIøøøøðJøøøð	FØ×*Ò*Ñ,Ô,ˆFˆFøÝ#ð 	Fð 	Fð 	FÝ  d°GÐ<Ñ<Ô<À#ÐEøøøøð	Føøøð	Ý" 7Ñ+Ô+ˆGØ!%ˆGÔØ—N’N 4°vÀÇÂÁÄÐ7L�NÑMÔMˆEÝ  wÑ/Ô/Ð/øÝ&ð 	ð 	ð 	Ý Ý�E‘
”
 4°4Àðñ ô àðøøøøð	øøøsH   ®A Á
A%ÁA Á A%Á)A> Á>
BÂBÂBÂ#AC4 Ã4
D$Ã>!DÄD$)r   NNN)r  r+  r  r  r  rš   r™   rš   r›   rš   r‡   rœ   r�   rš   rž   rš   r4   rŸ   ©NT)rG   rH   r!  r5   rÂ   r
   r4   rp  ©rÕ   rÖ   r×   rØ   r  r¤   r   rÝ   r  rÌ   rÞ   rß   s   @r=   r  r  Ó
  s³   ø€ € € € € ðð ð 2€Mð Ø!Ø!%Ø $ð:
ð "&Ø%)ð:
ð :
ð :
ð :
ð :
ð :
ð :
ð :
ðx Ô)ØÔð ,0Øðð ð ð ñ Ôñ *Ô)ðð ð ð ð r?   r  c                  ó†   ‡ — e Zd ZU dZded<   dZdZdˆ fd„Zdd„Zd„ Z	e
j        e
j        	 ddd„¦   «         ¦   «         Zˆ xZS )Ú	Attributez2Class representing an :class:`ast.Attribute` node.r)   rŒ  r–  r—  r�  r¼   r™   rt   r›   r‡   r�   rš   rž   r4   rŸ   c               ód   •— || _         	 t          ¦   «                              |||||¬¦  «         d S r¡   r™  rš  s          €r=   r¤   zAttribute.__init__E  sI   ø€ ð !ˆŒØ(å‰Œ×ÒØØ!Ø!Ø)Øð 	ñ 	
ô 	
ð 	
ð 	
ð 	
r?   c                ó   — || _         d S r7   r–  rœ  s     r=   r©   zAttribute.postinitZ  rª   r?   c              #  ó   K  — | j         V — d S r7   r–  r·   s    r=   rÁ   zAttribute.get_children]  rž  r?   NrG   rH   rÂ   r
   r…  c                ó   — t          | |fi |¤ŽS r7   r¡  r¢  s      r=   rÌ   zAttribute._infer`  r£  r?   r¤  r¥  r7   rL  )rÕ   rÖ   r×   rØ   rv  rÙ   r  r¤   r©   rÁ   r   rÝ   r  rÌ   rÞ   rß   s   @r=   r.  r.  =  sµ   ø€ € € € € € Ø<Ð<à€L€L�Là€OØ!€Mð
ð 
ð 
ð 
ð 
ð 
ð*ð ð ð ðð ð ð Ô)ØÔà15ð9ð 9ð 9ð 9ñ Ôñ *Ô)ð9ð 9ð 9ð 9ð 9r?   r.  c                  ó~   ‡ — e Zd ZdZdZ	 	 	 ddddœdˆ fd„Zd„ Zej        ej	        	 ddd„¦   «         ¦   «         Z
ˆ xZS )ÚGlobalz³Class representing an :class:`ast.Global` node.

    >>> import astroid
    >>> node = astroid.extract_node('global a_global')
    >>> node
    <Global l.1 at 0x7f23b2e9de10>
    ©r  Nr  r  ú	list[str]r™   rš   r›   r‡   rœ   r�   rž   r4   rŸ   c               ód   •— || _         	 t          ¦   «                              |||||¬¦  «         dS )a  
        :param names: The names being declared as global.

        :param lineno: The line that this node appears on in the source code.

        :param col_offset: The column that this node appears on in the
            source code.

        :param parent: The parent node in the syntax tree.

        :param end_lineno: The last line this node appears on in the source code.

        :param end_col_offset: The end column this node appears on in the
            source code. Note: This is after the last symbol.
        r¢   N©r  r£   r¤   ©r¦   r  r™   r›   r‡   r�   rž   r�   s          €r=   r¤   zGlobal.__init__s  sI   ø€ ð2 !&ˆŒ
Ø1å‰Œ×ÒØØ!Ø!Ø)Øð 	ñ 	
ô 	
ð 	
ð 	
ð 	
r?   c                ó   — |S r7   r¯   r1  s      r=   r2  zGlobal._infer_name—  ó   € Øˆr?   rG   rH   rÂ   r
   rp  c                ó  — |�|j         €t          | |¬¦  «        ‚	 t          |                      ¦   «                              |j         ¦  «        |¦  «        S # t
          $ r+}t          t          |¦  «        | |j         |¬¦  «        |‚d }~ww xY w)NrJ   r$  )rû   r    r   r(  rE  r   r¼   )r¦   rG   rÂ   r*  s       r=   rÌ   zGlobal._inferš  s�   € ð
 ˆ?˜gÔ0Ð8Ý  d°GÐ<Ñ<Ô<Ð<ð	å §	¢	¡¤× 3Ò 3°GÔ4FÑ GÔ GÈÑQÔQÐQøÝ&ð 	ð 	ð 	Ý Ý�E‘
”
 4°7Ô3EÈwðñ ô àðøøøøð	øøøs   œ9A Á
BÁ &BÂBr.  ©r  r6  r™   rš   r›   rš   r‡   rœ   r�   rš   rž   rš   r4   rŸ   r7   r  )rÕ   rÖ   r×   rØ   r  r¤   r2  r   rÝ   r  rÌ   rÞ   rß   s   @r=   r4  r4  h  sº   ø€ € € € € ðð ð €Mð
 "Ø!%Ø $ð"
ð "&Ø%)ð"
ð "
ð "
ð "
ð "
ð "
ð "
ð "
ðHð ð ð Ô)ØÔà15ðð ð ð ñ Ôñ *Ô)ðð ð ð ð r?   r4  c                  óŒ   ‡ — e Zd ZU dZdZdZded<   	 ded<   	 ded<   	 dd„Zed„ ¦   «         Z	dd„Z
d„ Zd„ Zˆ fd„Zˆ fd„Zˆ xZS )r^   zµClass representing an :class:`ast.If` node.

    >>> import astroid
    >>> node = astroid.extract_node('if condition: print(True)')
    >>> node
    <If l.1 at 0x7f23b2e9dd30>
    ©rY   r[   r\   r  r)   rY   r¯  r[   r\   r4   rŸ   c                ó0   — || _         || _        || _        d S r7   r?  ©r¦   rY   r[   r\   s       r=   r©   zIf.postinit¿  ó   € ØˆŒ	ØˆŒ	ØˆŒˆˆr?   c                ó   — | j         j        S r  ©rY   r  r·   s    r=   r  zIf.blockstart_tolinenoÄ  r  r?   r™   rt   útuple[int, int]c                óè   — || j         d         j        k    r||fS || j         d         j        k    r|| j         d         j        fS |                      || j        | j         d         j        dz
  ¦  «        S )úþGet a range from the given line number to where this node ends.

        :param lineno: The line number to start the range at.

        :returns: The range of line numbers that this node belongs to,
            starting at the given line number.
        r   rM  rX   )r[   r4  r  Ú_elsed_block_ranger\   ©r¦   r™   s     r=   Úblock_rangezIf.block_rangeÌ  ss   € ð �T”Y˜q”\Ô,Ò,Ð,Ø˜6�>Ð!Ø�T”Y˜r”]Ô+Ò+Ð+Ø˜4œ9 Rœ=Ô1Ð1Ð1Ø×&Ò& v¨t¬{¸D¼IÀa¼LÔ<SÐVWÑ<WÑXÔXÐXr?   c              #  óP   K  — | j         V — | j        E d {V —† | j        E d {V —† d S r7   r?  r·   s    r=   rÁ   zIf.get_childrenÚ  óK   è è € ØŒiˆˆˆà”9ÐÐÐÐÐÐÐØ”;ÐÐÐÐÐÐÐÐÐr?   c                ór   — t          | j        ¦  «        dk    ot          | j        d         t          ¦  «        S )NrX   r   )rC  r\   r8   r^   r·   s    r=   Úhas_elif_blockzIf.has_elif_blockà  s,   € Ý�4”;ÑÔ 1Ò$ÐG­°D´KÀ´NÅBÑ)GÔ)GÐGr?   c              #  ó–   •K  — | j                              ¦   «         E d{V —† t          ¦   «                              ¦   «         E d{V —† dS ©z/An If node can contain a Yield node in the testN©rY   rº  r£   rà  s    €r=   rº  z"If._get_yield_nodes_skip_functionsã  ó[   øè è € à”9×<Ò<Ñ>Ô>Ð>Ð>Ð>Ð>Ð>Ð>Ð>Ý‘7”7×:Ò:Ñ<Ô<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<r?   c              #  ó–   •K  — | j                              ¦   «         E d{V —† t          ¦   «                              ¦   «         E d{V —† dS rP  ©rY   r¼  r£   rà  s    €r=   r¼  z If._get_yield_nodes_skip_lambdasè  ó[   øè è € à”9×:Ò:Ñ<Ô<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ý‘7”7×8Ò8Ñ:Ô:Ð:Ð:Ð:Ð:Ð:Ð:Ð:Ð:Ð:r?   ©rY   r)   r[   r¯  r\   r¯  r4   rŸ   ©r™   rt   r4   rE  )rÕ   rÖ   r×   rØ   rÙ   r	  rv  r©   r   r  rJ  rÁ   rN  rº  r¼  rÞ   rß   s   @r=   r^   r^   ª  sü   ø€ € € € € € ðð ð 1€OØ1Ðà€L€L�LØ1àÐÐÑØ$àÐÐÑØ-ðð ð ð ð
 ð"ð "ñ „_ð"ðYð Yð Yð Yðð ð ðHð Hð Hð=ð =ð =ð =ð =ð
;ð ;ð ;ð ;ð ;ð ;ð ;ð ;ð ;r?   r^   c                  óx   — e Zd ZU dZdZded<   	 ded<   	 ded<   	 dd	„Zd
„ Zdd„Ze	j
        	 ddd„¦   «         ZdS )ÚIfExpz¾Class representing an :class:`ast.IfExp` node.
    >>> import astroid
    >>> node = astroid.extract_node('value if condition else other')
    >>> node
    <IfExp l.1 at 0x7f23b2e9dbe0>
    r?  r)   rY   r[   r\   r4   rŸ   c                ó0   — || _         || _        || _        d S r7   r?  rA  s       r=   r©   zIfExp.postinit  rB  r?   c              #  ó@   K  — | j         V — | j        V — | j        V — d S r7   r?  r·   s    r=   rÁ   zIfExp.get_children  s0   è è € ØŒiˆˆˆØŒiˆˆˆØŒkÐÐÐÐÐr?   úLiteral[False]c                ó   — dS )NFr¯   r·   s    r=   r
  zIfExp.op_left_associative  s	   € ð ˆur?   NrG   rH   rÂ   r
   rp  c              +  óˆ  K  — d}|pt          ¦   «         }t          |¦  «        }t          |¦  «        }	 t          | j                             |                     ¦   «         ¬¦  «        ¦  «        }t          |t          j        ¦  «        sX| 	                    ¦   «         r"| j
                             |¬¦  «        E d{V —† n>| j                             |¬¦  «        E d{V —† nd}n# t          t          f$ r d}Y nw xY w|rD| j
                             |¬¦  «        E d{V —† | j                             |¬¦  «        E d{V —† dS dS )zÒSupport IfExp inference.

        If we can't infer the truthiness of the condition, we default
        to inferring both branches. Otherwise, we infer either branch
        depending on the condition.
        Frr   NT)r   r   rO   rY   rP   rì  r8   r   rQ   r»   r[   r\   r    rv   )r¦   rG   rÂ   Úboth_branchesr  rð  rY   s          r=   rÌ   zIfExp._infer  s†  è è € ð ˆð
 Ð/Õ-Ñ/Ô/ˆÝ" 7Ñ+Ô+ˆÝ" 7Ñ+Ô+ˆð	%Ý˜œ	Ÿš°·²±´˜Ñ@Ô@ÑAÔAˆDõ ˜d¥DÔ$8Ñ9Ô9ð %Ø—?’?Ñ$Ô$ð FØ#œyŸš°{˜ÑCÔCÐCÐCÐCÐCÐCÐCÐCÐCà#œ{×0Ò0¸Ð0ÑEÔEÐEÐEÐEÐEÐEÐEÐEÐEà $��øõ ¥Ð.ð 	!ð 	!ð 	!Ø ˆMˆMˆMð	!øøøð ð 	>Ø”y—’¨{�Ñ;Ô;Ð;Ð;Ð;Ð;Ð;Ð;Ð;Ø”{×(Ò(°Ð(Ñ=Ô=Ð=Ð=Ð=Ð=Ð=Ð=Ð=Ð=Ð=ð	>ð 	>s   ´:C# Ã#C9Ã8C9)rY   r)   r[   r)   r\   r)   r4   rŸ   )r4   r\  r7   r  )rÕ   rÖ   r×   rØ   rÙ   rv  r©   rÁ   r
  r   rÝ   rÌ   r¯   r?   r=   rY  rY  î  s®   € € € € € € ðð ð 1€Oà€L€L�LØ1à€L€L�LØ$à€N€N�NØ-ðð ð ð ð
ð ð ð
ð ð ð ð
 Ô)à15ð>ð >ð >ð >ñ *Ô)ð>ð >ð >r?   rY  c                  óz   ‡ — e Zd ZdZdZ	 	 	 ddddœdˆ fd„Zej        ej        	 	 ddd„¦   «         ¦   «         Z	ˆ xZ
S )ÚImportz±Class representing an :class:`ast.Import` node.
    >>> import astroid
    >>> node = astroid.extract_node('import astroid')
    >>> node
    <Import l.1 at 0x7f23b2e4e5c0>
    r5  Nr  r  r  r™   rš   r›   r‡   rœ   r�   rž   r4   rŸ   c               ód   •— || _         	 t          ¦   «                              |||||¬¦  «         dS )a  
        :param names: The names being imported.

        :param lineno: The line that this node appears on in the source code.

        :param col_offset: The column that this node appears on in the
            source code.

        :param parent: The parent node in the syntax tree.

        :param end_lineno: The last line this node appears on in the source code.

        :param end_col_offset: The end column this node appears on in the
            source code. Note: This is after the last symbol.
        r¢   Nr8  r9  s          €r=   r¤   zImport.__init__=  sM   ø€ ð2 49ˆŒ
ð	õ 	‰Œ×ÒØØ!Ø!Ø)Øð 	ñ 	
ô 	
ð 	
ð 	
ð 	
r?   TrG   rH   r!  r5   rÂ   r
   ú#Generator[nodes.Module, None, None]c              +  ó2  K  — |pt          ¦   «         }|j        }|€t          | |¬¦  «        ‚	 |r,|                      |                      |¦  «        ¦  «        V — dS |                      |¦  «        V — dS # t
          $ r}t          | |¬¦  «        |‚d}~ww xY w)z8Infer an Import node: return the imported module/object.NrJ   )r   rû   r    r'  r&  r   )r¦   rG   r!  rÂ   rã   r”   s         r=   rÌ   zImport._infere  sË   è è € ð Ð/Õ-Ñ/Ô/ˆØÔ!ˆØˆ<Ý  d°GÐ<Ñ<Ô<Ð<ð	FØð 2Ø×+Ò+¨D¯NªN¸4Ñ,@Ô,@ÑAÔAÐAÐAÐAÐAÐAà×+Ò+¨DÑ1Ô1Ð1Ð1Ð1Ð1Ð1øÝ#ð 	Fð 	Fð 	FÝ  d°GÐ<Ñ<Ô<À#ÐEøøøøð	Føøøs   ®,A5 ÁA5 Á5
BÁ?BÂBr.  )r  r  r™   rš   r›   rš   r‡   rœ   r�   rš   rž   rš   r4   rŸ   r+  )rG   rH   r!  r5   rÂ   r
   r4   rc  r,  rß   s   @r=   ra  ra  3  s¹   ø€ € € € € ðð ð €Mð
 "Ø!%Ø $ð&
ð "&Ø%)ð&
ð &
ð &
ð &
ð &
ð &
ð &
ð &
ðP Ô)ØÔð ,0ØðFð Fð Fð Fñ Ôñ *Ô)ðFð Fð Fð Fð Fr?   ra  c                  óH   ‡ — e Zd ZU dZdZdZded<   	 dˆ fd„Zdd„Zd„ Z	ˆ xZ
S )ÚKeywordzõClass representing an :class:`ast.keyword` node.

    >>> import astroid
    >>> node = astroid.extract_node('function(a_kwarg=True)')
    >>> node
    <Call l.1 at 0x7f23b2e9e320>
    >>> node.keywords
    [<Keyword l.1 at 0x7f23b2e9e9b0>]
    r;   r@  r)   r<   rU  r+  r™   rš   r›   r‡   r�   rž   r4   rŸ   c               ód   •— || _         	 t          ¦   «                              |||||¬¦  «         d S r¡   )rU  r£   r¤   )r¦   rU  r™   r›   r‡   r�   rž   r�   s          €r=   r¤   zKeyword.__init__�  sI   ø€ ð ˆŒØ-å‰Œ×ÒØØ!Ø!Ø)Øð 	ñ 	
ô 	
ð 	
ð 	
ð 	
r?   c                ó   — || _         d S r7   r;   rç  s     r=   r©   zKeyword.postinit¢  r¦  r?   c              #  ó   K  — | j         V — d S r7   r;   r·   s    r=   rÁ   zKeyword.get_children¥  ré  r?   )rU  r+  r™   rš   r›   rš   r‡   r)   r�   rš   rž   rš   r4   rŸ   rî  r±  rß   s   @r=   rf  rf  |  s„   ø€ € € € € € ðð ð !€OØ€Mà€M€M�MØ;ð
ð 
ð 
ð 
ð 
ð 
ð*ð ð ð ðð ð ð ð ð ð r?   rf  c                  óx   ‡ — e Zd ZdZdZ	 	 	 	 ddddœdˆ fd„Zej        Z	 ej	        Z
ej        Zdd„Zddd„Zˆ xZS )rC   z®Class representing an :class:`ast.List` node.

    >>> import astroid
    >>> node = astroid.extract_node('[1, 2, 3]')
    >>> node
    <List.list l.1 at 0x7f23b2e9e128>
    ©ÚctxNr  rl  úContext | Noner™   rš   r›   r‡   rœ   r�   rž   r4   rŸ   c               ód   •— || _         	 t          ¦   «                              |||||¬¦  «         dS )a  
        :param ctx: Whether the list is assigned to or loaded from.

        :param lineno: The line that this node appears on in the source code.

        :param col_offset: The column that this node appears on in the
            source code.

        :param parent: The parent node in the syntax tree.

        :param end_lineno: The last line this node appears on in the source code.

        :param end_col_offset: The end column this node appears on in the
            source code. Note: This is after the last symbol.
        r¢   N©rl  r£   r¤   ©r¦   rl  r™   r›   r‡   r�   rž   r�   s          €r=   r¤   zList.__init__´  sI   ø€ ð2 $'ˆŒØ=å‰Œ×ÒØØ!Ø!Ø)Øð 	ñ 	
ô 	
ð 	
ð 	
ð 	
r?   úLiteral['builtins.list']c                ó   — dS )r¾   zbuiltins.listr¯   r·   s    r=   r¿   zList.pytypeà  rÃ  r?   rG   rH   c                ó2   — t          | | j        ||¬¦  «        S ©z…Get an item from this node.

        :param index: The node to use as a subscript index.
        :type index: Const or Slice
        rr   ©r•   rL   ©r¦   rx   rG   s      r=   r�  zList.getitemç  ó   € õ " $¨¬	°5À'ÐJÑJÔJÐJr?   rœ  ©rl  rm  r™   rš   r›   rš   r‡   rœ   r�   rš   rž   rš   r4   rŸ   )r4   rq  r7   rù  )rÕ   rÖ   r×   rØ   r  r¤   r   Úsequence_assigned_stmtsrì   Úlist_infer_unary_oprž  Útl_infer_binary_opr   r¿   r�  rÞ   rß   s   @r=   rC   rC   ©  sË   ø€ € € € € ðð ð €Mð #Ø!Ø!%Ø $ð"
ð "&Ø%)ð"
ð "
ð "
ð "
ð "
ð "
ð "
ð "
ðH Ô6€Nðð Ô2€NØÔ2€Oðð ð ð ðKð Kð Kð Kð Kð Kð Kð Kð Kr?   rC   c                  ó>   ‡ — e Zd ZdZdZ	 	 	 ddddœdˆ fd„Zd„ Zˆ xZS )ÚNonlocala   Class representing an :class:`ast.Nonlocal` node.

    >>> import astroid
    >>> node = astroid.extract_node('''
    def function():
        nonlocal var
    ''')
    >>> node
    <FunctionDef.function l.2 at 0x7f23b2e9e208>
    >>> node.body[0]
    <Nonlocal l.3 at 0x7f23b2e9e908>
    r5  Nr  r  r6  r™   rš   r›   r‡   rœ   r�   rž   r4   rŸ   c               ód   •— || _         	 t          ¦   «                              |||||¬¦  «         dS )a  
        :param names: The names being declared as not local.

        :param lineno: The line that this node appears on in the source code.

        :param col_offset: The column that this node appears on in the
            source code.

        :param parent: The parent node in the syntax tree.

        :param end_lineno: The last line this node appears on in the source code.

        :param end_col_offset: The end column this node appears on in the
            source code. Note: This is after the last symbol.
        r¢   Nr8  r9  s          €r=   r¤   zNonlocal.__init__   sI   ø€ ð2 !&ˆŒ
Ø4å‰Œ×ÒØØ!Ø!Ø)Øð 	ñ 	
ô 	
ð 	
ð 	
ð 	
r?   c                ó   — |S r7   r¯   r1  s      r=   r2  zNonlocal._infer_name$  r;  r?   r.  r=  )rÕ   rÖ   r×   rØ   r  r¤   r2  rÞ   rß   s   @r=   r}  r}  ð  s€   ø€ € € € € ðð ð €Mð
 "Ø!%Ø $ð"
ð "&Ø%)ð"
ð "
ð "
ð "
ð "
ð "
ð "
ð "
ðHð ð ð ð ð ð r?   r}  c                  óV   ‡ — e Zd ZU dZdZded<   dˆ fd„Zdd„Z	 ddd„Ze	j
        Zˆ xZS )Ú	ParamSpeczÚClass representing a :class:`ast.ParamSpec` node.

    >>> import astroid
    >>> node = astroid.extract_node('type Alias[**P] = Callable[P, int]')
    >>> node.type_params[0]
    <ParamSpec l.1 at 0x7f23b2e4e198>
    râ   rE   rã   r™   rt   r›   r‡   r)   r�   rž   r4   rŸ   c               óT   •— t          ¦   «                              |||||¬¦  «         d S r¡   ró  r¥   s         €r=   r¤   zParamSpec.__init__5  rô  r?   c               ó   — || _         d S r7   râ   rb  s     r=   r©   zParamSpec.postinitF  rª   r?   NrG   rH   rÂ   r
   úIterator[ParamSpec]c              +  ó   K  — | V — d S r7   r¯   r¢  s      r=   rÌ   zParamSpec._inferI  r›  r?   ©r™   rt   r›   rt   r‡   r)   r�   rt   rž   rt   r4   rŸ   ©rã   rE   r4   rŸ   r7   )rG   rH   rÂ   r
   r4   r„  ©rÕ   rÖ   r×   rØ   rÙ   rv  r¤   r©   rÌ   r   Úgeneric_type_assigned_stmtsrì   rÞ   rß   s   @r=   r�  r�  (  ó˜   ø€ € € € € € ðð ð  €OàÐÐÑð
ð 
ð 
ð 
ð 
ð 
ð"ð ð ð ð 26ðð ð ð ð ð
 Ô:€Nðð ð ð r?   r�  c                  ó   — e Zd ZdZdS )ÚPassz¤Class representing an :class:`ast.Pass` node.

    >>> import astroid
    >>> node = astroid.extract_node('pass')
    >>> node
    <Pass l.1 at 0x7f23b2e9e748>
    Nr2  r¯   r?   r=   rŒ  rŒ  T  r3  r?   rŒ  c                  óF   — e Zd ZU dZdZded<   	 ded<   	 dd„Zdd
„Zd„ ZdS )ÚRaisezÏClass representing an :class:`ast.Raise` node.

    >>> import astroid
    >>> node = astroid.extract_node('raise RuntimeError("Something bad happened!")')
    >>> node
    <Raise l.1 at 0x7f23b2e9e828>
    ©r”   Úcauserœ   r”   r�  r4   rŸ   c                ó"   — || _         || _        d S r7   r�  )r¦   r”   r�  s      r=   r©   zRaise.postinito  s   € ð
 ˆŒØˆŒ
ˆ
ˆ
r?   r5   c                ót   — | j         sdS t          d„ | j                              ¦   «         D ¦   «         ¦  «        S )zŽCheck if this node raises a :class:`NotImplementedError`.

        :returns: Whether this node raises a :class:`NotImplementedError`.
        Fc              3  ó,   K  — | ]}|j         d k    V — ŒdS )ÚNotImplementedErrorNrâ   )r}   rã   s     r=   r   z/Raise.raises_not_implemented.<locals>.<genexpr>~  s;   è è € ð 
ð 
Ø37ˆDŒIÐ.Ò.ð
ð 
ð 
ð 
ð 
ð 
r?   )r”   rb   r  r·   s    r=   Úraises_not_implementedzRaise.raises_not_implementedw  sO   € ð
 Œxð 	Ø�5Ýð 
ð 
Ø;?¼8×;SÒ;SÑ;UÔ;Uð
ñ 
ô 
ñ 
ô 
ð 	
r?   c              #  óN   K  — | j         �	| j         V — | j        �| j        V — d S d S r7   r�  r·   s    r=   rÁ   zRaise.get_children‚  s=   è è € ØŒ8ÐØ”(ˆNˆNˆNàŒ:Ð!Ø”*ÐÐÐÐÐð "Ð!r?   N)r”   rœ   r�  rœ   r4   rŸ   ru  )	rÕ   rÖ   r×   rØ   rÙ   rv  r©   r•  rÁ   r¯   r?   r=   rŽ  rŽ  ^  s|   € € € € € € ðð ð '€OàÐÐÑØàÐÐÑØ5ðð ð ð ð	
ð 	
ð 	
ð 	
ðð ð ð ð r?   rŽ  c                  ó>   — e Zd ZU dZdZded<   	 dd„Zd„ Zd	„ Zd
„ Z	dS )ÚReturnz¯Class representing an :class:`ast.Return` node.

    >>> import astroid
    >>> node = astroid.extract_node('return True')
    >>> node
    <Return l.1 at 0x7f23b8211908>
    r;   rœ   r<   r4   rŸ   c                ó   — || _         d S r7   r;   rç  s     r=   r©   zReturn.postinit˜  r¦  r?   c              #  ó.   K  — | j         �| j         V — d S d S r7   r;   r·   s    r=   rÁ   zReturn.get_children›  ó*   è è € ØŒ:Ð!Ø”*ÐÐÐÐÐð "Ð!r?   c                ó6   — t          | j        t          ¦  «        S r7   )r8   r<   rD   r·   s    r=   Úis_tuple_returnzReturn.is_tuple_returnŸ  s   € Ý˜$œ*¥eÑ,Ô,Ð,r?   c              #  ó   K  — | V — d S r7   r¯   r·   s    r=   Ú _get_return_nodes_skip_functionsz'Return._get_return_nodes_skip_functions¢  ó   è è € Øˆ
ˆ
ˆ
ˆ
ˆ
r?   N©r<   rœ   r4   rŸ   )
rÕ   rÖ   r×   rØ   rÙ   rv  r©   rÁ   r�  rŸ  r¯   r?   r=   r˜  r˜  Š  sw   € € € € € € ðð ð !€OàÐÐÑØ#ðð ð ð ðð ð ð-ð -ð -ðð ð ð ð r?   r˜  c                  ó(   — e Zd ZdZej        Zdd„ZdS )ÚSetz«Class representing an :class:`ast.Set` node.

    >>> import astroid
    >>> node = astroid.extract_node('{1, 2, 3}')
    >>> node
    <Set.set l.1 at 0x7f23b2e71d68>
    r4   úLiteral['builtins.set']c                ó   — dS )r¾   zbuiltins.setr¯   r·   s    r=   r¿   z
Set.pytype±  s	   € ð
 ˆ~r?   N)r4   r¤  )rÕ   rÖ   r×   rØ   r   Úset_infer_unary_oprž  r¿   r¯   r?   r=   r£  r£  ¦  s<   € € € € € ðð ð Ô1€Nðð ð ð ð ð r?   r£  c                  óš   — e Zd ZU dZdZded<   	 ded<   	 ded<   	 dd	„Zd
„ Zedd„¦   «         Z	d d„Z
d!d„Z	 d"d#d„Zd"d$d„Zd„ Z	 d"d%d„ZdS )&rŒ   zæClass representing an :class:`ast.Slice` node.

    >>> import astroid
    >>> node = astroid.extract_node('things[1:3]')
    >>> node
    <Subscript l.1 at 0x7f23b2e71f60>
    >>> node.slice
    <Slice l.1 at 0x7f23b2e71e80>
    ©r‚   rƒ   r„   rœ   r‚   rƒ   r„   r4   rŸ   c                ó0   — || _         || _        || _        d S r7   r¨  )r¦   r‚   rƒ   r„   s       r=   r©   zSlice.postinitÏ  s   € ð ˆŒ
ØˆŒ
ØˆŒ	ˆ	ˆ	r?   c                ó:   — |st          |¦  «        }| |_        |S |S )z7Wrap the empty attributes of the Slice in a Const node.)r°   r‡   )r¦   ÚattrÚconsts      r=   Ú_wrap_attributezSlice._wrap_attributeÙ  s(   € àð 	Ý! $Ñ'Ô'ˆEØˆEŒLØˆLØˆr?   únodes.ClassDefc                ó^   — t          ¦   «         j        }|                     d¦  «        d         S )Nr†   r   )r&   Úbuiltins_modulerE  )r¦   Úbuiltinss     r=   rŽ  zSlice._proxiedá  s)   € å!Ñ#Ô#Ô3ˆØ×Ò Ñ(Ô(¨Ô+Ð+r?   úLiteral['builtins.slice']c                ó   — dS )r¾   zbuiltins.slicer¯   r·   s    r=   r¿   zSlice.pytypeæ  ó
   € ð
  Ðr?   úLiteral['Slice']c                ó   — dS )zVA human readable type of this node.

        :returns: The type of this node.
        rŒ   r¯   r·   s    r=   Údisplay_typezSlice.display_typeí  s	   € ð
 ˆwr?   Nr�  r¼   rG   rH   ú#Iterator[SuccessfulInferenceResult]c              #  ó  K  — |dk    r|                       | j        ¦  «        V — dS |dk    r|                       | j        ¦  «        V — dS |dk    r|                       | j        ¦  «        V — dS |                      ||¬¦  «        E d{V —† dS )z¶Infer the possible values of the given attribute on the slice.

        :param attrname: The name of the attribute to infer.

        :returns: The inferred possible values.
        ÚstartÚstopr„   rr   N)r­  r‚   rƒ   r„   rE  ©r¦   r�  rG   s      r=   r�  zSlice.igetattrô  s½   è è € ð �wÒÐØ×&Ò& t¤zÑ2Ô2Ð2Ð2Ð2Ð2Ð2Ø˜ÒÐØ×&Ò& t¤zÑ2Ô2Ð2Ð2Ð2Ð2Ð2Ø˜ÒÐØ×&Ò& t¤yÑ1Ô1Ð1Ð1Ð1Ð1Ð1à—|’| H°g�|Ñ>Ô>Ð>Ð>Ð>Ð>Ð>Ð>Ð>Ð>Ð>r?   c                ó8   — | j                              ||¦  «        S r7   )rŽ  rE  r¼  s      r=   rE  zSlice.getattr  s   € ØŒ}×$Ò$ X¨wÑ7Ô7Ð7r?   c              #  ón   K  — | j         �	| j         V — | j        �	| j        V — | j        �| j        V — d S d S r7   r¨  r·   s    r=   rÁ   zSlice.get_children	  sQ   è è € ØŒ:Ð!Ø”*ÐÐÐàŒ:Ð!Ø”*ÐÐÐàŒ9Ð Ø”)ˆOˆOˆOˆOˆOð !Ð r?   rÂ   r
   úIterator[Slice]c              +  ó   K  — | V — d S r7   r¯   r¢  s      r=   rÌ   zSlice._infer  r›  r?   )r‚   rœ   rƒ   rœ   r„   rœ   r4   rŸ   )r4   r®  )r4   r²  )r4   rµ  r7   )r�  r¼   rG   rH   r4   r¸  rù  )rG   rH   rÂ   r
   r4   r¿  )rÕ   rÖ   r×   rØ   rÙ   rv  r©   r­  r   rŽ  r¿   r·  r�  rE  rÁ   rÌ   r¯   r?   r=   rŒ   rŒ   ¹  s%  € € € € € € ðð ð 1€OàÐÐÑØ'àÐÐÑØ'àÐÐÑØ+ðð ð ð ðð ð ð ð,ð ,ð ,ñ „_ð,ð ð  ð  ð  ðð ð ð ð AEð?ð ?ð ?ð ?ð ?ð$8ð 8ð 8ð 8ð 8ðð ð ð 26ðð ð ð ð ð ð r?   rŒ   c                  óX   ‡ — e Zd ZU dZdZdZded<   	 dˆ fd„Zdd„Ze	j
        Z	 d„ Zˆ xZS )rÆ   z«Class representing an :class:`ast.Starred` node.

    >>> import astroid
    >>> node = astroid.extract_node('*args')
    >>> node
    <Starred l.1 at 0x7f23b2e41978>
    r;   rk  r)   r<   rl  r   r™   rt   r›   r‡   r�   rš   rž   r4   rŸ   c               ód   •— || _         	 t          ¦   «                              |||||¬¦  «         d S r¡   ro  rp  s          €r=   r¤   zStarred.__init__(  sI   ø€ ð ˆŒØEå‰Œ×ÒØØ!Ø!Ø)Øð 	ñ 	
ô 	
ð 	
ð 	
ð 	
r?   c                ó   — || _         d S r7   r;   rç  s     r=   r©   zStarred.postinit=  r¦  r?   c              #  ó   K  — | j         V — d S r7   r;   r·   s    r=   rÁ   zStarred.get_childrenE  ré  r?   ©rl  r   r™   rt   r›   rt   r‡   r)   r�   rš   rž   rš   r4   rŸ   rî  )rÕ   rÖ   r×   rØ   rÙ   r  rv  r¤   r©   r   Ústarred_assigned_stmtsrì   rÁ   rÞ   rß   s   @r=   rÆ   rÆ     s“   ø€ € € € € € ðð ð !€OØ€Mà€M€M�MØ!ð
ð 
ð 
ð 
ð 
ð 
ð*ð ð ð ð Ô5€Nððð ð ð ð ð ð r?   rÆ   c                  óÖ   ‡ — e Zd ZU dZ e¦   «         ZdZdZded<   	 ded<   	 dˆ fd„Z	dd„Z
d„ Z	 d d!d„Zej        ej        d d"d„¦   «         ¦   «         Zej        d d"d„¦   «         Zˆ xZS )#Ú	SubscriptzµClass representing an :class:`ast.Subscript` node.

    >>> import astroid
    >>> node = astroid.extract_node('things[1:3]')
    >>> node
    <Subscript l.1 at 0x7f23b2e71f60>
    ©r<   r†   rk  r)   r<   r†   rl  r   r™   rt   r›   r‡   r�   rš   rž   r4   rŸ   c               ód   •— || _         	 t          ¦   «                              |||||¬¦  «         d S r¡   ro  rp  s          €r=   r¤   zSubscript.__init__\  sI   ø€ ð ˆŒØIå‰Œ×ÒØØ!Ø!Ø)Øð 	ñ 	
ô 	
ð 	
ð 	
ð 	
r?   c                ó"   — || _         || _        d S r7   rÉ  )r¦   r<   r†   s      r=   r©   zSubscript.postinitr  s   € ØˆŒ
ØˆŒ
ˆ
ˆ
r?   c              #  ó.   K  — | j         V — | j        V — d S r7   rÉ  r·   s    r=   rÁ   zSubscript.get_childrenv  s(   è è € ØŒjÐÐÐØŒjÐÐÐÐÐr?   NrG   rH   rÂ   r
   rç   c           	   +  ón  K  — ddl m} d}| j                             |¦  «        D �]{}t	          |t
          j        ¦  «        rt
          j        V —  dS | j                             |¦  «        D �]1}t	          |t
          j        ¦  «        rt
          j        V —   dS | j	        }|j
        t          k    r|}n,|j
        t          k    r|                     |¦  «        }|r|}n|}|| j	        u rt          | |¬¦  «        ‚	 |                     ||¦  «        }	n=# t          t           t"          t$          t&          f$ r}
t          | |¬¦  «        |
‚d}
~
ww xY w| |	u st	          |	t
          j        ¦  «        rt
          j        V —   dS |	                     |¦  «        E d{V —† d}�Œ3�Œ}|rt)          | |¬¦  «        S dS )z÷Inference for subscripts.

        We're understanding if the index is a Const
        or a slice, passing the result of inference
        to the value's `getitem` method, which should
        handle each supported index type accordingly.
        r   )ÚhelpersFNrJ   T)ÚastroidrÎ  r<   rP   r8   r   rQ   rM   r†   Ú_SUBSCRIPT_SENTINELr�   r   Úclass_instance_as_indexr    r�  r   r   r   r   r‘  r+   )r¦   rG   rÂ   rÎ  Ú	found_oner<   rx   rŽ  Úinstance_as_indexÚassignedr”   s              r=   Ú_infer_subscriptzSubscript._infer_subscriptz  s  è è € ð 	$Ð#Ð#Ð#Ð#Ð#àˆ	Ø”Z×%Ò% gÑ.Ô.ð (	!ñ (	!ˆEÝ˜%¥Ô!5Ñ6Ô6ð ÝÔ&Ð&Ð&Ð&Ø�t�tØœ×)Ò)¨'Ñ2Ô2ð $!ñ $!�Ý˜e¥TÔ%9Ñ:Ô:ð  ÝÔ*Ð*Ð*Ð*Ø˜4˜4˜4ð #Ô6�Ø”?¥hÒ.Ð.Ø"'�K�KØ”_­Ò0Ð0Ø(/×(GÒ(GÈÑ(NÔ(NÐ%Ø(ð 8Ø&7˜øà"'�Kà $Ô":Ð:Ð:Ý(¨d¸GÐDÑDÔDÐDð	NØ$Ÿ}š}¨[¸'ÑBÔB�H�Høå$Ý%Ý%Ý+Ý"ðð Nð Nð Nõ )¨d¸GÐDÑDÔDÈ#ÐMøøøøðNøøøð ˜8Ð#Ð#¥z°(½DÔ<PÑ'QÔ'QÐ#ÝÔ*Ð*Ð*Ð*Ø˜4˜4˜4Ø#Ÿ>š>¨'Ñ2Ô2Ð2Ð2Ð2Ð2Ð2Ð2Ð2Ø �	‘	ñI$!ðL ð 	BÝ%¨4¸ÐAÑAÔAÐAØˆts   Ã=DÄ#EÄ7E	Å	Ec                ó   —  | j         |fi |¤ŽS r7   ©rÕ  r¢  s      r=   rÌ   zSubscript._inferµ  s   € ð %ˆtÔ$ WÐ7Ð7°Ð7Ð7Ð7r?   c                ó   —  | j         |fi |¤ŽS r7   r×  r¢  s      r=   r  zSubscript.infer_lhsº  s   € à$ˆtÔ$ WÐ7Ð7°Ð7Ð7Ð7r?   rÅ  )r<   r)   r†   r)   r4   rŸ   r7   r  )rG   rH   rÂ   r
   )rÕ   rÖ   r×   rØ   rö  rÐ  rÙ   r  rv  r¤   r©   rÁ   rÕ  r   rÝ   r  rÌ   r  rÞ   rß   s   @r=   rÈ  rÈ  I  s  ø€ € € € € € ðð ð !˜&™(œ(ÐØ(€OØ€Mà€M€M�MØ à€M€M�MØ)ð
ð 
ð 
ð 
ð 
ð 
ð,ð ð ð ðð ð ð
 26ð9ð 9ð 9ð 9ð 9ðv Ô)ØÔð8ð 8ð 8ð 8ñ Ôñ *Ô)ð8ð Ô)ð8ð 8ð 8ð 8ñ *Ô)ð8ð 8ð 8ð 8ð 8r?   rÈ  c                  óH   ‡ — e Zd ZdZdZdZdˆ fd„Zdd„Zd„ Zdd„Z	d„ Z
ˆ xZS )r`   a@  Class representing a :class:`ast.Try` node.

    >>> import astroid
    >>> node = astroid.extract_node('''
        try:
            do_something()
        except Exception as error:
            print("Error!")
        finally:
            print("Cleanup!")
        ''')
    >>> node
    <Try l.2 at 0x7f23b2e41d68>
    ©r[   rZ   r\   Ú	finalbodyr™   rt   r›   r�   rž   r‡   r)   r4   rŸ   c               ó”   •— g | _         	 g | _        	 g | _        	 g | _        	 t	          ¦   «                              |||||¬¦  «         dS ©áÐ  
        :param lineno: The line that this node appears on in the source code.

        :param col_offset: The column that this node appears on in the
            source code.

        :param parent: The parent node in the syntax tree.

        :param end_lineno: The last line this node appears on in the source code.

        :param end_col_offset: The end column this node appears on in the
            source code. Note: This is after the last symbol.
        r¢   N©r[   rZ   r\   rÛ  r£   r¤   ©r¦   r™   r›   r�   rž   r‡   r�   s         €r=   r¤   zTry.__init__Ò  sg   ø€ ð, #%ˆŒ	ØAà-/ˆŒØ%à$&ˆŒØ1à')ˆŒØ4å‰Œ×ÒØØ!Ø!Ø)Øð 	ñ 	
ô 	
ð 	
ð 	
ð 	
r?   r[   r¯  rZ   úlist[ExceptHandler]r\   rÛ  c               ó>   — || _         || _        || _        || _        dS )a&  Do some setup after initialisation.

        :param body: The contents of the block to catch exceptions from.

        :param handlers: The exception handlers.

        :param orelse: The contents of the ``else`` block.

        :param finalbody: The contents of the ``finally`` block.
        NrÚ  ©r¦   r[   rZ   r\   rÛ  s        r=   r©   zTry.postinitü  s$   € ð$ ˆŒ	Ø ˆŒØˆŒØ"ˆŒˆˆr?   c                ó   — |S r7   r¯   r1  s      r=   r2  zTry._infer_name  r;  r?   rE  c                óB  — || j         k    r||fS | j        rD| j        d         j         |cxk    r| j        d         j        k    rn n|| j        d         j        fS | j        D ]e}|j        r||j        j         k    r||fc S |j        d         j         |cxk    r|j        d         j        k    rn ŒO||j        d         j        fc S Œf| j        ra| j        d         j         dz
  |k    r||fS | j        d         j         |cxk    r| j        d         j        k    rn n|| j        d         j        fS | j        ra| j        d         j         dz
  |k    r||fS | j        d         j         |cxk    r| j        d         j        k    rn n|| j        d         j        fS || j        fS ©z=Get a range from a given line number to where this node ends.r   rM  rX   ©r4  r[   r  rZ   ru   r\   rÛ  ©r¦   r™   Ú	exhandlers      r=   rJ  zTry.block_range  óö  € à�T”_Ò$Ð$Ø˜6�>Ð!ØŒ9ð 	2˜œ 1œÔ0°FÐTÐTÒTÐT¸d¼iÈ¼mÔ>TÒTÐTÐTÐTÐTà˜4œ9 Rœ=Ô1Ð1Ð1Øœð 	;ð 	;ˆIØŒ~ð & &¨I¬NÔ,EÒ"EÐ"EØ˜v�~Ð%Ð%Ð%ØŒ~˜aÔ Ô+¨vÐTÐTÒTÐT¸¼ÈÔ9KÔ9TÒTÐTÐTÐTÐTØ˜yœ~¨bÔ1Ô:Ð:Ð:Ð:Ð:ð UàŒ;ð 	8ØŒ{˜1Œ~Ô(¨1Ñ,°Ò6Ð6Ø˜v�~Ð%ØŒ{˜1Œ~Ô(¨FÐNÐNÒNÐN°d´kÀ"´oÔ6NÒNÐNÐNÐNÐNØ˜tœ{¨2œÔ7Ð7Ð7ØŒ>ð 	;ØŒ~˜aÔ Ô+¨aÑ/°6Ò9Ð9Ø˜v�~Ð%ØŒ~˜aÔ Ô+¨vÐTÐTÒTÐT¸¼ÈÔ9KÔ9TÒTÐTÐTÐTÐTØ˜tœ~¨bÔ1Ô:Ð:Ð:Ø�t”}Ð$Ð$r?   c              #  ór   K  — | j         E d {V —† | j        E d {V —† | j        E d {V —† | j        E d {V —† d S r7   rÚ  r·   s    r=   rÁ   zTry.get_children.  ót   è è € Ø”9ÐÐÐÐÐÐÐØ”=Ð Ð Ð Ð Ð Ð Ð Ø”;ÐÐÐÐÐÐÐØ”>Ð!Ð!Ð!Ð!Ð!Ð!Ð!Ð!Ð!r?   )r™   rt   r›   rt   r�   rt   rž   rt   r‡   r)   r4   rŸ   )
r[   r¯  rZ   rá  r\   r¯  rÛ  r¯  r4   rŸ   rW  ©rÕ   rÖ   r×   rØ   rÙ   r	  r¤   r©   r2  rJ  rÁ   rÞ   rß   s   @r=   r`   r`   ¿  sœ   ø€ € € € € ðð ð B€OØJÐð(
ð (
ð (
ð (
ð (
ð (
ðT#ð #ð #ð #ð.ð ð ð%ð %ð %ð %ð0"ð "ð "ð "ð "ð "ð "r?   r`   c                  ób   ‡ — e Zd ZdZdZdZddddddœdˆ fd„Zdddddœdd„Zd„ Zdd„Z	d„ Z
ˆ xZS )ÚTryStarz0Class representing an :class:`ast.TryStar` node.rÚ  Nr¢   r™   rš   r›   r�   rž   r‡   rœ   r4   rŸ   c               ó”   •— g | _         	 g | _        	 g | _        	 g | _        	 t	          ¦   «                              |||||¬¦  «         dS )aÌ  
        :param lineno: The line that this node appears on in the source code.
        :param col_offset: The column that this node appears on in the
            source code.
        :param parent: The parent node in the syntax tree.
        :param end_lineno: The last line this node appears on in the source code.
        :param end_col_offset: The end column this node appears on in the
            source code. Note: This is after the last symbol.
        r¢   Nrß  rà  s         €r=   r¤   zTryStar.__init__;  sg   ø€ ð$ #%ˆŒ	ØAà-/ˆŒØ%à$&ˆŒØ1à')ˆŒØ4å‰Œ×ÒØØ!Ø!Ø)Øð 	ñ 	
ô 	
ð 	
ð 	
ð 	
r?   r[   r$  rZ   úlist[ExceptHandler] | Noner\   rÛ  c               óR   — |r|| _         |r|| _        |r|| _        |r	|| _        dS dS )a"  Do some setup after initialisation.
        :param body: The contents of the block to catch exceptions from.
        :param handlers: The exception handlers.
        :param orelse: The contents of the ``else`` block.
        :param finalbody: The contents of the ``finally`` block.
        NrÚ  rã  s        r=   r©   zTryStar.postinita  sN   € ð ð 	ØˆDŒIØð 	%Ø$ˆDŒMØð 	!Ø ˆDŒKØð 	'Ø&ˆDŒNˆNˆNð	'ð 	'r?   c                ó   — |S r7   r¯   r1  s      r=   r2  zTryStar._infer_namex  r;  r?   rt   rE  c                óB  — || j         k    r||fS | j        rD| j        d         j         |cxk    r| j        d         j        k    rn n|| j        d         j        fS | j        D ]e}|j        r||j        j         k    r||fc S |j        d         j         |cxk    r|j        d         j        k    rn ŒO||j        d         j        fc S Œf| j        ra| j        d         j         dz
  |k    r||fS | j        d         j         |cxk    r| j        d         j        k    rn n|| j        d         j        fS | j        ra| j        d         j         dz
  |k    r||fS | j        d         j         |cxk    r| j        d         j        k    rn n|| j        d         j        fS || j        fS ræ  rç  rè  s      r=   rJ  zTryStar.block_range{  rê  r?   c              #  ór   K  — | j         E d {V —† | j        E d {V —† | j        E d {V —† | j        E d {V —† d S r7   rÚ  r·   s    r=   rÁ   zTryStar.get_children“  rì  r?   )r™   rš   r›   rš   r�   rš   rž   rš   r‡   rœ   r4   rŸ   )
r[   r$  rZ   rñ  r\   r$  rÛ  r$  r4   rŸ   rW  rí  rß   s   @r=   rï  rï  5  sÈ   ø€ € € € € Ø:Ð:àA€OØJÐð
 "Ø!%Ø!%Ø%)Ø $ð$
ð $
ð $
ð $
ð $
ð $
ð $
ð $
ðR %)Ø/3Ø&*Ø)-ð'ð 'ð 'ð 'ð 'ð 'ð.ð ð ð%ð %ð %ð %ð0"ð "ð "ð "ð "ð "ð "r?   rï  c                  óx   ‡ — e Zd ZdZdZ	 	 	 	 ddddœdˆ fd„Zej        Z	 ej	        Z
ej        Zdd„Zddd„Zˆ xZS )rD   z±Class representing an :class:`ast.Tuple` node.

    >>> import astroid
    >>> node = astroid.extract_node('(1, 2, 3)')
    >>> node
    <Tuple.tuple l.1 at 0x7f23b2e41780>
    rk  Nr  rl  rm  r™   rš   r›   r‡   rœ   r�   rž   r4   rŸ   c               ód   •— || _         	 t          ¦   «                              |||||¬¦  «         dS )a  
        :param ctx: Whether the tuple is assigned to or loaded from.

        :param lineno: The line that this node appears on in the source code.

        :param col_offset: The column that this node appears on in the
            source code.

        :param parent: The parent node in the syntax tree.

        :param end_lineno: The last line this node appears on in the source code.

        :param end_col_offset: The end column this node appears on in the
            source code. Note: This is after the last symbol.
        r¢   Nro  rp  s          €r=   r¤   zTuple.__init__¥  sI   ø€ ð2 $'ˆŒØ>å‰Œ×ÒØØ!Ø!Ø)Øð 	ñ 	
ô 	
ð 	
ð 	
ð 	
r?   úLiteral['builtins.tuple']c                ó   — dS )r¾   zbuiltins.tupler¯   r·   s    r=   r¿   zTuple.pytypeÑ  r´  r?   rG   rH   c                ó2   — t          | | j        ||¬¦  «        S rt  ru  rv  s      r=   r�  zTuple.getitemØ  rw  r?   rœ  rx  )r4   rø  r7   rù  )rÕ   rÖ   r×   rØ   r  r¤   r   ry  rì   Útuple_infer_unary_oprž  r{  r   r¿   r�  rÞ   rß   s   @r=   rD   rD   š  sË   ø€ € € € € ðð ð €Mð #Ø!Ø!%Ø $ð"
ð "&Ø%)ð"
ð "
ð "
ð "
ð "
ð "
ð "
ð "
ðH Ô6€Nðð Ô3€NØÔ2€Oð ð  ð  ð  ðKð Kð Kð Kð Kð Kð Kð Kð Kr?   rD   c                  ót   ‡ — e Zd ZU dZdZded<   ded<   ded<   dˆ fd„Zdd„Z	 ddd„Ze	j
        Zded<   ˆ xZS ) Ú	TypeAliaszÉClass representing a :class:`ast.TypeAlias` node.

    >>> import astroid
    >>> node = astroid.extract_node('type Point = tuple[float, float]')
    >>> node
    <TypeAlias l.1 at 0x7f23b2e4e198>
    ©rã   Útype_paramsr<   rE   rã   ú(list[TypeVar | ParamSpec | TypeVarTuple]rÿ  r)   r<   r™   rt   r›   r‡   r�   rž   r4   rŸ   c               óT   •— t          ¦   «                              |||||¬¦  «         d S r¡   ró  r¥   s         €r=   r¤   zTypeAlias.__init__ð  rô  r?   c               ó0   — || _         || _        || _        d S r7   rþ  )r¦   rã   rÿ  r<   s       r=   r©   zTypeAlias.postinit  s   € ð ˆŒ	Ø&ˆÔØˆŒ
ˆ
ˆ
r?   NrG   rH   rÂ   r
   úIterator[TypeAlias]c              +  ó   K  — | V — d S r7   r¯   r¢  s      r=   rÌ   zTypeAlias._infer  r›  r?   ziClassVar[Callable[[TypeAlias, AssignName, InferenceContext | None, None], Generator[NodeNG, None, None]]]rì   r†  )rã   rE   rÿ  r   r<   r)   r4   rŸ   r7   )rG   rH   rÂ   r
   r4   r  )rÕ   rÖ   r×   rØ   rÙ   rv  r¤   r©   rÌ   r   r¾  rì   rÞ   rß   s   @r=   rý  rý  á  sÄ   ø€ € € € € € ðð ð 7€OàÐÐÑØ9Ð9Ð9Ñ9Ø€M€M�Mð
ð 
ð 
ð 
ð 
ð 
ð"	ð 	ð 	ð 	ð 26ðð ð ð ð ð 	Ô'ð ð 
(ð 
(ð 
(ñ 
(ð 
(ð 
(ð 
(ð 
(r?   rý  c                  ó`   ‡ — e Zd ZU dZdZded<   ded<   dˆ fd„Zdd„Z	 ddd„Ze	j
        Zˆ xZS )ÚTypeVarz×Class representing a :class:`ast.TypeVar` node.

    >>> import astroid
    >>> node = astroid.extract_node('type Point[T] = tuple[float, float]')
    >>> node.type_params[0]
    <TypeVar l.1 at 0x7f23b2e4e198>
    ©rã   rA   rE   rã   rœ   rA   r™   rt   r›   r‡   r)   r�   rž   r4   rŸ   c               óT   •— t          ¦   «                              |||||¬¦  «         d S r¡   ró  r¥   s         €r=   r¤   zTypeVar.__init__,  rô  r?   c               ó"   — || _         || _        d S r7   r  )r¦   rã   rA   s      r=   r©   zTypeVar.postinit=  r   r?   NrG   rH   rÂ   r
   úIterator[TypeVar]c              +  ó   K  — | V — d S r7   r¯   r¢  s      r=   rÌ   zTypeVar._inferA  r›  r?   r†  )rã   rE   rA   rœ   r4   rŸ   r7   )rG   rH   rÂ   r
   r4   r
  rˆ  rß   s   @r=   r  r    s¤   ø€ € € € € € ðð ð (€OàÐÐÑØÐÐÑð
ð 
ð 
ð 
ð 
ð 
ð"ð ð ð ð
 26ðð ð ð ð ð
 Ô:€Nðð ð ð r?   r  c                  óV   ‡ — e Zd ZU dZdZded<   dˆ fd„Zdd„Z	 ddd„Ze	j
        Zˆ xZS )ÚTypeVarTuplezÚClass representing a :class:`ast.TypeVarTuple` node.

    >>> import astroid
    >>> node = astroid.extract_node('type Alias[*Ts] = tuple[*Ts]')
    >>> node.type_params[0]
    <TypeVarTuple l.1 at 0x7f23b2e4e198>
    râ   rE   rã   r™   rt   r›   r‡   r)   r�   rž   r4   rŸ   c               óT   •— t          ¦   «                              |||||¬¦  «         d S r¡   ró  r¥   s         €r=   r¤   zTypeVarTuple.__init__Y  rô  r?   c               ó   — || _         d S r7   râ   rb  s     r=   r©   zTypeVarTuple.postinitj  rª   r?   NrG   rH   rÂ   r
   úIterator[TypeVarTuple]c              +  ó   K  — | V — d S r7   r¯   r¢  s      r=   rÌ   zTypeVarTuple._inferm  r›  r?   r†  r‡  r7   )rG   rH   rÂ   r
   r4   r  rˆ  rß   s   @r=   r  r  L  rŠ  r?   r  Ú__pos__Ú__neg__Ú
__invert__)ú+ú-ú~Únotc                  ó¨   ‡ — e Zd ZU dZdZdZded<   	 d!ˆ fd„Zd"d„Zd#d$d„Z	d„ Z
ˆ fd„Z	 d#d%d„Zej        ej        	 d#d&d „¦   «         ¦   «         Zˆ xZS )'ÚUnaryOpz¨Class representing an :class:`ast.UnaryOp` node.

    >>> import astroid
    >>> node = astroid.extract_node('-5')
    >>> node
    <UnaryOp l.1 at 0x7f23b2e4e198>
    ©ÚoperandrÊ  r)   r  rË  r¼   r™   rt   r›   r‡   r�   rš   rž   r4   rŸ   c               ód   •— || _         	 t          ¦   «                              |||||¬¦  «         d S r¡   rÍ  rÎ  s          €r=   r¤   zUnaryOp.__init__�  rþ  r?   c                ó   — || _         d S r7   r  )r¦   r  s     r=   r©   zUnaryOp.postinit¤  r·  r?   NrG   rH   c                ól   — 	 |                       |¬¦  «        }d„ |D ¦   «         S # t          $ r g cY S w xY w)a#  Get a list of type errors which can occur during inference.

        Each TypeError is represented by a :class:`BadUnaryOperationMessage`,
        which holds the original exception.

        :returns: The list of possible type errors.
        :rtype: list(BadUnaryOperationMessage)
        rr   c                óF   — g | ]}t          |t          j        ¦  «        ¯|‘ŒS r¯   )r8   r   ÚBadUnaryOperationMessagerÖ  s     r=   r³   z'UnaryOp.type_errors.<locals>.<listcomp>²  s;   € ð ð ð àÝ˜f¥dÔ&CÑDÔDðØðð ð r?   )Ú_infer_unaryopr    rÙ  s      r=   rÛ  zUnaryOp.type_errors§  sd   € ð	Ø×)Ò)°'Ð)Ñ:Ô:ˆGðð à%ðñ ô ð øõ
 ð 	ð 	ð 	ØˆIˆIˆIð	øøørÜ  c              #  ó   K  — | j         V — d S r7   r  r·   s    r=   rÁ   zUnaryOp.get_childrenº  s   è è € ØŒlÐÐÐÐÐr?   c                ó~   •— | j         dk    rt          | j                  S t          ¦   «                              ¦   «         S )Nr  )rË  r(   r£   r  rà  s    €r=   r  zUnaryOp.op_precedence½  s3   ø€ ØŒ7�eÒÐÝ  ¤Ô)Ð)å‰wŒw×$Ò$Ñ&Ô&Ð&r?   r¦   únodes.UnaryOprÂ   r
   úTGenerator[InferenceResult | util.BadUnaryOperationMessage, None, InferenceErrorInfo]c              +  ó  K  — ddl m} | j                             |¦  «        D �]\}	 |                     | j        ¦  «        V — Œ!# t          $ r'}t          j        || j        |¦  «        V — Y d}~ŒMd}~wt          $ �r }t          | j                 }|€R|                     ¦   «         }t          |t          j        ¦  «        st          | ¦  «        V — �nŸt          j        V — �n�t          |t           |f¦  «        s"t          j        || j        |¦  «        V — Y d}~Œú	 	 t#          j        ||¦  «        }n2# t&          $ r% t          j        || j        |¦  «        V — Y Y d}~�Œ@w xY w|d         }t)          |                     |¬¦  «        d¦  «        }	t          |	t          j        ¦  «        s|	                     ¦   «         sY d}~�Œ¤t-          |¦  «        }||_        t1          g |	¬¦  «        |_        |	                     | |¬¦  «        }
t)          |
d¦  «        }|€|V — n|V — nM# t&          $ r'}t          j        || j        |¦  «        V — Y d}~n!d}~wt6          $ r t          j        V — Y nw xY wY d}~�ŒVd}~ww xY wdS )ú3Infer what an UnaryOp should return when evaluated.r   r‡  Nrr   )r  rE  )r‹  rˆ  r  rP   rž  rË  r�   r   r!  r‘  ÚUNARY_OP_METHODr»   r8   rQ   r°   rM   r   r%   rú   r   rO   Úcallabler   r�  r   rI  rD  r    )r¦   rG   rÂ   rˆ  r  r”   Úmethr»   ÚmethodsrT   Úcall_resultsrG  Ú	inner_excs                r=   r"  zUnaryOp._infer_unaryopÃ  s  è è € ð 	+Ð*Ð*Ð*Ð*Ð*à”|×)Ò)¨'Ñ2Ô2ð 6	/ñ 6	/ˆGð5/Ø×,Ò,¨T¬WÑ5Ô5Ð5Ð5Ð5Ð5øÝð Kð Kð KåÔ3°G¸T¼WÀcÑJÔJÐJÐJÐJÐJÐJÐJÐJÐJøøøøÝ!ð 0/ñ 0/ð 0/Ý& t¤wÔ/�Ø�<ð ")×!3Ò!3Ñ!5Ô!5�JÝ% jµ$Ô2FÑGÔGð /Ý+°
¨NÑ;Ô;Ð;Ð;Ð;Ñ;å"Ô.Ð.Ð.Ð.Ñ.å% gµ¸(Ð/CÑDÔDð !õ #Ô;¸GÀTÄWÈcÑRÔRÐRÐRÐRØ ˜˜˜˜ð/ð%Ý&3Ô&:¸7ÀDÑ&IÔ&I˜G˜GøÝ6ð %ð %ð %Ý"&Ô"?ÀÈÌÐRUÑ"VÔ"VÐVÐVÐVØ$˜H˜H˜H˜H™Hð%øøøð  ' qœz˜Ý#'¨¯
ª
¸7¨
Ñ(CÔ(CÀTÑ#JÔ#J˜å& xµÔ1EÑFÔFð%à#+×#4Ò#4Ñ#6Ô#6ð%ð %˜H˜H˜H™Hå".¨wÑ"7Ô"7˜Ø,3˜Ô)Ý.9¸rÈ(Ð.SÑ.SÔ.S˜Ô+à'/×'AÒ'AÀ$ÐPWÐ'AÑ'XÔ'X˜Ý!% l°DÑ!9Ô!9˜Ø!˜>à")˜M˜M˜M˜Mà"(˜L˜L˜LøøÝ2ð Yð Yð Yå"Ô;¸GÀTÄWÈiÑXÔXÐXÐXÐXÐXÐXÐXÐXÐXøøøøÝ)ð /ð /ð /Ý"Ô.Ð.Ð.Ð.Ð.Ð.ð/øøøøøøøùøøøøð_0/øøøð6	/ð 6	/s€   §AÁ
I>ÁA0Á0I>Á>BI9ÄD5Ä4H&Ä5'E$ÅH&Å#E$Å$AH&ÇAH&È%I9È&
I0È0IÉI9ÉI0É-I9É/I0É0I9É9I>r…  c              +  ó€   K  — |                       | j        |t          j        ¦  «        E d{V —† t	          | |¬¦  «        S )r(  NrJ   )r÷  r"  r   r!  r+   r¢  s      r=   rÌ   zUnaryOp._infer  s`   è è € ð ×0Ò0ØÔ ­$Ô*Gñ
ô 
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
õ " t°WÐ=Ñ=Ô=Ð=r?   rø  )r  r)   r4   rŸ   r7   rù  )r¦   r%  rG   rH   rÂ   r
   r4   r&  )r¦   r%  rG   rH   rÂ   r
   r4   r…  )rÕ   rÖ   r×   rØ   rÙ   r  rv  r¤   r©   rÛ  rÁ   r  r"  r   rÝ   r  rÌ   rÞ   rß   s   @r=   r  r  €  s  ø€ € € € € € ðð ð #€OØ€Mà€O€O�OØ0ð
ð 
ð 
ð 
ð 
ð 
ð*ð ð ð ðð ð ð ð ð&ð ð ð'ð 'ð 'ð 'ð 'ð AEð>/ð >/ð >/ð >/ð >/ð@ Ô)ØÔà@Dð>ð >ð >ð >ñ Ôñ *Ô)ð>ð >ð >ð >ð >r?   r  c                  ó†   ‡ — e Zd ZU dZdZdZded<   	 ded<   	 ded<   	 dd„Zed„ ¦   «         Z	dd„Z
d„ Zˆ fd„Zˆ fd„Zˆ xZS )ÚWhilezØClass representing an :class:`ast.While` node.

    >>> import astroid
    >>> node = astroid.extract_node('''
    while condition():
        print("True")
    ''')
    >>> node
    <While l.2 at 0x7f23b2e4e390>
    r?  r  r)   rY   r¯  r[   r\   r4   rŸ   c                ó0   — || _         || _        || _        d S r7   r?  rA  s       r=   r©   zWhile.postinit'  s   € ð ˆŒ	ØˆŒ	ØˆŒˆˆr?   c                ó   — | j         j        S r  rD  r·   s    r=   r  zWhile.blockstart_tolineno1  r  r?   r™   rt   rE  c                ó8   — |                       || j        ¦  «        S )rG  )rH  r\   rI  s     r=   rJ  zWhile.block_range9  s   € ð ×&Ò& v¨t¬{Ñ;Ô;Ð;r?   c              #  óP   K  — | j         V — | j        E d {V —† | j        E d {V —† d S r7   r?  r·   s    r=   rÁ   zWhile.get_childrenC  rL  r?   c              #  ó–   •K  — | j                              ¦   «         E d{V —† t          ¦   «                              ¦   «         E d{V —† dS ©z1A While node can contain a Yield node in the testNrQ  rà  s    €r=   rº  z%While._get_yield_nodes_skip_functionsI  rR  r?   c              #  ó–   •K  — | j                              ¦   «         E d{V —† t          ¦   «                              ¦   «         E d{V —† dS r7  rT  rà  s    €r=   r¼  z#While._get_yield_nodes_skip_lambdasN  rU  r?   rV  rW  )rÕ   rÖ   r×   rØ   rÙ   r	  rv  r©   r   r  rJ  rÁ   rº  r¼  rÞ   rß   s   @r=   r1  r1    sæ   ø€ € € € € € ð	ð 	ð 1€OØ1Ðà€L€L�LØ,àÐÐÑØ#àÐÐÑØ-ðð ð ð ð ð"ð "ñ „_ð"ð<ð <ð <ð <ðð ð ð=ð =ð =ð =ð =ð
;ð ;ð ;ð ;ð ;ð ;ð ;ð ;ð ;r?   r1  c                  ó|   ‡ — e Zd ZdZdZdZdZ	 	 	 ddddœdˆ fd„Z	 	 	 ddd„Ze	j
        Z	 ed„ ¦   «         Zd„ Zˆ xZS )ÚWithzèClass representing an :class:`ast.With` node.

    >>> import astroid
    >>> node = astroid.extract_node('''
    with open(file_path) as file_:
        print(file_.read())
    ''')
    >>> node
    <With l.2 at 0x7f23b2e4e710>
    ©r½  r[   r³  rþ  Nr  r™   rš   r›   r‡   rœ   r�   rž   r4   rŸ   c               ó„   •— g | _         	 g | _        	 d| _        	 t          ¦   «                              |||||¬¦  «         dS ©rÞ  Nr¢   )r½  r[   r±  r£   r¤   r¥   s         €r=   r¤   zWith.__init__h  s^   ø€ ð, :<ˆŒ
ØOà"$ˆŒ	Ø1à.2ˆÔØXå‰Œ×ÒØØ!Ø!Ø)Øð 	ñ 	
ô 	
ð 	
ð 	
ð 	
r?   r½  ú)list[tuple[NodeNG, NodeNG | None]] | Noner[   r$  r±  c                ó8   — |�|| _         |�|| _        || _        dS )zËDo some setup after initialisation.

        :param items: The pairs of context managers and the names
            they are assigned to.

        :param body: The contents of the ``with`` block.
        N)r½  r[   r±  )r¦   r½  r[   r±  s       r=   r©   zWith.postinit�  s,   € ð ÐØˆDŒJØÐØˆDŒIØ.ˆÔÐÐr?   c                ó2   — | j         d         d         j        S )r  rM  r   )r½  r  r·   s    r=   r  zWith.blockstart_tolineno§  s   € ð Œz˜"Œ~˜aÔ Ô)Ð)r?   c              #  óR   K  — | j         D ]\  }}|V — |r|V — Œ| j        E d{V —† dS )zoGet the child nodes below this node.

        :returns: The children.
        :rtype: iterable(NodeNG)
        Nr;  )r¦   rŒ  Úvars      r=   rÁ   zWith.get_children¯  sX   è è € ð œð 	ð 	‰IˆD�#ØˆJˆJˆJØð Ø�	�	�	øØ”9ÐÐÐÐÐÐÐÐÐr?   r.  rÓ   )r½  r>  r[   r$  r±  rœ   r4   rŸ   )rÕ   rÖ   r×   rØ   rÙ   r½  r	  r¤   r©   r   Úwith_assigned_stmtsrì   r   r  rÁ   rÞ   rß   s   @r=   r:  r:  T  sÛ   ø€ € € € € ð
	ð 	ð (€OØ.ÐØ(Ðð "Ø!%Ø $ð	%
ð "&Ø%)ð%
ð %
ð %
ð %
ð %
ð %
ð %
ð %
ðR <@Ø$(Ø)-ð	/ð /ð /ð /ð /ð& Ô2€Nðð ð*ð *ñ „_ð*ð
ð 
ð 
ð 
ð 
ð 
ð 
r?   r:  c                  ó   — e Zd ZdZdS )Ú	AsyncWithz7Asynchronous ``with`` built with the ``async`` keyword.Nr2  r¯   r?   r=   rE  rE  ¼  s   € € € € € ØAÐAÐAÐAr?   rE  c                  ó>   — e Zd ZU dZdZded<   	 dd„Zd„ Zd	„ Zd
„ Z	dS )ÚYieldz¬Class representing an :class:`ast.Yield` node.

    >>> import astroid
    >>> node = astroid.extract_node('yield True')
    >>> node
    <Yield l.1 at 0x7f23b2e4e5f8>
    r;   rœ   r<   r4   rŸ   c                ó   — || _         d S r7   r;   rç  s     r=   r©   zYield.postinitÎ  r¦  r?   c              #  ó.   K  — | j         �| j         V — d S d S r7   r;   r·   s    r=   rÁ   zYield.get_childrenÑ  r›  r?   c              #  ó   K  — | V — d S r7   r¯   r·   s    r=   rº  z%Yield._get_yield_nodes_skip_functionsÕ  r   r?   c              #  ó   K  — | V — d S r7   r¯   r·   s    r=   r¼  z#Yield._get_yield_nodes_skip_lambdasØ  r   r?   Nr¡  rï  r¯   r?   r=   rG  rG  À  sw   € € € € € € ðð ð !€OàÐÐÑØðð ð ð ðð ð ðð ð ðð ð ð ð r?   rG  c                  ó   — e Zd ZdZdS )Ú	YieldFromz2Class representing an :class:`ast.YieldFrom` node.Nr2  r¯   r?   r=   rM  rM  Ü  s   € € € € € Ø<Ð<Ð<Ð<r?   rM  c                  ó   — e Zd ZdZdS )rË  z>Represents the unpacking of dicts into dicts using :pep:`448`.Nr2  r¯   r?   r=   rË  rË  à  s   € € € € € ØHÐHÐHÐHr?   rË  c                  óP   ‡ — e Zd ZdZdZdZ	 	 	 ddddœdˆ fd„Zddœdd„Zd„ Zˆ xZ	S )ÚFormattedValueaP  Class representing an :class:`ast.FormattedValue` node.

    Represents a :pep:`498` format string.

    >>> import astroid
    >>> node = astroid.extract_node('f"Format {type_}"')
    >>> node
    <JoinedStr l.1 at 0x7f23b2e4ed30>
    >>> node.values
    [<Const.str l.1 at 0x7f23b2e4eda0>, <FormattedValue l.1 at 0x7f23b2e4edd8>]
    ©r<   Úformat_spec)Ú
conversionNr  r™   rš   r›   r‡   rœ   r�   rž   r4   rŸ   c               óp   •— |  	 |  	 d| _         	 t          ¦   «                              |||||¬¦  «         dS r=  )rR  r£   r¤   r¥   s         €r=   r¤   zFormattedValue.__init__ô  sd   ø€ ð, 	ÐØ8àÐð	ð .2ˆÔð	õ 	‰Œ×ÒØØ!Ø!Ø)Øð 	ñ 	
ô 	
ð 	
ð 	
ð 	
r?   )rR  r<   r)   rS  rt   rR  úJoinedStr | Nonec               ó0   — || _         || _        || _        dS )a2  Do some setup after initialisation.

        :param value: The value to be formatted into the string.

        :param conversion: The type of formatting to be applied to the value.

        :param format_spec: The formatting to be applied to the value.
        :type format_spec: JoinedStr or None
        N)r<   rS  rR  )r¦   r<   rS  rR  s       r=   r©   zFormattedValue.postinit#  s    € ð  ˆŒ
Ø$ˆŒØ&ˆÔÐÐr?   c              #  ó@   K  — | j         V — | j        �| j        V — d S d S r7   rQ  r·   s    r=   rÁ   zFormattedValue.get_children7  s:   è è € ØŒjÐÐÐàÔÐ'ØÔ"Ð"Ð"Ð"Ð"Ð"ð (Ð'r?   r.  rÓ   )r<   r)   rS  rt   rR  rU  r4   rŸ   )
rÕ   rÖ   r×   rØ   rÙ   r  r¤   r©   rÁ   rÞ   rß   s   @r=   rP  rP  ä  s¨   ø€ € € € € ð
ð 
ð /€OØ#€Mð "Ø!%Ø $ð	-
ð "&Ø%)ð-
ð -
ð -
ð -
ð -
ð -
ð -
ð -
ðh )-ð'ð 'ð 'ð 'ð 'ð 'ð(#ð #ð #ð #ð #ð #ð #r?   rP  c                  óH   ‡ — e Zd ZdZdZ	 	 	 ddddœdˆ fd„Zddd„Zd„ Zˆ xZS )Ú	JoinedStrz¾Represents a list of string expressions to be joined.

    >>> import astroid
    >>> node = astroid.extract_node('f"Format {type_}"')
    >>> node
    <JoinedStr l.1 at 0x7f23b2e4ed30>
    r  Nr  r™   rš   r›   r‡   rœ   r�   rž   r4   rŸ   c               ód   •— g | _         	 t          ¦   «                              |||||¬¦  «         dS rÝ  )rÊ   r£   r¤   r¥   s         €r=   r¤   zJoinedStr.__init__I  sM   ø€ ð, %'ˆŒð	õ
 	‰Œ×ÒØØ!Ø!Ø)Øð 	ñ 	
ô 	
ð 	
ð 	
ð 	
r?   rÊ   r$  c                ó   — |�	|| _         dS dS )z–Do some setup after initialisation.

        :param value: The string expressions to be joined.

        :type: list(FormattedValue or Const)
        Nr  r  s     r=   r©   zJoinedStr.postinitm  s   € ð ÐØ ˆDŒKˆKˆKð Ðr?   c              #  ó$   K  — | j         E d {V —† d S r7   r  r·   s    r=   rÁ   zJoinedStr.get_childrenw  r  r?   r.  rÓ   r7   r/  r¹  rß   s   @r=   rY  rY  >  s™   ø€ € € € € ðð ð "€Oð "Ø!%Ø $ð	"
ð "&Ø%)ð"
ð "
ð "
ð "
ð "
ð "
ð "
ð "
ðH!ð !ð !ð !ð !ðð ð ð ð ð ð r?   rY  c                  ót   ‡ — e Zd ZdZdZdZ	 	 	 	 ddddœd ˆ fd„Zd!d„Zej	        Z
	 ddœd"d„Zd#d„Zd$d„Zˆ xZS )%rÇ   zÉRepresents the assignment from the assignment expression

    >>> import astroid
    >>> module = astroid.parse('if a := 1: pass')
    >>> module.body[0].test
    <NamedExpr l.1 at 0x7f23b2e4ed30>
    rÉ  TNr  r™   rš   r›   r‡   rœ   r�   rž   r4   rŸ   c               ó`   •— |  	 |  	 t          ¦   «                              |||||¬¦  «         dS rÝ  ró  r¥   s         €r=   r¤   zNamedExpr.__init__‹  sU   ø€ ð, 	Ðð	ð
 	ÐØ<å‰Œ×ÒØØ!Ø!Ø)Øð 	ñ 	
ô 	
ð 	
ð 	
ð 	
r?   rÂ  r)   r<   c                ó"   — || _         || _        d S r7   rÉ  rÐ  s      r=   r©   zNamedExpr.postinit²  rÑ  r?   )Úfuturer`  úLiteral[None, True]ú@nodes.FunctionDef | nodes.Module | nodes.ClassDef | nodes.Lambdac               óÊ  — |�t          j        dt          d¬¦  «         | j        st	          | ¬¦  «        ‚t          | j        t          t          t          f¦  «        ro| j        j        st	          | j        ¬¦  «        ‚| j        j        j        st	          | j        j        ¬¦  «        ‚| j        j        j         	                    ¦   «         S | j         	                    ¦   «         S )zµThe first parent frame node.

        A frame node is a :class:`Module`, :class:`FunctionDef`,
        or :class:`ClassDef`.

        :returns: The first parent frame node.
        Nz.The future arg will be removed in astroid 4.0.re  rf  r©  )
ri  rj  rk  r‡   r#   r8   r  rf  rv  rþ   )r¦   r`  s     r=   rþ   zNamedExpr.frame»  sÛ   € ð ÐÝŒMØ@Ý"Øðñ ô ð ð
 Œ{ð 	2Ý$¨DÐ1Ñ1Ô1Ð1õ �d”k¥I­w½Ð#FÑGÔGð 	5Ø”;Ô%ð =Ý(°´Ð<Ñ<Ô<Ð<Ø”;Ô%Ô,ð DÝ(°´Ô0BÐCÑCÔCÐCØ”;Ô%Ô,×2Ò2Ñ4Ô4Ð4àŒ{× Ò Ñ"Ô"Ð"r?   r3   c                óŽ  — | j         st          | ¬¦  «        ‚t          | j         t          t          t
          f¦  «        ro| j         j         st          | j         ¬¦  «        ‚| j         j         j         st          | j         j         ¬¦  «        ‚| j         j         j                              ¦   «         S | j                              ¦   «         S r¨  )r‡   r#   r8   r  rf  rv  rö   r·   s    r=   rö   zNamedExpr.scopeØ  s±   € ð Œ{ð 	2Ý$¨DÐ1Ñ1Ô1Ð1õ �d”k¥I­w½Ð#FÑGÔGð 	5Ø”;Ô%ð =Ý(°´Ð<Ñ<Ô<Ð<Ø”;Ô%Ô,ð DÝ(°´Ô0BÐCÑCÔCÐCØ”;Ô%Ô,×2Ò2Ñ4Ô4Ð4àŒ{× Ò Ñ"Ô"Ð"r?   rã   r¼   rR   c                óV   — |                       ¦   «                              ||¦  «         dS )a{  Define that the given name is declared in the given statement node.
        NamedExpr's in Arguments, Keyword or Comprehension are evaluated in their
        parent's parent scope. So we add to their frame's locals.

        .. seealso:: :meth:`scope`

        :param name: The name that is being defined.

        :param stmt: The statement that defines the given name.
        N)rþ   Ú	set_local)r¦   rã   rR   s      r=   rf  zNamedExpr.set_localë  s(   € ð 	�
Š
‰Œ×Ò˜t TÑ*Ô*Ð*Ð*Ð*r?   r.  rÓ   )rÂ  r)   r<   r)   r4   rŸ   )r`  ra  r4   rb  r«  )rã   r¼   rR   r)   r4   rŸ   )rÕ   rÖ   r×   rØ   rÙ   r…  r¤   r©   r   Únamed_expr_assigned_stmtsrì   rþ   rö   rf  rÞ   rß   s   @r=   rÇ   rÇ   {  sê   ø€ € € € € ðð ð *€Oà€OðHð "Ø!%Ø $ð	%
ð "&Ø%)ð%
ð %
ð %
ð %
ð %
ð %
ð %
ð %
ðNð ð ð ð Ô8€Nðð
 04ð#ð #ð #ð #ð #ð #ð:#ð #ð #ð #ð&+ð +ð +ð +ð +ð +ð +ð +r?   rÇ   c                  óJ   ‡ — e Zd ZdZd Z	 	 	 ddddœdˆ fd„Zdd„Zddd„Zˆ xZS )ÚUnknownzßThis node represents a node in a constructed AST where
    introspection is not possible.  At the moment, it's only used in
    the args attribute of FunctionDef nodes where function signature
    introspection failed.
    Nr  r™   rŸ   r›   r‡   r�   rž   r4   c               óT   •— t          ¦   «                              |||||¬¦  «         d S r¡   ró  r¥   s         €r=   r¤   zUnknown.__init__  rô  r?   úLiteral['Unknown']c                ó   — dS )Nri  r¯   r·   s    r=   r•  zUnknown.qname  s   € Øˆyr?   rG   rH   c              +  ó&   K  — t           j        V — dS )z4Inference on an Unknown node immediately terminates.N)r   rM   r¢  s      r=   rÌ   zUnknown._infer  s   è è € åÔÐÐÐÐÐr?   r.  rú  )r4   rk  r7   rù  )	rÕ   rÖ   r×   rØ   rã   r¤   r•  rÌ   rÞ   rß   s   @r=   ri  ri  ù  s�   ø€ € € € € ðð ð €Dð ØØð	
ð  Ø#ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð"ð ð ð ðð ð ð ð ð ð ð ð r?   ri  c                  ó<   ‡ — e Zd ZdZd ZdZdZdˆ fd
„Z	 ddd„Zˆ xZ	S )ÚEvaluatedObjectz²Contains an object that has already been inferred

    This class is useful to pre-evaluate a particular node,
    with the resulting class acting as the non-evaluated node.
    )Úoriginalr;   rp  r-   r<   r,   r4   rŸ   c                óØ   •— || _         	 || _        	 t          ¦   «                              | j         j        | j         j        | j         j        | j         j        | j         j        ¬¦  «         d S )Nr­   )	rp  r<   r£   r¤   r™   r›   r‡   r�   rž   )r¦   rp  r<   r�   s      €r=   r¤   zEvaluatedObject.__init__&  sl   ø€ ð 4<ˆŒØ?à&+ˆŒ
Ø å‰Œ×ÒØ”=Ô'Ø”}Ô/Ø”=Ô'Ø”}Ô/Øœ=Ô7ð 	ñ 	
ô 	
ð 	
ð 	
ð 	
r?   NrG   rH   rÂ   r
   ú4Generator[NodeNG | util.UninferableBase, None, None]c              +  ó   K  — | j         V — d S r7   r;   r¢  s      r=   rÌ   zEvaluatedObject._infer7  s   è è € ð ŒjÐÐÐÐÐr?   )rp  r-   r<   r,   r4   rŸ   r7   )rG   rH   rÂ   r
   r4   rr  )
rÕ   rÖ   r×   rØ   rã   rÙ   r  r¤   rÌ   rÞ   rß   s   @r=   ro  ro    sv   ø€ € € € € ðð ð €DØ#€OØ€Mð
ð 
ð 
ð 
ð 
ð 
ð$ 26ðð ð ð ð ð ð ð ð r?   ro  c                  óD   ‡ — e Zd ZdZdZdZ	 	 	 ddddœdˆ fd„Zdd„Zˆ xZS )ÚMatchzöClass representing a :class:`ast.Match` node.

    >>> import astroid
    >>> node = astroid.extract_node('''
    match x:
        case 200:
            ...
        case _:
            ...
    ''')
    >>> node
    <Match l.2 at 0x10c24e170>
    ©ÚsubjectÚcases)rx  Nr  r™   rš   r›   r‡   rœ   r�   rž   r4   rŸ   c               ó\   •— |  |  t          ¦   «                              |||||¬¦  «         d S r¡   ró  r¥   s         €r=   r¤   zMatch.__init__R  sK   ø€ ð 	ÐØÐ#Ý‰Œ×ÒØØ!Ø!Ø)Øð 	ñ 	
ô 	
ð 	
ð 	
ð 	
r?   rw  r)   rx  úlist[MatchCase]c               ó"   — || _         || _        d S r7   rv  )r¦   rw  rx  s      r=   r©   zMatch.postinite  s   € ð ˆŒØˆŒ
ˆ
ˆ
r?   r.  rÓ   )rw  r)   rx  rz  r4   rŸ   )	rÕ   rÖ   r×   rØ   rÙ   r	  r¤   r©   rÞ   rß   s   @r=   ru  ru  @  sŠ   ø€ € € € € ðð ð +€OØ)Ðð "Ø!%Ø $ð	
ð "&Ø%)ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð&ð ð ð ð ð ð ð r?   ru  c                  ó   — e Zd ZdZdS )ÚPatternz!Base class for all Pattern nodes.Nr2  r¯   r?   r=   r}  r}  o  s   € € € € € Ø+Ð+Ð+Ð+r?   r}  c                  ód   ‡ — e Zd ZU dZdZdZded<   ded<   ded<   ded<   d	d
œdˆ fd„Zdd„Zˆ xZ	S )Ú	MatchCasezèClass representing a :class:`ast.match_case` node.

    >>> import astroid
    >>> node = astroid.extract_node('''
    match x:
        case 200:
            ...
    ''')
    >>> node.cases[0]
    <MatchCase l.3 at 0x10c24e590>
    ©ÚpatternÚguardr[   rþ  rŸ   r™   r›   r�   rž   Nr0  r‡   rœ   r4   c               ó`   •— |  |  |  t          ¦   «                              |d d d d ¬¦  «         d S )Nr-  ró  )r¦   r‡   r�   s     €r=   r¤   zMatchCase.__init__ˆ  sO   ø€ ØÐØÐ!ØÐÝ‰Œ×ÒØØØØØð 	ñ 	
ô 	
ð 	
ð 	
ð 	
r?   r�  r}  r‚  r[   r¯  c               ó0   — || _         || _        || _        d S r7   r€  )r¦   r�  r‚  r[   s       r=   r©   zMatchCase.postinit”  s   € ð ˆŒØˆŒ
ØˆŒ	ˆ	ˆ	r?   )r‡   rœ   r4   rŸ   )r�  r}  r‚  rœ   r[   r¯  r4   rŸ   )
rÕ   rÖ   r×   rØ   rÙ   r	  rv  r¤   r©   rÞ   rß   s   @r=   r  r  s  s¤   ø€ € € € € € ð
ð 
ð 3€OØ(Ðà€L€L�LØÐÐÑØÐÐÑØÐÐÑà26ð 

ð 

ð 

ð 

ð 

ð 

ð 

ð 

ð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	r?   r  c                  ó@   ‡ — e Zd ZdZdZ	 	 	 ddddœdˆ fd„Zdd„Zˆ xZS )Ú
MatchValuezñClass representing a :class:`ast.MatchValue` node.

    >>> import astroid
    >>> node = astroid.extract_node('''
    match x:
        case 200:
            ...
    ''')
    >>> node.cases[0].pattern
    <MatchValue l.3 at 0x10c24e200>
    r;   Nr  r™   rš   r›   r‡   rœ   r�   rž   r4   rŸ   c               óX   •— |  t          ¦   «                              |||||¬¦  «         d S r¡   ró  r¥   s         €r=   r¤   zMatchValue.__init__¯  sE   ø€ ð 	ÐÝ‰Œ×ÒØØ!Ø!Ø)Øð 	ñ 	
ô 	
ð 	
ð 	
ð 	
r?   r<   r)   c               ó   — || _         d S r7   r;   rç  s     r=   r©   zMatchValue.postinitÁ  r¦  r?   r.  rÓ   rî  ©rÕ   rÖ   r×   rØ   rÙ   r¤   r©   rÞ   rß   s   @r=   r†  r†     s„   ø€ € € € € ð
ð 
ð !€Oð "Ø!%Ø $ð	
ð "&Ø%)ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð$ð ð ð ð ð ð ð r?   r†  c                  ó6   ‡ — e Zd ZdZdZddddddœdˆ fd„Zˆ xZS )ÚMatchSingletonaÍ  Class representing a :class:`ast.MatchSingleton` node.

    >>> import astroid
    >>> node = astroid.extract_node('''
    match x:
        case True:
            ...
        case False:
            ...
        case None:
            ...
    ''')
    >>> node.cases[0].pattern
    <MatchSingleton l.3 at 0x10c2282e0>
    >>> node.cases[1].pattern
    <MatchSingleton l.5 at 0x10c228af0>
    >>> node.cases[2].pattern
    <MatchSingleton l.7 at 0x10c229f90>
    r;   Nr¢   r<   úLiteral[True, False, None]r™   rš   r›   r�   rž   r‡   rœ   r4   rŸ   c               ób   •— || _         t          ¦   «                              |||||¬¦  «         d S r¡   )r<   r£   r¤   )r¦   r<   r™   r›   r�   rž   r‡   r�   s          €r=   r¤   zMatchSingleton.__init__Ü  sF   ø€ ð ˆŒ
Ý‰Œ×ÒØØ!Ø!Ø)Øð 	ñ 	
ô 	
ð 	
ð 	
ð 	
r?   )r<   rŒ  r™   rš   r›   rš   r�   rš   rž   rš   r‡   rœ   r4   rŸ   r
  rß   s   @r=   r‹  r‹  Å  si   ø€ € € € € ðð ð( €Mð "Ø!%Ø!%Ø%)Ø $ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
r?   r‹  c                  ó@   ‡ — e Zd ZdZdZ	 	 	 ddddœdˆ fd„Zdd„Zˆ xZS )ÚMatchSequenceah  Class representing a :class:`ast.MatchSequence` node.

    >>> import astroid
    >>> node = astroid.extract_node('''
    match x:
        case [1, 2]:
            ...
        case (1, 2, *_):
            ...
    ''')
    >>> node.cases[0].pattern
    <MatchSequence l.3 at 0x10ca80d00>
    >>> node.cases[1].pattern
    <MatchSequence l.5 at 0x10ca80b20>
    ©ÚpatternsNr  r™   rš   r›   r‡   rœ   r�   rž   r4   rŸ   c               óX   •— |  t          ¦   «                              |||||¬¦  «         d S r¡   ró  r¥   s         €r=   r¤   zMatchSequence.__init__  óE   ø€ ð 	Ð$Ý‰Œ×ÒØØ!Ø!Ø)Øð 	ñ 	
ô 	
ð 	
ð 	
ð 	
r?   r‘  úlist[Pattern]c               ó   — || _         d S r7   r�  ©r¦   r‘  s     r=   r©   zMatchSequence.postinit  ó   € Ø ˆŒˆˆr?   r.  rÓ   ©r‘  r”  r4   rŸ   r‰  rß   s   @r=   r�  r�  ð  s„   ø€ € € € € ðð ð  $€Oð "Ø!%Ø $ð	
ð "&Ø%)ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð$!ð !ð !ð !ð !ð !ð !ð !r?   r�  c                  óN   ‡ — e Zd ZdZdZ	 	 	 ddddœdˆ fd„Zdd„Zej        Z	ˆ xZ
S )ÚMatchMappinga  Class representing a :class:`ast.MatchMapping` node.

    >>> import astroid
    >>> node = astroid.extract_node('''
    match x:
        case {1: "Hello", 2: "World", 3: _, **rest}:
            ...
    ''')
    >>> node.cases[0].pattern
    <MatchMapping l.3 at 0x10c8a8850>
    ©Úkeysr‘  ÚrestNr  r™   rš   r›   r‡   rœ   r�   rž   r4   rŸ   c               ó`   •— |  |  |  t          ¦   «                              |||||¬¦  «         d S r¡   ró  r¥   s         €r=   r¤   zMatchMapping.__init__(  sQ   ø€ ð 	ÐØÐ$ØÐ$Ý‰Œ×ÒØØ!Ø!Ø)Øð 	ñ 	
ô 	
ð 	
ð 	
ð 	
r?   rœ  r¯  r‘  r”  r�  r(  c               ó0   — || _         || _        || _        d S r7   r›  )r¦   rœ  r‘  r�  s       r=   r©   zMatchMapping.postinit<  s   € ð ˆŒ	Ø ˆŒØˆŒ	ˆ	ˆ	r?   r.  rÓ   )rœ  r¯  r‘  r”  r�  r(  r4   rŸ   )rÕ   rÖ   r×   rØ   rÙ   r¤   r©   r   Úmatch_mapping_assigned_stmtsrì   rÞ   rß   s   @r=   rš  rš    sŽ   ø€ € € € € ð
ð 
ð 3€Oð "Ø!%Ø $ð	
ð "&Ø%)ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð(	ð 	ð 	ð 	ð Ô;€Nðð ð ð r?   rš  c                  óD   ‡ — e Zd ZdZdZdZ	 	 	 ddddœdˆ fd„Zdd„Zˆ xZS )Ú
MatchClassar  Class representing a :class:`ast.MatchClass` node.

    >>> import astroid
    >>> node = astroid.extract_node('''
    match x:
        case Point2D(0, 0):
            ...
        case Point3D(x=0, y=0, z=0):
            ...
    ''')
    >>> node.cases[0].pattern
    <MatchClass l.3 at 0x10ca83940>
    >>> node.cases[1].pattern
    <MatchClass l.5 at 0x10ca80880>
    )r´   r‘  Úkwd_patterns)Ú	kwd_attrsNr  r™   rš   r›   r‡   rœ   r�   rž   r4   rŸ   c               ód   •— |  |  |  |  t          ¦   «                              |||||¬¦  «         d S r¡   ró  r¥   s         €r=   r¤   zMatchClass.__init__a  sW   ø€ ð 	ÐØÐ$ØÐ!ØÐ(Ý‰Œ×ÒØØ!Ø!Ø)Øð 	ñ 	
ô 	
ð 	
ð 	
ð 	
r?   r´   r)   r‘  r”  r¤  r6  r£  c               ó>   — || _         || _        || _        || _        d S r7   )r´   r‘  r¤  r£  )r¦   r´   r‘  r¤  r£  s        r=   r©   zMatchClass.postinitv  s'   € ð ˆŒØ ˆŒØ"ˆŒØ(ˆÔÐÐr?   r.  rÓ   )
r´   r)   r‘  r”  r¤  r6  r£  r”  r4   rŸ   )	rÕ   rÖ   r×   rØ   rÙ   r  r¤   r©   rÞ   rß   s   @r=   r¢  r¢  M  s‰   ø€ € € € € ðð ð  :€OØ"€Mð "Ø!%Ø $ð	
ð "&Ø%)ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð*)ð )ð )ð )ð )ð )ð )ð )r?   r¢  c                  óN   ‡ — e Zd ZdZdZ	 	 	 ddddœdˆ fd„Zdd„Zej        Z	ˆ xZ
S )Ú	MatchStarzÿClass representing a :class:`ast.MatchStar` node.

    >>> import astroid
    >>> node = astroid.extract_node('''
    match x:
        case [1, *_]:
            ...
    ''')
    >>> node.cases[0].pattern.patterns[1]
    <MatchStar l.3 at 0x10ca809a0>
    râ   Nr  r™   rš   r›   r‡   rœ   r�   rž   r4   rŸ   c               óX   •— |  t          ¦   «                              |||||¬¦  «         d S r¡   ró  r¥   s         €r=   r¤   zMatchStar.__init__“  r“  r?   rã   r(  c               ó   — || _         d S r7   râ   rb  s     r=   r©   zMatchStar.postinit¥  rª   r?   r.  rÓ   )rã   r(  r4   rŸ   )rÕ   rÖ   r×   rØ   rÙ   r¤   r©   r   Úmatch_star_assigned_stmtsrì   rÞ   rß   s   @r=   r¨  r¨  „  sŽ   ø€ € € € € ð
ð 
ð  €Oð "Ø!%Ø $ð	
ð "&Ø%)ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð$ð ð ð ð Ô8€Nðð ð ð r?   r¨  c                  óN   ‡ — e Zd ZdZdZ	 	 	 ddddœdˆ fd„Zdd„Zej        Z	ˆ xZ
S )ÚMatchAsa=  Class representing a :class:`ast.MatchAs` node.

    >>> import astroid
    >>> node = astroid.extract_node('''
    match x:
        case [1, a]:
            ...
        case {'key': b}:
            ...
        case Point2D(0, 0) as c:
            ...
        case d:
            ...
    ''')
    >>> node.cases[0].pattern.patterns[1]
    <MatchAs l.3 at 0x10d0b2da0>
    >>> node.cases[1].pattern.patterns[0]
    <MatchAs l.5 at 0x10d0b2920>
    >>> node.cases[2].pattern
    <MatchAs l.7 at 0x10d0b06a0>
    >>> node.cases[3].pattern
    <MatchAs l.9 at 0x10d09b880>
    ©r�  rã   Nr  r™   rš   r›   r‡   rœ   r�   rž   r4   rŸ   c               ó\   •— |  |  t          ¦   «                              |||||¬¦  «         d S r¡   ró  r¥   s         €r=   r¤   zMatchAs.__init__É  sK   ø€ ð 	Ð$ØÐ$Ý‰Œ×ÒØØ!Ø!Ø)Øð 	ñ 	
ô 	
ð 	
ð 	
ð 	
r?   r�  úPattern | Nonerã   r(  c               ó"   — || _         || _        d S r7   r®  )r¦   r�  rã   s      r=   r©   zMatchAs.postinitÜ  s   € ð ˆŒØˆŒ	ˆ	ˆ	r?   r.  rÓ   )r�  r°  rã   r(  r4   rŸ   )rÕ   rÖ   r×   rØ   rÙ   r¤   r©   r   Úmatch_as_assigned_stmtsrì   rÞ   rß   s   @r=   r­  r­  ®  sŽ   ø€ € € € € ðð ð0 *€Oð "Ø!%Ø $ð	
ð "&Ø%)ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð&ð ð ð ð Ô6€Nðð ð ð r?   r­  c                  ó@   ‡ — e Zd ZdZdZ	 	 	 ddddœdˆ fd„Zdd„Zˆ xZS )ÚMatchOrz÷Class representing a :class:`ast.MatchOr` node.

    >>> import astroid
    >>> node = astroid.extract_node('''
    match x:
        case 400 | 401 | 402:
            ...
    ''')
    >>> node.cases[0].pattern
    <MatchOr l.3 at 0x10d0b0b50>
    r�  Nr  r™   rš   r›   r‡   rœ   r�   rž   r4   rŸ   c               óX   •— |  t          ¦   «                              |||||¬¦  «         d S r¡   ró  r¥   s         €r=   r¤   zMatchOr.__init__ú  r“  r?   r‘  r”  c               ó   — || _         d S r7   r�  r–  s     r=   r©   zMatchOr.postinit  r—  r?   r.  rÓ   r˜  r‰  rß   s   @r=   r´  r´  ë  s„   ø€ € € € € ð
ð 
ð $€Oð "Ø!%Ø $ð	
ð "&Ø%)ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð$!ð !ð !ð !ð !ð !ð !ð !r?   r´  .zdict[type, type[NodeNG]]r:   r<   r«   úList | Set | Tupler¯  c                ój   — g }| D ]-}t          |¦  «        }||_        |                     |¦  «         Œ.|S )zACreate a list of nodes to function as the elements of a new node.)r°   r‡   rÑ   )r<   rK   ÚelementsÚelementÚelement_nodes        r=   Ú_create_basic_elementsr¼  %  sG   € ð  €HØð &ð &ˆÝ$ WÑ-Ô-ˆØ"ˆÔØ�Š˜Ñ%Ô%Ð%Ð%Ø€Or?   rÊ   úMapping[Any, Any]úAlist[tuple[SuccessfulInferenceResult, SuccessfulInferenceResult]]c                óÄ   — g }|                       ¦   «         D ]H\  }}t          |¦  «        }||_        t          |¦  «        }||_        |                     ||f¦  «         ŒI|S )zHCreate a list of node pairs to function as the items of a new dict node.)r½  r°   r‡   rÑ   )rÊ   rK   r¹  rÅ  r<   Úkey_nodeÚ
value_nodes          r=   Ú_create_dict_itemsrÂ  1  sn   € ð SU€HØ—l’l‘n”nð 0ð 0‰
ˆˆUÝ  Ñ%Ô%ˆØˆŒÝ" 5Ñ)Ô)ˆ
Ø ˆ
ÔØ�Š˜ :Ð.Ñ/Ô/Ð/Ð/Ø€Or?   r*   c                óþ  — t          | t          ¦  «        rJ ‚| j        t          vrt	          ¦   «         }| |_        |S t          | j                 }t          |t          t          t          f¦  «        r5 |ddddd¬¦  «        }| 
                    t          | |¦  «        ¦  «         |S t          |t          ¦  «        r5 |ddddd¬¦  «        }| 
                    t          | |¦  «        ¦  «         |S t          | ¦  «        S )z*Return an astroid node for a python value.Nr­   )r8   r)   r�   r:   rñ  rö  Ú
issubclassrC   r£  rD   r©   r¼  r»  rÂ  rs   )r<   rK   Úinitializer_clsr‘   s       r=   r°   r°   ?  s  € å˜%¥Ñ(Ô(Ð(Ð(Ð(ð
 „�iÐ'Ð'Ý‰{Œ{ˆØˆŒØˆõ   ¤Ô0€OÝ�/¥D­#­uÐ#5Ñ6Ô6ð 	Ø"�?ØØØØØð
ñ 
ô 
ˆð 	×ÒÕ0°¸ÑAÔAÑBÔBÐBØˆÝ�/¥4Ñ(Ô(ð 	Ø"�?ØØØØØð
ñ 
ô 
ˆð 	×ÒÕ,¨U°HÑ=Ô=Ñ>Ô>Ð>ØˆÝ�‰<Œ<Ðr?   ru  r7   rù  r  r.  rt  )rK   r„  rG   rH   rÂ   r
   r4   r…  )r<   r«   rK   r·  r4   r¯  )rÊ   r½  rK   r»  r4   r¾  )r<   r
   r4   r*   )ÉrØ   Ú
__future__r   rÛ   rd  r7  r&  rŠ  Útypingri  Úcollections.abcr   r   r   r   Ú	functoolsr   r	   r
   r   r   r   r   r   rÏ  r   r   r   Úastroid.basesr   r   Úastroid.constr   r   Úastroid.contextr   r   r   Úastroid.exceptionsr   r   r   r   r   r   r    r!   r"   r#   r$   Úastroid.interpreterr%   Úastroid.managerr&   r‹  r'   Úastroid.nodes.constr(   Úastroid.nodes.node_ngr)   Úastroid.typingr*   r+   r,   r-   Úversion_infor0   Útyping_extensionsr2   r3   r>   r  r@   ÚBadOperationMessagerB   ÚAssignedStmtsPossibleNoderC   rt   ÚAssignedStmtsCallÚInferBinaryOperationÚInferLHSr¼   ÚInferUnaryOprÝ   rN   rp   rö  rw   ry   rˆ   r•   ÚParentAssignNodeÚABCMetar—   ÚNoChildrenNodeÚLookupMixInrE   r  r  r  ÚAssignTypeNoder  r\  rD  r”  rF   Ú	Statementr§  r®  rÀ  ÚOperatorNoderê   rû  r  r1  r5  ÚeqÚneÚltÚleÚgtÚgerW  rv  rl  rZ  rv  rs   r¢  r¤  r­  r³  r»  rå  rñ  ÚMultiLineBlockNoderü  ÚMultiLineWithElseBlockNoder  r  r  Ú
ImportNoder  r.  r4  r^   rY  ra  rf  r}  r�  rŒ  rŽ  r˜  r£  rŒ   rÆ   rÈ  r`   rï  rD   rý  r  r)  r  r1  r:  rE  rG  rM  rË  rP  rY  rÇ   ri  ro  ru  r}  r  r†  r‹  r�  rš  r¢  r¨  r­  r´  rë   r9   rÚ  r  ru   ÚNotImplementedr5   ÚfloatÚcomplexr�  r:   r¼  rÂ  r°   r¯   r?   r=   ú<module>rî     sï  ðð
 BÐ AÐ Aà "Ð "Ð "Ð "Ð "Ð "à 
€
€
€
Ø 
€
€
€
Ø Ð Ð Ð Ø €€€Ø 
€
€
€
Ø €€€Ø €€€Ø BÐ BÐ BÐ BÐ BÐ BÐ BÐ BÐ BÐ BÐ BÐ BØ %Ð %Ð %Ð %Ð %Ð %ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð 0Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ Gðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð .Ð -Ð -Ð -Ð -Ð -Ø *Ð *Ð *Ð *Ð *Ð *Ø %Ð %Ð %Ð %Ð %Ð %Ø -Ð -Ð -Ð -Ð -Ð -Ø (Ð (Ð (Ð (Ð (Ð (ðð ð ð ð ð ð ð ð ð ð ð ð Ô�wÒÐØÐÐÐÐÐÐà&Ð&Ð&Ð&Ð&Ð&àð /ØÐÐÐÐÐØ.Ð.Ð.Ð.Ð.Ð.ð/ð /ð /ð /ð ˆ&Œ.˜¨&Ð
1Ñ
1Ô
1€Ø�”Ð 0¸Ô8PÐQÑQÔQ€à!Ð"SÔTÐ ØàØ!ØÐ!Ô"Ø�”˜SÔ!Ô"ð	ð ð	ôÐ ð  ØˆhÐ'Ô(Ð)Ø
Ô�U˜?¨NÐ:Ô;¸TÀ4ÐGÔHðJôÐ ð ØˆhÐ'Ô(Ð)Ø
Ô�_ d¨HÐ5GÔ,HÐHÔIðKô€ð ˜ #˜Ð(:Ð:Ô;€ð Ô%ð.ð .ð .ð .ñ &Ô%ð.ð4Fð Fð Fð Fð FðV �&‘(”(€ðð ð ð ð ð6ð ð ð ð ðHð Hð Hð Hð HðBuð uð uð uð u�KÔ0°(ÀcÄkð uñ uô uð uðvY3ð Y3ð Y3ð Y3ð Y3ØÔØÔØÔ ñY3ô Y3ð Y3ðx$
ð $
ð $
ð $
ð $
ØÔ Ô 7¸Ô9Uñ$
ô $
ð $
ðNI3ð I3ð I3ð I3ð I3ˆ;Ô" KÔ$>ñ I3ô I3ð I3ðX <Ð ðnKð nKð nKð nKð nKØÔñnKô nKð nKðbð ð ð OSðð ð ð ð ðD (,ð$:ð $:ð $:ð $:ð $:ðNE9ð E9ð E9ð E9ð E9�Ô(¨+Ô*Fñ E9ô E9ð E9ðPð ð ð ð ˆ[Ô"ñ ô ð ð<4>ð 4>ð 4>ð 4>ð 4>ˆ[Ô'¨Ô)>ñ 4>ô 4>ð 4>ðn0ð 0ð 0ð 0ð 0�Ô*¨KÔ,Añ 0ô 0ð 0ðf{
ð {
ð {
ð {
ð {
ØÔ Ô 8¸+Ô:Oñ{
ô {
ð {
ð|n
ð n
ð n
ð n
ð n
ˆKÔ$ñ n
ô n
ð n
ðbw>ð w>ð w>ð w>ð w>ˆVñ w>ô w>ð w>ðtð ð ð ð ˆKÔ&¨Ô(=ñ ô ð ðVð Vð Vð Vð Vˆ6ñ Vô Vð Vðt Œ+Ø
Œ+Ø	ŒØ
Œ+Ø	ŒØ
Œ+Ø
Ð
Ø%Ð%ð	6ð 	6€ð 	ð 	ð 	ñ 	ð 	Øð€ð@ ð @ ð @ ð @ ð @ ˆfñ @ ô @ ð @ ðFMð Mð Mð Mð M�Fñ Mô Mð Mð`Yð Yð Yð Yð YˆKÔ&¨ñ Yô Yð Yðxð ð ð ð ˆ{Ô)¨;Ô+@ñ ô ð ð(ð (ð (ð (ð (�ñ (ô (ð (ðV*ð *ð *ð *ð *ˆkÔ*ñ *ô *ð *ðZ% ð % ð % ð % ð % ˆ[Ô'¨Ô)>ñ % ô % ð % ðPyð yð yð yð yˆ6�8ñ yô yð yðxBð Bð Bð Bð Bˆ;Ô ñ Bô Bð BðD&'ð &'ð &'ð &'ð &'�Ô*ñ &'ô &'ð &'ðRKTð KTð KTð KTð KTØÔ" KÔ$>ÀÔ@UñKTô KTð KTð\Fð Fð Fð Fð FØÔ*ØÔØÔñFô Fð FðRð ð ð ð ˆsñ ô ð ð&ð ð ð ð ˆFñ ô ð ð<gð gð gð gð g�Ô'ñ gô gð gðT(9ð (9ð (9ð (9ð (9�ñ (9ô (9ð (9ðV?ð ?ð ?ð ?ð ?ˆ[Ô'¨Ô)>ñ ?ô ?ð ?ðDA;ð A;ð A;ð A;ð A;ˆÔ	/°Ô1Fñ A;ô A;ð A;ðHB>ð B>ð B>ð B>ð B>ˆFñ B>ô B>ð B>ðJFFð FFð FFð FFð FFˆ[Ô#ñ FFô FFð FFðR*ð *ð *ð *ð *ˆfñ *ô *ð *ðZDKð DKð DKð DKð DKˆ=ñ DKô DKð DKðN5ð 5ð 5ð 5ð 5ˆ{Ô)¨;Ô+@ñ 5ô 5ð 5ðp)ð )ð )ð )ð )�Ô*ñ )ô )ð )ðXð ð ð ð ˆ;Ô% {Ô'<ñ ô ð ð)ð )ð )ð )ð )ˆKÔ!ñ )ô )ð )ðXð ð ð ð ˆ[Ô"ñ ô ð ð8ð ð ð ð ˆ-ñ ô ð ð&]ð ]ð ]ð ]ð ]ˆFñ ]ô ]ð ]ð@-ð -ð -ð -ð -ˆkÔ*ñ -ô -ð -ð`s8ð s8ð s8ð s8ð s8�ñ s8ô s8ð s8ðls"ð s"ð s"ð s"ð s"ˆ+Ô
0°+Ô2Gñ s"ô s"ð s"ðlb"ð b"ð b"ð b"ð b"ˆkÔ4°kÔ6Kñ b"ô b"ð b"ðJDKð DKð DKð DKð DKˆMñ DKô DKð DKðN:(ð :(ð :(ð :(ð :(�Ô*¨KÔ,Añ :(ô :(ð :(ðz+ð +ð +ð +ð +ˆkÔ(ñ +ô +ð +ð\)ð )ð )ð )ð )�;Ô-ñ )ô )ð )ðZ 
Ø	Ø	Øð	ð €ðL>ð L>ð L>ð L>ð L>ˆkÔ&ñ L>ô L>ð L>ð^B;ð B;ð B;ð B;ð B;ˆKÔ2°KÔ4Iñ B;ô B;ð B;ðJeð eð eð eð eØÔ*ØÔØÔñeô eð eðPBð Bð Bð Bð B�ñ Bô Bð Bðð ð ð ð ˆFñ ô ð ð8=ð =ð =ð =ð =�ñ =ô =ð =ðIð Ið Ið Ið I�Ô+ñ Iô Ið IðW#ð W#ð W#ð W#ð W#�Vñ W#ô W#ð W#ðt:ð :ð :ð :ð :�ñ :ô :ð :ðz{+ð {+ð {+ð {+ð {+�Ô*ñ {+ô {+ð {+ð|ð ð ð ð ˆkÔ(ñ ô ð ðDð ð ð ð �fñ ô ð ðJ,ð ,ð ,ð ,ð ,ˆKÔ! ;Ô#Añ ,ô ,ð ,ð^,ð ,ð ,ð ,ð ,ˆfñ ,ô ,ð ,ð*ð *ð *ð *ð *�Ô.ñ *ô *ð *ðZ"ð "ð "ð "ð "�ñ "ô "ð "ðJ(
ð (
ð (
ð (
ð (
�Wñ (
ô (
ð (
ðV&!ð &!ð &!ð &!ð &!�Gñ &!ô &!ð &!ðR1ð 1ð 1ð 1ð 1�;Ô-¨wñ 1ô 1ð 1ðh4)ð 4)ð 4)ð 4)ð 4)�ñ 4)ô 4)ð 4)ðn'ð 'ð 'ð 'ð '�Ô*¨Gñ 'ô 'ð 'ðT:ð :ð :ð :ð :ˆkÔ(¨'ñ :ô :ð :ðz"!ð "!ð "!ð "!ð "!ˆgñ "!ô "!ð "!ðT 	ˆ$Ø	ˆ5Øˆ$ØˆØ€Dˆ�J„J�Ø€DˆÑÔ˜%Ø€Dˆ�I„IˆuØˆ%ØˆØ	ˆ5ØˆUØˆØ	ˆ5ð'€	ð ð ð ñ ð"	ð 	ð 	ð 	ðð ð ð ð"ð "ð "ð "ð "ð "r?   