a
    e	g6                     @   s   d Z ddlZddlZddlmZ ddlmZ ddlmZ ddlmZ h dZe	dZ
ee dd
dZG dd dejZG dd dejZG dd dejZG dd dZdS )zyHandles parsing of Python code.

Parsing to AST is done via _ast on Python > 2.5, otherwise the compiler
module is used.
    N)	_ast_util)compat)
exceptions)util>   FalseNoneTrueprintargexecc              
   K   sl   zt | d|W S  tyf } z>tjdt jjt | dd f fi ||W Y d}~n
d}~0 0 dS )zParse an expression into ASTz	<unknown>z(%s) %s (%r)r   2   N)	r   parse	Exceptionr   ZSyntaxExceptionr   Zexception_as	__class____name__)codemodeexception_kwargse r   P/var/www/html/llm_bihealth/app/venv/lib/python3.9/site-packages/mako/pyparser.pyr       s    

r   c                   @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
e
 ZZdd Zdd Zdd Zdd Zdd Zdd Zdd ZdS ) FindIdentifiersc                 K   s$   d| _ d| _t | _|| _|| _d S NF)in_functionin_assign_targetssetlocal_ident_stacklistenerr   selfr   r   r   r   r   __init__2   s
    zFindIdentifiers.__init__c                 C   s&   | j s| jj| n| j| d S N)r   r   declared_identifiersaddr   )r   namer   r   r   _add_declared9   s    zFindIdentifiers._add_declaredc                 C   s   |  |j d S r!   )r%   r$   r   noder   r   r   visit_ClassDef?   s    zFindIdentifiers.visit_ClassDefc                 C   s8   |  |j | j}d| _|jD ]}|  | q|| _d S NT)visitvaluer   targets)r   r'   Zin_anr   r   r   visit_AssignB   s    
zFindIdentifiers.visit_Assignc                 C   sF   |j d ur| |j  |jd ur,| |j |jD ]}| | q2d S r!   )r$   r%   typer*   bodyr   r'   Z	statementr   r   r   visit_ExceptHandlerN   s    


z#FindIdentifiers.visit_ExceptHandlerc                 G   s   |  |d d S r)   )_visit_function)r   r'   argsr   r   r   visit_LambdaV   s    zFindIdentifiers.visit_Lambdac                 C   s   |  |j | |d d S r   )r%   r$   r3   r&   r   r   r   visit_FunctionDefY   s    z!FindIdentifiers.visit_FunctionDefc                 C   s.   | j r |jD ]}| |j qn
| | d S r!   r   
generatorsr*   itergeneric_visitr   r'   compr   r   r   visit_ListComp]   s    
zFindIdentifiers.visit_ListCompc                 C   s.   | j r |jD ]}| |j qn
| | d S r!   r7   r;   r   r   r   visit_DictCompf   s    
zFindIdentifiers.visit_DictCompc                 c   s.   |D ]$}t |tjr"|jE d H  q|V  qd S r!   )
isinstance_astTupleelts)r   r4   r
   r   r   r   _expand_tuplesm   s    zFindIdentifiers._expand_tuplesc                 C   sj   | j }d| _ | j}|dd | |jjD | _|rD| |j n|jD ]}| | qJ|| _ || _d S )NTc                 S   s   g | ]}t |qS r   arg_id.0r
   r   r   r   
<listcomp>       z3FindIdentifiers._visit_function.<locals>.<listcomp>)r   r   unionrC   r4   r*   r0   )r   r'   islambdainfr   r-   r   r   r   r3   t   s    
zFindIdentifiers._visit_functionc                 C   sH   |  |j |  |j |jD ]}|  | q|jD ]}|  | q4d S r!   )r*   r9   targetr0   orelser1   r   r   r   	visit_For   s    

zFindIdentifiers.visit_Forc                 C   sT   t |jtjr| |j n4|jtvrP|j| jjvrP|j| j	vrP| jj
|j d S r!   )r?   ctxr@   Storer%   idreservedr   r"   r   undeclared_identifiersr#   r&   r   r   r   
visit_Name   s    
zFindIdentifiers.visit_Namec                 C   s>   |j D ]2}|jd ur"| |j q| |jdd  qd S )N.r   )namesasnamer%   r$   splitr   r'   r$   r   r   r   visit_Import   s    

zFindIdentifiers.visit_Importc                 C   sR   |j D ]F}|jd ur"| |j q|jdkr@tjdi | jq| |j qd S )N*'import *' is not supported, since all identifier names must be explicitly declared.  Please use the form 'from <modulename> import <name1>, <name2>, ...' instead.)r]   )rW   rX   r%   r$   r   ZCompileExceptionr   rZ   r   r   r   visit_ImportFrom   s    


 z FindIdentifiers.visit_ImportFromN)r   
__module____qualname__r    r%   r(   r.   r2   r5   r6   r=   visit_SetCompvisit_GeneratorExpr>   rC   r3   rO   rU   r[   r^   r   r   r   r   r   1   s    
r   c                   @   s   e Zd Zdd Zdd ZdS )	FindTuplec                 K   s   || _ || _|| _d S r!   )r   r   code_factory)r   r   rd   r   r   r   r   r       s    zFindTuple.__init__c                 C   sx   |j D ]l}| j|fi | j}| jj| | jjt|  | jj	}|
|j	| j_	| jj}|
|j| j_qd S r!   )rB   rd   r   r   Zcodeargsappendr4   ExpressionGeneratorr+   r"   rJ   rT   )r   r'   r-   pZldiZluir   r   r   visit_Tuple   s    
zFindTuple.visit_TupleN)r   r_   r`   r    rh   r   r   r   r   rc      s   rc   c                   @   s   e Zd Zdd Zdd ZdS )	ParseFuncc                 K   s   || _ || _d S r!   )r   r   r   r   r   r   r       s    zParseFunc.__init__c                 C   s   |j | j_dd |jjD }|jjr4||jjj dd |jjD }|jjr^||jjj || j_	|jj
| j_
|| j_|jj| j_|jj| j_|jj| j_d S )Nc                 S   s   g | ]}t |qS r   rD   rF   r   r   r   rH      rI   z/ParseFunc.visit_FunctionDef.<locals>.<listcomp>c                 S   s   g | ]}t |qS r   rD   rF   r   r   r   rH      rI   )r$   r   funcnamer4   varargre   r
   
kwonlyargskwargargnamesdefaults
kwargnameskw_defaults
kwdefaultsvarargskwargs)r   r'   rn   rp   r   r   r   r6      s    
zParseFunc.visit_FunctionDefN)r   r_   r`   r    r6   r   r   r   r   ri      s   ri   c                   @   s   e Zd Zdd Zdd ZdS )rf   c                 C   s   t d| _| j| d S )Nz    )r   ZSourceGenerator	generatorr*   )r   Zastnoder   r   r   r       s    zExpressionGenerator.__init__c                 C   s   d | jjS )N )joinru   result)r   r   r   r   r+      s    zExpressionGenerator.valueN)r   r_   r`   r    r+   r   r   r   r   rf      s   rf   )r   )__doc__operatorr@   Zmakor   r   r   r   rS   
attrgetterrE   Zrestore__astr   NodeVisitorr   rc   ri   rf   r   r   r   r   <module>   s   


 