Ë
    [^(h
˜  ã            ,       ó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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e› d�z   e_        dee   dee   dee   dee   dee   dee   dee   dee   dededeeef   deeef   deeef   dededededed ef&d!„Z dee   dee   dee   dee   dee   dee   dee   dee   dededeeef   deeef   deeef   dededededed ef&d"„Z!dee   dee   dee   dee   dee   dee   dee   dee   dededededeeef   dededededed ed#df(d$„Z" ee ¬%«      	 	 	 	 	 	 	 	 d)dee   dee   dee   dee   dee   dee   d&ee   deded'ee   dee   dee   ded ededededeeef   dededef*d(„«       Z#y)*é    )ÚcastÚOptionalÚUnionN)ÚTensoré   )Ú_capturable_docÚ_default_to_fused_or_foreachÚ_device_dtype_check_for_fusedÚ_differentiable_docÚ_disable_dynamo_if_unsupportedÚ_foreach_docÚ
_fused_docÚ!_get_capturable_supported_devicesÚ_get_scalar_dtypeÚ
_get_valueÚ_maximize_docÚ_params_docÚ_stack_if_compilingÚ_use_grad_for_differentiableÚ_view_as_realÚ
DeviceDictÚDeviceDtypeDictÚ	OptimizerÚParamsTÚAdamÚadamc                   óÂ   ‡ — e Zd Z	 	 	 	 	 ddddddddœdedeeef   deeeef   eeef   f   deded	ed
e	e   dededede	e   defˆ fd„Z
ˆ fd„Zd„ Zedd„«       Zˆ xZS )r   FN)ÚforeachÚmaximizeÚ
capturableÚdifferentiableÚfusedÚdecoupled_weight_decayÚparamsÚlrÚbetasÚepsÚweight_decayÚamsgradr   r   r    r!   r"   r#   c                óÄ  •— t        |t        «      r-|r|	st        d«      ‚|j                  «       dk7  rt        d«      ‚d|k  st        d|› �«      ‚d|k  st        d|› �«      ‚d|d   cxk  rdk  sn t        d	|d   › �«      ‚d|d   cxk  rdk  sn t        d
|d   › �«      ‚d|k  st        d|› �«      ‚t        |d   t        «      rt        |d   t        «      s1t        |d   t        «      rt        |d   t        «      st        d«      ‚t        |d   t        «      r0|	s|rt        d«      ‚|d   j                  «       dk7  rt        d«      ‚t        |d   t        «      r0|	s|rt        d«      ‚|d   j                  «       dk7  rt        d«      ‚t        ||||||||	|
||¬«      }t        ‰| �  ||«       |r"|
rt        d«      ‚d| _	        |rt        d«      ‚y y )NúElr as a Tensor is not supported for capturable=False and foreach=Truer   zTensor lr must be 1-elementç        zInvalid learning rate: zInvalid epsilon value: r   ç      ð?z#Invalid beta parameter at index 0: z#Invalid beta parameter at index 1: zInvalid weight_decay value: z0betas must be either both floats or both TensorszKbetas[0] as a Tensor is not supported for capturable=False and foreach=Truez!Tensor betas[0] must be 1-elementzKbetas[1] as a Tensor is not supported for capturable=False and foreach=Truez!Tensor betas[1] must be 1-element)r%   r&   r'   r(   r)   r   r   r    r!   r"   r#   z)`fused` does not support `differentiable`Tz0`fused` and `foreach` cannot be `True` together.)
Ú
isinstancer   Ú
ValueErrorÚnumelÚfloatÚdictÚsuperÚ__init__ÚRuntimeErrorÚ_step_supports_amp_scaling)Úselfr$   r%   r&   r'   r(   r)   r   r   r    r!   r"   r#   ÚdefaultsÚ	__class__s                 €úN/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/torch/optim/adam.pyr4   zAdam.__init__"   s  ø€ ô  �bœ&Ô!Ù™zÜ Ø[óð ð �x‰x‹z˜QŠÜ Ð!>Ó?Ð?Ø�bŠyÜÐ6°r°dÐ;Ó<Ð<Ø�cŠzÜÐ6°s°eÐ<Ó=Ð=Ø�e˜A‘hÔ$ Ô$ÜÐBÀ5ÈÁ8À*ÐMÓNÐNØ�e˜A‘hÔ$ Ô$ÜÐBÀ5ÈÁ8À*ÐMÓNÐNØ�lÒ"ÜÐ;¸L¸>ÐJÓKÐKä˜˜a™¤%Ô(¬Z¸¸a¹Ä%Ô-HÜ˜5 ™8¤VÔ,´¸EÀ!¹HÄfÔ1MäÐOÓPÐPÜ�e˜A‘h¤Ô'Ù¡'Ü Øaóð ð �Q‰x�~‰~Ó 1Ò$Ü Ð!DÓEÐEÜ�e˜A‘h¤Ô'Ù¡'Ü Øaóð ð �Q‰x�~‰~Ó 1Ò$Ü Ð!DÓEÐEäØØØØ%ØØØØ!Ø)ØØ#9ô
ˆô 	‰Ñ˜ Ô*áÙÜ"Ð#NÓOÐOØ.2ˆDÔ+ñ
 Ü"Ð#UÓVÐVð ð ó    c                 ó®  •— t         ‰| �  |«       | j                  D �]5  }|j                  dd«       |j                  dd«       |j                  dd «       |j                  dd«       |j                  dd«       |j                  dd«       |j                  dd «      }|d	   D ]¬  }| j                  j                  |g «      }t        |«      d
