
    
g]                     f    d dl mZ d dlZd dlmZ d dlmZ d dl	m
Z
 ddlmZmZ d Z G d d      Zy)	    )PathN)
ModelProto   )attribute_to_kwargfind_by_namec                 ^   t               }|j                  d | j                  D               |j                  d | j                  D               g }| j                  D ]  }|}|j                  D cg c]R  }|j
                  t        j                  j                  k(  s'|j
                  t        j                  j                  k(  r|T }}|rMi }|j                  D ]  }i }	|j
                  t        j                  j                  k(  r9t        |j                  |      \  }
}|j                  |
i}	|j                  |       n|j
                  t        j                  j                  k(  rSg }|j                  D ]3  }t        ||      \  }
}|j                  |
       |j                  |       5 |j                  |i}	nt        |      }	|j                  |	        t!        j"                  |j$                  |j&                  |j                  fd|j                  i|}|j                  |        | j)                  d       | j                  j+                  |       |j-                  d | j                  D               g }| j.                  D ]=  }|j                  |v r|j1                  |j                         -|j                  |       ? | j&                  D ci c]  }|j                  | }}|D ]U  }| j.                  j1                  |       |j                  |v s-	 | j&                  j1                  ||j                            W |j-                  d	 | j&                  D               | |fS c c}w c c}w # t2        $ r+ |j4                  dk  rt7        d|j                   d       Y w xY w)
zClean unused initializers from graph.

    Returns:
        A cleaned graph without unused initializers
        A list of tensor names, which are not produced by this graph and its subgraphes
    c              3   H   K   | ]  }|j                   D ]	  }|s|   y wN)input).0node
input_names      X/var/www/openai/venv/lib/python3.12/site-packages/onnxruntime/quantization/onnx_model.py	<genexpr>z-_clean_initializers_helper.<locals>.<genexpr>   s$     "p*$W[WaWaeo:Wa:*s   "	"c              3   N   K   | ]  }|j                   s|j                     y wr
   name)r   g_outs     r   r   z-_clean_initializers_helper.<locals>.<genexpr>   s     "V<%5::5::<s   %%r   r   c              3   B   K   | ]  }|j                   D ]  }|   y wr
   )output)r   r   r   s      r   r   z-_clean_initializers_helper.<locals>.<genexpr>@   s"     -fZ^ZeZePVfZefs      zWarning: invalid weight name z' found in the graph (not a graph input)c              3   4   K   | ]  }|j                     y wr
   r   )r   r   s     r   r   z-_clean_initializers_helper.<locals>.<genexpr>T   s     -RkUejjks   )setupdater   r   	attributetypeonnxAttributeProtoGRAPHGRAPHS_clean_initializers_helpergr   graphsappendr   onnx_helper	make_nodeop_typer   
ClearFieldextenddifference_updateinitializerremoveStopIteration
ir_versionprint)graphmodelrequesting_tensor_names	new_nodesr   new_nodeattrgraph_attrskwargsnew_attributecleaned_sub_graphsub_requesting_tensor_namescleaned_graphessubgraphunused_initializerr+   r   name_to_inputs                     r   r!   r!      sE    "e"""p%**"pp"""V5<<"VVI

 
&yyD//555dFYFYF`F`9` & 	 

 F "99 3 3 9 99 34665A)3%)YY0A$BM+223NOYY$"5"5"<"<<&(O$(KK 7xG-7'../@A/667RS %0 &*YY$@M$6t$<Mm,+ ', #,,T\\4::t{{mY]YbYbmflmH"A D 
