o
    toiM                     @  s   d dl mZ d dlZd dlZd dlmZ d dlmZ d dlm	Z	 d dl
Z
d dlmZmZmZ ddd	d
dZddiZeeege
jf Zd,ddZd-ddZ	d.d/ddZ				d0d1d&d'Zd2d)d*Zed+krke  dS dS )3    )annotationsN)defaultdict)Callable)Any)
GraphProto
ModelProto	NodeProtoboxz#0F9D58filledz#FFFFFF)shapecolorstyle	fontcolorr   octagonnamestrreturnc                 C  s
   t | S )N)jsondumps)r    r   I/home/ubuntu/.local/lib/python3.10/site-packages/onnx/tools/net_drawer.py_escape_label(   s   
r   sc                 C  s4   d}|t | dddddd7 }|d7 }|S )Nzjavascript:alert("'< >))r   replace)r   urlr   r   r   _form_and_sanitize_docstring-   s   $r!   Fembed_docstringboolkwargsr   _NodeProducerc                   s   d	 fdd}|S )
Nopr   op_idintr   
pydot.Nodec                   s   | j r| j  d| j d| d}n	| j d| d}t| jD ]\}}|dt| d | 7 }qt| jD ]\}}|dt| d | 7 }q5tj|fi } r[t| j	}|
| |S )N/z (op#r   z
 input z
 output)r   op_type	enumerateinputr   outputpydotNoder!   
doc_stringset_URL)r&   r'   	node_nameiinput_r/   noder    r"   r$   r   r   really_get_op_node7   s   

z-GetOpNodeProducer.<locals>.really_get_op_node)r&   r   r'   r(   r   r)   r   )r"   r$   r9   r   r8   r   GetOpNodeProducer4   s   r:   LRgraphr   
str | Nonerankdirnode_producer_NodeProducer | None	pydot.Dotc                 C  s>  |d u rt dd|it}tj||d}i }tt}t| jD ]}\}}	||	|}
||
 |	j	D ]2}||vrPtj
t|t||  fdt|it}|||< n|| }|| |t||
 q0|	jD ]5}||v rt||  d7  < tj
t|t||  fdt|it}|||< || |t|
| qfq|S )Nr"   )r>   label   r   )r:   OP_STYLEr0   Dotr   r(   r-   r7   add_noder.   r1   r   r   
BLOB_STYLEadd_edgeEdger/   )r<   r   r>   r?   r"   pydot_graphpydot_nodespydot_node_countsr'   r&   op_node
input_name
input_nodeoutput_nameoutput_noder   r   r   GetPydotGraphI   sH   






rR   Nonec                  C  s   t jdd} | jdtddd | jdtddd | jd	td
dd | jdddd |  }t }t|jd}| }|	| W d    n1 sJw   Y  t
|j|jj|jtdd|jitd}||j d S )NzONNX net drawer)descriptionz--inputTzThe input protobuf file.)typerequiredhelpz--outputzThe output protobuf file.z	--rankdirr;   z&The rank direction of the pydot graph.)rU   defaultrW   z--embed_docstring
store_truez;Embed docstring as javascript alert. Useful for SVG format.)actionrW   rbr"   )r   r>   r?   r   )argparseArgumentParseradd_argumentr   
parse_argsr   openr.   readParseFromStringrR   r<   r   r>   r:   r"   rD   	write_dotr/   )parserargsmodelfidcontentrJ   r   r   r   mainr   sR   ri   __main__)r   r   r   r   )r   r   r   r   )F)r"   r#   r$   r   r   r%   )Nr;   NF)r<   r   r   r=   r>   r   r?   r@   r"   r#   r   rA   )r   rS   )
__future__r   r\   r   collectionsr   collections.abcr   typingr   r0   onnxr   r   r   rD   rG   r(   r1   r%   r   r!   r:   rR   ri   __name__r   r   r   r   <module>   s8   


))
