§
    ŒŸj¬>  ã                   ó  — d dl mZmZ d dlmZmZmZmZ d dlm	Z	 ddde
ddfd	„Z G d
„ d¦  «        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dS )é    )ÚabstractmethodÚabstractproperty)ÚListÚOptionalÚTupleÚUnion)Úsplit_linesÚnodeÚ
NodeOrLeafÚ
node_typesÚreturnúOptional[BaseNode]c                 ó   —  | j         |Ž S )an  
    Recursively looks at the parents of a node and returns the first found node
    that matches ``node_types``. Returns ``None`` if no matching node is found.

    This function is deprecated, use :meth:`NodeOrLeaf.search_ancestor` instead.

    :param node: The ancestors of this node will be checked.
    :param node_types: type names that are searched for.
    )Úsearch_ancestor)r
   r   s     úW/var/www/finuniver-perm.ru/html/student/venv/lib/python3.11/site-packages/parso/tree.pyr   r      s   € ð  ˆ4Ô Ð,Ð,ó    c                   óB  — e Zd ZU dZdZeed<   	 ded<   	 d„ Zd„ Zd„ Z	d	„ Z
d
„ Zedeeef         fd„¦   «         Zedeeef         fd„¦   «         Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zedd„¦   «         Zdeddfd„Zddœdeeeef                  defd„ZdS )r   z.
    The base class for nodes and leaves.
    ©ÚparentÚtyper   r   c                 ó4   — | }|j         �|j         }|j         ­|S )z�
        Returns the root node of a parser tree. The returned node doesn't have
        a parent node like all the other nodes/leaves.
        r   )ÚselfÚscopes     r   Úget_root_nodezNodeOrLeaf.get_root_node#   s'   € ð
 ˆØŒlÐ&Ø”LˆEð ŒlÐ&àˆr   c                 ó¬   — | j         }|€dS t          |j        ¦  «        D ]3\  }}|| u r*	 | j         j        |dz            c S # t          $ r Y  dS w xY wŒ4dS )z 
        Returns the node immediately following this node in this parent's
        children list. If this node does not have a next sibling, it is None
        Né   )r   Ú	enumerateÚchildrenÚ
IndexError©r   r   ÚiÚchilds       r   Úget_next_siblingzNodeOrLeaf.get_next_sibling-   s�   € ð
 ”ˆØˆ>Ø�4õ " &¤/Ñ2Ô2ð 	 ð 	 ‰HˆAˆuØ˜ˆ}ˆ}ð Øœ;Ô/°°A±Ô6Ð6Ð6Ð6øÝ!ð  ð  ð  Ø˜4˜4˜4ð øøøð ð	 ð 	 s   ªAÁ