k7  sŒ.t        j                  |d   «      rŒGt        |d   «      }|d   s|d   r,t        j                  |t        |¬«      |j                  ¬«      nt        j                  |t        «       ¬«      |d<   Œ® �Œ8 y )Nr)   Fr   r   r    r!   r#   r"   r$   r   Ústep©Úis_fused©ÚdtypeÚdevice©rA   )r3   Ú__setstate__Úparam_groupsÚ
setdefaultÚstateÚgetÚlenÚtorchÚ	is_tensorr1   Útensorr   rB   )r7   rG   Úgroupr"   ÚpÚp_stateÚstep_valr9   s          €r:   rD   zAdam.__setstate__q   s6  ø€ Ü‰Ñ˜UÔ#Ø×&Ñ&ó 	ˆEØ×Ñ˜Y¨Ô.Ø×Ñ˜Z¨Ô/Ø×Ñ˜Y¨Ô-Ø×Ñ˜\¨5Ô1Ø×ÑÐ-¨uÔ5Ø×ÑÐ5°uÔ=Ø×$Ñ$ W¨dÓ3ˆEØ˜8‘_ò �ØŸ*™*Ÿ.™.¨¨BÓ/�Ü�w“< 1Ó$¬U¯_©_¸WÀV¹_Õ-MÜ$ W¨V¡_Ó5�Hð ! Ò.°%¸².ô Ÿ™Ø$Ü"3¸UÔ"CØ#$§8¡8õô #Ÿ\™\¨(Ô:KÓ:MÔNð ˜F’Oò	ñ	r;   c                 óR  — d}|d   D �]  }	|	j                   €Œ|t        j                  |	«      z  }|j                  |	«       |	j                   j                  rt        d«      ‚|j                  |	j                   «       | j                  |	   }
t        |
«      dk(  rè|d   rt        |	«       |d   s|d   r/t        j                  dt        |d   ¬«      |	j                  ¬	«      nt        j                  d
t        «       ¬«      |
d<   t        j                  |	t        j                  ¬«      |
d<   t        j                  |	t        j                  ¬«      |
d<   |d   r(t        j                  |	t        j                  ¬«      |
d<   |j                  |
d   «       |j                  |
d   «       |d   r|j                  |
d   «       |d   r|
d   j                  rt        d«      ‚|d   r(t        j                   |d   «      r|d   st        d«      ‚|j                  |
d   «       �Œ |S )NFr$   zJAdam does not support sparse gradients, please consider SparseAdam insteadr   r"   r    © r>   r@   r,   rC   r=   )Úmemory_formatÚexp_avgÚ
exp_avg_sqr)   Úmax_exp_avg_sqr!   zB`requires_grad` is not supported for `step` in differentiable moder   r%   r+   )ÚgradrJ   Ú
is_complexÚappendÚ	is_sparser5   rG   rI   r
   Úzerosr   rB   rL   Ú
zeros_likeÚpreserve_formatÚrequires_gradrK   )r7   rM   Úparams_with_gradÚgradsÚexp_avgsÚexp_avg_sqsÚmax_exp_avg_sqsÚstate_stepsÚhas_complexrN   rG   s              r:   Ú_init_groupzAdam._init_group‰   s  € ð ˆØ�x‘ó =	2ˆAØ�v‰vÑ!Øœu×/Ñ/°Ó2Ñ2�Ø ×'Ñ'¨Ô*Ø—6‘6×#Ò#Ü&Ødóð ð —‘˜QŸV™VÔ$àŸ
™
 1™�ä�u“: ’?Ø˜W’~Ü5°aÔ8ð ! Ò.°%¸².ô Ÿ™ØÜ"3¸UÀ7¹^Ô"LØ#$§8¡8õô #Ÿ\™\¨#Ô5FÓ5HÔIð ˜&‘Mô (-×'7Ñ'7Ø¬×)>Ñ)>ô(�E˜)Ñ$ô +0×*:Ñ*:Ø¬×)>Ñ)>ô+�E˜,Ñ'ð ˜YÒ'ä27×2BÑ2BØ¬U×-BÑ-Bô3˜Ð.Ñ/ð —‘  iÑ 0Ô1Ø×"Ñ" 5¨Ñ#6Ô7à˜Ò#Ø#×*Ñ*¨5Ð1AÑ+BÔCØÐ)Ò*¨u°V©}×/JÒ/JÜ&Ø\óð ð ˜)Ò$ÜŸ™¨¨d©Ô4Ø! ,Ò/ä&Ø_óð ð ×"Ñ" 5¨¡=Ö1ð{=	2ð| Ðr;   c                 ó¬  — | j                  «        d}|�$t        j                  «       5   |«       }ddd«       | j                  D ]€  }g }g }g }g }g }g }	|d   \  }
}| j	                  |||||||	«      }t        ||||||	f|d   ||
||d   |d   |d   |d   |d   |d	   |d
   |d   t        | dd«      t        | dd«      |d   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    r!   r"   Ú
