§
    ZQdf;  ã                   ó”  — d Z ddlmZ ddlmZmZ ddlmZ ddl	m
Z
 d„ Zd„ Zd„ Zd	„ Zd-d„Zd„ Zd„ Zd„ Z e¦   «          e¦   «         fd„Zd.d„Zd„ Zd„ Zd-d„Zd„ Zd-d„Zd-d„Zd„ Zd„ Zd„ Zd„ Zd„ Zh d£Z d„ Z!da"da#d a$d!a%d"„ Z&d#„ Z'd$„ Z(d%„ Z)d&„ Z*d'„ Z+d(„ Z,d)„ Z-ej.        ej/        hZ0d-d*„Z1ej/        ej.        ej2        hZ3d+„ Z4d-d,„Z5d
S )/z1Utility functions, node construction macros, etc.é   )Útoken)ÚLeafÚNode)Úpython_symbols)Úpatcompc                 ól   — t          t          j        | t          t          j        d¦  «        |g¦  «        S )Nú=)r   ÚsymsÚargumentr   r   ÚEQUAL)ÚkeywordÚvalues     ú)/usr/lib/python3.11/lib2to3/fixer_util.pyÚ
KeywordArgr      s.   € Ý•”Ø�$�uœ{¨CÑ0Ô0°%Ð8ñ:ô :ð :ó    c                  ó6   — t          t          j        d¦  «        S )Nú()r   r   ÚLPAR© r   r   ÚLParenr      ó   € Ý•”
˜CÑ Ô Ð r   c                  ó6   — t          t          j        d¦  «        S )Nú))r   r   ÚRPARr   r   r   ÚRParenr      r   r   c           	      óæ   — t          | t          ¦  «        s| g} t          |t          ¦  «        s
d|_        |g}t          t          j        | t          t          j        dd¬¦  «        gz   |z   ¦  «        S )zBuild an assignment statementú r	   ©Úprefix)	Ú
isinstanceÚlistr   r   r
   Úatomr   r   r   )ÚtargetÚsources     r   ÚAssignr%      su   € å�f�dÑ#Ô#ð Ø�ˆÝ�f�dÑ#Ô#ð ØˆŒØ�ˆå•”	Ø�$�uœ{¨C¸Ð<Ñ<Ô<Ð=Ñ=ÀÑFñHô Hð Hr   Nc                 ó:   — t          t          j        | |¬¦  «        S )zReturn a NAME leafr   )r   r   ÚNAME)Únamer   s     r   ÚNamer)   $   s   € å•”
˜D¨Ð0Ñ0Ô0Ð0r   c                 óV   — | t          t          j        t          ¦   «         |g¦  «        gS )zA node tuple for obj.attr)r   r
   ÚtrailerÚDot)ÚobjÚattrs     r   ÚAttrr/   (   s!   € à••d”l¥S¡U¤U¨D MÑ2Ô2Ð3Ð3r   c                  ó6   — t          t          j        d¦  «        S )zA comma leafú,)r   r   ÚCOMMAr   r   r   ÚCommar3   ,   s   € å•”˜SÑ!Ô!Ð!r   c                  ó6   — t          t          j        d¦  «        S )zA period (.) leafú.)r   r   ÚDOTr   r   r   r,   r,   0   s   € å•”	˜3ÑÔÐr   c                 óæ   — t          t          j        |                     ¦   «         |                     ¦   «         g¦  «        }| r.|                     dt          t          j        | ¦  «        ¦  «         |S )z-A parenthesised argument list, used by Call()r   )r   r
   r+   ÚcloneÚinsert_childÚarglist)ÚargsÚlparenÚrparenÚnodes       r   ÚArgListr?   4   sW   € å•”˜vŸ|š|™~œ~¨v¯|ª|©~¬~Ð>Ñ?Ô?€DØð 7Ø×Ò˜!�T¥$¤,°Ñ5Ô5Ñ6Ô6Ð6Ø€Kr   c                 ój   — t          t          j        | t          |¦  «        g¦  «        }|�||_        |S )zA function call)r   r
   Úpowerr?   r   )Ú	func_namer;   r   r>   s       r   ÚCallrC   ;   s0   € å•”
