
    bi&4              	       l   U d dl Z d dlZd dlmZ d dlmZ d dlmZmZm	Z	m
Z
mZmZmZmZmZmZmZmZmZ d dlZd dlZd dlZd dlmZ d dlmZmZ  ej6                  d      Zej:                  ed<   ej?                   ej@                                ejC                  ejD                          e#       Z$ ed	      Z%d?d
ede
e   de
e   defdZ&dedee'ef   dedefdZ( edd      Z) G d d      Z* G d de*      Z+	 d dl,Z,dZ-ej^                  dk\  rd dl0m1Z2 d dl3m4Z5 nd dl2Z2d dl5Z5 ejl                  d      Z7de'deee8e8f   e	e8   f   fdZ9 ed       G d  d!ee                Z:eed"f   Z;eee:e   ef   Z<d#Z=e=d$z   Z>d%e'd&ee'   de?fd'Z@d%e'de?fd(ZAd%e'de?fd)ZBd*ee%   de	e%   fd+ZC G d, d-e*      ZDd. ZE	 d dlFZFdZG G d/ d0      ZH G d1 d2eI      ZJd
ed3edefd4ZKd5ed6edefd7ZLd8 ZMdede
e+   defd9ZNd:e8d;e8de	ee8e8f      fd<ZO G d= d>ee%         ZPy# e.$ r dZ-Y "w xY w# e.$ r dZGY qw xY w)@    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                     i }| D ]/  }| ||      n|}| ||      n|}	 ||   j                  |       1 |S # t        $ r	 |g||<   Y Ew xY wN)appendKeyError)r   r   r   ditemkvs          E/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/lark/utils.pyclassifyr%      sl    A /CI!-E$KD	aDKKN	 H  	3AaD	s   9A
Adata	namespacememoc           
      D   t        | t              rYd| v r|| d      }|j                  | |      S d| v r|| d      S | j                         D ci c]  \  }}|t	        |||       c}}S t        | t
              r| D cg c]  }t	        |||       c}S | S c c}}w c c}w )N__type__@)
isinstancedictdeserializeitems_deserializelist)r&   r'   r(   class_r   r   s         r$   r0   r0   %   s    $tJ/0F%%dD11D[S	?"KO::<XZS%L	488XX	D$	BFGUIt4GGK YGs   B>B_T	Serialize)boundc            	       t    e Zd ZdZdedefdZddeeef   fdZ	e
dee   deeef   d	eeef   defd
       Zy)r4   al  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    t        |      }| j                  |      |j                         fS r   )SerializeMemoizer	serialize)selfr7   r(   s      r$   memo_serializezSerialize.memo_serialize=   s(     !12~~d#T^^%555    Nc           
      <   |r.|j                  |       rd|j                  j                  |       iS t        | d      }|D ci c]  }|t	        t        | |      |       }}t        |       j                  |d<   t        | d      r| j	                  ||       |S c c}w )Nr+   __serialize_fields__r*   
_serialize)in_typesmemoizedgetgetattrr@   type__name__hasattr)r;   r(   fieldsfress        r$   r:   zSerialize.serializeA   s    DMM$'**401156>DEq*WT1-t44EEt*--J4&OOC&
	 Fs   Bclsr&   r(   c           
      j   t        | dg       }|D ci c]  }|j                  | }}t        | d      }d|v r||d      S | j                  |       }|D ]  }	 t        ||t	        ||   ||               t        |d      r|j	                          |S c c}w # t
        $ r}t        d| |      d }~ww xY w)N__serialize_namespace__r?   r+   zCannot find key for classr0   )rD   rF   __new__setattrr0   r   rG   )	rK   r&   r(   r'   crH   instrI   es	            r$   r.   zSerialize.deserializeL   s    C!:B?	+45aQZZ\5	545$;S	?"{{3 	DADad1gy$!GH	D 4(# 6  D:CCCDs   BB	B2 B--B2r   )rF   
__module____qualname____doc__r   r   r<   r   strr:   classmethodr
   r3   intr.    r=   r$   r4   r4   4   ss    6t 6 6	S#X 	 b c3h tCH~ RT  r=   c                       e Zd ZdZdZdeddfdZdedefdZ	de
eef   fd	Zed
e
eef   de
eef   de
eef   de
eef   fd       Zy)r9   z<A version of serialize that memoizes objects to reduce space)rB   r7   r   Nc                 B    t        |      | _        t               | _        y r   )tupler7   
EnumeratorrB   )r;   r7   s     r$   __init__zSerializeMemoizer.__init__h   s     %&6 7"r=   r   c                 .    t        || j                        S r   )r,   r7   )r;   r   s     r$   rA   zSerializeMemoizer.in_typesl   s    %!6!677r=   c                 J    t        | j                  j                         d       S r   )r@   rB   reversedr;   s    r$   r:   zSerializeMemoizer.serializeo   s    $--002D99r=   r&   r'   r(   c                     t        |||      S r   )r0   )rK   r&   r'   r(   s       r$   r.   zSerializeMemoizer.deserializer   s    D)T22r=   )rF   rS   rT   rU   r?   r   r^   r4   boolrA   r   rX   r   r:   rW   rV   r.   rY   r=   r$   r9   r9   c   s    B&% %$ %8i 8D 8:4S> : 3tCH~ 3$sCx. 3PTUXZ]U]P^ 3cghkmphpcq 3 3r=   r9   TF)      z\\p{[A-Za-z_]+}exprc                 ,   t         rt        j                  t        d|       }n(t        j                  t        |       rt        d|       | }	 t        j                  |      j                         D cg c]  }t        |       c}S c c}w # t        j                  $ ru t         st        |       t        j                  |      }t        t        dt        j                         }|j#                  d      dt        |      fcY S dt        |      fcY S w xY w)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getwidthrX   sre_constantserror
ValueErrorregexcompilerD   	MAXREPEATmatch)rg   regexp_finalxrP   rj   s        r$   get_regexp_widthr      s     vvmS$799]D)dfjkk( ) = F F HI1AIII (T"" l+A y*m6M6MNHwwr{"#h-''#h-''(s+   %B 1BB B A6DDD)frozenc                   l    e Zd ZU dZeed<   eed<   eed<   d Zedd       Z	d Z
d Zd	efd
Zd	efdZy)	TextSlicea  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                 L   t        | j                  t        t        f      st	        d      | j
                  dk  rHt        j                  | d| j
                  t        | j                        z          | j
                  dk\  sJ | j                  +t        j                  | dt        | j                               y | j                  dk  r\t        j                  | d| j                  t        | j                        z          | j                  t        | j                        k  sJ y y )Nztext must be str or bytesr   r   r   )