grad_scaleÚ	found_infr#   )r)   re   Úbeta1Úbeta2r%   r(   r'   r   r   r    r!   r"   rh   ri   r#   )Ú _cuda_graph_capture_health_checkrJ   Úenable_gradrE   rf   r   Úgetattr)r7   ÚclosureÚlossrM   r_   r`   ra   rb   rc   rd   rj   rk   re   s                r:   r=   z	Adam.stepÔ   sG  € ð 	×-Ñ-Ô/àˆØÐÜ×"Ñ"Ó$ñ !Ù“y�÷!ð ×&Ñ&ò )	ˆEØ-/ÐØ"$ˆEØ%'ˆHØ(*ˆKØ,.ˆOØ(*ˆKØ  ™>‰LˆE�5à×*Ñ*ØØ ØØØØØóˆKô Ø ØØØØØðð ˜iÑ(Ø'ØØØ˜‘;Ø" >Ñ2Ø˜%‘LØ˜zÑ*Ø˜iÑ(Ø  Ñ.Ø$Ð%5Ñ6Ø˜G‘nÜ" 4¨°tÓ<Ü! $¨°TÓ:Ø',Ð-EÑ'Fô+ð')	ðV ˆ÷]!ð !ús   ©C
Ã
C)gü©ñÒMbP?)gÍÌÌÌÌÌì?g+‡ÙÎ÷ï?g:Œ0âŽyE>r   F©N)Ú__name__Ú
__module__Ú__qualname__r   r   r1   r   ÚtupleÚboolr   r4   rD   rf   r   r=   Ú__classcell__)r9   s   @r:   r   r   !   s  ø„ ð $(ØCOØØØðMWð #'ØØ Ø$Ø $Ø',òMWàðMWð �%˜�-Ñ ðMWð �U˜5 &˜=Ñ)¨5°¸°Ñ+?Ð?Ñ@ð	MWð
 ðMWð ðMWð ðMWð ˜$‘ðMWð ðMWð ðMWð ðMWð ˜‰~ðMWð !%õMWô^ò0IðV "ò9ó "ô9r;   af  Implements Adam algorithm.

    .. math::
       \begin{aligned}
            &\rule{110mm}{0.4pt}                                                                 \\
            &\textbf{input}      : \gamma \text{ (lr)}, \beta_1, \beta_2
                \text{ (betas)},\theta_0 \text{ (params)},f(\theta) \text{ (objective)}          \\
            &\hspace{13mm}      \lambda \text{ (weight decay)},  \: \textit{amsgrad},
                \:\textit{maximize},  \: \epsilon \text{ (epsilon)}                              \\
            &\textbf{initialize} :  m_0 \leftarrow 0 \text{ ( first moment)},
                v_0\leftarrow 0 \text{ (second moment)},\: v_0^{max}\leftarrow 0          \\[-1.ex]
            &\rule{110mm}{0.4pt}                                                                 \\
            &\textbf{for} \: t=1 \: \textbf{to} \: \ldots \: \textbf{do}                         \\

            &\hspace{5mm}\textbf{if} \: \textit{maximize}:                                       \\
            &\hspace{10mm}g_t           \leftarrow   -\nabla_{\theta} f_t (\theta_{t-1})         \\
            &\hspace{5mm}\textbf{else}                                                           \\
            &\hspace{10mm}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}m_t           \leftarrow   \beta_1 m_{t-1} + (1 - \beta_1) g_t          \\
            &\hspace{5mm}v_t           \leftarrow   \beta_2 v_{t-1} + (1-\beta_2) g^2_t          \\
            &\hspace{5mm}\widehat{m_t} \leftarrow   m_t/\big(1-\beta_1^t \big)                   \\
            &\hspace{5mm}\textbf{if} \: amsgrad                                                  \\
            &\hspace{10mm} v_t^{max} \leftarrow \mathrm{max}(v_{t-1}^{max},v_t)                  \\
            &\hspace{10mm}\widehat{v_t} \leftarrow v_t^{max}/\big(1-\beta_2^t \big)              \\
            &\hspace{5mm}\textbf{else}                                                           \\
            &\hspace{10mm}\widehat{v_t} \leftarrow   v_t/\big(1-\beta_2^t \big)                  \\
            &\hspace{5mm}\theta_t \leftarrow \theta_{t-1} - \gamma \widehat{m_t}/
                \big(\sqrt{\widehat{v_t}} + \epsilon \big)                                       \\
            &\rule{110mm}{0.4pt}                                                          \\[-1.ex]
            &\bf{return} \:  \theta_t                                                     \\[-1.ex]
            &\rule{110mm}{0.4pt}                                                          \\[-1.ex]
       \end{aligned}

    For further details regarding the algorithm we refer to `Adam: A Method for Stochastic Optimization`_.
    z
    Args:
        að  
        lr (float, Tensor, optional): learning rate (default: 1e-3). A tensor LR
            is not yet supported for all our implementations. Please use a float
            LR if you are not also specifying fused=True or capturable=True.
        betas (Tuple[float, float], optional): coefficients used for computing
            running averages of gradient and its square (default: (0.9, 0.999))
        eps (float, optional): term added to the denominator to improve
            numerical stability (default: 1e-8)
        weight_decay (float, optional): weight decay (L2 penalty) (default: 0)
        decoupled_weight_decay (bool, optional): if True, this optimizer is
            equivalent to AdamW and the algorithm will not accumulate weight
            decay in the momentum nor variance. (default: False)
        amsgrad (bool, optional): whether to use the AMSGrad variant of this
            algorithm from the paper `On the Convergence of Adam and Beyond`_
            (default: False)
        z	
        a=  
    .. Note::
        A prototype implementation of Adam and AdamW for MPS supports `torch.float32` and `torch.float16`.
    .. _Adam\: A Method for Stochastic Optimization:
        https://arxiv.org/abs/1412.6980
    .. _On the Convergence of Adam and Beyond:
        https://openreview.net/forum?id=ryQu7f-RZ

    r$   r`   ra   rb   rc   rd   rh   ri   r)   re   rj   rk   r%   r(   r'   r   r    r!   r#   c                ó"  — |€|�J ‚t         j                  j                  «       r6t        |t        «      sJ ‚t        |
t        «      sJ ‚t        |t        «      sJ ‚t        |
t
        «      r|
j                  |
j                  f|
i}nd }t        | «      D �]ù  \  }}|s||   n||    }||   }||   }||   }t         j                  j                  «       s\|rZt        «       }|j                  j                  |j                  j                  k(  r|j                  j                  |v sJ d|› d�«       ‚|dz  }|dk7  r€|r|j                  d||z  z
  «       nf|rQt        |t
        «      rA|j                  r!|j                  |j!                  «       |«      }n'|j#                  ||¬«      }n|j#                  ||¬«      }t        j$                  |«      rqt        j&                  |«      }t        j&                  |«      }t        j&                  |«      }|rt        j&                  ||   «      ||<   t        j&                  |«      }|j                  }|�1|j                  }||f}||vr|
j)                  ||d¬«      ||<   ||   }n|
}|j+                  |d|z
  «       |rmt        |t
        «      r]|j                  r*|j+                  t        j,                  |«      d|z
  ¬«       nM|j                  |«      j                  ||d|z
  ¬	«       n&|j                  |«      j                  ||d|z
  ¬	«       |s|�r‚|}|r<t        |
t
        «      r,|
j                  rd|
|j!                  «       z  z
  } nd|
|z  z
  } nd|
|z  z
  } |r<t        |t
        «      r,|j                  rd||j!                  «       z  z
  }!nd||z  z
  }!nd||z  z
  }!|| z  }"|"j/                  «       }#|!j1                  «       }$|ro|r||   j!                  «       }%n||   }%||   j3                  t        j4                  |%|«      «       ||   j1                  «       |$|#z  z  j7                  ||#z  «      }&n(|j1                  «       |$|#z  z  j7                  ||#z  «      }&|r!|j9                  |j!                  «       |&«       nµ|j9                  ||&«       n¢t;        |«      }d|
|z  z
  } d||z  z
  }!|| z  }"|!d
z  }$|rDt        j4                  ||   |||   ¬«       ||   j1                  «       |$z  j7                  |«      }&n"|j1                  «       |$z  j7                  |«      }&|j9                  ||&|" ¬	«       |s�ŒÅt        j$                  | |   «      s�Œßt        j<                  ||   «      ||<   �Œü y )NúIIf capturable=True, params and state_steps must be on supported devices: ú.r   r   ©ÚalphaT)rB   rA   Únon_blocking)Úweight)Úvalueç      à?)Úout)rJ   ÚjitÚis_scriptingr.   r1   r   rB   rA   Ú	enumerateÚcompilerÚis_compilingr   ÚtypeÚmul_r^   Úaddcmul_ÚcloneÚaddrX   Úview_as_realÚtoÚlerp_ÚsquareÚnegÚsqrtÚcopy_ÚmaximumÚadd_Úaddcdiv_r   Úview_as_complex)'r$   r`   ra   rb   rc   rd   rh   ri   r)   re   rj   rk   r%   r(   r'   r   r    r!   r#   Ú
beta1_dictÚiÚparamrW   rT   rU   Ústep_tÚcapturable_supported_devicesrB   rA   ÚkeyÚdevice_beta1r=   Úbias_correction1Úbias_correction2Ú	step_sizeÚstep_size_negÚbias_correction2_sqrtrV   Údenoms'                                          r:   Ú_single_tensor_adamr¤   X  sn  € ð, Ð )Ð"3Ð3Ð3ä‡y�y×ÑÔô ˜"œeÔ$Ð$Ð$Ü˜%¤Ô'Ð'Ð'Ü˜%¤Ô'Ð'Ð'ô �%œÔ Ø27·,±,ÀÇÁÐ1LÈeÐ0T‰
àˆ
ä˜fÓ%ó RK‰ˆˆ5Ù'ˆu�QŠx¨e°A©h¨YˆØ˜1‘+ˆØ  ‘^ˆ
Ø˜Q‘ˆô �~‰~×*Ñ*Ô,±Ü+LÓ+NÐ(à—‘×!Ñ! V§]¡]×%7Ñ%7Ò7Ø—L‘L×%Ñ%Ð)EÑEð{ð [Ð[wÐZxÐxyÐzó{ðFð
 	�!‰ˆà˜1ÒÙ%à—
‘
˜1˜r LÑ0Ñ0Õ1ñ "¤j°¼vÔ&FØ#×1Ò1Ø#Ÿ}™}¨U¯[©[«]¸LÓI™à#Ÿx™x¨°\˜xÓB™àŸ8™8 E°˜8Ó>�Dä×Ñ˜EÔ"Ü×%Ñ% dÓ+ˆDÜ×(Ñ(¨Ó1ˆGÜ×+Ñ+¨JÓ7ˆJÙÜ%*×%7Ñ%7¸ÈÑ8JÓ%K� Ñ"Ü×&Ñ& uÓ-ˆEà—‘ˆàÐ!Ø—K‘KˆEð ˜5�/ˆCØ˜*Ñ$Ø"'§(¡(°&ÀÐTX (Ó"Y�
˜3‘à1;¸C±‰Là ˆLð 	�‰�d˜A Ñ,Ô-ñ œj¨´Ô7Ø×"Ò"ð × Ñ ¤§¡¨dÓ!3¸AÀ¹IÐ ÕFà—‘ Ó&×/Ñ/°°dÀ!ÀeÁ)Ð/ÕLà�O‰O˜EÓ"×+Ñ+¨D°$¸aÀ%¹iÐ+ÔHášØˆDñ ¤*¨U´FÔ";Ø×&Ò&Ø'(¨5°D·J±J³LÑ+@Ñ'@Ñ$à'(¨5°$©;¡Ñ$à#$ u¨d¡{¡?Ð ñ ¤*¨U´FÔ";Ø×&Ò&Ø'(¨5°D·J±J³LÑ+@Ñ'@Ñ$à'(¨5°$©;¡Ñ$à#$ u¨d¡{¡?Ð àÐ-Ñ-ˆIØ%ŸM™M›OˆMà$4×$9Ñ$9Ó$;Ð!áá!Ø%4°QÑ%7×%=Ñ%=Ó%?‘Nà%4°QÑ%7�Nà Ñ"×(Ñ(¬¯©°~ÀzÓ)RÔSð $ AÑ&×+Ñ+Ó-Ð1FÈÑ1VÑWß‘$�s˜]Ñ*Ó+ñ ð
 —O‘OÓ%Ð)>ÀÑ)NÑOß‘$�s˜]Ñ*Ó+ð ñ Ø—‘˜wŸ}™}›°Õ6à—‘˜w¨Õ.ä˜fÓ%ˆDà  5¨$¡;™ÐØ  5¨$¡;™ÐàÐ-Ñ-ˆIà$4°cÑ$9Ð!áä—‘˜o¨aÑ0°*À/ÐRSÑBTÕUð )¨Ñ+×0Ñ0Ó2Ð5JÑJ×PÑPÐQTÓU‘à#Ÿ™Ó*Ð-BÑB×HÑHÈÓM�à�N‰N˜7 E°)°ˆNÔ<ó ”u×'Ñ'¨¨q©	Ö2Ü!&×!6Ñ!6°ÀqÑ7IÓ!JˆO˜AÓñeRKr;   c          	      ó–  ‡-— t        | «      dk(  ry t        |t        «      r|st        d«      ‚t        |
t        «      r+|st	        d«      ‚|
j                  «       dk7  rt	        d«      ‚t        |t        «      r+|st	        d«      ‚|j                  «       dk7  rt	        d«      ‚t        j                  j                  «       s7|r5t        d¬	«      Š-t        ˆ-fd
„t        | |«      D «       «      sJ d‰-› d�«       ‚|€|�J ‚|rJ d«       ‚t        j                  | |||||g«      }t        |
t        «      r&t        |
j                  «      dk7  r|
j                  |
ind }|j!                  «       D �]Ç  \  \  }}}}}}}t#        t$        t           |«      }t#        t$        t           |«      }t#        t$        t           |«      }t#        t$        t           |«      }t#        t$        t           |«      } |d   j                  }!|�|!|vr|
j'                  |!d¬«      ||!<   |r||!   n|
}"|	r7|r't#        t$        t           |«      }#t)        |||||#«       nt)        ||||«       |rt        j*                  |«      }t        j                  j                  «       s=| d   j,                  r.t        j.                  | t        j0                  dd¬«      d¬«       nt        j.                  | d«       |dk7  rR|rt        j2                  |d||z  z
  «       n3|rt        j.                  |||¬«       nt        j4                  |||¬«      }t        j6                  ||d|"z
  «       t        j2                  ||«       t        |t        j                  «      rt        j8                  |d|z
  «      }$d}%n|}$d|z
  }%t        j:                  ||$||%«       ~~$|�rft        j<                  |
