o
    3/i                     @   s   d dl mZmZ d dl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 eG dd deZG d	d
 d
ZdS )    )Optional
NamedTuple)	dataclassN)Int32Boolean
const_expr)
copy_utils)mlir_namedtuplec                   @   sD   e Zd ZU dZeej ed< dZeej ed< dZ	eej ed< dS )VarlenArgumentsNmCuSeqlensMmCuSeqlensKmAIdx)
__name__
__module____qualname__r   r   cuteTensor__annotations__r   r    r   r   _/lsinfo/ai/hellotax_ai/llm_service/venv_vllm/lib/python3.10/site-packages/quack/varlen_utils.pyr
      s   
 r
   c                   @   s2  e Zd ZeG dd dZededfddddeded	ed
edef
ddZedddde	defddZ
eejddddeded	edd fddZdedefddZdedefddZdejdedejfddZdedejfddZdejdedejfdd Zd!ejdedejfd"d#Zd$d% Zd&d' ZdS )(VarlenManagerc                   @   sh   e Zd ZU dZeej ed< dZeej ed< dZ	eej ed< e
ejddddedd fdd	ZdS )
zVarlenManager.ParamsNcu_seqlens_mcu_seqlens_kr   locipargsreturnc                C   s   t j| j| j| jdS )N)r   r   r   )r   Paramsr   r   r   r   r   r   r   r   r   create   s
   zVarlenManager.Params.create)r   r   r   r   r   r   r   r   r   r   staticmethodjitr
   r    r   r   r   r   r      s   
 "r   TNr   paramslen_m_staticlen_k_staticlast_batch_idxis_group_changedc                C   s^   || _ || _|| _|| _|| _t|jd u| _t|jd u| _	t|j
d u| _|| _|| _d S N)r$   _len_m_static_len_k_static_last_batch_idx_is_group_changedr   r   varlen_mr   varlen_kr   gather_A_loc_ip)selfr$   r%   r&   r'   r(   r   r   r   r   r   __init__&   s   
zVarlenManager.__init__r   r   c                C   s.   | j d ur| jd urJ dtjj| ||dS )Nz(Only support either varlen_m or varlen_kr   )r   r   r   r   r    r   r   r   r   to_underlying_arguments<   s   z%VarlenManager.to_underlying_argumentsc                C   s   t | ||dS )N)r%   r&   )r   )r$   r%   r&   r   r   r   r   r   r    C   s   
zVarlenManager.create	batch_idxc                 C   ,   t | jr| jj|d  | jj|  S | jS N   )r   r.   r$   r   r*   r3   r6   r   r   r   len_mO      
zVarlenManager.len_mc                 C   r7   r8   )r   r/   r$   r   r+   r:   r   r   r   len_kU   r<   zVarlenManager.len_kmA_mklc           	      C   s   | j }t| jrt|j| d f|}|S t| jrQ|j| }tt|}t|dkr6td |f|}|S |j|d  | }t|dk}t	j
|||d|d}|S |d d |f }|S N   r9      
ragged_dim	ptr_shift)r$   r   r.   r   domain_offsetr   r/   r   rankr   offset_ragged_tensor)	r3   r>   r6   r$   mA_mkoffsetragged_ranklengthrD   r   r   r   offset_batch_A[   s,   


	zVarlenManager.offset_batch_Ac                 C   s`   | j }t| jrt|j| f|j}|S t| jr't|j| f|j}|S |jd |f }|S r)   )	r$   r   r.   r   rE   r   r   r/   r   )r3   r6   r$   mAIdx_mkr   r   r   offset_batch_AIdxs   s   

zVarlenManager.offset_batch_AIdxmB_nklc           	      C   s   | j }t| jr?|j| }tt|}t|dkr$td |f|}|S |j|d  | }t|dk}tj|||d|d}|S |d d |f }|S r?   )	r$   r   r/   r   r   rF   rE   r   rG   )	r3   rO   r6   r$   rI   rJ   mB_nkrK   rD   r   r   r   offset_batch_B}   &   

	zVarlenManager.offset_batch_BmD_mnlc           	      C   s   | j }t| jr?|j| }tt|}t|dkr$t|d f|}|S |j|d  | }t|dk}tj|||d|d}|S |d d |f }|S )Nr@   r9   rA   r   rB   )	r$   r   r.   r   r   rF   rE   r   rG   )	r3   rS   r6   r$   rI   rJ   mD_mnrK   rD   r   r   r   offset_batch_epi   rR   zVarlenManager.offset_batch_epic                 C   sP   g g }| _ | j| j| j| j| jfD ]}t|}||7 }| j t	| q|S r)   )
_values_posr$   r*   r+   r,   r-   cutlassextract_mlir_valuesappendlen)r3   valuesobj
obj_valuesr   r   r   __extract_mlir_values__   s   
z%VarlenManager.__extract_mlir_values__c              	   C   sj   g }t | j| j| j| j| jg| jD ]\}}|t	||d |  ||d  }q| j
t|d| jiS )Nr   )zipr$   r*   r+   r,   r-   rV   rY   rW   new_from_mlir_values	__class__tupler1   )r3   r[   obj_listr\   n_itemsr   r   r   __new_from_mlir_values__   s   
z&VarlenManager.__new_from_mlir_values__)r   r   r   r   r   r   r   r4   r!   r
   r5   r   r"   r    r;   r=   r   rL   rN   rQ   rU   r^   re   r   r   r   r   r      sT    


r   )typingr   r   dataclassesr   rW   cutlass.cuter   r   r   r   quackr   quack.cute_dsl_utilsr	   r
   r   r   r   r   r   <module>   s   