˜Y­°©¬Ð6Ñ7Ô7€DØÐØˆŒØ€Kr   c                  ó6   — t          t          j        d¦  «        S )zA newline literalú
©r   r   ÚNEWLINEr   r   r   ÚNewlinerH   B   s   € å•”˜tÑ$Ô$Ð$r   c                  ó6   — t          t          j        d¦  «        S )zA blank lineÚ rF   r   r   r   Ú	BlankLinerK   F   s   € å•”˜rÑ"Ô"Ð"r   c                 ó:   — t          t          j        | |¬¦  «        S )Nr   )r   r   ÚNUMBER)Únr   s     r   ÚNumberrO   J   s   € Ý•”˜a¨Ð/Ñ/Ô/Ð/r   c           	      óœ   — t          t          j        t          t          j        d¦  «        | t          t          j        d¦  «        g¦  «        S )zA numeric or string subscriptú[ú])r   r
   r+   r   r   ÚLBRACEÚRBRACE)Ú
index_nodes    r   Ú	SubscriptrV   M   s=   € å•”�t¥E¤L°#Ñ6Ô6Ø)Ý#¥E¤L°#Ñ6Ô6ð8ñ 9ô 9ð 9r   c                 ó:   — t          t          j        | |¬¦  «        S )zA string leafr   )r   r   ÚSTRING)Ústringr   s     r   ÚStringrZ   S   s   € å•”˜f¨VÐ4Ñ4Ô4Ð4r   c           	      óp  — d| _         d|_         d|_         t          t          j        d¦  «        }d|_         t          t          j        d¦  «        }d|_         ||||g}|rWd|_         t          t          j        d¦  «        }d|_         |                     t          t          j        ||g¦  «        ¦  «         t          t          j        | t          t          j	        |¦  «        g¦  «        }t          t          j
        t          t          j        d¦  «        |t          t          j        d¦  «        g¦  «        S )zuA list comprehension of the form [xp for fp in it if test].

    If test is None, the "if test" part is omitted.
    rJ   r   ÚforÚinÚifrQ   rR   )r   r   r   r'   Úappendr   r
   Úcomp_ifÚ	listmakerÚcomp_forr"   rS   rT   )	ÚxpÚfpÚitÚtestÚfor_leafÚin_leafÚ
inner_argsÚif_leafÚinners	            r   ÚListComprl   W   s   € ð
 €B„IØ€B„IØ€B„IÝ•E”J Ñ&Ô&€HØ€H„OÝ•5”:˜tÑ$Ô$€GØ€G„NØ˜B ¨Ð,€JØð ?ØˆŒÝ•u”z 4Ñ(Ô(ˆØˆŒØ×Ò�$�tœ|¨g°t¨_Ñ=Ô=Ñ>Ô>Ð>Ý•” "¥d­4¬=¸*Ñ&EÔ&EÐ!FÑGÔG€EÝ•”	Ý�Uœ\¨3Ñ/Ô/ØÝ�Uœ\¨3Ñ/Ô/ð1ñ2ô 2ð 2r   c                 ó@  — |D ]}|                      ¦   «          Œt          t          j        d¦  «        t          t          j        | d¬¦  «        t          t          j        dd¬¦  «        t	          t
          j        |¦  «        g}t	          t
          j        |¦  «        }|S )zO Return an import statement in the form:
        from package import name_leafsÚfromr   r   Úimport)Úremover   r   r'   r   r
   Úimport_as_namesÚimport_from)Úpackage_nameÚ
name_leafsÚleafÚchildrenÚimps        r   Ú
FromImportrx   o   s‰   € ð ð ð ˆà�Š‰Œˆˆå•U”Z Ñ(Ô(Ý•U”Z °cÐ:Ñ:Ô:Ý•U”Z °#Ð6Ñ6Ô6Ý•TÔ)¨:Ñ6Ô6ð8€Hõ �tÔ Ñ
*Ô
*€CØ€Jr   c                 ól  — |d                               ¦   «         }|j        t          j        k    r|                      ¦   «         }n-t	          t          j        |                      ¦   «         g¦  «        }|d         }|rd„ |D ¦   «         }t	          t          j        t          t          |d         ¦  «        t          |d         ¦  «        ¦  «        t	          t          j        |d                               ¦   «         ||d                               ¦   «         g¦  «        gz   |z   ¦  «        }| j	        |_	        |S )zfReturns an import statement and calls a method
    of the module:

    import module
    module.name()r-   Úafterc                 ó6   — g | ]}|                      ¦   «         ‘ŒS r   )r8   )Ú.0rN   s     r   ú
