U
    ©Ê¹j½  ã                   @   sÔ   d dl mZ d dlmZ ddlmZ ddlmZ ddlm	Z	 ddl
mZ ddlmZ dd	lmZ dd
lmZ ddlmZ ejeeje	ejeejeejeejeejeejeiZdd„ Zedœdd„Zedœdd„ZdS )é    )ÚType)Úoptimé   )Ú_FunctionalAdadelta)Ú_FunctionalAdagrad)Ú_FunctionalAdam)Ú_FunctionalAdamax)Ú_FunctionalAdamW)Ú_FunctionalRMSprop)Ú_FunctionalRprop)Ú_FunctionalSGDc                 C   s   | t kr|t | < dS )a1  
    Interface to insert a new functional optimizer to functional_optim_map
    ``fn_optim_key`` and ``fn_optimizer`` are user defined. The optimizer and key
    need not be of :class:`torch.optim.Optimizer` (e.g. for custom optimizers)
    Example::
        >>> # import the new functional optimizer
        >>> # xdoctest: +SKIP
        >>> from xyz import fn_optimizer
        >>> from torch.distributed.optim.utils import register_functional_optim
        >>> fn_optim_key = "XYZ_optim"
        >>> register_functional_optim(fn_optim_key, fn_optimizer)
    N)Úfunctional_optim_map)Úkeyr   © r   ú\/var/www/html/bwave/python/venv/lib/python3.8/site-packages/torch/distributed/optim/utils.pyÚregister_functional_optim   s    r   )Ú	optim_clsc              
   O   sR   zt |  }W n4 tk
r@ } ztd| › d�ƒ|‚W 5 d }~X Y nX t|f|ž|ŽS )Nz
Optimizer z( does not have a functional counterpart!)r   ÚKeyErrorÚ
ValueErrorÚ_create_functional_optim)r   ÚargsÚkwargsZfunctional_clsÚer   r   r   Úas_functional_optim.   s    
ÿþr   )Úfunctional_optim_clsc                 O   s   | g f|ž|ddi—ŽS )NZ_allow_empty_param_listTr   )r   r   r   r   r   r   r   9   s    ÿþýür   N) Útypingr   Ztorchr   Zfunctional_adadeltar   Zfunctional_adagradr   Zfunctional_adamr   Zfunctional_adamaxr   Zfunctional_adamwr	   Zfunctional_rmspropr
   Zfunctional_rpropr   Zfunctional_sgdr   ZAdagradZAdamZAdamWZSGDZAdadeltaZRMSpropZRpropZAdamaxr   r   r   r   r   r   r   r   Ú<module>   s:           ø