+
    9i&                         ^ RI t^ RIt^ RIHt ^RIHtHtHtH	t	H
t
Ht ^RIHt ^RIHt  ! R R]4      t ! R R	]4      t ! R
 R]4      tR# )    N)onnx_pb)TENSOR_NAME_QUANT_SUFFIXQuantizedValueQuantizedValueTypeattribute_to_kwargfind_by_nameget_mul_node)QuantOperatorBase)QDQOperatorBasec                   >   a a ] tR t^t oV 3R ltR tR tRtVtV ;t	# )ConvIntegerc                &   < \         SV `  W4       R # Nsuper__init__selfonnx_quantizer	onnx_node	__class__s   &&&e/var/www/html/photoedit/myenv/lib/python3.14/site-packages/onnxruntime/quantization/operators/conv.pyr   ConvInteger.__init__       3    c                r   V P                   pV P                  P                  p\        VP                  ^,          VP                  4       4      pVf!   \        RVP                  ^,           R24      hVP                  ^ ,          pVP                  ^,          pVR,           pVR,           p	\        P                  ! \        VP                  4      \        P                  R7      p
R
V
^&   \        P                  P                  V\         P"                  P$                  \        VP                  4      .V
4      pVP'                  V4       \        P                  P)                  RWx.V	.4      pVP+                  V4       \        P                  P)                  RW).V.VR	,           4      pVP+                  V4       R# )ap  
Given a node, this function handles bias add by adding a "reshape" node on bias and an "add" node
    parameter nodes: new nodes would be appended into nodes
    parameter node: current node (Conv)
    parameter scaled_output: output of quant conv without bias
    parameter output: output of Conv
    parameter bias_name: bias of Conv
    return: the name of output