AÁAc                 ó˜   — | j         }|€dS t          |j        ¦  «        D ])\  }}|| u r |dk    r dS | j         j        |dz
           c S Œ*dS )z­
        Returns the node immediately preceding this node in this parent's
        children list. If this node does not have a previous sibling, it is
        None.
        Nr   r   )r   r   r   r    s       r   Úget_previous_siblingzNodeOrLeaf.get_previous_sibling>   sv   € ð ”ˆØˆ>Ø�4õ " &¤/Ñ2Ô2ð 	3ð 	3‰HˆAˆuØ˜ˆ}ˆ}Ø˜’6�6Ø˜4˜4Ø”{Ô+¨A°©EÔ2Ð2Ð2Ð2ð ð	3ð 	3r   c                 óê   — | j         €dS | }	 |j         j        }|                     |¦  «        }|dk    r|j         }|j         €dS n||dz
           }nŒE	 	 |j        d         }n# t          $ r |cY S w xY wŒ")z‡
        Returns the previous leaf in the parser tree.
        Returns `None` if this is the first element in the parser tree.
        NTr   r   éÿÿÿÿ)r   r   ÚindexÚAttributeError©r   r
   Úcr!   s       r   Úget_previous_leafzNodeOrLeaf.get_previous_leafO   s®   € ð
 Œ;ÐØ�4àˆð		Ø”Ô$ˆAØ—’˜‘”ˆAØ�AŠvˆvØ”{�Ø”;Ð&Ø˜4ð 'ð ˜˜Q™”x�Øð		ð	ðØ”} RÔ(��øÝ!ð ð ð Ø���ðøøøð	s   ÁA" Á"A1Á0A1c                 ó
  — | j         €dS | }	 |j         j        }|                     |¦  «        }|t          |¦  «        dz
  k    r|j         }|j         €dS n||dz            }nŒU	 	 |j        d         }n# t          $ r |cY S w xY wŒ")z€
        Returns the next leaf in the parser tree.
        Returns None if this is the last element in the parser tree.
        NTr   r   )r   r   r(   Úlenr)   r*   s       r   Úget_next_leafzNodeOrLeaf.get_next_leafi   s¸   € ð
 Œ;ÐØ�4àˆð		Ø”Ô$ˆAØ—’˜‘”ˆAØ•C˜‘F”F˜Q‘JŠˆØ”{�Ø”;Ð&Ø˜4ð 'ð ˜˜Q™”x�Øð		ð	ðØ”} QÔ'��øÝ!ð ð ð Ø���ðøøøð	s   Á$A2 Á2BÂ Br   c                 ó   — dS )z†
        Returns the starting position of the prefix as a tuple, e.g. `(3, 4)`.

        :return tuple of int: (line, column)
        N© ©r   s    r   Ú	start_poszNodeOrLeaf.start_posƒ   ó   € € € r   c                 ó   — dS )z�
        Returns the end position of the prefix as a tuple, e.g. `(3, 4)`.

        :return tuple of int: (line, column)
        Nr1   r2   s    r   Úend_poszNodeOrLeaf.end_pos‹   r4   r   c                 ó   — dS )a-  
        Returns the start_pos of the prefix. This means basically it returns
        the end_pos of the last prefix. The `get_start_pos_of_prefix()` of the
        prefix `+` in `2 + 1` would be `(1, 1)`, while the start_pos is
        `(1, 2)`.

        :return tuple of int: (line, column)
        Nr1   r2   s    r   Úget_start_pos_of_prefixz"NodeOrLeaf.get_start_pos_of_prefix“   r4   r   c                 ó   — dS )zO
        Returns the first leaf of a node or itself if this is a leaf.
        Nr1   r2   s    r   Úget_first_leafzNodeOrLeaf.get_first_leafž   r4   r   c                 ó   — dS )zN
        Returns the last leaf of a node or itself if this is a leaf.
        Nr1   r2   s    r   Úget_last_leafzNodeOrLeaf.get_last_leaf¤   r4   r   Tc                 ó   — dS )zÁ
        Returns the code that was the input for the parser for this node.

        :param include_prefix: Removes the prefix (whitespace and comments) of
            e.g. a statement.
        Nr1   ©r   Úinclude_prefixs     r   Úget_codezNodeOrLeaf.get_codeª   r4   r   r   c                 ó@   — | j         }|�|j        |v r|S |j         }|­dS )a  
        Recursively looks at the parents of this node or leaf and returns the
        first found node that matches ``node_types``. Returns ``None`` if no
        matching node is found.

        :param node_types: type names that are searched for.
        N)r   r   )r   r   r
   s      r   r   zNodeOrLeaf.search_ancestor³   s9   € ð Œ{ˆØÐØŒy˜JÐ&Ð&Ø�Ø”;ˆDð Ðð ˆtr   é   )ÚindentrC   c          	      ó  ‡‡‡— |€dŠdŠnIt          |t          ¦  «        rdŠd|z  Šn,t          |t          ¦  «        rdŠ|Šnt          d|›�¦  «        ‚ddt          dt          d	t
          d
