ó
    Eñi`  ã                   óæ  • S SK r S SKJr  S SKrS SKJr  SSKJrJr  SSK	J
r
Jr  SSKJr  SSKJrJr  SS	KJr  SS
KJrJrJr  SSKJrJr  SSKJr  \ R6                  " \5      r\" \R<                  SSS9r\" \R@                  RB                  RD                  SS\RF                  S9r$\R@                  RB                  r!\R@                  RJ                  r%\R@                  RL                  r&SS jr'SS jr(g)é    N)ÚAny)Úmm_argsé   )ÚconfigÚlowering)ÚCppGemmTemplateÚCppWoqInt4GemmTemplate)Úcreate_epilogue_with_attr)ÚexpandÚregister_lowering)ÚWeightInt4PackMatmul)Úautotune_select_algorithmÚExternKernelChoiceÚrealize_inputs)Úuse_aten_gemm_kernelsÚuse_cpp_gemm_template)ÚVzat::_weight_int8pack_mmF)Úhas_out_variantz*at::native::_weight_int4pack_mm_cpu_tensor)r   Úkernel_creatorc                  ób  • [         R                  " [        R                  [        R
                  [        R                  /5        [         R                  " [        R                  5        [         R                  " [        R
                  5        [         R                  " [        R                  5        g ©N)r   Úadd_needs_realized_inputsÚ	quantizedÚ
max_pool2dÚ
_quantizedÚ$wrapped_fbgemm_pack_gemm_matrix_fp16Ú!wrapped_fbgemm_linear_fp16_weightÚmake_fallback© ó    Ú`/home/mande/repo/quber/.venv/lib/python3.13/site-packages/torch/_inductor/quantized_lowerings.pyÚregister_quantized_opsr"   '   sn   € Ü×&Ò&ä× Ñ Ü×;Ñ;Ü×8Ñ8ð	
ôô ×Òœ9×/Ñ/Ô0Ü×Òœ:×JÑJÔKÜ×Òœ:×GÑGÕHr    c                  ó   • [        [        R                  S S9S S.S[        R                  S[        R                  S[        R                  S[
        S[
        4
S jj5       n [        [        R                  S S9S S.S[        R                  S[        R                  S	[        S
[        R                  S[
        S[
        4S jj5       n[        R                  " [        R                  5        [        R                  " [        R                  5        g )N)Útype_promotion_kind)ÚlayoutÚinputÚweightÚscaler%   Úreturnc                óü  ^^• [        XTSS9u      nmpVUR                  5       [        R                  [        R                  [        R
                  4;   a"  UR                  5       [        R                  :X  d   eTn[        5       (       a  [        R                  XVT4U5      /O/ nS[        R                  S[        4UU4S jjn	[        XuUSS9(       a  [        R                  " UUXVT/SU	S9  [        SX…UT/U5      $ )	NT)r%   Úmat2_transposedÚbufr)   c           
      óT   >• [        U S[        [        TTR                  5      5      S9$ )NÚmul)Úother)r
   r   r   Úsize)r,   r%   r(   s    €€r!   Ú_mul_epilogueÚ?register_woq_mm_ops.<locals>.int8pack_mm.<locals>._mul_epilogueO   s'   ø€ Ü,Ø�U¤.´¸¸v¿{¹{Ó1KÓ"Lñð r    )r+   )Útrans_wÚepilogue_creatorÚ_weight_int8pack_mm)r   Ú	get_dtypeÚtorchÚbfloat16Úfloat16ÚfloatÚint8r   Úaten__weight_int8pack_mmÚbindÚTensorr   r   r   Úadd_choicesr   )
r&   r'   r(   r%   Ú_Úmat1Úmat2Úaten_layoutÚchoicesr1   s
     ``      r!   Úint8pack_mmÚ(register_woq_mm_ops.<locals>.int8pack_mm5   sÿ   ù€ ô '.Ø &¸$ñ'
Ñ#ˆˆ1ˆa�˜ð �N‰NÓ¤§¡´·±ÄÇÁÐ LÓLØ—‘Ó ¤E§J¡JÓ.ð	
ð/ð ˆô
 %×&Ñ&ô &×*Ñ*¨D¸Ð+>ÀÓLÑMàð 	ð	œuŸ|™|ð 	´÷ 	ð 	ô
 ! °DÈ$×OÜ×'Ò'ØØØ˜UÐ#ØØ!.òô )Ø! 7°4¸Ð,?Àó
ð 	
r    Ú
qGroupSizeÚqScaleAndZerosc          	      óX  • [        XUSSS9u      pTpgUR                  5       [        R                  [        R                  [        R
                  4;   a"  UR                  5       [        R                  :X  d   e[        R                  R                  [        R                  " U[        R                  S9S S9nUn	[        5       (       a  [        R                  XgXƒ4U	5      /O/ n
[        R                   (       d  [        R"                  (       aR  [%        U	UUSSUS9(       a?  UR'                  5       R)                  5       (       a  [*        U   R-                  U
U	XgXƒ/5        S[        R.                  R0                  R2                  S[        R4                  4S jnUS	 S
.n[7        SU
XgXƒ/U	US9$ )NT)r%   Úuse_4x2_dimr+   )Údtype)Úname)r+   Úis_woq_int4Úq_group_sizeÚxr)   c                 óØ   • U R                  5       R                  5       (       d   eU R                  5       nU R                  5       n[        R
                  " SSU[        R                  US9$ )Nr   éÿ   )rK   Údevice)Ú
get_layoutÚis_contiguousÚget_sizeÚ
get_devicer7   ÚrandintÚuint8)rO   ÚshaperR   s      r!   Úget_example_weightÚHregister_woq_mm_ops.<locals>.int4pack_mm_cpu.<locals>.get_example_weight•   sN   € Ø—<‘<“>×/Ñ/×1Ñ1Ð1Ð1Ø—J‘J“LˆEØ—\‘\“^ˆFÜ—=’=  C¨´e·k±kÈ&ÑQÐQr    c                 óX   • [         R                  R                  U R                  5          $ r   )r   ÚgraphÚ	constantsÚget_name)rO   s    r!   Ú<lambda>Ú>register_woq_mm_ops.<locals>.int4pack_mm_cpu.<locals>.<lambda>�   s   € œŸ™×*Ñ*¨1¯:©:«<Ò8r    )r   é   Ú_weight_int4pack_mm_for_cpu)Úinput_gen_fns)r   r6   r7   r8   r9   r:   rX   r   r]   Úadd_tensor_constantÚtensorÚint64r   Úaten__weight_int4pack_mm_cpur=   r   Úmax_autotuneÚmax_autotune_gemmr   rS   rT   r	   r?   Ú	_inductorÚirÚIRNoder>   r   )r&   r'   rG   rH   r%   r@   rA   rB   Ú
group_sizerC   rD   rZ   rd   s                r!   Úint4pack_mm_cpuÚ,register_woq_mm_ops.<locals>.int4pack_mm_cpua   s�  € ô '.Ø &°dÈDñ'
Ñ#ˆˆ1ˆa˜ð �N‰NÓ¤§¡´·±ÄÇÁÐ LÓLØ—‘Ó ¤E§K¡KÓ/ð	
ð0ô —W‘W×0Ñ0Ü�LŠL˜¬5¯;©;Ñ7¸dð 1ð 
ˆ
ð ˆô %×&Ñ&ô	 -×1Ñ1Ø Ð<¸kóñð ð 	ô × × ¤F×$<×$<Ü%ØØØØ $Ø Ø'÷ð —‘Ó!×/Ñ/×1Ñ1ô # :Ñ.×:Ñ:ØØØ˜ZÐ8ôð	R¤%§/¡/×"4Ñ"4×";Ñ";ð 	RÄÇÁô 	Rð "Ù8ñ
ˆô
 )Ø)ØØ˜Ð4ØØ'ñ
ð 	
r    )r   Úatenr5   r7   r>   r   rc   Úintr   r   Ú_dyn_quant_matmul_4bitÚ_dyn_quant_pack_4bit_weight)rE   ro   s     r!   Úregister_woq_mm_opsru   4   s   € Ü”t×/Ñ/ÀTÑJð ò)
Ü�|‰|ð)
ä—‘ð)
ô �|‰|ð)
ô
 ð)
ô 
ô)
ó Kð)
ôV ”t×7Ñ7ÈTÑRð òD
Ü�|‰|ðD
ä—‘ðD
ô ðD
ô Ÿ™ð	D
ô ðD
ô 
ôD
ó SðD
ôL ×Òœ4×6Ñ6Ô7Ü×Òœ4×;Ñ;Õ<r    )r)   N))ÚloggingÚtypingr   r7   Ú torch._inductor.kernel.mm_commonr   Ú r   r   Úcodegen.cpp_gemm_templater   r	   Úcodegen.cpp_utilsr
   r   r   Ú	mkldnn_irr   Úselect_algorithmr   r   r   Úutilsr   r   Úvirtualizedr   Ú	getLoggerÚ__name__Úlogr5   r<   Úopsr   Úint4mm_packed_weight_cpuÚcreaterh   r   rq   r"   ru   r   r    r!   Ú<module>r†      sÆ   ðÛ Ý ã Ý 4ç ß NÝ 8ß /Ý +÷ñ ÷
 @Ý ð ×Ò˜Ó!€á-Ø	×ÑÐ8È%ñÐ ñ  2Ø	‡I�I×Ñ×0Ñ0Ø0ØØ'×.Ñ.ñ	 Ð ð �I‰I×Ñ€	Ø�Y‰Y×!Ñ!€
Ø‡y�y‡~�~€ô
Iõu=r    