o
    เทi  ใ                   @   s>   d Z ddlT dd Zdd ZG dd dZG d	d
 d
eZdS )z
Methods for layout swizzling
้   )ฺ*c                 C   s   |dkr| |? S t | | S ฉN้    )ฺshiftlฉฺaฺsฉ r	   ๚c/home/ubuntu/vllm_env/lib/python3.10/site-packages/flashinfer/data/cutlass/python/pycute/swizzle.pyฺshiftr(   ๓   r   c                 C   s   |dkr| |> S t | | S r   )r   r   r	   r	   r
   r   ,   r   r   c                   @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )ฺSwizzlec                 C   sr   |dksJ |dksJ t ||ksJ || _|| _|| _d|> d }||td| > | _||td| > | _d S )Nr   r   )ฺabsฺbitsฺbaseฺshiftฺmaxฺyyy_mskฺminฺzzz_msk)ฺselfr   r   r   ฺbit_mskr	   r	   r
   ฺ__init__=   s   zSwizzle.__init__c                 C   s   |t || j@ | jA S ฉN)r   r   r   )r   ฺoffsetr	   r	   r
   ฺ__call__I   ๓   zSwizzle.__call__c                 C   s   d| j | j t| j > S )Nr   )r   r   r   r   ฉr   r	   r	   r
   ฺsizeM   ๓   zSwizzle.sizec                 C   s   |   ก S r   )r   r   r	   r	   r
   ฺcosizeQ   s   zSwizzle.cosizec                 C   s   d| j  d| j d| j S )NฺSW_ฺ_ฉr   r   r   r   r	   r	   r
   ฺ__str__U   r   zSwizzle.__str__c                 C   s   d| j  d| j d| j dS )NzSwizzle(๚,๚)r#   r   r	   r	   r
   ฺ__repr__Y   s   zSwizzle.__repr__N)	ฺ__name__ฺ
__module__ฺ__qualname__r   r   r   r    r$   r'   r	   r	   r	   r
   r   <   s    r   c                   @   sT   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd ZdS )ฺComposedLayoutc                 C   s   || _ || _|| _d S r   ฉฺlayoutBr   ฺlayoutA)r   r-   r   r.   r	   r	   r
   r   ^   s   
zComposedLayout.__init__c                 C   s$   | j |j ko| j|jko| j|jkS r   r,   )r   ฺotherr	   r	   r
   ฺ__eq__d   s   $zComposedLayout.__eq__c                 C   ๓
   t | jS r   )ฺlenr.   r   r	   r	   r
   ฺ__len__h   ๓   
zComposedLayout.__len__c                 G   s   |   | j| j|  กS r   r,   )r   ฺargsr	   r	   r
   r   l   r   zComposedLayout.__call__c                 C   s   t | j| j| j| S r   )r+   r-   r   r.   )r   ฺir	   r	   r
   ฺ__getitem__p   r   zComposedLayout.__getitem__c                 C   r1   r   )r   r.   r   r	   r	   r
   r   t   r4   zComposedLayout.sizec                 C   r1   r   )r    r-   r   r	   r	   r
   r    x   r4   zComposedLayout.cosizec                 C   s   | j  d| j d| j S )Nz o r,   r   r	   r	   r
   r$   |   r   zComposedLayout.__str__c                 C   s*   dt | j dt | j dt | j dS )NzComposedLayout(r%   r&   )ฺreprr-   r   r.   r   r	   r	   r
   r'      s   *zComposedLayout.__repr__N)r(   r)   r*   r   r0   r3   r   r7   r   r    r$   r'   r	   r	   r	   r
   r+   ]   s    r+   N)ฺ__doc__ฺlayoutr   r   r   ฺ
LayoutBaser+   r	   r	   r	   r
   ฺ<module>   s    !