
    Vh                     v   d dl Z d dlZg dZe j                  d        Zd Zddej                  fdZddej                  fdZddej                  fdZ	ddej                  fd	Z
dej                  fd
Zddej                  fdZddej                  fdZddej                  fdZddej                  fdZy)    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               #   `   K   t         j                  j                         } 	 d  ~ y # ~ w xY wwN)torch_C_DisableTorchDispatch)guards    Q/home/dcms/DCMS/lib/python3.12/site-packages/torch/sparse/_semi_structured_ops.pyno_dispatchr      s&     HH**,EEs   .( .+.c                 L    t               5   | | cd d d        S # 1 sw Y   y xY wr   )r   )functypesargskwargss       r   r   r      s#    	 T{  s   #returnc                 L   t        |      dk(  sJ |d   }t        |t        j                  j                        sJ |j
                  J |j                  6|j                  \  }}||z  dz  }|j
                  d | j                  |d      S |j
                  j                         S N   r      )
len
isinstancer   sparseSparseSemiStructuredTensorpackedmetashapeviewdetach)r   r   r   r   Amknum_kept_elementss           r   r   r   #   s    t9>>QAa@@AAA88vv~ww1EQJxx+*,11!R88xx      c                    t        |      dk(  sJ |d   }t        |t        j                  j                        sJ |j
                  J |j                  |j                  \  }}||z  dz  }|j
                  |d  j                  |d      }|j                  |j                  t        j                  k(  rt        j                        S t        j                        S |j                  S r   )r    r!   r   r"   r#   r$   r%   r&   r'   dtypeint32int16)	r   r   r   r   r)   r*   r+   r,   metadatas	            r   r   r   0   s    t9>>QAa@@AAA88vv~ww1EQJ88-./44Q;}}AGGu{{,BU[[TTTTvvr-   c                    t        |      dk(  sJ |d   }t        |t        j                  j                        sJ t        |j
                        dk(  sJ |j                  t        j                  |j
                  d   |j
                  d   g      |j                  |j                  |j                  |j                  |j                  |j                  j                  dd      nd |d   j                  |d   j                        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__Sizer4   r5   r$   r%   r6   	transposer7   r8   r   r   r   r   selfs        r   r   r   >   s    t9>>7DdELLCCDDDtzz?a >>

DJJrNDJJqM23}}[[yy //; ,,66q!<"&q'"C"Cq'33   r-   c                 ~    t        |      dk(  sJ |\  }}t        |      |j                  k7  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   r=   r&   s         r   r   r   V   sN    t9>>KD%U|tzz!!ijoippqr
 	
 Kr-   c                     t        |      dk(  sJ |d   }|j                  |j                  |j                  |j                  |j
                  |j                  |j                  |j                  |j                  d	      S )Nr   r   F)	r&   r$   r%   r4   r5   r6   r7   r8   requires_grad)
r    r9   r&   r$   r%   r4   r5   r6   r7   r8   r<   s        r   r   r   `   sr    t9>>7D>>jj{{YY{{$($D$D"&"@"@00  
 
r-   c                 Z   t        |      dk(  sJ |\  }}|j                  dk7  s|j                  dk7  rt        d      t        |t        j
                  j                        r<|j                  \  }}|j                  |      }|j                  |      }	|	d d d |f   S |j                         }
t        |
t        j
                  j                        sJ |j                  \  }}|j                  |      }|
j                  |j                               j                         }	|	d |d d f   S )Nr   D`SparseSemiStructuredTensor` matmul: Broadcasting is not implemented)r    ndimrA   r!   r   r"   r#   r&   _pad_dense_input_mmt)r   r   r   r   r)   BrowcolB_paddedresB_tA_paddeds               r   r	   r	   p   s   t9>>DAqvv{affk!R
 	
 !U\\<<=77S%%a(eeHo1dsd7|cce#u||FFGGG77S%%a(gghjjl#%%'4C47|r-   c                 L   t        |      dk(  sJ |\  }}}|j                  dk7  s|j                  dk7  rt        d      |j                  dk7  rt        d|j                         t	        |t
        j                  j                        rt        d      |j                         }t	        |t
        j                  j                        sJ |j                  \  }}	|j                  |      }
|j                  |
j                         |      j                         }|d |d d f   S )N   r   rE   r   zF`SparseSemiStructuredTensor` matmul: only bias dim=1 supported. Shape=zL`SparseSemiStructuredTensor` matmul: only operand B of `addmm` can be sparse)bias)r    rF   rA   r&   r!   r   r"   r#   rI   rG   rH   )r   r   r   r   rS   r)   rJ   rO   rK   _colrP   results               r   r
   r
      s   t9>>JD!Qvv{affk!R
 	
 yyA~!TUYU_U_T`a
 	
 !U\\<<=!Z
 	
 ##%Cc5<<BBCCCIC##A&HWWXZZ\W-//1F$3$'?r-   c                 4   t        |      dv sJ |d d \  }}t        |      dk(  r|d   nd }|j                  }|j                  d|d         }|||j                         z  }	nt	        d d |||j                         g      }	 |	j                  g |d d d S )N)r   rR   r   rR   r   )r   r   r   )r    r&   r'   rI   r
   )
r   r   r   r   r)   rJ   rS   r&   A_2drN   s
             r   r   r      s    t98DAq$i1n47$DGGE66"eBi D|QSSUlacce$
 388$U3BZ$$$r-   c                    |d d \  }}}}}}	}
|j                   t        j                  k(  sJ |j                   t        j                  k(  sJ t        |t        j                  j
                        sJ |j                  J |j                         dk(  r|j                         dk(  sJ |j                   t        j                  k(  r|j                   t        j                  k(  sJ t        j                  |j                  |||z  |
      }|S )N   r   )alpha	out_dtype)
r/   r   float8_e4m3fnr!   r"   $SparseSemiStructuredTensorCUSPARSELTr$   numelfloat32_cslt_sparse_mm)r   r   r   r   r)   rJ   A_scaleB_scalerS   scale_resultr[   sparse_results               r   r   r      s    <@!H9Aq'7D,	77e)))))77e)))))aJJKKK88==?aGMMOq$888==EMM)gmmu}}.LLL ))			M r-   ) N)
contextlibr   __all__contextmanagerr   r   Tensorr   r   r   r   r   r	   r
   r   r   re   r-   r   <module>rj      s       

!U\\ 
!ell  05<< U\\   *ELL .%U\\ %( r-   