o
    "j                     @   sz   d dl Z d dlZd dlZd dlZd dlZdd ZG dd dZG dd dZG dd	 d	ZG d
d dZ	G dd dZ
dS )    Nc                 C   s   t | tr	d|  S t| S )Nz"%s")
isinstancestr)v r   g/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/paddle/distributed/fleet/base/graphviz.pycrepr   s   
r   c                   @      e Zd Zdd Zdd ZdS )Rankc                 C   s   || _ || _|| _g | _dS )zC
        kind: str
        name: str
        priority: int
        N)kindnameprioritynodes)selfr
   r   r   r   r   r   __init__   s   
zRank.__init__c                 C   s6   | j sdS dd| j d ddd | j D  d S )	N {zrank=;,c                 S   s   g | ]}|j qS r   )r   .0noder   r   r   
<listcomp>/   s    z Rank.__str__.<locals>.<listcomp>})r   r
   joinr   r   r   r   __str__(   s   zRank.__str__N__name__
__module____qualname__r   r   r   r   r   r   r	      s    r	   c                   @   sZ   e Zd ZdZdd Zdd Zdd Zdd	d
Zdd Zdd Z	dd Z
dd Zdd ZdS )Graphr   c                 K   s"   || _ || _g | _g | _i | _d S N)titleattrsr   edgesrank_groups)r   r"   r#   r   r   r   r   7   s
   
zGraph.__init__c                 C   s   |   S r!   )r   r   r   r   r   code>   s   z
Graph.codec                 C   s2   dt j }t  jd7  _t|||}|| j|< |S )Nzrankgroup-%d   )r    rank_counterr	   r%   )r   r
   r   r   rankr   r   r   
rank_groupA   s
   

zGraph.rank_groupr   c                 K   sL   t |||fi |}d|v r| j|d  }|d= |j| | j| |S )Nr)   )Noder%   r   append)r   labelprefixdescriptionr#   r   r)   r   r   r   r   H   s   z
Graph.nodec                 K   s"   t ||fi |}| j| |S r!   )Edger$   r,   )r   sourcetargetr#   edger   r   r   r3   R   s   z
Graph.edgec                 C   st   t |d}||   tjtj||d d d }dd|d|g}tj|tj	tj	tj	d t
d|  |S )	NwZpdfdotz-Tpdfz-ostdinstdoutstderrzwrite block debug graph to )openwriter   ospathr   dirname
subprocessPopenPIPEloggingwarning)r   dot_pathfileZ
image_pathcmdr   r   r   compileW   s   
zGraph.compilec                 C   s.   |  |}d|g}tj|tjtjtjd d S )Nr;   r7   )rH   r@   rA   rB   )r   rE   imagerG   r   r   r   showg   s   

z
Graph.showc                 C   sJ   t | j tdd d}g }|D ]}|t|d  qd|d S )Nc                 S   s   | d j |d j kS )Nr'   )r   )abr   r   r   <lambda>u       z"Graph._rank_repr.<locals>.<lambda>)keyr'   
)sortedr%   items	functools
cmp_to_keyr,   r   r   )r   Zranksreprxr   r   r   
_rank_reprq   s   zGraph._rank_reprc                 C   s   ddt | j g}| jD ]}|| dt | j|  d q||   t| j |dd | jD 7 }| jD ]	}|t	| q:|d d
|S )	Nzdigraph G {ztitle = =r   c                 S   s   g | ]}t |qS r   )r   r   r   r   r   r      rN   z!Graph.__str__.<locals>.<listcomp>r   rP   )r   r"   r#   r,   rW   randomshuffler   r$   r   r   )r   reprsattrrV   r   r   r   r   }   s   
"


