+
    9i0Q                        ^ RI Ht ^ RIt^ RIHt ^ RIHt ^ RIHt ^ RI	t	^RI
Ht ] ! R R4      4       t ! R	 R
]4      tR# )    )annotationsN)MutableMapping)	dataclass)Any)	QuantTypec                      ] tR t^t$ RtR]R&   RtR]R&   RtR]R&   RtR]R	&   R
 R lt	]
RR R ll4       tR R ltRtR# )QuantTypeInfoz:
The quantization type information for a tensor override.
r   
quant_typeNbool | None	symmetricreduce_rangez
int | Noneaxisc                   V ^8  d   QhRR/# )   otherobject )formats   "m/var/www/html/photoedit/myenv/lib/python3.14/site-packages/onnxruntime/quantization/tensor_quant_overrides.py__annotate__QuantTypeInfo.__annotate__   s      F     c                	   \        V\        4      '       d   V P                  VP                  8H  ;'       d    V P                  R J ;'       g8    VP                  R J ;'       g"    V P                  VP                  8H  ;'       dg    V P                  R J ;'       g8    VP                  R J ;'       g"    V P                  VP                  8H  ;'       d    V P
                  VP
                  8H  # \        # N)
isinstancer	   r
   r   r   r   NotImplemented)selfr   s   &&r   __eq__QuantTypeInfo.__eq__   s    e]++5#3#33 . .^^t+kku$/Fkk$..\a\k\kJk. .&&$.ww%2D2D2LwwPTPaPaejewewPw. . YY%**,	 r   c          
     ,    V ^8  d   QhRRRRRRRRRR	/# )
r   raw_dictdict[str, Any]default_qtypeQuantType | Nonedefault_symmetricr   default_reduce_rangereturnr	   r   )r   s   "r   r   r   (   s:     
 
 
'
 '
 *	

 

r   c                	    \        V P                  R V4      V P                  RV4      V P                  RV4      V P                  R4      4      # r
   r   r   r   )r	   get)r!   r#   r%   r&   s   &&&&r   load_from_dictQuantTypeInfo.load_from_dict'   sI     LL}5LL&78LL)=>LL 	
 	
