
    NjC*                     L   d Z dZddgZddlZddl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 ddlmZ dd	lmZmZmZmZmZmZmZ dd
lmZ ddlmZ ddlmZ ddlmZmZmZm Z m!Z! ee"df         Z#e G d d                      Z$ G d d          Z% G d d          Z&d*de#dee#         de"fdZ'	 	 	 	 	 d+de"dee"         de(de(dee         defd Z)d!e"d"e"de(fd#Z*	 d*d$e"d%e"dee#         dej        fd&Z+d'e"de(fd(Z,e-d)k    r$ ej.         e/ e,                                  dS dS ),zZParser driver.

This provides a high-level interface to parse a file into a syntax tree.

z#Guido van Rossum <guido@python.org>Driverload_grammar    N)contextmanager)	dataclassfield)Logger)IOAnyIterableIteratorOptionalUnioncast)Grammar)GoodTokenInfo)NL   )grammarparsepgentokentokenizezos.PathLike[str]c                   j    e Zd ZU eed<   dZee         ed<    ee          Z	ee
         ed<   ddZdS )	ReleaseRangestartNend)default_factorytokensreturnc                 L    t          | j                  }| j        |z   | _        d S N)lenr   r   r   )selftotal_eatens     i/lsinfo/ai/hellotax_ai/training_center/backend/venv/lib/python3.11/site-packages/blib2to3/pgen2/driver.pylockzReleaseRange.lock-   s#    $+&&:+    )r   N)__name__
__module____qualname__int__annotations__r   r   r   listr   r
   r&    r'   r%   r   r   '   sh         JJJC#d333FDI333, , , , , ,r'   r   c                   z    e Zd ZdeddfdZeded          fd            ZdedefdZ	ddZ
defd	Zd
edefdZdS )
TokenProxy	generatorr   Nc                 0    || _         d| _        g | _        d S )Nr   )_tokens_counter_release_ranges)r#   r1   s     r%   __init__zTokenProxy.__init__3   s     35r'   c              #      K   t          | j                  }| j                            |           	 | V  |                                 d S # |                                 w xY wr!   )r   r4   r5   appendr&   )r#   release_ranges     r%   releasezTokenProxy.release8   sl      $T]33##M222	!JJJ      M    s   A A"pointc                     | j         d         j        }|t          |          k     r||         S |t          |          k    r<t          | j                  }|                    |           |t          |          k    <|S )N)r5   r   r"   nextr3   r8   )r#   r;   eaten_tokensr   s       r%   eatzTokenProxy.eatC   s    +B/63|$$$$&&3|,,,,T\**##E*** 3|,,,, Lr'   c                     | S r!   r.   )r#   s    r%   __iter__zTokenProxy.__iter__M   s    r'   c                     | j         D ]E}|j        J |j        |j        }}|| j        cxk    r|k     rn .|j        | j        |z
           } nFt          | j                  }| xj        dz  c_        |S )Nr   )r5   r   r   r4   r   r>   r3   )r#   r9   r   r   r   s        r%   __next__zTokenProxy.__next__P   s     "1 	' 	'M $000&,m.?3E+++++++++%,T]U-BC , &&Er'   toc                 T    	 |                      |           dS # t          $ r Y dS w xY w)NTF)r@   StopIteration)r#   rE   s     r%   can_advancezTokenProxy.can_advance`   sA    	HHRLLL 4  	 	 	55	s    
'')r   r0   )r(   r)   r*   r
   r6   r   r   r:   r+   r@   rB   rD   boolrH   r.   r'   r%   r0   r0   2   s        6# 6$ 6 6 6 6
 !,/ ! ! ! ^!        #     c d      r'   r0   c            	           e Zd Zddedee         ddfdZddee         de	de
