o
    "jF                     @   s  d dl Z d dlZd dlZd dlmZ d dlZd dlm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 d dlmZ d d	lmZ g d
Ze eZee j e jddZe  Zee e e dZ!dZ"dZ#ej$j%j&ej$j%j'gZ(dgZ)d8ddZ*dd Z+dd Z,d9ddZ-dd Z.d:dd Z/d!d" Z0d#d$ Z1d%d& Z2d'd( Z3d)d* Z4d+d, Z5d-d. Z6d/d0 Z7d1d2 Z8	3	d;d4d5Z9d6d7 Z:dS )<    N)OrderedDict)text_format)base)core)Program)framework_pb2)draw_block_graphviz)io_utils)load_programsave_programprogram_type_transcheck_saved_vars_try_dumpparse_programcheck_pruned_program_varsgraphvizz)%(asctime)s - %(levelname)s - %(message)s)fmtzvars_persistable.logzvars_all.logzops.logZlookup_tableFc                 C   s   |rt | S t| S N)load_program_textload_program_binary)model_filenameis_text r   h/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/paddle/incubate/distributed/fleet/utils.pyr
   ;   s   r
   c                 C   s<   t | d}| }W d   n1 sw   Y  t|S )z$load program from binary string filerbN)openreadr   parse_from_string)r   fZprogram_desc_strr   r   r   r   A   s   

r   c                 C   sT   t | d}| }W d   n1 sw   Y  t }t|| t| S )z*load program from human-readable text filerN)	r   r   r   ZProgramDescr   ZMerger   r   ZSerializeToString)r   r   Zprogram_desc_textZ	prog_descr   r   r   r   H   s   
r   	__model__c                 C   s   |r!t |d}|t|  W d    d S 1 sw   Y  d S t |d}|| j  W d    d S 1 s:w   Y  d S )Nwwb)r   writestrdescZserialize_to_string)programr   r   r   r   r   r   r   R   s   ""r   c           	      C   s   d}dd |  D }t|}t|}td|  |D ]T}|| }|jtv r+ |S z	|  |}W n t	yR } zt
d|  t
| W Y d }~qd }~ww |j|jks_|j|jkrqt
d||j|j|j|j d}q|S )NTc                 S   s    g | ]}t |r|j|fqS r   )r	   is_persistablename.0vr   r   r   
<listcomp>^   s    z-check_pruned_program_vars.<locals>.<listcomp>z$persistable vars in pruned program: z>not find variable '%s' in train program. please check pruning.zbvariable: {} not match. in pruned program shape: {} dtype:{}, in train program shape: {} dtype: {}F)	list_varsr   listloggerinfotypefeed_fetch_type_listglobal_blockvar
ValueErrorerrorshapedtypeformat)	Z
train_progZpruned_progZis_matchZpruned_varsZpruned_vars_namevar_namer3   Ztrain_prog_varer   r   r   r   [   sL   

	r    debugc                 C   sb   t j||d }t j||d }t| |d dd|d|g}tj|tjtjtjd}|  d S )Nz.dotz.pdf)pathdotz-Tpdfz-o)stdinstdoutstderr)osr=   joinr   
subprocessPopenPIPEwait)block
output_dirfilenameZdot_pathZpdf_pathcmdpr   r   r   r      s   r   c                 C   sF   t tj| ||}|r|d n|d }t|tj| |d|  |S )Nz.binz.pbtxt   )r
   rB   r=   rC   r   )Zprog_dirZprog_fnr   progZprog_out_fnr   r   r   r      s   r   c                 C   s    | j dd|gii d|id d S )NsaveX	file_pathr0   ZinputsZoutputsattrsZ	append_oprH   r3   r=   r   r   r   append_save_op   s   
rV   c                 C   s    | j di d|gid|id d S )NloadZOutrQ   rR   rT   rU   r   r   r   append_load_op   s   
rX   c           
      C   s   t  }t  }t |}t|}t |# tjj|||d}	t	|
 |	| |j|| ig d W d    d S 1 s<w   Y  d S N)r6   r7   )feed