zGraph.__str__Nr   )r   r   r   r(   r   r&   r*   r   r3   rH   rJ   rW   r   r   r   r   r   r    4   s    


r    c                   @   s"   e Zd ZdZdddZdd ZdS )	r+   r'   r   c                 K   s4   || _ d|tjf | _|| _|| _t jd7  _d S )Nz%s_%dr'   )r-   r+   counterr   r/   r#   )r   r-   r.   r/   r#   r   r   r   r      s
   zNode.__init__c              	   C   s<   dj | j| j| jrdddd | j D  ndd}|S )Nz {name} [label={label} {extra} ];r   c                 s   s&    | ]\}}| d t | V  qdS )rX   Nr   )r   rO   valuer   r   r   	<genexpr>   s    
zNode.__str__.<locals>.<genexpr>r   )r   r-   extra)formatr   r-   r#   r   rR   )r   r[   r   r   r   r      s   

zNode.__str__Nr]   )r   r   r   r^   r   r   r   r   r   r   r+      s    
r+   c                   @   r   )r0   c                 K   s   || _ || _|| _dS )z
        Link source to target.
        :param source: Node
        :param target: Node
        :param graph: Graph
        :param attrs: dic
        N)r1   r2   r#   )r   r1   r2   r#   r   r   r   r      s   
zEdge.__init__c              	   C   sD   dj | jj| jj| jsdndddd | j D  d d}|S )	Nz{source} -> {target} {extra}r   [r   c                 s   s*    | ]}|d   dt |d  V  qdS )r   rX   r'   Nr_   )r   r\   r   r   r   ra      s    
zEdge.__str__.<locals>.<genexpr>])r1   r2   rb   )rc   r1   r   r2   r#   r   rR   )r   rU   r   r   r   r      s   
zEdge.__str__Nr   r   r   r   r   r0      s    r0   c                   @   sF   e Zd ZdZdd ZdddZddd	Zd
d ZdddZdd Z	dS )GraphPreviewGeneratorz0
    Generate a graph image for ONNX proto.
    c                 C   sF   t |dddd| _| jdd| _| jdd| _| jdd| _d S )	Nr6   trueTB)ZlayoutZconcentrateZrankdirZsame   r'   r   )r    graphr*   Zop_rankZ
param_rankZarg_rank)r   r"   r   r   r   r      s   zGraphPreviewGenerator.__init__temp.dotFc                 C   s$   |s
| j | d S | j | d S r!   )rj   rH   rJ   )r   r>   rJ   r   r   r   __call__   s   zGraphPreviewGenerator.__call__c                 C   sN   d dddd|ddddd	t|d
dg}| jj|d|ddd|s!dndddd	S )NrP   z<<table cellpadding="5">z  <tr>z    <td bgcolor="#2b787e">z    <b>z    </b>z	    </td>z  </tr>z    <td>z    </td>  </tr>z	</table>>paramnonerounded,filled,bold1.3z#148b97orange#ffffffArial)r.   r/   shapestylewidthcolor	fontcolorfontname)r   r   rj   r   )r   r   Z	data_type	highlightr-   r   r   r   	add_param   s6   
zGraphPreviewGenerator.add_paramc                 K   sF   d}d|v r|d }|d= | j jd| d|dd|sdndd	d
ddd
S )NFrz   z<<B>%s</B>>opboxzrounded, filled, boldz#303A3Arq   rs   rr   rp   z0.84)	r.   r/   rt   ru   rw   ry   rx   rv   height)rj   r   )r   ZopTypekwargsrz   r   r   r   add_op   s    
zGraphPreviewGenerator.add_opc              
   C   s,   | j jt|d|dddd|sddS ddS )	Nargr}   ro   rs   z#999999z#ddddddrq   )r.   r/   rt   ru   ry   rx   rw   )rj   r   r   )r   r   rz   r   r   r   add_arg  s   zGraphPreviewGenerator.add_argc                 K   s<   d}d|v r|d }|d= | j j||fd|sdndi|S )NFrz   rw   z#00000rq   )rj   r3   )r   r1   r2   r   rz   r   r   r   add_edge  s   
zGraphPreviewGenerator.add_edgeN)rk   F)F)
r   r   r   __doc__r   rl   r{   r   r   r   r   r   r   r   rf      s    


rf   )rS   rC   r=   rY   r@   r   r	   r    r+   r0   rf   r   r   r   r   <module>   s   ^