
    Ii+                        S SK r S SKrS SKrS SKJr  S SKJr  S SKrS SKrS SK	r	S SK
Jr  \	R                  " S5      r\R                  \	R                  " 5       5        \R!                  \	R"                  5        \R$                  S    S:  a	  S SKJrJr  OS SKJrJr   " S	 S
\5      r\R$                  SS S:  r\" 5       rS-S jrS r " S S\5      r " S S\5      r \rS SK"r"S SKJ#r#J$r$  S SK%J&r&  \'" S5      r( \"RR                  r*S r, S SK-r-S SK/r/S SK0r0\Rb                  " S5      r2S r3Sr4\4S-   r5S r6S r7S r8S r9 S SK%J:r:   " S  S!\5      r;S" r< S SK=r= " S# S$5      r>S% r? " S& S'\@5      rAS( rBS) rCS* rDS+ rES, rFg! \  a    \!r Nf = f! \+ a    \'r* Nf = f! \. a    Sr- Nf = f! \. a    \&S 5       r: Nuf = f! \. a    Sr= Npf = f).    N)reduce)deque)openlark   )ABCabstractmethod)ABCMetar	   c                       \ rS rSrSr\rSrg)r       N)__name__
__module____qualname____firstlineno__	__slots__r
   __metclass____static_attributes__r       0/venv/lib/python3.13/site-packages/lark/utils.pyr   r      s    	r   r   )      c                     0 nU  H<  nUb  U" U5      OUnUb  U" U5      OUnXS;   a  X5   R                  U5        M7  U/X5'   M>     U$ Nappend)seqkeyvalueditemkvs          r   classifyr$      sR    
