o
    ॵi                     @   sj   d dl Z d dlZd dlmZ d dlmZ d dlmZmZm	Z	 edZ
ddedefdd	Zd
d Ze  dS )    N)version)
ConfigDict)Registrybuild_from_cfgdefault_grouplr_schedulercfgdefault_argsc                 C   sh   | d   drt| ds|du sd|vrtdnt| ds,|du s(d|vr,tdt| tt|dS )	z build lr scheduler from given lr scheduler config dict

    Args:
        cfg (:obj:`ConfigDict`): config dict for lr scheduler object.
        default_args (dict, optional): Default initialization arguments.
    typewarmupbase_schedulerNzMust provide ``base_scheduler`` which is an instance of ``torch.optim.lr_scheduler._LRScheduler`` for build warmup lr scheduler.	optimizerzcMust provide ``optimizer`` which is an instance of ``torch.optim.Optimizer`` for build lr scheduler)	group_keyr	   )lowerendswithhasattr
ValueErrorr   LR_SCHEDULERr   )r   r	    r   [/home/ubuntu/.local/lib/python3.10/site-packages/modelscope/trainers/lrscheduler/builder.pybuild_lr_scheduler   s   

r   c                  C   s   ddl m}  ttjtdk rddlm} nddlm} t	
| }|D ]\}}t	|r3t||s7|dv r>tj||d q%d S )Nr   )r   z	2.0.0.dev)_LRScheduler)LRScheduler)ReduceLROnPlateau)module_name
module_cls)torch.optimr   r   parsetorch__version__torch.optim.lr_schedulerr   r   inspect
getmembersisclass
issubclassr   register_module)r   r   membersnameobjr   r   r   register_torch_lr_scheduler'   s   
r)   )N)r!   r   	packagingr   modelscope.utils.configr   modelscope.utils.registryr   r   r   r   dictr   r)   r   r   r   r   <module>   s   