| «      }&t        j<                  || «      }'t        j>                  |&d«       t        j>                  |'d«       t        j@                  |'«       t        jB                  |&|«       t        jD                  |&«       t        jF                  |'«       |&}(|'})|rCt#        t$        t           |«      }#t        jH                  |#|«       t        jJ                  |#«      }*nt        jJ                  |«      }*t        jB                  |*|)«       t        j.                  |*|«       t        jB                  |*|(«       t        jL                  |||*«       �Œ½| D �+cg c]  }+d|
tO        |+«      z  z
  ‘Œ }&}+| D �+cg c]  }+d|tO        |+«      z  z
  ‘Œ }'}+tQ        |&D �,cg c]
  },||,z  dz  ‘Œ c},«      }(|'D �,cg c]  },|,dz  ‘Œ	 })},|rCt#        t$        t           |«      }#t        jH                  |#|«       t        jJ                  |#«      }*nt        jJ                  |«      }*t        jB                  |*|)«       t        j.                  |*|«       t        jL                  |||*|(«       �ŒÊ y c c}+w c c}+w c c},w c c},w )Nr   r+   zHbeta1 as a Tensor is not supported for capturable=False and foreach=Truer   zTensor beta1 must be 1-elementzHbeta2 as a Tensor is not supported for capturable=False and foreach=TruezTensor beta2 must be 1-elementF)Úsupports_xlac              3   ó²   •K  — | ]N  \  }}|j                   j                  |j                   j                  k(  xr |j                   j                  ‰v –— ŒP y ­wrq   )rB   r‡   )Ú.0rN   r=   r›   s      €r:   ú	<genexpr>z%_multi_tensor_adam.<locals>.<genexpr>I  sQ   øè ø€ ò 
ñ ��4ð �H‰H�M‰M˜TŸ[™[×-Ñ-Ñ-ò >Ø—‘—‘Ð!=Ð=ó>ñ
ùs   ƒAAry   rz   z#_foreach ops don't support autogradÚcpuT©rB   r}   r-   )rB   r{   éÿÿÿÿr€   ))rI   r.   r   r5   r/   r0   rJ   r…   r†   r   ÚallÚzipr   Ú"_group_tensors_by_device_and_dtypeÚstrrB   Úvaluesr   Úlistr�   r   Ú_foreach_negÚis_cpuÚ_foreach_add_rL   Ú_foreach_mul_Ú_foreach_addÚ_foreach_lerp_Ú_foreach_mulÚ_foreach_addcmul_Ú_foreach_powÚ_foreach_sub_Ú_foreach_neg_Ú_foreach_div_Ú_foreach_reciprocal_Ú_foreach_sqrt_Ú_foreach_maximum_Ú_foreach_sqrtÚ_foreach_addcdiv_r   r   ).r$   r`   ra   rb   rc   rd   rh   ri   r)   re   rj   rk   r%   r(   r'   r   r    r!   r#   Úgrouped_tensorsr—   Údevice_params_Údevice_grads_Údevice_exp_avgs_Údevice_exp_avg_sqs_Údevice_max_exp_avg_sqs_Údevice_state_steps_Ú_Údevice_paramsÚdevice_gradsÚdevice_exp_avgsÚdevice_exp_avg_sqsÚdevice_state_stepsrB   r�   Údevice_max_exp_avg_sqsÚscaled_device_gradsr   rž   rŸ   r    r¢   Úexp_avg_sq_sqrtr=   Úbcr›   s.                                                @r:   Ú_multi_tensor_adamrÕ     s(  ø€ ô, ˆ6ƒ{�aÒØä�"”fÔ¡jÜØSó
ð 	
ô �%œÔ ÙÜØZóð ð �;‰;‹=˜AÒÜÐ=Ó>Ð>ä�%œÔ ÙÜØZóð ð �;‰;‹=˜AÒÜÐ=Ó>Ð>ô �>‰>×&Ñ&Ô(©ZÜ'HØô(
Ð$ô ó 
ô ˜v {Ó3ô
ô 
ð 	wð WÐWsÐVtÐtuÐvó		wð 
ð Ð )Ð"3Ð3Ð3áÐDÐDÓDÐä×BÑBØ	�˜ +¨ÀÐLó€Oô �eœVÔ$¬¨U¯\©\Ó):¸eÒ)Cð 
�‰�uÑàð ð ×"Ñ"Ó$ó\ñ 		ñ 	ØØØØØØØÜœT¤&™\¨>Ó:ˆÜœD¤™L¨-Ó8ˆÜœt¤F™|Ð-=Ó>ˆÜ!¤$¤v¡,Ð0CÓDÐÜ!¤$¤v¡,Ð0CÓDÐà˜qÑ!×(Ñ(ˆØÐ! f°JÑ&>Ø!&§¡°Àd Ó!KˆJ�vÑá-7�z &Ò)¸Uˆñ ÙÜ)-¬d´6©lÐ<SÓ)TÐ&ÜØ!Ø Ø#Ø&Ø*õô Ø! <°ÐBTôñ Ü ×-Ñ-¨lÓ;ˆLô �~‰~×*Ñ*Ô,Ð1CÀAÑ1F×1MÒ1MÜ×ÑØ"¤E§L¡L°¸UÔ$CÈ3öô ×ÑÐ 2°AÔ6à˜1ÒÙ%ä×#Ñ# M°1°r¸LÑ7HÑ3HÕIñ Ü×'Ñ'¨°mÈ<ÖXä#(×#5Ñ#5Ø$ m¸<ô$�Lô 	×Ñ˜_¨l¸AÀÑ<LÔMä×ÑÐ.°Ô6ô �eœUŸ\™\Ô*Ü"'×"4Ñ"4°\À1ÀuÁ9Ó"MÐØ‰Eà".ÐØ˜‘IˆEä×ÑØÐ 3°\À5ô	
ð
 Øò Ü$×1Ñ1°%Ð9KÓLÐÜ$×1Ñ1°%Ð9KÓLÐä×ÑÐ 0°!Ô4Ü×ÑÐ 0°!Ô4ä×ÑÐ 0Ô1ô ×ÑÐ 0°"Ô5Ü×&Ñ&Ð'7Ô8ä× Ñ Ð!1Ô2ð
 )ˆIØ$4Ð!áÜ)-¬d´6©lÐ<SÓ)TÐ&ä×'Ñ'Ð(>Ð@RÔSô #(×"5Ñ"5Ð6LÓ"M‘ä"'×"5Ñ"5Ð6HÓ"I�ä×Ñ Ð1FÔGÜ×Ñ °Ô5Ü×Ñ °Ô;ô ×#Ñ# M°?ÀOÖTð ;Mö Ø26��EœZ¨Ó-Ñ-Ó-ð Ðð  ð ;Mö Ø26��EœZ¨Ó-Ñ-Ó-ð Ðð  ô ,ÐFVÖ,WÀ¨b°2©g¸«^Ò,WÓXˆIà7GÖ$H° R¨£WÐ$HÐ!Ð$HáÜ)-¬d´6©lÐ<SÓ)TÐ&ä×'Ñ'Ð(>Ð@RÔSô #(×"5Ñ"5Ð6LÓ"M‘ä"'×"5Ñ"5Ð6HÓ"I�ä×Ñ Ð1FÔGÜ×Ñ °Ô5Ü×#Ñ#Ø˜°Àöñu\ùòF ùò ùò -Xùâ$Hs   Ô,X7Õ
X<Õ-Y
ÖYÚreturnc                ó<  — | sy |rt        d«      ‚|�|j                  |ini }|�|j                  |ini }t        |t        «      r&t	        |j                  «      dk7  r|j                  |ind }t        j                  | |||||g«      }|j                  «       D �]�  \  \  }}\  \  }}}}}}}t        t        t           |«      }t        t        t           |«      } t        t        t           |«      }!t        t        t           |«      }"t        t        t           |«      }#|j                  dk(  r|€|�J ‚d\  }$}%|�#|j                  ||j                  |d¬«      «      }$|�#|j                  ||j                  |d¬«      «      }%|�||vr|j                  |d¬«      ||<   ||   }t        j                  |#d«       |st        j                  nt        j                   }& |&|| |!|"||#|||
|||||$|%¬	«       |%€�Œ_t        j"                  |#|%gt%        |#«      z  «       �Œ„ y )
Nz9Adam with fused=True does not support differentiable=Truerª   Úmps)NNT)r}   r«   r   )	r)   r%   rj   rk   r(   r'   r   rh   ri   )r5   rB   r.   r   r°   r   r¯   Úitemsr   r²   r‡   rF   r�   rJ   rµ   Ú_fused_adam_Ú_fused_adamw_r¼   rI   )'r$   r`   ra   rb   rc   rd   rh   ri   r)   re   rj   rk   r%   r(   r'   r   r    r!   r#   Úgrad_scale_dictÚfound_inf_dictÚlr_dictrÄ   rB   rË   rÅ   rÆ   rÇ   rÈ   rÑ   rÊ   rÌ   rÍ   rÎ   rÏ   rÐ   Údevice_grad_scaleÚdevice_found_infÚfuncs'                                          r:   Ú_fused_adamrâ   þ  sh  € ñ, ØÙÜÐVÓWÐWð ,6Ð+Aˆ×	Ñ	˜JÑ'Àrð ð *3Ð)>ˆ×	Ñ	˜9Ñ%ÀBð ô & b¬&Ô1´c¸"¿)¹)³nÈÒ6Mˆ�‰�B‰ÐSWð ô  ×BÑBØ	�˜ +¨ÀÐLó€Oð 
×	Ñ	Ó	 ó6ñ 
	‰ˆ�ñ 
ñ	
ØØØØØ"Øà	äœT¤&™\¨>Ó:ˆÜœD¤™L¨-Ó8ˆÜœt¤F™|Ð-=Ó>ˆÜ!¤$¤v¡,Ð0CÓDÐÜ!¤$¤v¡,Ð0CÓDÐà�;‰;˜%ÒØÐ$¨Ð);Ð;Ð;à.8Ñ+ÐÐ+ØÐ!Ø /× :Ñ :Ø˜
Ÿ™ f¸4˜Ó@ó!Ðð Ð Ø-×8Ñ8Ø˜	Ÿ™ V¸$˜Ó?ó Ðð Ð 6°Ñ#8Ø Ÿe™e¨6À˜eÓEˆG�F‰OØ˜‘ˆBÜ×ÑÐ.°Ô2Ù)?Œu×!Ò!ÄU×EXÑEXˆÙØØØØØ"ØØØØØØ%ØØØ(Ø&õ	
ð" Ò'Ü×ÑØ"Ð%5Ð$6¼Ð=OÓ9PÑ$Pöñi6r;   )Úsingle_tensor_fnr   r"   c                óh  — |	€)|€'t        | |d¬«      \  }}|rt        |t        «      r|sd}|	€d}	|€d}t        j                  j                  «       st        d„ |D «       «      st        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        } || |||||f|||||||||||
||dœŽ y)	znFunctional API that performs Adam algorithm computation.

    See :class:`~torch.optim.Adam` for details.
    NF)Ú	use_fusedc              3   óP   K  — | ]  }t        |t        j                  «      –— Œ  y ­wrq   )r.   rJ   r   )r¨   Úts     r:   r©   zadam.<locals>.<genexpr>’  s    è ø€ ò 5Ø()Œ
�1”e—l‘l×#ñ5ùs   ‚$&zPAPI has changed, `state_steps` argument must contain a list of singleton tensorsz6torch.jit.script not supported with foreach optimizersz4torch.jit.script not supported with fused optimizers)r)   re   rj   rk   r%   r(   r'   r   r    r!   rh   ri   r#   )r	   r.   r   rJ   r…   r†   r­   r5   r‚   rƒ   râ   rÕ   r¤   )r$   r`   ra   rb   rc   rd   r   r    r!   r"   rh   ri   re   r#   r)   rj   rk   r%   r(   r'   r   rË   rá   s                          r:   r   r   a  s=  € ðF €}˜˜Ü1Ø�N¨eô
‰
ˆˆ7ñ ”z "¤fÔ-±jØˆGØ€}ØˆØ€Øˆô �>‰>×&Ñ&Ô(´ñ 5Ø-8ô5ô 2ô Ø^ó
ð 	
ñ ”5—9‘9×)Ñ)Ô+ÜÐSÓTÐTÙ”—‘×'Ñ'Ô)ÜÐQÓRÐRá”U—Y‘Y×+Ñ+Ô-Ü‰Ù	œŸ™×/Ñ/Ô1Ü!‰ä"ˆáØØØØØØðð ØØØØØ!ØØØØ%ØØØ5ô'r;   )NFFNNNFF)$Útypingr   r   r   rJ   r   Ú	optimizerr   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Ú__all__r   Ú__doc__r²   rv   r1   r¤   rÕ   râ   r   rR   r;   r:   ú<module>rì      s6  ðç (Ñ (ã Ý ÷÷ ÷ ÷ ÷ ñ ð. �6Ð
€ômˆ9ô mðb$ðJ	à	ˆð 	ð 
ˆð 	Ø	ˆð 	Ø	Ðð 	Ø	Ðð 	Ø	ˆð ð+ñKBð „ðN{KØ�‰Lð{Kà�‰<ð{Kð �6‰lð{Kð �f‘ð	{Kð
 ˜&‘\ð{Kð �f‘ð{Kð ˜Ñ ð{Kð ˜Ñð{Kð ð{Kð ð{Kð �˜�Ñð{Kð �˜�Ñð{Kð 	ˆe�VˆmÑð{Kð ð{Kð  
ð!{Kð" ð#{Kð$ ð%{Kð& ð'{Kð( !ó){Kð|eØ�‰Lðeà�‰<ðeð �6‰lðeð �f‘ð	eð
 ˜&‘\ðeð �f‘ðeð ˜Ñ ðeð ˜Ñðeð ðeð ðeð �˜�Ñðeð �˜�Ñðeð 	ˆe�VˆmÑðeð ðeð  
ð!eð" ð#eð$ ð%eð& ð'eð( !ó)eðP`Ø�‰Lð`à�‰<ð`ð �6‰lð`ð �f‘ð	`ð
 ˜&‘\ð`ð �f‘ð`ð ˜Ñ ð`ð ˜Ñð`ð ð`ð ð`ð ð`ð ð`ð 	ˆe�VˆmÑð`ð ð`ð  
ð!`ð" ð#`ð$ ð%`ð& ð'`ð( !ð)`ð* 
ó+`ñF  Ð1DÔEð #ØØ Ø Ø#'Ø"&ØØ#(ñ!WØ�‰LðWà�‰<ðWð �6‰lðWð �f‘ð	Wð
 ˜&‘\ðWð �f‘ðWð �d‰^ðWð ðWð ðWð �D‰>ðWð ˜Ñ ðWð ˜ÑðWð ðWð  !ð!Wð$ ð%Wð& ð'Wð( ð)Wð* 	ˆe�VˆmÑð+Wð, ð-Wð. 
ð/Wð0 ò1Wó FñWr;   