V	JJi ---f-ff((66#**;+;+;< %%k2 ) 5:KK@K5UZZ&KM@)  -},u""=1A1A#BC	 * ---Rekk-RR)))s
Z A ! u##a'9+:J:J9KKrstus   1AM.M3(M881N,+N,c                   t   e Zd ZdefdZd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd ZdefdZd Zd Zd Zd Zd Zd Zd Zd5dZd5dZd5dZd Z d  Z!d! Z"d" Z#e$d#        Z%e$d$        Z&d% Z'd6d&Z(e$d'        Z)d( Z*d) Z+e$d*        Z,d+ Z-d, Z.d- Z/d. Z0ded/e1fd0Z2d1 Z3d2 Z4d5d3Z5d4 Z6y)7	ONNXModelr1   c                     || _         y r
   )r1   )selfr1   s     r   __init__zONNXModel.__init__Z   s	    
    c                 B    | j                   j                  j                  S r
   )r1   r0   r   rB   s    r   nodeszONNXModel.nodes]   s    zz$$$rD   c                 B    | j                   j                  j                  S r
   )r1   r0   r+   rF   s    r   r+   zONNXModel.initializer`   s    zz+++rD   c                    t        |      dk(  rt        d      | j                         D ]  }| j                  |d        |D ]B  }| j                  |       | j                  j
                  j                  j                  |       D y )Nr   zCan add an empty list.gain)len
ValueErrorr+   _check_initr1   r0   r$   )rB   initsinits      r   initializer_extendzONNXModel.initializer_extendc   sr    u:?566$$&DT6* 'DT"JJ((//5 rD   c                 .    | j                   j                  S r
   )r1   r0   rF   s    r   r0   zONNXModel.graphl   s    zzrD   c                 .    | j                   j                  S r
   )r1   r.   rF   s    r   r.   zONNXModel.ir_versiono   s    zz$$$rD   c                 .    | j                   j                  S r
   )r1   opset_importrF   s    r   rT   zONNXModel.opset_importr   s    zz&&&rD   c                     | j                   j                  D ]  }|j                  |k(  s||_         y  | j                   j                  j	                  t        j                  ||      g       y r
   )r1   rT   domainversionr)   r%   make_opsetid)rB   rV   rW   opsets       r   set_opset_importzONNXModel.set_opset_importu   sV    ZZ,,E||v% ' -
 	

&&(@(@(Q'RSrD   c                     || j                   j                  j                  v r0| j                   j                  j                  j                  |       y y r
   )r1   r0   r   r,   rB   r   s     r   remove_nodezONNXModel.remove_node}   s=    4::##(((JJ!!((. )rD   c                 4    |D ]  }| j                  |        y r
   )r]   )rB   nodes_to_remover   s      r   remove_nodeszONNXModel.remove_nodes   s    #DT" $rD   c                     | j                   j                  j                  j                  | j	                  |      g       y r
   )r1   r0   r   r)   _check_noder\   s     r   add_nodezONNXModel.add_node   s.    

$$d&6&6t&<%=>rD   c                 4    |D ]  }| j                  |        y r
   )rc   )rB   nodes_to_addr   s      r   	add_nodeszONNXModel.add_nodes   s     DMM$ !rD   c                     t        |j                  | j                  j                  j                        B| j                  |       | j                  j                  j                  j                  |g       y y r
   )r   r   r1   r0   r+   rM   r)   )rB   tensors     r   add_initializerzONNXModel.add_initializer   sW    TZZ%5%5%A%ABJV$JJ((//9 KrD   c                 t    | j                   j                  j                  D ]  }|j                  |k(  s|c S  y r
   r1   r0   r+   r   )rB   r   rh   s      r   get_initializerzONNXModel.get_initializer   s2    jj&&22F{{d" 3 rD   c                 t    | j                   j                  j                  D ]  }|j                  |k(  s|c S  y r
   )r1   r0   r   r   )rB   r   r   s      r   find_graph_inputzONNXModel.find_graph_input   s2    ZZ%%++EzzZ' , rD   c                 t    | j                   j                  j                  D ]  }|j                  |k(  s|c S  y r
   )r1   r0   r   r   )rB   output_namer   s      r   find_graph_outputzONNXModel.find_graph_output   s2    jj&&--F{{k) . rD   tensor_namec                 \   | j                   j                  j                  D ci c]  }|j                  |j                   }}||v r||   j
                  S | j                  |      }|r|j                  j
                  S | j                  |      }|r|j                  j
                  S y c c}w r
   )r1   r0   
value_infor   r   tensor_typern   rq   )rB   rr   objtensor_type_mapg_inputg_outputs         r   get_tensor_typezONNXModel.get_tensor_type   s    9=9I9I9T9TU9T#388SXX-9TU/)";/;;;''4<<+++))+6==,,, Vs   B)c                 j   | j                   j                  j                  D ]h  }|j                  dk(  s|j                  d   |k(  s&|j
                  D ]4  }|j                  dk(  st        j                  |j                        c c S  j | j                  |      }|t        j                  |      S y )NConstantr   value)r1   r0   r   r'   r   r   r   onnx_numpy_helperto_arraytrl   )rB   rp   r   r5   r+   s        r   get_constant_valuezONNXModel.get_constant_value   s    JJ$$))D||z);;q>[0 $99/#4#=#=dff#EE !/ * **;7"$--k::rD   c                 |    | j                   j                  j                  D ch c]  }|j                   c}S c c}w r
   rk   )rB   r+   s     r   get_initializer_name_setz"ONNXModel.get_initializer_name_set   s2    48JJ4D4D4P4PQ4P[  4PQQQs   9c                    || j                   j                  j                  v r| j                   j                  j                  j                  |       | j                   j                  j                  D ]L  }|j
                  |j
                  k(  s| j                   j                  j                  j                  |        y  y y r
   )r1   r0   r+   r,   r   r   )rB   rh   r   s      r   remove_initializerzONNXModel.remove_initializer   s    TZZ%%111JJ((//7))//::,JJ$$**11%8 0 2rD   c                 4    |D ]  }| j                  |        y r
   )r   )rB   init_to_remover+   s      r   remove_initializerszONNXModel.remove_initializers   s    )K##K0 *rD   c                     | j                         }t               }| j                  j                  j                  D ],  }|j
                  |vs|j                  |j
                         . |S r
   )r   r   r1   r0   r   r   add)rB   initializer_namesnon_initializer_inputsr   s       r   get_non_initializer_inputsz$ONNXModel.get_non_initializer_inputs   sZ     99;!$ZZ%%++Ezz!22&**5::6 , &%rD   c                     i }| j                   j                  j                  D ]5  }|j                  D ]$  }|s||vr|g||<   ||   j	                  |       & 7 |S r
   )r1   r0   r   r   r$   )rB   input_name_to_nodesr   r   s       r   r   zONNXModel.input_name_to_nodes   sd     JJ$$))D"jj
!)<<;?&+J7+J7>>tD ) * #"rD   c                     i }| j                   j                  j                  D ]  }|j                  D ]
  }|s|||<     |S r
   )r1   r0   r   r   )rB   output_name_to_noder   rp   s       r   r   zONNXModel.output_name_to_node   sF     JJ$$))D#{{7;'4  + * #"rD   Nc                     || j                         }g }|j                  D ]"  }||v s||   D ]  }|j                  |        $ |S r
   )r   r   r$   )rB   r   r   childrenr   s        r   get_childrenzONNXModel.get_children   sU    &"&":":"<kkF,,/7DOOD) 8 " rD   c                     || j                         }g }|j                  D ]  }||v s|j                  ||           |S r
   )r   r   r$   )rB   r   r   parentsr   s        r   get_parentszONNXModel.get_parents   sL    &"&":":"<ZZE++259:   rD   c                     || j                         }t        |j                        |k  ry |j                  |   }||vry ||   S r
   )r   rK   r   )rB   r   idxr   r   s        r   
get_parentzONNXModel.get_parent  sN    &"&":":"<tzz?c!

3++"5))rD   c                 j    t        |j                        }|j                  |       t        ||      }|S )zFind out if a node exists in a graph or a node is in the
        new set of nodes created during quantization.

        Returns:
            The node found or None.
        )listr   r)   r   )rB   	node_namenew_nodes_listr0   graph_nodes_listr   s         r   find_node_by_namezONNXModel.find_node_by_name  s3      

+/I'78rD   c                     d}| j                   j                  j                  D ]Y  }|j                  s|j                  j	                  |      s,	 t        |j                  t        |      d       }t        ||      }[ |S # t        $ r Y iw xY w)z
        Gets the largest node name (int) suffix for all node names that begin with `node_name_prefix`.
        Example: for nodes my_prefix_0 and my_prefix_3, this method returns 3.
        N)	r1   r0   r   r   
startswithintrK   maxrL   )rB   node_name_prefixsuffixr   indexs        r   get_largest_node_name_suffixz&ONNXModel.get_largest_node_name_suffix  s    
 JJ$$))DyyTYY112BC		#.>*?*A BCE /F	 *  " s   -B	BBc                    d}| j                   j                  j                  D ]L  }|j                  j	                  |      s	 t        |j                  t        |      d       }t        ||      }N |S # t        $ r Y \w xY w)ab  
        Gets the largest initializer name integer suffix for all initializer names that begin
        with `initializer_name_prefix`. This can be used to create unique initializer names.

        Example: for initializer names 'my_weight_0' and 'my_weight_3', this method returns 3 if
                 `initializer_name_prefix` is 'my_weight_'.
        r   N)	r1   r0   r+   r   r   r   rK   r   rL   )rB   initializer_name_prefixr   r+   r   s        r   #get_largest_initializer_name_suffixz-ONNXModel.get_largest_initializer_name_suffix+  s     ::++77K**+BC 0 05L1M1O PQE /F	 8  " s   -A44	B ?B c                     g }|j                   D ]4  }|j                  D ]#  }||j                  k(  s|j                  |       % 6 |S )zD
        Find all nodes with given initializer as an input.
        )r   r   r   r$   )rB   r0   r+   rG   r   
node_inputs         r   find_nodes_by_initializerz#ONNXModel.find_nodes_by_initializer?  sF     JJD"jj
!1!11LL& )  rD   c                     t        t        |      dz
  dd      D ]/  }||   }|j                  D ]  }|j                  | k(  s||fc c S  1 y)Nr   r   )NN)rangerK   r+   r   )r   
graph_pathgidr0   rh   s        r   __get_initializerzONNXModel.__get_initializerJ  sR    Z1,b"5CsOE++;;$&!5=( , 6
 rD   c           	      $
   g }| d   }|j                   D ]  }|j                  D cg c]#  }|j                  dk(  s|j                  dk(  s"|% }}t        |      r$i }|j                  D ]  }|j                  dk(  r=| j	                  |j
                         |j                  t        j                  |       i}nr|j                  dk(  rXg }|j                  D ]8  }	| j	                  |	       |j                  t        j                  |       g       : |j                  |i}nt        |      }|j                  |        t        j                  |j                  |j                   |j"                  fd|j                  i|}|j                  dk(  r+d}
d}d}d}|j                  D ]  }|j                  dk(  rt        j$                  |      }
(|j                  d	k(  rt        j$                  |      }M|j                  d
k(  rt        j$                  |      }r|j                  dk(  st        j$                  |      } |
dk(  re|dk(  r_|dk(  rY|j                   d   }|dk(  r;t        j'                  |j                   d   |       \  }}|rt)        j*                  |      }t)        j,                  |j.                        }|j                  |_        |j0                  j3                  |       |j                   D ].  }|j                  |k(  s|j                   j3                  |        n |j0                  j                  |g       nY|dz  }t        j                  d|j                   d   g|g|j                  r|j                  dz   nd      }|j	                  |       t        j                  d|j                   d   |g|j"                  d   t        |j                         dkD  rdndz   g|j                  r|j                  dz   nd      }|j	                  |       t        |j                         dkD  s$t        j                  d|j"                  d   dz   |j                   d   g|j"                  |j                  r|j                  dz   nd      }|j	                  |       |j	                  |       |j	                  |        |j5                  d       |j                   j                  |       | j7                          |S c c}w )Nr      
   r   Gemmg      ?r   alphabetatransAtransBr   _Transposed	Transpose
_Transpose )inputsoutputsr   MatMul   _MatMulAdd_Addr   )r   r   r   rK   r$   r"   r   r@   $_ONNXModel__replace_gemm_with_matmulr#   r)   r   r   r%   r&   r'   r   r   get_attribute_value_ONNXModel__get_initializerr~   r   
from_arrayTr+   r,   r(   pop)r   r3   r0   r   r5   r6   r7   kvr}   r<   r   r   r   r   inputBBBs_graphB_arrayB_transr   transpose_nodematmul_noderc   s                          r   __replace_gemm_with_matmulz$ONNXModel.__replace_gemm_with_matmulS  s@   	2JJD,0NN`NDdii1nPTPYPY]_P_4NK`; NNDyyA~"))$&&1"ii)M)Mj)YZb "(,H&--h7!LL)*N*Nz*Z)[\ )4 #ii//5MM"% + #,,LL$**dkk@D		MS ||v% NNDyyG+ + ? ? Ef,*>>tDh.!,!@!@!Fh.!,!@!@!F + C<DCKFaK!ZZ]F{&/&A&A$**Q-Q[&\8&7&@&@&CG&7&B&B799&MG+,66GL$0077:)1#(::#7$,NN$9$9%$@$) *8 %0077	B"m3F-8-B-B +(,

1)/AETYY%=PR	.N &,,^<"-"7"7  $

1v6!%QDJJRS@S9Y[!\ ]6:iiTYY2R	#K $$[14::*#.#8#8!$(KKNY$>

1#N$(KK7;yyV!3b	$ "((2 $$T*   &g j 	 

)$o as   #T
Tc                 P    | j                         g}t        j                  |       y r
   )r0   r@   r   )rB   r   s     r   replace_gemm_with_matmulz"ONNXModel.replace_gemm_with_matmul  s    jjl^
,,Z8rD   c                 \   | j                          |rCt        j                  j                  | j                  dt        |      j                  dz   d       | j                  j                  j                  D ]  }| j                  |d        t        j                  | j                  |       y)zS
        Save model to external data, which is needed for model size > 2GB
        Tz.data)all_tensors_to_one_filelocationconvert_attributeendN)topological_sortr   external_data_helperconvert_model_to_external_datar1   r   r   r0   r+   rM   
save_model)rB   output_pathuse_external_data_formatrO   s       r   save_model_to_filezONNXModel.save_model_to_file  s     	#%%DD

(,k*//'9"&	 E  JJ$$00DT5) 1

K0rD   c                     t        |t              rt        |t              sJ t        t        | j                              D ]$  }| j                  |   |k(  s|| j                  |<   & y r
   )
isinstancestrr   rK   r   )r   old_input_namenew_input_namejs       r   replace_node_inputzONNXModel.replace_node_input  sO    .#.:nc3RRRs4::'Azz!}. .

1 (rD   c                 |    | j                   j                  j                  D ]  }t        j	                  |||        y r
   )r1   r0   r   r@   r   )rB   r   r   r   s       r   replace_input_of_all_nodesz$ONNXModel.replace_input_of_all_nodes  s.    JJ$$))D((~~N *rD   c                     | j                   j                  j                  D ](  }|j                  |v st        j                  |||       * y r
   )r1   r0   r   r   r@   r   )rB   r   r   node_names_setr   s        r   replace_input_of_nodesz ONNXModel.replace_input_of_nodes  s:    JJ$$))DyyN*,,T>>R *rD   c                     t        |t              rt        |t              sJ t        t        | j                              D ]$  }| j                  |   |k(  s|| j                  |<   & y r
   )r   r   r   rK   r   )r   old_output_namenew_output_namer   s       r   replace_node_outputzONNXModel.replace_node_output  sQ    /3/JPS4TTTs4;;'(A{{1~0!0A )rD   c                 |    | j                   j                  j                  D ]  }t        j	                  |||        y r
   )r1   r0   r   r@   r   )rB   r   r   r   s       r   replace_output_of_all_nodesz%ONNXModel.replace_output_of_all_nodes  s.    JJ$$))D))$Q *rD   c                     | j                   j                  j                  D ](  }|j                  |v st        j                  |||       * y r
   )r1   r0   r   r   r@   r   )rB   r   r   r   r   s        r   replace_output_of_nodesz!ONNXModel.replace_output_of_nodes  s:    JJ$$))DyyN*--dO_U *rD   c                    | j                         }g }| j                         }|D ]T  }|j                  dk(  s| j                  |j                  d         r2|j                  d   |vsD|j                  |       V | j                  |       g }| j                         D ]  }|j                  |vs| j                  |j                        r.|j                  |       | j                         j                  D ]E  }|j                  |j                  k(  s| j                         j                  j                  |       G  | j                  |       y )Nr|   r   )r   rG   r'   is_graph_outputr   r$   r`   r+   r   r0   r   r,   r   )rB   r   unused_nodesrG   r   ununsed_weightswgraph_inputs           r   remove_unused_constantz ONNXModel.remove_unused_constant  s   "668 

