Ë
    :vžj…8  ã                   óH  — d Z ddlmZ ddlmZmZ ddlmZ ddlm	Z	 ddl
mZ ddl
mZmZ dd	lmZmZ dd
lmZ  G d„ d«      Z G d„ d«      Zd„ Z G d„ d«      Z G d„ de«      Z G d„ de«      Zd„ Zdee   fd„Z G d„ d«      Zd„ Z G d„ d«      Zd„ Zd„ Z  G d „ d!«      Z!y")#zLProvides functions for the automatic building and shaping of the parse-tree.é    )ÚListé   )ÚGrammarErrorÚConfigurationError)ÚToken)ÚTree)ÚTransformer_InPlace)Ú_vargs_metaÚ_vargs_meta_inline)ÚpartialÚwraps)Úproductc                   ó   — e Zd Zd„ Zd„ Zy)ÚExpandSingleChildc                 ó   — || _         y ©N)Únode_builder)Úselfr   s     úh/workspace/moltex-experiments/.pixi/envs/default/lib/python3.12/site-packages/lark/parse_tree_builder.pyÚ__init__zExpandSingleChild.__init__   s
   € Ø(ˆÕó    c                 óJ   — t        |«      dk(  r|d   S | j                  |«      S )Nr   r   )Úlenr   )r   Úchildrens     r   Ú__call__zExpandSingleChild.__call__   s)   € Üˆx‹=˜AÒØ˜A‘;Ðà×$Ñ$ XÓ.Ð.r   N©Ú__name__Ú