t          fˆˆˆfd„Š ‰| ¦  «        S )a  
        Returns a formatted dump of the parser tree rooted at this node or leaf. This is
        mainly useful for debugging purposes.

        The ``indent`` parameter is interpreted in a similar way as :py:func:`ast.dump`.
        If ``indent`` is a non-negative integer or string, then the tree will be
        pretty-printed with that indent level. An indent level of 0, negative, or ``""``
        will only insert newlines. ``None`` selects the single line representation.
        Using a positive integer indent indents that many spaces per level. If
        ``indent`` is a string (such as ``"\t"``), that string is used to indent each
        level.

        :param indent: Indentation style as described above. The default indentation is
            4 spaces, which yields a pretty-printed dump.

        >>> import parso
        >>> print(parso.parse("lambda x, y: x + y").dump())
        Module([
            Lambda([
                Keyword('lambda', (1, 0)),
                Param([
                    Name('x', (1, 7), prefix=' '),
                    Operator(',', (1, 8)),
                ]),
                Param([
                    Name('y', (1, 10), prefix=' '),
                ]),
                Operator(':', (1, 11)),
                PythonNode('arith_expr', [
                    Name('x', (1, 13), prefix=' '),
                    Operator('+', (1, 15), prefix=' '),
                    Name('y', (1, 17), prefix=' '),
                ]),
            ]),
            EndMarker('', (1, 18)),
        ])
        NFÚ Tú z,expect 'indent' to be int, str or None, got r
   rC   Ú	top_levelr   c                 ó‚  •— d}t          | ¦  «        j        }t          | t          ¦  «        r}||› |› d�z  }t          | t          ¦  «        r|| j        ›d�z  }n"t          | t          ¦  «        r|| j         ›d�z  }|| j        ›d| j        ›�z  }| j	        r|d| j	        ›�z  }|dz  }n†t          | t          ¦  «        r_||› |› d�z  }t          | t          ¦  «        r|| j         ›d�z  }|dz  }‰r|dz  }| j        D ]}| ‰||‰z   d¬	¦  «        z  }Œ||› d
�z  }nt          d| ›�¦  «        ‚|s‰r|dz  }n|dz  }|S )NrE   ú(ú, z	, prefix=ú)ú[ú
F)rC   rG   z])zunsupported node encountered: z,
)r   Ú__name__Ú
isinstanceÚLeafÚ	ErrorLeafÚ
token_typeÚ	TypedLeafÚvaluer3   ÚprefixÚBaseNodeÚNoder   Ú	TypeError)	r
   rC   rG   ÚresultÚ	node_typer"   Ú_format_dumpÚindent_stringÚnewlines	         €€€r   r[   z%NodeOrLeaf.dump.<locals>._format_dumpô   sÍ  ø€ ØˆFÝ˜T™
œ
Ô+ˆIÝ˜$¥Ñ%Ô%ð KØ˜VÐ1 YÐ1Ð1Ð1Ñ1�Ý˜d¥IÑ.Ô.ð 1Ø ¤Ð6Ð6Ð6Ñ6�F�FÝ ¥iÑ0Ô0ð 1Ø ¤Ð0Ð0Ð0Ñ0�FØ˜TœZÐ?Ð?¨T¬^Ð?Ð?Ñ?�Ø”;ð :ØÐ9¨$¬+Ð9Ð9Ñ9�FØ˜#‘��Ý˜D¥(Ñ+Ô+ð KØ˜VÐ1 YÐ1Ð1Ð1Ñ1�Ý˜d¥DÑ)Ô)ð 1Ø ¤Ð0Ð0Ð0Ñ0�FØ˜#‘�Øð #Ø˜d‘N�FØ!œ]ð bð b�EØ˜l˜l¨5¸À-Ñ9OÐ[`ÐaÑaÔaÑa�F�FØ˜V˜-˜-˜-Ñ'��õ  Ð IÀÐ IÐ IÑJÔJÐJØð #Øð #Ø˜e‘O�F�Fà˜d‘N�FØˆMr   )rE   T)rO   ÚintÚstrrX   r   Úbool)r   rC   r[   r\   r]   s     @@@r   ÚdumpzNodeOrLeaf.dumpÂ   sÏ   øøø€ ðL ˆ>ØˆGØˆMˆMÝ˜¥Ñ$Ô$ð 	WØˆGØ &™LˆMˆMÝ˜¥Ñ$Ô$ð 	WØˆGØ"ˆMˆMåÐUÈ6ÐUÐUÑVÔVÐVð"	ð "	�zð "	µ3ð "	Íð "	ÕX[ð "	ð "	ð "	ð "	ð "	ð "	ð "	ð "	ðH ˆ|˜DÑ!Ô!Ð!r   N©T)rN   Ú
__module__Ú__qualname__Ú__doc__Ú	__slots__r_   Ú__annotations__r   r#   r%   r,   r/   r   r   r^   r3   r6   r   r8   r:   r<   r@   r   r   r   ra   r1   r   r   r   r      sÏ  € € € € € € ðð ð €IØ
€I€I�Iðð !Ð Ð Ñ ðð
ð ð ð ð  ð  ð"3ð 3ð 3ð"ð ð ð4ð ð ð4 ð˜5  c œ?ð ð ð ñ Ôðð ð˜˜s C˜xœð ð ð ñ Ôðð ðð ñ „^ðð ðð ñ „^ðð
 ðð ñ „^ðð
 ðð ð ñ „^ðð¨3ð Ð3Gð ð ð ð ð ;<ð V"ð V"ð V"˜h u¨S°#¨X¤Ô7ð V"Àð V"ð V"ð V"ð V"ð V"ð V"r   c            	       óþ   — e Zd ZU dZdZeed<   ddedeeef         deddfd	„Z	e
