
    bIg2                       d dl mZ d dlZd dlZd dlmZ d dlmZ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ZddZ	 d	 	 	 	 	 ddZ	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 ddZddZedk(  r e        yy)    )annotationsN)defaultdict)AnyCallable)
GraphProto
ModelProto	NodeProtoboxz#0F9D58filledz#FFFFFF)shapecolorstyle	fontcolorr   octagonc                ,    t        j                  |       S )N)jsondumps)names    R/var/www/html/answerous/venv/lib/python3.12/site-packages/onnx/tools/net_drawer.py_escape_labelr   '   s    ::d    c                    d}|t        |       j                  dd      j                  dd      j                  dd      z  }|dz  }|S )Nzjavascript:alert("'< >))r   replace)surls     r   _form_and_sanitize_docstringr"   ,   sK    
C=##C-55c2>FFsBOOC3JCJr   c                     d fd}|S )Nc                   | j                   r | j                    d| j                   d| d}n| j                   d| d}t        | j                        D ]  \  }}|dt	        |      z   dz   |z   z  } t        | j
                        D ]  \  }}|dt	        |      z   dz   |z   z  } t        j                  |fi 	}r&t        | j                        }|j                  |       |S )N/z (op#r   z
 input z
 output)r   op_type	enumerateinputstroutputpydotNoder"   
doc_stringset_URL)
opop_id	node_nameiinput_r+   noder!   embed_docstringkwargss
           r   really_get_op_nodez-GetOpNodeProducer.<locals>.really_get_op_node6   s    7777)1RZZLeWA>I::,eE7!4I"288, 	<IAvc!f,s2V;;I	<"299- 	=IAvs1v-3f<<I	=zz).v..r}}=CLLr   )r0   r	   r1   intreturnz
pydot.Node )r6   r7   r8   s   `` r   GetOpNodeProducerr<   3   s     r   c                H   |t        dd|it        }t        j                  ||      }i }t	        t
              }t        | j                        D ]M  \  }}	 ||	|      }
|j                  |
       |	j                  D ]  }||vrCt        j                  t        |t        ||         z         fdt        |      it        }|||<   n||   }|j                  |       |j                  t        j                  ||
              |	j                   D ]  }||v r||xx   dz  cc<   t        j                  t        |t        ||         z         fdt        |      it        }|||<   |j                  |       |j                  t        j                  |
|              P |S )Nr6   )rankdirlabel   r;   )r<   OP_STYLEr,   Dotr   r9   r(   r5   add_noder)   r-   r   r*   
BLOB_STYLEadd_edgeEdger+   )graphr   r>   node_producerr6   pydot_graphpydot_nodespydot_node_countsr1   r0   op_node
input_name
input_nodeoutput_nameoutput_nodes                  r   GetPydotGraphrQ   H   s    )V/VXV))D'2K)+K(3C(8uzz* C	rE*W%(( 	BJ,"ZZ!*s3DZ3P/Q"QR'
3 !

 +5J'(4
  ,  J!@A	B 99 
	CKk)!+.!3.**kC0A+0N,OOP#K0 K
 (3K$  -  G[!AB
	CC4 r   c            
        t        j                  d      } | j                  dt        dd       | j                  dt        dd       | j                  d	t        d
d       | j                  ddd       | j	                         }t               }t        |j                  d      5 }|j                         }|j                  |       d d d        t        |j                  |j                  j                  |j                  t        dd|j                  it               }|j#                  |j$                         y # 1 sw Y   uxY w)NzONNX net drawer)descriptionz--inputTzThe input protobuf file.)typerequiredhelpz--outputzThe output protobuf file.z	--rankdirLRz&The rank direction of the pydot graph.)rT   defaultrV   z--embed_docstring
store_truez;Embed docstring as javascript alert. Useful for SVG format.)actionrV   rbr6   )r   r>   rH   r;   )argparseArgumentParseradd_argumentr*   
parse_argsr   openr)   readParseFromStringrQ   rG   r   r>   r<   r6   rA   	write_dotr+   )parserargsmodelfidcontentrI   s         r   mainri   q   s@   $$1BCF
'	   (	   5	   J  
 DLE	djj$	 '3((*g&'  [[' 
 00
4<
	K $++&' 's   &"D<<E__main__)r   r*   r:   r*   )r    r*   r:   r*   )F)r6   boolr7   r   r:   _NodeProducer)NrW   NF)rG   r   r   z
str | Noner>   r*   rH   z_NodeProducer | Noner6   rk   r:   z	pydot.Dot)r:   None)
__future__r   r\   r   collectionsr   typingr   r   r,   onnxr   r   r	   rA   rD   r9   r-   rl   r   r"   r<   rQ   ri   __name__r;   r   r   <module>rs      s     #   #    2 2 	 y!
)S)5::56
 "-0. *.!&&
& & (	&
 & &R&'R zF r   