
    qip	                     L    d dl Z d dlmZ d dlmZ ddlmZ dgZ G d de      Zy)    N)Callable)BaseSparsifier   )BaseSchedulerLambdaSLc                   t     e Zd ZdZ	 	 d
dedeegef   eeegef      z  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()
    
sparsifier	sl_lambda
last_epochverbosereturnNc                 p   || _         t        |t              s/t        |t              s|gt	        |j
                        z  | _        n^t	        |      t	        |j
                        k7  r-t        dt	        |j
                         dt	        |             t        |      | _        t        | %  |||       y )Nz	Expected z lr_lambdas, but got )
r	   
isinstancelisttuplelengroups
sl_lambdas
ValueErrorsuper__init__)selfr	   r
   r   r   	__class__s        q/home/ubuntu/crypto_trading_bot/.venv/lib/python3.12/site-packages/torch/ao/pruning/scheduler/lambda_scheduler.pyr   zLambdaSL.__init__#   s     %)T*:i3O(kC
0A0A,BBDO9~Z%6%6!77 J$5$5 677LSQZ^L\]  #9oDOZ9    c                     | j                   st        j                  dd       t        | j                  | j
                        D cg c]  \  }}| || j                        z   c}}S c c}}w )NzUTo get the last sparsity level computed by the scheduler, please use `get_last_sl()`.   )
stacklevel)_get_sl_called_within_stepwarningswarnzipr   base_slr   )r   lmbdar#   s      r   get_slzLambdaSL.get_sl6   sb    ..MM. #&doot||"D
w eDOO,,
 	
 
s   A*)F)__name__
__module____qualname____doc__r   r   intfloatr   boolr   r%   __classcell__)r   s   @r   r   r      su    4 :": SE5L)D3%,1G,HH: 	:
 : 
:&

U 

r   )	r    collections.abcr   +torch.ao.pruning.sparsifier.base_sparsifierr   base_schedulerr   __all__r    r   r   <module>r4      s&     $ F ) ,4
} 4
r   