o
    "j                     @   s4   d dl Z d dlmZ ddlmZ G dd deZdS )    N)gast   )BaseTransformerc                   @   s$   e Zd Zdd Zdd Zdd ZdS )RegisterHookTransformerc                 C   s"   t t| _t t| _|| _d S )N)collectionsdefaultdictlistregister_hook_pos_mapassignment_pos_maproot)selfr    r   l/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/paddle/jit/dy2static/tensorhook_transformer.py__init__   s   
z RegisterHookTransformer.__init__c                 C   s   |  | j dS )z1
        Main function to transform AST.
        N)visitr   )r   r   r   r   	transform   s   z!RegisterHookTransformer.transformc                    s  t dd t D d }|d u r S | j}| j}tt jd ddD ]@} j| }t|tj	rPt|D ]}t|tj
rN|jdkrN|jj}|| | q6q$t|tjrd|jD ]
}	||	j | qYq$i }
| D ]%\}}|D ]}||vr|d|
|< qq|| D ]}||kr|d |
|<  nqqqqkg tt j}t|
 dd dd	D ]\}}||krq|| ||| q fd
d|D }| _ S )Nc                 s   s*    | ]}t |tjr|jd kr|V  qdS )register_hookN)
isinstancer   	Attributeattr).0noder   r   r   	<genexpr>%   s    

z<RegisterHookTransformer.visit_FunctionDef.<locals>.<genexpr>r   r   c                 S   s   | d S )Nr   r   )xr   r   r   <lambda>O   s    z;RegisterHookTransformer.visit_FunctionDef.<locals>.<lambda>T)keyreversec                    s   g | ]} j | qS r   )body)r   ifunc_defr   r   
<listcomp>V   s    z=RegisterHookTransformer.visit_FunctionDef.<locals>.<listcomp>)nextr   walkr	   r
   rangelenr   r   Exprr   r   valueidappendAssigntargetsitemssortedremoveinsert)r   r!   Zcheck_register_hookr	   r
   r   r   r   
param_nametargetZ	order_mapkZidx_listidxZassignment_idxZ
code_ordervZnew_bodyr   r    r   visit_FunctionDef"   s\   	





z)RegisterHookTransformer.visit_FunctionDefN)__name__
__module____qualname__r   r   r6   r   r   r   r   r      s    r   )r   Zpaddle.utilsr   Zbase_transformerr   r   r   r   r   r   <module>   s   