
    `iU	                     X    d dl Z d dlmZmZ d dlmZ ddlmZ dgZ G d de          Z	dS )    N)CallableUnion)BaseSparsifier   )BaseSchedulerLambdaSLc                        e Zd ZdZ	 	 ddedeeegef         e	eegef                  f         dede
dd	f
 fd
Zde	e         fdZ xZS )r   a  Sets the sparsity level of each parameter group to the final sl
    times a given function. When last_epoch=-1, sets initial sl as zero.
    Args:
        sparsifier (BaseSparsifier): Wrapped sparsifier.
        sl_lambda (function or list): A function which computes a multiplicative
            factor given an integer parameter epoch, or a list of such
            functions, one for each group in sparsifier.param_groups.
        last_epoch (int): The index of last epoch. Default: -1.
        verbose (bool): If ``True``, prints a message to stdout for
            each update. Default: ``False``.
    Example:
        >>> # Assuming sparsifier has two groups.
        >>> lambda1 = lambda epoch: epoch // 30
        >>> lambda2 = lambda epoch: 0.95**epoch
        >>> # xdoctest: +SKIP
        >>> scheduler = LambdaSL(sparsifier, sl_lambda=[lambda1, lambda2])
        >>> for epoch in range(100):
        >>>     train(...)
        >>>     validate(...)
        >>>     scheduler.step()
    F
sparsifier	sl_lambda
last_epochverbosereturnNc                    || _         t          |t                    s3t          |t                    s|gt	          |j                  z  | _        nmt	          |          t	          |j                  k    r4t          dt	          |j                   dt	          |                     t          |          | _        t                      	                    |||           d S )Nz	Expected z lr_lambdas, but got )
r   
isinstancelisttuplelengroups
sl_lambdas
ValueErrorsuper__init__)selfr   r   r   r   	__class__s        /home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/torch/ao/pruning/scheduler/lambda_scheduler.pyr   zLambdaSL.__init__#   s     %)T** 	.:i3O3O 	.(kC
0A,B,BBDOO9~~Z%6!7!777 ]J$5 6 6]]SQZ^^]]   #9ooDOZ99999    c                       j         st          j        d            fdt           j         j                  D             S )NzUTo get the last sparsity level computed by the scheduler, please use `get_last_sl()`.c                 <    g | ]\  }}| |j                   z  S  )r   ).0lmbdabase_slr   s      r   
<listcomp>z#LambdaSL.get_sl.<locals>.<listcomp><   s>     
 
 
w eeDO,,,
 
 
r   )_get_sl_called_within_stepwarningswarnzipr   r#   )r   s   `r   get_slzLambdaSL.get_sl6   s`    . 	M.  
 
 
 
"%dot|"D"D
 
 
 	
r   )r
   F)__name__
__module____qualname____doc__r   r   r   intfloatr   boolr   r)   __classcell__)r   s   @r   r   r      s         4 : :": 3%,/hue|6L1MMN: 	:
 : 
: : : : : :&	
U 	
 	
 	
 	
 	
 	
 	
 	
r   )
r&   typingr   r   +torch.ao.pruning.sparsifier.base_sparsifierr   base_schedulerr   __all__r   r    r   r   <module>r6      s     " " " " " " " " F F F F F F ) ) ) ) ) ) ,3
 3
 3
 3
 3
} 3
 3
 3
 3
 3
r   