Ë
    g^(h¾  ã                   ó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     ú[/var/www/skyplay_api_hub/venv/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ÐD°TÒD¸VÑ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Ý .Ý *ð 
‡M�MÐ%Ø	‡J�J�Ø	‡K�KÐ!Ø	‡I�Iˆ~Ø	‡N�NÐ'Ø	‡M�MÐ%Ø	‡K�KÐ!Ø	‡L�LÐ#ð	Ð ò*ð"E 4ó Eð°4ô r   