<listcomp>z!ImportAndCall.<locals>.<listcomp>�   s    € Ð*Ð*Ð*˜q�—’‘”Ð*Ð*Ð*r   é    r   ÚlparÚrpar)
r8   Útyper
   r:   r   rA   r/   r)   r+   r   )r>   ÚresultsÚnamesr-   Ú
newarglistrz   Únews          r   ÚImportAndCallr†   ‚   s  € ð �%Œ.×
Ò
Ñ
 Ô
 €CØ
„x•4”<ÒÐØ—Y’Y‘[”[ˆ
ˆ
å�$œ,¨¯ª©¬¨Ñ6Ô6ˆ
Ø�GÔ€EØð +Ø*Ð* EÐ*Ñ*Ô*ˆÝ
�tŒzÝ•D˜˜qœ‘N”N¥D¨¨q¬¡N¤NÑ3Ô3Ý•T”\Ø˜f”o×+Ò+Ñ-Ô-Ø Ø˜f”o×+Ò+Ñ-Ô-ð/ñ0ô 0ð 1ñ1ð 49ñ	9ñ:ô :€Cð ”€C„JØ€Jr   c                 óì  — t          | t          ¦  «        r'| j        t          ¦   «         t	          ¦   «         gk    rdS t          | t          ¦  «        o£t          | j        ¦  «        dk    o‹t          | j        d         t          ¦  «        okt          | j        d         t          ¦  «        oKt          | j        d         t          ¦  «        o+| j        d         j        dk    o| j        d         j        dk    S )z(Does the node represent a tuple literal?Té   r~   r   é   r   r   )r    r   rv   r   r   Úlenr   r   ©r>   s    r   Úis_tuplerŒ   ž   sÜ   € å�$�ÑÔð  $¤-µF±H´H½f¹h¼hÐ3GÒ"GÐ"GØˆtÝ�t�TÑ"Ô"ð .Ý�D”MÑ"Ô" aÒ'ð.å˜4œ=¨Ô+­TÑ2Ô2ð.õ ˜4œ=¨Ô+­TÑ2Ô2ð.õ ˜4œ=¨Ô+­TÑ2Ô2ð	.ð
 ”˜aÔ Ô&¨#Ò-ð.ð ”˜aÔ Ô&¨#Ò-ð/r   c                 ó4  — t          | t          ¦  «        oƒt          | j        ¦  «        dk    okt          | j        d         t          ¦  «        oKt          | j        d         t          ¦  «        o+| j        d         j        dk    o| j        d         j        dk    S )z'Does the node represent a list literal?r   r~   éÿÿÿÿrQ   rR   )r    r   rŠ   rv   r   r   r‹   s    r   Úis_listr�   ª   s‘   € å�t�TÑ"Ô"ð /Ý�D”MÑ"Ô" QÒ&ð/å˜4œ=¨Ô+­TÑ2Ô2ð/õ ˜4œ=¨Ô,­dÑ3Ô3ð/ð ”˜aÔ Ô&¨#Ò-ð	/ð
 ”˜bÔ!Ô'¨3Ò.ð0r   c                 ól   — t          t          j        t          ¦   «         | t	          ¦   «         g¦  «        S ©N)r   r
   r"   r   r   r‹   s    r   Úparenthesizer’   ¸   s#   € Ý•”	�F™HœH d­F©H¬HÐ5Ñ6Ô6Ð6r   >
   ÚallÚanyÚmaxÚminÚsetÚsumr!   ÚtupleÚsortedÚ	enumeratec              #   ó^   K  — t          | |¦  «        }|r|V — t          ||¦  «        }|°dS dS )al  Follow an attribute chain.

    If you have a chain of objects where a.foo -> b, b.foo-> c, etc,
    use this to iterate over all objects in the chain. Iteration is
    terminated by getattr(x, attr) is None.

    Args:
        obj: the starting object
        attr: the name of the chaining attribute

    Yields:
        Each successive object in the chain.
    N)Úgetattr)r-   r.   Únexts      r   Ú
