o
    eb'                     @   s   d dl mZ d dl mZ G dd dZG dd deZG dd deZG d	d
 d
eZG dd deZG dd deZ	G dd deZ
G dd deZdS )    )defaultdict)dequec                   @   sF   e Zd Zdd ZdddZdd Zdd	 ZdddZ		
dddZdS )Modelc                 C   s   d| _ |d | _dd |d D | _dd |d D | _dd |d	 D | _d
d |d D | _| jd }|d D ]}d| j|< q9d S )NPaddle Graphversionc                 S      i | ]}|d  |qS name .0noder
   r
   UD:\Projects\ConvertPro\env\Lib\site-packages\visualdl/component/graph/netron_graph.py
<dictcomp>       z"Model.__init__.<locals>.<dictcomp>nodesc                 S   r   r   r
   )r   varr
   r
   r   r      r   varsc                 S   s   i | ]}|d  |d f|qS )	from_nodeZto_noder
   )r   edger
   r
   r   r      s    edgesc                 S   "   i | ]}|d  |d sdndqS r	   children_nodeTFr
   r   r
   r
   r   r          /r   T)r	   r   	all_nodesall_varsZ	all_edgesvisible_maps)selfZ
graph_data	root_node
child_namer
   r
   r   __init__   s   

zModel.__init__Fc                    s   |du r dd  j  D  _ j d }|d D ]}d j|< q|du r/dd  j  D  _ fdd  D  _t j jS )NTc                 S   r   r   r
   r   r
   r
   r   r   %   r   z$Model.make_graph.<locals>.<dictcomp>r   r   c                 S   r   r   r
   r   r
   r
   r   r   -   r   c                    s   i | ]}| j | qS r
   )r   )r   	node_namer   r
   r   r   1   s    
)r   valuesr   get_current_visible_nodesZcurrent_nodesGraphr   )r   refresh
expand_allr    r!   r
   r$   r   
make_graph#   s   

zModel.make_graphc                 C   s   t | j| jS )N)r'   r   r   r$   r
   r
   r   get_all_leaf_nodes7   s   zModel.get_all_leaf_nodesc                 C   s   g }t  }tt}|d d|d< |rB| }| j| }| j| du r*|| n|d D ]}|| du r?|| d||< q.|s|S )Nr   Tr   F)r   r   boolappendpopleftr   r   )r   Zcurrent_visible_nodesZtravesal_queueZvisited_mapZcurrent_namecurrent_noder!   r
   r
   r   r&   :   s"   



zModel.get_current_visible_nodesTc                 C   sj   |r.| j | d du rd S |rd| j|< d S d| j|< | j | }|d D ]}d| j|< q$d S d| j|< d S )Nis_leaf_nodeTFr   )r   r   )r   r#   expand
keep_stater/   r!   r
   r
   r   adjust_visibleN   s   

zModel.adjust_visiblec           
      C   sr  |d u rd S g }|du r | j | }||d  ||d  n|| |D ]}d }| j| d }|dkrJ| j| du r?|}| j| d }|dks6|d urd| j|< | j| d }|rvd| j|< ||krud| j|< | j| d }||kseq'| j| d D ]}d| j|< q}d| j|< |}	||kr| j| d }| j| d D ]}||	krd| j|< qd| j|< q|}	||ksq'd S )NFr   Zto_nodesZparent_noder   Tr   )r   r-   extendr   r   )
r   r#   r2   Zis_nodeZ
node_namesr   Ztopmost_parentZparent_node_namer!   Zkey_path_node_namer
   r
   r   adjust_search_node_visible\   sd   





z Model.adjust_search_node_visibleN)FF)TF)FT)	__name__
__module____qualname__r"   r*   r+   r&   r3   r5   r
   r
   r
   r   r      s    

