o
    Me!                     @   s(  d dl mZ d dlZd dlZd dl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 ddlmZmZmZ dd	lmZ dd
lmZ ddlmZ g dZg dZdd Zdd ZdZdd Zdd Zdd ZeeegZdd Z dd Z!d)ddZ"d d! Z#d"d# Z$e$gZ%d$d% Z&d*d'd(Z'dS )+    )print_functionN   )GraphPreviewGenerator)framework_pb2)text_format)unique_name)Programdefault_main_programVariable)core)io)LayerHelper)	ZUNK	LoDTensorSelectedRowsZFeedMinibatchZ	FetchListZ
StepScopesZLodRankTableZLoDTensorArrayZ	PlaceList)boolZint16Zint32Zint64Zfloat16Zfloat32Zfloat64c                 C   s   t |  S N)_dtype2str_)type r   ED:\Projects\ConvertPro\env\Lib\site-packages\paddle/fluid/debugger.pyrepr_data_type5   s   r   c                 C   s   d tt| j t| jS )Nztensor(type={}, shape={}))formatr   intZ	data_typestrdimsprotor   r   r   repr_tensor9   s   r   z{ttype} {name} ({reprs})c                 C   sb   | j j tjjkr
d S | j jj}t| j jj}tj	|dkrdnd| j
|dkr-d||f dS |dS )Nr   r   ZTensorlevel=%d, %sttypenamereprs)r   r   VarTypeZ
LOD_TENSOR
lod_tensor	lod_levelr   tensorreprtplr   r!   )r   levelr"   r   r   r   repr_lodtensorA   s   
r)   c                 C   s.   | j j tjjkr
d S tjd| jt| j jdS )Nr   r   )	r   r   r#   ZSELECTED_ROWSr'   r   r!   r   Zselected_rowsr   r   r   r   repr_selected_rowsM   s   
r*   c                 C   s>   | j j tjjkr
d S tjd| jd| j jjt	| j j
jf dS )NZTensorArrayr   r   )r   r   r#   ZLOD_TENSOR_ARRAYr'   r   r!   Ztensor_arrayr%   r   r$   r&   r   r   r   r   repr_tensor_arrayV   s   r+   c                 C   s"   t D ]}|| }|r|  S qd S r   )type_handlers)Zvardeschandlerresr   r   r   repr_varh   s   r/   c                 C   s>   g }t | j D ]}| |}t|}|| q	d|S )N
)rangedescZ
num_blocksblockpprint_block_codesappendjoin)Zprogram_descr"   	block_idx
block_descZ
block_reprr   r   r   pprint_program_codeso   s   

r9   Fc           	      C   s   dd }dd }t | tjurtj| j } g }g }| jD ]}|s(||r(q|t| q| j	D ]}|s<||r<q3|t
| q3d}|j| j| jd|d|dS )Nc                 S   sP   | j drdS dd }| jD ]	}||r dS q| jD ]	}||r% dS qdS )NZ_gradTc                 S   s,   d| j v rdS | jD ]	}d|v r dS q
d S )N@GRADT)	parameter	arguments)varargr   r   r   is_var_backward}   s   
zCpprint_block_codes.<locals>.is_op_backward.<locals>.is_var_backwardF)r   endswithinputsoutputs)Zop_descr?   r=   r   r   r   is_op_backwardz   s   

z*pprint_block_codes.<locals>.is_op_backwardc                 S   s
   d| j v S )Nr:   )r!   )Zvar_descr   r   r   r?      s   
z+pprint_block_codes.<locals>.is_var_backwardzF// block-{idx}  parent-{pidx}
// variables
{vars}

// operators
{ops}
r0   )idxZpidxvarsops)r   r   	BlockDesc
FromStringr2   serialize_to_stringrE   r5   r/   rF   repr_opr   rD   Z
parent_idxr6   )	r8   Zshow_backwardrC   r?   Z	var_reprsZop_reprsr=   optplr   r   r   r4   x   s,   

