ó
    ÖÁ“i#  ã            	       óD  • S SK r S SKJr  S SKJrJrJrJrJrJ	r	J
r
Jr  SSKJr  \(       a  SSKJr   S SKrS SKJr   " S S	5      r\
" S
5      r\\S4   r " S S\	\   5      r\S   r " S S\5      rSS\S\SSSS4S jjrSS\4S jjrSS\4S jjrg! \ a     Ngf = f)é    N)Údeepcopy)ÚListÚCallableÚIteratorÚUnionÚOptionalÚGenericÚTypeVarÚTYPE_CHECKINGé   )ÚToken)ÚTerminalDef)ÚLiteralc                   óv   • \ rS rSr% \\S'   \\S'   \\S'   \\S'   \\S'   \\S'   \\S'   S	\S
'   \\S'   S rSrg)ÚMetaé   ÚemptyÚlineÚcolumnÚ	start_posÚend_lineÚ
end_columnÚend_poszList[TerminalDef]Úorig_expansionÚ
match_treec                 ó   • SU l         g )NT©r   ©Úselfs    ÚF/home/mande/repo/quber/.venv/lib/python3.13/site-packages/lark/tree.pyÚ__init__ÚMeta.__init__   s	   € Øˆ�
ó    r   N)	Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__ÚboolÚ__annotations__Úintr!   Ú__static_attributes__© r#   r    r   r      s6   ‡ àƒKØ
ƒIØƒKØƒNØƒMØƒOØƒLØ'Ó'ØÓõr#   r   Ú_Leaf_TúTree[_Leaf_T]c            	       óZ  • \ rS rSr% Sr\\S'   S\S'   S'S\SSS\\   SS4S	 jjr	\
S\4S
 j5       rS rSrS rS rS(S\S\4S jjrS'S\S   SS4S jjrS rS rS rS\4S jrS)S jrS rS*S jrS\SS4S jrS\S\\   4S jrS  rSS!S\\   4S" jrS# r S+S$ jr!S\SSSS4S% jr"S&r#g),ÚTreeé&   a…  The main tree class.

Creates a new tree, and stores "data" and "children" in attributes of the same name.
Trees can be hashed and compared.

Parameters:
    data: The name of the rule or alias
    children: List of matched sub-rules and terminals
    meta: Line & Column numbers (if ``propagate_positions`` is enabled).
        meta attributes: (line, column, end_line, end_column, start_pos, end_pos,
                          container_line, container_column, container_end_line, container_end_column)
        container_* attributes consider all symbols, including those that have been inlined in the tree.
        For example, in the rule 'a: _A B _C', the regular attributes will mark the start and end of B,
        but the container_* attributes will also include _A and _C in the range. However, rules that
        contain 'a' will consider it in full, including _A and _C for all attributes.
ÚdatazList[Branch[_Leaf_T]]ÚchildrenNÚmetaÚreturnc                 ó(   • Xl         X l        X0l        g ©N)r2   r3   Ú_meta)r   r2   r3   r4   s       r    r!   ÚTree.__init__;   s   € ØŒ	Ø ŒØ�
r#   c                 óR   • U R                   c  [        5       U l         U R                   $ r7   )r8   r   r   s    r    r4   Ú	Tree.meta@   s   € à�:‰:ÑÜ›ˆDŒJØ�z‰zÐr#   c                 ó@   • SU R                   < SU R                  < S3$ )NzTree(z, Ú)©r2   r3   r   s    r    Ú__repr__ÚTree.__repr__F   s   � Ø!%§¤¨D¯M¬MÐ:Ð:r#   r>   c                 ó   • U R                   $ r7   ©r2   r   s    r    Ú_pretty_labelÚTree._pretty_labelK   s   € Ø�y‰yÐr#   c              #   ó”  #   • X!-   U R                  5        3v •  [        U R                  5      S:X  a8  [        U R                  S   [        5      (       d  SU R                  S    S3v •  g Sv •  U R                   HE  n[        U[        5      (       a  UR                  US-   U5       S h  v•N   M7  X!S-   -   U S3v •  MG     g  N7f)Nr   r   Ú	Ú
)rC   Úlenr3   Ú
isinstancer0   Ú_pretty)r   ÚlevelÚ
indent_strÚns       r    rJ   ÚTree._prettyN   sµ   é € ØÑ!Ð" 4×#5Ñ#5Ó#7Ð"8Ð9Ò9Üˆt�}‰}Ó Ó"¬:°d·m±mÀAÑ6FÌ×+MÑ+MØ�t—}‘} QÑ'Ð(¨Ð+Ó+àŠJØ—]”]�Ü˜a¤×&Ñ&Ø Ÿy™y¨¨q©°*Ó=×=Ò=à'¨q©Ñ1Ð2°1°#°RÐ8Ô8ò	 #á=ùs   ‚B*CÂ,CÂ-CrL   c                 óD   • SR                  U R                  SU5      5      $ )zMReturns an indented string representation of the tree.

