§
    ŒŸj—’  ã                   ó  — d Z ddlZddlmZ ddlmZmZ ddlmZm	Z	m
Z
mZmZmZ ddlmZ ddlmZ  eg d¢¦  «        Z ed	d
g¦  «        ez  Z eg d¢¦  «        ez  Z eg d¢¦  «        Z eddg¦  «        Z G d„ d¦  «        Z G d„ d¦  «        Z G d„ dee
¦  «        Z G d„ de¦  «        Z G d„ dee	¦  «        Z G d„ dee¦  «        Z G d„ dee¦  «        Z G d„ dee¦  «        Z G d„ d e¦  «        Z  G d!„ d"e¦  «        Z! G d#„ d$e¦  «        Z" G d%„ d&e¦  «        Z# G d'„ d(e#¦  «        Z$ G d)„ d*e#¦  «        Z% G d+„ d,e¦  «        Z& G d-„ d.e¦  «        Z' G d/„ d0e¦  «        Z( G d1„ d2¦  «        Z) G d3„ d4ee)¦  «        Z* G d5„ d6ee)¦  «        Z+ G d7„ d8ee¦  «        Z, G d9„ d:e,¦  «        Z- G d;„ d<e¦  «        Z. G d=„ d>e,¦  «        Z/ G d?„ d@e/¦  «        Z0dA„ Z1 G dB„ dCe/¦  «        Z2 G dD„ dEe2¦  «        Z3 G dF„ dGe¦  «        Z4 G dH„ dIe4¦  «        Z5 G dJ„ dKe4¦  «        Z6 G dL„ dMe4¦  «        Z7 G dN„ dOe4¦  «        Z8 G dP„ dQe4¦  «        Z9 G dR„ dSe¦  «        Z: G dT„ dUe:¦  «        Z; G dV„ dWe:¦  «        Z< G dX„ dYe¦  «        Z= G dZ„ d[e=¦  «        Z> G d\„ d]e=¦  «        Z? G d^„ d_e=¦  «        Z@ G d`„ dae¦  «        ZAdb„ ZB G dc„ ddee¦  «        ZC G de„ dfe¦  «        ZD G dg„ dhe¦  «        ZE G di„ dje¦  «        ZFeFZG G dk„ dle¦  «        ZHdS )ma  
This is the syntax tree for Python 3 syntaxes. The classes represent
syntax elements like functions and imports.

All of the nodes can be traced back to the `Python grammar file
<https://docs.python.org/3/reference/grammar.html>`_. If you want to know how
a tree is structured, just analyse that file (for each Python version it's a
bit different).

There's a lot of logic here that makes it easier for Jedi (and other libraries)
to deal with a Python syntax tree.

By using :py:meth:`parso.tree.NodeOrLeaf.get_code` on a module, you can get
back the 1-to-1 representation of the input given to the parser. This is
important if you want to refactor a parser tree.

>>> from parso import parse
>>> parser = parse('import os')
>>> module = parser.get_root_node()
>>> module
<Module: @1-1>

Any subclasses of :class:`Scope`, including :class:`Module` has an attribute
:attr:`iter_imports <Scope.iter_imports>`:

>>> list(module.iter_imports())
[<ImportName: import os@1,0>]

Changes to the Python Grammar
-----------------------------

A few things have changed when looking at Python grammar files:

- :class:`Param` does not exist in Python grammar files. It is essentially a
  part of a ``parameters`` node.  |parso| splits it up to make it easier to
  analyse parameters. However this just makes it easier to deal with the syntax
  tree, it doesn't actually change the valid syntax.
- A few nodes like `lambdef` and `lambdef_nocond` have been merged in the
  syntax tree to make it easier to do deal with them.

Parser Tree Classes
-------------------
é    N)ÚMapping)ÚTupleÚAny)ÚNodeÚBaseNodeÚLeafÚ	ErrorNodeÚ	ErrorLeafÚsearch_ancestor)Úsplit_prefix)Úsplit_lines)Úif_stmtÚ
while_stmtÚfor_stmtÚtry_stmtÚ	with_stmtÚ
async_stmtÚsuiter   Úsimple_stmt)r   r   Ú	decoratedÚasync_funcdef)	Ú	expr_stmtÚsync_comp_forr   r   Úimport_nameÚimport_fromÚparamÚdel_stmtÚnamedexpr_testr   r   c                   ó8   — e Zd ZU dZeed<   ded<   eed<   d„ ZdS )ÚDocstringMixin© Útypeú	list[Any]ÚchildrenÚparentc                 ó„  — | j         dk    r| j        d         }n�| j         dv rA| j        | j                             d¦  «        dz            }|j         dk    r|j        d         }n7| j        }|j        j        }|                     |¦  «        }|sdS ||dz
           }|j         dk    r|j        d         }|j         d	k    r|S dS )
zN
        Returns the string leaf of a docstring. e.g. ``r'''foo'''``.
        Ú
file_inputr   ©ÚfuncdefÚclassdefú:é   r   Nr   Ústring)r"   r$   Úindexr%   )ÚselfÚnoder   Úcr.   s        ú^/var/www/finuniver-perm.ru/html/student/venv/lib/python3.11/site-packages/parso/python/tree.pyÚget_doc_nodezDocstringMixin.get_doc_nodeJ   sÕ   € ð Œ9˜Ò$Ð$Ø”= Ô#ˆDˆDØŒYÐ1Ð1Ð1Ø”= ¤×!4Ò!4°SÑ!9Ô!9¸AÑ!=Ô>ˆDØŒy˜GÒ#Ð#Ø”} QÔ'�øàœ+ˆKØÔ"Ô+ˆAØ—G’G˜KÑ(Ô(ˆEØð Ø�tØ�U˜Q‘Y”<ˆDàŒ9˜Ò%Ð%Ø”= Ô#ˆDØŒ9˜Ò Ð ØˆKØˆtó    N)Ú__name__Ú
__module__Ú__qualname__Ú	__slots__ÚstrÚ__annotations__r   r3   r!   r4   r2   r    r    D   sH   € € € € € € Ø€IØ
€I€I�IØÐÐÑØ€K€K�Kðð ð ð ð r4   r    c                   ó(   — e Zd ZU dZdZded<   d„ ZdS )ÚPythonMixinz)
    Some Python specific utilities.
    r!   r#   r$   c                 óÎ   — | j         D ]\}t          |t          ¦  «        r*|j        dk    r|j        |cxk    r|j        k    rn Œ<|c S ŒA|                     |¦  «        }|�|c S Œ]dS )z„
        Given a (line, column) tuple, returns a :py:class:`Name` or ``None`` if
        there is no name at that position.
        ÚnameN)r$   Ú
isinstancer   r"   Ú	start_posÚend_posÚget_name_of_position)r/   Úpositionr1   Úresults       r2   rB   z PythonMixin.get_name_of_positionj   s�   € ð
 ”ð 	"ð 	"ˆAÝ˜!�TÑ"Ô"ð "Ø”6˜VÒ#Ð#¨¬°xÐ(LÐ(LÒ(LÐ(LÀ1Ä9Ò(LÐ(LÐ(LÐ(LÐ(LØ�H�H�Høà×/Ò/°Ñ9Ô9�ØÐ%Ø!�M�M�Mð &àˆtr4   N)r5   r6   r7   Ú__doc__r8   r:   rB   r!   r4   r2   r<   r<   c   sB   € € € € € € ðð ð €IØÐÐÑðð ð ð ð r4   r<   c                   ó   — e Zd ZdZd„ Zd„ ZdS )Ú
PythonLeafr!   c                 óF   — t          | |                      ¦   «         ¦  «        S ©N)r   Úget_start_pos_of_prefix©r/   s    r2   Ú_split_prefixzPythonLeaf._split_prefix}   s   € Ý˜D $×">Ò">Ñ"@Ô"@ÑAÔAÐAr4   c                 óð   — |                       ¦   «         }|�(|j        dk    r|j        dv r|                      ¦   «         }|€0t          | j        ¦  «        }| j        t          |¦  «        z
  dz   dfS |j        S )z[
        Basically calls :py:meth:`parso.tree.NodeOrLeaf.get_start_pos_of_prefix`.
        NÚ
error_leaf)ÚINDENTÚDEDENTÚERROR_DEDENTr,   r   )Úget_previous_leafr"   Ú
token_typer   ÚprefixÚlineÚlenrA   )r/   Úprevious_leafÚliness      r2   rJ   z"PythonLeaf.get_start_pos_of_prefix€   sƒ   € ð ×.Ò.Ñ0Ô0ˆØÐ$¨Ô);¸|Ò)KÐ)KØ!Ô,Ð0TÐTÐTØ)×;Ò;Ñ=Ô=ˆMàÐ Ý ¤Ñ,Ô,ˆEà”9�s 5™zœzÑ)¨AÑ-¨qÐ0Ð0ØÔ$Ð$r4   N)r5   r6   r7   r8   rL   rJ   r!   r4   r2   rG   rG   z   s:   € € € € € Ø€IðBð Bð Bð%ð %ð %ð %ð %r4   rG   c                   óB   — e Zd ZdZdZedeeef         fd„¦   «         ZdS )Ú_LeafWithoutNewlinesz.
    Simply here to optimize performance.
    r!   Úreturnc                 óH   — | j         | j        t          | j        ¦  «        z   fS rI   )rU   ÚcolumnrV   ÚvaluerK   s    r2   rA   z_LeafWithoutNewlines.end_pos˜   s   € àŒy˜$œ+­¨D¬J©¬Ñ7Ð7Ð7r4   N)	r5   r6   r7   rE   r8   Úpropertyr   ÚintrA   r!   r4   r2   rZ   rZ   ’   sR   € € € € € ðð ð €Iàð8˜˜s C˜xœð 8ð 8ð 8ñ „Xð8ð 8ð 8r4   rZ   c                   ó   — e Zd ZdZdS )ÚPythonBaseNoder!   N©r5   r6   r7   r8   r!   r4   r2   rb   rb   ž   ó   € € € € € Ø€I€I€Ir4   rb   c                   ó   — e Zd ZdZdS )Ú
