o
    ^i"                  	   @   s  d Z ddlZddlZddlZddlmZmZ ddl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 dd	lmZ dd
lmZ ddlmZmZ G dd deZdee
 dee fddZ	d3de dee
 defddZ!de dede"fddZ#dede fddZ$G dd de%Z&de de'e(e(f d e"dej)fd!d"Z*de dej)fd#d$Z+d%e d&e de fd'd(Z,dej)dee  fd)d*Z-dej)d+eej) d,ej)dee  fd-d.Z.dej)d+eej) dee  fd/d0Z/dej0deej) fd1d2Z1dS )4z/
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                   @      e Zd ZdZdS )InvalidInputz7Raised when input source code fails all parse attempts.N__name__
__module____qualname____doc__ r   r   R/var/www/html/stock_analysis/be/venv/lib/python3.10/site-packages/black/parsing.pyr          r   target_versionsreturnc                 C   sv   | s
t jt jt jgS g }t| tjst| tjs|t j t| tj	s*|t j t
dd | D r9|t j |S )Nc                 s   s    | ]
}t jt| v V  qd S N)r   PATTERN_MATCHINGr   ).0vr   r   r   	<genexpr>.   s    zget_grammars.<locals>.<genexpr>)r	   python_grammar_async_keywordspython_grammarpython_grammar_soft_keywordsr   r   ASYNC_IDENTIFIERSr   appendASYNC_KEYWORDSany)r   grammarsr   r   r   get_grammars   s"   	
r)   r   src_txtc                 C   s  |  ds	| d7 } tt|}|r!t|dd d}d|  }nd}i }|D ]}t|}z	|| d}W  n ty{ }	 z8|	j	d \}
}| 
 }z||
d  }W n ty]   d	}Y nw td
| d|
 d| d| ||j< W Y d}	~	q'd}	~	w ty } z#|jd \}
}td
| d|
 d| d|jd  ||j< W Y d}~q'd}~ww t|dksJ |t| }|dt|trttj|g}|S )z4Given a string with source, return the lib2to3 Node.
c                 S   s   | j S r   )value)tvr   r   r   <lambda>@   s    zlib2to3_parse.<locals>.<lambda>)keyz for target version  F   z<line number missing in source>zCannot parsez: :Nr   )endswithr)   setmaxprettyr
   Driverparse_stringr   context
splitlines
IndexErrorr   versionr   argslen
isinstancer   r   r   
file_input)r*   r   r(   max_tvtv_strerrorsgrammardrvresultpelinenocolumnlinesfaulty_lineteexcr   r   r   lib2to3_parse7   sL   

 	
rN   rD   c              
   C   s8   t |}z	|| d W dS  tttfy   Y dS w )NFT)r
   r7   r8   r   r   IndentationError)r*   rD   rE   r   r   r   matches_grammari   s   
rP   nodec                 C   s   t | }|S )z7Given a lib2to3 node, return its string representation.)str)rQ   coder   r   r   lib2to3_unparses   s   rT   c                   @   r   )ASTSafetyErrorzDRaised when Black's generated code is not equivalent to the old AST.Nr   r   r   r   r   rU   y   r   rU   srcr<   type_commentsc                C   sZ   d}t   t dt t dt tj| |||dW  d    S 1 s&w   Y  d S )Nz	<unknown>ignore)feature_versionrW   )warningscatch_warningssimplefilterSyntaxWarningDeprecationWarningastparse)rV   r<   rW   filenamer   r   r   _parse_single_version}   s   
$rb   c                 C   s   dd t dtjd d D }d}t|ddD ]$}z
t| |ddW   S  ty; } z|s1t|}W Y d }~qd }~ww t|ddD ]}z
t| |d	dW   S  tyW   Y qBw t|)
Nc                 S   s   g | ]}d |fqS )   r   )r   minorr   r   r   
<listcomp>       zparse_ast.<locals>.<listcomp>rc   r1   r0   T)reverse)rW   F)rangesysversion_infosortedrb   SyntaxErrorrR   )rV   versionsfirst_errorr<   er   r   r   	parse_ast   s"   rp   lineendr,   c                 C   s$   dd |  D }| |}| S )Nc                 S   s   g | ]}|  qS r   )strip)r   ir   r   r   re      rf   z_normalize.<locals>.<listcomp>)r:   joinrr   )rq   r,   stripped
normalizedr   r   r   
_normalize   s   
rw   c                 C   s
   t | g S )z=Simple visitor generating strings to compare ASTs by content.)_stringify_ast)rQ   r   r   r   stringify_ast   s   
ry   parent_stack
new_parentc                 c   s(    | | t| |E d H  |  d S r   )r%   rx   pop)rQ   rz   r{   r   r   r   _stringify_ast_with_new_parent   s   
r}   c              	   c   s   t | tjrt | jtr| jdkrd | _dt|  | jj dV  t	| j
D ]}t | tjr2 nzt| |}W n	 tyB   Y q(w dt|d   | dV  t |tr|D ]2}|dkr{t | tjr{t |tjr{t|D ]}t||| E d H  qnqXt |tjrt||| E d H  qXq(t |tjrt||| E d H  q(t | tjr|dkrt |trt|dkrt |d	 tjrtd
|}n|dkrt |tr| }n|}dt|d   |d|jj V  q(dt|  d| jj V  d S )Nuz    (r1   =targetsr,      r+   type_commentz,  # z)  # /)r?   r_   Constantr,   rR   kindr>   	__class__r   rk   _fields
TypeIgnoregetattrAttributeErrorlistDeleteTuple_unwrap_tuplesr}   ASTExprrw   rstrip)rQ   rz   fieldr,   itemeltrv   r   r   r   rx      sp   







 rx   c                 c   s4    | j D ]}t|tjrt|E d H  q|V  qd S r   )eltsr?   r_   r   r   )rQ   r   r   r   r   r      s   
r   )r   )2r   r_   ri   rZ   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   r4   r   r)   rR   rN   boolrP   rT   	ExceptionrU   tupleintr   rb   rp   rw   ry   r}   rx   r   r   r   r   r   r   <module>   sb     
2




"I