
    ɯwg                     Z   d dl Z d dlZd dlmZ ddlmZmZ ddlm	Z	 ddl
mZ ddlmZmZ ddlmZmZmZ dd	lmZmZ  e j*                  e      Z eej0                  d
d      Zej4                  j6                  Zej4                  j8                  Zej4                  j:                  Zd Zd Zy)    N)mm_args   )configlowering)CppPackedGemmTemplate)create_epilogue_with_attr)expandregister_lowering)autotune_select_algorithmExternKernelChoicerealize_inputs)use_aten_gemm_kernelsuse_cpp_packed_gemm_templatezat::_weight_int8pack_mmF)has_out_variantc                  Z   t        j                  t        j                  t        j
                  t        j                  g       t        j                  t        j                         t        j                  t        j
                         t        j                  t        j                         y )N)r   add_needs_realized_inputs	quantized
max_pool2d
_quantized$wrapped_fbgemm_pack_gemm_matrix_fp16!wrapped_fbgemm_linear_fp16_weightmake_fallback     h/home/mcse/projects/flask/flask-venv/lib/python3.12/site-packages/torch/_inductor/quantized_lowerings.pyregister_quantized_opsr      sn    &&  ;;88	
 9//0:JJK:GGHr   c                  L    t        t        j                  d       d dd       } y )N)type_promotion_kind)layoutc                   t        | |d      \  }}}}}|j                         t        j                  t        j                  t        j
                  fv r!|j                         t        j                  k(  sJ }t               rt        j                  ||f|      gng }fd}	t        |||d      rt        j                  ||||gd|	       t        |      dk(  rVt        j                  rFt               s<t         j#                  d       t        j                  ||f|      j%                         S t'        d|||g|      S )	NT)r   mat2_transposedc           
      Z    t        | dt        t        j                                    S )Nmul)other)r   r   r	   size)bufr   scales    r   _mul_epiloguez?register_woq_mm_ops.<locals>.int8pack_mm.<locals>._mul_epilogueB   s'    ,U.v{{1K"L r   )r!   )trans_wepilogue_creatorr   z3No choices for GEMM, using ATen backend as fallback_weight_int8pack_mm)r   	get_dtypetorchbfloat16float16floatint8r   aten__weight_int8pack_mmbindr   r   add_choicesleninductor_configautotune_fallback_to_atenlogwarningoutput_noder   )
inputweightr'   r   _mat1mat2aten_layoutchoicesr(   s
     ``      r   int8pack_mmz(register_woq_mm_ops.<locals>.int8pack_mm.   s@   &-6&$'
#1at NN LL EJJ.	
/ 
 %& &**D$+>LM 		
 (T4QUV!--tU#!. LA99)+KKMN+00tU#[km )!7T4,?
 	
r   )r
   atenr+   )rB   s    r   register_woq_mm_opsrD   -   s%    t//TJ48 -
 K-
r   ) loggingr-    torch._inductor.kernel.mm_commonr    r   r6   r   codegen.cpp_gemm_templater   codegen.cpp_utilsr   r	   r
   select_algorithmr   r   r   utilsr   r   	getLogger__name__r8   r+   r2   opsr   r   rC   r   rD   r   r   r   <module>rO      s      4 1 < 8 / 
 G g!-	8% 
 II	YY!!
yy~~I/
r   