o
    "j|                     @   s  d dl Z ddlmZ ddlmZ ddlmZ ddlmZm	Z	 ddl
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 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& g Z'dd Z(G dd deZ)dS )    N   )logging_utils)AssertTransformer)BaseTransformer)BasicApiTransformerNameloadJstTransformer)BreakContinueTransformerBreakTransformOptimizer)CallTransformer)CastTransformer)CreateVariableTransformer)DecoratorTransformer)EarlyReturnTransformer)IfElseTransformer)LogicalTransformer)LoopTransformer)ReturnTransformer)TensorShapeTransformer)RegisterHookTransformer)TypeHintTransformer)ast_to_source_codec                 C   s,   t tjddv }|r| dt dS dS )z
    Judge wheter to apply optimized transformation, such as BreakTransformOptimizer.
    And not all optimized transformations are applied by default. It's controlled by
    'export FLAGS_optim_transformation=1'
    ZFLAGS_optim_transformation)1Truetrue   N)strosenvirongetinsertr	   )transformersflag r"   e/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/paddle/jit/dy2static/ast_transformer.pyapply_optimization/   s   r$   c                   @   s@   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dS )DygraphToStaticAstz9
    Main class to transform Dygraph to Static Graph
    c                 C   s   t  | _d S N)r   ZTranslatorLoggertranslator_loggerselfr"   r"   r#   __init__C   s   zDygraphToStaticAst.__init__c                 C   s   || _ d | _| | j  | j S r&   )rootdecorate_func_nametransfer_from_node_type)r)   r+   r"   r"   r#   get_static_astF   s   z!DygraphToStaticAst.get_static_astc                 C   s$   ||   | j|| j|j d S r&   )	transformr'   log_transformed_coder+   __name__)r)   transformernode	log_levelr"   r"   r#   _applyN   s   
zDygraphToStaticAst._applyc                 C   s   | j ddt| j  | | ttttt	t
ttttttttttg}t| t|D ]\}}| j|||d d q,| j tj| jd d S )Nr   zSource code: 
)r4   zAll Transformers)r'   logr   r+   visitr   r   r   r   r   r   r   r   r   r   r   r
   r   r   r   r   r$   	enumerater5   r0   r   ZLOG_AllTransformer)r)   r3   r    indexr2   r"   r"   r#   r-   T   s6   

z*DygraphToStaticAst.transfer_from_node_typec                 C   s    | j d u r	|j| _ | | |S r&   )r,   namegeneric_visit)r)   r3   r"   r"   r#   visit_FunctionDefw   s   

z$DygraphToStaticAst.visit_FunctionDefc                 C   s   | j sJ d| j S )zi
        Return the main function name which will be used as module name
        in ast_to_func.
        z%decorate_func_name shall not be None.)r,   r(   r"   r"   r#   get_module_name~   s   z"DygraphToStaticAst.get_module_nameN)
r1   
__module____qualname____doc__r*   r.   r5   r-   r<   r=   r"   r"   r"   r#   r%   >   s    #r%   )*r    r   Zassert_transformerr   Zbase_transformerr   Zbasic_api_transformerr   r   Zbreak_continue_transformerr   r	   Zcall_transformerr
   Zcast_transformerr   Zcreate_variable_transformerr   Zdecorator_transformerr   Zearly_return_transformerr   Zifelse_transformerr   Zlogical_transformerr   Zloop_transformerr   Zreturn_transformerr   Ztensor_shape_transformerr   Ztensorhook_transformerr   Ztypehint_transformerr   utilsr   __all__r$   r%   r"   r"   r"   r#   <module>   s,   