o
    pi                     @   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|  dS t| S )N")
isinstancestr)v r   m/home/app/PaddleOCR-VL/.venv_paddleocr/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   s4   dt j }t  jd7  _t|||}|| j|< |S )Nz
rankgroup-   )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   r4   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<   r8   )rI   rA   rB   rC   )r   rF   imagerH   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      rO   z!Graph.__str__.<locals>.<listcomp>r   rQ   )r   r#   r$   r-   rX   randomshuffler   r%   r   r   )r   reprsattrrW   r   r   r   r   }   s   
"


zGraph.__str__Nr   )r   r   r    r)   r   r'   r+   r   r4   rI   rK   rX   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   s6   || _ | dtj | _|| _|| _t jd7  _d S )N_r(   )r.   r,   counterr   r0   r$   )r   r.   r/   r0   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 )rY   Nr   )r   rP   valuer   r   r   	<genexpr>   s    
zNode.__str__.<locals>.<genexpr>r   )r   r.   extra)formatr   r.   r$   r   rS   )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	   )r1   c                 K   s   || _ || _|| _dS )z
        Link source to target.
        :param source: Node
        :param target: Node
        :param graph: Graph
        :param attrs: dic
        N)r2   r3   r$   )r   r2   r3   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   rY   r(   Nra   )r   r]   r   r   r   rc      s    
zEdge.__str__.<locals>.<genexpr>])r2   r3   rd   )re   r2   r   r3   r$   r   rS   )r   rV   r   r   r   r      s   
zEdge.__str__Nr   r   r   r   r   r1      s    r1   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 )	Nr7   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"   )rl   rI   rK   )r   r?   rK   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 )NrQ   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/   r0   shapestylewidthcolor	fontcolorfontname)r   r   rl   r   )r   r   Z	data_type	highlightr.   r   r   r   	add_param   s6   
zGraphPreviewGenerator.add_paramc                 K   sJ   d}d|v r|d }|d= | j jd| dd|dd|sdnd	d
dddd
S )NFr|   z<<B>z</B>>opboxzrounded, filled, boldz#303A3Ars   ru   rt   rr   z0.84)	r/   r0   rv   rw   ry   r{   rz   rx   height)rl   r   )r   ZopTypekwargsr|   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   rq   ru   z#999999z#ddddddrs   )r/   r0   rv   rw   r{   rz   ry   )rl   r   r   )r   r   r|   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 )NFr|   ry   z#00000rs   )rl   r4   )r   r2   r3   r   r|   r   r   r   add_edge  s   
zGraphPreviewGenerator.add_edgeN)rm   F)F)
r   r   r    __doc__r   rn   r}   r   r   r   r   r   r   r   rh      s    


rh   )rT   rD   r>   rZ   rA   r   r
   r!   r,   r1   rh   r   r   r   r   <module>   s   ^