deeef         fd
„¦   «         Zej        deeef         ddfd„¦   «         Zd„ Zd„ Zd„ Zdd„Ze
deeef         fd„¦   «         Zd„ ZdS )rP   zƒ
    Leafs are basically tokens with a better API. Leafs exactly know where they
    were defined and what text preceeds them.
    )rT   ÚlineÚcolumnrU   rU   rE   rT   r3   r   Nc                 óB   — || _         	 || _        || _        	 d | _        d S ©N)rT   r3   rU   r   )r   rT   r3   rU   s       r   Ú__init__zLeaf.__init__#  s6   € ØˆŒ
ð	ð #ˆŒØˆŒð	ð +/ˆŒð	ð 	r   c                 ó   — | j         | j        fS rl   ©ri   rj   r2   s    r   r3   zLeaf.start_pos3  s   € àŒy˜$œ+Ð%Ð%r   c                 ó:   — |d         | _         |d         | _        d S )Nr   r   ro   ©r   rT   s     r   r3   zLeaf.start_pos7  s   € à˜!”HˆŒ	Ø˜A”hˆŒˆˆr   c                 óœ   — |                       ¦   «         }|€0t          | j        ¦  «        }| j        t	          |¦  «        z
  dz   dfS |j        S )Nr   r   )r,   r	   rU   ri   r.   r6   )r   Úprevious_leafÚliness      r   r8   zLeaf.get_start_pos_of_prefix<  sN   € Ø×.Ò.Ñ0Ô0ˆØÐ Ý ¤Ñ,Ô,ˆEà”9�s 5™zœzÑ)¨AÑ-¨qÐ0Ð0ØÔ$Ð$r   c                 ó   — | S rl   r1   r2   s    r   r:   zLeaf.get_first_leafD  ó   € Øˆr   c                 ó   — | S rl   r1   r2   s    r   r<   zLeaf.get_last_leafG  rv   r   Tc                 ó2   — |r| j         | j        z   S | j        S rl   )rU   rT   r>   s     r   r@   zLeaf.get_codeJ  s!   € Øð 	Ø”; ¤Ñ+Ð+à”:Ðr   c                 óâ   — t          | j        ¦  «        }| j        t          |¦  «        z   dz
  }| j        |k    r| j        t          |d         ¦  «        z   }nt          |d         ¦  «        }||fS )Nr   r'   )r	   rT   ri   r.   rj   )r   rt   Úend_pos_lineÚend_pos_columns       r   r6   zLeaf.end_posP  sg   € å˜DœJÑ'Ô'ˆØ”y¥3 u¡:¤:Ñ-°Ñ1ˆàŒ9˜Ò$Ð$Ø!œ[­3¨u°R¬y©>¬>Ñ9ˆNˆNå   r¤™^œ^ˆNØ˜^Ð+Ð+r   c                 óX   — | j         }|s| j        }dt          | ¦  «        j        ›d|›d�S )Nú<ú: ú>)rT   r   rN   rq   s     r   Ú__repr__zLeaf.__repr__[  s7   € Ø”