r   c                   V ^8  d   QhRR/# )r   r!   r"   r   )r   s   "r   r   r   5   s     ) )^ )r   c                	    V P                   VR &   V P                  e   V P                  VR&   V P                  e   V P                  VR&   V P                  e   V P                  VR&   R# R# )r
   Nr   r   r   r)   )r   r!   s   &&r   save_to_dictQuantTypeInfo.save_to_dict5   sa    !%>>%$(NNH[!('+'8'8H^$99 #yyHV !r   r   )NNN)__name__
__module____qualname____firstlineno____doc____annotations__r   r   r   r   staticmethodr+   r/   __static_attributes__r   r   r   r	   r	      sP     !I{! $L+$D* 
 
) )r   r	   c                  F  a  ] tR t^?tRtR R ltR R ltR R ltR R	 ltR/R
 R llt	R/R R llt
R R ltR R ltR R ltR R ltR0R R lltR/R R lltR1R R lltR/R R lltR R ltR  R! ltR" R# ltR$ R% ltR& R' ltR( tR) tR* R+ ltR, V 3R- lltR.tV ;t# )2TensorQuantOverridesHelperzR
Utility wrapper over the tensor quantization overrides passed via extra_options.
c                   V ^8  d   QhRR/# )r   raw_overridesdict[str, list[dict[str, Any]]]r   )r   s   "r   r   'TensorQuantOverridesHelper.__annotate__D   s     \ \&E \r   c                	2    Wn         R V n        0 RmV n        R # )N>   rmaxrminr   r   )	overridesquant_typeskeys_unsupported_with_scale_zp)r   r<   s   &&r   __init__#TensorQuantOverridesHelper.__init__D   s    &.[+r   c                    V ^8  d   QhRRRR/# r   tensor_namestrr'   boolr   )r   s   "r   r   r>   I   s     B BC BD Br   c                	d    V P                   P                  V4      pT;'       d    R V^ ,          9  # r   rB   r*   r   rI   overrides_lists   && r   has_per_tensor_overrides3TensorQuantOverridesHelper.has_per_tensor_overridesI   s.    ++K8AA&q0A"AAr   c                    V ^8  d   QhRRRR/# rH   r   )r   s   "r   r   r>   M   s     > >S >T >r   c                	d    V P                   P                  V4      pT;'       d    R V^ ,          9   # rM   rN   rO   s   && r   has_per_channel_overrides4TensorQuantOverridesHelper.has_per_channel_overridesM   s.    ++K8==&N1,="==r   c                    V ^8  d   QhRRRR/# rH   r   )r   s   "r   r   r>   Q   s     i ic id ir   c                	    V P                   P                  V4      pT;'       d!    R V^ ,          9   ;'       d    RV^ ,          9   # )scale
zero_pointrN   rO   s   && r   overrides_scale_zp-TensorQuantOverridesHelper.overrides_scale_zpQ   sB    ++K8hh7nQ.?#?hhlVdefVgFghr   c               $    V ^8  d   QhRRRRRR/# )r   rI   rJ   default_valzdict[str, Any] | Noner'   r   )r   s   "r   r   r>   U   s(     = == += 
	=r   c                	    Ve   V.MR pV P                   P                  W4      pV'       d   RV^ ,          9   d   \        RV R24      hV'       d
   V^ ,          # R # )Nr   Expected tensor 'zL' to use per-tensor quantization overrides, but found per-channel overrides.rB   r*   
ValueError)r   rI   r^   default_list_valrP   s   &&&  r   get_per_tensor_overrides3TensorQuantOverridesHelper.get_per_tensor_overridesU   sh    
 -8,CK=++KJfq(99#K= 13 4 
 %3~a <<r   c               $    V ^8  d   QhRRRRRR/# )r   rI   rJ   r^   zlist[dict[str, Any]] | Noner'   r   )r   s   "r   r   r>   d   s(       1 
%	r   c                	    V P                   P                  W4      pV'       g   R # RV^ ,          9  d   \        RV R24      hV# )Nr   r`   zE' to have per-channel quantization overrides (axis value is missing).ra   )r   rI   r^   rP   s   &&& r   get_per_channel_overrides4TensorQuantOverridesHelper.get_per_channel_overridesd   sM    
 ++KE**#K=0uv  r   c                   V ^8  d   QhRR/# )r   r'   zset[QuantType]r   )r   s   "r   r   r>   u   s          r   c                	   V P                   e   V P                   # \        4       V n         V P                  '       d   V P                  P                  4        Fw  pV Fn  pRV9   d#   V P                   P	                  VR,          4       RV9   g   K5  RVR,          9   g   KE  V P                   P	                  VR,          R,          4       Kp  	  Ky  	  V P                   # )Nr
   convert)rC   setrB   valuesadd)r   quant_overrides_listquant_overridess   &  r   get_quant_types*TensorQuantOverridesHelper.get_quant_typesu   s    '###5>>>(,(=(=(?$';O#6((,,_\-JK O3XaHb8b((,,_Y-G-UV (< )@ r   c               $    V ^8  d   QhRRRRRR/# )r   rI   rJ   rq   r"   r'   tuple[bool, str | None]r   )r   s   "r   r   r>      s/     S S 	S
 (S 
!Sr   c                	   \        V\        4      '       g	   R RV R23# W19   pVP                  R4      pV'       d   V P                  P	                  V4       RV9   pRV9   pV'       d	   V'       d   V'       d   V'       g   R# V'       dD   V P
                  P                  \        V4      4      p	V	'       d   R RRP                  V	4       R23# R	V9   d   V'       g   R R
V 23# RV9   Ed   V'       d   R# RVR,          9  d	   R RV R23# R	VR,          9   d   R R
V 23# VR,          R,          p
Ve   TMTpW8X  d	   R RV R23# RVR,          9   pRVR,          9   pV'       d	   V'       d   V'       d   V'       g	   R RV R23# V'       dN   V P
                  P                  \        VR,          4      4      p	V	'       d   R RRP                  V	4       RV R23# V P                  P	                  V
4       R# )F#Tensor quantization overrides for '' are not in a dictr
   rY   rZ   Tensor override option(s) [, +] are invalid with 'scale' and 'zero_point'r   zMOption 'reduce_range' is only supported for initializers, not for activation rl   z'convert' options (tensor 'z') must specify a 'quant_type'zC'convert' quant_type must differ from original quant_type (tensor 'z')zXMust provide both 'scale' and 'zero_point' if one of the overrides is provided (tensor 'z5] are invalid with 'scale' and 'zero_point' (tensor 'FzNMust provide both 'scale' and 'zero_point' if one of the overrides is provided)Fz.Cannot use 'convert' override for initializersTN)	r   dictr*   rC   ro   rD   intersectionrm   join)r   initializersdefault_activation_qtyperI   rq   is_initializerr
   	has_scalehas_zero_pointkeysconvert_quant_typeoriginal_quant_typeconvert_has_scaleconvert_has_zero_points   &&&&&         r   _is_valid_per_tensor/TensorQuantOverridesHelper._is_valid_per_tensor   sK    /4005k]BUV 
 %4$((6
  ,.	%8n. 
 66CCCDXYD1$))D/1BBmn 
 _,^_`k_lm 
 'NN?9#== ;K=Hfggg!;;cdocpq 
 "1!;L!I0:0F*Ld!8YZeYffhi 
 !(?9+E E%1_Y5O%O"!*@F\evnozn{{}~ 
 !::GGO\eLfHgh5diio5F G$$/=4    !34r   c               $    V ^8  d   QhRRRRRR/# )r   rI   rJ   rp   zlist[dict[str, Any]]r'   ru   r   )r   s   "r   r   r>      s/     L L L 3	L
 
!Lr   c                	h   W!9   pV'       g	   R RV R23# V^ ,          P                  R4      pVf	   R RV R23# \        W,          P                  4      p\        V4      pTpV^ 8  d	   W,          pV^ 8  g   V\        V4      8  d   R RV R\        V4       R23# \        V4      ^8  d7   \        V4      Wh,          8w  d!   R R	V R
V RWe,           R\        V4       R2	3# RV^ ,          9   d	   R RV R23# V^ ,          P                  R4      p	V	'       d   V P                  P                  V	4       V^ ,          P                  R4      p
V^ ,          P                  R4      pRV^ ,          9   pRV^ ,          9   pT;'       d    TpV'       d	   V'       d   V'       d   V'       g   R!# V'       dK   V P                  P                  \        V^ ,          4      4      pV'       d   R RRP                  V4       R23# RV^ ,          9   pRV^ ,          9   pT;'       d    TpV'       d	   V'       d   V'       g   V'       d   R"# \        VR,          4       EF[  w  pp\        V\        4      '       g   R RV RV R23u # RV9   d   R RV R23u # RV9   d   V	VR,          8w  d   R#u # RV9   d!   VVR,          8w  d   VVR,          8w  d   R$u # RV9   d   V
VR,          8w  d   R%u # RV9   d   VVR,          8w  d   R&u # RV9   ;'       d    RV9   pV'       d   V'       g   R RV RV R23u # V'       dF   V P                  P                  \        V4      4      pV'       d   R RRP                  V4       R23u # RV9   ;'       d    RV9   pV'       g   EKF  V'       d   EKQ  R R V RV R23u # 	  R'# )(FTensor 'z6' has per-channel overrides, but is not an initializerr   z!Per-channel overrides for tensor z< is missing an 'axis' value in the first channel dictionary.z0Axis override value is out-of-bounds for tensor z (rank )z1Incorrect number of channel overrides for tensor z (axis z), expected z, but found .rl   z8Cannot use 'convert' override for initializers, such as r
   r   r   rY   rZ   ry   rz   r{   rA   r@   :   NNz'Tensor quantization overrides at index z for 'rx   z]Per-channel overrides that specify scale/zero_point must do so for all channels, but tensor 'z' is missing them at index zVPer-channel overrides that specify rmin/rmax must do so for all channels, but tensor 'r|   )Fz6Must provide both 'rmin' and 'rmax' if one is provided)FzTChannel quantization types for tensor '{tensor_name}' do not match at index {index}.)FzHChannel axis for tensor '{tensor_name}' does not match at index {index}.)FzSChannel symmetric value for tensor '{tensor_name}' does not match at index {index}.)FzVChannel reduce_range value for tensor '{tensor_name}' does not match at index {index}.r}   )r*   listdimslenrC   ro   rD   r   rm   r   	enumerater   r~   )r   r   rI   rp   r   r   weight_shapeweight_rank	norm_axisr
   r   r   r   r   has_scale_zpr   has_rminhas_rmaxhas_rmin_rmaxindexrq   chan_has_scale_zpchan_has_rmin_rmaxs   &&&&                   r   _is_valid_per_channel0TensorQuantOverridesHelper._is_valid_per_channel   sa    %4;-']^ 
 $A&**62<3K= A0 0  L5::;,'	q=$Iq=I\)::B;-wWZ[gWhViijk 
 #$q(S1E-F,Ja-aCK=PWX\W] ^(./|C@T<U;VVWY  ,Q//TU`Taabccc)!,00>
  ,(+//<	+A.22>B3A66	%)=a)@@ 33^n. 
 66CCCH\]^H_D`aD1$))D/1BBmn 
 1!441!44 --XXxH 
 '00DR0H&I"E?ot44=eWF;-Wjk 
 O+ XYdXeefggg
 .:Q]A^3^  (T_V5L-LQZ^mnt^uQu  o-){?[2[  0\_UcEd5d  !(? : ^ ^|?^$5##.-/J5'QRT  !::GGOH\]5diio5FFqr  "(?!:!X!Xv?X}%7%7##.-/J5'QRT o 'Jz r   c               $    V ^8  d   QhRRRRRR/# )r   r   zdict[str, onnx.TensorProto]activation_nameszset[str]r'   ru   r   )r   s   "r   r   r>   i  s(     $ $1$ #$
 
!$r   c                	N   \        4       V n        V P                  '       Ed   V P                  P                  4        F  w  rEWA9  d   WB9  d   R RV R23u # \	        V\
        4      '       g   R RV R23u # V'       g   KE  \	        V^ ,          \        4      '       g   R RV R23u # V^ ,          '       g   K}  V^ ,          P                  R4      p\        V4      ^8  ;'       g    VRJpV'       d   V P                  WV4      u # V P                  WWE^ ,          4      u # 	  R	# )
Fr   z5' in TensorQuantOverrides is not present in the modelrw   z' are not in a listz.Tensor quantization overrides at index 0 for 'rx   r   Nr}   )rm   rC   rB   itemsr   r   r~   r*   r   r   r   )r   r   r   r   rI   rp   r   is_per_channels   &&&&    r   is_valid#TensorQuantOverridesHelper.is_validi  s&    5 >>>59^^5I5I5K12{7Z H[M9n"ooo!"6== $G}Tg"hhh+!"6q"94@@ $RS^R__r"sss+A..+A.226:!$%9!:Q!>!R!R$dBR!55lQeff00 K^_I` - 6L4 r   c          
     ,    V ^8  d   QhRRRRRRRRR	R/# )
