Ë
    [^(h1M  ã                   óP  — d Z ddlmZmZmZ ddlZddlmZ ddlmZm	Z	m
Z
mZmZmZmZmZmZmZmZ ddgZ G d	„ de«      Zd
de› de› de› de
› de› d�z   dz   e_         	 	 	 	 	 d$dee   dee   deee      dedee   dee   dee   dee   dedededededefd„Zdee   dee   deee      dee   dee   dededededededefd „Zdee   dee   deee      dee   dee   dededededededefd!„Zdee   dee   deee      dee   dee   dededededededed"dfd#„Zy)%z9Implementation for Stochastic Gradient Descent optimizer.é    )ÚcastÚOptionalÚUnionN)ÚTensoré   )Ú_default_to_fused_or_foreachÚ_device_dtype_check_for_fusedÚ_differentiable_docÚ_foreach_docÚ
_fused_docÚ_maximize_docÚ_params_docÚ_use_grad_for_differentiableÚ
DeviceDictÚ	OptimizerÚParamsTÚSGDÚsgdc                   ó¢   ‡ — e Zd Z	 	 	 	 	 ddddddœdedeeef   dededeeef   d	ed
edee   dedee   fˆ fd„Z	ˆ fd„Z
d„ Zedd„«       Zˆ xZS )r   FN)ÚmaximizeÚforeachÚdifferentiableÚfusedÚparamsÚlrÚmomentumÚ	dampeningÚweight_decayÚnesterovr   r   r   r   c                ó   •— t        |t        «      r|j                  «       dk7  rt        d«      ‚|dk  rt        d|› �«      ‚|dk  rt        d|› �«      ‚|dk  rt        d|› �«      ‚t	        ||||||||	|
¬«	      }|r|dk  s|dk7  rt        d	«      ‚t
        ‰| �  ||«       |
r)d
| _        d
| _        |	rt        d«      ‚|rt        d«      ‚y y )Nr   zTensor lr must be 1-elementg        zInvalid learning rate: zInvalid momentum value: zInvalid weight_decay value: )	r   r   r   r   r   r   r   r   r   r   z8Nesterov momentum requires a momentum and zero dampeningTz)`fused` does not support `differentiable`z0`fused` and `foreach` cannot be `True` together.)
Ú
isinstancer   ÚnumelÚ
ValueErrorÚdictÚsuperÚ__init__Ú_step_supports_amp_scalingÚ"_need_device_dtype_check_for_fusedÚRuntimeError)Úselfr   r   r   r   r   r   r   r   r   r   ÚdefaultsÚ	__class__s               €úM/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/torch/optim/sgd.pyr&   zSGD.__init__   s  ø€ ô �bœ&Ô! b§h¡h£j°A¢oÜÐ:Ó;Ð;Ø�Š8ÜÐ6°r°dÐ;Ó<Ð<Ø�cŠ>ÜÐ7¸°zÐBÓCÐCØ˜#ÒÜÐ;¸L¸>ÐJÓKÐKäØØØØ%ØØØØ)Øô

