
    h              
          S SK Jr  S SKrS SKJrJrJr  \R                  R                  \5        \R                  R                  \5        \" S/ SQ5      r	 " S S\R                  R                  5      r " S S	\R                  R                  5      r\R                  R                    SS
\R                  S\S\S\4S jj5       r\R                  R                  \	R"                  4S
\R                  S\S\	S\4S jj5       rg)    )EnumN)SparseSemiStructuredTensor$SparseSemiStructuredTensorCUSPARSELT!SparseSemiStructuredTensorCUTLASSGRADIENT_TYPE)DENSESPARSESTEc                   t    \ rS rSr\S\R                  S\S\4S j5       r	\S\R                  4S j5       r
Srg	)
_SparsifyFunc   xalgobackendc                     US:H  n[        U[        5      (       dE  [        R                  " XUS9u  pVpxn	U(       a  [        O[
        n
U
" UR                  UUUUU	SSS9nU$ UR                  5       nU$ )Ncutlass)	algorithmuse_cutlassFT)packedmetapacked_tmeta_tcompressed_swizzled_bitmaskrequires_gradfuse_transpose_cusparselt)
isinstancer   torch_sparse_semi_structured_tiler   r   shapedetach)ctxr   r   r   r   r   r   r   r   bitmaskclsouts               \/home/james-whalen/.local/lib/python3.13/site-packages/torchao/sparsity/training/autograd.pyforward_SparsifyFunc.forward   s    *!78822; 6V8W  29 
 !,3#*.	C 
 ((*C
    grad_outc                     US S 4$ )N )r!   r)   s     r%   backward_SparsifyFunc.backward4   s     t##r(   r+   N)__name__
__module____qualname____firstlineno__staticmethodr   Tensorstrr   r&   r,   __static_attributes__r+   r(   r%   r   r      sL     C -  8 $ $ $r(   r   c                       \ rS rSr\\R                  4S\R                  S\	4S jj5       r
\S\R                  4S j5       rSrg)	_SparsifyLikeFunc:   r   patternc           
         [        U[        5      (       d   e[        U[        5      (       d  [        S5      eUR                  R                  5       (       d  [        S5      e[        R                  " XR                  5      u  pEUR                  U l        UR                  U l	        UR                  U l
        X0l        UR                  UR                  UUR                  UUR                  UR                  UR                  S9$ )NzC`sparsify_like(x, pattern)` is only implemented for CUTLASS backendzK`sparsify_like(x, pattern)` is not implemented when `bitmask` is transposedr   )r   r   r   NotImplementedErrorr   is_contiguousr   _sparse_semi_structured_applyr   r   r"   gradient	__class__r   r   )r!   r   r9   r?   r   r   s         r%   r&   _SparsifyLikeFunc.forward;   s     '#=>>>>'#DEE%U  22@@BB%]  !>>22

 <<^^
99  GGLLNN//// ! 
 	
r(   r)   c           
         U R                   [        R                  :X  d  [        U[        5      (       a  US S S 4$ [        U[        5      (       a   eUR
                  U R
                  :X  d   eU R                   [        R                  :X  aE  U R                  R                  5       (       d   e[        R                  " XR                  5      S S S 4$ U R                   [        R                  :X  d   e[        R                  " XR                  SS9u  p#pC[        UR                  UU R                   UU R"                  U R                  UR$                  S9S S S 4$ )Nr   )r   r;   )r?   r   r
   r   r   dtyper   threads_masksr=   r   #_sparse_semi_structured_apply_denser"   r	   r   r   r   r   r   r   )r!   r)   r   _r   s        r%   r,   _SparsifyLikeFunc.backwarda   s5   <<=,,,
01
 1
 T4--h(BCCCC~~***<<=...$$22444499(KKP	  ||}33333!&!C!Ckk9"
8 .

&44 
 	
r(   r+   N)r.   r/   r0   r1   r2   r   r	   r   r3   r   r&   r,   r5   r+   r(   r%   r7   r7   :   sU    
 %%	#
<<#
 ,#
 #
J # # #r(   r7   r   r   r   returnc                 .    [         R                  XU5      $ )zd
Sparsifies a dense tensor into a semi-structured tensor, according to the algo and backend passed.
)r   apply)r   r   r   s      r%   semi_structured_sparsifyrK      s     q00r(   r9   r?   c                 .    [         R                  XU5      $ )zb
Sparsifies a dense tensor into a semi-structured tensor, using the mask of the provided pattern.
)r7   rJ   )r   r9   r?   s      r%   semi_structured_sparsify_likerM      s     ""1x88r(   ) r   )enumr   r   torch.sparser   r   r   _dynamoallow_in_graphr   autogradFunctionr   r7   r3   r4   rK   r	   rM   r+   r(   r%   <module>rU      s        A B   > ? _&@A!$ENN++ !$HK// K\  1||1
1 1  	1 1  ,229||9'9 9  	9 9r(   