
    ^h"              	          S r SSKrSSKrSSKrSSKJrJr  SSKJrJ	r	J
r
Jr  SSKJr  SSKJr  SSKJr  SSKJr  SS	KJr  SS
KJr  SSKJrJr   " S S\5      rS\\
   S\\   4S jr S'S\ S\\
   S\4S jjr!S\ S\S\"4S jr#S\S\ 4S jr$ " S S\%5      r&S\ S\'\(\(4   S\"S\RR                  4S jr*S\ S\RR                  4S jr+S\ S\ S\ 4S  jr,S\RR                  S\\    4S! jr-S\RR                  S"\\RR                     S#\RR                  S\\    4S$ jr.S\RR                  S"\\RR                     S\\    4S% jr/S\R`                  S\\RR                     4S& jr1g)(z/
Parse Python code and perform AST validation.
    N)
CollectionIterator)VERSION_TO_FEATURESFeatureTargetVersionsupports_feature)syms)pygram)driver)Grammar)
ParseError)
TokenError)LeafNodec                       \ rS rSrSrSrg)InvalidInput   z7Raised when input source code fails all parse attempts. N__name__
__module____qualname____firstlineno____doc____static_attributes__r       G/home/james-whalen/.local/lib/python3.13/site-packages/black/parsing.pyr   r      s    Ar   r   target_versionsreturnc                    U (       d/  [         R                  [         R                  [         R                  /$ / n[	        U [
        R                  5      (       d>  [	        U [
        R                  5      (       d  UR                  [         R                  5        [	        U [
        R                  5      (       d  UR                  [         R                  5        [        S U  5       5      (       a  UR                  [         R                  5        U$ )Nc              3   V   #    U  H  n[         R                  [        U   ;   v   M!     g 7fN)r   PATTERN_MATCHINGr   ).0vs     r   	<genexpr>get_grammars.<locals>.<genexpr>.   s!     
W!7##':1'==s   '))r
   python_grammar_async_keywordspython_grammarpython_grammar_soft_keywordsr   r   ASYNC_IDENTIFIERSr#   appendASYNC_KEYWORDSany)r   grammarss     r   get_grammarsr0      s     00!!//
 	
 H22 0H0HII<<=OW-C-CDD--.

W
WWW;;< Or   src_txtc                 X   U R                  S5      (       d  U S-  n [        [        U5      5      nU(       a  [        US S9nSUR	                  5        3nOSn0 nU H,  n[
        R                  " U5      n UR                  U S5      n  O$   [!        U5      S:  d   eU[        U5         nUSe[#        U[$        5      (       a  ['        [(        R*                  U/5      nU$ ! [         aj  n	U	R                  S   u  pU R                  5       n XS-
     nO! [         a    Sn Of = f[        S	U S
U
 SU S
U 35      XVR                  '    Sn	A	M  Sn	A	f[         aM  nUR                  S   u  p[        S	U S
U
 SU S
UR                  S    35      XVR                  '    SnAGMH  SnAff = f)z4Given a string with source, return the lib2to3 Node.
c                     U R                   $ r"   )value)tvs    r   <lambda>lib2to3_parse.<locals>.<lambda>@   s    RXXr   )keyz for target version  F   z<line number missing in source>zCannot parsez: :Nr   )endswithr0   setmaxprettyr   Driverparse_stringr   context
splitlines
IndexErrorr   versionr   argslen
isinstancer   r   r	   
file_input)r1   r   r/   max_tvtv_strerrorsgrammardrvresultpelinenocolumnlinesfaulty_lineteexcs                   r   lib2to3_parserX   7   s    D!!4C01H_*=>''89FmmG$	%%gu5F	 4 6{aS[!t&$doox0M5  		ZZ]NF&&(E@#QJ/ @?@&2vhb&K=I'F??#  	WWQZNF&2vhb&BGGAJ<H'F??##	sI   6C  
F)*!EDED# E"D##&EF)AF$$F)rN   c                     [         R                  " U5      n UR                  U S5        g! [        [        [
        4 a     gf = f)NFT)r   rA   rB   r   r   IndentationError)r1   rN   rO   s      r   matches_grammarr[   i   sF    
--
 C%(  
$45 s   + AAnodec                     [        U 5      nU$ )z7Given a lib2to3 node, return its string representation.)str)r\   codes     r   lib2to3_unparser`   s   s    t9DKr   c                       \ rS rSrSrSrg)ASTSafetyErrory   zDRaised when Black's generated code is not equivalent to the old AST.r   Nr   r   r   r   rb   rb   y   s    Nr   rb   srcrF   type_commentsc                    Sn[         R                  " 5          [         R                  " S[        5        [         R                  " S[        5        [
        R                  " XXS9sS S S 5        $ ! , (       d  f       g = f)Nz	<unknown>ignore)feature_versionre   )warningscatch_warningssimplefilterSyntaxWarningDeprecationWarningastparse)rd   rF   re   filenames       r   _parse_single_versionrq   }   sS     H		 	 	"h6h(:;yy7
 
#	"	"s   AA--
A;c                 |   [        S[        R                  S   S-   5       Vs/ s H  nSU4PM	     nnSn[        USS9 H  n [	        XSS9s  $    [        USS9 H  n [	        XSS9s  $    [        U5      es  snf ! [
         a#  nU(       d  [        U5      n S nAM`   S nAMf  S nAff = f! [
         a     M_  f = f)N   r;   r:   T)reverse)re   F)rangesysversion_infosortedrq   SyntaxErrorr^   )rd   minorversionsfirst_errorrF   es         r   	parse_astr~      s    (-a1A1A!1Dq1H(IJ(IuE
(IHJK(D1	%(TJJ 2 (D1	(UKK 2 k
""# K  	%!!f 	%  		s/   A8	A=	B-=
B*B%%B*-
B;:B;lineendr5   c                     UR                  5        Vs/ s H  o"R                  5       PM     nnU R                  U5      nUR                  5       $ s  snf r"   )rD   stripjoin)r   r5   istripped
normalizeds        r   
_normalizer      sL     /4.>.>.@A.@779.@HAh'J 	 Bs   Ac                     [        U / 5      $ )z=Simple visitor generating strings to compare ASTs by content.)_stringify_ast)r\   s    r   stringify_astr      s    $##r   parent_stack
new_parentc              #   x   #    UR                  U5        [        X5       S h  vN   UR                  5         g  N7fr"   )r,   r   pop)r\   r   r   s      r   _stringify_ast_with_new_parentr      s4      
#d111 2s    :8:c              #     #    [        U [        R                  5      (       a6  [        U R                  [        5      (       a  U R
                  S:X  a  S U l        S[        U5      -   U R                  R                   S3v   [        U R                  5       GH  n[        U [        R                  5      (       a    GO [        X5      nS[        U5      S-   -   U S3v   [        U[        5      (       a  U H  nUS:X  af  [        U [        R                  5      (       aG  [        U[        R                   5      (       a(  [#        U5       H  n[%        XQU 5       S h  vN   M     Mo  [        U[        R&                  5      (       d  M  [%        XAU 5       S h  vN   M     GM  [        U[        R&                  5      (       a  [%        X1U 5       S h  vN   GMB  [        U [        R                  5      (       aY  US:X  aS  [        U[        5      (       a>  [        U5      S:  a/  [        US	   [        R(                  5      (       a  [+        S
U5      nO.US:X  a&  [        U[        5      (       a  UR-                  5       nOUnS[        U5      S-   -   U< SUR                  R                   3v   GM     S[        U5      -   SU R                  R                   3v   g ! [         a     GMT  f = f GN GN[ GN$7f)Nuz    (r;   =targetsr5      r3   type_commentz,  # z)  # /)rI   rn   Constantr5   r^   kindrH   	__class__r   rx   _fields
TypeIgnoregetattrAttributeErrorlistDeleteTuple_unwrap_tuplesr   ASTExprr   rstrip)r\   r   fieldr5   itemeltr   s          r   r   r      su    4&&tzz3''II
 	c,''()@)@(A
CC%dCNN++	#D0E 3|,q0125';;eT"" Y&"444"433-d3#At$    4
  cgg..=dRVWWW   sww''5e4PPP
 4..W$uc**%* |B/::
 (e4
.(Zs-C-C"\\^
"
S.234ZN COO,,-/i &r c,''(t~~/F/F.G
HHe  		
 X Qsb   B:K7=KBK7K.
'K7K7K19K7K4DK7
K+&K7*K++K71K74K7c              #      #    U R                    H;  n[        U[        R                  5      (       a  [	        U5       S h  vN   M7  Uv   M=     g  N7fr"   )eltsrI   rn   r   r   )r\   r   s     r   r   r      s:     yyc399%%%c***I	 *s   =AA A)r   )2r   rn   rv   ri   collections.abcr   r   
black.moder   r   r   r   black.nodesr	   blib2to3r
   blib2to3.pgen2r   blib2to3.pgen2.grammarr   blib2to3.pgen2.parser   blib2to3.pgen2.tokenizer   blib2to3.pytreer   r   
ValueErrorr   r>   r   r0   r^   rX   boolr[   r`   	Exceptionrb   tupleintr   rq   r~   r   r   r   r   r   r   r   r   r   <module>r      s    
  0 T T   ! * + . &B: B#m"4 g @ @B//#-m#</	/dS 7 t $ 3 OY O	
		
S#X	
:>	
WW	
#3 #377 #, C C $ $HSM $

''!%cgg<?GGc]FI FISWW FI(3- FIR x'8 r   