
    SiM                       S SK Jr  S SKrS SKrS SKJr  S SKJr  S SKJ	r	  S SK
r
S SKJrJrJr  SSS	S
S.rSS0r\\\/\
R$                  4   rSS jrSS jr S     SS jjr    S           SS jjrSS jr\S:X  a  \" 5         gg)    )annotationsN)defaultdict)Callable)Any)
GraphProto
ModelProto	NodeProtoboxz#0F9D58filledz#FFFFFF)shapecolorstyle	fontcolorr   octagonc                .    [         R                  " U 5      $ )N)jsondumps)names    T/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/onnx/tools/net_drawer.py_escape_labelr   (   s    ::d    c                    SnU[        U 5      R                  SS5      R                  SS5      R                  SS5      -  nUS-  nU$ )Nzjavascript:alert("'< >))r   replace)surls     r   _form_and_sanitize_docstringr"   -   sK    
C=##C-55c2>FFsBOOC3JCJr   c                   ^ ^ SU U4S jjnU$ )Nc                  > U R                   (       a   U R                    SU R                   SU S3nOU R                   SU S3n[        U R                  5       H  u  p4US[	        U5      -   S-   U-   -  nM     [        U R
                  5       H  u  p5US[	        U5      -   S-   U-   -  nM     [        R                  " U40 T	D6nT(       a&  [        U R                  5      nUR                  U5        U$ )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_node-GetOpNodeProducer.<locals>.really_get_op_node7   s    7777)1RZZLeWA>I::,eE7!4I"288,IAc!f,s2V;;I -"299-IAs1v-3f<<I .zz).v..r}}=CLLr   )r0   r	   r1   intreturnz
pydot.Node )r6   r7   r8   s   `` r   GetOpNodeProducerr=   4   s      r   c                H   Uc  [        SSU0[        D6n[        R                  " XS9n0 n[	        [
        5      n[        U R                  5       GHN  u  pU" X5      n
UR                  U
5        U	R                   H  nX;  aB  [        R                  " [        U[        X{   5      -   5      4S[        U5      0[        D6nXU'   OXk   nUR                  U5        UR                  [        R                  " X5      5        M     U	R                    H  nX;   a  X}==   S-  ss'   [        R                  " [        U[        X}   5      -   5      4S[        U5      0[        D6nXU'   UR                  U5        UR                  [        R                  " X5      5        M     GMQ     U$ )Nr6   )rankdirlabel   r<   )r=   OP_STYLEr,   Dotr   r:   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   GetPydotGraphrR   I   s    )V/VXV))D2K)+K(3C(8uzz*	*W%((J,"ZZ!*s3D3P/Q"QR'
3 !

 +5J'(4
  ,  J!@A # 99K)!.!3.**kC0A0N,OOP#K0 K
 (3$  -  G!AB % +4 r   c            
     x   [         R                  " SS9n U R                  S[        SSS9  U R                  S[        SSS9  U R                  S	[        S
SS9  U R                  SSSS9  U R	                  5       n[        5       n[        UR                  S5       nUR                  5       nUR                  U5        S S S 5        [        UR                  UR                  R                  UR                  [        SSUR                  0[         D6S9nUR#                  UR$                  5        g ! , (       d  f       Nw= f)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.)rU   defaultrW   z--embed_docstring
store_truez;Embed docstring as javascript alert. Useful for SVG format.)actionrW   rbr6   )r   r?   rI   r<   )argparseArgumentParseradd_argumentr*   
parse_argsr   openr)   readParseFromStringrR   rH   r   r?   r=   r6   rB   	write_dotr+   )parserargsmodelfidcontentrJ   s         r   mainrj   r   s9   $$1BCF
'	   (	   5	   J  
 DLE	djj$	3((*g& 
   [[' 
 00
4<
	K $++& 
 	s   "D++
D9__main__)r   r*   r;   r*   )r    r*   r;   r*   )F)r6   boolr7   r   r;   _NodeProducer)NrX   NF)rH   r   r   z
str | Noner?   r*   rI   z_NodeProducer | Noner6   rl   r;   z	pydot.Dot)r;   None)
__future__r   r]   r   collectionsr   collections.abcr   typingr   r,   onnxr   r   r	   rB   rE   r:   r-   rm   r   r"   r=   rR   rj   __name__r<   r   r   <module>ru      s     #   # $   2 2 	 y!
)S)5::56
 "-0. *.!&&
& & (	&
 & &R&'R zF r   