o
    æe  ã                   @   sB   d dl mZ d dl mZ eƒ add„ Zdd„ Zdd„ Zd	d
„ ZdS )é    )ÚCounter)Údequec                 C   s.   ddl m} t ||  ¡ ƒ¡ td  ¡  d S )Nr   )Ú
name_scopeéÿÿÿÿ)Zpaddle.staticr   Ú_name_scope_stackÚappendZ	full_nameÚ	__enter__)ÚlayerÚinputsr   © r   úND:\Projects\ConvertPro\env\Lib\site-packages\visualdl/component/graph/utils.pyÚ_opname_creation_prehook   s   r   c                 C   s   t  ¡ }| d d d ¡ d S )N)r   ÚpopÚ__exit__)r	   r
   ZoutputsZname_scope_managerr   r   r   Ú_opname_creation_posthook   s   r   c                 C   sD   |   t¡ |  ¡ D ]\}}d |jj|¡|_t|ƒ q	|  t	¡ d S )Nz{}[{}])
Zregister_forward_pre_hookr   Znamed_childrenÚformatÚ	__class__Ú__name__Z
_full_nameÚcreate_opname_scopeZregister_forward_post_hookr   )r	   ÚnameZsublayerr   r   r   r   "   s   

ÿ
r   c                    sž  g ‰t ƒ }t ƒ }| d }d}d}|D ]*}|d dkrq|d s.||d   d7  < |d7 }q||d   d7  < |d7 }qd‰ d	g‰d	g‰ˆ  g‰d
d„ }d‡ ‡‡‡fdd„	}‡fdd„}	g d¢}
d}|
D ]}||ƒ qeˆd }ˆd }ˆd }|	||dƒƒ |	d ||¡ƒ |	|ƒ |	|j|
Ž ƒ |	|ƒ | ¡ D ]\}}|d|g}|	|j|Ž ƒ qš| ¡ D ]\}}|d|g}|	|j|Ž ƒ q¯|	d| ƒ td	 ˆ¡ƒ dS )z[
    Print some information about model for users, we count numbers of ops and layers.
    Únodesr   r   ú/Zchildren_nodeÚtypeé   é   Ú c                 S   s,   | t |ƒ }|d }d| | d||   S )Nr   ú-)Úlen)ÚpaddingÚtextZleft_lengthZhalfr   r   r   Ú	add_titleE   s   zprint_model.<locals>.add_titleú<c                    s\   ˆd  d| t | ƒ d dˆ   7  < ˆd  d|  dˆ   7  < ˆd  | ˆ  7  < d S )Nr   z{: Ú}ú r   )Ústr)r   Ztext_dir)ÚSPACING_SIZEÚheader_sep_listÚline_length_listÚrow_format_listr   r   Ú
add_columnJ   s
   ÿzprint_model.<locals>.add_columnc                    s   ˆ   | ¡ ˆ   d¡ d S )NÚ
)r   )Ús)Úresultr   r   r   P   s   
zprint_model.<locals>.append)ÚNameÚTypeZCounté   zGraph Summaryz#total operators: {}	total layers:{}Úoperatorr	   r   N)r!   )r   r   ÚitemsÚprintÚjoin)Zanalyse_resultZ
op_counterZlayer_counterr   Z	total_opsZtotal_layersÚnoder    r)   r   ÚheadersÚcolumn_widthÚ_Z
row_formatZ
header_sepÚline_lengthZop_typeÚcountZ
row_valuesZ
layer_typer   )r%   r&   r'   r,   r(   r   Úprint_model+   sV   


ÿ

r:   N)Úcollectionsr   r   r   r   r   r   r:   r   r   r   r   Ú<module>   s   	