r4   c                 C   s   d}dd dd dd dd dd dd d	d d
d dd dd g
}| j }|| j | }|dkr4t|}|j|t|d||ffS )Nz{key}={value}c                 S      | j S r   )iattrr   r   r   <lambda>       zrepr_attr.<locals>.<lambda>c                 S   rM   r   )frO   r   r   r   rQ      rR   c                 S   rM   r   )srO   r   r   r   rQ      rR   c                 S   rM   r   )ZintsrO   r   r   r   rQ      rR   c                 S   rM   r   )ZfloatsrO   r   r   r   rQ      rR   c                 S   rM   r   )stringsrO   r   r   r   rQ      rR   c                 S   rM   r   )brO   r   r   r   rQ      rR   c                 S   rM   r   )ZboolsrO   r   r   r   rQ      rR   c                 S   rM   r   )r7   rO   r   r   r   rQ      rR   c                 S   rM   r   )lrO   r   r   r   rQ      rR   Zdtype)keyvalue)r!   r   r   r   r   )r2   rL   Z	valgetterrX   rY   r   r   r   	repr_attr   s"   rZ   c                 C   s.   | dkrdj d||d t|d dS d S )NZfill_constantz!{output} = {data} [shape={shape}],rY   shape)outputdatar\   )r   r6   r   )optyperA   rB   attrsr   r   r   _repr_op_fill_constant   s   
ra   c                 C   s  d }g }i }d }g }g }d}dd }| j D ]}	|	j}
||	j}|d|
|f  q| jD ]}	||	j}|| q,| jD ]}t|\}}|| |d ||d < q<| j}tD ]}|| j	|||}|rg|  S qW|j
d|| j	d|dd	| |rd
dS ddS )Nz3{outputs} = {optype}({inputs}{is_target}) [{attrs}]c                 S   s    t | dkr
| d S tt| S )Nr   r   )lenr   list)argsr   r   r   rQ      s     zrepr_op.<locals>.<lambda>z%s=%sr   r   z, z{%s}r[   z, is_target )rB   r_   rA   r`   	is_target)rA   r;   r<   r5   rB   r`   rZ   rf   op_repr_handlersr   r   r6   )Zopdescr_   r`   	attr_dictrf   rA   rB   rL   Z
args2valuer=   rX   rY   rP   Z	attr_reprZ	attr_pairr-   r.   r   r   r   rJ      s>   





rJ   
./temp.dotc           
         s  t d | j }tjt|}fddi |jD ]*}|j	r7 j
|jt|jddd|jd}n j|j|jd}||j< qd fd	d
	}|jD ]%} j|j|jd}	|jD ]}||	|d qd|jD ]}||	|d qpqT |dd dS )zT
    Generate a debug graph for block.
    Args:
        block(Block): a block.
    z
some graphc                    s<    d u rdS  D ]}t |tu sJ t|| r dS qdS )NFT)r   r   rematch)r!   pattern)
highlightsr   r   need_highlight   s   z+draw_block_graphviz.<locals>.need_highlightr0   z<br />r   	highlightFc                    sp   |j D ]2}|vr j||d|< | }| jp!|j}|r- j| ||d q j|| |d qd S )Nro   )r<   add_argdescriptionZadd_edge)rK   r=   Zop2varr>   varnrp   )graphrn   rE   r   r   add_op_link_var  s   
z,draw_block_graphviz.<locals>.add_op_link_varT)showNF)r   r2   rI   r   rG   rH   sixbinary_typerE   ZpersistableZ	add_paramr!   r   r   replacerq   rF   Zadd_oprA   rB   )
r3   rm   pathZprotostrr2   r=   rs   ru   rK   Zopnr   )rt   rm   rn   rE   r   draw_block_graphviz   s,   
	



r|   rw   )Nri   )(
__future__r   sysrx   randomosrj   graphvizr   r   r   Zgoogle.protobufr   re   r   Z	frameworkr   r	   r
   r   r   Zlayer_helperr   Z_vartype2str_r   r   r   r'   r)   r*   r+   r,   r/   r9   r4   rZ   ra   rg   rJ   r|   r   r   r   r   <module>   sF   	
	*	#