
    ^h3              	       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S SKJr  S SKJrJr  \R6                  " S5      r\R:                  \S'   \R?                  \R@                  " 5       5        \RC                  \RD                  5        \#" 5       r$\" S	5      r%S?S
\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-\R^                  S:  a  S SK0J1r2  S SK3J4r5  OS SK2r2S SK5r5\Rl                  " S5      r7S\'S\\\8\84   \	\8   4   4S jr9\" SS9 " S  S!\\   5      5       r:\\S"4   r;S#r<\<S$-   r=S%\'S&\\'   S\>4S' jr?S%\'S\>4S( jr@S%\'S\>4S) jrAS*\\%   S\	\%   4S+ jrB " S, S-\*5      rCS. rD S SKErESrF " S/ S05      rG " S1 S2\H5      rIS
\S3\S\4S4 jrJS5\S6\S\4S7 jrKS8 rLS\S\
\+   S\4S9 jrMS:\8S;\8S\	\\8\84      4S< jrN " S= S>\\%   5      rOg! \. a    Sr- GNf = f! \. a    SrF Nwf = f)@    N)product)deque)CallableIteratorListOptionalTupleTypeTypeVarUnionDictAnySequenceIterableAbstractSet)	dataclass)GenericAnyStr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          D/home/james-whalen/.local/lib/python3.13/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$   r0   r0   %   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)r4   4   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)selfr8   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getattrrB   type__name__hasattr)r<   r(   fieldsfress        r$   r;   Serialize.serializeA   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__rA   r+   zCannot find key for classr0   )rF   rH   __new__setattrr0   r   rI   )	rN   r&   r(   r'   crJ   instrK   es	            r$   r.   Serialize.deserializeL   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   )rH   
__module____qualname____firstlineno____doc__r   r   r=   r   strr;   classmethodr
   r3   intr.   __static_attributes__rW   r?   r$   r4   r4   4   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)r:   c   z<A version of serialize that memoizes objects to reduce space)rD   r8   r   Nc                 B    [        U5      U l        [        5       U l        g r   )tupler8   
EnumeratorrD   )r<   r8   s     r$   __init__SerializeMemoizer.__init__h   s     %&6 7"r?   r   c                 ,    [        XR                  5      $ r   )r,   r8   )r<   r   s     r$   rC   SerializeMemoizer.in_typesl   s    %!6!677r?   c                 J    [        U R                  R                  5       S 5      $ r   )rB   rD   reversedr<   s    r$   r;   SerializeMemoizer.serializeo   s    $--002D99r?   r&   r'   r(   c                     [        XU5      $ r   )r0   )rN   r&   r'   r(   s       r$   r.   SerializeMemoizer.deserializer   s    DT22r?   )rD   r8   )rH   rX   rY   rZ   r[   rA   r   re   r4   boolrC   r   r^   r   r;   r]   r\   r.   r_   rW   r?   r$   r:   r:   c   s    B&% %$ %8i 8D 8:4S> : 3tCH~ 3$sCx. 3PTUXZ]U]P^ 3cghkmphpcq 3 3r?   r:   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compilerF   	MAXREPEATmatch)rr   regexp_finalxrS   ru   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+)frozenc                   z    \ rS rSr% Sr\\S'   \\S'   \\S'   S r\	SS j5       r
S rS	 rS
\4S jrS
\4S jrSrg)	TextSlice   a  A view of a string or bytes object, between the start and end indices.

Never creates a copy.

Lark accepts instances of TextSlice as input (instead of a string),
when the lexer is 'basic' or 'contextual'.

Args:
    text (str or bytes): The text to slice.
    start (int): The start index. Negative indices are supported.
    end (int): The end index. Negative indices are supported.

Raises:
    TypeError: If `text` is not a `str` or `bytes`.
    AssertionError: If `start` or `end` are out of bounds.

Examples:
    >>> TextSlice("Hello, World!", 7, -1)
    TextSlice(text='Hello, World!', start=7, end=12)

    >>> TextSlice("Hello, World!", 7, None).count("o")
    1