fd	Zdd
ee         de	de
fdZdd
ee         de	de
fdZ	 ddedee         de	de
fdZddede	de
fdZdededeeef         fdZdS )r   Nr   loggerr   c                 X    || _         |t          j        t                    }|| _        d S r!   )r   logging	getLoggerr(   rK   )r#   r   rK   s      r%   r6   zDriver.__init__l   s)    >&x00Fr'   Fr   debugc                    t          |          }t          j        | j                  }|                    |           d}d}g }dx}x}	x}
x}}d}|D ] }|\  }}	}
}}|
||fk    rE||f|
k    sJ ||f|
f            |
\  }}||k     r|d||z
  z  z  }|}d}||k     r||||         z  }|}|t
          j        t
          j        fv r'||	z  }|\  }}|	                    d          r|dz  }d}|t          j
        k    rt          j        |	         }|r1|J | j                            dt          j        |         |	|           |t          j        k    r,|                    t#          |	                     ||	z   }d}d}	n=|t          j        k    r-|                                }|                     ||          \  }}|                    t-          t.          |          |	||
f          r|r| j                            d            nnd}|t          j        t          j        hv r|}|\  }}|	                    d          r|t          j        k    r|dz  }d}|
J t          j        d	||	||
f          |j        J |j        S )
z4Parse a series of tokens and return the syntax tree.)proxyr   r   N 
z%s %r (prefix=%r)zStop.zincomplete input)r0   r   Parserr   setupr   COMMENTr   endswithr   OPopmaprK   rO   tok_nameINDENTr8   r"   DEDENTpop_partially_consume_prefixaddtokenr   r+   FSTRING_MIDDLE
ParseErrorrootnode)r#   r   rO   rQ   plinenocolumnindent_columnstypevaluer   r   	line_textprefix	quintuples_linenos_column_prefix_indent_cols                      r%   parse_tokenszDriver.parse_tokensr   s
    6""L&&	e$&1555u5u5sY 2	U 2	UI1:.D%Y((('5000FF3CU2K000%*"(H$$dh&788F%FFH$$ix88F%F((+666%!$>>$'' aKFFux}U+ '''!!')=uf   u|##%%c%jj111 5.%%,0022"&"@"@"U"Uzz$sD//565/BB  /K%%g...Fel333  NFF ~~d## 0D(D(D! $$$"#5tUVUOTTTz%%%zr'   streamc                 n    t          j        |j        | j                  }|                     ||          S )*Parse a stream and return the syntax tree.r   )r   generate_tokensreadliner   rp   )r#   rq   rO   r   s       r%   parse_stream_rawzDriver.parse_stream_raw   s1    )&/4<PPP  ///r'   c                 .    |                      ||          S )rs   )rw   )r#   rq   rO   s      r%   parse_streamzDriver.parse_stream   s    $$VU333r'   filenameencodingc                     t          ||          5 }|                     ||          cddd           S # 1 swxY w Y   dS )z(Parse a file and return the syntax tree.)r{   N)openry   )r#   rz   r{   rO   rq   s        r%   
parse_filezDriver.parse_file   s     (X... 	4&$$VU33	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4s   599textc                     t          j        t          j        |          j        | j                  }|                     ||          S )z*Parse a string and return the syntax tree.rt   )r   ru   ioStringIOrv   r   rp   )r#   r   rO   r   s       r%   parse_stringzDriver.parse_string   sE    )K&
 
 
   ///r'   rj   re   c                 l   g }d}d}d}|D ]}||z  }|rl|dk    re|                                 r6||k     r0d                    |          }||t          |          d          fc S |                    |           d}d}d}u|dv r|dz  }|dk    rd}|dk    rd}d}d                    |          |fS )	NrR   r   FrS   z 	r   T)stripjoinr"   r8   )	r#   rj   re   linescurrent_linecurrent_columnwait_for_nlcharress	            r%   r^   z Driver._partially_consume_prefix   s    	# 	#DD L #4<<#))++ 70G0G ggenn"F3s88::$66666LL...#%L%&N"'K!#!"!" #wwu~~|++r'   r!   )F)NF)r(   r)   r*   r   r   r   r6   r   r   rI   r   rp   r	   strrw   ry   Pathr~   r   r+   tupler^   r.   r'   r%   r   r   k   s         &1A T    B B8M#: B4 BTV B B B BH0 0r#w 0t 0 0 0 0 0
