
    Vh                     R   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j0                  eej2                  e	iZd ZdefdZdefdZy)    )optim   )_FunctionalAdadelta)_FunctionalAdagrad)_FunctionalAdam)_FunctionalAdamax)_FunctionalAdamW)_FunctionalRMSprop)_FunctionalRprop)_FunctionalSGDc                 (    | t         vr
|t         | <   yy)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   s     M/home/dcms/DCMS/lib/python3.12/site-packages/torch/distributed/optim/utils.pyregister_functional_optimr      s     &&$)S! '    	optim_clsc                 v    	 t         |    }t        |g|i |S # t        $ r}t        d|  d      |d }~ww xY w)Nz
Optimizer z( does not have a functional counterpart!)r   KeyError
ValueError_create_functional_optim)r   argskwargsfunctional_clses        r   as_functional_optimr   0   sW    -i8 $NDTDVDD  #KL
	s   	 	838functional_optim_clsc                 "     | g g|i |ddiS )N_allow_empty_param_listT )r   r   r   s      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   <module>r3      s     4 2 , 0 . 2 . * 
MM%	JJ	KK!	II~	NN'	MM%	KK!	LL#	 *"E4 E4 r   