
    *              	           % 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  S SKrS SKrS SKr\R,                  " S5      r\R0                  \S'   \R5                  \R6                  " 5       5        \R9                  \R:                  5        \" 5       r\" S5      r S8S\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(\RT                  S:  a  S SK+J,r-  S SK.J/r0  OS SK-r-S SK0r0\Rb                  " S5      r2S\"S\\\3\34   \	\3   4   4S jr4Sr5\5S-   r6S\"S \\"   S\74S! jr8S\"S\74S" jr9S\"S\74S# jr:S$\	\    S\	\    4S% jr; " S& S'\%5      r<S( r= S SK>r>Sr? " S) S*5      r@S\"S\74S+ jrA " S, S-\B5      rCS\S.\S\4S/ jrDS0\S1\S\4S2 jrES3 rFS
\S\
\&   S\4S4 jrGS5\3S6\3S\	\\3\34      4S7 jrHg! \) a    Sr( Nf = f! \) a    Sr? Nqf = f)9    N)product)deque)CallableIteratorListOptionalTupleTypeTypeVarUnionDictAnySequenceIterable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          lib/third_party/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)r0   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)selfr4   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)r8   r$   fieldsfress        r    r7   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,   )rB   rD   __new__setattrr,   r   rE   )	rJ   r"   r$   r#   crF   instrG   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   )rD   
__module____qualname____firstlineno____doc__r   r   r9   r   strr7   classmethodr
   r/   intr*   __static_attributes__rS   r;   r    r0   r0   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)r6   a   z<A version of serialize that memoizes objects to reduce space)r@   r4   r   Nc                 B    [        U5      U l        [        5       U l        g r   )tupler4   
Enumeratorr@   )r8   r4   s     r    __init__SerializeMemoizer.__init__f   s     %&6 7"r;   r   c                 ,    [        XR                  5      $ r   )r(   r4   )r8   r   s     r    r?   SerializeMemoizer.in_typesj   s    %!6!677r;   c                 J    [        U R                  R                  5       S 5      $ r   )r>   r@   reversedr8   s    r    r7   SerializeMemoizer.serializem   s    $--002D99r;   r"   r#   r$   c                     [        XU5      $ r   )r,   )rJ   r"   r#   r$   s       r    r*   SerializeMemoizer.deserializep   s    DT22r;   )r@   r4   )rD   rT   rU   rV   rW   r=   r   ra   r0   boolr?   r   rZ   r   r7   rY   rX   r*   r[   rS   r;   r    r6   r6   a   s    B&% %$ %8i 8D 8:4S> : 3tCH~ 3$sCx. 3PTUXZ]U]P^ 3cghkmphpcq 3 3r;   r6   TF)      z\\p{[A-Za-z_]+}exprc                 V   [         (       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                   ay    [         (       d  [        U 5      e[        R                  " U5      nUR                  S5      c  S[        [        R                   5      4s $ S[        [        R                   5      4s $ f = f)NAzD`regex` module must be installed in order to use Unicode categories.    r   )
_has_regexresubcateg_patternsearchImportError	sre_parseparsegetwidthrZ   sre_constantserror
ValueErrorregexcompilematch	MAXREPEAT)rn   regexp_finalxrO   s       r    get_regexp_widthr      s    z vvmS$799]D))dfjkk7 ) = F F HI H1A HIII 7zT"" l+Awwr{"#m55666#m556667s+   &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;   $ )Nrr   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                     [        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)r   dedupr   s      r    
dedup_listr      s3     EE=q!eAuyy|Aq===s   	===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)
r`      r   Nc                     0 U l         g r   enumsrg   s    r    ra   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   rg   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    rf   Enumerator.reversed   sM    "jj..010daQT011vTZZ((( 2s   Ar   )r   N)rD   rT   rU   rV   ra   rZ   rA   r   r   r   rf   r[   rS   r;   r    r`   r`      s,    ( 3  
$sCx. r;   r`   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   rS   )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;   rS   N)r   )
rD   rT   rU   rV   staticmethodospathexistsr   r[   rS   r;   r    r   r      s&    "''..)F. .r;   r   c                     [         R                  S:  a  U R                  5       $  U R                  S5        g! [        [
        4 a     gf = f)z&str.isascii only exists in python3.7+ )rl      asciiTF)sysversion_infoisasciiencodeUnicodeDecodeErrorUnicodeEncodeErrorr   s    r    r   r      sH    
6!yy{	HHW"$67 		s   8 A
Ac                       \ rS rSrS rSrg)fzseti  c                 F    SSR                  [        [        U 5      5      -  $ )Nz{%s}z, )joinmapreprrg   s    r    __repr__fzset.__repr__  s    		#dD/222r;   rS   N)rD   rT   rU   rV   r   r[   rS   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-   r   popleftr   r   )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(   r0   r7   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      rr   zFailed to factorize %s)rangedivmodsmall_factors)r   r   ar   bs        r    r   r   5  sy     6M6>>Ax:q"%a|5J /A6(:: & /*Q..5r;   )NN)Ir   r   	itertoolsr   collectionsr   typingr   r   r   r   r	   r
   r   r   r   r   r   r   r   rt   logging	getLoggerr   Logger__annotations__
addHandlerStreamHandlersetLevelCRITICALobjectNO_VALUEr   r!   rX   r,   r/   r0   r6   r   rs   rx   r   
re._parser_parserry   re._constants
_constantsr|   r   rv   rZ   r   r   r   rk   r   r   r   r   r`   r   r   r   r   r   r   r   r   r   r   r>   r   rS   r;   r    <module>r     s    	   q q q q   **62 2   ''') *    ! 8CL	( 	(!3 	8HCU 	ae 	
s 
tCH~ 
T 
c 
 T%, ,^3	 3(J w")

-.73 75sCx$s))C#D 7: >	=(=c =x} = =
3c 3d 303 04 0>$q' >d1g > &!&. .	s 	t 	3I 3
#x #x #C #	) 	)8 	) 	)
c 
*;!< 
 
/S /c /d5c?.C /{  Jh  s$   -G$ G2 $G/.G/2G=<G=