PythonNoder!   Nrc   r!   r4   r2   rf   rf   ¢   rd   r4   rf   c                   ó   — e Zd ZdZdS )ÚPythonErrorNoder!   Nrc   r!   r4   r2   rh   rh   ¦   rd   r4   rh   c                   ó   — e Zd ZdZdS )ÚPythonErrorLeafr!   Nrc   r!   r4   r2   rj   rj   ª   rd   r4   rj   c                   ó   — e Zd ZdZdZd„ ZdS )Ú	EndMarkerr!   Ú	endmarkerc                 ól   — dt          | ¦  «        j        ›dt          | j        ¦  «        ›d| j        ›d�S )Nú<z	: prefix=z	 end_pos=ú>)r"   r5   ÚreprrT   rA   rK   s    r2   Ú__repr__zEndMarker.__repr__²   s:   € € å�‰JŒJÔÐÐ¥ d¤kÑ!2Ô!2Ð!2Ð!2°D´L°L°Lð
ð 	
r4   N)r5   r6   r7   r8   r"   rr   r!   r4   r2   rl   rl   ®   s-   € € € € € Ø€IØ€Dð
ð 
ð 
ð 
ð 
r4   rl   c                   ó    — e Zd ZdZdZdZd„ ZdS )ÚNewlinez&Contains NEWLINE and ENDMARKER tokens.r!   Únewlinec                 ó\   — dt          | ¦  «        j        ›dt          | j        ¦  «        ›d�S )Nro   ú: rp   )r"   r5   rq   r^   rK   s    r2   rr   zNewline.__repr__½   s.   € € Ý! $™ZœZÔ0Ð0Ð0µ$°t´zÑ2BÔ2BÐ2BÐ2BÐCÐCr4   N)r5   r6   r7   rE   r8   r"   rr   r!   r4   r2   rt   rt   ¸   s8   € € € € € Ø0Ð0Ø€IØ€DðDð Dð Dð Dð Dr4   rt   c                   ó0   — e Zd ZdZdZdZd„ Zd	d„Zd
d„ZdS )ÚNameza
    A string. Sometimes it is important to know if the string belongs to a name
    or not.
    r>   r!   c           	      ób   — dt          | ¦  «        j        ›d| j        ›d| j        ›d| j        ›d�	S )Nro   rw   ú@ú,rp   )r"   r5   r^   rU   r]   rK   s    r2   rr   zName.__repr__É   s9   € € Ý#'¨¡:¤:Ô#6Ð#6Ð#6¸¼
¸
¸
Ø#'¤9 9 9¨d¬k¨k¨kð;ð 	;r4   Fc                 ó2   — |                       |¬¦  «        duS )z<
        Returns True if the name is being defined.
        )Úinclude_setitemN)Úget_definition©r/   r~   s     r2   Úis_definitionzName.is_definitionÍ   s    € ð ×"Ò"°?Ð"ÑCÔCÈ4ÐOÐOr4   c                 ó<  — | j         }|j        }|dv r| |j        k    r|S dS |dk    r!|                      ¦   «         dk    r|j         S dS |�Q|j        dk    rdS |j        t          v r-| |                     |¦  «        v r|S |r|j        t          v r|S dS |j         }|­QdS )zî
        Returns None if there's no definition for a name.

        :param import_name_always: Specifies if an import name is always a
            definition. Normally foo in `from foo import bar` is not a
            definition.
        r(   NÚexcept_clauseÚasr   )r%   r"   r>   Úget_previous_siblingÚ_GET_DEFINITION_TYPESÚget_defined_namesÚ_IMPORTS)r/   Úimport_name_alwaysr~   r0   Útype_s        r2   r   zName.get_definitionÓ   sÜ   € ð Œ{ˆØ”	ˆàÐ+Ð+Ð+Ø�t”yÒ Ð Ø�Ø�4à�OÒ#Ð#Ø×(Ò(Ñ*Ô*¨dÒ2Ð2Ø”{Ð"Ø�4àÐØŒy˜GÒ#Ð#Ø�tØŒyÕ1Ð1Ð1Ø˜4×1Ò1°/ÑBÔBÐBÐBØ�KØ%ð  ¨$¬)µxÐ*?Ð*?Ø�KØ�tØ”;ˆDð Ðð ˆtr4   N©F)FF)	r5   r6   r7   rE   r"   r8   rr   r�   r   r!   r4   r2   ry   ry   Á   se   € € € € € ðð ð €DØ€Ið;ð ;ð ;ðPð Pð Pð Pðð ð ð ð ð r4   ry   c                   ó   — e Zd ZdZdS )ÚLiteralr!   Nrc   r!   r4   r2   r�   r�   õ   rd   r4   r�   c                   ó   — e Zd ZdZdZdS )ÚNumberÚnumberr!   N©r5   r6   r7   r"   r8   r!   r4   r2   r�   r�   ù   s   € € € € € Ø€DØ€I€I€Ir4   r�   c                   ó2   — e Zd ZdZdZed„ ¦   «         Zd„ ZdS )ÚStringr-   r!   c                 ó\   — t          j        d| j        ¦  «                             d¦  «        S )Nz\w*(?=[\'"])r   )ÚreÚmatchr^   ÚgrouprK   s    r2   Ústring_prefixzString.string_prefix  s$   € åŒx˜¨¬Ñ4Ô4×:Ò:¸1Ñ=Ô=Ð=r4   c                 óÊ   — t          j        d| j        t           j        ¬¦  «        }|                     d¦  «        d t          |                     d¦  «        ¦  «         …         S )Nz('{3}|"{3}|'|")(.*)$)Úflagsé   r,   )r•   Úsearchr^   ÚDOTALLr—   rV   )r/   r–   s     r2   Ú_get_payloadzString._get_payload  sW   € Ý”	Ø'ØŒJÝ”)ð
ñ 
ô 
ˆð
 �{Š{˜1‰~Œ~Ð3¥ E§K¢K°¡N¤NÑ 3Ô 3Ð3Ð3Ô4Ð4r4   N)r5   r6   r7   r"   r8   r_   r˜   rž   r!   r4   r2   r“   r“   þ   sF   € € € € € Ø€DØ€Iàð>ð >ñ „Xð>ð5ð 5ð 5ð 5ð 5r4   r“   c                   ó   — e Zd ZdZdZdZdS )ÚFStringStringúx
    f-strings contain f-string expressions and normal python strings. These are
    the string parts of f-strings.
    Úfstring_stringr!   N©r5   r6   r7   rE   r"   r8   r!   r4   r2   r    r      s$   € € € € € ðð ð €DØ€I€I€Ir4   r    c                   ó   — e Zd ZdZdZdZdS )ÚFStringStartr¡   Úfstring_startr!   Nr£   r!   r4   r2   r¥   r¥     s$   € € € € € ðð ð €DØ€I€I€Ir4   r¥   c                   ó   — e Zd ZdZdZdZdS )Ú
FStringEndr¡   Úfstring_endr!   Nr£   r!   r4   r2   r¨   r¨   !  s$   € € € € € ðð ð €DØ€I€I€Ir4   r¨   c                   ó*   — e Zd ZU dZeed<   d„ Zd„ ZdS )Ú_StringComparisonMixinr!   r^   c                 óJ   — t          |t          ¦  «        r| j        |k    S | |u S )ze
        Make comparisons with strings easy.
        Improves the readability of the parser.
        )r?   r9   r^   ©r/   Úothers     r2   Ú__eq__z_StringComparisonMixin.__eq__.  s-   € õ
 �e�SÑ!Ô!ð 	'Ø”: Ò&Ð&à�uˆ}Ðr4   c                 ó*   — t          | j        ¦  «        S rI   )Úhashr^   rK   s    r2   Ú__hash__z_StringComparisonMixin.__hash__8  ó   € Ý�D”JÑÔÐr4   N)r5   r6   r7   r8   r   r:   r¯   r²   r!   r4   r2   r«   r«   *  sB   € € € € € € Ø€IØ€J€J�Jðð ð ð ð  ð  ð  ð  r4   r«   c                   ó   — e Zd ZdZdZdS )ÚOperatorÚoperatorr!   Nr‘   r!   r4   r2   rµ   rµ   <  s   € € € € € Ø€DØ€I€I€Ir4   rµ   c                   ó   — e Zd ZdZdZdS )ÚKeywordÚkeywordr!   Nr‘   r!   r4   r2   r¸   r¸   A  s   € € € € € Ø€DØ€I€I€Ir4   r¸   c                   óJ   ‡ — e Zd ZdZdZˆ fd„Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zˆ xZS )