ˆñ ˜ Qš¨)°qª.ÜÐWÓXÐXÜ‰Ñ˜ Ô*áØ.2ˆDÔ+Ø6:ˆDÔ3ÙÜ"Ð#NÓOÐOÙÜ"Ð#UÓVÐVð ð ó    c                 óú   •— t         ‰| �  |«       | j                  D ]\  }|j                  dd«       |j                  dd«       |j                  dd «       |j                  dd«       |j                  dd«       Œ^ y )Nr   Fr   r   r   r   )r%   Ú__setstate__Úparam_groupsÚ
setdefault)r*   ÚstateÚgroupr,   s      €r-   r0   zSGD.__setstate__I   sv   ø€ Ü‰Ñ˜UÔ#Ø×&Ñ&ò 	-ˆEØ×Ñ˜Z¨Ô/Ø×Ñ˜Z¨Ô/Ø×Ñ˜Y¨Ô-Ø×ÑÐ-¨uÔ5Ø×Ñ˜W eÕ,ñ	-r.   c                 óx  — d}|d   D ]¯  }|j                   €Œ|d   rt        | dd«      rt        |«       d| _        |j	                  |«       |j	                  |j                   «       |j                   j
                  rd}|d   dk7  sŒ�| j                  |   }|j	                  |j                  d«      «       Œ± |S )	NFr   r   r(   Tr   r   Úmomentum_buffer)ÚgradÚgetattrr	   r(   ÚappendÚ	is_sparser3   Úget)r*   r4   r   ÚgradsÚmomentum_buffer_listÚhas_sparse_gradÚpr3   s           r-   Ú_init_groupzSGD._init_groupR   s¶   € Øˆà�x‘ò 	NˆAØ�v‰vÑ!Ø˜’>¤gØÐ>Àô'ô 2°!Ô4Ø>C�DÔ;Ø—‘˜aÔ Ø—‘˜QŸV™VÔ$Ø—6‘6×#Ò#Ø&*�Oà˜Ñ$¨Ó)Ø ŸJ™J q™M�EØ(×/Ñ/°·	±	Ð:KÓ0LÕMð	Nð  Ðr.   c                 ó´  — d}|�$t        j                  «       5   |«       }ddd«       | j                  D ]”  }g }g }g }| j                  ||||«      }t	        ||||d   |d   |d   |d   |d   |d   ||d   |d	   t        | d
d«      t        | dd«      ¬«       |d   dk7  sŒmt        ||«      D ]  \  }}	| j                  |   }
|	|
d<   Œ Œ– |S # 1 sw Y   Œ®xY w)z°Perform a single optimization step.

        Args:
            closure (Callable, optional): A closure that reevaluates the model
                and returns the loss.
        Nr   r   r   r   r   r   r   r   Ú
