U
    MhR                  	   @   s   d dl Z d dlZdddddddd	d
g	Ze jdd Zdd ZdejdddZdejdddZdejdddZ	dejdddZ
ejdddZdejdddZdejddd	Zdejd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_linearc                  c   s   t j } z
d V  W 5 ~ X d S N)torchZ_CZ_DisableTorchDispatch)guard r   S/var/www/html/venv/lib/python3.8/site-packages/torch/sparse/_semi_structured_ops.pyno_dispatch   s    

r   c              
   C   s&   t   | | W  5 Q R  S Q R X d S r   )r   )functypesargskwargsr   r   r   r      s    r   )returnc                 C   s|   t |dkst|d }t|tjjs*t|jd k	s8t|jd krn|j\}}|| d }|jd | 	|dS |j
 S d S N   r      )lenAssertionError
isinstancer   sparseSparseSemiStructuredTensorpackedmetashapeviewdetach)r   r   r   r   Amknum_kept_elementsr   r   r   r   !   s    

c           	      C   s   t |dkst|d }t|tjjs*t|jd k	s8t|jd kr|j\}}|| d }|j|d  	|d}|	|j
tjkrtjntjS |jS d S r   )r   r   r   r   r   r   r   r    r!   r"   ZdtypeZint32Zint16)	r   r   r   r   r$   r%   r&   r'   metadatar   r   r   r   .   s    

c              
   C   s   t |dkst|d }t|tjjs*tt |jdks<t|jt|jd |jd g|j	|j
|j|j|jd k	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   r!   	__class__Sizer)   r*   r   r    r+   Z	transposer,   r-   r   r   r   r   selfr   r   r   r   <   s     c                 C   s:   t |dkst|\}}t||jkr6td| d|S )Nr   z[`view` is not implemented for SparseSemiStructuredTensor, except for the dummy case (shape=))r   r   tupler!   NotImplementedError)r   r   r   r   r1   r!   r   r   r   r   R   s    
c              	   C   s<   t |dkst|d }|j|j|j|j|j|j|jddS )Nr   r   F)r!   r   r    r)   r*   r+   Zrequires_grad)	r   r   r.   r!   r   r    r)   r*   r+   r0   r   r   r   r   \   s    c                 C   s   t |dkst|\}}|jdks,|jdkr4tdt|tjjrt|j\}}|	|}|
|}	|	d d d |f S | }
t|
tjjst|j\}}|	|}|

|  }	|	d |d d f S d S )Nr   D`SparseSemiStructuredTensor` matmul: Broadcasting is not implemented)r   r   ndimr4   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   j   s"    




c                 C   s   t |dkst|\}}}|jdks.|jdkr6td|jdkrPtd|j t|tjjrftd|	 }t|tjjst|j\}}	|
|}
|j|
	 |d	 }|d |d d f S )N   r   r5   r   zF`SparseSemiStructuredTensor` matmul: only bias dim=1 supported. Shape=zL`SparseSemiStructuredTensor` matmul: only operand B of `addmm` can be sparse)bias)r   r   r6   r4   r!   r   r   r   r   r9   r7   r8   )r   r   r   r   rA   r$   r:   r>   r;   r<   r?   resultr   r   r   r	      s(    




c           
      C   s   t |dkst|d d \}}t |dkr4|d nd }|j}|d|d }|d krd||  }	ntd d ||| gd}	|	j|d d d S )N)r   r@   r   r@   r   )r   r   r   )r   )r   r   r!   r"   r9   r	   )
r   r   r   r   r$   r:   rA   r!   ZA_2dr=   r   r   r   r
      s    )r   N)r   N)r   N)r   N)r   N)r   N)r   N)
contextlibr   __all__contextmanagerr   r   ZTensorr   r   r   r   r   r   r	   r
   r   r   r   r   <module>   s,   

