Ë
    ðeœi#  ã            	       ó,  — d dl Z d dlmZ d dlmZmZmZmZmZm	Z	m
Z
mZ ddlmZ erddlmZ 	 d dlZd dlmZ  G d„ d	«      Z e
d
«      Zeedf   Z G d„ de	e   «      Zed   Z G d„ de«      Zddededdddfd„Zddefd„Zddefd„Zy# e$ r Y Œ`w xY w)é    N)Údeepcopy)ÚListÚCallableÚIteratorÚUnionÚOptionalÚGenericÚTypeVarÚTYPE_CHECKINGé   )ÚToken)ÚTerminalDef)ÚLiteralc                   ón   — e Zd ZU eed<   eed<   eed<   eed<   eed<   eed<   eed<   ded	<   eed
<   d„ Zy)ÚMetaÚemptyÚlineÚcolumnÚ	start_posÚend_lineÚ
end_columnÚend_poszList[TerminalDef]Úorig_expansionÚ
match_treec                 ó   — d| _         y )NT)r   ©Úselfs    ú^/var/www/html/Whatsapp_Customer_Support_Chatbot/venv/lib/python3.12/site-packages/lark/tree.pyÚ__init__zMeta.__init__   s	   € Øˆ�
ó    N)Ú__name__Ú
__module__Ú__qualname__ÚboolÚ__annotations__Úintr   © r    r   r   r      s6   … àƒKØ
ƒIØƒKØƒNØƒMØƒOØƒLØ'Ó'ØÓór    r   Ú_Leaf_TúTree[_Leaf_T]c            	       ó4  — e Zd ZU dZeed<   ded<   d%dedddee   ddfd„Ze	defd	„«       Z
d
„ ZdZd„ Zd„ Zd&dedefd„Zd%ded   ddfd„Zd„ Zd„ Zd„ Zdefd„Zd'd„Zd„ Zd(d„Zdeddfd„Zdedee   fd„Zd„ Zdd dee   fd!„Zd"„ Zd)d#„Z deddddfd$„Z!y)*ÚTreea¹  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                 ó.   — || _         || _        || _        y ©N)r,   r-   Ú_meta)r   r,   r-   r.   s       r   r   zTree.__init__;   s   € ØˆŒ	Ø ˆŒØˆ�
r    c                 óP   — | j                   €t        «       | _         | j                   S r1   )r2   r   r   s    r   r.   z	Tree.meta@   s   € à�:‰:ÐÜ›ˆDŒJØ�z‰zÐr    c                 ó<   — d| j                   ›d| j                  ›d�S )NzTree(z, ú)©r,   r-   r   s    r   Ú__repr__zTree.__repr__F   s   � Ø!%§£¨D¯M«MÐ:Ð:r    r6   c                 ó   — | j                   S r1   ©r,   r   s    r   Ú_pretty_labelzTree._pretty_labelK   s   € Ø�y‰yÐr    c              #   ó|  K  — ||z  › | j                  «       › �–— t        | j                  «      dk(  r3t        | j                  d   t        «      sd| j                  d   › d�–— y d–— | j                  D ]?  }t        |t        «      r|j                  |dz   |«      E d {  –—†  Œ1||dz   z  › |› d�–— ŒA y 7 Œ­w)Nr   r   ú	ú
)r:   Úlenr-   Ú
isinstancer+   Ú_pretty)r   ÚlevelÚ
indent_strÚns       r   r@   zTree._prettyN   s¹   è ø€ Ø˜EÑ!Ð" 4×#5Ñ#5Ó#7Ð"8Ð9Ò9Üˆt�}‰}Ó Ò"¬:°d·m±mÀAÑ6FÌÔ+MØ�t—}‘} QÑ'Ð(¨Ð+Ó+àŠJØ—]‘]ò 9�Ü˜a¤Ô&Ø Ÿy™y¨¨q©°*Ó=×=Ñ=à'¨¨q©Ñ1Ð2°1°#°RÐ8Ó8ñ	9à=ús   ‚B B<Â"B:Â#B<rB   c                 óD   — dj                  | j                  d|«      «      S )z]Returns an indented string representation of the tree.

        Great for debugging.
        Ú r   )Újoinr@   )r   rB   s     r   ÚprettyzTree.prettyZ   s   € ð
 �w‰w�t—|‘| A zÓ2Ó3Ð3r    Úparentzrich.tree.Treec                 ó$   — | j                  |«      S )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   rH   s     r   Ú__rich__zTree.__rich__a   s   € ð �z‰z˜&Ó!Ð!r    c                 ó,  — |r |j                  d| j                  › d�«      }n)dd l}|j                  j	                  | j                  «      }| j
                  D ]9  }t        |t        «      r|j                  |«       Œ%|j                  d|› d�«       Œ; |S )Nz[bold]z[/bold]r   z[green]z[/green])Úaddr,   Ú	rich.treeÚtreer+   r-   r?   rJ   )r   rH   rO   ÚrichÚcs        r   rJ   z
