Ë
    ùÿæi�  ã            .       óz  — d dl 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dz  dedz  dededeez  deez  deez  dededededed ed!df(d"„Zdee   dee   dee   dee   dee   dee   dedz  dedz  dededeez  deez  deez  dededededed ed!df(d#„Z dee   dee   dee   dee   dee   dee   dedz  dedz  dededeez  deez  deez  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dz  deded'edz  dedz  dedz  ded ededeez  deez  deez  dededed!df,d(„«       Z"y)*é    )ÚcastN)Ú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z  deeez  eez  f   deded	ed
edz  dededededz  dedd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"   Úreturnc                óæ  •— 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        t        |«      «      }||||||||	|
||dœ}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ÚtupleÚmapr   ÚsuperÚ__init__ÚRuntimeErrorÚ_step_supports_amp_scaling)Úselfr#   r$   r%   r&   r'   r(   r   r   r   r    r!   r"   ÚdefaultsÚ	__class__s                 €úe/Volumes/fast/ai/experiments/voice-extract-mac/.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Ü”cœ* eÓ,Ó-ˆð ØØØ(ØØ ØØ$Ø,ØØ&<ñ
ˆô 	‰Ñ˜ Ô*áÙÜ"Ð#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_tensorr2   Útensorr   rD   )r9   rI   Úgroupr!   ÚpÚp_stateÚstep_valr;   s          €r<   rF   zAdam.__setstate__s   s,  ø€ Ü‰Ñ˜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•ˆ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ð{ !ð| Ð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"   )Ú'_accelerator_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Ö   s;  € ð 	×4Ñ4Ô6àˆØÐÜ×"Ñ"Õ$Ù“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   r2   r   r3   Úboolr6   rF   rh   r   r?   Ú__classcell__)r;   s   @r<   r   r   "   s  ø„ ð "Ø7CØØØðNWð  $ØØ Ø$Ø!Ø',òNWàðNWð �F‰NðNWð �U˜V‘^ U¨V¡^Ð3Ñ4ð	NWð
 ðNWð ðNWð ðNWð ˜‘ðNWð ðNWð ðNWð ðNWð �d‰{ðNWð !%ðNWð 
õN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:
        aG  
        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[Union[float, Tensor], Union[float, Tensor]], optional):
            coefficients used for computing running averages of gradient and
            its square. If a tensor is provided, must be 1-element. (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"   r)   c          
      ó  — |€|�t        d«      ‚t        j                  j                  «       rut	        |t
        «      st        dt        |«      › �«      ‚t	        |
t
        «      st        dt        |
«      › �«      ‚t	        |t
        «      s8t        dt        |«      › �«      ‚t        |«      }t        |