fetch_list)r   r   CPUPlaceExecutorr-   program_guardpaddlestaticdatarV   r2   run)
Znp_arrayr9   
shape_listr7   	save_pathr%   placeexer6   d0_datar   r   r   save_var   s   
"rh   c           	      C   s~   t  }t  }t |}t |# tjj| ||d}t|	 || |j
i |gd}|W  d    S 1 s8w   Y  d S rY   )r   r   r\   r]   r^   r_   r`   ra   rX   r2   rb   )	r9   rc   r7   rd   r%   re   rf   rg   Zoutsr   r   r   load_var   s   
$ri   c           
      C   s   g }t |ttfrt|}d}|D ]}|| }q|}n|g}| g| }||  }t|dD ]3}| d}dd |D }t||kr_|d | }	||d  }|t	|	
| t||ksBq,|S )NrM   r    c                 S   s   g | ]}t |qS r   )float)r)   dr   r   r   r+      s    zreader.<locals>.<listcomp>)
isinstancer-   tupler   stripsplitlenappendnparrayZreshape)

batch_sizefndimra   r6   _tempxlinefieldstmpr   r   r   reader   s(   

r}   c                 C   s0   g }t |D ]\}}|t| |||  q|S r   )	enumeraterr   r}   )ru   feeded_vars_dimsfeeded_vars_filelist
batch_feedirv   r   r   r   feed_gen   s   r   c           %         s  t  }t |}	t j }
t |
] |rt| ||}tjj	j
| |	||d\}}dd |D }|D ]=}t  |j}|d usIJ d|j t| j}|j|v s]J |jd ||j}||krqtd||j|q4dd |D }|std	 |std
 |}|} jd ur| jkrtd| j  j} }g }t|jD ]\}}|jd |jdkr|| q|d d d D ]}|| q|j d ur"||j kr"td||j  fdd|j D } }g }t|jD ]\}}|jd |jdkr|| q|d d d D ]}|| qt!dd |D }g t" jt" j#  krCt" j$ksFJ  J t%t" jD ]C} & j| }t' j#| t(t)fsk j#| f}nt) j#| }| j#|< |jdd  }||krtd j| ||qM j*st+d t%t" jD ]`} & j| }|j,dkrЈtjtj--t)|gt( j#|   j$| d q|j,dkrtjtj--t)|gt( j#|   j$| d}t .|dg| g| qtd|	j/fddt|D ||d}n7t+d j* d  fddt%t" jD } t j0| |d}!t1| j# j*}"|"g}#|	j/|!2|#||d}t|D ]\}}$t+d |$j  t+d!||   qP|W  d    S 1 suw   Y  d S )"N)r   Zparams_filenamec                 S   s   i | ]}|j t|j qS r   )r'   rn   r$   r6   )r)   each_varr   r   r   
<dictcomp>   s    z'try_load_model_vars.<locals>.<dictcomp>zcan't not find var: zMUST in var listzShape not matching: the Program requires a parameter with a shape of ({}), while the loaded parameter (namely [ {} ]) has a shape of  ({}).c                 S      g | ]}|j qS r   r'   r(   r   r   r   r+         z'try_load_model_vars.<locals>.<listcomp>zno feed targets in program.zno fetch targets in program.zQfeed vars in program and config are diff: feed in program: {}. feed in config {}.FrZ   zTfetch vars in program and config are diff: fetch in program: {}. fetch in config {}.c                    s   g | ]	}   |qS r   )r2   r3   r)   r   )inference_programr   r   r+   6  s    fetchc                 s   s    | ]}|j d kV  qdS )r   N)	lod_levelr(   r   r   r   	<genexpr>E  s    z&try_load_model_vars.<locals>.<genexpr>rM   zSfeed variable '{}' shape not match. infer program  shape: {}. feed tensor shape: {}zgenerate random feed vars.r   )r7   zOvars with lod_level >= 2 is not supported now in this infer program check tool.c                    s   i | ]	\}}| | qS r   r   )r)   r   r'   )feed_tensorsr   r   r     s    )rZ   r[   return_numpyzload feed vars from files: .c                    s    g | ]}   j| qS r   )r2   r3   feeded_vars_namesr   )feed_configr   r   r   r+     s    )Z	feed_listre   zfetch_targets name: %szfetch_targets: )3r   r\   r]   r   ZScopeZscope_guardr   r_   r`   ioZload_inference_modelZglobal_scopeZfind_varr'   rs   rt   Z
get_tensorr6   getRuntimeErrorr8   r.   warningr   r2   r~   opsr$   Zset_is_targetr0   rr   Z
_remove_opZfetch_vars_namesallrq   r   Zfeeded_vars_typesranger3   rm   r-   rn   r   r/   r   randomZcreate_lod_tensorrb   Z
DataFeederr   rZ   )%dump_dirdump_prog_fnis_text_dump_programru   r   fetch_configsave_filenamesaved_paramsre   rf   scopeZfeed_target_namesZfetch_targetsZorig_para_shaper   Zvar_tempZ	new_shapeZ
orig_shapeZfetch_targets_namesr[   Zfeed_name_listr2   Zneed_to_remove_op_indexr   opindexr   r3   Ztensor_shapeZ	var_shapetresultsZ	feed_varsZfeederr   slotsr*   r   )r   r   r   r   try_load_model_vars   s\  


		










	
	

 &r   c                 C   sN   t  }|  jD ]}|jtv r$|j|vr$td|j d ||j qd S )Nzfind op type 'z@' in program, please check if your program is pruned correctly !)setr2   r   r0   not_expected_op_typesr.   r   add)rN   Zop_types_setr   r   r   r   check_not_expected_ops  s   r   rM   c           	   	   C   s^   t tj| ||}dd | D }tddd |D   t| t| |||||||S )Nc                 S      g | ]	}t |r|qS r   r	   r&   r(   r   r   r   r+     
    
z-check_saved_vars_try_dump.<locals>.<listcomp>z"persistable vars in dump program: c                 S   r   r   r   r(   r   r   r   r+     r   )	r
   rB   r=   rC   r,   r.   r/   r   r   )	r   r   r   r   r   ru   r   Z	dump_progr   r   r   r   r     s(   	r   c           	      C   s  i }dd |   D }dd |D |d< ttj|td }|d |d D ]}|t| |d q(W d    n1 sAw   Y  t|   }dd |D |d	< ttj|t	d }|d
 |d	 D ]}|t| |d qiW d    n1 sw   Y  | 
 j}dd |D |d< ttj|td!}|d |d D ]}|t| |d qW d    d S 1 sw   Y  d S )Nc                 S   r   r   r   r(   r   r   r   r+     r   z!parse_program.<locals>.<listcomp>c                 S   s:   g | ]}t |jt |jt|jt |jt |jd qS ))r'   r6   r   r7   r0   )r#   r'   r6   intr   r7   r0   r(   r   r   r   r+     s    persistable_varsr    zpersistable vars:

c                 S   sR   g | ]%}|j tvrt|jt|jt|jt|jd n
t|jt|j dqS ))r'   r6   r   r7   )r'   r0   )r0   r1   r#   r'   r6   r   r   r7   r(   r   r   r   r+     s    	
all_varsz
all vars:
c                 S   s&   g | ]}|j t|jt|jd qS ))r0   input_arg_namesoutput_arg_names)r0   r#   r   r   )r)   r   r   r   r   r+     s    r   zops:
)r,   r   rB   r=   rC   persistable_vars_out_fnr"   r#   r-   all_vars_out_fnr2   r   
ops_out_fn)	r%   rI   outputr   r   r3   r   r   r   r   r   r   r     sH   


	




"r   )F)r   F)r;   r<   )rM   N);loggingrB   rD   collectionsr   numpyrs   Zgoogle.protobufr   r_   r   Zpaddle.baser   Zpaddle.base.frameworkr   Zpaddle.base.protor   Z*paddle.distributed.fleet.base.util_factoryr   Zpaddle.frameworkr	   __all__	getLogger__name__r.   setLevelINFO	Formatter	formatterStreamHandlerchsetFormatter
addHandlerr   r   r   ZVarDescZVarTypeZFEED_MINIBATCHZ
FETCH_LISTr1   r   r
   r   r   r   r   r   r   rV   rX   rh   ri   r}   r   r   r   r   r   r   r   r   r   <module>   s^   






	
+	 N
!