ÚScopez“
    Super class for the parser tree, which represents the state of a python
    text file.
    A Scope is either a function, class or lambda.
    r!   c                 óJ   •— t          ¦   «                              |¦  «         d S rI   ©ÚsuperÚ__init__©r/   r$   Ú	__class__s     €r2   r¿   zScope.__init__N  ó!   ø€ Ý‰Œ×Ò˜Ñ"Ô"Ð"Ð"Ð"r4   c                 ó,   — |                       d¦  «        S )z9
        Returns a generator of `funcdef` nodes.
        r)   ©Ú_search_in_scoperK   s    r2   Úiter_funcdefszScope.iter_funcdefsQ  s   € ð ×$Ò$ YÑ/Ô/Ð/r4   c                 ó,   — |                       d¦  «        S )z:
        Returns a generator of `classdef` nodes.
        r*   rÄ   rK   s    r2   Úiter_classdefszScope.iter_classdefsW  s   € ð ×$Ò$ ZÑ0Ô0Ð0r4   c                 ó.   — |                       dd¦  «        S )zO
        Returns a generator of `import_name` and `import_from` nodes.
        r   r   rÄ   rK   s    r2   Úiter_importszScope.iter_imports]  s   € ð ×$Ò$ ]°MÑBÔBÐBr4   c                 ó2   ‡‡— ˆˆfd„Š ‰| j         ¦  «        S )Nc              3   óx   •K  — | D ]3}|j         ‰v r|V — |j         t          v r ‰|j        ¦  «        E d {V —† Œ4d S rI   )r"   Ú_FUNC_CONTAINERSr$   )r$   ÚelementÚnamesÚscans     €€r2   rÐ   z$Scope._search_in_scope.<locals>.scand  sj   øè è € Ø#ð 6ð 6�Ø”< 5Ð(Ð(Ø!�M�M�MØ”<Õ#3Ð3Ð3Ø#˜t GÔ$4Ñ5Ô5Ð5Ð5Ð5Ð5Ð5Ð5Ð5øð	6ð 6r4   ©r$   )r/   rÏ   rÐ   s    `@r2   rÅ   zScope._search_in_scopec  s6   øø€ ð	6ð 	6ð 	6ð 	6ð 	6ð 	6ð ˆt�D”MÑ"Ô"Ð"r4   c                 ó   — | j         d         S )zD
        Returns the part that is executed by the function.
        éÿÿÿÿrÑ   rK   s    r2   Ú	get_suitezScope.get_suitem  s   € ð Œ}˜RÔ Ð r4   c           	      ó°   — 	 | j         j        }n# t          $ r d}Y nw xY wdt          | ¦  «        j        ›d|›d| j        d         ›d| j        d         ›d�	S )NÚ ro   rw   r{   r   ú-rp   )r>   r^   ÚAttributeErrorr"   r5   r@   rA   )r/   r>   s     r2   rr   zScope.__repr__s  sy   € ð	Ø”9”?ˆDˆDøÝð 	ð 	ð 	ØˆDˆDˆDð	øøøøõ $(¨¡:¤:Ô#6Ð#6Ð#6¸¸¸Ø#'¤>°!Ô#4Ð#4Ð#4°d´lÀ1´o°o°oðGð 	Gs   ‚ ��)r5   r6   r7   rE   r8   r¿   rÆ   rÈ   rÊ   rÅ   rÔ   rr   Ú__classcell__©rÁ   s   @r2   r»   r»   F  s­   ø€ € € € € ðð ð
 €Ið#ð #ð #ð #ð #ð0ð 0ð 0ð1ð 1ð 1ðCð Cð Cð#ð #ð #ð!ð !ð !ðGð Gð Gð Gð Gð Gð Gr4   r»   c                   ó6   ‡ — e Zd ZdZdZdZˆ fd„Zd„ Zd„ Zˆ xZ	S )ÚModulez“
    The top scope, which is always a module.
    Depending on the underlying parser this may be a full module or just a part
    of a module.
    )Ú_used_namesr'   c                 óX   •— t          ¦   «                              |¦  «         d | _        d S rI   )r¾   r¿   rÝ   rÀ   s     €r2   r¿   zModule.__init__†  s)   ø€ Ý‰Œ×Ò˜Ñ"Ô"Ð"ØˆÔÐÐr4   c              #   óü   K  — |                       ¦   «         D ]d}|j        dk    rW|j        dk    rL|                     ¦   «         D ]7}d„ |D ¦   «         }t	          |¦  «        dk    r|d         dk    r
|d         V — Œ8ŒedS )zU
        :return: A list of future import names.
        :rtype: list of str
        r   r   c                 ó   — g | ]	}|j         ‘Œ
S r!   )r^   )Ú.0r>   s     r2   ú
<listcomp>z4Module._iter_future_import_names.<locals>.<listcomp>–  s   € Ð9Ð9Ð9¨D˜TœZÐ9Ð9Ð9r4   r›   Ú
__future__r,   N)rÊ   r"   ÚlevelÚ	get_pathsrV   )r/   ÚimpÚpathrÏ   s       r2   Ú_iter_future_import_namesz Module._iter_future_import_namesŠ  sš   è è € ð ×$Ò$Ñ&Ô&ð 	'ð 	'ˆCØŒx˜=Ò(Ð(¨S¬Y¸!ª^¨^ØŸMšM™OœOð 'ð '�DØ9Ð9°DÐ9Ñ9Ô9�EÝ˜5‘z”z Q’�¨5°¬8°|Ò+CÐ+CØ# Aœh˜˜˜øøð	'ð 	'r4   c                 óp   ‡‡— | j         €'i Šˆˆfd„Š ‰| ¦  «         t          ‰¦  «        | _         | j         S )z�
        Returns all the :class:`Name` leafs that exist in this module. This
        includes both definitions and references of names.
        Nc                 óÖ   •— 	 | j         }|D ]} ‰|¦  «         Œd S # t          $ rB | j        dk    r3‰                     | j        g ¦  «        }|                     | ¦  «         Y d S Y d S w xY w)Nr>   )r$   rØ   r"   Ú
setdefaultr^   Úappend)r0   r$   ÚchildÚarrÚdctÚrecurses       €€r2   rð   z&Module.get_used_names.<locals>.recurse£  sž   ø€ ð'Ø#œ}�Hð "*ð 'ð '˜Ø˜ ™œ˜˜ð'ð 'øõ &ð )ð )ð )Ø”y FÒ*Ð*Ø!Ÿnšn¨T¬Z¸Ñ<Ô<˜ØŸ
š
 4Ñ(Ô(Ð(Ð(Ð(Ð(ð +Ð*Ð*ð)øøøs   ƒ œAA(Á'A()rÝ   ÚUsedNamesMapping)r/   rï   rð   s    @@r2   Úget_used_nameszModule.get_used_namesš  sZ   øø€ ð
 ÔÐ#àˆCð	'ð 	'ð 	'ð 	'ð 	'ð 	'ð ˆG�D‰MŒMˆMÝ/°Ñ4Ô4ˆDÔØÔÐr4   )
r5   r6   r7   rE   r8   r"   r¿   rè   rò   rÙ   rÚ   s   @r2   rÜ   rÜ   }  sl   ø€ € € € € ðð ð
 !€IØ€Dð ð  ð  ð  ð  ð'ð 'ð 'ð  ð  ð  ð  ð  ð  ð  r4   rÜ   c                   ó   — e Zd ZdZdZdS )Ú	DecoratorÚ	decoratorr!   Nr‘   r!   r4   r2   rô   rô   ³  s   € € € € € Ø€DØ€I€I€Ir4   rô   c                   ó.   — e Zd ZdZed„ ¦   «         Zd„ ZdS )ÚClassOrFuncr!   c                 ó   — | j         d         S )zR
        Returns the `Name` leaf that defines the function or class name.
        r,   rÑ   rK   s    r2   r>   zClassOrFunc.name»  s   € ð
 Œ}˜QÔÐr4   c                 ó¼   — | j         }|j        dk    r|j         }|j        dk    r7|j        d         j        dk    r|j        d         j        S |j        dd…         S g S )z4
        :rtype: list of :class:`Decorator`
        r   r   r   Ú
decoratorsNr,   )r%   r"   r$   )r/   r   s     r2   Úget_decoratorszClassOrFunc.get_decoratorsÂ  sk   € ð ”Kˆ	ØŒ>˜_Ò,Ð,Ø!Ô(ˆIàŒ>˜[Ò(Ð(ØÔ! !Ô$Ô)¨\Ò9Ð9Ø Ô)¨!Ô,Ô5Ð5à Ô)¨"¨1¨"Ô-Ð-àˆIr4   N)r5   r6   r7   r8   r_   r>   rû   r!   r4   r2   r÷   r÷   ¸  sA   € € € € € Ø€Iàð ð  ñ „Xð ðð ð ð ð r4   r÷   c                   ó0   ‡ — e Zd ZdZdZdZˆ fd„Zd„ Zˆ xZS )ÚClassz>
    Used to store the parsed contents of a python class.
    r*   r!   c                 óJ   •— t          ¦   «                              |¦  «         d S rI   r½   rÀ   s     €r2   r¿   zClass.__init__Ú  rÂ   r4   c                 ó€   — t          | j        ¦  «        D ](\  }}|dk    r| j        |dz            }|dk    r dS |c S Œ)dS )z
        Returns the `arglist` node that defines the super classes. It returns
        None if there are no arguments.
        ú(r,   ú)N©Ú	enumerater$   )r/   Úirí   Ú
next_childs       r2   Úget_super_arglistzClass.get_super_arglistÝ  sd   € õ
 " $¤-Ñ0Ô0ð 	"ð 	"‰HˆAˆuØ˜Š|ˆ|Ø!œ]¨1¨q©5Ô1�
Ø Ò$Ð$Ø˜4˜4Ø!Ð!Ð!Ð!ð	 ð
 ˆtr4   )	r5   r6   r7   rE   r"   r8   r¿   r  rÙ   rÚ   s   @r2   rý   rý   Ó  s]   ø€ € € € € ðð ð €DØ€Ið#ð #ð #ð #ð #ðð ð ð ð ð ð r4   rý   c                 óò  — 	 |d         }n# t           $ r g cY S w xY w|j        dv rt          |g| ¦  «        gS |dk    r|gS |j        dk    r|g}n|j        }g }d}t	          |dgz   d¦  «        D ]‡\  }}|�|dk    rz|||…         }|rn|d         dk    rt          |¦  «        dk    s|d         dk    s|d         dk    r|D ]	}	| |	_        Œ
||z  }n#|                     t          || ¦  «        ¦  «         |}Œˆ|S )	aø  
    `argslist_list` is a list that can contain an argslist as a first item, but
    most not. It's basically the items between the parameter brackets (which is
    at most one item).
    This function modifies the parser structure. It generates `Param` objects
    from the normal ast. Those param objects do not exist in a normal ast, but
    make the evaluation of the ast tree so much easier.
    You could also say that this function replaces the argslist node with a
    list of Param objects.
    r   )r>   ÚfpdefÚ*ÚtfpdefNr,   r|   ú/)Ú
