
    E#i                         S r SSKJrJr  SSKJrJrJrJrJ	r	  SSK
JrJrJr  SSKJr  SSKJrJrJrJr  SSKJr   " S	 S
5      r\\   r " S S5      rS rS r " S S5      rg)z*Provides for superficial grammar analysis.    )Counterdefaultdict)ListDictIterator	FrozenSetSet   )bfsfzsetclassify)GrammarError)RuleTerminalNonTerminalSymbol)
ParserConfc                       \ rS rSr% Sr\\S'   \\S'   S\S\4S jrS r	\
S\4S j5       rS	\SS 4S
 jr\
S\4S j5       rS\4S jrS\4S jrSrg)RulePtr   )ruleindexr   r   c                     [        U[        5      (       d   eU[        UR                  5      ::  d   eXl        X l        g N)
isinstancer   len	expansionr   r   )selfr   r   s      p/home/james-whalen/.local/lib/python3.13/site-packages/ccxt/static_dependencies/lark/parsers/grammar_analysis.py__init__RulePtr.__init__   s6    $%%%%DNN++++	
    c                    U R                   R                  S U R                    Vs/ s H  oR                  PM     nnU R                   R                  U R                  S   Vs/ s H  oR                  PM     nnSU R                   R                  R                  < SSR                  U5      < SSR                  U5      < S3$ s  snf s  snf )N<z :  z * >)r   r   r   nameoriginjoin)r   xbeforeafters       r   __repr__RulePtr.__repr__   s    "&))"5"5ktzz"BC"BQ&&"BC!%!4!4TZZ[!AB!AA!AB#'99#3#3#8#8#((6:JCHHUZO\\ DBs   C"C	returnc                 H    U R                   R                  U R                     $ r   )r   r   r   r   s    r   nextRulePtr.next   s    yy""4::..r"   symc                 l    U R                   U:X  d   e[        U R                  U R                  S-   5      $ )N   )r2   r   r   r   )r   r4   s     r   advanceRulePtr.advance    s-    yyCtyy$**Q,//r"   c                 Z    U R                   [        U R                  R                  5      :H  $ r   )r   r   r   r   r1   s    r   is_satisfiedRulePtr.is_satisfied$   s     zzS!4!4555r"   c                     [        U[        5      (       d  [        $ U R                  UR                  :H  =(       a    U R                  UR                  :H  $ r   )r   r   NotImplementedr   r   )r   others     r   __eq__RulePtr.__eq__(   s:    %))!!yyEJJ&D4::+DDr"   c                 D    [        U R                  U R                  45      $ r   )hashr   r   r1   s    r   __hash__RulePtr.__hash__-   s    TYY

+,,r"   )r   r   N)__name__
__module____qualname____firstlineno__	__slots__r   __annotations__intr    r-   propertyr   r2   r7   boolr:   r?   rC   __static_attributes__ r"   r   r   r      s    !I
JJT # ]
 /f / /06 0i 0 6d 6 6Et E
-# -r"   r   c                   h    \ rS rSr% Sr\\S'   \\S'   \\S 4   \S'   \\\	\
   4   \S'   S rS rS	rg
)
LR0ItemSet4   )kernelclosuretransitions
lookaheadsrS   rT   rU   rV   c                 z    [        U5      U l        [        U5      U l        0 U l        [	        [
        5      U l        g r   )r   rS   rT   rU   r   setrV   )r   rS   rT   s      r   r    LR0ItemSet.__init__<   s,    FmW~%c*r"   c                     SSR                  U R                   Vs/ s H  n[        U5      PM     sn5      < SSR                  U R                   Vs/ s H  n[        U5      PM     sn5      < S3$ s  snf s  snf )N{, z | })r)   rS   reprrT   )r   rs     r   r-   LR0ItemSet.__repr__B   s\    "ii$++(F+Qa+(FGeieqeqSreq`aTXYZT[eqSrIstt(FSrs   A2
A7)rT   rS   rV   rU   N)rE   rF   rG   rH   rI   StaterJ   r   r   r	   r   r    r-   rN   rO   r"   r   rQ   rQ   4   s@    BIMNfl*++VSY&''+ur"   rQ   c                 B    U(       a  X:  a  g[        U 5      nX-  n X:g  $ )NF)rX   )set1set2copys      r   
update_setrf   F   s$    4;t9DLD<r"   c           	         U  VVs1 s H  oR                     H  o"iM     M     snnU  Vs1 s H  oR                  iM     sn-  n[        5       n0 n0 nU H/  nUR                  (       a  U1O	[        5       XR'   [        5       Xb'   M1     SnU(       a  SnU  H  n[        UR                   5      U::  a  [	        XAR                  15      (       a  Sn[        UR                   5       HG  u  p[        UR                   SU 5      U::  a%  [	        XQR                     XR   5      (       a  SnMD  MF    M     M     U(       a  M  SnU(       a  SnU  H  n[        UR                   5       H  u  pU[        UR                   5      S-
  :X  d  [        UR                   US-   S 5      U::  a!  [	        Xb   XaR                     5      (       a  Sn[        US-   [        UR                   5      5       HJ  n	[        UR                   US-   U	 5      U::  d  M$  [	        Xb   XQR                   U	      5      (       d  MH  SnML     M     M     U(       a  M  XVU4$ s  snnf s  snf )zdCalculate FOLLOW sets.

Adapted from: http://lara.epfl.ch/w/cc09:algorithm_for_first_and_follow_setsTFNr6   )r   r(   rX   is_termrf   	enumerater   range)
rulesr   r4   symbolsNULLABLEFIRSTFOLLOWchangedijs
             r   calculate_setsrs   N   s     %?utssu?[`Ba[`SW;;[`BaaG uHEFKKC5SU
E 
 G
D4>>"h.h66"G#DNN3t~~bq)*h6!%"4ejAA"& B  4  '  G
D#DNN3c$..)!++s4>>!A#$3G/HH/T!&+vkk/BCC"&qsC$78A4>>!A#a01X=%fk59J3KLL&*G 9 4  ' (""o @Bas
   IIc                   D    \ rS rSrSS\S\S\4S jjrSS\S\4S	 jjr	S
r
g)GrammarAnalyzer   parser_confdebugstrictc                 H   X l         X0l        UR                   Vs0 s H0  nU[        [	        SU-   5      [	        U5      [        S5      /5      _M2     nnUR                  [        UR                  5       5      -   n[        US 5      U l
        [        U5      [        [        U5      5      :w  aY  [        U5      R                  5        VVs/ s H  u  pxUS:  d  M  UPM     n	nn[        SSR!                  S U	 5       5      -  5      eU HF  n
U
R"                   H3  nUR$                  (       a  M  XR                  ;   a  M'  [        SU-  5      e   MH     UR                  5        VVs0 s H   u  pLX@R'                  UR(                  5      _M"     snnU l        UR                  5        VVs0 s H/  u  pLU[-        [/        U[        UR"                  5      5      15      _M1     snnU l        UR                   Vs0 s H&  nU[        [	        SU-   5      [	        U5      /5      _M(     nnUR                  [        UR                  5       5      -   n[        U5      [        [        U5      5      :X  d   e[        US	 5      U l        UR                  5        VVs0 s HA  u  pLU[5        [/        US
5      /U R'                  UR(                  U R2                  5      5      _MC     snnU l        [9        U5      u  U l        U l        U l        g s  snf s  snnf s  snnf s  snnf s  snf s  snnf )Nz$root_z$ENDc                     U R                   $ r   r(   r_   s    r   <lambda>*GrammarAnalyzer.__init__.<locals>.<lambda>   s    XYX`X`r"   r6   zRules defined twice: %sr\   c              3   8   #    U  H  n[        U5      v   M     g 7fr   )str).0rq   s     r   	<genexpr>+GrammarAnalyzer.__init__.<locals>.<genexpr>   s     D`U_PQSVVU_s   zUsing an undefined rule: %sc                     U R                   $ r   r|   r}   s    r   r~   r      s    r"   r   ) rx   ry   startr   r   r   rk   listvaluesr   rules_by_originr   rX   r   itemsr   r)   r   rh   expand_ruler(   start_statesr   r   
end_stateslr0_rules_by_originrQ   lr0_start_statesrs   rn   ro   rm   )r   rw   rx   ry   r   
root_rulesrk   itemcount
duplicatesr_   r4   	root_rulelr0_root_rules	lr0_ruless                  r   r    GrammarAnalyzer.__init__   s   
 $/#4#46#4% T+h.>"?+eBTV^_eVfAghh#4 	 6 !!D):):)<$==>FuN`>au:SZ(29%.2F2F2HV2H;4ETUI$2HJV8499D`U_D`;``aaA{{s.B.B'B&'Ds'JKK #  6@5E5E5GI5G!1 #$4$4Y5E5E$FF5GI 4>3C3C3EG3E/u !%C	@S@S<T)U(V"WW3EG )..0.E  k(U2B&CkRWFXEY!ZZ. 	 0  %%^-B-B-D(EE	9~S^!4454#+I7I#J  )7(<(<(>!@(>$E "'
GIq4I3JDL\L\]f]m]mos  pH  pH  MI  )J  "J(>!@ 2@1F.
DKC6 WIG0!@s*   7L	LL%'L(6L5-LALNsource_ruler/   c                    ^^ Tc  U R                   m[        5       mS[        S[        [           4UU4S jjn[	        U/U5       H  nM     [        T5      $ )z4Returns all init_ptrs accessible by rule (recursive)r   r/   c              3   *  >#    U R                   (       a   U 5       eTU     Hm  n[        US5      nTR                  U5        UR                  (       d  M3  UR                  nUR                   (       a  MR  [        U[        5      (       d   eUv   Mo     g 7f)Nr   )rh   r   addr   r2   r   r   )r   r_   init_ptrnew_r	init_ptrsr   s       r   _expand_rule1GrammarAnalyzer.expand_rule.<locals>._expand_rule   sq     ||)T)#$T*"1a=h';;;$MME ===)%====# +s   ABB3 B)r   rX   r   r   r   r   )r   r   r   r   _r   s     `  @r   r   GrammarAnalyzer.expand_rule   s_     ""22OE		${ 	$x/D 	$ 	$ k]L1A 2 Yr"   )
rn   ro   rm   rx   r   r   r   r   r   ry   )FFr   )rE   rF   rG   rH   r   rM   r    r   ra   r   rN   rO   r"   r   ru   ru      s9    %GJ %Gt %G4 %GN {  U    r"   ru   N)__doc__collectionsr   r   typingr   r   r   r   r	   utilsr   r   r   
exceptionsr   grammarr   r   r   r   commonr   r   ra   rQ   rf   rs   ru   rO   r"   r   <module>r      s[    , , 7 7 ( ( % 9 9 "- "-J 	'u u$;#|?  ? r"   