o
    h                     @   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 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defddZdefddZdS )    )optim   )_FunctionalAdadelta)_FunctionalAdagrad)_FunctionalAdam)_FunctionalAdamax)_FunctionalAdamW)_FunctionalRMSprop)_FunctionalRprop)_FunctionalSGDc                 C   s   | t vr
|t | < dS 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   q/var/www/html/construction_image-detection-poc/venv/lib/python3.10/site-packages/torch/distributed/optim/utils.pyregister_functional_optim   s   r   	optim_clsc              
   O   sN   zt |  }W n ty } z	td|  d|d }~ww t|g|R i |S )Nz
Optimizer z( does not have a functional counterpart!)r   KeyError
ValueError_create_functional_optim)r   argskwargsfunctional_clser   r   r   as_functional_optim0   s   
r   functional_optim_clsc                 O   s   | g g|R i |ddiS )N_allow_empty_param_listTr   )r   r   r   r   r   r   r   ;   s   r   N)torchr   functional_adadeltar   functional_adagradr   functional_adamr   functional_adamaxr   functional_adamwr   functional_rmspropr	   functional_rpropr
   functional_sgdr   AdagradAdamAdamWSGDAdadeltaRMSpropRpropAdamaxr   r   typer   r   r   r   r   r   <module>   s*   