Tree._richn   s}   € ÙØ—:‘:  t§y¡y k°Ð9Ó:‰DãØ—9‘9—>‘> $§)¡)Ó,ˆDà—‘ò 	0ˆAÜ˜!œTÔ"Ø—‘˜•à—‘˜7 1 # XÐ.Õ/ð		0ð ˆr    c                 óŠ   — 	 | j                   |j                   k(  xr | j                  |j                  k(  S # t        $ r Y yw xY w)NF)r,   r-   ÚAttributeError©r   Úothers     r   Ú__eq__zTree.__eq__}   s>   € ð	Ø—9‘9 §
¡
Ñ*ÒN¨t¯}©}ÀÇÁÑ/NÐNøÜò 	Ùð	ús   ‚36 ¶	AÁAc                 ó   — | |k(   S r1   r'   rT   s     r   Ú__ne__zTree.__ne__ƒ   s   € Ø˜E‘MÐ"Ð"r    c                 óV   — t        | j                  t        | j                  «      f«      S r1   )Úhashr,   Útupler-   r   s    r   Ú__hash__zTree.__hash__†   s   € Ü�T—Y‘Y¤ d§m¡mÓ 4Ð5Ó6Ð6r    úIterator[Tree[_Leaf_T]]c           	      ó  — | g}t        «       }|D ]S  }||t        |«      <   |t        |j                  «      D �cg c]!  }t	        |t
        «      rt        |«      |vr|‘Œ# c}z  }ŒU ~t        t        |j                  «       «      «      S c c}w )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Úreversedr-   r?   r+   ÚlistÚvalues)r   ÚqueueÚsubtreesÚsubtreerQ   s        r   Úiter_subtreeszTree.iter_subtrees‰   s”   € ð
 �ˆÜ“6ˆØò 	HˆGØ$+ˆH”R˜“[Ñ!Ø¤¨'×*:Ñ*:Ó!;ö H˜AÜ# A¤tÔ,´°A³¸hÑ1Fò ò Hñ H‰Eð	Hð
 Üœ˜XŸ_™_Ó.Ó/Ó0Ð0ùò	Hs   ¹&B	c              #   óÊ   K  — | g}|j                   }|j                  }|rB |«       }t        |t        «      sŒ|–— t	        |j
                  «      D ]
  } ||«       Œ |rŒAyy­w)ztBreadth-first iteration.

        Iterates over all the subtrees, return nodes in order like pretty() does.
        N)ÚappendÚpopr?   r+   ra   r-   )r   ÚstackÚstack_appendÚ	stack_popÚnodeÚchilds         r   Úiter_subtrees_topdownzTree.iter_subtrees_topdown˜   sb   è ø€ ð
 �ˆØ—|‘|ˆØ—I‘Iˆ	ÙÙ“;ˆDÜ˜d¤DÔ)ØØŠJÜ! $§-¡-Ó0ò $�Ù˜UÕ#ð$ô ùs   ‚AA#Á!A#Úpredc                 ó6   — t        || j                  «       «      S )z?Returns all nodes of the tree that evaluate pred(node) as true.)Úfilterrg   )r   rq   s     r   Ú	find_predzTree.find_pred¨   s   € ä�d˜D×.Ñ.Ó0Ó1Ð1r    c                 ó,   ‡— | j                  ˆfd„«      S )z?Returns all nodes of the tree whose data equals the given data.c                 ó"   •— | j                   ‰k(  S r1   r9   )Útr,   s    €r   ú<lambda>z Tree.find_data.<locals>.<lambda>®   s   ø€ ¨¯©°$©€ r    )rt   )r   r,   s    `r   Ú	find_datazTree.find_data¬   s   ø€ à�~‰~Ó6Ó7Ð7r    Ú
