
    h|                         S SK r S SKJr  S SKJr  S SKJr  \R                  " \5        / SQr " S S\ R                  R                  5      r " S S	\ R                  R                  5      rSS
 jrSS jrg)    N)!SparseSemiStructuredTensorCUTLASS)semi_structured_sparsify)#CUTLASS_POINTWISE_OP_DISPATCH_TABLE)SemiSparseLinearSemiSparseActivationLinear#swap_linear_with_semi_sparse_linear#swap_semi_sparse_linear_with_linearc                   >    \ rS rSrSrS r\S 5       r\S 5       rSr	g)r      z=
Replacement nn.Linear that supports runtime weight sparsity
c                     [        U R                  SS9n[        R                  R                  R                  XU R                  5      $ N
cusparselt)backend)r   weighttorchnn
functionallinearbias)selfxsparse_weights      \/home/james-whalen/.local/lib/python3.13/site-packages/torchao/sparsity/training/__init__.pyforwardSemiSparseLinear.forward   s3    0lSxx""))!DIIFF    c                     U " UR                   UR                  5      nUR                  Ul        UR                  Ul        U$ Nin_featuresout_featuresr   r   clsr   mods      r   
from_denseSemiSparseLinear.from_dense"   5    &$$f&9&9:]]
;;
r   c                     [         R                  R                  UR                  UR                  5      nUR
                  Ul        UR                  Ul        U$ r   r   r   Linearr    r!   r   r   r#   semi_sparse_linearr$   s      r   to_denseSemiSparseLinear.to_dense)   G    hhoo**,>,K,K
 (..
%**
r    N
__name__
__module____qualname____firstlineno____doc__r   classmethodr%   r-   __static_attributes__r0   r   r   r   r      s5    G    r   r   c                   >    \ rS rSrSrS r\S 5       r\S 5       rSr	g)r   3   zA
Replacement nn.Linear that supports runtime activation sparsity
c                     [        USS9n[        R                  R                  R	                  X R
                  U R                  5      $ r   )r   r   r   r   r   r   r   )r   r   sparse_xs      r   r   "SemiSparseActivationLinear.forward8   s3    +A|Dxx""))(KKKKr   c                     U " UR                   UR                  5      nUR                  Ul        UR                  Ul        U$ r   r   r"   s      r   r%   %SemiSparseActivationLinear.from_dense<   r'   r   c                     [         R                  R                  UR                  UR                  5      nUR
                  Ul        UR                  Ul        U$ r   r)   r+   s      r   r-   #SemiSparseActivationLinear.to_denseC   r/   r   r0   Nr1   r0   r   r   r   r   3   s5    L    r   r   c                 <   [        U R                  5       5      nUR                  5        Ho  u  pEU(       a  U SU 3OUn[        U[        R
                  R                  5      (       a'  Xa;   a   [        XX   R                  U5      5        AMc  Me  [        XQUS9  Mq     g)z:
Public API for replacing nn.Linear with SemiSparseLinear
.currentN)
dictnamed_childrenitems
isinstancer   r   r*   setattrr%   r   )modelconfigrE   name_to_childnamechildfqns          r   r   r   M   s     --/0M$**,%,	4&!$eUXX__--}V[%;%;E%BC  0sK -r   c                    [        U R                  5       5      nUR                  5        HW  u  p4U(       a  U SU 3OUn[        U[        [
        45      (       a  [        XUR                  U5      5        AMN  [        XES9  MY     g)zb
Public API for replacing instances of SemiSparseLinear/SemiSparseActivaitonLinear with nn.Linear
rC   rD   N)	rF   rG   rH   rI   r   r   rJ   r-   r	   )rK   rE   rM   rN   rO   rP   s         r   r	   r	   \   sr     --/0M$**,%,	4&!$e.0JKLLE!67/C -r   ) )r   torch.sparser   "torchao.sparsity.training.autogradr   'torchao.sparsity.training.pointwise_opsr   _load_dispatch_table__all__r   r*   r   r   r   r	   r0   r   r   <module>rX      sa   
  ; G W ! 6 6'uxx 4 4LDr   