Great for debugging.
Ú r   )ÚjoinrJ   )r   rL   s     r    ÚprettyÚTree.prettyZ   s   € ð
 �w‰w�t—|‘| A zÓ2Ó3Ð3r#   Úparentzrich.tree.Treec                 ó$   • U R                  U5      $ )zÁReturns a tree widget for the 'rich' library.

Example:
    ::
        from rich import print
        from lark import Tree

        tree = Tree('root', ['node1', 'node2'])
        print(tree)
)Ú_rich)r   rT   s     r    Ú__rich__ÚTree.__rich__a   s   € ð �z‰z˜&Ó!Ð!r#   c                 óF  • U(       a   UR                  SU R                   S35      nO)SS KnUR                  R	                  U R                  5      nU R
                   H@  n[        U[        5      (       a  UR                  U5        M+  UR                  SU S35        MB     U$ )Nz[bold]z[/bold]r   z[green]z[/green])Úaddr2   Ú	rich.treeÚtreer0   r3   rI   rV   )r   rT   r\   ÚrichÚcs        r    rV   Ú
Tree._richn   s{   € ÞØ—:‘:  t§y¡y k°Ð9Ó:‰DãØ—9‘9—>‘> $§)¡)Ó,ˆDà—”ˆAÜ˜!œT×"Ñ"Ø—‘˜–à—‘˜7 1 # XÐ.Ö/ñ	 ð ˆr#   c                 ó–   •  U R                   UR                   :H  =(       a    U R                  UR                  :H  $ ! [         a     gf = f)NF)r2   r3   ÚAttributeError©r   Úothers     r    Ú__eq__ÚTree.__eq__}   s>   € ð	Ø—9‘9 §
¡
Ñ*×N¨t¯}©}ÀÇÁÑ/NÐNøÜó 	Ùð	ús   ‚8; »
AÁAc                 ó   • X:X  + $ r7   r,   rb   s     r    Ú__ne__ÚTree.__ne__ƒ   s   € ØÒ"Ð"r#   c                 óV   • [        U R                  [        U R                  5      45      $ r7   )Úhashr2   Útupler3   r   s    r    Ú__hash__ÚTree.__hash__†   s   € Ü�T—Y‘Y¤ d§m¡mÓ 4Ð5Ó6Ð6r#   úIterator[Tree[_Leaf_T]]c           	      ó:  • U /n[        5       nU Ha  nX2[        U5      '   U[        UR                  5       Vs/ s H-  n[	        U[
        5      (       d  M  [        U5      U;  d  M+  UPM/     sn-  nMc     A[        [        UR                  5       5      5      $ s  snf )z†Depth-first iteration.

Iterates over all the subtrees, never returning to the same node twice (Lark's parse-tree is actually a DAG).
)ÚdictÚidÚreversedr3   rI   r0   ÚlistÚvalues)r   ÚqueueÚsubtreesÚsubtreer^   s        r    Úiter_subtreesÚTree.iter_subtrees‰   s—   € ð
 �ˆÜ“6ˆÛˆGØ$+”R˜“[Ñ!Ø¤¨'×*:Ñ*:Ô!;ó HÒ!;˜AÜ# A¤t×,ó Ü13°A³¸hÑ1F÷ Ñ!;ñ Hñ HŠEñ ð
 Üœ˜XŸ_™_Ó.Ó/Ó0Ð0ùò	Hs   ¸BÁBÁ&Bc              #   óð   #   • U /nUR                   nUR                  nU(       aP  U" 5       n[        U[        5      (       d  M%  Uv •  [	        UR
                  5       H  nU" U5        M     U(       a  MO  gg7f)zdBreadth-first iteration.

Iterates over all the subtrees, return nodes in order like pretty() does.
N)ÚappendÚpoprI   r0   rr   r3   )r   ÚstackÚstack_appendÚ	stack_popÚnodeÚchilds         r    Úiter_subtrees_topdownÚTree.iter_subtrees_topdown˜   sa   é € ð
 �ˆØ—|‘|ˆØ—I‘Iˆ	ÞÙ“;ˆDÜ˜d¤D×)Ñ)ÙØŠJÜ! $§-¡-Ö0�Ù˜UÖ#ñ 1÷ Šeùs   ‚A0A6Á4A6Úpredc                 ó4   • [        XR                  5       5      $ )z?Returns all nodes of the tree that evaluate pred(node) as true.)Úfilterrx   )r   r„   s     r    Ú	find_predÚTree.find_pred¨   s   € ä�d×.Ñ.Ó0Ó1Ð1r#   c                 ó.   ^• U R                  U4S j5      $ )z?Returns all nodes of the tree whose data equals the given data.c                 ó"   >• U R                   T:H  $ r7   rB   )Útr2   s    €r    Ú<lambda>Ú Tree.find_data.<locals>.<lambda>®   s   ø€ ¨¯©°$ªr#   )r‡   )r   r2   s    `r    Ú	find_dataÚTree.find_data¬   s   ø€ à�~‰~Ô6Ó7Ð7r#   Ú
