
    קg                        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 ZdefdZdefdZdS )    )Type)optim   )_FunctionalAdadelta)_FunctionalAdagrad)_FunctionalAdam)_FunctionalAdamax)_FunctionalAdamW)_FunctionalRMSprop)_FunctionalRprop)_FunctionalSGDc                 0    | 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   s     Y/var/www/html/ai-engine/env/lib/python3.11/site-packages/torch/distributed/optim/utils.pyregister_functional_optimr       s)     &&&$)S!!! '&    	optim_clsc                     	 t           |          }n&# t          $ r}t          d|  d          |d }~ww xY 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es        r   as_functional_optimr   1   su    -i8   PPPP
 
	
 $NDTDDDVDDDs    
3.3functional_optim_clsc                 "     | g g|R i |ddiS )N_allow_empty_param_listT )r   r   r   s      r   r   r   <   sJ    
	     !%	   r   N) typingr   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   r   r   r!   r   r   <module>r4      sU               4 4 4 4 4 4 2 2 2 2 2 2 , , , , , , 0 0 0 0 0 0 . . . . . . 2 2 2 2 2 2 . . . . . . * * * * * * 
M%	J	K!	I~	N'	M%	K!	L#	 * * *"E4 E E E E4      r   