IndexErrorr"   ÚParamr$   r  rV   r%   rì   )
r%   Úargslist_listÚfirstr$   Únew_childrenÚstartÚendrí   Úparam_childrenÚps
             r2   Ú_create_paramsr  ë  sk  € ðØ˜aÔ ˆˆøÝð ð ð Øˆ	ˆ	ˆ	ðøøøð „zÐ&Ð&Ð&Ý�u�g˜vÑ&Ô&Ð'Ð'Ø	�#ŠˆØˆwˆàŒ:˜Ò!Ð!Ø�wˆHˆHà”~ˆHØˆØˆå# H°¨vÑ$5°qÑ9Ô9ð 	 ð 	 ‰JˆC�Øˆ} ¨¢ Ø!)¨%°¨)Ô!4�Ø!ð 
 Ø% aÔ(¨CÒ/Ð/Ý!$ ^Ñ!4Ô!4¸Ò!9Ð!9Ø$2°1Ô$5¸Ò$<Ð$<Ø-¨aÔ0°CÒ7Ð7Ø!/ð .ð .˜AØ'-˜AœH˜HØ$¨Ñ6˜˜à$×+Ò+­E°.À&Ñ,IÔ,IÑJÔJÐJØ�EøØÐs   ‚ ‹™c                   ó€   ‡ — e Zd ZdZdZdZˆ fd„Zd„ Zd„ Zd„ Z	e
d„ ¦   «         Zd	„ Zd
„ Zd„ Zd„ Ze
d„ ¦   «         Zˆ xZS )ÚFunctionan  
    Used to store the parsed contents of a python function.

    Children::

        0. <Keyword: def>
        1. <Name>
        2. parameter list (including open-paren and close-paren <Operator>s)
        3. or 5. <Operator: :>
        4. or 6. Node() representing function body
        3. -> (if annotation is also present)
        4. annotation (if present)
    r)   r!   c                 óú   •— t          ¦   «                              |¦  «         |                      ¦   «         }|j        dd…         }t	          d„ |D ¦   «         ¦  «        st          ||¦  «        |j        dd…<   d S d S )Nr,   rÓ   c              3   ó@   K  — | ]}t          |t          ¦  «        V — Œd S rI   ©r?   r  ©rá   rí   s     r2   ú	<genexpr>z$Function.__init__.<locals>.<genexpr>-  ó,   è è € ÐMÐM°•:˜e¥UÑ+Ô+ÐMÐMÐMÐMÐMÐMr4   )r¾   r¿   Ú_find_parametersr$   Úanyr  )r/   r$   Ú
parametersÚparameters_childrenrÁ   s       €r2   r¿   zFunction.__init__)  s�   ø€ Ý‰Œ×Ò˜Ñ"Ô"Ð"Ø×*Ò*Ñ,Ô,ˆ
Ø(Ô1°!°B°$Ô7ÐÝÐMÐMÐ9LÐMÑMÔMÑMÔMð 	Ý(6ØÐ/ñ)ô )ˆJÔ  " Ñ%Ð%Ð%ð	ð 	r4   c                 óR   — | j         D ]}|j        dk    r|c S Œt          d¦  «        ‚)Nr   z(A function should always have parameters)r$   r"   Ú	Exception)r/   rí   s     r2   r  zFunction._find_parameters2  s=   € Ø”]ð 	ð 	ˆEØŒz˜\Ò)Ð)Ø���ð *åÐBÑCÔCÐCr4   c                 ó4   — |                       ¦   «         j        S rI   )r  r$   rK   s    r2   Ú_get_param_nodeszFunction._get_param_nodes8  s   € Ø×$Ò$Ñ&Ô&Ô/Ð/r4   c                 ó>   — d„ |                       ¦   «         D ¦   «         S )z.
        Returns a list of `Param()`.
        c                 ó(   — g | ]}|j         d k    ¯|‘ŒS )r   )r"   )rá   r  s     r2   râ   z'Function.get_params.<locals>.<listcomp>?  s$   € ÐHÐHÐH�a°a´fÀÒ6GÐ6G�Ð6GÐ6GÐ6Gr4   )r%  rK   s    r2   Ú
get_paramszFunction.get_params;  s%   € ð IÐH˜4×0Ò0Ñ2Ô2ÐHÑHÔHÐHr4   c                 ó   — | j         d         S ©Nr,   rÑ   rK   s    r2   r>   zFunction.nameA  ó   € àŒ}˜QÔÐr4   c                 ó.   ‡— ˆfd„Š ‰| j         ¦  «        S )z6
        Returns a generator of `yield_expr`.
        c              3   óÎ   •K  — | D ]^}|j         dv rŒ	 |j        } ‰|¦  «        E d {V —† Œ&# t          $ r, |j        dk    r|j        j         dk    r
|j        V — n|V — Y Œ[w xY wd S )N)r*   r)   ÚlambdefÚyieldÚ
yield_expr)r"   r$   rØ   r^   r%   )r$   rÎ   Únested_childrenrÐ   s      €r2   rÐ   z'Function.iter_yield_exprs.<locals>.scanI  s»   øè è € Ø#ð 5ð 5�Ø”<Ð#EÐEÐEØð	5Ø&-Ô&6�Oð  $˜t OÑ4Ô4Ð4Ð4Ð4Ð4Ð4Ð4Ð4Ð4øõ &ð *ð *ð *Ø”}¨Ò/Ð/Ø"œ>Ô.°,Ò>Ð>Ø")¤.Ð0Ð0Ð0Ð0à")˜M˜M˜Møøð*øøøð5ð 5s   “,¬3A"Á!A"rÑ   ©r/   rÐ   s    @r2   Úiter_yield_exprszFunction.iter_yield_exprsE  s0   ø€ ð	5ð 	5ð 	5ð 	5ð 	5ð  ˆt�D”MÑ"Ô"Ð"r4   c                 ó.   ‡— ˆfd„Š ‰| j         ¦  «        S )z7
        Returns a generator of `return_stmt`.
        c              3   ó¨   •K  — | D ]K}|j         dk    s|j         dk    r|j        dk    r|V — |j         t          v r ‰|j        ¦  «        E d {V —† ŒLd S )NÚreturn_stmtr¹   r[   ©r"   r^   Ú_RETURN_STMT_CONTAINERSr$   ©r$   rÎ   rÐ   s     €r2   rÐ   z(Function.iter_return_stmts.<locals>.scan_  sƒ   øè è € Ø#ð 6ð 6�Ø”< =Ò0Ð0Ø"œ<¨9Ò4Ð4¸¼È(Ò9RÐ9RØ!�M�M�MØ”<Õ#:Ð:Ð:Ø#˜t GÔ$4Ñ5Ô5Ð5Ð5Ð5Ð5Ð5Ð5Ð5øð6ð 6r4   rÑ   r2  s    @r2   Úiter_return_stmtszFunction.iter_return_stmts[  ó0   ø€ ð	6ð 	6ð 	6ð 	6ð 	6ð ˆt�D”MÑ"Ô"Ð"r4   c                 ó.   ‡— ˆfd„Š ‰| j         ¦  «        S )zi
        Returns a generator of `raise_stmt`. Includes raise statements inside try-except blocks
        c              3   ó¨   •K  — | D ]K}|j         dk    s|j         dk    r|j        dk    r|V — |j         t          v r ‰|j        ¦  «        E d {V —† ŒLd S )NÚ
raise_stmtr¹   Úraiser7  r9  s     €r2   rÐ   z'Function.iter_raise_stmts.<locals>.scanm  sƒ   øè è € Ø#ð 6ð 6�Ø”< <Ò/Ð/Ø"œ<¨9Ò4Ð4¸¼È'Ò9QÐ9QØ!�M�M�MØ”<Õ#:Ð:Ð:Ø#˜t GÔ$4Ñ5Ô5Ð5Ð5Ð5Ð5Ð5Ð5Ð5øð6ð 6r4   rÑ   r2  s    @r2   Úiter_raise_stmtszFunction.iter_raise_stmtsi  r;  r4   c                 óJ   — t          |                      ¦   «         d¦  «        duS )zK
        :return bool: Checks if a function is a generator or not.
        N)Únextr3  rK   s    r2   Úis_generatorzFunction.is_generatorw  s%   € õ �D×)Ò)Ñ+Ô+¨TÑ2Ô2¸$Ð>Ð>r4   c                 ój   — t          | j        ¦  «        D ]\  }}|dk    r| j        |dz            c S ŒdS )zW
        Returns the test node after `->` or `None` if there is no annotation.
        z->r,   Nr  )r/   r  rí   s      r2   Ú
