a
    g	g'                     @   sp  U d Z ddlZddlZddlZddlmZmZmZmZm	Z	m
Z
mZmZ ejdk r^ddlmZ nddl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# ee$d< e% dkZ&zddl'm(Z( W nD e)yB   ejdk r:e&s:e*dej+d e,d neZ(Y n0 dZ-ee$d< G dd de.Z/e	e ee dddZ0d4e1ee e#dddZ2e1ee3dd d!Z4e#e1d"d#d$Z5e1e
e6e6f e3eej7e(j7f d%d&d'Z8e1eej7e(j7f d(d)d*Z9e(j7Z:eee(j7  e$d+< e1e1e1d,d-d.Z;d5eej7e(j7f e6ee1 d/d0d1Z<eej7e(j7f eej7e(j7f d"d2d3Z=dS )6z/
Parse Python code and perform AST validation.
    N)AnyIterableIteratorListSetTupleTypeUnion      )Final)VERSION_TO_FEATURESFeatureTargetVersionsupports_feature)syms)pygram)driver)Grammar)
ParseError)
TokenError)LeafNodeast3PyPy)r   zThe typed_ast package is required but not installed.
You can upgrade to Python 3.8+ or install typed_ast with
`python3 -m pip install typed-ast`.)file   z-Python 2 support was removed in version 22.0.PY2_HINTc                   @   s   e Zd ZdZdS )InvalidInputz7Raised when input source code fails all parse attempts.N)__name__
__module____qualname____doc__ r$   r$   P/var/www/html/llm_bihealth/app/venv/lib/python3.9/site-packages/black/parsing.pyr   /   s   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	sT|t j t
dd | D rr|t j |S )Nc                 s   s   | ]}t jt| v V  qd S )N)r   PATTERN_MATCHINGr   ).0vr$   r$   r%   	<genexpr>K       zget_grammars.<locals>.<genexpr>)r   ZBpython_grammar_no_print_statement_no_exec_statement_async_keywordsZ3python_grammar_no_print_statement_no_exec_statementZpython_grammar_soft_keywordsr   r   ZASYNC_IDENTIFIERSr(   appendZASYNC_KEYWORDSany)r&   grammarsr$   r$   r%   get_grammars3   s&    	
r0   r$   )src_txtr&   r'   c                 C   s  |  ds| d7 } tt|}i }|D ]}t|}z|| d}W  qW q& ty } zj|jd \}}	|  }
z|
|d  }W n t	y   d}Y n0 t
d| d|	 d| ||j< W Y d}~q&d}~0  ty( } z@|jd \}}	t
d| d|	 d|jd	  ||j< W Y d}~q&d}~0 0 q&t|dks>J |t| }t| tjsft| tjr|jd	 }| dt }t
|d|dt|trttj|g}|S )
z4Given a string with source, return the lib2to3 Node.
Tr   z<line number missing in source>zCannot parse: :z: Nr   )endswithr0   setr   Driverparse_stringr   context
splitlines
IndexErrorr   versionr   argslenmaxmatches_grammarr   Zpython_grammarZ!python_grammar_no_print_statementr   
isinstancer   r   r   Z
file_input)r1   r&   r/   errorsgrammardrvresultpelinenocolumnlinesZfaulty_lineteexcZoriginal_msgmsgr$   r$   r%   lib2to3_parseT   sH    



"

rL   )r1   rB   r'   c              
   C   s>   t |}z|| d W n tttfy4   Y dS 0 dS d S )NTF)r   r6   r7   r   r   IndentationError)r1   rB   rC   r$   r$   r%   r?      s    
r?   )noder'   c                 C   s   t | }|S )z7Given a lib2to3 node, return its string representation.)str)rN   coder$   r$   r%   lib2to3_unparse   s    rQ   )srcr;   type_commentsr'   c                C   s|   d}t jdkr(|dkr(tj| |||dS trTt jdkrFtj| ||dS t| |S n$|rltj| ||d dS t| |S d S )Nz	<unknown>r
   r   )feature_versionrS   rS   r   )rU   )sysversion_infoastparse_IS_PYPYr   )rR   r;   rS   filenamer$   r$   r%   parse_single_version   s    
r]   )rR   r'   c                 C   s   dd t dtjd d D }d}t|ddD ]J}zt| |ddW   S  tyv } z|sbt|}W Y d }~q.d }~0 0 q.t|ddD ],}zt| |d	dW   S  ty   Y q0 qt|d S )
Nc                 S   s   g | ]}d |fqS rT   r$   )r)   minorr$   r$   r%   
<listcomp>   r,   zparse_ast.<locals>.<listcomp>r   r    T)reverserV   F)rangerW   rX   sortedr]   SyntaxErrorrO   )rR   versionsZfirst_errorr;   er$   r$   r%   	parse_ast   s     rg   ast3_AST)lineendvaluer'   c                 C   s$   dd |  D }| |}| S )Nc                 S   s   g | ]}|  qS r$   )strip)r)   ir$   r$   r%   r_      r,   z_normalize.<locals>.<listcomp>)r9   joinrk   )ri   rj   stripped
normalizedr$   r$   r%   
_normalize   s    
rp   )rN   depthr'   c              	   c   s  t | } d|  | jj dV  t| jD ]}tr>tjdk sltj	f}tjdkr\|t
j	f7 }t| |rl qzt| |}W n ty   Y q*Y n0 d|d   | dV  t|tr<|D ]~}|dkrt| t
jtjfrt|t
jtjfr|jD ]}t||d E dH  qqt|t
jtjfrt||d E dH  qq*t|t
jtfrdt||d E dH  q*t| t
jr|d	krt|trtd
|}n|}d|d   |d|jj V  q*d|  d| jj V  dS )z=Simple visitor generating strings to compare ASTs by content.z  (r
   r   =targets   Nrj   r2   z,  # z)  # /)fixup_ast_constants	__class__r    rc   _fieldsr[   rW   rX   r   
TypeIgnorerY   r@   getattrAttributeErrorlistDeleter   eltsstringify_astASTrh   ConstantrO   rp   )rN   rq   fieldZtype_ignore_classesrj   itemeltro   r$   r$   r%   r      sL    




"r   c                 C   sl   t | tjtjtjtjfr(tj| jdS t | tjtjfrHtj| jdS t | tj	tj	frhtj| j
dS | S )z,Map ast nodes deprecated in 3.8 to Constant.)rj   )r@   rY   Strr   Bytesr   sNumnNameConstantrj   )rN   r$   r$   r%   rv     s    rv   )r$   )r   )>r#   rY   platformrW   typingr   r   r   r   r   r   r   r	   rX   Ztyping_extensionsr   Z
black.moder   r   r   r   Zblack.nodesr   Zblib2to3r   Zblib2to3.pgen2r   Zblib2to3.pgen2.grammarr   Zblib2to3.pgen2.parser   Zblib2to3.pgen2.tokenizer   Zblib2to3.pytreer   r   __annotations__python_implementationr[   Z	typed_astr   ImportErrorprintstderrexitr   
ValueErrorr   r0   rO   rL   boolr?   rQ   intr   r]   rg   rh   rp   r   rv   r$   r$   r$   r%   <module>   sR   (

!2

$C