§
    ŠŠtjÂ  ã                   ó  — 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 )é    )Úoptimé   )Ú_FunctionalAdadelta)Ú_FunctionalAdagrad)Ú_FunctionalAdam)Ú_FunctionalAdamax)Ú_FunctionalAdamW)Ú_FunctionalRMSprop)Ú_FunctionalRprop)Ú_FunctionalSGDc                 ó0   — | t           vr|t           | <   dS dS )a5  
    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/html/CA-Chatbot/venv/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   2   su   € ðÝ-¨iÔ8ˆˆøÝð ð ð ÝØL˜ÐLÐLÐLñ
ô 
àð	øøøøðøøøõ
 $ NÐD°TÐDÐDÐD¸VÐ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)Ú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      sE  ðð Ð Ð Ð Ð Ð à 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   