Ë
    úÍ:jR™  ã            ,       ó~  — 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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Ú
_to_scalarÚ_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   ú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                 €úe/home/mcse/projects/srt_converter/srt-converter-venv/lib/python3.12/site-packages/torch/optim/adam.pyr6   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©rC   )r5   Ú__setstate__Úparam_groupsÚ
setdefaultÚstateÚgetÚlenÚtorchÚ	is_tensorr3   Útensorr   rD   )r9   rI   Úgroupr#   ÚpÚp_stateÚstep_valr;   s          €r<   rF   zAdam.__setstate__r   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@   rB   r.   rE   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,   )ÚgradrL   Ú
is_complexÚappendÚ	is_sparser7   rI   rK   r
   Úzerosr   rD   rN   Ú
zeros_likeÚpreserve_formatÚrequires_gradrM   )r9   rO   Úparams_with_gradÚgradsÚexp_avgsÚexp_avg_sqsÚmax_exp_avg_sqsÚstate_stepsÚhas_complexrP   rI   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*   rg   Úbeta1Úbeta2r&   r)   r(   r    r   r!   r"   r#   rj   rk   r$   )Ú _cuda_graph_capture_health_checkrL   Úenable_gradrG   rh   r   Úgetattr)r9   ÚclosureÚlossrO   ra   rb   rc   rd   re   rf   rl   rm   rg   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   r3   r   ÚtupleÚboolr   r6   rF   rh   r   r?   Ú__classcell__)r;   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%   rb   rc   rd   re   rf   rj   rk   r*   rg   rl   rm   r&   r)   r(   r    r!   r"   r$   c                ó8  — |€|�J ‚t         j                  j                  «       r6t        |t        «      sJ ‚t        |
t        «      sJ ‚t        |t        «      sJ ‚t        |«      }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  }"|"j1                  «       }#|!j3                  «       }$|ro|r||   j#                  «       }%n||   }%||   j5                  t        j6                  |%|«      «       ||   j3                  «       |$|#z  z  j9                  ||#z  «      }&n(|j3                  «       |$|#z  z  j9                  ||#z  «      }&|r!|j;                  |j#                  «       |&«       nµ|j;                  ||&«       n¢t=        |«      }d|
|z  z
  } d||z  z
  }!|| z  }"|!d