__module__Ú__qualname__r   r   © r   r   r   r      s   „ ò)ó/r   r   c                   ó    — e Zd Zdd„Zd„ Zd„ Zy)ÚPropagatePositionsNc                 ó    — || _         || _        y r   )r   Únode_filter)r   r   r$   s      r   r   zPropagatePositions.__init__   s   € Ø(ˆÔØ&ˆÕr   c                 ó¬  — | j                  |«      }t        |t        «      �r±|j                  }| j	                  |«      }|�»t        |d«      s[t        |d|j                  «      |_        t        |d|j                  «      |_        t        |d|j                  «      |_	        d|_
        t        |d|j                  «      |_        t        |d|j                  «      |_        t        |d|j                  «      |_        | j	                  t        |«      «      }|�»t        |d«      s[t        |d|j                  «      |_        t        |d|j                   «      |_        t        |d	|j"                  «      |_        d|_
        t        |d|j                  «      |_        t        |d|j                   «      |_        t        |d	|j"                  «      |_        |S )
NÚlineÚcontainer_lineÚcontainer_columnÚcontainer_start_posFÚend_lineÚcontainer_end_lineÚcontainer_end_columnÚcontainer_end_pos)r   Ú
isinstancer   ÚmetaÚ_pp_get_metaÚhasattrÚgetattrr&   ÚcolumnÚ	start_posÚemptyr'   r(   r)   Úreversedr*   Ú
end_columnÚend_posr+   r,   r-   )r   r   ÚresÚres_metaÚ
first_metaÚ	last_metas         r   r   zPropagatePositions.__call__!   s¤  € Ø×Ñ Ó)ˆä�cœ4Õ ð —x‘xˆHà×*Ñ*¨8Ó4ˆJØÐ%Ü˜x¨Ô0ä$+¨JÐ8HÈ*Ï/É/Ó$Z�H”MÜ&-¨jÐ:LÈj×N_ÑN_Ó&`�H”OÜ)0°Ð=RÐT^×ThÑThÓ)i�HÔ&Ø%*�H”Nä*1°*Ð>NÐPZ×P_ÑP_Ó*`�Ô'Ü,3°JÐ@RÐT^×TeÑTeÓ,f�Ô)Ü/6°zÐCXÐZd×ZnÑZnÓ/o�Ô,à×)Ñ)¬(°8Ó*<Ó=ˆIØÐ$Ü˜x¨Ô4Ü(/°	Ð;OÐQZ×QcÑQcÓ(d�HÔ%Ü*1°)Ð=SÐU^×UiÑUiÓ*j�HÔ'Ü'.¨yÐ:MÈy×O`ÑO`Ó'a�HÔ$Ø%*�H”Nä.5°iÐAUÐW`×WiÑWiÓ.j�Ô+Ü07¸	ÐCYÐ[d×[oÑ[oÓ0p�Ô-Ü-4°YÐ@SÐU^×UfÑUfÓ-g�Ô*àˆ
r   c                 ó  — |D ]‡  }| j                   �| j                  |«      sŒ!t        |t        «      r%|j                  j                  rŒH|j                  c S t        |t
        «      r|c S t        |d«      sŒw|j                  «       c S  y )NÚ__lark_meta__)r$   r.   r   r/   r5   r   r1   r>   )r   r   Úcs      r   r0   zPropagatePositions._pp_get_metaG   sl   € ÛˆAØ×ÑÐ+°D×4DÑ4DÀQÔ4GØÜ˜!œTÔ"Ø—v‘v—|“|ØŸ6™6’MÜ˜AœuÔ%Ø’Ü˜˜OÕ,Ø—‘Ó(Ò(ñ r   r   )r   r   r   r   r   r0   r    r   r   r"   r"      s   „ ó'ò$óL
)r   r"   c                 ót   — t        | «      rt        t        | ¬«      S | du rt        S | du ry t        d| z  «      ‚)N)r$   TFz*Invalid option for propagate_positions: %r)Úcallabler   r"   r   )Úoptions    r   Úmake_propagate_positionsrC   S   s@   € Ü�ÔÜÔ)°vÔ>Ð>Ø	�4‰Ü!Ð!Ø	�5‰Øä
ÐIÈFÑRÓ
SÐSr   c                   ó   — e Zd Zd„ Zd„ Zy)ÚChildFilterc                 ó.   — || _         || _        || _        y r   )r   Ú
to_includeÚappend_none)r   rG   rH   r   s       r   r   zChildFilter.__init___   s   € Ø(ˆÔØ$ˆŒØ&ˆÕr   c                 óø   — g }| j                   D ]:  \  }}}|r	|d g|z  z  }|r|||   j                  z  }Œ'|j                  ||   «       Œ< | j                  r|d g| j                  z  z  }| j	                  |«      S r   ©rG   r   ÚappendrH   r   ©r   r   ÚfilteredÚiÚ	to_expandÚadd_nones         r   r   zChildFilter.__call__d   sŠ   € Øˆà&*§o¤oÑ"ˆAˆy˜(ÙØ˜T˜F XÑ-Ñ-�ÙØ˜H Q™K×0Ñ0Ñ0‘à—‘ ¨¡Õ,ð '6ð ×ÒØ˜˜ ×!1Ñ!1Ñ1Ñ1ˆHà× Ñ  Ó*Ð*r   Nr   r    r   r   rE   rE   ^   s   „ ò'ó
+r   rE   c                   ó   — e Zd ZdZd„ Zy)ÚChildFilterLALRú`Optimized childfilter for LALR (assumes no duplication in parse tree, so it's safe to change it)c                 ó  — g }| j                   D ]L  \  }}}|r	|d g|z  z  }|r%|r|||   j                  z  }Œ)||   j                  }Œ9|j                  ||   «       ŒN | j                  r|d g| j                  z  z  }| j	                  |«      S r   rJ   rL   s         r   r   zChildFilterLALR.__call__x   sœ   € ØˆØ&*§o¤oÑ"ˆAˆy˜(ÙØ˜T˜F XÑ-Ñ-�ÙÙØ ¨¡× 4Ñ 4Ñ4‘Hà'¨™{×3Ñ3‘Hà—‘ ¨¡Õ,ð '6ð ×ÒØ˜˜ ×!1Ñ!1Ñ1Ñ1ˆHà× Ñ  Ó*Ð*r   N)r   r   r   Ú__doc__r   r    r   r   rR   rR   u   s
   „ Ùjó+r   rR   c                   ó   — e Zd ZdZd„ Zd„ Zy)ÚChildFilterLALR_NoPlaceholdersrS   c                 ó    — || _         || _        y r   )r   rG   )r   rG   r   s      r   r   z'ChildFilterLALR_NoPlaceholders.__init__�   ó   € Ø(ˆÔØ$ˆ�r   c                 óÆ   — g }| j                   D ]@  \  }}|r%|r|||   j                  z  }Œ||   j                  }Œ-|j                  ||   «       ŒB | j                  |«      S r   )rG   r   rK   r   )r   r   rM   rN   rO   s        r   r   z'ChildFilterLALR_NoPlaceholders.__call__‘   se   € ØˆØ ŸOœO‰LˆAˆyÙÙØ ¨¡× 4Ñ 4Ñ4‘Hà'¨™{×3Ñ3‘Hà—‘ ¨¡Õ,ð ,ð × Ñ  Ó*Ð*r   N©r   r   r   rU   r   r   r    r   r   rW   rW   ‹   s   „ Ùfò%ó