4 42c7 44 4B 4 4 4 4
 MR4 44(04EI4	4 4 4 40 0 0T 0b 0 0 0 0, ,S ,U3PS8_ , , , , , ,r'   gt	cache_dirr   c                 N   t           j                            |           \  }}|dk    rd}||z   d                    t	          t
          t          j                            z   dz   }|r=t           j                            |t           j                            |                    S |S )Nz.txtrR   .z.pickle)	ospathsplitextr   mapr   sysversion_infobasename)r   r   headtailnames        r%   _generate_pickle_namer      s    !!"%%JD$v~~$;#c3+;"<"<===	ID w||Irw'7'7'='=>>>r'   Grammar.txtTFgpsaveforcerK   c                 R   |t          j        t                    }|t          |           n|}|st	          ||           s>t          j        |           }|r'	 |                    |           n9# t          $ r Y n-w xY wn(t          j
                    }|                    |           |S )z'Load the grammar (maybe from a pickle).)rM   rN   r(   r   _newerr   generate_grammardumpOSErrorr   r   load)r   r   r   r   rK   gs         r%   r   r      s     ~"8,,&(j	r	"	"	"bB 
F2rNN 
!2266 	r



   	 O	r


Hs   A. .
A;:A;abc                    t           j                            |           sdS t           j                            |          sdS t           j                            |           t           j                            |          k    S )z0Inquire whether file a was written since file b.FT)r   r   existsgetmtime)r   r   s     r%   r   r     sc    7>>! u7>>! t7A"'"2"21"5"555r'   packagegrammar_sourcec                 j   t           j                            |          r%|rt          ||          nd}t	          ||          S t          t           j                            |          |          }t          j        | |          }|J t          j	                    }|
                    |           |S )a  Normally, loads a pickled grammar by doing
        pkgutil.get_data(package, pickled_grammar)
    where *pickled_grammar* is computed from *grammar_source* by adding the
    Python version and using a ``.pickle`` extension.

    However, if *grammar_source* is an extant file, load_grammar(grammar_source)
    is called instead. This facilitates using a packaged grammar file when needed
    but preserves load_grammar's automatic regeneration behavior when possible.

    N)r   )r   r   isfiler   r   r   pkgutilget_datar   r   loads)r   r   r   r   pickled_namedatar   s          r%   load_packaged_grammarr     s     
w~~n%% 3AJT">9===PTNr2222()9)9.)I)I9UULG\22DAGGDMMMHr'   argsc                      | s!t          t          j        dd                   } t          j        t          j        t          j        d           | D ]}t          |dd           dS )zMain program, when run as a script: produce grammar pickle files.

    Calls load_grammar for each argument, a path to a grammar text file.
    r   Nz%(message)s)levelrq   formatT)r   r   )r   r   argvrM   basicConfigINFOstdoutr   )r   r   s     r%   mainr   0  sk    
  #SXabb\""gl3:mTTTT 0 0Rd$/////4r'   __main__r!   )r   NTFN)0__doc__
__author____all__r   rM   r   r   r   
contextlibr   dataclassesr   r   r   typingr	   r
   r   r   r   r   r   blib2to3.pgen2.grammarr   blib2to3.pgen2.tokenizer   blib2to3.pytreer   rR   r   r   r   r   r   r   r   r   r0   r   r   rI   r   r   r   r   r(   exitr+   r.   r'   r%   <module>r      s,    3
^
$ 
			  				  



 % % % % % % ( ( ( ( ( ( ( (       E E E E E E E E E E E E E E E E E E * * * * * * 1 1 1 1 1 1       4 3 3 3 3 3 3 3 3 3 3 3 3 3S$$% , , , , , , , ,6 6 6 6 6 6 6 6r}, }, }, }, }, }, }, },@ d x~      #   	
 V    26c 6c 6d 6 6 6 6 DH "%2:4._   0
 
 
 
 
 
 zCHSSTTVV__ r'   