ˆØð 	Ø”IˆEøÝ! $™ZœZÔ0Ð0Ð0°%°%°%Ð8Ð8r   ©rE   rb   )rN   rc   rd   re   rf   r_   rg   r   r^   rm   Úpropertyr3   Úsetterr8   r:   r<   r@   r6   r€   r1   r   r   rP   rP     sV  € € € € € € ðð ð 6€IØ€K€K�Kðð ˜cð ¨e°C¸°H¬oð Àsð ÐTXð ð ð ð ð  ð&˜5  c œ?ð &ð &ð &ñ „Xð&ð Ôð˜u S¨# Xœð °4ð ð ð ñ Ôðð%ð %ð %ðð ð ðð ð ðð ð ð ð ð,˜˜s C˜xœð ,ð ,ð ,ñ „Xð,ð9ð 9ð 9ð 9ð 9r   rP   c                   ó$   ‡ — e Zd ZdZdˆ fd„	Zˆ xZS )rS   ©r   rE   c                 ó\   •— t          ¦   «                              |||¦  «         || _        d S rl   ©Úsuperrm   r   )r   r   rT   r3   rU   Ú	__class__s        €r   rm   zTypedLeaf.__init__e  s*   ø€ Ý‰Œ×Ò˜ 	¨6Ñ2Ô2Ð2ØˆŒ	ˆ	ˆ	r   r�   )rN   rc   rd   rf   rm   Ú__classcell__©r‰   s   @r   rS   rS   b  sB   ø€ € € € € Ø€Iðð ð ð ð ð ð ð ð ð r   rS   c                   ó¤   — e Zd ZdZdZdd„Zedeeef         fd„¦   «         Z	d„ Z
edeeef         fd„¦   «         Zd	„ Zdd„Zdd„Zd„ Zd„ Zd„ ZdS )rV   zd
    The super class for all nodes.
    A node has children, a type and possibly a parent node.
    )r   r   Nc                 ó>   — || _         	 d | _        	 |D ]	}| |_        Œ
d S rl   )r   r   )r   r   r"   s      r   rm   zBaseNode.__init__q  s@   € Ø ˆŒð	ð +/ˆŒð	ð ð 	 ð 	 ˆEØˆEŒLˆLð	 ð 	 r   c                 ó&   — | j         d         j        S ©Nr   )r   r3   r2   s    r   r3   zBaseNode.start_pos~  s   € àŒ}˜QÔÔ)Ð)r   c                 ó@   — | j         d                              ¦   «         S r�   )r   r8   r2   s    r   r8   z BaseNode.get_start_pos_of_prefix‚  s   € ØŒ}˜QÔ×7Ò7Ñ9Ô9Ð9r   c                 ó&   — | j         d         j        S ©Nr'   )r   r6   r2   s    r   r6   zBaseNode.end_pos…  s   € àŒ}˜RÔ Ô(Ð(r   c                 óÐ   — |rd                      d„ |D ¦   «         ¦  «        S |d                              d¬¦  «        }|d                      d„ |dd …         D ¦   «         ¦  «        z   S )NrE   c              3   ó>   K  — | ]}|                      ¦   «         V — Œd S rl   ©r@   ©Ú.0r+   s     r   ú	<genexpr>z2BaseNode._get_code_for_children.<locals>.<genexpr>‹  s*   è è € Ð:Ð:¨A˜1Ÿ:š:™<œ<Ð:Ð:Ð:Ð:Ð:Ð:r   r   F)r?   c              3   ó>   K  — | ]}|                      ¦   «         V — Œd S rl   r•   r–   s     r   r˜   z2BaseNode._get_code_for_children.<locals>.<genexpr>Ž  s*   è è € Ð"FÐ"F°A 1§:¢:¡<¤<Ð"FÐ"FÐ"FÐ"FÐ"FÐ"Fr   r   )Újoinr@   )r   r   r?   Úfirsts       r   Ú_get_code_for_childrenzBaseNode._get_code_for_children‰  st   € Øð 	GØ—7’7Ð:Ð:°Ð:Ñ:Ô:Ñ:Ô:Ð:à˜Q”K×(Ò(¸Ð(Ñ>Ô>ˆEØ˜2Ÿ7š7Ð"FÐ"F¸À!À"À"¼Ð"FÑ"FÔ"FÑFÔFÑFÐFr   Tc                 ó8   — |                       | j        |¦  «        S rl   )rœ   r   r>   s     r   r@   zBaseNode.get_code�  s   € Ø×*Ò*¨4¬=¸.ÑIÔIÐIr   Fc                 ó¸   ‡ ‡‡‡— ˆˆˆˆ fd„Šd‰cxk    r‰ j         d         j        k    sn t          d¦  «        ‚ ‰dt          ‰ j         ¦  «        dz
  ¦  «        S )ax  
        Get the :py:class:`parso.tree.Leaf` at ``position``

        :param tuple position: A position tuple, row, column. Rows start from 1
        :param bool include_prefixes: If ``False``, ``None`` will be returned if ``position`` falls
            on whitespace or comments before a leaf
        :return: :py:class:`parso.tree.Leaf` at ``position``, or ``None``
        c                 ó*  •— | |k    rE‰j         |          }‰s‰|j        k     rd S 	 |                     ‰‰¦  «        S # t          $ r |cY S w xY wt	          | |z   dz  ¦  «        }‰j         |         }‰|j        k    r ‰| |¦  «        S  ‰|dz   |¦  «        S )Né   r   )r   r3   Úget_leaf_for_positionr)   r^   r6   )ÚlowerÚupperÚelementr(   Úbinary_searchÚinclude_prefixesÚpositionr   s       €€€€r   r¥   z5BaseNode.get_leaf_for_position.<locals>.binary_searchœ  sË   ø€ Ø˜Š~ˆ~Øœ-¨Ô.�Ø'ð  ¨H°wÔ7HÒ,HÐ,Hà˜4ð#Ø"×8Ò8¸ÐCSÑTÔTÐTøÝ%ð #ð #ð #Ø"�N�N�Nð#øøøõ ˜ ™¨!Ñ+Ñ,Ô,ˆEØ”m EÔ*ˆGØ˜7œ?Ò*Ð*Ø$�} U¨EÑ2Ô2Ð2à$�} U¨Q¡Y°Ñ6Ô6Ð6s   ¥; »A