+r   rW   c                 óV   — | j                    xr | j                  j                  d«      S )NÚ_)Úis_termÚnameÚ
startswith)Úsyms    r   Ú_should_expandrb   ž   s"   € Ø�{‰{ˆ?Ò7˜sŸx™x×2Ñ2°3Ó7Ð7r   Ú_empty_indicesc                 ó  — |rŠ|j                  d«      t        | «      k(  sJ ‚dj                  d„ |D «       «      }|j                  d«      D �cg c]  }t        |«      ‘Œ }}t        |«      t        | «      dz   k(  s$J |t        | «      f«       ‚dgt        | «      dz   z  }g }d}t	        | «      D ]G  \  }	}
|||	   z  }|s|
j
                  r|
j                  rŒ)|j                  |	t        |
«      |f«       d}ŒI ||t        | «         z  }|s)t        |«      t        | «      k  st        d„ |D «       «      rK|s|rt        |rt        ||«      S t        ||«      S t        t        |D �	��cg c]
  \  }	}}|	|f‘Œ c}}}	«      S y c c}w c c}}}	w )NFÚ c              3   óD   K  — | ]  }t        t        |«      «      –— Œ y ­wr   )ÚstrÚint)Ú.0Úbs     r   Ú	<genexpr>z,maybe_create_child_filter.<locals>.<genexpr>¦   s   è ø€ Ð8© A”Cœ˜A›—K©ùs   ‚ Ú0r   r   c              3   ó(   K  — | ]
  \  }}}|–— Œ y ­wr   r    )ri   rN   rO   r]   s       r   rk   z,maybe_create_child_filter.<locals>.<genexpr>¶   s   è ø€ Ð@lÑakÉ~ÈqÐR[Ð\]ÄÑakùs   ‚)Úcountr   ÚjoinÚsplitÚ	enumerater^   Ú
filter_outrK   rb   Úanyr   rE   rR   rW   )Ú	expansionÚkeep_all_tokensÚ	ambiguousrc   ÚsÚonesÚempty_indicesrG   Únones_to_addrN   ra   Úxr]   s                r   Úmaybe_create_child_filterr|   ¢   s…  € áØ×#Ñ# EÓ*¬c°)«nÒ<Ð<Ð<Ø�G‰GÑ8©Ó8Ó8ˆØ/0¯w©w°s¬|Ó<©| tœ˜T�¨|ˆÐ<Ü�=Ó!¤S¨£^°AÑ%5Ò5ÐV¸ÄsÈ9Ã~Ð7VÓVÐ5à˜œs 9›~¨aÑ/Ñ0ˆà€JØ€LÜ˜IÖ&‰ˆˆ3Ø˜ aÑ(Ñ(ˆÙ 3§;¢;°3·>³>Ø×Ñ˜q¤.°Ó"5°|ÐDÔEØ‰Lð	 'ð �M¤# i£.Ñ1Ñ1€Láœ˜Z›¬3¨y«>Ò9¼SÑ@lÑakÓ@lÔ=lÙ™YÜ©)œ;È*ÐVbÓcÐc¼È*ÐVbÓcÐcô Ô9ÑPZÕ;[ÑPZÁuÀqÈÈ1¸QÀºFÐPZÓ;[Ó\Ð\ð >mùò =ùô( <\s   ÁF Å'Fc                   ó   — e Zd ZdZd„ Zd„ Zy)ÚAmbiguousExpandera�  Deal with the case where we're expanding children ('_rule') into a parent but the children
       are ambiguous. i.e. (parent->_ambig->_expand_this_rule). In this case, make the parent itself
       ambiguous with as many copies as there are ambiguous children, and then copy the ambiguous children
       into the right parents in the right places, essentially shifting the ambiguity up the tree.c                 ó.   — || _         || _        || _        y r   )r   Ú
