o
    Ti                     @   sH   d dl mZ zddlmZ W n ey   dZY nw G dd deZdS )   )	OpBuilder    )versionNc                       sJ   e Zd ZdZdZ fddZdd Zdd Zd	d
 Zd fdd	Z	  Z
S )SparseAttnBuilderDS_BUILD_SPARSE_ATTNsparse_attnc                    s   t  j| jd d S )N)name)super__init__NAMEself	__class__ X/home/ubuntu/.local/lib/python3.10/site-packages/deepspeed/ops/op_builder/sparse_attn.pyr
      s   zSparseAttnBuilder.__init__c                 C   s   d| j  dS )Nzdeepspeed.ops.sparse_attention._op)r   r   r   r   r   absolute_name   s   zSparseAttnBuilder.absolute_namec                 C   s   dgS )Nzcsrc/sparse_attention/utils.cppr   r   r   r   r   sources   s   zSparseAttnBuilder.sourcesc                 C   s   ddgS )Nz-O2z-fopenmpr   r   r   r   r   cxx_args   s   zSparseAttnBuilder.cxx_argsFc                    s  |   r|r| | j d dS zdd l}W n ty(   |r%| d Y dS w |jjd u r=d}|r<| | j d n,|jjdd d \}}t|dkrVt|d	kp[t|d
k}|si|ri| | j d t|j	dd }t|j	dd	 }|d	ko|dk}|s|r| | j d| d|  zdd l
}	W n ty   |r| d Y dS w trt|	j	}
|
tdk}n|	j	}
|
dk}|r|r| d|
 d dS t |o|o|S )Nz is not compatible with ROCMFr   z/unable to import torch, please install it firstz! cuda is not available from torch.   
   r      z requires CUDA version 10.1+   z8 requires a torch version >= 1.5 and < 2.0 but detected z@please install triton==1.0.0 if you want to use sparse attentionz1.0.0zusing untested triton version (z'), only 1.0.0 is known to be compatible)is_rocm_pytorchwarningr   torchImportErrorr   cudasplitint__version__tritonpkg_versionparser	   is_compatible)r   verboser   cuda_compatiblemajorminorTORCH_MAJORTORCH_MINORtorch_compatibler#   installed_tritontriton_mismatchr   r   r   r&      s`   
$

zSparseAttnBuilder.is_compatible)F)__name__
__module____qualname__	BUILD_VARr   r
   r   r   r   r&   __classcell__r   r   r   r   r      s    r   )builderr   	packagingr   r$   r   r   r   r   r   r   <module>   s   