
    9jt)                        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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_mmsemi_sparse_clonesemi_sparse_tosemi_sparse_to_copyc               #   `   K   t         j                  j                         } 	 d  ~ y # ~ w xY wwN)torch_C_DisableTorchDispatch)guards    a/media/conek/DATA/Code/OCR/venv/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                    t        |      dk7  rt        dt        |             |d   }t        |t        j                  j
                        s!t        dt        |      j                         |j                  t        d      |j                  D|j                  \  }}||z  dz  }|j                  j                         d | j                  |d      S |j                  j                         S N   expected 1 arg, got r   )expected SparseSemiStructuredTensor, got A.packed must not be None   )lenAssertionError
isinstancer   sparseSparseSemiStructuredTensortype__name__packedmetashaperavelviewdetach)r   r   r   r   Amknum_kept_elementss           r   r   r   &   s    
4yA~3CI;?@@QAa@@A7Q8H8H7IJ
 	
 	xx899vv~ww1EQJxx~~ 3!2499!R@@xx      c                 f   t        |      dk7  rt        dt        |             |d   }t        |t        j                  j
                        s!t        dt        |      j                         |j                  t        d      |j                  |j                  \  }}||z  dz  }|j                  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-   r.   r/   r0   r1   dtypeint32int16)	r   r   r   r   r3   r4   r5   r6   metadatas	            r   r   r   8   s    
4yA~3CI;?@@QAa@@A7Q8H8H7IJ
 	
 	xx899vv~ww1EQJ88>>#$5$67<<QC}}AGGu{{,BU[[TTTTvvr7   c                    t        |      dk7  rt        dt        |             |d   }t        |t        j                  j
                        s!t        dt        |      j                         t        |j                        dk7  r"t        dt        |j                         d      |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$   zexpected 2D tensor, got Dr%   )r-   r.   packed_tmeta_tcompressed_swizzled_bitmaskfuse_transpose_cusparseltalg_id_cusparselt)r&   r'   r(   r   r)   r*   r+   r,   r/   	__class__Sizer?   r@   r-   r.   rA   	transposerB   rC   r   r   r   r   selfs        r   r   r   K   s+   
4yA~3CI;?@@7DdELLCCD7T
8K8K7LM
 	
 4::!7DJJ7HJKK
 >>

DJJrNDJJqM23}}[[yy //; ,,66q!<"&q'"C"Cq'33   r7   c                     t        |      dk7  rt        dt        |             |\  }}t        |      |j                  k7  rt	        d| d      |S )Nr$   expected 2 args, got z[`view` is not implemented for SparseSemiStructuredTensor, except for the dummy case (shape=))r&   r'   tupler/   NotImplementedError)r   r   r   r   rH   r/   s         r   r   r   i   s`    
4yA~4SYK@AAKD%U|tzz!!ijoippqr
 	
 Kr7   c                 *   t        |      dk7  rt        dt        |             |d   }|j                  |j                  |j                  |j
                  |j                  |j                  |j                  |j                  |j                  d	      S )Nr    r!   r   F	r/   r-   r.   r?   r@   rA   rB   rC   requires_grad)r&   r'   rD   r/   r-   r.   r?   r@   rA   rB   rC   rG   s        r   r   r   t   s    
