
    i                         S SK Jr  S SKJrJrJrJrJr  S SKrS SK	J
r
  S SKJr  S SKJr  SS/rSS	 jr " S
 S5      rS\R$                  S\R$                  SS4S jrg)    )defaultdict)CallableAnyOptionalTupleDictN)Table)Text)print	ModelInfoprint_simplifying_infoc                 b    S H"  n[        U 5      S:  a  U S U U 3s  $ U S-  n M$     U S SU 3$ )N) KiMiGiTiPiEiZig      @z3.1fz.1fYi)abs)numsuffixunits      Q/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/onnxsim/model_info.pyhuman_readable_sizer      sK    >s8f$ZvfX..v ? #Yb!!    c                   t    \ rS rSrSrS\R                  S\\\	\
4   \
4   4S jrS\R                  4S jrSrg	)
r      u   
Model info contains:
1. Num of every op
2. Model size
TODO: 
Based on onnx runtime, get
1、FLOPs
2、forward memory footprint
3、memory access
4、compute density
graphreturnc                 n   [        [        5      nSnUR                   H  nX$R                  ==   S-  ss'   UR                   H  n/ nUR
                  b  UR                  UR
                  5        UR                  b  UR                  UR                  5        U HW  nU R                  U5      u  p[        [        [        U5      [        U5      -   V
s0 s H  oX*   X   -   _M     sn
5      nX9-  nMY     M     M     US==   [        UR                  5      -  ss'   X1R                  5       -  nX#4$ s  sn
f )Nr      Constant)r   intnodeop_type	attributegappendgraphsextendget_infosetleninitializerByteSize)selfr!   op_nums
model_sizer'   attr
sub_graphs	sub_graphsub_op_numssub_model_sizeks              r   r.   ModelInfo.get_info"   s   c"
JJDLL!Q&!
66%%%dff-;;*%%dkk2!+I26--	2J/K)#X[\cXdgjkvgwXw/xXwST7:3N0NXw/xyG0J ", '  	
s5#4#455nn&&
""	 0ys   D2modelc                 T    U R                  UR                  5      u  U l        U l        g N)r.   r!   r4   r5   )r3   r=   s     r   __init__ModelInfo.__init__5   s    (,ekk(B%dor   )r5   r4   N)__name__
__module____qualname____firstlineno____doc__onnx
GraphProtor   r   strr&   r.   
ModelProtor@   __static_attributes__ r   r   r   r      sB    
#doo #%S#X8K2L #&Cdoo Cr   	model_ori	model_optr"   c           
         [        U 5      n[        U5      n[        5       nUR                  S5        UR                  S5        UR                  S5        SS[        S[        [        [        /[        4   S[
        [        [        /[        4      SS4S	 jjn[        [        [        UR                  R                  5       5      [        UR                  R                  5       5      -  5      5       H)  nU" XFUR                  U   UR                  U   S
 5        M+     U" USUR                  UR                  S [        S9  [        U5        g)a  
--------------------------------------------------------
|             | original model | simplified model |
--------------------------------------------------------
| ****        | ****           | ****             |
--------------------------------------------------------
| Model Size  | ****           | ****             |
--------------------------------------------------------
r   zOriginal ModelzSimplified ModelNtable	is_betterpostprocessr"   c           	          Uc  [         nU" X25      (       a'  U R                  X" U5      [        U" U5      SS95        g U R                  X" U5      U" U5      5        g )Nzbold green1)style)rI   add_rowr
   )rP   keyori_dataopt_datarQ   rR   s         r   rU   'print_simplifying_info.<locals>.add_rowJ   sZ    KX((MM#{84dH%]7< = MM#{84k(6KLr   c                 
    X:  $ r?   rL   optoris     r   <lambda>(print_simplifying_info.<locals>.<lambda>U   s    	r   z
Model Sizec                 
    X:  $ r?   rL   r[   s     r   r^   r_   W   s    X[Xar   )rR   r?   )r   r	   
add_columnr   r   r   sortedlistr/   r4   keysr5   r   r   )rM   rN   ori_infoopt_inforP   rU   rV   s          r   r   r   9   sQ    #H#HGE	R	%&	'(Mu M(CQT:WZ?B[ Mjrs{  ~A  }B  DG  }G  tH  kI M  UY M d3x//4467#h>N>N>S>S>U:VVWXH,,S1  %'A	C Y |X00(2E2EGa  pCD	%Lr   )B)collectionsr   typingr   r   r   r   r   rG   
rich.tabler	   	rich.textr
   richr   __all__r   r   rJ   r   rL   r   r   <module>rn      s\    # 7 7     0
1"!C !CHdoo $// VZ r   