grad_scaleÚ	found_inf)r   r   r   r   r   r   r>   r   r   rB   rC   r   r6   )ÚtorchÚenable_gradr1   r@   r   r8   Úzipr3   )r*   ÚclosureÚlossr4   r   r<   r=   r>   r?   r6   r3   s              r-   ÚstepzSGD.stepg   s0  € ð ˆØÐÜ×"Ñ"Ó$ñ !Ù“y�÷!ð ×&Ñ&ò 	?ˆEØ#%ˆFØ"$ˆEØ;=Ð à"×.Ñ.Ø�v˜uÐ&:óˆOô ØØØ$Ø" >Ñ2Ø˜zÑ*Ø˜‘;Ø Ñ,Ø˜zÑ*Ø˜zÑ*Ø /Ø˜iÑ(Ø˜G‘nÜ" 4¨°tÓ<Ü! $¨°TÓ:õð" �ZÑ  AÓ%ä*-¨fÐ6JÓ*Kò ?Ñ&�A�Ø ŸJ™J q™M�EØ/>�EÐ+Ò,ñ?ð9	?ð@ ˆ÷G!ð !ús   ™CÃC)gü©ñÒMbP?r   r   r   F©N)Ú__name__Ú
__module__Ú__qualname__r   r   Úfloatr   Úboolr   r&   r0   r@   r   rI   Ú__classcell__)r,   s   @r-   r   r      sÓ   ø„ ð $(ØØØ-.Øð,Wð Ø"&Ø$Ø $ò,Wàð,Wð �%˜�-Ñ ð,Wð ð	,Wð
 ð,Wð ˜E 6˜MÑ*ð,Wð ð,Wð ð,Wð ˜$‘ð,Wð ð,Wð ˜‰~õ,Wô\-òð* "ò,ó "ô,r.   a  Implements stochastic gradient descent (optionally with momentum).

    .. math::
       \begin{aligned}
            &\rule{110mm}{0.4pt}                                                                 \\
            &\textbf{input}      : \gamma \text{ (lr)}, \: \theta_0 \text{ (params)}, \: f(\theta)
                \text{ (objective)}, \: \lambda \text{ (weight decay)},                          \\
            &\hspace{13mm} \:\mu \text{ (momentum)}, \:\tau \text{ (dampening)},
            \:\textit{ nesterov,}\:\textit{ maximize}                                     \\[-1.ex]
            &\rule{110mm}{0.4pt}                                                                 \\
            &\textbf{for} \: t=1 \: \textbf{to} \: \ldots \: \textbf{do}                         \\
            &\hspace{5mm}g_t           \leftarrow   \nabla_{\theta} f_t (\theta_{t-1})           \\
            &\hspace{5mm}\textbf{if} \: \lambda \neq 0                                           \\
            &\hspace{10mm} g_t \leftarrow g_t + \lambda  \theta_{t-1}                            \\
            &\hspace{5mm}\textbf{if} \: \mu \neq 0                                               \\
            &\hspace{10mm}\textbf{if} \: t > 1                                                   \\
            &\hspace{15mm} \textbf{b}_t \leftarrow \mu \textbf{b}_{t-1} + (1-\tau) g_t           \\
            &\hspace{10mm}\textbf{else}                                                          \\
            &\hspace{15mm} \textbf{b}_t \leftarrow g_t                                           \\
            &\hspace{10mm}\textbf{if} \: \textit{nesterov}                                       \\
            &\hspace{15mm} g_t \leftarrow g_{t} + \mu \textbf{b}_t                             \\
            &\hspace{10mm}\textbf{else}                                                   \\[-1.ex]
            &\hspace{15mm} g_t  \leftarrow  \textbf{b}_t                                         \\
            &\hspace{5mm}\textbf{if} \: \textit{maximize}                                          \\
            &\hspace{10mm}\theta_t \leftarrow \theta_{t-1} + \gamma g_t                   \\[-1.ex]
            &\hspace{5mm}\textbf{else}                                                    \\[-1.ex]
            &\hspace{10mm}\theta_t \leftarrow \theta_{t-1} - \gamma g_t                   \\[-1.ex]
            &\rule{110mm}{0.4pt}                                                          \\[-1.ex]
            &\bf{return} \:  \theta_t                                                     \\[-1.ex]
            &\rule{110mm}{0.4pt}                                                          \\[-1.ex]
       \end{aligned}

    Nesterov momentum is based on the formula from
    `On the importance of initialization and momentum in deep learning`__.
    z
    Args:
        a¬  
        lr (float, Tensor, optional): learning rate (default: 1e-3)
        momentum (float, optional): momentum factor (default: 0)
        dampening (float, optional): dampening for momentum (default: 0)
        weight_decay (float, optional): weight decay (L2 penalty) (default: 0)
        nesterov (bool, optional): enables Nesterov momentum. Only applicable
            when momentum is non-zero. (default: False)
        z	
        z
    aš  

    Example:
        >>> # xdoctest: +SKIP
        >>> optimizer = torch.optim.SGD(model.parameters(), lr=0.1, momentum=0.9)
        >>> optimizer.zero_grad()
        >>> loss_fn(model(input), target).backward()
        >>> optimizer.step()

    __ http://www.cs.toronto.edu/%7Ehinton/absps/momentum.pdf

    .. note::
        The implementation of SGD with Momentum/Nesterov subtly differs from
        Sutskever et al. and implementations in some other frameworks.

        Considering the specific case of Momentum, the update can be written as

        .. math::
            \begin{aligned}
                v_{t+1} & = \mu * v_{t} + g_{t+1}, \\
                p_{t+1} & = p_{t} - \text{lr} * v_{t+1},
            \end{aligned}

        where :math:`p`, :math:`g`, :math:`v` and :math:`\mu` denote the
        parameters, gradient, velocity, and momentum respectively.

        This is in contrast to Sutskever et al. and
        other frameworks which employ an update of the form

        .. math::
            \begin{aligned}
                v_{t+1} & = \mu * v_{t} + \text{lr} * g_{t+1}, \\
                p_{t+1} & = p_{t} - v_{t+1}.
            \end{aligned}

        The Nesterov version is analogously modified.

        Moreover, the initial value of the momentum buffer is set to the
        gradient value at the first step. This is in contrast to some other
        frameworks that initialize it to all zeros.

    r   Úd_p_listr=   r>   r   r   rB   rC   r   r   r   r   r   r   c                ó   — |€6|€4t         j                  j                  «       st        | dd¬«      \  }}nd}d}|€d}|€d}|r)t         j                  j                  «       rt	        d«      ‚|r)t         j                  j                  «       rt	        d«      ‚|r%t         j                  j                  «       st
        }n-|r%t         j                  j                  «       st        }nt        } || ||||	|