tree_classrO   )r   rO   r€   r   s       r   r   zAmbiguousExpander.__init__Ã   s   € Ø(ˆÔØ$ˆŒØ"ˆ�r   c                 ó¸  — d„ }g }t        |«      D ]>  \  }} ||«      sŒ|| j                  v r|j                  |«       |j                  d«       Œ@ |s| j	                  |«      S t        |«      D ��cg c]  \  }}||v r|j
                  n|f‘Œ }}}| j                  dt        |Ž D �cg c]  }| j	                  t        |«      «      ‘Œ c}«      S c c}}w c c}w )Nc                 ó<   — t        | d«      xr | j                  dk(  S )NÚdataÚ_ambig©r1   rƒ   )Úts    r   Ú_is_ambig_treez2AmbiguousExpander.__call__.<locals>._is_ambig_treeÉ   s   € Ü˜1˜fÓ%Ò<¨!¯&©&°HÑ*<Ð<r   r„   )	rq   rO   rK   Úexpand_kids_by_datar   r   r€   r   Úlist)r   r   r‡   rv   rN   ÚchildÚexpandÚfs           r   r   zAmbiguousExpander.__call__È   sØ   € ò	=ð ˆ	Ü! (Ö+‰HˆAˆuÙ˜eÕ$Ø˜Ÿ™Ñ&Ø×$Ñ$ QÔ'à×)Ñ)¨(Õ3ð ,ñ Ø×$Ñ$ XÓ.Ð.äQZÐ[cÔQdÔeÑQdÁXÀQÈ A¨¡N�%—.’.¸¸Ñ@ÐQdˆÑeØ�‰˜xÌgÐW]ÑN^Ó)_ÑN^È¨$×*;Ñ*;¼DÀ»GÕ*DÐN^Ñ)_Ó`Ð`ùó fùÚ)_s   Á3CÂ)!C
Nr[   r    r   r   r~   r~   ¾   s   „ ñfò#ó
ar   r~   c                 óº   — t        |«      D ��cg c],  \  }}|s#|j                  r|j                  st        |«      r|‘Œ. }}}|rt	        t
        || «      S y c c}}w r   )rq   r^   rr   rb   r   r~   )r€   rt   ru   rN   ra   rO   s         r   Úmaybe_create_ambiguous_expanderrŽ   ß   s`   € Ü!*¨9Ô!5ô iÑ!5‘v�q˜#Ù#¨c¯kªk¸c¿nºnÔSaÐbeÔSfò Ð!5€Iñ iáÜÔ(¨)°ZÓ@Ð@ð ùóis   �1Ac                   ó   — e Zd ZdZd„ Zd„ Zy)ÚAmbiguousIntermediateExpanderaq  
    Propagate ambiguous intermediate nodes and their derivations up to the
    current rule.

    In general, converts

    rule
      _iambig
        _inter
          someChildren1
          ...
        _inter
          someChildren2
          ...
      someChildren3
      ...

    to

    _ambig
      rule
        someChildren1
        ...
        someChildren3
        ...
      rule
        someChildren2
        ...
        someChildren3
        ...
      rule
        childrenFromNestedIambigs
        ...
        someChildren3
        ...
      ...

    propagating up any nested '_iambig' nodes along the way.
    c                 ó    — || _         || _        y r   )r   r€   )r   r€   r   s      r   r   z&AmbiguousIntermediateExpander.__init__  rY   r   c                 óÐ   ‡ ‡‡— d„ Šˆˆˆ fd„Š ‰|«      }|r:|D �cg c]  }‰ j                  |j                  «      ‘Œ }}‰ j                  d|«      S ‰ j                  |«      S c c}w )Nc                 ó<   — t        | d«      xr | j                  dk(  S )Nrƒ   Ú_iambigr…   )rŠ   s    r   Ú_is_iambig_treez?AmbiguousIntermediateExpander.__call__.<locals>._is_iambig_tree  s   € Ü˜5 &Ó)ÒE¨e¯j©j¸IÑ.EÐEr   c                 ó.  •— | r’ ‰| d   «      r†| d   }g }|j                   D ]n  } ‰|j                   «      }|r%|D ]  }|xj                   | dd z  c_         Œ ||z  }Œ<‰	j                  d|j                   | dd z   «      }|j                  |«       Œp |S yy)a  
            Recursively flatten the derivations of the parent of an '_iambig'
            node. Returns a list of '_inter' nodes guaranteed not
            to contain any nested '_iambig' nodes, or None if children does
            not contain an '_iambig' node.
            r   r   NÚ_inter)r   r€   rK   )
r   Úiambig_nodeÚresultÚ
grandchildÚ	collapsedrŠ   Únew_treeÚ_collapse_iambigr•   r   s
          €€€r   r�   z@AmbiguousIntermediateExpander.__call__.<locals>._collapse_iambig  s«   ø€ ñ ™O¨H°Q©KÔ8Ø& q™k�Ø�Ø"-×"6Ô"6�JÙ 0°×1DÑ1DÓ E�IÙ Û%.˜EØ!ŸNšN¨h°q°r¨lÑ:žNð &/à )Ñ+™à#'§?¡?°8¸Z×=PÑ=PÐS[Ð\]Ð\^ÐS_Ñ=_Ó#`˜ØŸ™ hÕ/ð #7ð �ð 9ˆxr   r„   )r   r   r€   )r   r   r›   r?   Úprocessed_nodesr�   r•   s   `    @@r   r   z&AmbiguousIntermediateExpander.__call__  sh   ú€ ò	Fö	ñ0 % XÓ.ˆ	ÙÙFOÓPÁiÀ˜t×0Ñ0°·±Õ<ÀiˆOÐPØ—?‘? 8¨_Ó=Ð=à× Ñ  Ó*Ð*ùò Qs   œ"A#Nr[   r    r   r   r�   r�   æ   s   „ ñ&òP%ó!+r   r�   c                 ó.   ‡ — t        ‰ «      ˆ fd„«       }|S )Nc                 ó@   •— t        ‰j                  | «      } ‰|«      S r   )r   r   )r   ÚtreeÚfuncs     €r   rŒ   zinplace_transformer.<locals>.f9  s   ø€ ô �D—M‘M 8Ó,ˆÙ�D‹zÐr   )r   )r¢   rŒ   s   ` r   Úinplace_transformerr£   8  s    ø€ Ü