Á	A
)r   r   r'   z7Please provide a position that exists within this node.r   r   )r   r6   Ú
ValueErrorr.   )r   r§   r¦   r¥   s   ```@r   r¡   zBaseNode.get_leaf_for_position“  s‰   øøøø€ ð	7ð 	7ð 	7ð 	7ð 	7ð 	7ð 	7ð 	7ð& ˜(Ð?Ð?Ò?Ð? d¤m°BÔ&7Ô&?Ò?Ð?Ð?Ð?ÝÐVÑWÔWÐWØˆ}˜Q¥ D¤MÑ 2Ô 2°QÑ 6Ñ7Ô7Ð7r   c                 ó@   — | j         d                              ¦   «         S r�   )r   r:   r2   s    r   r:   zBaseNode.get_first_leaf³  s   € ØŒ}˜QÔ×.Ò.Ñ0Ô0Ð0r   c                 ó@   — | j         d                              ¦   «         S r’   )r   r<   r2   s    r   r<   zBaseNode.get_last_leaf¶  s   € ØŒ}˜RÔ ×.Ò.Ñ0Ô0Ð0r   c           	      ó  — |                       ¦   «                              dd¦  «                             dd¦  «                             ¦   «         }dt          | ¦  «        j        ›d|›d| j        d         ›d| j        d	         ›d
�	S )NrM   rF   úr}   r~   ú@r   ú,r   r   )r@   ÚreplaceÚstripr   rN   r3   )r   Úcodes     r   r€   zBaseNode.__repr__¹  s   € Ø�}Š}‰Œ×&Ò& t¨SÑ1Ô1×9Ò9¸$ÀÑDÔD×JÒJÑLÔLˆˆå�$‰ZŒZÔ Ð Ð  $ $ $¨¬°qÔ(9Ð(9Ð(9¸4¼>È!Ô;LÐ;LÐ;LðNð 	Nr   )r   Nrb   )F)rN   rc   rd   re   rf   rm   r‚   r   r^   r3   r8   r6   rœ   r@   r¡   r:   r<   r€   r1   r   r   rV   rV   j  s  € € € € € ðð ð €Ið ð  ð  ð  ð ð*˜5  c œ?ð *ð *ð *ñ „Xð*ð:ð :ð :ð ð)˜˜s C˜xœð )ð )ð )ñ „Xð)ðGð Gð GðJð Jð Jð Jð8ð 8ð 8ð 8ð@1ð 1ð 1ð1ð 1ð 1ðNð Nð Nð Nð Nr   rV   c                   ó,   ‡ — e Zd ZdZdZˆ fd„Zd„ Zˆ xZS )rW   z+Concrete implementation for interior nodes.r…   c                 óX   •— t          ¦   «                              |¦  «         || _        d S rl   r‡   )r   r   r   r‰   s      €r   rm   zNode.__init__Ã  s&   ø€ Ý‰Œ×Ò˜Ñ"Ô"Ð"ØˆŒ	ˆ	ˆ	r   c                 ó@   — | j         j        ›d| j        ›d| j        ›d�S )NrI   rJ   rK   )r‰   rN   r   r   r2   s    r   r€   zNode.__repr__Ç  s&   € Ø#œ~Ô6Ð6Ð6¸¼	¸	¸	À4Ä=À=À=ÐQÐQr   )rN   rc   rd   re   rf   rm   r€   rŠ   r‹   s   @r   rW   rW   ¿  sY   ø€ € € € € Ø5Ð5Ø€Iðð ð ð ð ðRð Rð Rð Rð Rð Rð Rr   rW   c                   ó   — e Zd ZdZdZdZdS )Ú	ErrorNodezÆ
    A node that contains valid nodes/leaves that we're follow by a token that
    was invalid. This basically means that the leaf after this node is where
    Python would mark a syntax error.
    r1   Ú
error_nodeN)rN   rc   rd   re   rf   r   r1   r   r   r¶   r¶   Ë  s$   € € € € € ðð ð
 €IØ€D€D€Dr   r¶   c                   ó2   ‡ — e Zd ZdZdZdZdˆ fd„	Zd„ Zˆ xZS )rQ   z”
    A leaf that is either completely invalid in a language (like `$` in Python)
    or is invalid at that position. Like the star in `1 +* 1`.
    )rR   Ú
error_leafrE   c                 ó\   •— t          ¦   «                              |||¦  «         || _        d S rl   )rˆ   rm   rR   )r   rR   rT   r3   rU   r‰   s        €r   rm   zErrorLeaf.__init__Ý  s*   ø€ Ý‰Œ×Ò˜ 	¨6Ñ2Ô2Ð2Ø$ˆŒˆˆr   c           	      ó|   — dt          | ¦  «        j        ›d| j        ›dt          | j        ¦  «        ›d| j        ›d�	S )Nr}   r~   ú:rJ   r   )r   rN   rR   ÚreprrT   r3   r2   s    r   r€   zErrorLeaf.__repr__á  sD   € € å�$‰ZŒZÔ Ð Ð  $¤/ / /µ4¸¼
Ñ3CÔ3CÐ3CÐ3CÀTÄ^À^À^ðUð 	Ur   r�   )	rN   rc   rd   re   rf   r   rm   r€   rŠ   r‹   s   @r   rQ   rQ   Õ  si   ø€ € € € € ðð ð  €IØ€Dð%ð %ð %ð %ð %ð %ðUð Uð Uð Uð Uð Uð Ur   rQ   N)Úabcr   r   Útypingr   r   r   r   Úparso.utilsr	   r_   r   r   rP   rS   rV   rW   r¶   rQ   r1   r   r   ú<module>rÁ      sà  ðØ 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ð /à #Ð #Ð #Ð #Ð #Ð #ð
-˜,ð 
-°Sð 
-Ð=Qð 
-ð 
-ð 
-ð 
-ðD"ð D"ð D"ð D"ð D"ñ D"ô D"ð D"ðND9ð D9ð D9ð D9ð D9ˆ:ñ D9ô D9ð D9ðNð ð ð ð �ñ ô ð ðRNð RNð RNð RNð RNˆzñ RNô RNð RNðj	Rð 	Rð 	Rð 	Rð 	Rˆ8ñ 	Rô 	Rð 	Rðð ð ð ð �ñ ô ð ðUð Uð Uð Uð U�ñ Uô Uð Uð Uð Ur   