
    h,              	          % S SK r S SKrS SKJ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JrJrJrJrJr  S SKrS SKrS SKr\R.                  " S5      r\R2                  \S'   \R7                  \R8                  " 5       5        \R;                  \R<                  5        \" 5       r \" S5      r!S9S\S	\
\   S
\
\   S\4S jjr"S\S\\#\4   S\S\4S jr$\" SSS9r% " S S5      r& " S S\&5      r' S SK(r(Sr)\RV                  S:  a  S SK,J-r.  S SK/J0r1  OS SK.r.S SK1r1\Rd                  " S5      r3S\#S\\\4\44   \	\4   4   4S jr5Sr6\6S-   r7S\#S \\#   S\84S! jr9S\#S\84S" jr:S\#S\84S# jr;S$\\!   S\	\!   4S% jr< " S& S'\&5      r=S( r> S SK?r?Sr@ " S) S*5      rA " S+ S,\B5      rCS\S-\S\4S. jrDS/\S0\S\4S1 jrES2 rFS
\S\
\'   S\4S3 jrGS4\4S5\4S\	\\4\44      4S6 jrH " S7 S8\\!   5      rIg! \* a    Sr) GNf = f! \* a    Sr@ Nwf = f):    N)product)deque)CallableIteratorListOptionalTupleTypeTypeVarUnionDictAnySequenceIterableAbstractSetlarkloggerTseqkeyvaluereturnc                     0 nU  H1  nUb  U" U5      OUnUb  U" U5      OUn X5   R                  U5        M3     U$ ! [         a	    U/X5'    MI  f = fN)appendKeyError)r   r   r   ditemkvs          ]C:\Users\julio\OneDrive\Documentos\Trabajo\Ideas Frescas\venv\Lib\site-packages\lark/utils.pyclassifyr"      sc    A/CI!-E$KD	DKKN	  H  	3AD	s   <AAdata	namespacememoc           
      `   [        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)r#   r$   r%   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+_T	Serialize)boundc            	           \ rS rSrSrS\S\4S jrSS\\	\4   4S jjr
\S\\   S	\\	\4   S
\\\4   S\4S j5       rSrg)r1   2   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.
types_to_memoizer   c                 Z    [        U5      nU R                  U5      UR                  5       4$ r   )SerializeMemoizer	serialize)selfr5   r%   s      r!   memo_serializeSerialize.memo_serialize;   s(     !12~~d#T^^%555    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?   type__name__hasattr)r9   r%   fieldsfress        r!   r8   Serialize.serialize?   s    DMM$''**401156>DEf*WT-t44fEt*--J4&&OOC&
	 Fs   B(clsr#   r%   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-   )rC   rE   __new__setattrr-   r   rF   )	rK   r#   r%   r$   crG   instrH   es	            r!   r+   Serialize.deserializeJ   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   )rE   
__module____qualname____firstlineno____doc__r   r   r:   r   strr8   classmethodr
   r0   intr+   __static_attributes__rT   r<   r!   r1   r1   2   ss    6t 6 6	S#X 	 b c3h tCH~ RT  r<   c                       \ rS rSrSrSrS\SS4S jrS\S\	4S	 jr
S\\\4   4S
 jr\S\\\4   S\\\4   S\\\4   S\\\4   4S j5       rSrg)r7   a   z<A version of serialize that memoizes objects to reduce space)rA   r5   r   Nc                 B    [        U5      U l        [        5       U l        g r   )tupler5   
EnumeratorrA   )r9   r5   s     r!   __init__SerializeMemoizer.__init__f   s     %&6 7"r<   r   c                 ,    [        XR                  5      $ r   )r)   r5   )r9   r   s     r!   r@   SerializeMemoizer.in_typesj   s    %!6!677r<   c                 J    [        U R                  R                  5       S 5      $ r   )r?   rA   reversedr9   s    r!   r8   SerializeMemoizer.serializem   s    $--002D99r<   r#   r$   r%   c                     [        XU5      $ r   )r-   )rK   r#   r$   r%   s       r!   r+   SerializeMemoizer.deserializep   s    DT22r<   )rA   r5   )rE   rU   rV   rW   rX   r>   r   rb   r1   boolr@   r   r[   r   r8   rZ   rY   r+   r\   rT   r<   r!   r7   r7   a   s    B&% %$ %8i 8D 8:4S> : 3tCH~ 3$sCx. 3PTUXZ]U]P^ 3cghkmphpcq 3 3r<   r7   TF)      z\\p{[A-Za-z_]+}exprc                 \   [         (       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                   a|    [         (       d  [        U 5      e[        R                  " U5      n[        [        S[        R                   5      nUR#                  S5      c  S[        U5      4s $ S[        U5      4s $ f = f)NAzD`regex` module must be installed in order to use Unicode categories.MAXWIDTH    r   )
_has_regexresubcateg_patternsearchImportError	sre_parseparsegetwidthr[   sre_constantserror
ValueErrorregexcompilerC   	MAXREPEATmatch)ro   regexp_finalxrP   rr   s        r!   get_regexp_widthr      s    z vvmS$799]D))dfjkk( ) = F F HI H1A HIII (zT"" l+A y*m6M6MNHwwr{"#h-''#h-''(s+   &B >BB B A>D+D+*D+)LuLlLtLmLoMnMcPc)NdNls
categoriesc                    ^ [        U 5      S:w  a  [        U4S jU  5       5      $ U S:H  =(       d    [        R                  " U 5      T;   $ )Nrt   c              3   <   >#    U  H  n[        UT5      v   M     g 7fr   )_test_unicode_category).0charr   s     r!   	<genexpr>)_test_unicode_category.<locals>.<genexpr>   s     J)$
;;s   _)lenallunicodedatacategory)r   r   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<   lc                 >    [        [        R                  U 5      5      $ )zGiven a list (l) will removing duplicates from the list,
preserving the original order of the list. Assumes that
the list entries are hashable.)r.   r*   fromkeys)r   s    r!   
dedup_listr      s     a !!r<   c                   J    \ rS rSrS	S jrS\4S jrS rS\\\	4   4S jr
Srg)
ra      r   Nc                     0 U l         g r   enumsrh   s    r!   rb   Enumerator.__init__   s	    %'
r<   c                     XR                   ;  a"  [        U R                   5      U R                   U'   U R                   U   $ r   )r   r   r9   r   s     r!   rB   Enumerator.get   s1    zz!"4::DJJtzz$r<   c                 ,    [        U R                  5      $ r   )r   r   rh   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   )r9   r   r    rs       r!   rg   Enumerator.reversed   sM    "jj..010daQT011vTZZ((( 2s   Ar   )r   N)rE   rU   rV   rW   rb   r[   rB   r   r   r   rg   r\   rT   r<   r!   ra   ra      s,    ( 3  
$sCx. r<   ra   c                 t    U (       d  / /$ [        S U  5       5      (       d   U 5       e[        [        U 6 5      $ )a{  
Accepts a list of alternatives, and enumerates all their possible concatenations.

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   rT   )r   r   s     r!   r   'combine_alternatives.<locals>.<genexpr>   s      %Qq%s   )r   r.   r   )listss    r!   combine_alternativesr      s9     t %   '%'   r<   c                   `    \ rS rSr\" \R                  R                  5      r\SS j5       rSr	g)FS   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)_has_atomicwritesatomicwritesatomic_writeopen)namer   kwargss      r!   r   FS.open   s<    ,,TWWPVWW-f--r<   rT   N)r   )
rE   rU   rV   rW   staticmethodospathexistsr   r\   rT   r<   r!   r   r      s&    "''..)F. .r<   r   c                       \ rS rSrS rSrg)fzset   c                 F    SSR                  [        [        U 5      5      -  $ )Nz{%s}, )joinmapreprrh   s    r!   __repr__fzset.__repr__   s    		#dD/222r<   rT   N)rE   rU   rV   rW   r   r\   rT   r<   r!   r   r      s    3r<   r   predc                     / nU  Vs/ s H)  o1" U5      (       d  UR                  U5      (       d  M'  UPM+     nnXB4$ s  snf r   )r   )r   r   false_elemselem
true_elemss        r!   classify_boolr      s?    K#&Q34$t**8J8J48P$3JQ"" Rs   &<<initialexpandc              #     #    [        [        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.   setpopleftaddr   )r   r   open_qvisitednode	next_nodes         r!   bfsr     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     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)   r1   r8   r.   r?   	frozensetr*   r,   )r   r%   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n
max_factorc                     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      rt   zFailed to factorize %s)rangedivmodsmall_factors)r   r   ar   bs        r!   r   r   '  sy     6M6>>Ax:q"%a|5J /A6(:: & /*Q..5r<   c                       \ rS rSrSrSS\\   4S jjrS\S\	4S jr
S\4S jrS\\   4S	 jrS\4S
 jrS rS\4S jrS rSrg)