r,   r   rV   bytes	TypeErrorr   object__setattr__lenr   rb   s    r$   __post_init__zTextSlice.__post_init__   s    $))c5\2788::>tWdjj3tyy>.IJ::>!>88tUC		N;XX\tUDHHs499~,EF88s499~--- r=   c                 L    t        |t              r|S  | |dt        |            S Nr   )r,   r   r   )rK   r   s     r$   	cast_fromzTextSlice.cast_from   s$    dI&K4CI&&r=   c                 h    | j                   dk(  xr" | j                  t        | j                        k(  S r   )r   r   r   r   rb   s    r$   is_complete_textzTextSlice.is_complete_text   s&    zzQ=488s499~#==r=   c                 4    | j                   | j                  z
  S r   )r   r   rb   s    r$   __len__zTextSlice.__len__   s    xx$**$$r=   substrc                 d    | j                   j                  || j                  | j                        S r   )r   countr   r   r;   r   s     r$   r   zTextSlice.count   s!    yyvtzz488<<r=   c                 d    | j                   j                  || j                  | j                        S r   )r   rindexr   r   r   s     r$   r   zTextSlice.rindex   s#    yy

DHH==r=   N)r   TextOrSlicer   TextSlice[AnyStr])rF   rS   rT   rU   r   __annotations__rX   r   rW   r   r   r   r   r   rY   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                     t        |       dk7  rt        fd| D              S | dk(  xs t        j                  |       v S )Nrl   c              3   6   K   | ]  }t        |        y wr   )_test_unicode_category).0charr   s     r$   	<genexpr>z)_test_unicode_category.<locals>.<genexpr>   s     J)$
;Js   _)r   allunicodedatacategory)r   r   s    `r$   r   r      s>    
1v{JJJJ8<{++A.*<<r=   c                 "    t        | t              S )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                 "    t        | t              S )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                 >    t        t        j                  |             S )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                   <    e Zd ZddZdefdZd Zdeeef   fdZ	y)r]   r   Nc                     i | _         y r   )enumsrb   s    r$   r^   zEnumerator.__init__	  s	    %'
r=   c                     || j                   vr"t        | j                         | j                   |<   | j                   |   S r   )r   r   r;   r!   s     r$   rC   zEnumerator.get  s3    tzz!"4::DJJtzz$r=   c                 ,    t        | j                        S r   )r   r   rb   s    r$   r   zEnumerator.__len__  s    4::r=   c                     | j                   j                         D ci c]  \  }}||
 }}}t        |      t        | j                         k(  sJ |S c c}}w r   )r   r/   r   )r;   r"   r#   rs       r$   ra   zEnumerator.reversed  sN    "jj..01daQT111vTZZ((( 2s   A)r   N)
rF   rS   rT   r^   rX   rC   r   r   r   ra   rY   r=   r$   r]   r]     s,    ( 3  
$sCx. r=   r]   c                 `    | sg gS t        d | D              sJ |        t        t        |        S )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       K   | ]  }|  y wr   rY   )r   r   s     r$   r   z'combine_alternatives.<locals>.<genexpr>+  s      Qq s   )r   r1   r   )listss    r$   combine_alternativesr     s6     t %  '%'   r=   c                   V    e Zd Z eej
                  j                        Zedd       Zy)FSc                 b    t         rd|v rt        j                  | f|dd|S t        | |fi |S )NwT)mode	overwrite)_has_atomicwritesatomicwritesatomic_writeopen)namer   kwargss      r$   r   zFS.open7  s;    ,,TWWPVWWd-f--r=   N)r   )rF   rS   rT   staticmethodospathexistsr   rY   r=   r$   r   r   4  s&    "''..)F. .r=   r   c                       e Zd Zd Zy)fzsetc                 F    ddj                  t        t        |             z  S )Nz{%s}, )joinmapreprrb   s    r$   __repr__zfzset.__repr__@  s    		#dD/222r=   N)rF   rS   rT   r   rY   r=   r$   r   r   ?  s    3r=   r   predc                 j    g }| D cg c]  } ||      s|j                  |      s|  }}||fS c c}w r   )r   )r   r   false_elemselem