r   rI   rJ   new_valsr"   channelszlist[int] | None	overwriterK   r'   r   )r   s   "r   r   r>     s<     ! !! !! #	!
 ! 
!r   c                	   V'       g   R # Ve   \        V4      MRpV P                  P                  V4      pRpV'       gg   V'       d_   \        V P                  V,          4       F>  w  rxVe	   Ws9  d   K  \        V4      P	                  \        V4      4      '       g   K<  R p M	  V'       d[   V'       g   / .V P                  V&   \        V P                  V,          4       F"  w  rxVe	   Ws9  d   K  VP                  V4       K$  	  V# )FNT)rm   rB   r*   r   r   update)	r   rI   r   r   r   have_overrides	do_updatechannelrB   s	   &&&&&    r   update_tensor_overrides2TensorQuantOverridesHelper.update_tensor_overrides  s     $,$83x=d++K8 	^&/{0K&L"'G,Cx=--c)n== %I 'M !/1d{+&/{0K&L"'G,C  * 'M
 r   c               (    V ^8  d   QhRRRRRRRR/# )	r   output_namerJ   r#   r$   r%   r   r'   r	   r   )r   s   "r   r   r>     s2     
 

 (
 '	

 

r   c                	    WP                   9  d   \        W#4      # V P                   V,          ^ ,          p\        VP                  RV4      VP                  RV4      4      # )r   r
   r   )rB   r	   r*   )r   r   r#   r%   tensor_overridess   &&&& r   get_node_output_qtype_info5TensorQuantOverridesHelper.get_node_output_qtype_info  s[     nn, BB>>+6q9  }=  .?@
 	
r   c               0    V ^8  d   QhRRRRRRRRRRR	R
/# )r   
input_namerJ   	node_namer#   r$   r%   r   r&   r'   r	   r   )r   s   "r   r   r>     sF     % %% % (	%
 '% *% 
%r   c                	   WP                   9  g   V P                   V,          '       g   \        W4V4      # V P                   V,          ^ ,          pVP                  RV4      pRV9  d>   \        VVP                  RV4      VP                  RV4      VP                  R4      4      # VR,          p\        VVP                  RV4      4      p	RV9  g   W(R,          9   d   VR,          V	n        V	# )r   r
   rl   r   r   r   
recv_nodes)rB   r	   r*   r
   )
