o
    3/i                     @   s   d dl mZmZ d dlZd dlmZ d dlmZmZmZ d dl	m
Z
 d dlmZ d dlmZmZmZ d dlmZ d dlmZ d d	lmZ d dlmZ G d
d deZG dd deeZG dd deeZdS )    )
NamedTupleOptionalN)Int32Float32
const_expr)mlir_namedtuple)ComposableEpiMixin)Scalar
RowVecLoad
ColVecLoad)GemmSm90)	GemmSm100)RoundingModec                	   @   s   e Zd ZededededededfZeG dd de	Z
d	d	d
ddZej		ddejdeej deej fddZdd Zejdd Zd	S )GemmDefaultEpiMixinalphabetasr_seed)dtypemRowVecBroadcastmColVecBroadcastc                   @   s   e Zd ZU dZeeejB  ed< dZ	eeejB  ed< dZ
eej ed< dZeej ed< dZeje ed< ejZeje ed< dZeeejB  ed	< dS )
z%GemmDefaultEpiMixin.EpilogueArgumentsNr   r   r   r   Fadd_to_outputrounding_moder   )__name__
__module____qualname__r   r   r   cuteTensor__annotations__r   r   r   r   cutlass	Constexprboolr   RNr   intr   r    r#   r#   c/lsinfo/ai/hellotax_ai/llm_service/venv_vllm/lib/python3.10/site-packages/quack/gemm_default_epi.pyEpilogueArguments   s   
 r%   N)locipc                C   s"   |j | _ | |}| jdi |S )Nr#   )r   _epi_ops_to_params_dictEpilogueParams)selfargsr&   r'   dr#   r#   r$   epi_to_underlying_arguments&   s   
z/GemmDefaultEpiMixin.epi_to_underlying_argumentstRS_rDtRS_rCreturnc                 C   s6  |d }|d }|d }|d }|  }	tt|do|jd ur*t|j}|	|9 }	t|d urZtt|d p;|jd u rH|	|  |j7 }	nt|j}|	||  |j 7 }	|	|	 t|d ur|t
jt|ddD ]}
||
  ||
 7  < qot|d urt
jt|ddD ]}
||
  ||
 7  < qd S )Nr   r   r   r   T)unroll_full)loadr   hasattrr   utilsload_scalar_or_pointerr   toelement_typestorer   ranger   size)r*   paramsepi_loop_tensorsr.   r/   r   r   	tDrRowVec	tDrColVecrDir#   r#   r$   epi_visit_subtile+   s*   
z%GemmDefaultEpiMixin.epi_visit_subtilec                 C   s   dS )u8   Returns None — default epilogue has no postact output.Nr#   )r*   r;   epi_smem_tensorstiled_copy_r2stiled_copy_t2rtile_coord_mnklvarlen_managertidxr#   r#   r$   epi_setup_postactM   s   z%GemmDefaultEpiMixin.epi_setup_postactc                 C   s   |S )zSConvert postact from acc_dtype to output dtype. Override for custom postprocessing.r#   )r*   tRS_rPostActr   rG   rE   num_prev_subtilesepi_idxr#   r#   r$   epi_convert_postactZ   s   z'GemmDefaultEpiMixin.epi_convert_postact)N)r   r   r   r	   r   r
   r   _epi_opsr   r   r%   r-   r   jitr   r   rA   rH   rL   r#   r#   r#   r$   r      s,    
!r   c                   @      e Zd ZdS )GemmDefaultSm90Nr   r   r   r#   r#   r#   r$   rP   b       rP   c                   @   rO   )GemmDefaultSm100NrQ   r#   r#   r#   r$   rS   f   rR   rS   )typingr   r   r   cutlass.cuter   r   r   r   quack.cute_dsl_utilsr   quack.epi_composabler   quack.epi_opsr	   r
   r   quack.gemm_sm90r   quack.gemm_sm100r   quack.roundingr   quack.utilsr4   r   rP   rS   r#   r#   r#   r$   <module>   s   Q