token_typec                 ó.   ^• U R                  U4S j5      $ )z¼Returns all tokens whose type equals the given token_type.

This is a recursive function that will find tokens in all the subtrees.

Example:
    >>> term_tokens = tree.find_token('TERM')
c                 óP   >• [        U [        5      =(       a    U R                  T:H  $ r7   )rI   r   Útype)Úvr�   s    €r    rŒ   Ú!Tree.find_token.<locals>.<lambda>º   s   ø€ ¬*°Q¼Ó*>×*WÀ1Ç6Á6ÈZÑCWÐ*Wr#   )Úscan_values)r   r�   s    `r    Ú
find_tokenÚTree.find_token²   s   ø€ ð ×ÑÔ WÓXÐXr#   c                 ó  • Sn[        [        U R                  5      S-
  SS5       HX  nU R                  U   n[        U[        5      (       d  M)  UR
                  U;   d  M;  UR                  U R                  X3S-   & SnMZ     U$ )z\Expand (inline) children with any of the given data values. Returns True if anything changedFr   éÿÿÿÿT)ÚrangerH   r3   rI   r0   r2   )r   Údata_valuesÚchangedÚir�   s        r    Úexpand_kids_by_dataÚTree.expand_kids_by_data¼   sp   € àˆÜ”s˜4Ÿ=™=Ó)¨!Ñ+¨R°Ö4ˆAØ—M‘M !Ñ$ˆEÜ˜%¤×&Ó&¨5¯:©:¸Õ+DØ',§~¡~�—‘˜a !¡Ð$Ø’ñ	 5ð
 ˆr#   z!Callable[[Branch[_Leaf_T]], bool]c              #   ó¾   #   • U R                    HI  n[        U[        5      (       a  UR                  U5       H  nUv •  M	     M6  U" U5      (       d  ME  Uv •  MK     g7f)zÇReturn all values in the tree that evaluate pred(value) as true.

This can be used to find all the tokens in the tree.

Example:
    >>> all_tokens = tree.scan_values(lambda v: isinstance(v, Token))
N)r3   rI   r0   r–   )r   r„   r^   r‹   s       r    r–   ÚTree.scan_valuesÇ   sJ   é € ð —”ˆAÜ˜!œT×"Ñ"ØŸ™ tÖ,�AØ”Gó -ñ ˜—7“7Ø”Gò ùs   ‚AAÁ	Ac                 ót   • [        U 5      " U R                  [        U R                  U5      U R                  S9$ )N)r4   )r“   r2   r   r3   r8   )r   Úmemos     r    Ú__deepcopy__ÚTree.__deepcopy__×   s(   € Ü�DŒz˜$Ÿ)™)¤X¨d¯m©m¸TÓ%BÈÏÉÑTÐTr#   c                 óN   • [        U 5      " U R                  U R                  5      $ r7   )r“   r2   r3   r   s    r    ÚcopyÚ	Tree.copyÚ   s   € Ü�DŒz˜$Ÿ)™) T§]¡]Ó3Ð3r#   c                 ó   • Xl         X l        g r7   r>   )r   r2   r3   s      r    ÚsetÚTree.setÝ   s   € ØŒ	Ø �r#   )r8   r3   r2   r7   )z  )r5   rn   )r„   zCallable[[Tree[_Leaf_T]], bool]r5   rn   )r5   r.   )$r$   r%   r&   r'   Ú__doc__Ústrr)   r   r   r!   Úpropertyr4   r?   Ú__match_args__rC   rJ   rR   rW   rV   rd   rg   r*   rl   rx   r‚   r‡   rŽ   r   r-   r—   rŸ   r–   r¥   r¨   r«   r+   r,   r#   r    r0   r0   &   s8  ‡ ñð" ƒIØ%Ó%ñ˜Sð Ð,Cð È8ÐTXÉ>ð Ðcgõ ð
 ð�dó ó ðò