D
*,,T[[^<KKN*==##D)  	,'!!#Avv009M9Maff9U&&q)#'::<#5#5K"''1661

**11+> $6	 $ 	  1rD   c                 h    t        fd| j                  j                  j                  D              S )Nc              3   <   K   | ]  }|j                   k(    y wr
   r   )r   r   rp   s     r   r   z,ONNXModel.is_graph_output.<locals>.<genexpr>  s     T<S&6;;+-<S   )anyr1   r0   r   )rB   rp   s    `r   r   zONNXModel.is_graph_output   s$    TDJJ<L<L<S<STTTrD   returnc                 h    t        fd| j                  j                  j                  D              S )Nc              3   <   K   | ]  }|j                   k(    y wr
   r   )r   r   rr   s     r   r   z+ONNXModel.is_graph_input.<locals>.<genexpr>  s     Q:P5::,:Pr  )r  r1   r0   r   )rB   rr   s    `r   is_graph_inputzONNXModel.is_graph_input  s$    Q$**:J:J:P:PQQQrD   c                    dgt        | j                               z  }i }g }t        | j                               D ]  \  }}t        d |j                  D              ||<   ||   dk(  r#|j                  | j                         |          P|j                  D ]$  }|s||vr|g||<   ||   j                  |       &  | j                         D cg c]  }|j                   }}| j                  j                  j                  D 	cg c]  }	|	j                   }
}	||
z   }|j                          d }|D ]O  }||k(  r	|}||v s||   D ]8  }||   dz
  ||<   ||   dk(  s|j                  | j                         |          : Q d}t        |      }||k  ri||   j                  D ]L  }||v s||   D ]=  }||   dz
  ||<   ||   dk(  s|j                  | j                         |          |dz   }? N |dz   }||k  ri|t        | j                         j                        k(  sJ d       | j                         j                  d       | j                         j                  j                  |       y c c}w c c}	w )Nr   c              3   &   K   | ]	  }|sd   yw)r   N )r   _s     r   r   z-ONNXModel.topological_sort.<locals>.<genexpr>  s     &B*Qq*s   r   zGraph is not a DAGr   )rK   rG   	enumeratesumr   r$   r+   r   r1   r0   sortr   r   r(   r)   )rB   