textstartendc                 `   [        U R                  [        [        45      (       d  [	        S5      eU R
                  S:  aI  [        R                  U SU R
                  [        U R                  5      -   5        U R
                  S:  d   eU R                  c+  [        R                  U S[        U R                  5      5        g U R                  S:  a]  [        R                  U SU R                  [        U R                  5      -   5        U R                  [        U R                  5      ::  d   eg g )Nztext must be str or bytesr   r   r   )
r,   r   r\   bytes	TypeErrorr   object__setattr__lenr   rk   s    r$   __post_init__TextSlice.__post_init__   s    $))c5\22788::>tWdjj3tyy>.IJ::>!>88tUC		N;XX\tUDHHs499~,EF88s499~--- r?   c                 V    [        U[        5      (       a  U$ U " US[        U5      5      $ Nr   )r,   r   r   )rN   r   s     r$   	cast_fromTextSlice.cast_from   s'    dI&&K4CI&&r?   c                 r    U R                   S:H  =(       a"    U R                  [        U R                  5      :H  $ r   )r   r   r   r   rk   s    r$   is_complete_textTextSlice.is_complete_text   s&    zzQ=488s499~#==r?   c                 4    U R                   U R                  -
  $ r   )r   r   rk   s    r$   __len__TextSlice.__len__   s    xx$**$$r?   substrc                 b    U R                   R                  XR                  U R                  5      $ r   )r   countr   r   r<   r   s     r$   r   TextSlice.count   s    yyvzz488<<r?   c                 b    U R                   R                  XR                  U R                  5      $ r   )r   rindexr   r   r   s     r$   r   TextSlice.rindex   s!    yy

DHH==r?   rW   N)r   TextOrSlicer   TextSlice[AnyStr])rH   rX   rY   rZ   r[   r   __annotations__r^   r   r]   r   r   r   r   r   r_   rW   r?   r$   r   r      sS    0 LJ	H. ' '>%=F =>V >r?   r   r   )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;   $ )Nrw   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   _)r   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.)r1   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)
rd   i  r   Nc                     0 U l         g r   enumsrk   s    r$   re   Enumerator.__init__  s	    %'
r?   c                     XR                   ;  a"  [        U R                   5      U R                   U'   U R                   U   $ r   )r   r   r<   r!   s     r$   rE   Enumerator.get  s1    zz!"4::DJJtzz$r?   c                 ,    [        U R                  5      $ r   )r   r   rk   s    r$   r   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   )r<   r"   r#   rs       r$   rj   Enumerator.reversed  sM    "jj..010daQT011vTZZ((( 2s   Ar   )r   N)rH   rX   rY   rZ   re   r^   rE   r   r   r   rj   r_   rW   r?   r$   rd   rd     s,    ( 3  
$sCx. r?   rd   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   rW   )r   r   s     r$   r   'combine_alternatives.<locals>.<genexpr>*  s      %Qq%s   )r   r1   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)FSi3  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.open6  s<    ,,TWWPVWW-f--r?   rW   N)r   )
rH   rX   rY   rZ   staticmethodospathexistsr   r_   rW   r?   r$   r   r   3  s&    "''..)F. .r?   r   c                       \ rS rSrS rSrg)fzseti>  c                 F    SSR                  [        [        U 5      5      -  $ )Nz{%s}, )joinmapreprrk   s    r$   __repr__fzset.__repr__?  s    		#dD/222r?   rW   N)rH   rX   rY   rZ   r   r_   rW   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  C  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   r1   setpopleftaddr   )r  r  open_qvisitednode	next_nodes         r$   bfsr  I  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   r1   r  )r  r  r	  r  s       r$   bfs_all_uniquer  T  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,   r4   r;   r1   rB   	frozensetr-   r/   )r   r(   r   r   s       r$   rB   rB   ]  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      rw   zFailed to factorize %s)rangedivmodsmall_factors)r  r  ar   bs        r$   r  r  l  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    )r<   r/   s     r$   re   OrderedSet.__init__  s    u%r?   r!   r   c                     XR                   ;   $ r   r    r   s     r$   __contains__OrderedSet.__contains__  s    vv~r?   c                 "    S U R                   U'   g r   r!  r   s     r$   r  OrderedSet.add  s    tr?   c                 ,    [        U R                  5      $ r   )iterr    rk   s    r$   __iter__OrderedSet.__iter__      DFF|r?   c                     U R                   U	 g r   r!  r   s     r$   removeOrderedSet.remove  s    FF4Lr?   c                 ,    [        U R                  5      $ r   )ro   r    rk   s    r$   __bool__OrderedSet.__bool__  r*  r?   c                 ,    [        U R                  5      $ r   )r   r    rk   s    r$   r   OrderedSet.__len__  s    466{r?   c                 r    [        U 5      R                   SSR                  [        [        U 5      5       S3$ )N(r   ))rG   rH   r   r   r   rk   s    r$   r   OrderedSet.__repr__  s0    t*%%&a		#d4.(A'B!DDr?   r!  N)rW   )rH   rX   rY   rZ   r[   r   r   re   r   ro   r"  r  r   r(  r,  r/  r^   r   r   r_   rW   r?   r$   r  r    si    &hqk &   (1+ 1  Er?   r  )NN)Pr   r   	itertoolsr   collectionsr   typingr   r   r   r   r	   r
   r   r   r   r   r   r   r   sysry   loggingdataclassesr   r   r   	getLoggerr   Loggerr   
addHandlerStreamHandlersetLevelCRITICALr   NO_VALUEr   r%   r\   r0   r3   r4   r:   r   rx   r}   version_info
re._parser_parserr~   re._constants
_constantsr   r   r{   r^   r   r   r   r   r   ro   r   r   r   r   rd   r   r   r   r   r  r   r  r  r  rB   r  r  rW   r?   r$   <module>rI     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 (< $<> <> <>~ F//0
 >	=(=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U  Jl  s$   =H 3H& H#"H#&H10H1