o
    NeÓ  ã                   @   sú   d dl mZ d dlZd dlZd dlZd dlmZ d dlm  m	Z	 d dl
m  m  mZ d dlmZ eeejƒZzddlmZ W n eyW   e d¡ edƒ ed ƒ Y nw d	d
dddœZi ZddiZd Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Z dS )é    )Úprint_functionN)Údefaultdict)Ú
get_loggeré   )ÚGrapha  Cannot import graphviz, which is required for drawing a network. This can usually be installed in python with "pip install graphviz". Also, pydot requires graphviz to convert dot files to pdf: in ubuntu, this can usually be installed with "sudo apt-get install graphviz".zKnet_drawer will not run correctly. Please install the correct dependencies.Zovalz#0F9D58Zfilledz#FFFFFF)ÚshapeÚcolorÚstyleZ	fontcolorZrankdirÚTBc                  C   s   dd„ } | S )Nc                  S   s   | d7 } | S )Nr   © )ÚGRAPH_IDr   r   úGD:\Projects\ConvertPro\env\Lib\site-packages\paddle/fluid/net_drawer.pyÚ	generator:   s   zunique_id.<locals>.generatorr   )r   r   r   r   Ú	unique_id8   s   r   c                 C   s   t }| j|d< | j|d< |S )NÚnameÚlabel)ÚOP_STYLEÚtype)ÚopÚnoder   r   r   Ú	draw_nodeA   s   

r   c                 C   s0   t }d|j|f |d< |j|d< | | |d< |S )Nz%s(%s)r   Z	head_nameÚ	tail_name)Ú	VAR_STYLEZ	parameterr   )Z
var_parentr   ÚvarÚargÚedger   r   r   Ú	draw_edgeH   s
   
r   c                 K   sê   | j D ]}|jD ]
}||vrd||< qqd}tj | j ¡ ¡}|j D ]P}|jD ]H}|jd t	|ƒ |_|d7 }|j
di t|ƒ¤Ž |jD ]}	|	jD ]}
|j||
< qIqD|jD ]}|jD ]}
|
|v rm|jdi t||||
ƒ¤Ž qZqUq' d S d S )NZFeedr   Ú_r   r   )ÚblocksÚvarsÚframework_pb2ZProgramDescZ
FromStringÚdescZserialize_to_stringÚopsr   Ústrr   r   ZoutputsÚ	argumentsZinputsr   r   )ÚprogramÚgraphÚvar_dictÚkwargsÚblockr   Ztemp_idÚprotor   Úor   Úer   r   r   Úparse_graphP   s8   

€þÿ



ÿ

€þÿôr-   c                 K   s´   d|v rt  |d ¡ d|v rt |d ¡ d|v r!t |d ¡ tƒ }| d¡}|d kr3t|ƒd }tdt|ƒ|t ttdœ|¤Ž}i }t| ||ƒ t|||ƒ |d krX| 	¡  |S )NÚ
graph_attrÚ	node_attrÚ	edge_attrÚfilenamez.gv)r   r1   r.   r/   r0   r   )
ÚGRAPH_STYLEÚupdater   r   r   Úgetr#   r   r-   Úsave)Zstartup_programZmain_programr(   Zgraph_idr1   Úgr'   r   r   r   Ú
draw_graphj   s0   

üûr7   )!Ú
__future__r   ÚargparseÚjsonÚloggingÚcollectionsr   Zpaddle.fluid.coreZfluidÚcoreZ paddle.fluid.proto.framework_pb2r*   r    Zpaddle.fluid.log_helperr   Ú__name__ÚINFOÚloggerÚgraphvizr   ÚImportErrorÚinfoÚprintÚexitr   r   r2   r   r   r   r   r-   r7   r   r   r   r   Ú<module>   s@   ÿøüÿ	