
    Pi|                         d dl Z d dlmZ d dlmZ d dlmZ  ej        e           g dZ G d de j	        j
                  Z G d d	e j	        j
                  ZddZddZdS )    N)!SparseSemiStructuredTensorCUTLASS)semi_structured_sparsify)#CUTLASS_POINTWISE_OP_DISPATCH_TABLE)SemiSparseLinearSemiSparseActivationLinear#swap_linear_with_semi_sparse_linear#swap_semi_sparse_linear_with_linearc                   D    e Zd ZdZd Zed             Zed             ZdS )r   zE
    Replacement nn.Linear that supports runtime weight sparsity
    c                     t          | j        d          }t          j        j                            ||| j                  S N
cusparselt)backend)r   weighttorchnn
functionallinearbias)selfxsparse_weights      v/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/torchao/sparsity/training/__init__.pyforwardzSemiSparseLinear.forward   s5    0lSSSx"))!]DIFFF    c                 b     | |j         |j                  }|j        |_        |j        |_        |S Nin_featuresout_featuresr   r   clsr   mods      r   
from_densezSemiSparseLinear.from_dense"   0    c&$f&9::]
;
r   c                     t           j                            |j        |j                  }|j        |_        |j        |_        |S r   r   r   Linearr   r   r   r   r!   semi_sparse_linearr"   s      r   to_densezSemiSparseLinear.to_dense)   >    hoo*,>,K
 
 (.
%*
r   N__name__
__module____qualname____doc__r   classmethodr#   r*    r   r   r   r      sf         G G G   [   [  r   r   c                   D    e Zd ZdZd Zed             Zed             ZdS )r   zI
    Replacement nn.Linear that supports runtime activation sparsity
    c                     t          |d          }t          j        j                            || j        | j                  S r   )r   r   r   r   r   r   r   )r   r   sparse_xs      r   r   z"SemiSparseActivationLinear.forward8   s5    +A|DDDx"))(DKKKKr   c                 b     | |j         |j                  }|j        |_        |j        |_        |S r   r   r    s      r   r#   z%SemiSparseActivationLinear.from_dense<   r$   r   c                     t           j                            |j        |j                  }|j        |_        |j        |_        |S r   r&   r(   s      r   r*   z#SemiSparseActivationLinear.to_denseC   r+   r   Nr,   r2   r   r   r   r   3   sf         L L L   [   [  r   r    c                 T   t          |                                           }|                                D ]q\  }}|r| d| n|}t          |t          j        j                  r0||v r+t          | |||                             |                     ~_t          |||           rdS )zB
    Public API for replacing nn.Linear with SemiSparseLinear
    .currentN)
dictnamed_childrenitems
isinstancer   r   r'   setattrr#   r   )modelconfigr<   name_to_childnamechildfqns          r   r   r   M   s     --//00M$**,, L Le%,6!!4!!!$eUX_-- 	Lf}}tVC[%;%;E%B%BCCC/vsKKKKKL Lr   c                 8   t          |                                           }|                                D ]c\  }}|r| d| n|}t          |t          t
          f          r&t          | ||                    |                     ~Rt          ||           ddS )zj
    Public API for replacing instances of SemiSparseLinear/SemiSparseActivaitonLinear with nn.Linear
    r:   r;   N)	r=   r>   r?   r@   r   r   rA   r*   r	   )rB   r<   rD   rE   rF   rG   s         r   r	   r	   \   s     --//00M$**,, D De%,6!!4!!!$e.0JKLL 	DE4!6!6777/sCCCCCD Dr   )r8   )r   torch.sparser   "torchao.sparsity.training.autogradr   'torchao.sparsity.training.pointwise_opsr   _load_dispatch_table__all__r   r'   r   r   r   r	   r2   r   r   <module>rN      s  
  ; : : : : : G G G G G G W W W W W W 6 ! 6'        ux   4       4L L L LD D D D D Dr   