||||||¬«       y)zlFunctional API that performs SGD algorithm computation.

    See :class:`~torch.optim.SGD` for details.
    NF)r   Ú	use_fusedz6torch.jit.script not supported with foreach optimizersz4torch.jit.script not supported with fused optimizers)	r   r   r   r   r   r>   r   rB   rC   )rD   ÚjitÚis_scriptingr   r)   Ú_multi_tensor_sgdÚ
_fused_sgdÚ_single_tensor_sgd)r   rQ   r=   r>   r   r   rB   rC   r   r   r   r   r   r   Úfuncs                  r-   r   r   ö   sï   € ð6 €˜5˜=ô �y‰y×%Ñ%Ô'Ü9Ø u¸ô‰NˆE‘7ð ˆGØˆEØ€ØˆØ€}Øˆá”5—9‘9×)Ñ)Ô+ÜÐSÓTÐTÙ”—‘×'Ñ'Ô)ÜÐQÓRÐRá”u—y‘y×-Ñ-Ô/Ü ‰Ù	”u—y‘y×-Ñ-Ô/Ü‰ä!ˆáØØØØ!ØØØØØ'ØØØör.   r<   c                óÂ  — |€|�J ‚t        | «      D �]J  \  }}|
s||   n||    }|dk7  rdt        |t        «      rA|j                  r!|j	                  |j                  «       |«      }n'|j                  ||¬«      }n|j                  ||¬«      }|dk7  rm||   }|€)t        j
                  |«      j                  «       }|||<   n%|j                  |«      j                  |d|z
  ¬«       |	r|j                  ||¬«      }n|}t        |t        «      r8|j                  r|j	                  ||d¬«       �Œ!|j                  || ¬«       �Œ7|j                  || ¬«       �ŒM y )Nr   ©Úalphar   éÿÿÿÿ)Úvalue)Ú	enumerater!   r   Úrequires_gradÚaddcmul_ÚcloneÚaddrD   ÚdetachÚmul_Úadd_)r   r<   r=   rB   rC   r   r   r   r   r   r   r>   ÚiÚparamr7   Úbufs                   r-   rX   rX   <  sS  € ð Ð )Ð"3Ð3Ð3ä˜fÓ%ó #(‰ˆˆ5Ù'ˆu�QŠx¨e°A©h¨Yˆà˜1Òä˜,¬Ô/Ø×-Ò-àŸ=™=¨¯©«¸ÓE‘DàŸ8™8 E°˜8Ó>‘Dà—x‘x ¨\�xÓ:�à�qŠ=Ø& qÑ)ˆCàˆ{Ü—k‘k $Ó'×.Ñ.Ó0�Ø*-Ð$ QÒ'à—‘˜Ó"×'Ñ'¨°A¸	±MÐ'ÔBáØ—x‘x ¨8�xÓ4‘à�ô �bœ&Ô!Ø×ÒØ—‘˜t R¨r�Ö2à—
‘
˜4¨ s�
Ö+à�J‰J�t B 3ˆJÖ'ñG#(r.   c          	      ó°  — |€|�J ‚t        | «      dk(  ry t        j                  | ||gd¬«      }|j                  «       D �]“  \  \  }}}}t	        t
        t           |«      }t	        t
        t           |«      }|xr t        d„ |D «       «      }|
