+
    G-j×&  ã                   óœ   € ^ 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   &&&€Úx/Volumes/fast/ai/experiments/nudenet-smoke/.venv/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]  € ð �y‰yˆØ—‘×$Ñ$ˆä˜dŸj™j¨�m¨U×->Ñ->Ó-@ÓAˆØŠ>Ü˜y¨¯©°A­¨Ð7LÐMÓNÐNð —‘˜Q•ˆØ!ŸZ™Z¨�]ÐØ$Ð'<Õ<ÐØÐ"8Õ8ˆä—’œ˜VŸ[™[Ó)´"·(±(Ô;ˆØˆˆa‰Ü—[‘[×,Ñ,Ø¤×!7Ñ!7×!=Ñ!=ÄÀFÇKÁKÓ@PÐ?QÐSXó
ˆ
ð 	×Ñ˜jÔ)ä—{‘{×,Ñ,¨YÐ9KÐ8aÐdrÐcsÓtˆØ�‰�\Ô"ô —;‘;×(Ñ(¨°Ð0OÐRXÐQYÐ[aÐdoÕ[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Ó  € Ø�y‰yˆØ�|‰|˜vÔ%Ð%Ð%ð �N‰N×.Ñ.¨t°a°SÓ9ñ	
Ø!ØØØð �N‰N×*Ñ*¨4°!°À4Ç>Á>×C^ÑC^Ð*Ó_ñ	
Ø(Ø#ØØà×$Ñ$Ð%AÔBØ×ÑÐ 7Ô8Ø×ÑÐ-Ô.Ø�‰�\Ô"à"Ÿk™k¨!�nÐ/BÕBÐØ48·I·I°I˜DŸI™I¨Ö0À2ÐàˆØŸœˆIØ�M‰MÔ,¨YÓ7Ö8ñ (ä ŸK™K×1Ò1ØÐ0ÕCÐFYÐEZÐ\mñ
Øqwñ
Ðð 	�‰Ð&Ô'ð —N‘N×2Ñ2°4·;±;¸qµ>ÈTÐ2ÓRˆ	Ø,¨~Õ=ˆÜ—K‘K×)Ñ)ØØ Ð!ØÐØ 'Õ)Øð *ó 
ˆ	ð 	�‰�YÔô �;Ó 1Ô$Ð$Ð$ßØ-°Õ=‰Mà'¨�N¨SÕ0°;¸qµ>ÕAÀFÕJˆMä& }°d·n±n×6NÑ6NÓOˆØÒ"Ü*¨;¸ÈÕ8LÈmÓ\ˆOØ�L‰L˜Ô)à.×5Ñ5°aÕ8Ðä�t—z‘z“? aÑ'ˆß3;˜TŸ[™[¨ž^ÀÇÁÈQÅÐRgÕAgÐ÷ J[Ð/Ð2EÖEÐ`bÐØ�‰ÜØÐ!5Ð6Ø"Ø#óô	
÷ Ø�M‰M˜%Ð!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       Mž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'       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ä  ø€ Ø�y‰yˆØ�|‰|˜vÔ%Ð%Ð%ð �N‰N×3Ñ3°D·K±KÀµNÓCñ	
ØØØØØð �>‰>×0Ñ0°·±¸Aµ×?Ò?ÀDÇNÁN×DaÑDa×DcÒDcð —‘×2Ñ2°4¸!¸Ó=ñØ%Ø ØØà!%§¡×!KÑ!KØ—
‘
˜1•Ü×&Ñ&×+Ñ+Øó"Ðð
 "×(Ñ(Ð);¸AÕ)>Ô?Ø×#Ñ#Ð$6°qÕ$9Ô:Ø×ÑÐ1°!Õ4Õ5ð —‘×2Ñ2°4¸!¸Ó=ñØ%Ø ØØð —‘×.Ñ.¨t°a°SÀtÇ~Á~×GbÑGbÐ.ÓcñØ,Ø'Ø"Øà!×(Ñ(Ð)EÔFØ×#Ñ#Ð$;Ô<Ø×ÑÐ1Ô2Ø�L‰L˜Ô&çÐ2Ò:Ü‘7Ñ#Ó%Ð%à ÐØˆÜˆt�z‰z‹?˜aÔØ�~‰~×*Ñ*¬j×.DÑ.D×.QÑ.QÔQÜ"Ð#eÓfÐfØ"&§.¡.×"EÑ"EÀdÇjÁjÐQRÅmÐUY×U_ÑU_Ð`aÕUbÐdh×dnÑdnÐopÕdqÓ"rÐØˆLà"Ÿk™k¨!�nÔ/GÕGÐØ48·I·I°I˜DŸI™I¨Ö0À2ÐàˆØŸœˆIØ�M‰MÔ,¨YÓ7Ö8ñ (à Ðà×"Ñ"Ð#8¸Õ#;Ô<Ø×"Ñ" ;¨q¥>Ô2Ø×"Ñ"Ð#3°AÕ#6Ô7à×"Ñ"Ð#8¸Õ#;Ô<Ø×"Ñ" ;¨q¥>Ô2Ø×"Ñ"Ð#3°AÕ#6Ô7ð 	×"Ñ"Ð#4Ô5Ø×"Ñ" >Ô2çØ×&Ñ&Ð':Ô;ä ŸK™K×1Ò1ØÐ.Ð1DÐ0EÐGXñ
Ø\bñ
Ðð 	�‰Ð&Ô'ô "Ø�K‰K˜�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*  € Ø�y‰yˆØ�|‰|˜vÔ%¨¯©¸Ô)HÐHÐHà�‰×1Ñ1°$·*±*¸Qµ-Ô@Ø×/×/Ð/Ø�N‰N×5Ñ5°d·k±kÀ!µnÔEà-1¯^©^×-QÑ-QØ�J‰J�q�M¨T¯\©\¸VÔ-C©Èð .Ró .
Ñ*Ð÷ !Ø�N‰N×=Ñ=¸d¿j¹jÈ½mÈ[ÕYà�N‰N×1Ñ1°$·*±*¸Qµ-Ô@äˆt�z‰z‹?˜aÔØ�N‰N×/Ñ/°·	±	¸4¿:¹:Àa½=È$Ï*É*ÐUVÍ-ÐY]×YcÑYcÐdeÕYfÖ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   