«      }
t        |«      }t	        |
t        «      r|
j                  |
j                  f|
i}nd }t        | «      D �]  \  }}|s||   n||    }||   }||   }||   }t        j                  j                  «       s`|r^t        «       }|j                  j                  |j                  j                  k(  r|j                  j                  |v st        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
  «       |r{t	        |t        «      rk|j                   r*|j/                  t        j0                  |«      d|z
  ¬«       n[|j                  |«      j#                  ||t3        t
        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  }"|"j5                  «       }#|!j7                  «       }$|ro|r||   j%                  «       }%n||   }%||   j9                  t        j:                  |%|«      «       ||   j7                  «       |$|#z  z  j=                  ||#z  «      }&n(|j7                  «       |$|#z  z  j=                  ||#z  «      }&|r!|j?                  |j%                  «       |&«       nµ|j?                  ||&«       n¢tA        |«      }d|
|z  z
  } d||z  z
  }!|| z  }"|!dz  }$|rDt        j:                  ||   |||   ¬«       ||   j7                  «       |$z  j=                  |«      }&n"|j7                  «       |$z  j=                  |«      }&|j?                  ||&|" ¬«       |s�Œ×t        j(                  | |   «      s�Œñt        jB                  ||   «      ||<   �Œ y )Nú,Expected grad_scale and found_inf to be Nonez#Expected lr to be a float, but got z&Expected beta1 to be a float, but got z&Expected beta2 to be a float, but got úIIf capturable=True, params and state_steps must be on supported devices: Ú.r   r   ©ÚalphaT)rD   rC   Únon_blocking)Úweight)Úvalueç      à?)Úout)"ÚAssertionErrorrL   ÚjitÚis_scriptingr/   r2   Útyper   r   rD   rC   Ú	enumerateÚcompilerÚis_compilingr   Úmul_r`   Úaddcmul_ÚcloneÚaddrZ   Úview_as_realÚtoÚlerp_Úsquarer   Ú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§   [  sÊ  € ð, Ð Ð!6ÜÐKÓLÐLä‡y�y×ÑÔô ˜"œeÔ$Ü Ð#FÄtÈBÃxÀjÐ!QÓRÐRÜ˜%¤Ô'Ü Ð#IÌ$ÈuË+ÈÐ!WÓXÐXÜ˜%¤Ô'Ü Ð#IÌ$ÈuË+ÈÐ!WÓXÐXä˜‹^ˆÜ˜5Ó!ˆÜ˜5Ó!ˆô �%œÔ Ø/4¯|©|¸U¿[¹[Ð.IÈ5Ð-Q‰
àˆ
ä˜f×%‰ˆˆ5Ù'ˆu�QŠx¨e°A©h¨YˆØ˜1‘+ˆØ  ‘^ˆ
Ø˜Q‘ˆô �~‰~×*Ñ*Ô,±Ü+LÓ+NÐ(à—‘×!Ñ! V§]¡]×%7Ñ%7Ò7Ø—L‘L×%Ñ%Ð)EÑEä$Ø_Ð`|Ð_}Ð}~Ðóð ð
 	�!‰ˆà˜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‘ð ,6°c©?‰Là ˆLð 	�‰�d˜A Ñ,Ô-ñ œj¨´Ô7Ø×"Ò"ð × Ñ ¤§¡¨dÓ!3¸AÀ¹IÐ ÕFà—‘ Ó&×/Ñ/Ø˜$¤d¬5°!°e±)Ó&<ð 0õ ð �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Óñw &r=   c          
      óV  ‡-— 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                  «       s=|r;t        d	¬
«      Š-t        ˆ-fd„t        | |d¬«      D «       «      st        d‰-› d�«      ‚|€|�t        d«      ‚|rt        d«      ‚t        |«      }t        |
«      }
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   j0                  r.t        j2                  | t        j4                  dd¬«      d¬«       nt        j2                  | d«       |dk7  rR|rt        j6                  |d||z  z
  «       n3|rt        j2                  |||¬«       nt        j8                  |||¬«      }t        j:                  ||t'        t<        d|"z
  «      «       t        j6                  ||«       t        |t        j                  «      rt        j>                  |d|z
  «      }$d}%n|}$d|z
  }%t        j@                  ||$||%«       ~~$|�rft        jB                  |
| «      }&t        jB                  || «      }'t        jD                  |&d«       t        jD                  |'d«       t        jF                  |'«       t        jH                  |&|«       t        jJ                  |&«       t        jL                  |'«       |&}(|'})|rCt'        t(        t           |«      }#t        jN                  |#|«       t        jP                  |#«      }*nt        jP                  |«      }*t        jH                  |*|)«       t        j2                  |*|«       t        jH                  |*|(«       t        jR                  |||*«       �ŒË| D �+cg c]  }+d|
tU        |+«      z  z
  ‘Œ }&}+| D �+cg c]  }+d|tU        |+«      z  z
  ‘Œ }'}+tW        |&D �,cg c]
  },||,z  dz  ‘Œ c},«      }(|'D �,cg c]  },|,dz  ‘Œ	 })},|rCt'        t(        t           |«      }#t        jN                  |#|«       t        jP                  |#«      }*nt        jP                  |«      }*t        jH                  |*|)«       t        j2                  |*|«       t        jR                  |||*|(«       �ŒØ 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>`  sR   øè ø€ ð 