r   c                          e Zd Z fddZ  ZS )r'   c              	      s   g | _ g | _g | _d| _d}| D ]X}|d dkr8|d  D ]\}}| jt|d  fdd|D  q q|d dkra|d	  D ]\}}| jtd
| fdd|D  |d7 }qDq| j t	|  qt
t| j| j| j | j| jd d S )Nr   r   typefeedoutput_varsc                       g | ]	}t | | qS r
   Argumentr   r	   r   r
   r   
<listcomp>       z"Graph.__init__.<locals>.<listcomp>fetch
input_varszOutput{}c                    r=   r
   r>   r@   rA   r
   r   rB      rC      )r	   r   inputsoutputs)r   rG   rH   r	   r%   itemsr-   	ParameterformatNodesuperr'   r"   )r   r   r   Z
output_idxZop_nodekeyvalue	__class__rA   r   r"      sH   




zGraph.__init__r6   r7   r8   r"   __classcell__r
   r
   rP   r   r'          r'   c                       r9   )rL   c                    s   d | _ d | _d | _fddd  D | _ fddd  D | _ fd	dd
  D | _g | _d| _d | _	t
t| j| j | j| j| j| j| j| j| j	| jd	 d S )Nr	   	show_namer:   c                    s$   g | ]\}}t || d  | qS )Z
attr_types)	Attributer   rN   rO   )r   r
   r   rB      s    z!Node.__init__.<locals>.<listcomp>attrsc                    (   g | ]\}}t | fd d|D qS )c                    r=   r
   r>   r@   rA   r
   r   rB          ,Node.__init__.<locals>.<listcomp>.<listcomp>rJ   rW   rA   r
   r   rB          rE   c                    rY   )c                    r=   r
   r>   r@   rA   r
   r   rB      rZ   r[   r\   rW   rA   r
   r   rB      r]   r<   Tr0   )	r	   r:   
attributesrG   rH   chainvisibleis_leafrU   )r	   rU   r:   rI   r^   rG   rH   r_   r`   ra   rM   rL   r"   )r   r   r   rP   )r   r   r   r"      s4   











zNode.__init__rR   r
   r
   rP   r   rL      rT   rL   c                       r9   )rV   c                    sH   || _ || _|| _|dvrdnd| _tt| j| j | j| j| jd d S )N)Z
use_mkldnnZ	use_cudnnZop_callstackZop_roleZop_role_varZop_namescopeZis_testTF)r	   rO   r:   r`   )r	   rO   r:   r`   rM   rV   r"   )r   rN   rO   Z	attr_typerP   r
   r   r"      s   

zAttribute.__init__rR   r
   r
   rP   r   rV      rT   rV   c                       r9   )rJ   c                    s2   || _ d| _|| _tt| j| j | j| jd d S )NT)r	   r`   	arguments)r	   r`   rb   rM   rJ   r"   )r   r	   argsrP   r
   r   r"      s   

zParameter.__init__rR   r
   r
   rP   r   rJ      rT   rJ   c                       r9   )r?   c                    sR   || _ t|d |d | _|d du rd n| j| _tt| j| j | j| jd d S )NZdtypeshapeZpersistableF)r	   r:   initializer)r	   
TensorTyper:   re   rM   r?   r"   )r   r	   r   rP   r
   r   r"      s   

zArgument.__init__rR   r
   r
   rP   r   r?      rT   r?   c                       r9   )rf   c                    s6   || _ t|| _d | _tt| j| j | j| jd d S )N)dataTyperd   
denotation)rg   TensorShaperd   rh   rM   rf   r"   )r   datatyperd   rP   r
   r   r"      s   


zTensorType.__init__rR   r
   r
   rP   r   rf      rT   rf   c                       r9   )ri   c                    s   || _ tt| j| j d d S )N)
dimensions)rk   rM   ri   r"   )r   rk   rP   r
   r   r"      s   zTensorShape.__init__rR   r
   r
   rP   r   ri      rT   ri   N)collectionsr   r   r   dictr'   rL   rV   rJ   r?   rf   ri   r
   r
   r
   r   <module>   s   y" 		