;ð *€Nòò
9ñ4 ð 4¨cõ 4ñ"˜hÐ'7Ñ8ð "ÐBRõ "òòò#ð7˜#ô 7ô1ò$ô 2ð8˜cð 8Ð&?ô 8ðY Sð Y¨X°gÑ->ô YòðÐ Cð ÈÐQXÑHYô ò Uô4ð!˜ð !Ð'>ð !À4÷ !r#   r0   r   c                   ó   • \ rS rSrSrSrg)ÚSlottedTreeéå   )r2   r3   Úruler8   r,   N)r$   r%   r&   r'   Ú	__slots__r+   r,   r#   r    r²   r²   å   s   † Ø3ƒIr#   r²   r\   ÚfilenameÚrankdirzLiteral["TB", "LR", "BT", "RL"]r5   c                 ó>   • [        X40 UD6nUR                  U5        g r7   )Úpydot__tree_to_graphÚ	write_png©r\   r¶   r·   ÚkwargsÚgraphs        r    Úpydot__tree_to_pngr¾   é   s   € Ü  Ñ9°&Ñ9€EØ	‡O�O�HÕr#   c                 ó>   • [        X40 UD6nUR                  U5        g r7   )r¹   Úwriter»   s        r    Úpydot__tree_to_dotrÁ   î   s   € Ü  Ñ9°&Ñ9€EØ	‡K�K�Õr#   c                 ó|   ^^^^^• SSK mTR                  " SSUS.UD6mS/mUUU4S jmUUUUU4S jmT" U 5        T$ )a¡  Creates a colorful image that represents the tree (data+children, without meta)

Possible values for `rankdir` are "TB", "LR", "BT", "RL", corresponding to
directed graphs drawn from top to bottom, from left to right, from bottom to
top, and from right to left, respectively.

`kwargs` can be any graph attribute (e. g. `dpi=200`). For a list of
possible attributes, see https://www.graphviz.org/doc/info/attrs.html.
r   NÚdigraph)Ú
graph_typer·   c                 ó|   >• TR                  TS   [        U 5      S9nTS==   S-  ss'   TR                  U5        U$ )Nr   )Úlabelr   )ÚNodeÚreprÚadd_node)Úleafr€   r½   rž   Úpydots     €€€r    Únew_leafÚ&pydot__tree_to_graph.<locals>.new_leaf  s;   ø€ Ø�z‰z˜!˜A™$¤d¨4£jˆzÐ1ˆØ	ˆ!‹�‰	‹Ø�‰�tÔØˆr#   c                 óœ  >• [        U R                  5      S-  nUS-  nU R                   Vs/ s H(  n[        U[        5      (       a  T" U5      OT	" U5      PM*     nnT
R                  TS   SSU-  U R                  S9nTS==   S-  ss'   TR                  U5        U H#  nTR                  T
R                  XE5      5        M%     U$ s  snf )Niÿÿÿ i€€€ r   Úfilledz#%x)ÚstyleÚ	fillcolorrÆ   r   )	rj   r2   r3   rI   r0   rÇ   rÉ   Úadd_edgeÚEdge)rw   Úcolorr�   Úsubnodesr€   ÚsubnodeÚ	_to_pydotr½   rž   rÌ   rË   s         €€€€€r    r×   Ú'pydot__tree_to_graph.<locals>._to_pydot	  sÈ   ø€ Ü�W—\‘\Ó" XÑ-ˆØ�Ñˆð ")×!1Ò!1ó3Ú!1˜ô )3°5¼$×(?Ñ(?‘I˜eÔ$ÁXÈeÃ_ÒTÙ!1ð 	ð 3à�z‰z˜!˜A™$ h¸%À%¹-ÈwÏ|É|ˆzÐ\ˆØ	ˆ!‹�‰	‹Ø�‰�tÔãˆGØ�N‰N˜5Ÿ:™: dÓ4Ö5ñ  ð ˆùò3s   ­/C	r,   )rË   ÚDot)r\   r·   r¼   r×   r½   rž   rÌ   rË   s      @@@@@r    r¹   r¹   ó   sD   ü€ ó Ø�IŠIÐF °GÑF¸vÑF€Eà	
ˆ€A÷÷ñ ñ ˆd„OØ€Lr#   )ÚLR)Úsysr¨   r   Útypingr   r   r   r   r   r	   r
   r   Úlexerr   r   r]   ÚImportErrorr   r   r-   ÚBranchr0   Ú	ParseTreer²   r®   r¾   rÁ   r¹   r,   r#   r    Ú<module>rá      sÊ   ðÛ 
Ý ç ]× ]Ó ]å æÝ"ðÛõ ÷ñ ñ  �)Ó
€Ø	ˆw˜Ð'Ñ	(€ôy!ˆ7�7Ñô y!ðx �‰M€	ô4�$ô 4ñ˜Tð ¨Sð Ð;\ð Ðptõ ñ
˜Tõ ñ
&˜tö &øðO ó Ùðús   ³B ÂBÂB