r   r   r   r#   r%   r&   r   producer_typeconvert_dict
qtype_infos
   &&&&&&    r   get_node_input_qtype_info4TensorQuantOverridesHelper.get_node_input_qtype_info  s     ^^+4>>*3M3M CWXX  >>*5a8(,,\=I,,  $$[2CD $$^5IJ $$V,	  (	2"[*;<

 ,)L?Y2Y$0$>J!r   c                   V ^8  d   QhRR/# r   r'   rJ   r   )r   s   "r   r   r>     s     F F Fr   c                	P    \         P                  ! V P                  \        VR 7      # ))defaultindent)jsondumpsrB   rJ   )r   r   s   &&r   
pprint_str%TensorQuantOverridesHelper.pprint_str  s    zz$..#fEEr   c                   V ^8  d   QhRR/# )r   r'   rK   r   )r   s   "r   r   r>     s     " "t "r   c                	$    V P                   '       * # r   rB   r   s   &r   empty TensorQuantOverridesHelper.empty  s    >>!!r   c                   V ^8  d   QhRR/# )r   r'   r=   r   )r   s   "r   r   r>     s      9 r   c                	    V P                   # r   r   r   s   &r   get_dict#TensorQuantOverridesHelper.get_dict  s    ~~r   c                    V ^8  d   QhRRRR/# )r   keyrJ   value
list[dict]r   )r   s   "r   r   r>     s     $ $s $: $r   c                	"    W P                   V&   R # r   r   )r   r   r   s   &&&r   __setitem__&TensorQuantOverridesHelper.__setitem__  s    #sr   c                    V ^8  d   QhRRRR/# )r   r   rJ   r'   r   r   )r   s   "r   r   r>     s     # #s #z #r   c                	(    V P                   V,          # r   r   r   r   s   &&r   __getitem__&TensorQuantOverridesHelper.__getitem__  s    ~~c""r   c                   V ^8  d   QhRR/# )r   r   rJ   r   )r   s   "r   r   r>     s        s  r   c                	     V P                   V R # r   r   r   s   &&r   __delitem__&TensorQuantOverridesHelper.__delitem__  s    NN3r   c                	,    \        V P                  4      # r   )iterrB   r   s   &r   __iter__#TensorQuantOverridesHelper.__iter__  s    DNN##r   c                	,    \        V P                  4      # r   )r   rB   r   s   &r   __len__"TensorQuantOverridesHelper.__len__      4>>""r   c                   V ^8  d   QhRR/# r   r   )r   s   "r   r   r>     s     # # #r   c                	,    \        V P                  4      # r   )rJ   rB   r   s   &r   __str__"TensorQuantOverridesHelper.__str__  r   r   c                   V ^8  d   QhRR/# r   r   )r   s   "r   r   r>     s     U U# Ur   c                	@   < \         SV `  4        R V P                   R2# )z, TensorQuantOverridesHelper(r   )super__repr__rB   )r   	__class__s   &r   r   #TensorQuantOverridesHelper.__repr__  s&    '"$%%B4>>BRRSTTr   )rD   rB   rC   r   )NT)NN)r1   r2   r3   r4   r5   rE   rQ   rU   r[   rd   rh   rr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r8   __classcell__)r   s   @r   r:   r:   ?   s    \
B>i=" "SjL\$L!F
"%NF"
$# $##U Ur   r:   )
__future__r   r   collections.abcr   dataclassesr   typingr   onnxquant_utilsr   r	   r:   r   r   r   <module>r     sF    #  * !   " )) )) ))XIU IUr   