o
    wZh                     @   s   d dl Z d dlZg dZe jdd Zdd Zddejfd	d
ZddejfddZddejfddZ	ddejfddZ
dejfddZddejfddZddejfddZddejfddZddejfddZdS )    N)
fallback_dispatchersemi_sparse_valuessemi_sparse_indicessemi_sparse_tsemi_sparse_viewsemi_sparse_detachsemi_sparse_mmsemi_sparse_addmmsemi_sparse_linearsemi_sparse_scaled_mmc                  c   s     t j } zd V  W ~ d S ~ w N)torchZ_CZ_DisableTorchDispatch)guard r   P/var/www/auris/lib/python3.10/site-packages/torch/sparse/_semi_structured_ops.pyno_dispatch   s
   

r   c                 C   s2   t   | | W  d    S 1 sw   Y  d S r   )r   )functypesargskwargsr   r   r   r      s   $r   r   returnc                 C   sx   t |dksJ |d }t|tjjsJ |jd usJ |jd u r7|j\}}|| d }|jd | |dS |j	 S N   r      )
len
isinstancer   sparseSparseSemiStructuredTensorpackedmetashapeviewdetach)r   r   r   r   Amknum_kept_elementsr   r   r   r   #   s   


r   c           	      C   s   t |dksJ |d }t|tjjsJ |jd usJ |jd u rG|j\}}|| d }|j|d  |d}||j	tj
krCtj
S tjS |jS r   )r   r   r   r   r   r   r    r!   r"   dtypeZint32Zint16)	r   r   r   r   r$   r%   r&   r'   metadatar   r   r   r   0   s   

 r   c              
   C   s   t |dksJ |d }t|tjjsJ t |jdksJ |jt|jd |jd g|j|j	|j
|j|jd ur@|jddnd |d j|d jdS )Nr   r   r   r   )r   r    packed_tmeta_tcompressed_swizzled_bitmaskfuse_transpose_cusparseltalg_id_cusparselt)r   r   r   r   r   r!   	__class__Sizer*   r+   r   r    r,   Z	transposer-   r.   r   r   r   r   selfr   r   r   r   >   s    
r   c                 C   s:   t |dksJ |\}}t||jkrtd| d|S )Nr   z[`view` is not implemented for SparseSemiStructuredTensor, except for the dummy case (shape=))r   tupler!   NotImplementedError)r   r   r   r   r2   r!   r   r   r   r   V   s   
r   c                 C   sD   t |dksJ |d }|j|j|j|j|j|j|j|j|j	dd	S )Nr   r   F)	r!   r   r    r*   r+   r,   r-   r.   Zrequires_grad)
r   r/   r!   r   r    r*   r+   r,   r-   r.   r1   r   r   r   r   `   s   r   c                 C   s   t |dksJ |\}}|jdks|jdkrtdt|tjjr:|j\}}||}|	|}	|	d d d |f S |
 }
t|
tjjsGJ |j\}}||}|
	|
 
 }	|	d |d d f S )Nr   D`SparseSemiStructuredTensor` matmul: Broadcasting is not implemented)r   ndimr5   r   r   r   r   r!   _pad_dense_input_mmt)r   r   r   r   r$   BrowcolZB_paddedresB_tA_paddedr   r   r   r   p   s"   




r   c                 C   s   t |dksJ |\}}}|jdks|jdkrtd|jdkr(td|j t|tjjr3td| }t|tjjs@J |j\}}	|	|}
|j
|
 |d }|d |d d f S )N   r   r6   r   zF`SparseSemiStructuredTensor` matmul: only bias dim=1 supported. Shape=zL`SparseSemiStructuredTensor` matmul: only operand B of `addmm` can be sparse)bias)r   r7   r5   r!   r   r   r   r   r:   r8   r9   )r   r   r   r   rB   r$   r;   r?   r<   Z_colr@   resultr   r   r   r	      s(   




r	   c           
      C   s   t |dv sJ |d d \}}t |dkr|d nd }|j}|d|d }|d u r2||  }	ntd d ||| gd}	|	jg |d d dR  S )N)r   rA   r   rA   r   )r   r   r   )r   r!   r"   r:   r	   )
r   r   r   r   r$   r;   rB   r!   ZA_2dr>   r   r   r   r
      s   r
   c                 C   s   |d d \}}}}}}	}
|j tjksJ |j tjksJ t|tjjs&J |jd us-J | dkr9| dks;J |j tjkrG|j tjksIJ tj	|j||| |
d}|S )N   r   )alpha	out_dtype)
r(   r   Zfloat8_e4m3fnr   r   Z$SparseSemiStructuredTensorCUSPARSELTr   ZnumelZfloat32Z_cslt_sparse_mm)r   r   r   r   r$   r;   ZA_scaleZB_scalerB   Zscale_resultrF   Zsparse_resultr   r   r   r      s   r   )r   N)
contextlibr   __all__contextmanagerr   r   ZTensorr   r   r   r   r   r   r	   r
   r   r   r   r   r   <module>   s   

