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 g Z	dZ
G dd„ dƒZd	d
„ ZG dd„ dƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZeddd„ƒZdS )é    N)Úpir)Úcore)Úswitch_to_static_graph©Ú	get_flagsé2   c                   @   s   e Zd ZdZdZdZdS )ÚSubGraphRoler   é   é   N)Ú__name__Ú
__module__Ú__qualname__ÚInferÚForwardÚBackward© r   r   úe/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/paddle/jit/dy2static/export_subgraph.pyr      s    r   c                  C   s   d} t | ƒ|  }|S )NZFLAGS_pir_subgraph_saving_dirr   )ÚflagÚvaluer   r   r   Úget_saving_dir!   s   r   c                   @   sT   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
dd„ ZdS )ÚBaseExporterc                 C   s$   || _ || _|| _tƒ | _d| _d S ©Nr   )Úpp_layerÚprogramÚroler   Úroot_dirÚ	fetch_col)ÚselfZpartial_program_layerr   r   r   r   r   Ú__init__(   s
   
zBaseExporter.__init__c                 C   s    |   ¡ }|  ¡ }|  ||¡ d S ©N)Úgenerate_saving_pathÚtranslate_into_pirÚ_save)r   Zsaving_pathÚpir_programr   r   r   Úsave/   s   zBaseExporter.savec                 C   sB   t |ƒ}t|dƒ}| |¡ W d   ƒ d S 1 sw   Y  d S )NÚw)ÚstrÚopenÚwrite)r   r#   ÚpathÚcontentÚfr   r   r   r"   9   s   "ÿzBaseExporter._savec                 C   s   t dƒ‚)z?
        Return feed/fetch/intermediate var name list.
        z$Need to implement parse_inout method)ÚNotImplementedError©r   r   r   r   Úparse_inout>   s   zBaseExporter.parse_inoutc                 C   sD   |   ¡ \}}}|  |d¡ |  |d¡ |  |d¡ t | jj¡}|S )NZ	pt_input_Z
pt_output_Zpt_intermediate_)r.   Úinsert_feed_opÚinsert_fetch_opr   Ztranslate_to_pirr   Údesc)r   Z	feed_listZ
fetch_listÚ
inter_outsr#   r   r   r   r!   D   s   zBaseExporter.translate_into_pirc                 C   sˆ   | j j}|d us
J ‚dd„ | j d¡jd t… D ƒ}g d¢| j }|d |¡d t…  d }tj	 | j
|¡}|  |¡ tj	 | j
||¡S )Nc                 S   s   g | ]}|j ‘qS r   )Útype)Ú.0Úopr   r   r   Ú
<listcomp>R   s    ÿz5BaseExporter.generate_saving_path.<locals>.<listcomp>r   )Zinfer_Zforward_Z	backward_Ú_z.txt)r   Z_debug_namer   ÚblockÚopsÚMAX_FILE_PATH_LENr   ÚjoinÚosr)   r   Úverify_saving_dir)r   Z
layer_nameZops_nameÚprefixÚ	file_nameZ
saving_dirr   r   r   r    O   s   ÿ
z!BaseExporter.generate_saving_pathc                 C   s   t j |¡st  |¡ d S d S r   )r<   r)   ÚexistsÚmakedirs)r   Zdir_pathr   r   r   r=   [   s   ÿzBaseExporter.verify_saving_dirc              
   C   sz   | j  d¡}| ¡  t|ƒD ](\}}|t|ƒ }| ||¡ | |¡}|jdi d|i|j|j	d|j