annotationzFunction.annotation}  sK   € õ
 " $¤-Ñ0Ô0ð 	,ð 	,‰HˆAˆuØ˜Š}ˆ}Ø”} Q¨¡UÔ+Ð+Ð+Ð+ð àˆtr4   )r5   r6   r7   rE   r"   r8   r¿   r  r%  r(  r_   r>   r3  r:  r@  rC  rE  rÙ   rÚ   s   @r2   r  r    só   ø€ € € € € ðð ð €DØ€Iðð ð ð ð ðDð Dð Dð0ð 0ð 0ðIð Ið Ið ð ð  ñ „Xð ð#ð #ð #ð,#ð #ð #ð#ð #ð #ð?ð ?ð ?ð ðð ñ „Xðð ð ð ð r4   r  c                   ób   ‡ — e Zd ZdZdZdZˆ fd„Zed„ ¦   «         Zd„ Z	ed„ ¦   «         Z
d„ Zˆ xZS )	ÚLambdazé
    Lambdas are basically trimmed functions, so give it the same interface.

    Children::

         0. <Keyword: lambda>
         *. <Param x> for each argument x
        -2. <Operator: :>
        -1. Node() representing body
    r.  r!   c                 óà   •— t          t          | ¦  «                             |¦  «         | j        dd…         }t	          d„ |D ¦   «         ¦  «        st          | |¦  «        | j        dd…<   d S d S )Nr,   éþÿÿÿc              3   ó@   K  — | ]}t          |t          ¦  «        V — Œd S rI   r  r  s     r2   r  z"Lambda.__init__.<locals>.<genexpr>�  r  r4   )r¾   r  r¿   r$   r  r  )r/   r$   r!  rÁ   s      €r2   r¿   zLambda.__init__–  s‚   ø€ å�h˜ÑÔ×&Ò& xÑ0Ô0Ð0à"œm¨A¨b¨DÔ1Ðõ ÐMÐMÐ9LÐMÑMÔMÑMÔMð 	LÝ"0°Ð7JÑ"KÔ"KˆDŒM˜!˜B˜$ÑÐÐð	Lð 	Lr4   c                 ó    — t          d¦  «        ‚)zN
        Raises an AttributeError. Lambdas don't have a defined name.
        zlambda is not named.)rØ   rK   s    r2   r>   zLambda.name   s   € õ
 Ð3Ñ4Ô4Ð4r4   c                 ó    — | j         dd…         S )Nr,   rI  rÑ   rK   s    r2   r%  zLambda._get_param_nodes§  s   € ØŒ}˜Q˜r˜TÔ"Ð"r4   c                 ó   — dS )zA
        Returns `None`, lambdas don't have annotations.
        Nr!   rK   s    r2   rE  zLambda.annotationª  s	   € ð
 ˆtr4   c                 ó2   — d| j         j        ›d| j        ›d�S )Nro   r{   rp   )rÁ   r5   r@   rK   s    r2   rr   zLambda.__repr__±  s    € € Ø œNÔ3Ð3Ð3°T´^°^°^ÐDÐDr4   )r5   r6   r7   rE   r"   r8   r¿   r_   r>   r%  rE  rr   rÙ   rÚ   s   @r2   rG  rG  ˆ  s®   ø€ € € € € ð	ð 	ð €DØ€IðLð Lð Lð Lð Lð ð5ð 5ñ „Xð5ð#ð #ð #ð ðð ñ „XððEð Eð Eð Eð Eð Eð Er4   rG  c                   ó   — e Zd ZdZdS )ÚFlowr!   Nrc   r!   r4   r2   rP  rP  µ  rd   r4   rP  c                   ó(   — e Zd ZdZdZd„ Zd„ Zd„ ZdS )ÚIfStmtr   r!   c              #   ój   K  — t          | j        ¦  «        D ]\  }}|dv r| j        |dz            V — ŒdS )z 
        E.g. returns all the `test` nodes that are named as x, below:

            if x:
                pass
            elif x:
                pass
        )ÚelifÚifr,   Nr  )r/   r  r1   s      r2   Úget_test_nodeszIfStmt.get_test_nodes½  sR   è è € õ ˜dœmÑ,Ô,ð 	+ð 	+‰DˆAˆqØ�NÐ"Ð"Ø”m A¨¡EÔ*Ð*Ð*Ð*øð	+ð 	+r4   c                 ó°   — |j         }t          t          |                      ¦   «         ¦  «        ¦  «        D ]}|j         |k     r||j        k     r dS |c S Œ dS )zÝ
        Searches for the branch in which the node is and returns the
        corresponding test node (see function above). However if the node is in
        the test node itself and not in the suite return None.
        N)r@   ÚreversedÚlistrV  rA   )r/   r0   r@   Ú
check_nodes       r2   Úget_corresponding_test_nodez"IfStmt.get_corresponding_test_nodeÊ  sv   € ð ”Nˆ	Ý"¥4¨×(;Ò(;Ñ(=Ô(=Ñ#>Ô#>Ñ?Ô?ð 	&ð 	&ˆJØÔ# iÒ/Ð/Ø˜zÔ1Ò1Ð1Ø˜4˜4ð &Ð%Ð%Ð%ð 0ð	&ð 	&r4   c                 óL   — | j         D ]}|dk    r|j        |j        k    r dS ŒdS )z;
        Checks if a node is defined after `else`.
        ÚelseTF)r$   r@   )r/   r0   r1   s      r2   Úis_node_after_elsezIfStmt.is_node_after_elseÚ  s:   € ð ”ð 	ð 	ˆAØ�FŠ{ˆ{Ø”> A¤KÒ/Ð/Ø˜4˜4øà�5r4   N)r5   r6   r7   r"   r8   rV  r[  r^  r!   r4   r2   rR  rR  ¹  sK   € € € € € Ø€DØ€Ið+ð +ð +ð&ð &ð &ð 	ð 	ð 	ð 	ð 	r4   rR  c                   ó   — e Zd ZdZdZdS )Ú	WhileStmtr   r!   Nr‘   r!   r4   r2   r`  r`  æ  ó   € € € € € Ø€DØ€I€I€Ir4   r`  c                   ó$   — e Zd ZdZdZd„ Zdd„ZdS )ÚForStmtr   r!   c                 ó   — | j         d         S )zE
        Returns the input node ``y`` from: ``for x in y:``.
        é   rÑ   rK   s    r2   Úget_testlistzForStmt.get_testlistï  s   € ð Œ}˜QÔÐr4   Fc                 ó8   — t          | j        d         |¦  «        S r*  ©Ú_defined_namesr$   r€   s     r2   r‡   zForStmt.get_defined_namesõ  ó   € Ý˜dœm¨AÔ.°Ñ@Ô@Ð@r4   Nr‹   )r5   r6   r7   r"   r8   rf  r‡   r!   r4   r2   rc  rc  ë  sG   € € € € € Ø€DØ€Ið ð  ð  ðAð Að Að Að Að Ar4   rc  c                   ó   — e Zd ZdZdZd„ ZdS )ÚTryStmtr   r!   c              #   óh   K  — | j         D ]'}|j        dk    r|j         d         V — Œ|dk    rdV — Œ(dS )z˜
        Returns the ``test`` nodes found in ``except_clause`` nodes.
        Returns ``[None]`` for except clauses without an exception given.
        rƒ   r,   ÚexceptN©r$   r"   ©r/   r0   s     r2   Úget_except_clause_testszTryStmt.get_except_clause_testsý  s[   è è € ð
 ”Mð 	ð 	ˆDØŒy˜OÒ+Ð+Ø”m AÔ&Ð&Ð&Ð&Ð&Ø˜Ò!Ð!Ø�
�
�
øð		ð 	r4   N)r5   r6   r7   r"   r8   rq  r!   r4   r2   rl  rl  ù  s-   € € € € € Ø€DØ€Ið	ð 	ð 	ð 	ð 	r4   rl  c                   ó$   — e Zd ZdZdZdd„Zd„ ZdS )ÚWithStmtr   r!   Fc                 ó‚   — g }| j         ddd…         D ]+}|j        dk    r|t          |j         d         |¦  «        z  }Œ,|S )z}
        Returns the a list of `Name` that the with statement defines. The
        defined names are set after `as`.
        r,   rI  r›   Ú	with_item)r$   r"   ri  )r/   r~   rÏ   ru  s       r2   r‡   zWithStmt.get_defined_names  sV   € ð
 ˆØœ q¨¨A vÔ.ð 	Pð 	PˆIàŒ~ Ò,Ð,Ø�¨	Ô(:¸1Ô(=¸ÑOÔOÑO�øØˆr4   c                 óh   — |                      d¦  «        }|€t          d¦  «        ‚|j        d         S )Nru  z2The name is not actually part of a with statement.r   )r   Ú
ValueErrorr$   )r/   r>   r0   s      r2   Úget_test_node_from_namez WithStmt.get_test_node_from_name  s6   € Ø×#Ò# KÑ0Ô0ˆØˆ<ÝÐQÑRÔRÐRØŒ}˜QÔÐr4   Nr‹   )r5   r6   r7   r"   r8   r‡   rx  r!   r4   r2   rs  rs  	  sA   € € € € € Ø€DØ€Ið
ð 
ð 
ð 
ð ð  ð  ð  ð  r4   rs  c                   ó@   — e Zd ZU dZeed<   eed<   d„ Zd„ Zd„ Zd„ Z	dS )	ÚImportr!   rå   Ú_aliasesc                 óò   — 	 |                       ¦   «         |         }n# t          $ r Y nw xY w|                      ¦   «         D ](}||v r"|d|                     |¦  «        dz   …         c S Œ)t	          d¦  «        ‚)zo
        The path is the list of names that leads to the searched name.

        :return list of Name:
        Nr,   z+Name should be defined in the import itself)r{  ÚKeyErrorrå   r.   rw  )r/   r>   rç   s      r2   Úget_path_for_namezImport.get_path_for_name%  s›   € ð	à—=’=‘?”? 4Ô(ˆDˆDøÝð 	ð 	ð 	ØˆDð	øøøð —N’NÑ$Ô$ð 	3ð 	3ˆDØ�tˆ|ˆ|ØÐ1˜TŸZšZ¨Ñ-Ô-°Ñ1Ð1Ô2Ð2Ð2Ð2ð åÐFÑGÔGÐGs   ‚ �
*©*c                 ó   — dS )NFr!   rK   s    r2   Ú	is_nestedzImport.is_nested6  s   € Øˆur4   c                 ó$   — | j         d         dk    S )NrÓ   r	  rÑ   rK   s    r2   Úis_star_importzImport.is_star_import9  s   € ØŒ}˜RÔ  CÒ'Ð'r4   c                 ó    — t          d¦  «        ‚)NzUse ImportFrom or ImportName)ÚNotImplementedErrorrK   s    r2   r‡   zImport.get_defined_names<  s   € Ý!Ð"@ÑAÔAÐAr4   N)
r5   r6   r7   r8   r   r:   r~  r€  r‚  r‡   r!   r4   r2   rz  rz     sq   € € € € € € Ø€IØ€N€N�NØ€M€M�MðHð Hð Hð"ð ð ð(ð (ð (ðBð Bð Bð Bð Br4   rz  c                   óL   — e Zd ZdZdZdd„Zd„ Zd„ Zed„ ¦   «         Z	d„ Z
d	„ Zd
S )Ú
ImportFromr   r!   Fc                 ó>   — d„ |                       ¦   «         D ¦   «         S )z¿
        Returns the a list of `Name` that the import defines. The
        defined names are set after `import` or in case an alias - `as` - is
        present that name is returned.
        c                 ó   — g | ]	\  }}|p|‘Œ