attr_chainrŸ   ¿   sU   è è € õ �3˜ÑÔ€DØ
ð #Øˆ
ˆ
ˆ
Ý�t˜TÑ"Ô"ˆð ð #ð #ð #ð #ð #r   zefor_stmt< 'for' any 'in' node=any ':' any* >
        | comp_for< 'for' any 'in' node=any any* >
     z³
power<
    ( 'iter' | 'list' | 'tuple' | 'sorted' | 'set' | 'sum' |
      'any' | 'all' | 'enumerate' | (any* trailer< '.' 'join' >) )
    trailer< '(' node=any ')' >
    any*
>
z`
power<
    ( 'sorted' | 'enumerate' )
    trailer< '(' arglist<node=any any*> ')' >
    any*
>
Fc                 óh  — t           sMt          j        t          ¦  «        at          j        t          ¦  «        at          j        t
          ¦  «        ada t          t          t
          g}t          |t          | d¦  «        ¦  «        D ]*\  }}i }|                     ||¦  «        r|d         | u r dS Œ+dS )a    Returns true if node is in an environment where all that is required
        of it is being iterable (ie, it doesn't matter if it returns a list
        or an iterator).
        See test_map_nochange in test_fixers.py for some examples and tests.
        TÚparentr>   F)	Ú
pats_builtr   Úcompile_patternÚp0Úp1Úp2ÚziprŸ   Úmatch)r>   ÚpatternsÚpatternr¡   r‚   s        r   Úin_special_contextr«   å   s©   € õ ð ÝÔ$¥RÑ(Ô(ˆÝÔ$¥RÑ(Ô(ˆÝÔ$¥RÑ(Ô(ˆØˆ
Ý•B�ˆ|€HÝ˜x­°D¸(Ñ)CÔ)CÑDÔDð ð ‰ˆ�ØˆØ�=Š=˜ Ñ)Ô)ð 	¨g°f¬oÀÐ.EÐ.EØ�4�4øØˆ5r   c                 ó†  — | j         }|�|j        t          j        k    rdS | j        }|j        t
          j        t
          j        fv rdS |j        t
          j        k    r|j	        d         | u rdS |j        t
          j
        k    s;|j        t
          j        k    r(|�|j        t          j        k    s|j	        d         | u rdS dS )zG
    Check that something isn't an attribute or function name etc.
    NFr~   T)Úprev_siblingr�   r   r6   r¡   r
   ÚfuncdefÚclassdefÚ	expr_stmtrv   Ú
parametersÚtypedargslistr2   )r>   Úprevr¡   s      r   Úis_probably_builtinr´   ø   s½   € ð Ô€DØÐ˜DœI­¬Ò2Ð2àˆuØŒ[€FØ„{•t”|¥T¤]Ð3Ð3Ð3ØˆuØ„{•d”nÒ$Ð$¨¬¸Ô);¸tÐ)CÐ)CàˆuØ„{•d”oÒ%Ð%ØŒ[�DÔ.Ò.Ð.ØÐ $¤)­u¬{Ò":Ð":ØŒO˜AÔ $Ð&Ð&ð ˆuØˆ4r   c                 óÈ   — | �_| j         t          j        k    rAt          | j        ¦  «        dk    r)| j        d         }|j         t
          j        k    r|j        S | j        } | ­_dS )zFind the indentation of *node*.Nr‰   r   rJ   )	r�   r
   ÚsuiterŠ   rv   r   ÚINDENTr   r¡   )r>   Úindents     r   Úfind_indentationr¹     sd   € à
Ð
ØŒ9�œ
Ò"Ð"¥s¨4¬=Ñ'9Ô'9¸AÒ'=Ð'=Ø”] 1Ô%ˆFØŒ{�eœlÒ*Ð*Ø”|Ð#ØŒ{ˆð Ð
ð ˆ2r   c                 ó¾   — | j         t          j        k    r| S |                      ¦   «         } | j        d c}| _        t          t          j        | g¦  «        }||_        |S r‘   )r�   r
   r¶   r8   r¡   r   )r>   r¡   r¶   s      r   Ú
make_suiter»     sR   € Ø„y•D”JÒÐØˆØ�:Š:‰<Œ<€DØœ+ tÐ€FˆDŒKÝ•”˜d˜VÑ$Ô$€EØ€E„LØ€Lr   c                 óŠ   — | j         t          j        k    r-| j        } | st	          d¦  «        ‚| j         t          j        k    °-| S )zFind the top level namespace.z,root found before file_input node was found.)r�   r
   Ú
file_inputr¡   Ú
ValueErrorr‹   s    r   Ú	find_rootr¿   &  sJ   € ð Œ)•t”Ò
&Ð
&ØŒ{ˆØð 	MÝÐKÑLÔLÐLð Œ)•t”Ò
&Ð
&ð €Kr   c                 ó\   — t          |t          |¦  «        | ¦  «        }t          |¦  «        S )zÞ Returns true if name is imported from package at the
        top level of the tree which node belongs to.
        To cover the case of an import like 'import foo', use
        None for the package and 'foo' for the name. )Úfind_bindingr¿   Úbool)Úpackager(   r>   Úbindings       r   Údoes_tree_importrÅ   /  s'   € õ
 ˜4¥¨4¡¤°'Ñ:Ô:€GÝ�‰=Œ=Ðr   c                 ó@   — | j         t          j        t          j        fv S )z0Returns true if the node is an import statement.)r�   r
   Úimport_namerr   r‹   s    r   Ú	is_importrÈ   7  s   € àŒ9�Ô)­4Ô+;Ð<Ð<Ð<r   c           	      óF  — d„ }t          |¦  «        }t          | ||¦  «        rdS dx}}t          |j        ¦  «        D ]E\  }} ||¦  «        sŒt          |j        |d…         ¦  «        D ]\  }} ||¦  «        s nŒ||z   } |dk    r]t          |j        ¦  «        D ]H\  }}|j        t
          j        k    r.|j        r'|j        d         j        t          j        k    r|dz   } nŒI| €Ot          t
          j
        t          t          j        d¦  «        t          t          j        |d¬¦  «        g¦  «        }	n+t          | t          t          j        |d¬¦  «        g¦  «        }	|	t          ¦   «         g}
|                     |t          t
          j        |
¦  «        ¦  «         dS )z\ Works like `does_tree_import` but adds an import statement
        if it was not imported. c                 ón   — | j         t          j        k    o | j        ot	          | j        d         ¦  «        S )Nr~   )r�   r
   Úsimple_stmtrv   rÈ   r‹   s    r   Úis_import_stmtz$touch_import.<locals>.is_import_stmt>  s4   € Ø”	�TÔ-Ò-ð ,°$´-ð ,Ý˜$œ-¨Ô*Ñ+Ô+ð	-r   Nr~   r   ro   r   r   )r¿   rÅ   r›   rv   r�   r
   rË   r   rX   r   rÇ   r   r'   rx   rH   r9   )rÃ   r(   r>   rÌ   ÚrootÚ
insert_posÚoffsetÚidxÚnode2Úimport_rv   s              r   Útouch_importrÓ   ;  sÇ  € ð-ð -ð -õ �T‰?Œ?€Då˜  tÑ,Ô,ð Øˆð Ð€J�Ý˜tœ}Ñ-Ô-ð ð ‰	ˆˆTØˆ~˜dÑ#Ô#ð 	ØÝ& t¤}°S°T°TÔ':Ñ;Ô;ð 	ð 	‰MˆF�EØ!�> %Ñ(Ô(ð Ø�ðà˜6‘\ˆ
Øð �Q‚€Ý" 4¤=Ñ1Ô1ð 	ð 	‰IˆC�Ø”	�TÔ-Ò-Ð-°$´-Ð-ØŒ}˜QÔÔ$­¬Ò4Ð4Ø  1™W�
Ø�øà€Ý•tÔ'Ý•”˜XÑ&Ô&Ý•”˜T¨#Ð.Ñ.Ô.ð*
ñ ô ˆˆõ
 ˜W¥t­E¬J¸ÀSÐ'IÑ'IÔ'IÐ&JÑKÔKˆà�™œÐ#€HØ×Ò�j¥$¥tÔ'7¸Ñ"BÔ"BÑCÔCÐCÐCÐCr   c           
      óP  — |j         D �]}d}|j        t          j        k    rNt	          | |j         d         ¦  «        r|c S t          | t          |j         d         ¦  «        |¦  «        }|r|}�n™|j        t          j        t          j        fv r/t          | t          |j         d         ¦  «        |¦  «        }|r|}�nK|j        t          j	        k    r¢t          | t          |j         d         ¦  «        |¦  «        }|r|}�nt          |j         dd…         ¦  «        D ]U\  }}|j        t          j        k    r;|j        dk    r0t          | t          |j         |dz            ¦  «        |¦  «        }|r|}ŒVn”|j        t          v r|j         d         j        | k    r|}nmt          || |¦  «        r|}nY|j        t          j        k    rt          | ||¦  «        }n2|j        t          j        k    rt	          | |j         d         ¦  «        r|}|r|s|c S t%          |¦  «        r|c S �ŒdS )	zº Returns the node which binds variable name, otherwise None.
        If optional argument package is supplied, only imports will
        be returned.
        See test cases for examples.Nr   rŽ   r‰   rˆ   ú:é   r~   )rv   r�   r
   Úfor_stmtÚ_findrÁ   r»   Úif_stmtÚ
while_stmtÚtry_stmtr›   r   ÚCOLONr   Ú	_def_symsÚ_is_import_bindingrË   r°   rÈ   )r(   r>   rÃ   ÚchildÚretrN   ÚiÚkids           r   rÁ   rÁ   i  s3  € ð
 ”ð "ñ "ˆØˆØŒ:�œÒ&Ð&Ý�T˜5œ>¨!Ô,Ñ-Ô-ð Ø���Ý˜T¥:¨e¬n¸RÔ.@Ñ#AÔ#AÀ7ÑKÔKˆAØˆM˜�#ùØŒZ�DœL­$¬/Ð:Ð:Ð:Ý˜T¥:¨e¬n¸RÔ.@Ñ#AÔ#AÀ7ÑKÔKˆAØˆM˜�#ùØŒZ�4œ=Ò(Ð(Ý˜T¥:¨e¬n¸QÔ.?Ñ#@Ô#@À'ÑJÔJˆAØð &Ø�‘å'¨¬°q°r°rÔ(:Ñ;Ô;ð &ð &‘F�A�sØ”x¥5¤;Ò.Ð.°3´9ÀÒ3CÐ3Cå(¨­z¸%¼.ÈÈ1ÉÔ:MÑ/NÔ/NÐPWÑXÔX˜Ø˜ A˜cøð	&ð
 ŒZ�9Ð$Ð$¨¬¸Ô):Ô)@ÀDÒ)HÐ)HØˆCˆCÝ  t¨WÑ5Ô5ð 	ØˆCˆCØŒZ�4Ô+Ò+Ð+Ý˜t U¨GÑ4Ô4ˆCˆCØŒZ�4œ>Ò)Ð)Ý�T˜5œ>¨!Ô,Ñ-Ô-ð Ø�àð 	Øð Ø�
�
�
Ý˜‰~Œ~ð Ø�
�
�
ùØˆ4r   c                 óè   — |g}|rl|                      ¦   «         }|j        dk    r)|j        t          vr|                     |j        ¦  «         n"|j        t
          j        k    r|j        | k    r|S |°ld S )Né   )Úpopr�   Ú_block_symsÚextendrv   r   r'   r   )r(   r>   Únodess      r   rØ   rØ   ”  s}   € ØˆF€EØ
ð Ø�yŠy‰{Œ{ˆØŒ9�sŠ?ˆ?˜tœyµÐ;Ð;Ø�LŠL˜œÑ'Ô'Ð'Ð'ØŒY�%œ*Ò$Ð$¨¬°tÒ);Ð);ØˆKð ð ð ˆ4r   c                 ó.  — | j         t          j        k    rî|sì| j        d         }|j         t          j        k    r`|j        D ]V}|j         t          j        k    r|j        d         j        |k    r| c S Œ2|j         t          j        k    r|j        |k    r| c S ŒW�n{|j         t          j        k    r1|j        d         }|j         t          j        k    r|j        |k    r| S �n5|j         t          j        k    r|j        |k    r| S �n| j         t          j	        k    rü|r2t          | j        d         ¦  «                             ¦   «         |k    rdS | j        d         }|rt          d|¦  «        rdS |j         t          j        k    rt          ||¦  «        r| S |j         t          j        k    r0|j        d         }|j         t          j        k    r|j        |k    r| S n;|j         t          j        k    r|j        |k    r| S |r|j         t          j        k    r| S dS )zš Will return node if node will import name, or node
        will import * from package.  None is returned otherwise.
        See test cases for examples. r   r‰   rŽ   Nrˆ   Úas)r�   r
   rÇ   rv   Údotted_as_namesÚdotted_as_namer   r   r'   rr   ÚstrÚstriprØ   rq   Úimport_as_nameÚSTAR)r>   r(   rÃ   rw   rß   ÚlastrN   s          r   rÞ   rÞ   ž  s  € ð
 „y•DÔ$Ò$Ð$¨WÐ$ØŒm˜AÔˆØŒ8•tÔ+Ò+Ð+Øœð  ð  �Ø”:¥Ô!4Ò4Ð4Ø”~ aÔ(Ô.°$Ò6Ð6Ø#˜˜˜ð 7à”Z¥5¤:Ò-Ð-°%´+ÀÒ2EÐ2EØ�K�K�Køñ ð ŒX�Ô,Ò,Ð,Ø”< Ô#ˆDØŒy�EœJÒ&Ð&¨4¬:¸Ò+=Ð+=Ø�ùØŒX�œÒ#Ð#¨¬	°TÒ(9Ð(9ØˆKùØ	Œ•dÔ&Ò	&Ð	&ð ð 	•s˜4œ=¨Ô+Ñ,Ô,×2Ò2Ñ4Ô4¸Ò?Ð?Ø�4ØŒM˜!ÔˆØð 	•u˜T 1‘~”~ð 	à�4ØŒV•tÔ+Ò+Ð+µ°d¸A±´Ð+ØˆKØŒV•tÔ*Ò*Ð*Ø”J˜q”MˆEØŒz�UœZÒ'Ð'¨E¬K¸4Ò,?Ð,?Ø�øØŒV•u”zÒ!Ð! a¤g°¢o oØˆKØð 	˜œ¥5¤:Ò-Ð-ØˆKØˆ4r   r‘   )NN)6Ú__doc__Úpgen2r   Úpytreer   r   Úpygramr   r
   rJ   r   r   r   r   r%   r)   r/   r3   r,   r?   rC   rH   rK   rO   rV   rZ   rl   rx   r†   rŒ   r�   r’   Úconsuming_callsrŸ   r¤   r¥   r¦   r¢   r«   r´   r¹   r»   r¿   rÅ   rÈ   rÓ   r¯   r®   rÝ   rÁ   r+   ræ   rØ   rÞ   r   r   r   ú<module>r÷      sè  ðØ 7Ð 7ð Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ð Ð Ø *Ð *Ð *Ð *Ð *Ð *Ø Ð Ð Ð Ð Ð ð:ð :ð :ð!ð !ð !ð!ð !ð !ð	Hð 	Hð 	Hð1ð 1ð 1ð 1ð4ð 4ð 4ð"ð "ð "ð ð  ð  ð  ˜™œ¨&¨&©(¬(ð ð ð ð ðð ð ð ð%ð %ð %ð#ð #ð #ð0ð 0ð 0ð 0ð9ð 9ð 9ð5ð 5ð 5ð 5ð2ð 2ð 2ð 2ð0ð ð ð&ð ð ð8
/ð 
/ð 
/ð0ð 0ð 0ð7ð 7ð 7ð.ð .ð .€ð#ð #ð #ð&	€ð€ð€ð €
ðð ð ð&ð ð ð.ð ð ðð ð ðð ð ðð ð ð=ð =ð =ð*Dð *Dð *DðZ Œ]˜DœLÐ)€	ð(ð (ð (ð (ðT Œ|˜Tœ]¨D¬LÐ9€ðð ð ð'ð 'ð 'ð 'ð 'ð 'r   