deps_countdeps_to_nodessorted_nodesnode_idxr   r   rO   r   r   graph_input_namesinput_namesprev_input_namestartr   r   s                   r   r   zONNXModel.topological_sort  s   S3tzz|,,
'

5NHd#&&B$**&B#BJx (#q(##DJJL$:;"jj
!]219
M*-!*-44X> ) 6 483C3C3EF3E4TYY3EF59ZZ5E5E5K5KL5KEUZZ5KL'*;;%J*,(O]* -j 9H+5h+?!+CJx(!(+q0$++DJJL,BC !: & ,ck&u-44]*$1&$9/9(/Ca/G
8,%h/14(//

X0FG"%'C	 %: 5 AIE ck c$**,++,,B.BB,

'

  .? GLs   I:	I?c                 J    t        | j                         | j                        S r
   )r!   r0   r1   rF   s    r   clean_initializerszONNXModel.clean_initializers<  s    )$**,

CCrD   c                     |j                   t        j                  j                  k(  rU|j	                  d      rDt        |j                        }t        t        d |            rt        d|j                  d      |S )Nraw_datac                     | dz  dk(  S )N   r
  )is    r   <lambda>z'ONNXModel._check_init.<locals>.<lambda>C  s    a#g#%5rD   zInitializer z	 has nan.)	data_typer   TensorProtoFLOAT8E4M3FNHasFieldr   r  r  maprL   r   )rB   rO   testbs       r   rM   zONNXModel._check_init?  sa    >>T--:::}}Z('s5q9:$|DII=	%JKKrD   c                 j   |j                   dk(  r|j                  d   }| j                  |      }|j                  }|t        j
                  j                  t        j
                  j                  t        j
                  j                  t        j
                  j                  hv rt        d| d      |S )z
        A quantization to float 8 does not use quantized bias but float 16 bias.
        This function checks that DequantizeLinear is not used to
        dequantize from float 16.
        DequantizeLinearr   z;Unsupported DequantizeLinear operator, dequantization from .)r'   r   rl   r  r   r   FLOAT16FLOATDOUBLEBFLOAT16RuntimeError)rB   r   
zero_pointrO   dtypes        r   rb   zONNXModel._check_nodeG  s     <<--AJ''
3DNNE  ((  &&  ''  ))	  #%`af`ggh#ijjrD   r
   )F)7__name__
__module____qualname__r   rC   rG   r+   rP   r0   r.   rT   rZ   r]   r`   rc   rf   ri   rl   rn   rq   r   rz   r   r   r   r   r   r   r   r   r   r   r   r   r   r   staticmethodr   r   r   r   r   r   r   r   r   r   r   r   boolr  r   r  rM   rb   r
  rD   r   r@   r@   Y   sY   j %,6 %'T/#? :
3  R1&	##	*
"(	   [ [z91  / /OS
 1 1RV
26UR# R$ R
2/hDrD   r@   )pathlibr   r   onnx.helperhelperr%   onnx.numpy_helpernumpy_helperr~   onnx.onnx_pbr   quant_utilsr   r   r!   r@   r
  rD   r   <module>r<     s,   
   ! - # 9G*T rD   