
    Vh4                     h    d dl Z d dl mZ d dlmZ d Z G d dej
                        Z G d d      Zy)	    N)nn)is_parametrizedc                 t    t        |       r,t        fd| j                  j                         D              S y)Nc              3   L   K   | ]  \  }}t        fd |D                yw)c              3   6   K   | ]  }t        |        y wN)
isinstance).0paramparametrizations     e/home/dcms/DCMS/lib/python3.12/site-packages/torch/ao/pruning/_experimental/pruner/parametrization.py	<genexpr>z2module_contains_param.<locals>.<genexpr>.<genexpr>   s     Ku
5/2Ks   N)any)r
   key
param_listr   s      r   r   z(module_contains_param.<locals>.<genexpr>
   s(      
Z K
KK
s   !$F)r   r   parametrizationsitems)moduler   s    `r   module_contains_paramr      s9    v 
#)#:#:#@#@#B
 
 	
     c                   .     e Zd ZdZ fdZd Zd Z xZS )FakeStructuredSparsityz
    Parametrization for Structured Pruning. Like FakeSparsity, this should be attached to
    the  'weight' or any other parameter that requires a mask.

    Instead of an element-wise bool mask, this parameterization uses a row-wise bool mask.
    c                 F    t         |           | j                  d|       y )Nmask)super__init__register_buffer)selfr   	__class__s     r   r   zFakeStructuredSparsity.__init__   s    VT*r   c                    t        | j                  t        j                        sJ | j                  j                  d   |j                  d   k(  sJ dgt        |j                        z  }d|d<   | j                  j                  |      |z  S )Nr      )r	   r   torchTensorshapelenreshape)r   xr%   s      r   forwardzFakeStructuredSparsity.forward   st    $))U\\222yyq!QWWQZ///c!''l"ayy  '!++r   c                     i S r    )r   argskwargss      r   
state_dictz!FakeStructuredSparsity.state_dict%   s    	r   )__name__
__module____qualname____doc__r   r)   r.   __classcell__)r   s   @r   r   r      s    +,r   r   c                       e Zd Zd Zd Zy)BiasHookc                      || _         || _        y r   )r   
prune_bias)r   r   r7   s      r   r   zBiasHook.__init__+   s    $
$r   c                     t        |dd       p|j                  j                  }| j                  rd|| j                  j
                   <   dgt        |j                        z  }d|d<   |j                  |      }||z  }|S )N_biasr   r!   r"   )	getattrr9   datar7   r   r   r&   r%   r'   )r   r   inputoutputbiasidxs         r   __call__zBiasHook.__call__/   sx    67D)5<<$$D)*djjoo%& #FLL))CCF<<$DdNFr   N)r/   r0   r1   r   r@   r+   r   r   r5   r5   *   s    %r   r5   )r#   r   torch.nn.utils.parametrizer   r   Moduler   r5   r+   r   r   <module>rC      s-      6RYY 0 r   