ñ A‘��4ð �H‰H�M‰M˜TŸ[™[×-Ñ-Ñ-ò >Ø—‘—‘Ð!=Ð=ó>á@ùs   ƒAAT)Ústrictr{   r|   rz   z#_foreach ops don't support autogradÚcpu©rD   r   r.   )rD   r}   éÿÿÿÿr‚   ),rK   r/   r   r7   r1   r0   rL   r‰   rŠ   r   ÚallÚzipr„   r   r   Ú"_group_tensors_by_device_and_dtypeÚstrrD   Úvaluesr   Úlistr�   r   Ú_foreach_negÚis_cpuÚ_foreach_add_rN   Ú_foreach_mul_Ú_foreach_addÚ_foreach_lerp_r2   Ú_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Ù   *  sw  ø€ ô, ˆ6ƒ{�aÒØä�"”fÔÙÜØWóð ð �8‰8‹:˜Š?ÜÐ:Ó;Ð;ä�%œÔ ÙÜØZóð ð �;‰;‹=˜AÒÜÐ=Ó>Ð>ä�%œÔ ÙÜØZóð ð �;‰;‹=˜AÒÜÐ=Ó>Ð>ô �>‰>×&Ñ&Ô(©ZÜ'HØô(
Ð$ô ó 
ô ˜v {¸4Õ@ó
ô 
ô
 !Ø[Ð\xÐ[yÐyzÐ{óð ð Ð Ð!6ÜÐKÓLÐLáÜÐBÓCÐCä	�B‹€BÜ�uÓ€EÜ�uÓ€Eä×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ô 	×ÑØ˜\¬4´°q¸<Ñ7GÓ+Hô	
ô 	×ÑÐ.°Ô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ó Ù:L°$��EœZ¨Ó-Ñ-Ó-Ð:Lð ð  ñ ;Mó Ù:L°$��EœZ¨Ó-Ñ-Ó-Ð:Lð ð  ô ,ÑFVÓ,WÑFVÀ¨b°2©g¸«^ÐFVÑ,WÓXˆIá7GÓ$HÑ7G° R¨£WÐ7GÐ!Ð$HáÜ)-¬d´6©lÐ<SÓ)TÐ&ä×'Ñ'Ð(>Ð@RÔSô #(×"5Ñ"5Ð6LÓ"M‘ä"'×"5Ñ"5Ð6HÓ"I�ä×Ñ Ð1FÔGÜ×Ñ °Ô5Ü×#Ñ#ØØØØö	ñk %ùò| ùò ùò -Xùâ$Hs   ÖZÖ*Z×Z!
×'Z&c                ó>  — | sy |rt        d«      ‚t        |
«      }
t        |«      }|�|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   r   rD   r/   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ä   #  sZ  € ñ, ØÙÜÐVÓWÐWä�uÓ€EÜ�uÓ€Eð ,6Ð+Aˆ×	Ñ	˜JÑ'Àrð ð *3Ð)>ˆ×	Ñ	˜9Ñ%ÀBð ô & b¬&Ô1´c¸"¿)¹)³nÈÒ6Mˆ�‰�B‰ÐSWð ô  ×BÑBØ	�˜ +¨ÀÐLó€Oð 
×	Ñ	×	 ñ
	‰ˆ�ñ 
ñ	
ØØØØØ"Øà	äœ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öñQ 
!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   )r/   rL   r   )r«   Úts     r<   r¬   zadam.<locals>.<genexpr>¸  s   è ø€ ð 5Ù-8¨Œ
�1”e—l‘l×#©[ù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   r/   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   ‡  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   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¶   rw   r2   r§   rÙ   rä   r   rT   r=   r<   Ú<module>rî      s5  ðå ã Ý ÷÷ ÷ ÷ ÷ ó ð0 �6Ð
€ônˆ9ô nðd$ðJ	à	ˆð 	ð  
ˆð 	Ø	ˆð 	Ø	Ðð 	Ø	Ðð 	Ø	ˆð ð-ñKCð „ðPLKØ�‰LðLKà�‰<ðLKð �6‰lðLKð �f‘ð	LKð
 ˜&‘\ðLKð �f‘ðLKð ˜‘ðLKð ˜‰}ðLKð ðLKð ðLKð �6‰>ðLKð �6‰>ðLKð 	�‰ðLKð ðLKð  
ð!LKð" ð#LKð$ ð%LKð& ð'LKð( !ð)LKð* 
ó+LKð^vØ�‰Lðvà�‰<ðvð �6‰lðvð �f‘ð	vð
 ˜&‘\ðvð �f‘ðvð ˜‘ðvð ˜‰}ðvð ðvð ðvð �6‰>ðvð �6‰>ðvð 	�‰ðvð ðvð  
ð!vð" ð#vð$ ð%vð& ð'vð( !ð)vð* 
ó+vðraØ�‰Lðaà�‰<ðað �6‰lðað �f‘ð	að
 ˜&‘\ðað �f‘ðað ˜‘ðað ˜‰}ðað ðað ðað �6‰>ðað �6‰>ðað 	�‰ðað ðað  
ð!að" ð#að$ ð%að& ð'að( !ð)að* 
ó+añH  Ð1DÔEð  ØØ ØØ $Ø#ØØ#(ñ!WØ�‰LðWà�‰<ðWð �6‰lðWð �f‘ð	Wð
 ˜&‘\ðWð �f‘ðWð �D‰[ðWð ðWð ðWð �$‰;ðWð ˜‘ðWð ˜‰}ðWð ðWð  !ð!Wð$ ð%Wð& �6‰>ð'Wð( �6‰>ð)Wð* 	�‰ð+Wð, ð-Wð. 
ð/Wð0 ð1Wð2 
ò3Wó FñWr=   