token_typec                 ó,   ‡— | j                  ˆfd„«      S )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                 óF   •— t        | t        «      xr | j                  ‰k(  S r1   )r?   r   Útype)Úvrz   s    €r   rx   z!Tree.find_token.<locals>.<lambda>º   s   ø€ ¬*°Q¼Ó*>Ò*WÀ1Ç6Á6ÈZÑCW€ r    )Úscan_values)r   rz   s    `r   Ú
find_tokenzTree.find_token²   s   ø€ ð ×ÑÓ WÓXÐXr    c                 óô   — d}t        t        | j                  «      dz
  dd«      D ]O  }| j                  |   }t        |t        «      sŒ#|j
                  |v sŒ2|j                  | j                  ||dz    d}ŒQ |S )z\Expand (inline) children with any of the given data values. Returns True if anything changedFr   éÿÿÿÿT)Úranger>   r-   r?   r+   r,   )r   Údata_valuesÚchangedÚiro   s        r   Úexpand_kids_by_datazTree.expand_kids_by_data¼   st   € àˆÜ”s˜4Ÿ=™=Ó)¨!Ñ+¨R°Ó4ò 	ˆAØ—M‘M !Ñ$ˆEÜ˜%¤Õ&¨5¯:©:¸Ò+DØ',§~¡~�—‘˜a  !¡Ð$Ø‘ð		ð
 ˆr    z!Callable[[Branch[_Leaf_T]], bool]c              #   óž   K  — | j                   D ]:  }t        |t        «      r|j                  |«      D ]  }|–— Œ Œ. ||«      sŒ7|–— Œ< y­w)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)r-   r?   r+   r   )r   rq   rQ   rw   s       r   r   zTree.scan_valuesÇ   sP   è ø€ ð —‘ò 	ˆAÜ˜!œTÔ"ØŸ™ tÓ,ò �AØ“Gññ ˜•7Ø“Gñ	ùs   ‚AAÁAc                 óz   —  t        | «      | j                  t        | j                  |«      | j                  ¬«      S )N)r.   )r}   r,   r   r-   r2   )r   Úmemos     r   Ú__deepcopy__zTree.__deepcopy__×   s*   € ØŒt�D‹z˜$Ÿ)™)¤X¨d¯m©m¸TÓ%BÈÏÉÔTÐTr    c                 óN   —  t        | «      | j                  | j                  «      S r1   )r}   r,   r-   r   s    r   Úcopyz	Tree.copyÚ   s   € ØŒt�D‹z˜$Ÿ)™) T§]¡]Ó3Ð3r    c                 ó    — || _         || _        y r1   r6   )r   r,   r-   s      r   ÚsetzTree.setÝ   s   € ØˆŒ	Ø ˆ�r    r1   )z  )r/   r]   )rq   zCallable[[Tree[_Leaf_T]], bool]r/   r]   )r/   r)   )"r!   r"   r#   Ú__doc__Ústrr%   r   r   r   Úpropertyr.   r7   Ú__match_args__r:   r@   rG   rK   rJ   rV   rX   r&   r\   rg   rp   rt   ry   r   r(   r€   r‡   r   r‹   r�   r�   r'   r    r   r+   r+   &   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    r+   r   c                   ó   — e Zd ZdZy)ÚSlottedTree)r,   r-   Úruler2   N)r!   r"   r#   Ú	__slots__r'   r    r   r•   r•   å   s   „ Ø3�Ir    r•   rO   ÚfilenameÚrankdirzLiteral["TB", "LR", "BT", "RL"]r/   c                 ó@   — t        | |fi |¤Ž}|j                  |«       y r1   )Úpydot__tree_to_graphÚ	write_png©rO   r˜   r™   ÚkwargsÚgraphs        r   Úpydot__tree_to_pngr    é   s   € Ü   wÑ9°&Ñ9€EØ	‡O�O�HÕr    c                 ó@   — t        | |fi |¤Ž}|j                  |«       y r1   )r›   Úwriter�   s        r   Úpydot__tree_to_dotr£   î   s   € Ü   wÑ9°&Ñ9€EØ	‡K�K�Õr    c                 óx   ‡‡‡‡‡— ddl Š ‰j                  dd|dœ|¤ŽŠdgŠˆˆˆfd„Šˆˆˆˆˆfd„Š ‰| «       ‰S )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                 ó‚   •— ‰j                  ‰d   t        | «      ¬«      }‰dxx   dz  cc<   ‰j                  |«       |S )Nr   )Úlabelr   )ÚNodeÚreprÚadd_node)Úleafrn   rŸ   r†   Úpydots     €€€r   Únew_leafz&pydot__tree_to_graph.<locals>.new_leaf  s;   ø€ Ø�z‰z˜!˜A™$¤d¨4£jˆzÓ1ˆØ	ˆ!‹�‰	‹Ø�‰�tÔØˆr    c                 ó�  •— t        | j                  «      dz  }|dz  }| j                  D �cg c]"  }t        |t        «      r ‰|«      n ‰	|«      ‘Œ$ }}‰
j                  ‰d   dd|z  | j                  ¬«      }‰dxx   dz  cc<   ‰j                  |«       |D ]#  }‰j                  ‰
j                  ||«      «       Œ% |S c c}w )Niÿÿÿ i€€€ r   Úfilledz#%x)ÚstyleÚ	fillcolorr¨   r   )	rZ   r,   r-   r?   r+   r©   r«   Úadd_edgeÚEdge)rf   Úcolorro   Úsubnodesrn   ÚsubnodeÚ	_to_pydotrŸ   r†   r®   r­   s         €€€€€r   r¸   z'pydot__tree_to_graph.<locals>._to_pydot	  sÉ   ø€ Ü�W—\‘\Ó" XÑ-ˆØ�Ñˆð ")×!1Ñ!1ö3Øô )3°5¼$Ô(?‘I˜eÔ$ÁXÈeÃ_ÑTð 3ˆð 3à�z‰z˜!˜A™$ h¸%À%¹-ÈwÏ|É|ˆzÓ\ˆØ	ˆ!‹�‰	‹Ø�‰�tÔàò 	6ˆGØ�N‰N˜5Ÿ:™: d¨GÓ4Õ5ð	6ð ˆùò3s   ­'Cr'   )r­   ÚDot)rO   r™   rž   r¸   rŸ   r†   r®   r­   s      @@@@@r   r›   r›   ó   sF   ü€ ó ØˆE�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   rP   ÚImportErrorr   r   r(   ÚBranchr+   Ú	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