S r!   r!   ©rá   r>   Úaliass      r2   râ   z0ImportFrom.get_defined_names.<locals>.<listcomp>J  s    € ÐHÐHÐH¡+ $¨��˜ÐHÐHÐHr4   )Ú_as_name_tuplesr€   s     r2   r‡   zImportFrom.get_defined_namesD  s%   € ð IÐH°×1EÒ1EÑ1GÔ1GÐHÑHÔHÐHr4   c                 óX   — t          d„ |                      ¦   «         D ¦   «         ¦  «        S )z-Mapping from alias to its corresponding name.c              3   ó(   K  — | ]\  }}|®||fV — Œd S rI   r!   r‰  s      r2   r  z&ImportFrom._aliases.<locals>.<genexpr>N  s;   è è € ð *ð *¡k d¨EØÐ(ð ˜D�MØ(Ð(Ð(Ð(ð*ð *r4   )Údictr‹  rK   s    r2   r{  zImportFrom._aliasesL  s;   € åð *ð *°T×5IÒ5IÑ5KÔ5Kð *ñ *ô *ñ *ô *ð 	*r4   c                 ó~   — | j         dd …         D ]}|dvr nŒ	|j        dk    r|j         d d d…         S |dk    rg S |gS )Nr,   ©ú.z...Údotted_namer›   Úimportro  )r/   Úns     r2   Úget_from_nameszImportFrom.get_from_namesQ  se   € Ø”˜q˜r˜rÔ"ð 	ð 	ˆAØ˜Ð$Ð$Ø�ð %àŒ6�]Ò"Ð"Ø”:˜c˜c ˜c”?Ð"Ø�(Š]ˆ]ØˆIà�3ˆJr4   c                 óf   — d}| j         dd…         D ]}|dv r|t          |j        ¦  «        z  }Œ |S )ú&The level parameter of ``__import__``.r   r,   Nr�  ©r$   rV   r^   )r/   rä   r”  s      r2   rä   zImportFrom.level\  sJ   € ð ˆØ”˜q˜r˜rÔ"ð 	ð 	ˆAØ�LÐ Ð Ø�˜QœW™œÑ%��àØˆr4   c              #   óì   K  — | j         d         }|dk    r| j         d         }n|dk    rd S |j        dk    r|j         d d d…         }n|g}|D ]&}|j        dk    r|d fV — Œ|j         d d d…         V — Œ'd S )NrÓ   r  rI  r	  Úimport_as_namesr›   r>   ro  )r/   ÚlastÚas_namesÚas_names       r2   r‹  zImportFrom._as_name_tuplesg  s¶   è è € ØŒ}˜RÔ ˆØ�3Š;ˆ;Ø”= Ô$ˆDˆDØ�SŠ[ˆ[ØˆFàŒ9Ð)Ò)Ð)Ø”} S S q SÔ)ˆHˆHà�vˆHØð 	,ð 	,ˆGØŒ|˜vÒ%Ð%Ø˜t�mÐ#Ð#Ð#Ð#àÔ& s s¨ sÔ+Ð+Ð+Ð+Ð+ð		,ð 	,r4   c                 ó”   ‡— |                       ¦   «         Š| j        d         dk    r‰gS ˆfd„|                      ¦   «         D ¦   «         S )zµ
        The import paths defined in an import statement. Typically an array
        like this: ``[<Name: datetime>, <Name: date>]``.

        :return list of list of Name:
        rÓ   r	  c                 ó"   •— g | ]\  }}‰|gz   ‘ŒS r!   r!   )rá   r>   rŠ  Údotteds      €r2   râ   z(ImportFrom.get_paths.<locals>.<listcomp>ƒ  s#   ø€ ÐJÐJÐJ¡K D¨%�˜$˜‘ÐJÐJÐJr4   )r•  r$   r‹  )r/   r   s    @r2   rå   zImportFrom.get_pathsx  sU   ø€ ð ×$Ò$Ñ&Ô&ˆàŒ=˜Ô Ò#Ð#Ø�8ˆOØJÐJÐJÐJ°4×3GÒ3GÑ3IÔ3IÐJÑJÔJÐJr4   Nr‹   )r5   r6   r7   r"   r8   r‡   r{  r•  r_   rä   r‹  rå   r!   r4   r2   r†  r†  @  s’   € € € € € Ø€DØ€IðIð Ið Ið Ið*ð *ð *ð
	ð 	ð 	ð ðð ñ „Xðð,ð ,ð ,ð"Kð Kð Kð Kð Kr4   r†  c                   óP   — e Zd ZdZdZdZdd„Zed„ ¦   «         Zd„ Z	d„ Z
d	„ Zd
„ ZdS )Ú
ImportNamezBFor ``import_name`` nodes. Covers normal imports without ``from``.r   r!   Fc                 ó>   — d„ |                       ¦   «         D ¦   «         S )zÐ
        Returns the a list of `Name` that the import defines. The defined names
        is always the first name after `import` or in case an alias - `as` - is
        present that name is returned.
        c                 ó(   — g | ]\  }}|p|d          ‘ŒS )r   r!   ©rá   rç   rŠ  s      r2   râ   z0ImportName.get_defined_names.<locals>.<listcomp>‘  s%   € ÐLÐLÐL¡[ T¨5�Ð ˜˜aœÐLÐLÐLr4   ©Ú_dotted_as_namesr€   s     r2   r‡   zImportName.get_defined_names‹  s%   € ð MÐL°D×4IÒ4IÑ4KÔ4KÐLÑLÔLÐLr4   c                 ó   — dS )r—  r   r!   rK   s    r2   rä   zImportName.level“  s	   € ð ˆqr4   c                 ó>   — d„ |                       ¦   «         D ¦   «         S )Nc                 ó   — g | ]\  }}|‘ŒS r!   r!   r¥  s      r2   râ   z(ImportName.get_paths.<locals>.<listcomp>™  s   € Ð@Ð@Ð@™˜˜u�Ð@Ð@Ð@r4   r¦  rK   s    r2   rå   zImportName.get_paths˜  s"   € Ø@Ð@¨×(=Ò(=Ñ(?Ô(?Ð@Ñ@Ô@Ð@r4   c              #   ó
  K  — | j         d         }|j        dk    r|j         ddd…         }n|g}|D ]Q}|j        dk    r|j         d         }|j         d         }nd}|j        dk    r|g|fV — Œ=|j         ddd…         |fV — ŒRdS )z9Generator of (list(path), alias) where alias may be None.r,   Údotted_as_namesNr›   Údotted_as_namer   r>   ro  )r/   r¬  rœ  r�  rŠ  s        r2   r§  zImportName._dotted_as_names›  sÍ   è è € àœ-¨Ô*ˆØÔÐ#4Ò4Ð4Ø&Ô/°°°!°Ô4ˆHˆHà'Ð(ˆHàð 
	3ð 
	3ˆGØŒ|Ð/Ò/Ð/ØÔ(¨Ô+�Ø!Ô*¨1Ô-��à�ØŒ|˜vÒ%Ð%Ø�i Ð&Ð&Ð&Ð&Ð&ð Ô& s s¨ sÔ+¨UÐ2Ð2Ð2Ð2Ð2ð
	3ð 
	3r4   c                 óX   — t          d„ |                      ¦   «         D ¦   «         ¦  «        S )zŽ
        This checks for the special case of nested imports, without aliases and
        from statement::

            import foo.bar
        c                 óB   — g | ]\  }}|­t          |¦  «        dk    ¯d‘ŒS r*  )rV   r¥  s      r2   râ   z(ImportName.is_nested.<locals>.<listcomp>¶  s6   € ð 8ð 8ð 8™;˜4 Ø�}­¨T©¬°Qª¨ð Ø)6¨¨r4   )Úboolr§  rK   s    r2   r€  zImportName.is_nested¯  s=   € õ ð 8ð 8¨$×*?Ò*?Ñ*AÔ*Að 8ñ 8ô 8ñ 9ô 9ð 	9r4   c                 óX   — t          d„ |                      ¦   «         D ¦   «         ¦  «        S )z=
        :return list of Name: Returns all the alias
        c              3   ó4   K  — | ]\  }}|®||d         fV — Œd S )NrÓ   r!   r¥  s      r2   r  z&ImportName._aliases.<locals>.<genexpr>½  s@   è è € ð *ð *©+¨$°ØÐ(ð ˜D œHÐ%Ø(Ð(Ð(Ð(ð*ð *r4   )rŽ  r§  rK   s    r2   r{  zImportName._aliases¹  s=   € õ ð *ð *¸×9NÒ9NÑ9PÔ9Pð *ñ *ô *ñ *ô *ð 	*r4   Nr‹   )r5   r6   r7   rE   r"   r8   r‡   r_   rä   rå   r§  r€  r{  r!   r4   r2   r¢  r¢  †  s–   € € € € € ØLÐLØ€DØ€IðMð Mð Mð Mð ðð ñ „XððAð Að Að3ð 3ð 3ð(9ð 9ð 9ð*ð *ð *ð *ð *r4   r¢  c                   óJ   — e Zd ZdZdZed„ ¦   «         Zed„ ¦   «         Zdd„ZdS )	ÚKeywordStatementzö
    For the following statements: `assert`, `del`, `global`, `nonlocal`,
    `raise`, `return`, `yield`.

    `pass`, `continue` and `break` are not in there, because they are just
    simple keywords and the parser reduces it to a keyword.
    r!   c                 ó   — d| j         z  S )zŠ
        Keyword statements start with the keyword and end with `_stmt`. You can
        crosscheck this with the Python grammar.
        z%s_stmt)r¹   rK   s    r2   r"   zKeywordStatement.typeË  s   € ð ˜4œ<Ñ'Ð'r4   c                 ó&   — | j         d         j        S ©Nr   )r$   r^   rK   s    r2   r¹   zKeywordStatement.keywordÓ  s   € àŒ}˜QÔÔ%Ð%r4   Fc                 ó~   — | j         }|dk    rt          | j        d         |¦  «        S |dv r| j        dd d…         S g S )NÚdelr,   )ÚglobalÚnonlocalr›   )r¹   ri  r$   )r/   r~   r¹   s      r2   r‡   z"KeywordStatement.get_defined_names×  sO   € Ø”,ˆØ�eÒÐÝ! $¤-°Ô"2°OÑDÔDÐDØÐ,Ð,Ð,Ø”=   A Ô&Ð&Øˆ	r4   Nr‹   )	r5   r6   r7   rE   r8   r_   r"   r¹   r‡   r!   r4   r2   r´  r´  Á  sm   € € € € € ðð ð €Iàð(ð (ñ „Xð(ð ð&ð &ñ „Xð&ðð ð ð ð ð r4   r´  c                   ó(   — e Zd ZdZed„ ¦   «         ZdS )Ú
AssertStmtr!   c                 ó   — | j         d         S r*  rÑ   rK   s    r2   Ú	assertionzAssertStmt.assertionã  r+  r4   N)r5   r6   r7   r8   r_   r¿  r!   r4   r2   r½  r½  à  s2   € € € € € Ø€Iàð ð  ñ „Xð ð  ð  r4   r½  c                   ó   — e Zd ZdZd„ ZdS )Ú
GlobalStmtr!   c                 ó"   — | j         dd d…         S )Nr,   r›   rÑ   rK   s    r2   Úget_global_nameszGlobalStmt.get_global_namesë  s   € ØŒ}˜Q˜T ˜TÔ"Ð"r4   N)r5   r6   r7   r8   rÃ  r!   r4   r2   rÁ  rÁ  è  s(   € € € € € Ø€Ið#ð #ð #ð #ð #r4   rÁ  c                   ó   — e Zd ZdZdS )Ú
ReturnStmtr!   Nrc   r!   r4   r2   rÅ  rÅ  ï  rd   r4   rÅ  c                   ó   — e Zd ZdZdZdS )Ú	YieldExprr0  r!   Nr‘   r!   r4   r2   rÇ  rÇ  ó  ra  r4   rÇ  c                 ó„  — g }| j         dv r(| j        ddd…         D ]}|t          ||¦  «        z  }Œ�n| j         dv r|t          | j        d         |¦  «        z  }nä| j         dv rÆ| j        d         dk    r´| j        d	         }|j        d
         dk    r!|                     |j        d         ¦  «         n‹|j        d
         dk    rd|rb| j        ddd	…         D ]Q}|j         dk    r"|                     |j        d         ¦  «          n#|j         dk    r|                     |¦  «          nŒRn|                     | ¦  «         |S )zk
    A helper function to find the defined names in statements, for loops and
    list comprehensions.
    )Útestlist_star_exprÚtestlist_compÚexprlistÚtestlistNr›   )ÚatomÚ	star_exprr,   )ÚpowerÚ	atom_exprrI  ú**rÓ   r   r‘  ú[Útrailerr>   )r"   r$   ri  rì   )Úcurrentr~   rÏ   rí   rÓ  r0   s         r2   ri  ri  ø  s|  € ð
 €EØ„|ÐVÐVÐVØÔ% c c¨ cÔ*ð 	<ð 	<ˆEØ•^ E¨?Ñ;Ô;Ñ;ˆEˆEñ	<à	ŒÐ.Ð	.Ð	.Ø• Ô 0°Ô 3°_ÑEÔEÑEˆˆØ	ŒÐ/Ð	/Ð	/ØÔ˜BÔ 4Ò'Ð'ØÔ& rÔ*ˆGØÔ Ô" cÒ)Ð)Ø—’˜WÔ-¨aÔ0Ñ1Ô1Ð1Ð1ØÔ! !Ô$¨Ò+Ð+°Ð+Ø#Ô,¨R¨V°¨VÔ4ð ð �DØ”y IÒ-Ð-ØŸš T¤]°1Ô%5Ñ6Ô6Ð6Ø˜Ø”y FÒ*Ð*ØŸš TÑ*Ô*Ð*Ø˜ð +øð 	�Š�WÑÔÐØ€Lr4   c                   ó*   — e Zd ZdZdZdd„Zd„ Zd„ ZdS )	ÚExprStmtr   r!   Fc                 óØ   ‡ ‡— g }‰ j         d         j        dk    rt          ‰ j         d         ‰¦  «        }ˆˆ fd„t          dt	          ‰ j         ¦  «        dz
  d¦  «        D ¦   «         |z   S )zG
        Returns a list of `Name` defined before the `=` sign.
        r,   Ú	annassignr   c                 ó~   •— g | ]9}d ‰j         |dz            j        v ¯t          ‰j         |         ‰¦  «        D ]}|‘ŒŒ:S )ú=r,   )r$   r^   ri  )rá   r  r>   r~   r/   s      €€r2   râ   z.ExprStmt.get_defined_names.<locals>.<listcomp>   s^   ø€ ð 