A/CI!-E$KD6DKKN3AD  Hr   c           
      `   [        U [        5      (       a[  SU ;   a  XS      nUR                  X5      $ SU ;   a  X S      $ U R                  5        VVs0 s H  u  pEU[	        XQU5      _M     snn$ [        U [
        5      (       a  U  Vs/ s H  n[	        XQU5      PM     sn$ U $ s  snnf s  snf )N__type__@)
isinstancedictdeserializeitems_deserializelist)data	namespacememoclass_r   r   s         r   r,   r,   +   s    $J/0F%%d11D[S	?"KO::<X<ZSL488<XX	D$		BFG$Ut4$GGK YGs   B%
B+c                   8    \ rS rSrSrS rSS jr\S 5       rSr	g)		Serialize8   aX  Safe-ish serialization interface that doesn't rely on Pickle

Attributes:
    __serialize_fields__ (List[str]): Fields (aka attributes) to serialize.
    __serialize_namespace__ (list): List of classes that deserialization is allowed to instantiate.
                                    Should include all field types that aren't builtin types.
c                 Z    [        U5      nU R                  U5      UR                  5       4$ r   )SerializeMemoizer	serialize)selftypes_to_memoizer0   s      r   memo_serializeSerialize.memo_serializeA   s(     !12~~d#T^^%555r   Nc           
      Z   U(       a3  UR                  U 5      (       a  SUR                  R                  U 5      0$ [        U S5      nU Vs0 s H  o3[	        [        X5      U5      _M     nn[        U 5      R                  US'   [        U S5      (       a  U R	                  XA5        U$ s  snf )Nr'   __serialize_fields__r&   
_serialize)in_typesmemoizedgetgetattrr>   typer   hasattr)r8   r0   fieldsfress        r   r7   Serialize.serializeE   s    DMM$''**401156>DEf*WT-t44fEt*--J4&&OOC&
	 Fs   B(c           
      x   [        U S/ 5      nU Vs0 s H  oDR                  U_M     nn[        U S5      nSU;   a  X!S      $ U R                  U 5      nU H  n [        Xg[	        X   X25      5        M     [        US5      (       a  UR	                  5         U$ s  snf ! [
         a  n[        SX5      eS nAff = f)N__serialize_namespace__r=   r'   zCannot find key for classr,   )rB   r   __new__setattrr,   KeyErrorrD   )	clsr.   r0   r/   crE   instrF   es	            r   r*   Serialize.deserializeP   s    C!:B?	+459aZZ\9	545$;S	?"{{3ADdgy!GH  4((# 6  D:CCCDs   BB
B9(B44B9r   r   )
r   r   r   r   __doc__r:   r7   classmethodr*   r   r   r   r   r3   r3   8   s%    6	  r   r3   c                   >    \ rS rSrSrSrS rS rS r\	S 5       r
Srg	)
r6   g   z<A version of serialize that memoizes objects to reduce space)r@   c                 B    [        U5      U l        [        5       U l        g r   )tupler9   
Enumeratorr@   )r8   r9   s     r   __init__SerializeMemoizer.__init__l   s     %&6 7"r   c                 ,    [        XR                  5      $ r   )r(   r9   )r8   r   s     r   r?   SerializeMemoizer.in_typesp   s    %!6!677r   c                 J    [        U R                  R                  5       S 5      $ r   )r>   r@   reversedr8   s    r   r7   SerializeMemoizer.serializes   s    $--002D99r   c                     [        XU5      $ r   )r,   )rN   r.   r/   r0   s       r   r*   SerializeMemoizer.deserializev   s    DT22r   )r@   r9   N)r   r   r   r   rS   r=   rZ   r?   r7   rT   r*   r   r   r   r   r6   r6   g   s.    B&%8: 3 3r   r6   )wrapspartial)contextmanager c                 (  ^  [        T [        R                  5      (       a  [        T 5      " U" T S5      5      $ [        T [        [
        [        R                  45      (       a  [        T 5      " U" T S5      5      $ [        T [        R                  5      (       a"  [        T 5      " U" T R                  S5      5      $ [        T [        5      (       a&  [        T R                  5      " U" U 4S jS5      5      $ U" T R                  R                  S5      $ )NTFc                     > T" U SS  0 UD6$ )N   r   )argskwrF   s     r   <lambda>!smart_decorator.<locals>.<lambda>   s    !T!"XBTQSBTr   )r(   typesFunctionTyperd   	classtyperC   BuiltinFunctionType
MethodType__func__re   func__call__)rF   create_decorators   ` r   smart_decoratorrx      s    !U''((Qx(D122	A	4)B)BC	D	DQx(E233	Au''	(	(Qx(T:;;	Aw		QVV}-.TVZ[\\  

 3 3T::r   z\\p{[A-Za-z_]+}c                 2   [         (       a  [        R                  " [        SU 5      nO.[        R                  " [        U 5      (       a  [        SU 5      eU n [        R                  " U5      R                  5        Vs/ s H  n[        U5      PM     sn$ s  snf ! [        R                   ag    [         (       d  [        U 5      e[         R                  " U5      nUR                  S5      c  S[        R                  4s $ S[        R                  4s $ f = f)NAzD`regex` module must be installed in order to use Unicode categories.rg   rj   r   )regexresubcateg_patternsearchImportError	sre_parseparsegetwidthintsre_constantserror
ValueErrorcompilematch	MAXREPEAT)exprregexp_finalxrO   s       r   get_regexp_widthr      s    u vvmS$799]D))dfjkk2 ) = F F HI H1A HIII 
2uT"" l+Awwr{"-1111-1111
2s+   &B >BB B A$DDD)LuLlLtLmLoMnMcPc)NdNlc                    ^ [        U 5      S:w  a  [        U4S jU  5       5      $ U S:H  =(       d    [        R                  " U 5      T;   $ )Nrj   c              3   <   >#    U  H  n[        UT5      v   M     g 7fr   )_test_unicode_category).0char
categoriess     r   	<genexpr>)_test_unicode_category.<locals>.<genexpr>   s     J)$
;;s   _)lenallunicodedatacategory)sr   s    `r   r   r      s>    
1v{JJJJ8<{++A.*<<r   c                 "    [        U [        5      $ )z
Checks if all characters in `s` are alphanumeric characters (Unicode standard, so diacritics, indian vowels, non-latin
numbers, etc. all pass). Synonymous with a Python `ID_CONTINUE` identifier. See PEP 3131 for details.
)r   _ID_CONTINUEr   s    r   is_id_continuer      s    
 "!\22r   c                 "    [        U [        5      $ )z
Checks if all characters in `s` are alphabetic characters (Unicode standard, so diacritics, indian vowels, non-latin
numbers, etc. all pass). Synonymous with a Python `ID_START` identifier. See PEP 3131 for details.
)r   	_ID_STARTr   s    r   is_id_startr      s    
 "!Y//r   c                     [        5       nU  Vs/ s H$  o"U;   a  M
  UR                  U5      (       a  M"  UPM&     sn$ s  snf )zGiven a list (l) will removing duplicates from the list,
preserving the original order of the list. Assumes that
the list entries are hashable.)setadd)ldedupr   s      r   
dedup_listr      s3     EE=q!eAuyy|Aq===s   	===)suppressc               '   .   #     Sv   g! U  a     gf = f7f)zyCatch and dismiss the provided exception

>>> x = 'hello'
>>> with suppress(IndexError):
...     x = x[10]
>>> x
'hello'
Nr   )excss    r   r   r      s     	 		s   	 c                   ,    \ rS rSrS rS rS rS rSrg)rY      c                     0 U l         g r   enumsr`   s    r   rZ   Enumerator.__init__   s	    
r   c                     XR                   ;  a"  [        U R                   5      U R                   U'   U R                   U   $ r   )r   r   )r8   r!   s     r   rA   Enumerator.get   s1    zz!"4::DJJtzz$r   c                 ,    [        U R                  5      $ r   )r   r   r`   s    r   __len__Enumerator.__len__   s    4::r   c                     U R                   R                  5        VVs0 s H  u  pX!_M	     nnn[        U5      [        U R                   5      :X  d   eU$ s  snnf r   )r   r+   r   )r8   r"   r#   rs       r   r_   Enumerator.reversed   sM    "jj..010daQT011vTZZ((( 2s   Ar   N)	r   r   r   r   rZ   rA   r   r_   r   r   r   r   rY   rY      s     
r   rY   c                     U (       d  / /$ [        S U  5       5      (       d   U 5       eU S    Vs/ s H  o/PM     nn[        S U SS U5      $ s  snf )a{  
Accepts a list of alternatives, and enumerates all their possible concatinations.

Examples:
    >>> combine_alternatives([range(2), [4,5]])
    [[0, 4], [0, 5], [1, 4], [1, 5]]

    >>> combine_alternatives(["abc", "xy", '$'])
    [['a', 'x', '$'], ['a', 'y', '$'], ['b', 'x', '$'], ['b', 'y', '$'], ['c', 'x', '$'], ['c', 'y', '$']]

    >>> combine_alternatives([])
    [[]]
c              3   $   #    U  H  ov   M     g 7fr   r   )r   r   s     r   r   'combine_alternatives.<locals>.<genexpr>  s      %Qq%s   r   c                 P    U  VVs/ s H  o!  H  o2U/-   PM
     M     snn$ s  snnf r   r   )abijs       r   rm   &combine_alternatives.<locals>.<lambda>  s"    a;aA!uua;;s   "rj   N)r   r   )listsr   inits      r   combine_alternativesr     s]     t %   '%' q"ACD";U12YMM #s   Ac                   `    \ rS rSr\" \R                  R                  5      r\SS j5       rSr	g)FSi!  c                 p    [         (       a   SU;   a  [         R                  " U 4USS.UD6$ [        X40 UD6$ )NwT)mode	overwrite)atomicwritesatomic_writer   )namer   kwargss      r   r   FS.open$  s;    <C4K,,TWWPVWW-f--r   r   N)r   )
r   r   r   r   staticmethodospathexistsr   r   r   r   r   r   r   !  s&    "''..)F. .r   r   c                      U R                  5       $ ! [         a,     U R                  S5         g! [        [        4 a      gf = ff = f)z&str.isascii only exists in python3.7+ asciiTF)isasciiAttributeErrorencodeUnicodeDecodeErrorUnicodeEncodeErrorr   s    r   r   r   -  sN    yy{ 	HHW"$67 			s$    
A0A AAAc                       \ rS rSrS rSrg)fzseti9  c                 F    SSR                  [        [        U 5      5      -  $ )Nz{%s}z, )joinmapreprr`   s    r   __repr__fzset.__repr__:  s    		#dD/222r   r   N)r   r   r   r   r   r   r   r   r   r   r   9  s    3r   r   c                     / n/ nU  H4  nU" U5      (       a  UR                  U5        M#  UR                  U5        M6     X#4$ r   r   )r   pred
true_elemsfalse_elemselems        r   classify_boolr   >  sF    JK::d#t$	  ""r   c              #     #    [        [        U 5      5      n[        U5      nU(       aV  UR                  5       nUv   U" U5       H,  nXS;  d  M
  UR	                  U5        UR                  U5        M.     U(       a  MU  g g 7fr   )r   r-   r   popleftr   r   )initialexpandopen_qvisitednode	next_nodes         r   bfsr   K  sc     4=!F&kG
~~
I'I&i( & &s   A	B -B >B c              #      #    [        [        U 5      5      nU(       a(  UR                  5       nUv   X!" U5      -  nU(       a  M'  gg7f)zVbfs, but doesn't keep track of visited (aka seen), because there can be no repetitionsN)r   r-   r   )r   r   r   r   s       r   bfs_all_uniquer   V  s<     4=!F
~~
&, &s   AAAc           	         [        U [        5      (       a  U R                  U5      $ [        U [        5      (       a  U  Vs/ s H  n[	        X!5      PM     sn$ [        U [
        5      (       a  [        U 5      $ [        U [        5      (       a/  U R                  5        VVs0 s H  u  p2U[	        X!5      _M     snn$ U $ s  snf s  snnf r   )r(   r3   r7   r-   r>   	frozensetr)   r+   )r   r0   r   r   s       r   r>   r>   _  s    %##t$$	E4	 	 38954
4&599	E9	%	%E{	E4	 	 <AKKMJMysJt**MJJL : Ks    B> Cc                     U S:  d   eUS:  d   eX::  a  U S4/$ [        USS5       H*  n[        X5      u  p4X$-   U::  d  M  [        X15      X$4/-   s  $     SU -  5       e)z
Splits n up into smaller factors and summands <= max_factor.
Returns a list of [(a, b), ...]
so that the following code returns n:

n = 1
for a, b in values:
    n = n * a + b

Currently, we also keep a + b <= max_factor, but that might change
r   r   rj   zFailed to factorize %s)rangedivmodsmall_factors)n
max_factorr   r   r   s        r   r  r  n  sy     6M6>>Ax:q"%a|5J /A6(:: & /*Q..5r   )NN)Ghashlibr   r   	functoolsr   collectionsr   sysr|   loggingior   	getLoggerlogger
addHandlerStreamHandlersetLevelCRITICALversion_infoabcr   r	   r
   objectPy36NO_VALUEr$   r,   r3   r6   
basestringSTRING_TYPE	NameErrorstrro   rd   re   
contextlibrf   rC   Str	ClassTyperq   r   rx   r{   r   r   r   r   r~   r   r   r   r   r   r   r   r   rY   r   r   r   r   r  r   r   r   r   r>   r  r   r   r   <module>r!     s     	     			6	"   ''') *    !Aq''+f 
 	!&8	
, ,^3	 3(K
  $ %
3iI
;$  

-.26 >	=(=
30>#$ &N*. .	3I 3

#	)
/c  K  I0  EF   v  LsZ   F <F F F, G  FFFFF)(F),F=<F= G
G