4yA~3CI;?@@7D>>jj{{YY{{$($D$D"&"@"@00  
 
r7   c                    t        |      dk7  rt        dt        |             |\  }}|j                  dk7  s|j                  dk7  rt        d      t	        |t
        j                  j                        r|j                  |      S |j                         }t	        |t
        j                  j                        s!t        dt        |      j                         |j                  |d      j                         S )Nr$   rJ   D`SparseSemiStructuredTensor` matmul: Broadcasting is not implementedr"   T)should_transpose_dense)r&   r'   ndimrM   r(   r   r)   r*   _mmtr+   r,   )r   r   r   r   r3   BB_ts          r   r	   r	      s    
4yA~4SYK@AADAqvv{affk!R
 	
 !U\\<<=uuQxcce#u||FFG ;DI<N<N;OP  wwqw688::r7   c                 b   t        |      dk7  rt        dt        |             |\  }}}|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!t        dt        |      j                         |j                  \  }}	|j                  ||d	
      j                         S )N   zexpected 3 args, got r$   rR   r    zF`SparseSemiStructuredTensor` matmul: only bias dim=1 supported. Shape=zL`SparseSemiStructuredTensor` matmul: only operand B of `addmm` can be sparser"   T)biasrS   )r&   r'   rT   rM   r/   r(   r   r)   r*   rV   r+   r,   rU   )
r   r   r   r   r[   r3   rW   rX   row_cols
             r   r
   r
      s   
4yA~4SYK@AAJD!Qvv{affk!R
 	
 yyA~!TUYU_U_T`a
 	
 !U\\<<=!Z
 	
 ##%Cc5<<BBC7S	8J8J7KL
 	
 IC77147=??AAr7   c                 ^   t        |      dvrt        dt        |             |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$   rZ   zexpected 2 or 3 args, got r$   rZ   r%   )r   r   r   )r&   r'   r/   r1   rV   r
   )
r   r   r   r   r3   rW   r[   r/   A_2dress
             r   r   r      s    
4y9#d)EFF8DAq$i1n47$DGGE66"eBi D|QSSUlacce$

 388$U3BZ$$$r7   c                 \   |d d \  }}}}}}	}
|j                   t        j                  k7  rt        d|j                          |j                   t        j                  k7  rt        d|j                          t	        |t        j
                  j                        s!t        dt        |      j                         |j                  t        d      |j                         dk7  s|j                         dk7  r-t        d|j                          d|j                                |j                   t        j                  k7  s|j                   t        j                  k7  r%t        d	|j                    d|j                          t        j                  |j                  |||z  |

      }|S )N   z$expected A.dtype float8_e4m3fn, got z$expected B.dtype float8_e4m3fn, got z3expected SparseSemiStructuredTensorCUSPARSELT, got r#   r    z2expected A_scale and B_scale to have numel 1, got z and z0expected A_scale and B_scale dtype float32, got )alpha	out_dtype)r9   r   float8_e4m3fnr'   r(   r)   $SparseSemiStructuredTensorCUSPARSELTr+   r,   r-   numelfloat32_cslt_sparse_mm)r   r   r   r   r3   rW   A_scaleB_scaler[   scale_resultrd   sparse_results               r   r   r      s   <@!H9Aq'7D,	ww%%%%CAGG9MNNww%%%%CAGG9MNNaJJKA$q'BRBRAST
 	
 	xx899}}!w}}!3@@QQVW^WdWdWfVgh
 	
 }}%%--)G>w}}oUSZS`S`Rab
 	
 ))			M r7   c                    t        |      dk7  rt        dt        |             |d   }t        |t        j                  j
                        s!t        dt        |      j                         |j                  |j                  |j                  d n|j                  j                         |j                  d n|j                  j                         |j                  d n|j                  j                         |j                  d n|j                  j                         |j                  d n|j                  j                         |j                   |j"                  |j$                  	      S )Nr    r!   r   r"   rO   )r&   r'   r(   r   r)   r*   r+   r,   rD   r/   r-   cloner.   r?   r@   rA   rB   rC   rP   rG   s        r   r   r      s,   
4yA~3CI;?@@7DdELLCCD7T
8K8K7LM
 	

 >>jj{{*t0A0A0CYY&TDIIOO,=.DMM4G4G4I{{*t0A0A0C //7 11779"&"@"@00((   r7   c                     |d   }|xs i }|j                  dd       }|;t        j                  |      j                  dk(  r|j	                         } | |fi |S t        d| d      )Nr   devicecpuz`_to_copy()` with kwargs=zb is not implemented for SparseSemiStructuredTensor. Only converting to CPU is supported currently.)getr   rq   r+   to_denserM   )r   r   r   r   rH   rq   denses          r   r   r     s{    7D\rFZZ$'Fell62775@E$V$$

#F8 ,Y 	Y r7   c                 t   |d   }|dd  }|xs i }d }|r;|d   }t        |t        j                  t        f      r	 t        j                  |      }d|v rt        j                  |d         }|+|j
                  dk(  r|j                         } | |g|i |S t        d| d| d      # t        $ r Y fw xY w)Nr   r    rq   rr   z`to()` with args=z	, kwargs=z\ is not implemented for SparseSemiStructuredTensor. Only `to('cpu')` is supported currently.)r(   r   rq   strRuntimeErrorr+   rt   rM   )	r   r   r   r   rH   remaining_argsrq   	first_argru   s	            r   r   r     s    7D!"XN\rF F"1%	i%,,!45i0 6fX./fkkU2E5N5f55

N+9VH =S 	S    s   B+ +	B76B7) Nr   )
contextlibr   __all__contextmanagerr   r   Tensorr   r   r   r   r   r	   r
   r   r   r   r   r   r{   r7   r   <module>r      s     "  
!U\\ !$ell & <5<< U\\ "; ;&BELL B2%U\\ %&! !HELL 85<<  ell r7   