true_elemss        r$   classify_boolr   D  s>    K#&Q4$t*8J8J48P$QJQ{"" Rs   00initialexpandc              #      K   t        t        |             }t        |      }|rL|j                         }|  ||      D ])  }||vs|j	                  |       |j                  |       + |rKy y wr   )r   r1   setpopleftaddr   )r   r   open_qvisitednode	next_nodes         r$   bfsr   J  si     4=!F&kG
~~
 	)I'I&i(	) s   AA1&A1/A1c              #   ~   K   t        t        |             }|r#|j                         }| | ||      z  }|r"yyw)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   U  s;     4=!F
~~
&, s   8==c           	      d   t        | t              r| j                  |      S t        | t              r| D cg c]  }t	        ||       c}S t        | t
              rt        |       S t        | t              r.| j                         D ci c]  \  }}|t	        ||       c}}S | S c c}w c c}}w r   )r,   r4   r:   r1   r@   	frozensetr-   r/   )r   r(   r   r   s       r$   r@   r@   ^  s    %#t$$	E4	 3894
4&99	E9	%E{	E4	 <AKKMJysDJtT**JJL : Ks   B'
B,n
max_factorc                     | dk\  sJ |dkD  sJ | |k  r| dfgS t        |dd      D ]-  }t        | |      \  }}||z   |k  st        ||      ||fgz   c S  J d| z         )a  
    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      rl   zFailed to factorize %s)rangedivmodsmall_factors)r   r   ar   bs        r$   r   r   m  s     6M6>>JAx:q"% ;a|1q5J J/Aq6(::; /*Q..5r=   c                   v    e Zd ZdZddee   fdZdedefdZ	defdZ
dee   fdZdefd	Zd
 ZdefdZd Zy)
OrderedSetzkA minimal OrderedSet implementation, using a dictionary.

    (relies on the dictionary being ordered)
    r/   c                 8    t         j                  |      | _        y r   )r-   r   r    )r;   r/   s     r$   r^   zOrderedSet.__init__  s    u%r=   r!   r   c                     || j                   v S r   r    r   s     r$   __contains__zOrderedSet.__contains__  s    tvv~r=   c                 "    d | j                   |<   y r   r  r   s     r$   r   zOrderedSet.add  s    tr=   c                 ,    t        | j                        S r   )iterr    rb   s    r$   __iter__zOrderedSet.__iter__      DFF|r=   c                     | j                   |= y r   r  r   s     r$   removezOrderedSet.remove  s    FF4Lr=   c                 ,    t        | j                        S r   )rd   r    rb   s    r$   __bool__zOrderedSet.__bool__  r  r=   c                 ,    t        | j                        S r   )r   r    rb   s    r$   r   zOrderedSet.__len__  s    466{r=   c                 r    t        |       j                   ddj                  t        t        |              dS )N(r   ))rE   rF   r   r   r   rb   s    r$   r   zOrderedSet.__repr__  s0    t*%%&a		#d4.(A'B!DDr=   N)rY   )rF   rS   rT   rU   r   r   r^   r   rd   r  r   r   r
  r  r  rX   r   r   rY   r=   r$   r  r    si    &hqk &   (1+ 1  Er=   r  )NN)Qr   r   	itertoolsr   collectionsr   typingr   r   r   r   r	   r
   r   r   r   r   r   r   r   sysrn   loggingdataclassesr   r   r   	getLoggerr   Loggerr   
addHandlerStreamHandlersetLevelCRITICALr   NO_VALUEr   r%   rV   r0   r3   r4   r9   ry   rm   rr   version_info
re._parser_parserrs   re._constants
_constantsrv   rz   rp   rX   r   r   r   	LarkInputr   r   rd   r   r   r   r   r]   r   r   r   r   r   r   r   r   r   r@   r   r  rY   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 (< $<> <> <>~ F//0&)F+S01	
 >	=(=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W  Jn  s$   =H ;H) H&%H&)H32H3