dœd q| ¡  d S )Nr   ÚdataÚout)ÚshapeÚdtypeZplaceÚname©r3   ÚinputsÚoutputsÚattrs)r   r8   ÚsortÚ	enumerater&   Ú_rename_varÚvarZ_prepend_oprD   rE   rF   Ú_sync_with_cpp)r   ZintputsÚrename_prefixÚglobal_blockÚiÚold_nameÚnew_namerC   r   r   r   r/   _   s"   
üüzBaseExporter.insert_feed_opc           	      C   sœ   | j  d¡}|jdtjjjdd}| ¡  t|ƒD ].\}}|t	|ƒ }| 
||¡ | |¡}|jdd|gid|gid| jid	 |  jd
7  _q| ¡  d S )Nr   Zfetch_outputsF)rF   r3   ZpersistableÚfetchÚXZOutÚcolrG   r	   )r   r8   Z
create_varr   ZVarDescZVarTypeZ
FETCH_LISTrK   rL   r&   rM   rN   Z	append_opr   rO   )	r   rI   rP   rQ   Z	fetch_varrR   rS   rT   Znew_varr   r   r   r0   s   s&   ý
üzBaseExporter.insert_fetch_opN)r   r   r   r   r$   r"   r.   r!   r    r=   r/   r0   r   r   r   r   r   '   s    
r   c                       ó$   e Zd Z‡ fdd„Zdd„ Z‡  ZS )ÚInferExporterc                    s   t ƒ j|i |¤Ž d S r   )Úsuperr   )r   ÚargsÚkwargs©Ú	__class__r   r   r   Š   s   zInferExporter.__init__c                 C   sl   g g }}| j  d¡}| jj ¡ | jj }| jj ¡ }|D ]}| |j¡ q|D ]}| |j¡ q(||g fS r   )	r   r8   r   Ú_inputsÚtolistÚ_paramsÚ_outputsÚappendrF   )r   rH   rI   rQ   Ú
raw_inputsÚraw_outputsrN   r   r   r   r.      s   

zInferExporter.parse_inout©r   r   r   r   r.   Ú__classcell__r   r   r]   r   rY   ‰   s    rY   c                       rX   )ÚTrainFwdExporterc                    s   t ƒ  |||¡ || _d S r   )rZ   r   Úraw_inter_outs)r   r   Úcopy_programr   ri   r]   r   r   r   œ   s   
zTrainFwdExporter.__init__c                    s°   g g }}ˆ j  d¡}ˆ jj ¡ ˆ jj }ˆ jj ¡ }‡ fdd„ˆ jD ƒ}|D ]}| |j	¡ |j	|v r:| 
|j	¡ q'|D ]}| |j	¡ |j	|v rP| 
|j	¡ q=||t|ƒfS )Nr   c                    s"   h | ]}ˆ j  d ¡ |¡r|’qS )r   )r   r8   Úhas_var)r4   rF   r-   r   r   Ú	<setcomp>¦   s    ýÿz/TrainFwdExporter.parse_inout.<locals>.<setcomp>)r   r8   r   r_   r`   ra   rb   ri   rc   rF   ÚremoveÚlist)r   rH   rI   rQ   rd   re   r2   rN   r   r-   r   r.       s$   

þ
€
€zTrainFwdExporter.parse_inoutrf   r   r   r]   r   rh   ›   s    rh   c                       rX   )ÚTrainBwdExporterc                    s    t ƒ  |||¡ || _|| _d S r   )rZ   r   rd   re   )r   r   rj   r   rd   re   r]   r   r   r   ¹   s   
zTrainBwdExporter.__init__c                 C   s¤   g g }}| j  d¡}| jD ]}| |¡r| |¡ q| jj ¡ D ]}|jd }|| jvr7| |¡r7| |¡ q!| j	D ]}| |¡rL|| jvrL| |¡ q;||g fS )Nr   z@GRAD)
r   r8   rd   rk   rc   r   rb   r`   rF   re   )r   rH   rI   rQ   Úvar_namerN   Zinit_grad_namer   r   r   r.   ¾   s(   



€
ÿ
€
ÿ

€
zTrainBwdExporter.parse_inoutrf   r   r   r]   r   ro   ¸   s    ro   c                 C   s~   t ƒ }|sd S | ¡ }|tjkrt| ||ƒ ¡  d S |tjkr*t| |||ƒ ¡  d S |tjkr;t	| ||||ƒ ¡  d S t
dƒ‚)Nz(role only support Infer/Forward/Backward)r   Úcloner   r   rY   r$   r   rh   r   ro   ÚRuntimeError)r   r   r   Zshared_inputsr2   Zroot_saving_dirrj   r   r   r   Úpir_exporterØ   s   



ÿ
rs   )NN)r<   Zpaddler   Zpaddle.baser   Zpaddle.base.dygraph.baser   Zpaddle.base.frameworkr   Ú__all__r:   r   r   r   rY   rh   ro   rs   r   r   r   r   Ú<module>   s   b 