ð 
ð 
àØ�d”m A¨¡EÔ*Ô0Ð0Ð0Ý& t¤}°QÔ'7¸ÑIÔIð 1Ð0Øð à0Ð0Ð0Ð0r4   r›   )r$   r"   ri  ÚrangerV   )r/   r~   rÏ   s   `` r2   r‡   zExprStmt.get_defined_names  s‹   øø€ ð ˆØŒ=˜ÔÔ  KÒ/Ð/Ý" 4¤=°Ô#3°_ÑEÔEˆEð
ð 
ð 
ð 
ð 
å˜1�c $¤-Ñ0Ô0°1Ñ4°aÑ8Ô8ð
ñ 
ô 
ð
 ñð 	r4   c                 óœ   — | j         d         }|j        dk    r3t          |j         ¦  «        dk    r|j         d         }n|j         d         }|S )z*Returns the right-hand-side of the equals.rÓ   rØ  é   re  r,   ©r$   r"   rV   rp  s     r2   Úget_rhszExprStmt.get_rhs'  sO   € àŒ}˜RÔ ˆØŒ9˜Ò#Ð#Ý�4”=Ñ!Ô! QÒ&Ð&Ø”} QÔ'��à”} QÔ'�Øˆr4   c              #   ó¼   K  — | j         d         }|j        dk    r't          |j         ¦  «        dk    rdS |j         d         }|V — | j         ddd…         E d{V —† dS )zZ
        Returns a generator of `+=`, `=`, etc. or None if there is no operation.
        r,   rØ  r›   Nre  rÞ  ©r/   r  s     r2   Úyield_operatorszExprStmt.yield_operators1  s{   è è € ð ”˜aÔ ˆØŒ:˜Ò$Ð$Ý�5”>Ñ"Ô" aÒ'Ð'Ø�à”N 1Ô%ˆEØˆˆˆà”=   A Ô&Ð&Ð&Ð&Ð&Ð&Ð&Ð&Ð&Ð&r4   Nr‹   )r5   r6   r7   r"   r8   r‡   rß  râ  r!   r4   r2   rÖ  rÖ    sP   € € € € € Ø€DØ€Iðð ð ð ðð ð ð'ð 'ð 'ð 'ð 'r4   rÖ  c                   ó   — e Zd ZdZdd„ZdS )Ú	NamedExprr   Fc                 ó8   — t          | j        d         |¦  «        S r·  rh  r€   s     r2   r‡   zNamedExpr.get_defined_namesC  rj  r4   Nr‹   )r5   r6   r7   r"   r‡   r!   r4   r2   rä  rä  @  s3   € € € € € Ø€DðAð Að Að Að Að Ar4   rä  c                   ó¼   ‡ — e Zd ZdZdZdˆ fd„	Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Z	d„ Z
ed	„ ¦   «         Zdd„Zed„ ¦   «         Zd„ Zdˆ fd„	Zd„ Zˆ xZS )r  zÝ
    It's a helper class that makes business logic with params much easier. The
    Python grammar defines no ``param`` node. It defines it in a different way
    that is not really suited to working with parameters.
    r   Nc                 óX   •— t          ¦   «                              |¦  «         || _        d S rI   )r¾   r¿   r%   )r/   r$   r%   rÁ   s      €r2   r¿   zParam.__init__O  s&   ø€ Ý‰Œ×Ò˜Ñ"Ô"Ð"ØˆŒˆˆr4   c                 óP   — | j         d         }|dv rt          |j        ¦  «        S dS )zc
        Is `0` in case of `foo`, `1` in case of `*foo` or `2` in case of
        `**foo`.
        r   ©r	  rÑ  r˜  rá  s     r2   Ú
star_countzParam.star_countS  s0   € ð ”˜aÔ ˆØ�KÐÐÝ�u”{Ñ#Ô#Ð#Øˆqr4   c                 óÈ   — | j         d         dk    }	 | j         dt          |¦  «        z
           dk    r| j         dt          |¦  «        z
           S dS # t          $ r Y dS w xY w)z{
        The default is the test node that appears after the `=`. Is `None` in
        case no default is present.
        rÓ   r|   rI  rÚ  N)r$   r`   r  )r/   Ú	has_commas     r2   ÚdefaultzParam.default^  sy   € ð ”M "Ô%¨Ò,ˆ	ð	ØŒ}˜R¥# i¡.¤.Ñ0Ô1°SÒ8Ð8Ø”} R­#¨i©.¬.Ñ%8Ô9Ð9ð 9Ð8øåð 	ð 	ð 	Ø�4�4ð	øøøs   “=A Á
A!Á A!c                 ó¼   — |                       ¦   «         }|j        dk    r<|j        d         dk    sJ ‚t          |j        ¦  «        dk    sJ ‚|j        d         }|S dS )zz
        The default is the test node that appears after `:`. Is `None` in case
        no annotation is present.
        r
  r,   r+   re  r›   N)Ú_tfpdefr"   r$   rV   )r/   r
  rE  s      r2   rE  zParam.annotationk  sh   € ð —’‘”ˆØŒ;˜(Ò"Ð"Ø”? 1Ô%¨Ò,Ð,Ð,Ð,Ý�v”Ñ'Ô'¨1Ò,Ð,Ð,Ð,Øœ¨Ô+ˆJØÐà�4r4   c                 óT   — t          | j        d         dv ¦  «        }| j        |         S )z1
        tfpdef: see e.g. grammar36.txt.
        r   ré  )r`   r$   )r/   Úoffsets     r2   rï  zParam._tfpdefz  s*   € õ �T”] 1Ô%¨Ð4Ñ5Ô5ˆØŒ}˜VÔ$Ð$r4   c                 ó¢   — |                       ¦   «         j        dk    r|                       ¦   «         j        d         S |                       ¦   «         S )z/
        The `Name` leaf of the param.
        r
  r   )rï  r"   r$   rK   s    r2   r>   z
