o
    }oic                     @   sd   d dl Zd dlmZ d dlZd dlmZmZ G dd dej	j
Zdd Zdd	 Zd
d Zdd ZdS )    N)
DictConfig)configure_optimizersfreeze_and_subsetc                       s$   e Zd Z fddZdd Z  ZS )
DummyModelc                    s0   t    tjdd| _tjddd| _d S )N   )super__init__torchnnLinearlinearConv1dconv)self	__class__ d/home/ubuntu/.local/lib/python3.10/site-packages/tests/collections/speechlm2/test_freezing_params.pyr      s   
zDummyModel.__init__c                 C   s   |  |}| |}|S )N)r   r   )r   xr   r   r   forward   s   

zDummyModel.forward)__name__
__module____qualname__r   r   __classcell__r   r   r   r   r      s    r   c                  C   s   t   } | jjjsJ | jjjsJ | jjjsJ | jjjs!J t|  dgd}t	| | jjjr5J | jjjr<J | jjjsCJ | jjjsJJ d S )N
linear\..+)exclude_patterns
r   trainr   weightrequires_gradbiasr   r   named_parameterslistmodelparamsr   r   r   test_freezing_params!   s   
r&   c                  C   s   t   } | jjjsJ | jjjsJ | jjjsJ | jjjs!J t|  dgdgd}t	| | jjjr7J | jjjs>J | jjjsEJ | jjjsLJ d S )Nr   zlinear.bias)r   keep_patternsr   r#   r   r   r   test_keeping_unfrozen_params/   s   
r(   c                  C   s   t  } tddidgd| _t| }| dhksJ t|d tjjs&J |d j	d d }t
|dks7J |d | jjksAJ |d	 | jjksKJ d S )
N_target_torch.optim.adamw.AdamWzconv\..+)	optimizerfreeze_paramsr+   r   r%      r   )r   r   cfgr   keys
isinstancer	   optimAdamWparam_groupslenr   r   r    )r$   ans
parametersr   r   r   test_configure_optimizers?   s   r7   c                  C   sx   t  } tddidddddd| _t| }| d	d
hks J t|d	 tjjs+J t|d
 d t	j
jjjs:J d S )Nr)   r*   z,nemo.core.optim.lr_scheduler.CosineAnnealingr   gư>i )r)   warmup_stepsmin_lr	max_steps)r+   lr_schedulerr+   r;   	scheduler)r   r   r.   r   r/   r0   r	   r1   r2   nemocorer;   CosineAnnealing)r$   r5   r   r   r   +test_configure_optimizers_with_lr_schedulerP   s   "r@   )torch.nnr	   	omegaconfr   nemo.core.optim.lr_schedulerr=   ,nemo.collections.speechlm2.parts.optim_setupr   r   r
   Moduler   r&   r(   r7   r@   r   r   r   r   <module>   s   