o
    پiZ                     @   sZ   d Z ddlmZmZmZ ddlmZmZmZ G dd dZ	G dd dZ
G dd	 d	Zd
S )z!
Utilities for expressing shapes
    )ConvModeConvKind
LayoutType)Conv2DProblemSize_
GemmCoord_GemmCoordBatched_c                   @   s>   e Zd Zdd Zedd Zedd Zdedefd	d
Z	dS )MatrixCoordc                 C   s   || _ || _d S N)_row_col)selfrowcol r   g/home/ubuntu/.local/lib/python3.10/site-packages/flashinfer/data/cutlass/python/cutlass_cppgen/shape.py__init__2   s   
zMatrixCoord.__init__c                 C      | j S r	   )r
   r   r   r   r   r   6      zMatrixCoord.rowc                 C   r   r	   )r   r   r   r   r   column:   r   zMatrixCoord.columnlayoutreturnc                 C   s.   |t jkr| jS |t jkr| jS td| )a  
        Returns the leading dimension for a matrix with layout ``layout`` and shape provided by the MatrixCoord.

        :param layout: layout of matrix
        :type layout: cutlass_library.LayoutType

        :returns: leading dimension
        :rtype: int
        z6Unsupported layout for leading dimension calculation: )r   RowMajorr   ColumnMajorr
   	Exception)r   r   r   r   r   leading_dimension>   s
   


zMatrixCoord.leading_dimensionN)
__name__
__module____qualname__r   propertyr   r   r   intr   r   r   r   r   r   1   s    

r   c                   @   s   e Zd ZdededefddZedefddZedefd	d
ZedefddZede	fddZ
ede	fddZede	fddZedefddZdedefddZdS )	GemmCoordmnkc                 C   s   || _ || _|| _d S r	   )_m_n_k)r   r"   r#   r$   r   r   r   r   Q   s   
zGemmCoord.__init__r   c                 C   r   r	   )r%   r   r   r   r   r"   V   r   zGemmCoord.mc                 C   r   r	   )r&   r   r   r   r   r#   Z   r   zGemmCoord.nc                 C   r   r	   )r'   r   r   r   r   r$   ^   r   zGemmCoord.kc                 C      t | j| jS r	   )r   r%   r'   r   r   r   r   mkb      zGemmCoord.mkc                 C   r(   r	   )r   r%   r&   r   r   r   r   mnf   r*   zGemmCoord.mnc                 C   r(   r	   )r   r'   r&   r   r   r   r   knj   r*   zGemmCoord.knc                 C   s   t | j| j| jS r	   )r   r%   r&   r'   r   r   r   r   ctypen   s   zGemmCoord.ctypebatch_countc                 C   s   t | j| j| j|S r	   )r   r%   r&   r'   )r   r.   r   r   r   batched_ctyper   s   zGemmCoord.batched_ctypeN)r   r   r   r    r   r   r"   r#   r$   r   r)   r+   r,   r   r-   r   r/   r   r   r   r   r!   P   s"    r!   c                #   @   s   e Zd Zejddfdededededededed	ed
ededededededededef"ddZedefddZ	de
fddZedd ZdS )Conv2DProblemSize   r#   hwcr$   rsc_pad_hpad_wstride_hstride_w
dilation_h
dilation_wmodesplit_k_slicesgroupsc                 C   s   || _ || _|| _|| _|| _|| _|| _|	| _|
| _|| _	|| _
|| _|| _t|| _|| _|| _||	d  ||  | d | _||
d  ||  | d | _d S N   r1   )NHWCKRSr8   r9   r:   r;   r<   r=   r    r>   r?   r@   PQ)r   r#   r2   r3   r4   r$   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   r   r   r   r   w   s$   
"zConv2DProblemSize.__init__r   c                 C   s   t | S r	   )r   r   r   r   r   r-      s   zConv2DProblemSize.ctypekindc                 C   s   |t jkrt| j| j | j | j| j| j | j	 | j
 S |t jkr7t| j| j | j | j	| j| j | j S |t jkrQt| j| j| j | j	 | j| j | j S d S r	   )r   Fpropr!   rC   rJ   rK   rG   rH   rI   rF   r@   DgradrD   rE   Wgrad)r   rL   r   r   r   implicit_gemm_size   s&   


z$Conv2DProblemSize.implicit_gemm_sizec                 C   sV   |\}}}}|d }|d }d}d}	d}
d}t g | |||||	|
|R  S rA   )r0   )
input_sizeweight_sizerG   rH   rI   _r8   r9   r:   r;   r<   r=   r   r   r   
from_sizes   s0   zConv2DProblemSize.from_sizesN)r   r   r   r   CrossCorrelationr    r   r   r   r-   r   rP   staticmethodrT   r   r   r   r   r0   v   sV    
r0   N)__doc__cutlass_libraryr   r   r   cutlass_cppgen.backend.c_typesr   r   r   r   r!   r0   r   r   r   r   <module>   s    &