Param.name�  s>   € ð
 �<Š<‰>Œ>Ô (Ò*Ð*Ø—<’<‘>”>Ô*¨1Ô-Ð-à—<’<‘>”>Ð!r4   Fc                 ó   — | j         gS rI   )r>   r€   s     r2   r‡   zParam.get_defined_names‹  s   € Ø”	ˆ{Ðr4   c                 ó:  — | j         j                             | ¦  «        }	 | j         j                             d¦  «        }||k    r|dz  }n# t          $ r Y nw xY w	 | j         j                             d¦  «        }||k    r|dz  }n# t          $ r Y nw xY w|dz
  S )zB
        Property for the positional index of a paramter.
        r	  r›   r  r,   )r%   r$   r.   rw  )r/   r.   Úkeyword_only_indexs      r2   Úposition_indexzParam.position_indexŽ  sÎ   € ð
 ”Ô$×*Ò*¨4Ñ0Ô0ˆð	Ø!%¤Ô!5×!;Ò!;¸CÑ!@Ô!@ÐØÐ)Ò)Ð)à˜‘
�øøÝð 	ð 	ð 	ØˆDð	øøøð	Ø!%¤Ô!5×!;Ò!;¸CÑ!@Ô!@ÐØÐ)Ò)Ð)à˜‘
�øøÝð 	ð 	ð 	ØˆDð	øøøà�q‰yÐs#   ¡*A Á
AÁAÁ*B Â
BÂBc                 ó.   — |                       dd¦  «        S )z=
        Returns the function/lambda of a parameter.
        r)   r.  )r   rK   s    r2   Úget_parent_functionzParam.get_parent_function¤  s   € ð ×#Ò# I¨yÑ9Ô9Ð9r4   Tc                 ó²   •— |r!t          ¦   «                              |¦  «        S | j        }|d         dk    r
|dd…         }|                      ||¬¦  «        S )zÀ
        Like all the other get_code functions, but includes the param
        `include_comma`.

        :param include_comma bool: If enabled includes the comma in the string output.
        rÓ   r|   N)Úinclude_prefix)r¾   Úget_coder$   Ú_get_code_for_children)r/   rú  Úinclude_commar$   rÁ   s       €r2   rû  zParam.get_codeª  sk   ø€ ð ð 	4Ý‘7”7×#Ò# NÑ3Ô3Ð3à”=ˆØ�BŒ<˜3ÒÐØ   ”}ˆHØ×*Ò*ØØ)ð +ñ 
ô 
ð 	
r4   c                 óÆ   — | j         €dnd| j                              ¦   «         z  }dt          | ¦  «        j        ›dt	          |                      ¦   «         ¦  «        |z   ›d�S )NrÖ   z=%sro   rw   rp   )rí  rû  r"   r5   r9   rï  )r/   rí  s     r2   rr   zParam.__repr__¼  s\   € ØœÐ,�"�"°%¸$¼,×:OÒ:OÑ:QÔ:QÑ2QˆˆÝ! $™ZœZÔ0Ð0Ð0µ#°d·l²l±n´nÑ2EÔ2EÈÑ2OÐ2OÐ2OÐPÐPr4   rI   r‹   )TT)r5   r6   r7   rE   r"   r¿   r_   rê  rí  rE  rï  r>   r‡   rö  rø  rû  rr   rÙ   rÚ   s   @r2   r  r  G  s;  ø€ € € € € ðð ð
 €Dðð ð ð ð ð ð ðð ñ „Xðð ð
ð 
ñ „Xð
ð ðð ñ „Xðð%ð %ð %ð ð"ð "ñ „Xð"ðð ð ð ð ðð ñ „Xðð*:ð :ð :ð
ð 
ð 
ð 
ð 
ð 
ð$Qð Qð Qð Qð Qð Qð Qr4   r  c                   ó   — e Zd ZdZdZdd„ZdS )ÚSyncCompForr   r!   Fc                 ó8   — t          | j        d         |¦  «        S )zN
        Returns the a list of `Name` that the comprehension defines.
        r,   rh  r€   s     r2   r‡   zSyncCompFor.get_defined_namesÅ  s   € õ
 ˜dœm¨AÔ.°Ñ@Ô@Ð@r4   Nr‹   )r5   r6   r7   r"   r8   r‡   r!   r4   r2   r   r   Á  s8   € € € € € Ø€DØ€IðAð Að Að Að Að Ar4   r   c                   ó6   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	dS )	rñ   zO
    This class exists for the sole purpose of creating an immutable dict.
    c                 ó   — || _         d S rI   ©Ú_dict)r/   rï   s     r2   r¿   zUsedNamesMapping.__init__Ö  s   € ØˆŒ
ˆ
ˆ
r4   c                 ó   — | j         |         S rI   r  )r/   Úkeys     r2   Ú__getitem__zUsedNamesMapping.__getitem__Ù  s   € ØŒz˜#ŒÐr4   c                 ó*   — t          | j        ¦  «        S rI   )rV   r  rK   s    r2   Ú__len__zUsedNamesMapping.__len__Ü  s   € Ý�4”:‰ŒÐr4   c                 ó*   — t          | j        ¦  «        S rI   )Úiterr  rK   s    r2   Ú__iter__zUsedNamesMapping.__iter__ß  r³   r4   c                 ó    — t          | ¦  «        S rI   )ÚidrK   s    r2   r²   zUsedNamesMapping.__hash__â  s   € Ý�$‰xŒxˆr4   c                 ó
   — | |u S rI   r!   r­   s     r2   r¯   zUsedNamesMapping.__eq__å  s   € à�uˆ}Ðr4   N)
r5   r6   r7   rE   r¿   r  r
  r  r²   r¯   r!   r4   r2   rñ   rñ   Ò  sx   € € € € € ðð ðð ð ðð ð ðð ð ð ð  ð  ðð ð ðð ð ð ð r4   rñ   )IrE   r•   Úcollections.abcr   Útypingr   r   Ú
parso.treer   r   r   r	   r
   r   Úparso.python.prefixr   Úparso.utilsr   ÚsetÚ_FLOW_CONTAINERSr8  rÍ   r†   rˆ   r    r<   rG   rZ   rb   rf   rh   rj   rl   rt   ry   r�   r�   r“   r    r¥   r¨   r«   rµ   r¸   r»   rÜ   rô   r÷   rý   r  r  rG  rP  rR  r`  rc  rl  rs  rz  r†  r¢  r´  r½  rÁ  rÅ  rÇ  ri  rÖ  rä  r  r   ÚCompForrñ   r!   r4   r2   ú<module>r     sm	  ðð*ð *ðX 
€	€	€	Ø #Ð #Ð #Ð #Ð #Ð #Ø Ð Ð Ð Ð Ð Ð Ð à RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RØ ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø #Ð #Ð #Ð #Ð #Ð #à�3ð <ð <ð <ñ =ô =Ð à˜#˜w¨Ð6Ñ7Ô7Ð:JÑJÐ à�3Ø:Ð:Ð:ñô àñÐ ð ˜ð ð ð ñ ô Ð ð ˆ3�˜}Ð-Ñ.Ô.€ðð ð ð ð ñ ô ð ð>ð ð ð ð ñ ô ð ð.%ð %ð %ð %ð %�˜dñ %ô %ð %ð08ð 8ð 8ð 8ð 8˜:ñ 8ô 8ð 8ðð ð ð ð �[ (ñ ô ð ðð ð ð ð �˜dñ ô ð ðð ð ð ð �k 9ñ ô ð ðð ð ð ð �i ñ ô ð ð
ð 
ð 
ð 
ð 
Ð$ñ 
ô 
ð 
ðDð Dð Dð Dð Dˆjñ Dô Dð Dð1ð 1ð 1ð 1ð 1Ðñ 1ô 1ð 1ðhð ð ð ð ˆjñ ô ð ðð ð ð ð ˆWñ ô ð ð
5ð 5ð 5ð 5ð 5ˆWñ 5ô 5ð 5ð"ð ð ð ð �Jñ ô ð ðð ð ð ð �:ñ ô ð ðð ð ð ð �ñ ô ð ð ð  ð  ð  ð  ñ  ô  ð  ð$ð ð ð ð Ð#Ð%;ñ ô ð ð
ð ð ð ð Ð"Ð$:ñ ô ð ð
4Gð 4Gð 4Gð 4Gð 4GˆN˜Nñ 4Gô 4Gð 4Gðn3 ð 3 ð 3 ð 3 ð 3 ˆUñ 3 ô 3 ð 3 ðlð ð ð ð �ñ ô ð ð
ð ð ð ð �%ñ ô ð ð6ð ð ð ð ˆKñ ô ð ð0*ð *ð *ðZmð mð mð mð mˆ{ñ mô mð mð`*Eð *Eð *Eð *Eð *EˆXñ *Eô *Eð *EðZð ð ð ð ˆ>ñ ô ð ð*ð *ð *ð *ð *ˆTñ *ô *ð *ðZð ð ð ð �ñ ô ð ð
Að Að Að Að Aˆdñ Aô Að Aðð ð ð ð ˆdñ ô ð ð  ð  ð  ð  ð  ˆtñ  ô  ð  ð.Bð Bð Bð Bð Bˆ^ñ Bô Bð Bð@CKð CKð CKð CKð CK�ñ CKô CKð CKðL8*ð 8*ð 8*ð 8*ð 8*�ñ 8*ô 8*ð 8*ðvð ð ð ð �~ñ ô ð ð> ð  ð  ð  ð  Ð!ñ  ô  ð  ð#ð #ð #ð #ð #Ð!ñ #ô #ð #ðð ð ð ð Ð!ñ ô ð ðð ð ð ð �ñ ô ð ð
ð ð ð:('ð ('ð ('ð ('ð ('ˆ~˜~ñ ('ô ('ð ('ðVAð Að Að Að A�ñ Aô Að AðwQð wQð wQð wQð wQˆNñ wQô wQð wQðt	Að 	Að 	Að 	Að 	A�.ñ 	Aô 	Að 	Að €ðð ð ð ð �wñ ô ð ð ð r4   