
    
`i                         d Z ddlmZmZmZmZ ddlmZ ddlm	Z	m
Z
 ddlmZ ddlmZmZmZ ddlmZmZmZ dd	lmZmZ dd
lmZ d Z G d de          Z G d de          ZdS )zbThis is an experimental tool for reconstructing text from a shaped tree, based on a Lark grammar.
    )DictCallableIterableOptional   )Lark)Tree	ParseTree)Transformer_InPlace)Token
PatternStrTerminalDef)TerminalNonTerminalSymbol)TreeMatcheris_discarded_terminal)is_id_continuec                 H    	 t          |           }dS # t          $ r Y dS w xY w)NFT)nextStopIteration)i_s     d/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/lark/reconstruct.pyis_iter_emptyr      s9    GGu   tts    
!!c                       e Zd ZU dZeeef         ed<   eeee	gef         f         ed<   deeef         deeee	gef         f         ddfdZ
d ZdS )WriteTokensTransformerzTInserts discarded tokens into their correct place, according to the rules of grammartokens	term_subsreturnNc                 "    || _         || _        d S N)r   r   )selfr   r   s      r   __init__zWriteTokensTransformer.__init__   s    "    c                    t          |dd          st          ||          S t          |          }g }|j        D ]:}t	          |          r	  | j        |j                 |          }nZ# t          $ rM | j        |j                 }t          |j
        t                    st          d|z            |j
        j        }Y nw xY w|                    |           t          |          }	t          |	t                     r||	z  }t          |	t"                    r#t%          |	j                  |k    s
J |	            n$t)          |	j                  |k    sJ ||	f            |                    |	           <t-          |          sJ |S )N
match_treeFz,Reconstructing regexps not supported yet: %s)getattrr	   iterorig_expansionr   r   nameKeyErrorr   
isinstancepatternr   NotImplementedErrorvalueappendr   listr   r   typer   datar   )
r#   r4   childrenmeta	iter_argsto_writesymvtxs
             r   __default__z"WriteTokensTransformer.__default__!   s   t\511 	(h'''NN	& 	' 	'C$S)) '(0sx055AA ( ( (CH-A%ai<< f12`cd2deee	AAA( """"OOa&& 'MHH!!U++ D'//36666666*1622c999C8999OOA&&&&Y'''''s   A))AC ?C )__name__
__module____qualname____doc__r   strr   __annotations__r   r   r$   r=    r%   r   r   r      s         ZZk!""""C6(C-001111#tC$45 #$sHV\U]_bUbLcGcBd #im # # # #    r%   r   c            
           e Zd ZU dZeed<   ddedeee	e
ege	f         f                  ddfdZd Zdd
edee
ee	         gee	         f                  dede	fdZdS )Reconstructora  
    A Reconstructor that will, given a full parse Tree, generate source code.

    Note:
        The reconstructor cannot generate values from regexps. If you need to produce discarded
        regexes, such as newlines, use `term_subs` and provide default values for them.

    Parameters:
        parser: a Lark instance
        term_subs: a dictionary of [Terminal name as str] to [output text as str]
    write_tokensNparserr   r    c                 |    t          j        | |           t          d | j        D             |pi           | _        d S )Nc                     i | ]
}|j         |S rD   )r+   ).0r;   s     r   
<dictcomp>z*Reconstructor.__init__.<locals>.<dictcomp>S   s    3R3R3RAF13R3R3Rr%   )r   r$   r   r   rG   )r#   rH   r   s      r   r$   zReconstructor.__init__P   sE    T6***23R3Rdk3R3R3RT]Tcacddr%   c              #      K   |                      ||j                  }| j                            |          }|D ]7}t	          |t
                    r|                     |          E d {V  3|V  8d S r"   )r'   r4   rG   	transformr-   r	   _reconstruct)r#   treeunreduced_treeresitems        r   rO   zReconstructor._reconstructU   s      ty99)).99 	 	D$%% ,,T2222222222



	 	r%   TrP   postprocinsert_spacesc                 :   |                      |          }|r ||          }g }d}|D ]^}|rC|rA|r?t          |d                   r*t          |d                   r|                    d           |                    |           |}_d                    |          S )N r    )rO   r   r1   join)r#   rP   rT   rU   r<   y	prev_itemrS   s           r   reconstructzReconstructor.reconstruct`   s    d## 	A	 	 	D  t yQS}8U8U ZhimnoipZqZq HHTNNNIIwwqzzr%   r"   )NT)r>   r?   r@   rA   r   rC   r   r   r   rB   r   r   r$   rO   r
   r   boolr]   rD   r%   r   rF   rF   A   s         
 
 )(((e et ec8VHVYMCZ>Z9[0\ efj e e e e
	 	 	 	 XhQTX`adXeGe>f5g   ~B   LO      r%   rF   N)rA   typingr   r   r   r   larkr   rP   r	   r
   visitorsr   lexerr   r   r   grammarr   r   r   tree_matcherr   r   utilsr   r   r   rF   rD   r%   r   <module>rf      sF    6 5 5 5 5 5 5 5 5 5 5 5       ! ! ! ! ! ! ! ! ) ) ) ) ) ) 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 < < < < < < < < ! ! ! ! ! !  ' ' ' ' '0 ' ' 'T* * * * *K * * * * *r%   