rt        j                  |«      }|dk7  r3|
rt        j                  |||¬«       nt        j                  |||¬«      }|dk7  �r9g }d}t        t        |«      «      D ]-  }||   €d} n$|j                  t	        t        ||   «      «       Œ/ |r2t        j                  ||«       t        j                  ||d|z
  ¬«       n g }t        t        |«      «      D ]‡  }||   €4t        j                  ||   «      j!                  «       x}x||<   |||   <   n;t	        t        ||   «      }|j#                  |«      j%                  ||   d|z
  ¬«       |j                  |«       Œ‰ |	rt        j                  |||¬«       n|}|s‚t'        |t        j                  «      rMt        j(                  j+                  «       r/t        j,                  || «      }t        j                  ||«       �ŒFt        j                  ||| ¬«       �Œat        t        |«      «      D ]  }||   j%                  ||   | ¬«       Œ �Œ– y )Nr   T©Úwith_indicesc              3   ó4   K  — | ]  }|j                   –— Œ y ­wrJ   )r:   )Ú.0r7   s     r-   ú	<genexpr>z$_multi_tensor_sgd.<locals>.<genexpr>“  s   è ø€ ò 9
Ø#ˆD�N�Nñ9
ùs   ‚r[   Fr   )Úlenr   Ú"_group_tensors_by_device_and_dtypeÚvaluesr   Úlistr   ÚanyrD   Ú_foreach_negÚ_foreach_add_Ú_foreach_addÚranger9   Ú_foreach_mul_rb   rd   re   rf   r!   ÚcompilerÚis_compilingÚ_foreach_mul)r   r<   r=   rB   rC   r   r   r   r   r   r   r>   Úgrouped_tensorsÚdevice_params_Údevice_grads_Údevice_momentum_buffer_listÚindicesÚdevice_paramsÚdevice_gradsÚdevice_has_sparse_gradÚbufsÚall_states_with_momentum_bufferrg   ri   Ú
grads_x_lrs                            r-   rV   rV   s  sâ  € ð Ð )Ð"3Ð3Ð3ä
ˆ6ƒ{�aÒØä×BÑBØ	�Ð,Ð-¸Dô€Oð "×(Ñ(Ó*ó	BBñ 	ñ 	ØØØ#ØÜ&*¬4´©<¸Ó&HˆÜ%)¬$¬v©,¸Ó%Fˆà!0ò "
´Sñ 9
Ø'3ô9
ó 6
Ðñ Ü ×-Ñ-¨lÓ;ˆLà˜1ÒáÜ×#Ñ# L°-À|ÖTä$×1Ñ1Ø  -°|ô �ð �q‹=Ø!#ˆDà.2Ð+Üœ3Ð:Ó;Ó<ò N�Ø.¨qÑ1Ð9Ø6;Ð3Ùà—K‘K¤¤VÐ-HÈÑ-KÓ LÕMðNñ /Ü×#Ñ# D¨(Ô3Ü×#Ñ# D¨,¸aÀ)¹mÖLà�ÜœsÐ#>Ó?Ó@ò 	%�AØ2°1Ñ5Ð=ô "ŸK™K¨°Q©Ó8×?Ñ?ÓAðB˜ð BÐ9¸!Ñ<Ð?SØ# A™Jò@ô #¤6Ð+FÀqÑ+IÓJ˜ØŸ™ Ó*×/Ñ/°¸Q±ÀqÈ9Á}Ð/ÔUà—K‘K Õ$ð	%ñ Ü×#Ñ# L°$¸hÖGà#�á%ä˜"œeŸl™lÔ+´·±×0KÑ0KÔ0MÜ"×/Ñ/°¸r¸cÓB�
Ü×#Ñ# M°:Ö>ä×#Ñ# M°<ÈÀs×Kô œ3˜}Ó-Ó.ò B�Ø˜aÑ ×%Ñ% l°1¡o¸b¸SÐ%ÕAòBñCBBr.   Úreturnc                óà  — | sy |rt        d«      ‚|�|j                  |ini }|�|j                  |ini }|dk(  }t        d„ |D «       «      xr | }|r+t        |«      D ]  \  }}t	        j
                  |«      ||<   Œ t        j                  | ||gd¬«      }|j                  «       D ]Ä  \  \  }}\  \  }}}}t        t        t           |«      }t        t        t           |«      }d\  }}|�!|j                  ||j                  |«      «      }|�#|�!|j                  ||j                  |«      «      }t	        j                  |||rg nt        t        t           |«      |||||	|