OrderedSeti?  zcA minimal OrderedSet implementation, using a dictionary.

(relies on the dictionary being ordered)
r,   c                 8    [         R                  U5      U l        g r   )r*   r   r   )r9   r,   s     r!   rb   OrderedSet.__init__D  s    u%r<   r   r   c                     XR                   ;   $ r   r   r   s     r!   __contains__OrderedSet.__contains__G  s    vv~r<   c                 "    S U R                   U'   g r   r   r   s     r!   r   OrderedSet.addJ  s    tr<   c                 ,    [        U R                  5      $ r   )iterr   rh   s    r!   __iter__OrderedSet.__iter__M      DFF|r<   c                     U R                   U	 g r   r   r   s     r!   removeOrderedSet.removeP  s    FF4Lr<   c                 ,    [        U R                  5      $ r   )rl   r   rh   s    r!   __bool__OrderedSet.__bool__S  r  r<   c                 ,    [        U R                  5      $ r   )r   r   rh   s    r!   r   OrderedSet.__len__V  s    466{r<   c                 r    [        U 5      R                   SSR                  [        [        U 5      5       S3$ )N(r   ))rD   rE   r   r   r   rh   s    r!   r   OrderedSet.__repr__Y  s0    t*%%&a		#d4.(A'B!DDr<   r   N)rT   )rE   rU   rV   rW   rX   r   r   rb   r   rl   r   r   r   r  r
  r  r[   r   r   r\   rT   r<   r!   r   r   ?  si    &hqk &   (1+ 1  Er<   r   )NN)Jr   r   	itertoolsr   collectionsr   typingr   r   r   r   r	   r
   r   r   r   r   r   r   r   sysrv   logging	getLoggerr   Logger__annotations__
addHandlerStreamHandlersetLevelCRITICALobjectNO_VALUEr   r"   rY   r-   r0   r1   r7   r   ru   rz   version_info
re._parser_parserr{   re._constants
_constantsr~   r   rx   r[   r   r   r   rl   r   r   r   r   ra   r   r   r   r   r   r   r   r   r   r?   r   r   rT   r<   r!   <module>r(     s    	   ~ ~ ~ ~   **62 2   ''') *    ! 8CL	( 	(!3 	8HCU 	ae 	
s 
tCH~ 
T 
c 
 T%, ,^3	 3(J w")

-.(3 (5sCx$s))C#D (@ >	=(=c =x} = =
3c 3d 303 04 0"(1+ "$q' " &!&. .3I 3
#x #x #C #	) 	)8 	) 	)
c 
*;!< 
 
/S /c /d5c?.C /0EQ EO  Jf  s$   /G+ G: +G76G7:HH