ˆ4ƒ[óó ðð €Hr   c                 ól   ‡ ‡‡— ‰t         u s‰t        u rt        d«      ‚t        ‰ «      ˆ ˆˆfd„«       }|S )NziMeta args not supported for internal transformer; use YourTransformer().transform(parser.parse()) insteadc                 ó   •—  ‰‰‰| d «      S r   r    )r   r¢   r_   Úwrappers    €€€r   rŒ   zapply_visit_wrapper.<locals>.fE  s   ø€ á�t˜T 8¨TÓ2Ð2r   )r
   r   ÚNotImplementedErrorr   )r¢   r_   r¦   rŒ   s   ``` r   Úapply_visit_wrapperr¨   A  sC   ú€ Ø”+Ñ Ô,>Ñ!>Ü!ð  #Nó  Oð  	Oä
ˆ4ƒ[õ3ó ð3à€Hr   c                   ó"   — e Zd Zdd„Zd„ Zdd„Zy)ÚParseTreeBuilderc                 óz   — || _         || _        || _        || _        t	        | j                  |«      «      | _        y r   )r€   Úpropagate_positionsrv   Úmaybe_placeholdersr‰   Ú_init_buildersÚrule_builders)r   Úrulesr€   r¬   rv   r­   s         r   r   zParseTreeBuilder.__init__L  s8   € Ø$ˆŒØ#6ˆÔ Ø"ˆŒØ"4ˆÔä! $×"5Ñ"5°eÓ"<Ó=ˆÕr   c              #   ó  K  — t        | j                  «      }|D ]è  }|j                  }|j                  }|j                  }t        t        d |xr |j                   xr t        t        |j                  || j                  | j                  r|j                  nd «      || j                  xr! t        | j                  |j                  |«      | j                  xr t!        t"        | j                  «      g«      «      }||f–— Œê y ­wr   )rC   r¬   Úoptionsru   Úexpand1r‰   ÚfilterÚaliasr   r|   rt   rv   r­   ry   rŽ   r€   r   r�   )r   r°   r¬   Úruler²   ru   Úexpand_single_childÚwrapper_chains           r   r®   zParseTreeBuilder._init_buildersT  sí   è ø€ Ü6°t×7OÑ7OÓPÐãˆDØ—l‘lˆGØ%×5Ñ5ˆOØ")§/¡/Ðä ¤¨Ø$Ò7¨T¯Z©Z¨ÒNÔ=NÜ)¨$¯.©.¸/È4Ï>É>Ðtx÷  uLò  uLÐ[b×[pÒ[pð  RVó  WØ#Ø—‘ÒtÔ#BÀ4Ç?Á?ÐTX×TbÑTbÐdsÓ#tØ—‘ÒZ¤7Ô+HÈ$Ï/É/Ó#Zð/ó "ó ˆMð ˜Ð%Ó%ñ ùs   ‚DDNc                 óü  ‡
— i }t        |dd «      Š
‰
rˆ
fd„}n| j                  }| j                  D ]­  \  }}|j                  xs. |j                  j
                  xs |j                  j                  }	 t        ||«      }t        |dd «      }|�t        |||«      }nt        |t        «      rt        |«      }|D ]
  }	 |	|«      }Œ ||v rt        d|›d�«      ‚|||<   Œ¯ |S # t        $ r t        ||«      }Y ŒBw xY w)NÚ__default__c                 ó   •—  ‰| |d «      S r   r    )rƒ   r   Údefault_handlers     €r   Údefault_callbackz:ParseTreeBuilder.create_callback.<locals>.default_callbackk  s   ø€ Ù& t¨X°tÓ<Ð<r   Úvisit_wrapperzRule 'z' already exists)r2   r€   r¯   rµ   r²   Útemplate_sourceÚoriginr_   r¨   r.   r	   r£   ÚAttributeErrorr   r   )r   ÚtransformerÚ	callbacksr½   r¶   r¸   Úuser_callback_namerŒ   r¦   Úwr¼   s             @r   Úcreate_callbackz ParseTreeBuilder.create_callbackf  s  ø€ Øˆ	ä! +¨}¸dÓCˆÙõ=ð  $Ÿ™Ðà#'×#5Ô#5ÑˆD�-à!%§¡Ò!_¨t¯|©|×/KÑ/KÒ!_ÈtÏ{É{×O_ÑO_ÐðBÜ˜KÐ);Ó<�Ü! ! _°dÓ;�ØÐ&Ü+¨AÐ/AÀ7ÓK‘AÜ Ô-@ÔAÜ+¨AÓ.�Aó #�Ù�a“D‘ð #ð �yÑ Ý"ÂÐ#GÓHÐHàˆI�dŠOð' $6ð* Ðøô "ò BÜÐ,Ð.@ÓA’ðBús   Á4AC#Ã#C;Ã:C;)FFFr   )r   r   r   r   r®   rÆ   r    r   r   rª   rª   K  s   „ ó>ò&ô$r   rª   N)"rU   Útypingr   Ú
exceptionsr   r   Úlexerr   r¡   r   Úvisitorsr	   r
   r   Ú	functoolsr   r   Ú	itertoolsr   r   r"   rC   rE   rR   rW   rb   Úboolr|   r~   rŽ   r�   r£   r¨   rª   r    r   r   Ú<module>rÎ      s­   ðÙ Rå ç 8Ý Ý Ý )ß 5÷ %Ý ÷/ñ /÷5)ñ 5)ònT÷+ñ +ô.+�kô +ô,+ [ô +ò&8ð]ÐUYÐZ^ÑU_ó ]÷8añ aòBA÷N+ñ N+òdò÷:ò :r   