|||¬«       ŒÆ y )Nz.`_fused_sgd` does not support sparse gradientsr   c              3   ó$   K  — | ]  }|d u –— Œ
 y ­wrJ   © )rn   Úts     r-   ro   z_fused_sgd.<locals>.<genexpr>ì  s   è ø€ Ò4˜!ˆA�ŒIÑ4ùs   ‚Frk   )NN)	r   r   r   r   r   r   Úis_first_steprB   rC   )r)   ÚdeviceÚallr_   rD   Ú
empty_liker   rq   Úitemsr   rs   r   r2   ÚtoÚ_fused_sgd_)r   r<   r=   rB   rC   r   r   r   r   r   r   r>   Úgrad_scale_dictÚfound_inf_dictÚno_momentum_bufferr�   rg   Úgr}   rŽ   Ú_r~   r   r€   r‚   rƒ   Údevice_grad_scaleÚdevice_found_infs                               r-   rW   rW   Ð  s½  € ñ ØÙÜÐKÓLÐLà+5Ð+Aˆ×	Ñ	˜JÑ'Àrð ð *3Ð)>ˆ×	Ñ	˜9Ñ%ÀBð ð " Q™ÐäÑ4Ð3Ô4Ó4ÒOÐ=OÐ9Oð ñ Ü˜eÓ$ò 	:‰DˆAˆqÜ&+×&6Ñ&6°qÓ&9Ð  Ò#ð	:ä×BÑBØ	�Ð,Ð-¸Eô€Oð 
×	Ñ	Ó	 ò
ñ 	‰ˆ�ñ ÙDˆ˜Ð(CØ	ä&*¬4´©<¸Ó&HˆÜ%)¬$¬v©,¸Ó%FˆØ.8Ñ+ÐÐ+ØÐ!Ø /× :Ñ :Ø˜
Ÿ™ fÓ-ó!Ðð Ð%¨)Ð*?Ø-×8Ñ8¸ÀÇÁÈfÓAUÓVÐÜ×ÑØØá!ñ ä”dœ6‘lÐ$?Ó@Ø%ØØØØØØ'Ø(Ø&ö	
ñ
r.   )FNNNN)Ú__doc__Útypingr   r   r   rD   r   Ú	optimizerr   r	   r
   r   r   r   r   r   r   r   r   Ú__all__r   rs   rO   rN   r   rX   rV   rW   r‹   r.   r-   ú<module>rŸ      sg  ðá @ß (Ñ (ã Ý ÷÷ ÷ ñ ð �%ˆ.€ôzˆ)ô zð|"ðF	à	ˆð 	ð 
ˆð 	Ø	ˆð 	Ø	Ðð 	Ø	ˆð ðñG0ðb)ñcZð „ðJ "Ø"Ø Ø#'Ø"&ñCØ�‰LðCà�6‰lðCð ˜x¨Ñ/Ñ0ðCð ðCð �d‰^ðCð �D‰>ðCð ˜Ñ ðCð ˜ÑðCð ðCð ðCð 	ðCð ðCð  ð!Cð" ó#CðL4(Ø�‰Lð4(à�‰<ð4(ð ˜x¨Ñ/Ñ0ð4(ð ˜Ñ ð	4(ð
 ˜Ñð4(ð ð4(ð ð4(ð 	ð4(ð ð4(ð ð4(ð ð4(ð ó4(ðnZBØ�‰LðZBà�‰<ðZBð ˜x¨Ñ/Ñ0ðZBð ˜Ñ ð	ZBð
 ˜ÑðZBð ðZBð ðZBð 	ðZBð ðZBð ðZBð ðZBð óZBðz@
Ø�‰Lð@
à�‰<ð@
ð ˜x¨Ñ/Ñ0ð@
ð ˜Ñ ð	@
ð
 ˜Ñð@
ð ð@
ð ð@
ð 	ð@
ð ð@
ð ð@
ð ð@
ð ð@
ð 
ô@
r.   