
    sh~                     F    S SK r S SKrS SKJr  S SKJr  S/r " S S5      rg)    N)wraps)BaseSparsifierBaseSchedulerc                   V    \ rS rSrSS jrS rS rS rS rSS jr	S	 r
SS
 jrS rSrg)r      c                    [        U[        5      (       d!  [        [        U5      R                   S35      eXl        UR                   Vs/ s H  oDS   PM	     snU l        X l        S nU" U R
                  R                  5      U R
                  l	        SU R
                  l
        SU l
        X0l        SU l        U R                  5         g s  snf )Nz6 is not an instance of torch.ao.pruning.BaseSparsifiersparsity_levelc                    ^^^ [        U SS5      (       a  U $ [        R                  " U R                  5      mU R                  mT" 5       R
                  mA [        T5      UUU4S j5       nSUl        U$ )N_with_counterFc                  p   > T" 5       nU=R                   S-  sl         TR                  UT5      nU" U 0 UD6$ )N   )_step_count__get__)argskwargsinstancewrappedclsfuncinstance_refs       }/Users/tiagomarins/Projetos/claudeai/copy_bank/venv/lib/python3.13/site-packages/torch/ao/pruning/scheduler/base_scheduler.pywrapper=BaseScheduler.__init__.<locals>.with_counter.<locals>.wrapper+   s;    '>$$)$,,x5///    T)getattrweakrefref__self____func__	__class__r   r   )methodr   r   r   r   s     @@@r   with_counter,BaseScheduler.__init__.<locals>.with_counter   si    v66 #;;v7L??D.**C4[0 0 %)G!Nr   r   F)
isinstancer   	TypeErrortype__name__
sparsifiergroupsbase_sl
last_epochstepr   verbose_get_sl_called_within_step)selfr(   r+   r-   groupr"   s         r   __init__BaseScheduler.__init__   s    *n55
#,,--cd  % >H=N=NO=NE./=NO$
	2  ,DOO,@,@A&'# ! 16'		O Ps   Cc                 |    U R                   R                  5        VVs0 s H  u  pUS:w  d  M  X_M     snn$ s  snnf )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.
r(   )__dict__items)r/   keyvalues      r   
state_dictBaseScheduler.state_dictA   s@     *.)<)<)>
)>:3#BUJCJ)>
 	
 
s   88c                 :    U R                   R                  U5        g)zLoads the schedulers state.

Args:
    state_dict (dict): scheduler state. Should be an object returned
        from a call to :meth:`state_dict`.
N)r4   update)r/   r8   s     r   load_state_dictBaseScheduler.load_state_dictK   s     	Z(r   c                     U R                   $ )z9Return last computed sparsity level by current scheduler.)_last_slr/   s    r   get_last_slBaseScheduler.get_last_slT   s    }}r   c                 \    U R                   (       d  [        R                  " S5        [        e)NzUTo get the last sparsity level computed by the scheduler, please use `get_last_sl()`.)r.   warningswarnNotImplementedErrorr@   s    r   get_slBaseScheduler.get_slX   s&     ..MM. "!r   Nc           	      p    U(       a/  Uc  [        SU SUS S35        g[        SUS SU SUS S35        gg)	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)r/   
is_verboser0   slepochs        r   print_slBaseScheduler.print_slc   sS    }:5'bXQOPU2J&J5'QUVXY\U]]^_	 r   c                     U R                   R                  S-   nUS-  nUSU R                   S3-  nUSU R                   S3-  nUS-  nU$ )Nz (
zSparsifier z    base_sl: ))r    r'   r(   r*   )r/   format_strings     r   __repr__BaseScheduler.__repr__m   s_    //$6;t&7r::=b99r   c                    U R                   S:X  av  [        U R                  R                  S5      (       d  [        R
                  " S[        5        O5U R                  R                   S:  a  [        R
                  " S[        5        U =R                   S-  sl          " S S5      nU" U 5         U =R                  S-  sl        U R                  5       nS S S 5        [        [        U R                  R                  W5      5       H*  u  pEUu  pgXvS'   U R                  U R                  XGU5        M,     U R                  R                   Vs/ s H  oS   PM	     snU l        SU R                  l        g ! , (       d  f       N= fs  snf )	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                   &    \ rS rSrS rS rS rSrg)/BaseScheduler.step.<locals>._enable_get_sl_call   c                     Xl         g No)r/   r_   s     r   r1   8BaseScheduler.step.<locals>._enable_get_sl_call.__init__   s    r   c                 (    SU R                   l        U $ )NTr_   r.   r@   s    r   	__enter__9BaseScheduler.step.<locals>._enable_get_sl_call.__enter__   s    481r   c                 &    SU R                   l        g )NFrb   )r/   r&   r7   	tracebacks       r   __exit__8BaseScheduler.step.<locals>._enable_get_sl_call.__exit__   s    491r   r^   N)r'   
__module____qualname____firstlineno__r1   rc   rg   __static_attributes__ r   r   _enable_get_sl_callrZ      s    :r   rn   r	   T)r   hasattrr(   r,   rD   rE   UserWarningr+   rG   	enumeratezipr)   rP   r-   r?   enable_mask_update)	r/   rO   rn   valuesidataparam_grouprN   r0   s	            r   r,   BaseScheduler.stepu   s:    q 4??//AA*  	 ,,q05  	 	A		: 		: !&OOq O[[]F ' !T__%;%;V!DEGA"OK,.()MM$,,u5 F
 ?Coo>T>TU>TU/0>TU-1* '& Vs   .&E3F3
Fc                     [        U R                  R                  5      n[        U[        [
        45      (       d  U/U-  $ [        U5      U:w  a  [        SU S[        U5       35      e[	        U5      $ )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)r/   varns      r   _make_sure_a_listBaseScheduler._make_sure_a_list   sf    &&'#e}--5193x1} #?s*SQTXJ!WXX9r   )r.   r?   r   r*   r+   r(   r-   )Fr]   )r'   ri   rj   rk   r1   r8   r<   rA   rG   rP   rV   r,   r   rl   rm   r   r   r   r      s1    1f
)	"+2Zr   )rD   r   	functoolsr   +torch.ao.pruning.sparsifier.base_sparsifierr   __all__r   rm   r   r   <module>r      s)       F 
] ]r   