Nz	Expected z to be an initializer_bias_reshape_shape_bias_reshape_output)dtypeReshapeAdd	_bias_add)node	quantizermodelr   inputinitializer
ValueErroroutputnponeslendimsint64onnxhelpermake_tensor
onnx_protoTensorProtoINT64add_initializer	make_nodeappend)r   nodesscaled_outputr$   r&   weightr*   reshape_input_datareshape_input_shapereshape_outputshape
init_shapereshape_nodeadd_nodes   &&&           r   add_biasConvInteger.add_bias   s]    yy$$djjmU->->-@A>yA7LMNN Q!ZZ]$'<<"88V[[)"((;a[[,,!7!7!=!=FKK@P?QSX

 	j){{,,Y9K8adrcst\" ;;((0ORXQY[ado[opXr   c                   V P                   pVP                  R 8X  g   Q hV P                  P                  V^ .4      w  ppppV P                  P	                  V^.V P                  P
                  R7      w  pppp	VP                  V4       VP                  V4       VP                  V4       VP                  V	4       VP                  ^ ,          R,           p
VP                  '       d   VP                  R,           MRp/ pVP                   F  pVP                  \        V4      4       K  	  \        P                  P                  ! RW#,           V
.V3/ VB pVP                  V4       V P                  P!                  VP                  ^ ,          RR7      pV
R,           p\        P                  P                  R	V
.V.V
R
,           VR7      pVP                  V4       \#        V4      ^8X  g   Q hV'       d   VR,           pM%V^ ,          R,           V^,          ,           R,           p\%        VV P                  P&                  4      pVf&   \)        VVR,           V4      pVP                  V4       VP                  ^ ,          p\#        VP*                  4      ^8H  pV'       g   VP                  ^ ,          MVP                  ^ ,          R,           pV'       d
   VR,           MRpVP                  \)        VV.VV4      4       V'       d   V P-                  VV4       V P                  ;P&                  V,          un        R# )Convreduce_range_output_quantized_quant r   T)	mandatory_cast_outputCast_cast)to_scales_mul__mulNz:0quant_scaled_output_output_scale_mul)r$   op_typer%   quantize_activationquantize_weightrH   extendr*   name	attributeupdater   r0   r1   r7   r8   get_tensor_typer-   r   	new_nodesr	   r'   rC   )r   r$   quantized_input_nameszero_point_namesscale_namesr9   quantized_input_names_weightzero_point_names_weightscale_names_weightnodes_weightconv_integer_outputconv_integer_namekwargsr[   conv_integer_node	onnx_typecast_op_output	cast_nodescales_mul_opscales_mul_nodescales_mul_op_outputhas_biasscaled_output_nameoutput_scale_mul_ops   &                       r   quantizeConvInteger.quantize:   s   yy||v%%% NN..taS9	
! NN**4!4>>C^C^*_	
(#$$%AB 78-.\""kk!n/BB48IIIDII02IMM,Y78 ( KK110CFYEZ\m
qw
 	&' NN224;;q>T2R	,~=KK)) !') * 
	 	Y ;1$$$-=M'NS0;q>AFJM&}dnn6N6NO"*;8Lm\OLL).55a8tzz?a'3;T[[^QRgAg J[/2EE`b!56"#	
 MM%!34  E) r    )
__name__
__module____qualname____firstlineno__r   rC   rs   __static_attributes____classdictcell____classcell__r   __classdict__s   @@r   r   r      s     4#JL* L*r   r   c                   >   a a ] tR t^t oV 3R ltV 3R ltRtVtV ;t# )QLinearConvc                &   < \         SV `  W4       R # r   r   r   s   &&&r   r   QLinearConv.__init__   r   r   c                `	  < V P                   pVP                  R 8X  g   Q hV P                  P                  VP                  ^ ,          4      w  pppppV P                  P                  VP                  ^,          4      '       d   V P                  P                  4       '       d   V P                  P                  V^ .4      w  pppp	V P                  P                  VP                  ^,          \        P                  P                  ^ 4      p
VP                  V
^ ,          4       VP                  V
^,          4       VP                  V
^,          4       MV P                  P                  V^ .4      w  pppp	V P                  P                  V^.V P                  P                  R7      w  ppppVP!                  V4       VP!                  V4       VP!                  V4       V	P!                  V4       V'       d   Vf   \"        SV `I  4       # RpRp\'        VP                  4      ^8X  d   V P                  P(                  \        P                  P*                  8X  d   \-        R4      hV P                  P/                  VP                  ^,          VP                  ^ ,          VP                  ^,          4      pRpVP                  ^ ,          \0        ,           pVP2                  '       d   VP2                  R,           MRp/ pVP4                   F  pVP7                  \9        V4      4       K  	  . pVP                  V^ ,          4       VP                  V^ ,          4       VP                  V^ ,          4       VP                  V^,          4       VP                  V^,          4       VP                  V^,          4       VP                  V4       VP                  V4       V'       d   VP                  V4       \:        P<                  P>                  ! RVV.V3/ VB pV	P                  V4       \A        VP                  ^ ,          VVV\B        PD                  4      pVV P                  PF                  VP                  ^ ,          &   V P                  ;PH                  V	,          un$        R# )	rF   rG   NrK   Fz@Quantization to FLOAT8E4M3FN for operator Conv is not supported.TrJ   r   )%r$   rV   r%   _get_quantization_paramsr*   is_input_a_initializerr'   is_per_channelrW   quantize_weight_per_channelr3   r4   INT8r8   rX   rH   rY   r   rs   r-   weight_qTypeFLOAT8E4M3FNRuntimeErrorquantize_bias_staticr   rZ   r[   r\   r   r0   r1   r7   r   r   Inputquantized_value_mapr^   )r   r$   
data_foundoutput_scale_nameoutput_zp_namerR   r_   r`   ra   r9   quant_weight_tuplerb   rc   rd   re   quantized_bias_namebias_presentqlinear_conv_outputqlinear_conv_namerh   r[   qlinear_conv_inputsqlinear_conv_nodeq_outputr   s   &                       r   rs   QLinearConv.quantize   s   yy||v%%% NN33DKKNC	
 >>00A??DNNDaDaDcDc 224!=% !%!K!K

1&&++"
 "(();A)>?##$6q$9:1!45 224!=%  ..taSt~~GbGb.c,'"!(()EF##$;<12LL&2:7#%% tzz?a~~**j.D.D.Q.QQ"#eff"&.."E"EdjjQRmUYU_U_`aUbdhdndnopdq"rL"kk!n/GG48IIIDII02IMM,Y78 ( ""#8#;<"";q>2""#3A#67""#8#;<"";q>2""#3A#67 	""#45"">2&&':; KK11.1D0EGX
\b
 	&' "KKN$$
 >F**4;;q>:  E) r   ru   	rv   rw   rx   ry   r   rs   rz   r{   r|   r}   s   @@r   r   r      s     4_* _*r   r   c                   8   a a ] tR t^t oV 3R ltR tRtVtV ;t# )QDQConvc                &   < \         SV `  W4       R # r   r   r   s   &&&r   r   QDQConv.__init__   r   r   c                r   V P                   pVP                  R 8X  g   VP                  R8X  g   Q hV P                  P                  VP                  ^ ,          4       V P
                  '       g-   V P                  P                  VP                  ^ ,          4       V P                  P                  VP                  ^,          VP                  R 8X  d   ^ M^R7      w  r#V'       d/   V P                  P                  VP                  ^,          V4       M,V P                  P                  VP                  ^,          4       \        VP                  4      ^8X  d^   V P                  P                  VP                  VP                  ^,          VP                  ^ ,          VP                  ^,          4       R# R# )rF   ConvTranspose)default_axisN)r$   rV   r%   quantize_activation_tensorr'   disable_qdq_for_node_outputr*   is_tensor_per_channel"quantize_weight_tensor_per_channelquantize_weight_tensorr-   quantize_bias_tensorrZ   )r   r$   is_weight_per_channelweight_axiss   &   r   rs   QDQConv.quantize   s*   yy||v%)HHH11$**Q-@///NN55dkk!nE-1^^-Q-QJJqMT\\V-C .R .
* !NN==djjm[YNN11$**Q-@tzz?aNN//		4::a=$**UV-Y]YcYcdeYfg  r   ru   r   r}   s   @@r   r   r      s     4h hr   r   )numpyr+   r0   r   r3   quant_utilsr   r   r   r   r   r	   base_operatorr
   qdq_base_operatorr   r   r   r   ru   r   r   <module>r      sN      &  - .u*# u*pc*# c*Lho hr   