
    `i~                     N    d dl Z d dlZd dlmZ d dlmZ dgZ G d d          ZdS )    N)wraps)BaseSparsifierBaseSchedulerc                   J    e Zd ZddZd Zd Zd Zd Zdd	Zd
 Z	ddZ
d ZdS )r   Fc                 n   t          |t                    s$t          t          |          j         d          || _        d |j        D             | _        || _        d } || j        j	                  | j        _	        d| j        _
        d| _
        || _        d| _        | 	                                 d S )Nz6 is not an instance of torch.ao.pruning.BaseSparsifierc                     g | ]
}|d          S sparsity_level .0groups     }/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/torch/ao/pruning/scheduler/base_scheduler.py
<listcomp>z*BaseScheduler.__init__.<locals>.<listcomp>   s    OOOE./OOO    c                     t          | dd          r| S t          j        | j                  | j                     j        ~ t                    fd            }d|_        |S )N_with_counterFc                  t                 }|xj         dz  c_                             |          } || i |S )N   )_step_count__get__)argskwargsinstancewrappedclsfuncinstance_refs       r   wrapperz=BaseScheduler.__init__.<locals>.with_counter.<locals>.wrapper+   sJ    '<>>$$)$$,,x55w////r   T)getattrweakrefref__self____func__	__class__r   r   )methodr    r   r   r   s     @@@r   with_counterz,BaseScheduler.__init__.<locals>.with_counter   s    v66  #;v77L?D,..*C4[[0 0 0 0 0 0 [0 %)G!Nr   r   F)
isinstancer   	TypeErrortype__name__
sparsifiergroupsbase_sl
last_epochstepr   verbose_get_sl_called_within_step)selfr-   r0   r2   r(   s        r   __init__zBaseScheduler.__init__   s    *n55 	
##,ddd   % POZ=NOOO$
	 	 	2  ,|DO,@AA&'# ! 16'		r   c                 H    d | j                                         D             S )zReturns the state of the scheduler as a :class:`dict`.

        It contains an entry for every variable in self.__dict__ which
        is not the sparsifier.
        c                 &    i | ]\  }}|d k    ||S )r-   r   )r   keyvalues      r   
<dictcomp>z,BaseScheduler.state_dict.<locals>.<dictcomp>G   s/     
 
 
%3#BUBUCBUBUBUr   )__dict__itemsr4   s    r   
state_dictzBaseScheduler.state_dictA   s1    
 
)-)<)<)>)>
 
 
 	
r   c                 :    | j                             |           dS )zLoads the schedulers state.

        Args:
            state_dict (dict): scheduler state. Should be an object returned
                from a call to :meth:`state_dict`.
        N)r;   update)r4   r>   s     r   load_state_dictzBaseScheduler.load_state_dictK   s      	Z(((((r   c                     | j         S )z9Return last computed sparsity level by current scheduler.)_last_slr=   s    r   get_last_slzBaseScheduler.get_last_slT   s
    }r   c                 F    | j         st          j        d           t          )NzUTo get the last sparsity level computed by the scheduler, please use `get_last_sl()`.)r3   warningswarnNotImplementedErrorr=   s    r   get_slzBaseScheduler.get_slX   s0     . 	M.   "!r   Nc           	      z    |r8|t          d| d|dd           dS t          d|dd| d|dd           dS dS )	z#Display the current sparsity level.Nz"Adjusting sparsity level of group z to z.4e.zEpoch 5dz$: adjusting sparsity level of group )print)r4   
is_verboser   slepochs        r   print_slzBaseScheduler.print_slc   s     	}O5OObOOOOPPPPP_U___5__VX____    		 	r   c                 p    | j         j        dz   }|dz  }|d| j         dz  }|d| j         dz  }|dz  }|S )Nz (
zSparsifier z    base_sl: ))r&   r,   r-   r/   )r4   format_strings     r   __repr__zBaseScheduler.__repr__m   s[    /$6:t::::99999r   c                    | j         dk    r_t          | j        j        d          st	          j        dt                     n*| j        j         dk     rt	          j        dt                     | xj         dz  c_          G d d          } ||           5  | xj        dz  c_        |                                 }d d d            n# 1 swxY w Y   t          t          | j        j        |                    D ],\  }}|\  }}||d<   |                     | j        |||           -d | j        j        D             | _        d	| j        _        d S )
Nr   r   zSeems like `sparsifier.step()` has been overridden after sparsity scheduler initialization. Please, make sure to call `sparsifier.step()` before `scheduler.step()`.zDetected call of `scheduler.step()` before `sparsifier.step()`. You have to make sure you run the sparsifier.step() BEFORE any calls to the scheduler.step().c                        e Zd Zd Zd Zd ZdS )/BaseScheduler.step.<locals>._enable_get_sl_callc                     || _         d S N)o)r4   r\   s     r   r5   z8BaseScheduler.step.<locals>._enable_get_sl_call.__init__   s    r   c                     d| j         _        | S )NTr\   r3   r=   s    r   	__enter__z9BaseScheduler.step.<locals>._enable_get_sl_call.__enter__   s    481r   c                     d| j         _        d S )NFr^   )r4   r+   r9   	tracebacks       r   __exit__z8BaseScheduler.step.<locals>._enable_get_sl_call.__exit__   s    49111r   N)r,   
__module____qualname__r5   r_   rb   r   r   r   _enable_get_sl_callrY      sA            : : : : :r   re   r   c                     g | ]
}|d          S r
   r   r   s     r   r   z&BaseScheduler.step.<locals>.<listcomp>   s    UUUU/0UUUr   T)r   hasattrr-   r1   rF   rG   UserWarningr0   rI   	enumeratezipr.   rQ   r2   rC   enable_mask_update)r4   rP   re   valuesidataparam_grouprO   s           r   r1   zBaseScheduler.stepu   s    q  4?/AA *  	    ,q005  	   	A		: 		: 		: 		: 		: 		: 		: 		: ! && 	# 	#OOq OO[[]]F	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# !T_%;V!D!DEE 	6 	6GAt"OK,.K()MM$,2u5555UUdo>TUUU-1***s   %CCCc                     t          | j        j                  }t          |t          t
          f          s|g|z  S t          |          |k    r"t          d| dt          |                     t	          |          S )zPUtility that extends it to the same length as the .groups, ensuring it is a listzExpected variable of length z
, but got )lenr-   r.   r)   listtuple
ValueError)r4   varns      r   _make_sure_a_listzBaseScheduler._make_sure_a_list   sw    &''#e}-- 	5193xx1}} !W!W!WSQTXX!W!WXXX99r   )r   Fr[   )r,   rc   rd   r5   r>   rA   rD   rI   rQ   rV   r1   rw   r   r   r   r   r      s        1 1 1 1f
 
 
) ) )  	" 	" 	"     +2 +2 +2 +2Z    r   )rF   r"   	functoolsr   +torch.ao.pruning.sparsifier.base_sparsifierr   __all__r   r   r   r   <module>r{      s            F F F F F F 
] ] ] ] ] ] ] ] ] ]r   