z  }$|rDt        j6                  ||   |||   ¬«       ||   j3                  «       |$z  j9                  |«      }&n"|j3                  «       |$z  j9                  |«      }&|j;                  ||&|" ¬	«       |s�ŒÅt        j&                  | |   «      s�Œßt        j>                  ||   «      ||<   �Œü y )NúIIf capturable=True, params and state_steps must be on supported devices: ú.r   r   ©ÚalphaT)rD   rC   Únon_blocking)Úweight)Úvalueç      à?)Úout) rL   ÚjitÚis_scriptingr0   r3   r   r   rD   rC   Ú	enumerateÚcompilerÚis_compilingr   ÚtypeÚmul_r`   Úaddcmul_ÚcloneÚaddrZ   Úview_as_realÚtoÚlerp_ÚsquareÚnegÚsqrtÚcopy_ÚmaximumÚadd_Úaddcdiv_r   Úview_as_complex)'r%   rb   rc   rd   re   rf   rj   rk   r*   rg   rl   rm   r&   r)   r(   r    r!   r"   r$   Ú
beta1_dictÚiÚparamrY   rV   rW   Ústep_tÚcapturable_supported_devicesrD   rC   ÚkeyÚdevice_beta1r?   Úbias_correction1Úbias_correction2Ú	step_sizeÚstep_size_negÚbias_correction2_sqrtrX   Údenoms'                                          r<   Ú_single_tensor_adamr¦   Y  s|  € ð, Ð )Ð"3Ð3Ð3ä‡y�y×ÑÔô ˜"œeÔ$Ð$Ð$Ü˜%¤Ô'Ð'Ð'Ü˜%¤Ô'Ð'Ð'ä˜‹^ˆô �%œÔ Ø27·,±,ÀÇÁÐ1LÈeÐ0T‰
àˆ
ä˜fÓ%ó VK‰ˆˆ5Ù'ˆu�QŠx¨e°A©h¨YˆØ˜1‘+ˆØ  ‘^ˆ
Ø˜Q‘ˆô �~‰~×*Ñ*Ô,±Ü+LÓ+NÐ(à—‘×!Ñ! V§]¡]×%7Ñ%7Ò7Ø—L‘L×%Ñ%Ð)EÑEðð \Ð\xÐ[yÐyzÐ{ó	ð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Ø˜*Ñ$Ø"'§(¡(Ø!¨¸Tð #+ó #�
˜3‘ð 2<¸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ÓñmVKr=   c          	      óè  ‡-— t        | «      dk(  ry 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        |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        |«      }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        j0                  | t        j2                  dd¬«      d¬«       nt        j0                  | d«       |dk7  rR|rt        j4                  |d||z  z
  «       n3|rt        j0                  |||¬«       nt        j6                  |||¬«      }t        j8                  ||d|"z
  «       t        j4                  ||«       t        |t        j                  «      rt        j:                  |d|z
  «      }$d}%n|}$d|z
  }%t        j<                  ||$||%«       ~~$|�rft        j>                  |
| «      }&t        j>                  || «      }'t        j@                  |&d«       t        j@                  |'d«       t        jB                  |'«       t        jD                  |&|«       t        jF                  |&«       t        jH                  |'«       |&}(|'})|rCt%        t&        t           |«      }#t        jJ                  |#|«       t        jL                  |#«      }*nt        jL                  |«      }*t        jD                  |*|)«       t        j0                  |*|«       t        jD                  |*|(«       t        jN                  |||*«       �Œ½| D �+cg c]  }+d|
tQ        |+«      z  z
  ‘Œ }&}+| D �+cg c]  }+d|tQ        |+«      z  z
  ‘Œ }'}+tS        |&D �,cg c]
  },||,z  dz  ‘Œ c},«      }(|'D �,cg c]  },|,dz  ‘Œ	 })},|rCt%        t&        t           |«      }#t        jJ                  |#|«       t        jL                  |#«      }*nt        jL                  |«      }*t        jD                  |*|)«       t        j0                  |*|«       t        jN                  |||*|(«       �ŒÊ y c c}+w c c}+w c c},w c c},w )Nr   r,   r   r-   zHbeta1 as a Tensor is not supported for capturable=False and foreach=Truez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rs   )rD   r‰   )Ú.0rP   r?   r�   s      €r<   ú	<genexpr>z%_multi_tensor_adam.<locals>.<genexpr>T  sQ   øè ø€ ò 
ñ ��4ð �H‰H�M‰M˜TŸ[™[×-Ñ-Ñ-ò >Ø—‘—‘Ð!=Ð=ó>ñ
ùs   ƒAAr{   r|   z#_foreach ops don't support autogradÚcpuT©rD   r   r/   )rD   r}   éÿÿÿÿr‚   )*rK   r0   r   r7   r2   r1   rL   r‡   rˆ   r   ÚallÚzipr   r   Ú"_group_tensors_by_device_and_dtypeÚstrrD   Úvaluesr   Úlistr�   r   Ú_foreach_negÚis_cpuÚ_foreach_add_rN   Ú_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%   rb   rc   rd   re   rf   rj   rk   r*   rg   rl   rm   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_stepsrD   rŸ   Údevice_max_exp_avg_sqsÚscaled_device_gradsr�   r    r¡   r¢   r¤   Úexp_avg_sq_sqrtr?   Úbcr�   s.                                                @r<   Ú_multi_tensor_adamr×     sN  ø€ ô, ˆ6ƒ{�aÒØä�"”fÔÙÜØWóð ð �8‰8‹:˜Š?ÜÐ:Ó;Ð;ä�%œÔ ÙÜØZóð ð �;‰;‹=˜AÒÜÐ=Ó>Ð>ä�%œÔ ÙÜØZóð ð �;‰;‹=˜AÒÜÐ=Ó>Ð>ô �>‰>×&Ñ&Ô(©ZÜ'HØô(
Ð$ô ó 
ô ˜v {Ó3ô
ô 
ð 	
ð
 XÐXtÐWuÐuvÐwó	
ð 
ð Ð )Ð"3Ð3Ð3áÐDÐDÓDÐä	�B‹€Bô  ×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   ÕY Õ3Y%ÖY*
Ö0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 �]l  \  \  }}\  \  }}}}}}}t        t        t           |«      }t        t        t           |«      } t        t        t           |«      }!t        t        t           |«      }"t        t        t           |«      }#d\  }$}%|�#|j                  ||j                  |d¬«      «      }$|�#|j                  ||j                  |d¬«      «      }%|�||vr|j                  |d¬«      ||<   ||   }t        j                  |#d«       |st        j                  nt        j                  }& |&|| |!|"||#|||
|||||$|%¬«       |%€�ŒJt        j                   |#|%gt#        |#«      z  «       �Œo y )	Nz9Adam with fused=True does not support differentiable=Truer¬   )NNT)r   r­   r   )	r*   r&   rl   rm   r)   r(   r    rj   rk   )r7   rD   r0   r   r²   r   r±   Úitemsr   r´   rH   r�   rL   r·   Ú_fused_adam_Ú_fused_adamw_r¾   rK   )'r%   rb   rc   rd   re   rf   rj   rk   r*   rg   rl   rm   r&   r)   r(   r    r!   r"   r$   Úgrad_scale_dictÚfound_inf_dictÚlr_dictrÆ   rD   rÍ   rÇ   rÈ   rÉ   rÊ   rÓ   rÌ   rÎ   rÏ   rÐ   rÑ   rÒ   Údevice_grad_scaleÚdevice_found_infÚfuncs'                                          r<   Ú_fused_adamrã     sK  € ñ, ØÙÜÐVÓWÐWð ,6Ð+Aˆ×	Ñ	˜JÑ'Àrð ð *3Ð)>ˆ×	Ñ	˜9Ñ%ÀBð ô & b¬&Ô1´c¸"¿)¹)³nÈÒ6Mˆ�‰�B‰ÐSWð ô  ×BÑBØ	�˜ +¨ÀÐLó€Oð 
×	Ñ	Ó	 ó3ñ 
	‰ˆ�ñ 
ñ	
ØØØØØ"Øà	äœ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öñc3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rs   )r0   rL   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*   rg   rl   rm   r&   r)   r(   r    r!   r"   rj   rk   r$   )r	   r0   r   rL   r‡   rˆ   r¯   r7   r„   r…   rã   r×   r¦   )r%   rb   rc   rd   re   rf   r   r!   r"   r#   rj   rk   rg   r$   r*   rl   rm   r&   r)   r(   r    rÍ   râ   s                          r<   r   r   q  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   rL   r   Ú	optimizerr   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Ú__all__r   Ú__doc__r´   rx   r3   r¦   r×   rã   r   rT   r=   r<   ú<module>rí      s6  ðç (Ñ (ã Ý ÷÷ ÷ ÷ ÷ ó ð0 �6Ð
€ômˆ9ô mðb$ðJ	à	ˆð 	ð 
ˆð 	Ø	ˆð 	Ø	Ðð 	Ø	Ðð 	Ø	ˆð ð+ñKBð „ðNBKØ�‰LðBKà�‰<ðBKð �6‰lðBKð �f‘ð	BKð
 ˜&‘\ðBKð �f‘ðBKð ˜Ñ ðBKð ˜ÑðBKð ðBKð ðBKð �˜�ÑðBKð �˜�ÑðBKð 	ˆe�VˆmÑðBKð ðBKð  
ð!BKð" ð#BKð$ ð%BKð& ð'BKð( !ó)BKðJpØ�‰Lðpà�‰<ðpð �6‰lðpð �f‘ð	pð
 ˜&‘\ðpð �f‘ðpð ˜Ñ ðpð ˜Ñðpð ðpð ðpð �˜�Ñðpð �˜�Ñðpð 	ˆe�VˆmÑðpð ðpð  
ð!pð" ð#pð$ ð%pð& ð'pð( !ó)pðf]Ø�‰Lð]à�‰<ð]ð �6‰lð]ð �f‘ð	]ð
 ˜&‘\ð]ð �f‘ð]ð ˜Ñ ð]ð ˜Ñð]ð ð]ð ð]ð ð]ð ð]ð 	ˆe�VˆmÑð]ð ð]ð  
ð!]ð" ð#]ð$ ð%]ð& ð']ð( !ð)]ð* 
ó+]ñ@  Ð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=   