
    QVjig              &          d Z ddlmZmZmZ ddlZddlmZ ddlmZm	Z	m
Z
mZmZmZmZmZmZmZmZmZmZmZmZmZ ddgZ G d	 de          Zd
de de de de de
 dz   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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dededededededededede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$ee         dedededededededededef$d%            ZdS )'z'Implementation for the NAdam algorithm.    )castOptionalUnionN)Tensor   )_capturable_doc_default_to_fused_or_foreach_differentiable_doc_disable_dynamo_if_unsupported_foreach_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	OptimizerParamsTNAdamnadamc                        e Zd Z	 	 	 	 	 	 ddddddd	ed
eeef         deeef         dedededede	e         dededef fdZ
 fdZd Zedd            Z xZS )r   Mb`?g?g+?:0yE>r   Mbp?FN)foreachmaximize
capturabledifferentiableparamslrbetasepsweight_decaymomentum_decaydecoupled_weight_decayr   r    r!   r"   c                R   t          |t                    r'|                                dk    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
|           d|k    st          d|           |||||||	||
|d
}t	                                          ||           d S )Nr   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: zInvalid momentum_decay value: )
r$   r%   r&   r'   r(   r)   r    r   r!   r"   )
isinstancer   numel
ValueErrorsuper__init__)selfr#   r$   r%   r&   r'   r(   r)   r   r    r!   r"   defaults	__class__s                K/root/voice-cloning/.venv/lib/python3.11/site-packages/torch/optim/nadam.pyr1   zNAdam.__init__!   s    b&!! 	<bhhjjAoo:;;;byy;r;;<<<czz<s<<===eAh$$$$$$$$M58MMNNNeAh$$$$$$$$M58MMNNNl""JLJJKKKn$$NnNNOOO(,&< $,
 
 	*****    c                    t                                          |           | j        D ]}|                    dd           |                    dd            |                    dd           |                    dd           |                    dd           |d         D ],}| j                            |g           }t          |          dk    rt          j        |d	                   sjt          |d	                   }|d         r(t          j
        |t                      |j        
          n!t          j
        |t                                |d	<   t          j        |d                   s]|d         }|d         r(t          j
        |t                      |j        
          n!t          j
        |t                                |d<   .d S )Nr    Fr   r!   r"   r)   r#   r   stepdtypedevicer:   
mu_product)r0   __setstate__param_groups
setdefaultstategetlentorch	is_tensorfloattensorr   r;   )r2   rA   grouppp_statestep_valmu_prod_valr4   s          r5   r>   zNAdam.__setstate__L   s   U###& 	 	EZ///Y---\5111-u5555u===8_  *..B//w<<1$$ ?76?;; #(#9#9
  %\2SEL (0A0C0CAH    "'h>O>Q>Q!R!R!R   !?7<+@AA &-l&;
  %\2VEL +3D3F3Fqx    "'kARATAT!U!U!U  -	 	r6   c                    d}|d         D ]}	|	j         |t          j        |	          z  }|                    |	           |	j         j        rt          d          |                    |	j                    | j        |	         }
t          |
          dk    r|d         r(t          j        dt                      |	j
                  n!t          j        dt                      	          |
d
<   |d         r(t          j        dt                      |	j
                  n!t          j        dt                      	          |
d<   t          j        |	t          j                  |
d<   t          j        |	t          j                  |
d<   |                    |
d                    |                    |
d                    |                    |
d                    |                    |
d
                    |S )NFr#   z'NAdam does not support sparse gradientsr   r!    r9   r+   r<   r8   r,   r=   )memory_formatexp_avg
exp_avg_sq)gradrD   
is_complexappend	is_sparseRuntimeErrorrA   rC   zerosr   r;   rG   ones
zeros_likepreserve_format)r2   rH   params_with_gradgradsexp_avgsexp_avg_sqsmu_productsstate_stepshas_complexrI   rA   s              r5   _init_groupzNAdam._init_groupj   s    x $	2 $	2Av!u/222 ''***6# R&'PQQQQV$$$
1u::?? !.JB.?.A.A!(SSSS"\#5F5H5HIII &M !.J
2->-@-@RRRR"\#5F5H5HIII ,' (-'7)>( ( (E)$ +0*:)>+ + +E,' i 0111""5#6777""5#6777""5=111r6   c                    |                                   d}|5t          j                    5   |            }ddd           n# 1 swxY w Y   | j        D ]}g }g }g }g }g }g }	t	          t
          t          t          f         |d                   \  }
}|                     |||||||	          }t          ||||||	|
||d         |d         |d         |d         |d         |d         |d	         |d
         |d         |           |S )zPerform 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"   )beta1beta2r$   r'   r(   r&   r    r)   r   r!   r"   ra   )	 _cuda_graph_capture_health_checkrD   enable_gradr?   r   tuplerF   rb   r   )r2   closurelossrH   r[   r\   r]   r^   r_   r`   rd   re   ra   s                r5   r8   z
NAdam.step   s    	--///"$$ ! !wyy! ! ! ! ! ! ! ! ! ! ! ! ! ! ! & &	 &	E-/"$E%'H(*K(*K(*KeUl 3U7^DDLE5**  K  ;">2$%56%Lz*',-E'Fi( .$%56'%    * s   AA
A)r   r   r   r   r   FN)__name__
__module____qualname__r   r   rF   r   rh   boolr   r1   r>   rb   r   r8   __classcell__)r4   s   @r5   r   r       s;        $(%1 $',)+ #' $)+ )+ )+)+ %- )+ UE\"	)+
 )+ )+ )+ !%)+ $)+ )+ )+ )+ )+ )+ )+ )+ )+V    <0 0 0d "6 6 6 "!6 6 6 6 6r6   a  Implements NAdam algorithm.

    .. math::
       \begin{aligned}
            &\rule{110mm}{0.4pt}                                                                 \\
            &\textbf{input}      : \gamma_t \text{ (lr)}, \: \beta_1,\beta_2 \text{ (betas)},
                \: \theta_0 \text{ (params)}, \: f(\theta) \text{ (objective)}                   \\
            &\hspace{13mm} \: \lambda \text{ (weight decay)}, \:\psi \text{ (momentum decay)}    \\
            &\hspace{13mm} \: \textit{decoupled\_weight\_decay}, \:\textit{maximize}             \\
            &\textbf{initialize} :  m_0 \leftarrow 0 \text{ ( first moment)},
                v_0 \leftarrow 0 \text{ ( second moment)}                                 \\[-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} \theta_t \leftarrow \theta_{t-1}                                       \\
            &\hspace{5mm} \textbf{if} \: \lambda \neq 0                                          \\
            &\hspace{10mm}\textbf{if} \: \textit{decoupled\_weight\_decay}                       \\
            &\hspace{15mm} \theta_t \leftarrow \theta_{t-1} - \gamma \lambda \theta_{t-1}                    \\
            &\hspace{10mm}\textbf{else}                                                          \\
            &\hspace{15mm} g_t \leftarrow g_t + \lambda \theta_{t-1}                             \\
            &\hspace{5mm} \mu_t \leftarrow \beta_1 \big(1 - \frac{1}{2}  0.96^{t \psi} \big)     \\
            &\hspace{5mm} \mu_{t+1} \leftarrow \beta_1 \big(1 - \frac{1}{2} 0.96^{(t+1)\psi}\big)\\
            &\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 \mu_{t+1} m_t/(1-\prod_{i=1}^{t+1}\mu_i)\\[-1.ex]
            & \hspace{11mm} + (1-\mu_t) g_t /(1-\prod_{i=1}^{t} \mu_{i})                         \\
            &\hspace{5mm}\widehat{v_t} \leftarrow   v_t/\big(1-\beta_2^t \big)                   \\
            &\hspace{5mm}\theta_t \leftarrow \theta_t - \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 `Incorporating Nesterov Momentum into Adam`_.
    z
    Args:
        a  
        lr (float, Tensor, optional): learning rate (default: 2e-3)
        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)
        momentum_decay (float, optional): momentum momentum_decay (default: 4e-3)
        decoupled_weight_decay (bool, optional): whether to decouple the weight
            decay as in AdamW to obtain NAdamW. If True, the algorithm does not
            accumulate weight decay in the momentum nor variance. (default: False)
        z	
        z

    .. _Incorporating Nesterov Momentum into Adam:
        https://openreview.net/forum?id=OM0jvwB8jIp57ZJjtNEZ
    .. _Decoupled Weight Decay Regularization:
        https://arxiv.org/abs/1711.05101

    r#   r\   r]   r^   r_   r`   rd   re   r$   r'   r(   r&   r)   r    r!   r"   ra   c                   t           j                                        st          |          }t	          |           D ]\  }}|s||         n||          }||         }||         }||         }||         }t          j        |          rPt          j        |          }t          j        |          }t          j        |          }t          j        |          }t           j                                        sZ|rXt                      }|j
        j        |j
        j        cxk    r|j
        j        k    rn n|j
        j        |v sJ d| d            |dz  }|r|}nt          |          }d||z  z
  }|	dk    r5|r|                    d||	z  z
             n|                    ||	          }|ddd||
z  z  z  z
  z  }|ddd|dz   |
z  z  z  z
  z  }||z  }|                    |d|z
             |                    |                              ||d|z
  	           |                    |                                          }|s|ri|                    |          }||z  }|| d|z
  z  d|z
  z  z  }|| |z  d|z
  z  z  }|                    ||           |                    ||           vt          |          |z  }|                    |           |                    ||| d|z
  z  dt          |          z
  z  	           |                    ||t+          t,          | |z  d|z
  z            	           d S )
NzVIf capturable=True, params, mu_products and state_steps must be on supported devices: .r   r   alphar,         ?Q?)value)rD   jitis_scriptingr   	enumeraterS   view_as_realcompileris_compilingr   r;   typer   mul_addlerp_addcmul_divsqrtaddcdiv_add_r   rF   )r#   r\   r]   r^   r_   r`   rd   re   r$   r'   r(   r&   r)   r    r!   r"   ra   iparamrR   rP   rQ   r=   step_tcapturable_supported_devicesr8   bias_correction2mumu_nextdenommu_product_nexts                                  r5   _single_tensor_nadamr     s   ( 9!!## ^^f%% I I5'6uQxxeAhY1+ ^
 ^
QE"" 	8&u--E%d++D(11G+J77J ~**,, 	 	+L+N+N(!Z%6%;QQQQv}?QQQQQQL%)EEEEI)EI I I FEF 	! 	&DDf%%Dud{?1% ;

1rL001111xx\x:: cC4D>,A#BCCD3$(n1L(M!NNO 	b
 	dAI&&&''d!e)'DDD/005577 	Z 	IIcNNE )72OB3#(+sZ/?@AD"w#2G!HIGNN4'''NN7E****(44w>OJJsOOONNeRC38$4j>T>T8T$U     NN5B3=S?5J"KLL     KI Ir6   c                  
( t          |           dk    rd S |r
J d            t          j                                        sJ|rHt	          d          (t          (fdt          | ||          D                       sJ d( d            t                    t          j	        | |||||g          }|
                                D ]1\  \  }}}}}}}t          t          t                   |          }t          t          t                   |          }t          t          t                   |          }t          t          t                   |          }t          t          t                   |          }t          t          t                   |          }|rt          ||||           |rt          j        |          }t          j                                        s9|d         j        r,t          j        |t          j        dd	
          d           nt          j        |d           |	dk    rO|rt          j        |d|	z  z
             n1|rt          j        |||	           nt          j        |||	          }t          j        ||dz
             t          j        |           t          j        |||dz
             t          j        |          }|r&t          j        |
          } t          j        d|           }!t          j        |!d           t          j        |!d           t          j        |!           t          j        | 
           t          j        d|           }"t          j        |"d           t          j        |"d           t          j        |"           ~ t          j        |          }#t          j        |#d           t          j        |#           t          j        |#           n,fd|D             }#
fd|D             }!
fd|D             }"t          j        ||!           t          j        ||#           t          j        ||           ~#|rt          j        |!d           t          j        |!           t          j        |d          }$t          j        |$           t          j        |!|$           |!}%~$t          j        ||"          }$t          j        |"           t          j        |$d           t          j        |"|$           |"}&~$t          j        |%|          }'t          j        |'|&|           t          j        ||'|           tA          fdt          ||!          D                       }%tA          fdt          ||"          D                       }&t          j        ||||%           t          j        ||||&           3d S )Nr   z#_foreach ops don't support autogradF)supports_xlac              3      K   | ]D\  }}}|j         j        |j         j        cxk    o|j         j        k    nc o|j         j        v V  Ed S rk   )r;   r~   ).0rI   mpr8   r   s       r5   	<genexpr>z&_multi_tensor_nadam.<locals>.<genexpr>  sz       
 
 2t HMRY^????t{/????? >!==
 
 
 
 
 
r6   zWIf capturable=True, params, mu_products, and state_steps must be on supported devices: rr   r,   cpu)r;   rs   r   rv   g      c                 @    g | ]}d t          |          z  z
  dz  S )r   ru   r   )r   r8   re   s     r5   
<listcomp>z'_multi_tensor_nadam.<locals>.<listcomp>   s=     $ $ $;?Uj....36$ $ $r6   c           	      L    g | ] }d ddt          |          z  z  z  z
  z  !S )r,   ru   rv   r   r   r8   rd   r(   s     r5   r   z'_multi_tensor_nadam.<locals>.<listcomp>  sJ        sdz$/?/?./P&QRRS  r6   c           	      R    g | ]#}d ddt          |          dz   z  z  z  z
  z  $S )r,   ru   rv   r   r   r   s     r5   r   z'_multi_tensor_nadam.<locals>.<listcomp>  sU         *T*:*:Q*>.)P QRRT  r6   c                 l    g | ]0\  }}t                    d |z
  z  d t          |          z
  z  dz  1S r,   r   )r   r=   r   r$   s      r5   r   z'_multi_tensor_nadam.<locals>.<listcomp>8  sT       &
B  ^^sRx0C*Z:P:P4PQUWW  r6   c                 l    g | ]0\  }}t                    |z  d t          |          |z  z
  z  dz  1S r   r   )r   r=   r   r$   s      r5   r   z'_multi_tensor_nadam.<locals>.<listcomp>>  sb        ,
G #2!"J!7!7'!AAC   r6   )!rC   rD   r|   r}   r   allzipr   r   "_group_tensors_by_device_and_dtypevaluesr   listr   r   _foreach_negis_cpu_foreach_add_rG   _foreach_mul__foreach_add_foreach_lerp__foreach_addcmul__foreach_sqrt_foreach_mul_foreach_pow_foreach_sub__foreach_neg__foreach_sqrt__foreach_div__foreach_sub_foreach_addcdiv_r   ))r#   r\   r]   r^   r_   r`   rd   re   r$   r'   r(   r&   r)   r    r!   r"   ra   grouped_tensorsgrouped_params_grouped_grads_grouped_exp_avgs_grouped_exp_avg_sqs_grouped_mu_products_grouped_state_steps__grouped_paramsgrouped_gradsgrouped_exp_avgsgrouped_exp_avg_sqsgrouped_mu_productsgrouped_state_stepsexp_avg_sq_sqrtexponentmusmu_nextsbias_correction_sqrtr   step_size_gradsstep_size_expavg	numeratorr   s)         ``` `                             @r5   _multi_tensor_nadamr   |  s*   ( 6{{aDDDDD >&&(( 
Z 
'H(
 (
 (
$  
 
 
 
  #6;DD
 
 
 
 
 	
 	

/+/ / /	
 	
 
 
BBB	+{KH O ""$$k k 		 	d6lO<<T&\>::V.?@@"4<1EFF"4<1EFF"4<1EFF  	/?AT    	>!.}==M ~**,, 	81DQ1G1N 	8#U\#e%D%D%DC      3Q7771% #NA\8I4IJJJJ  '%~\     %*$6%~\% % %M
 	-}a%iHHH/777q5y	
 	
 	
  -.ABB
  #	)*=~NNH$T844CT***S)))U+++ .999)$99H$///#...%000 #(#5e=P#Q#Q  4c::: 4555 !56666$ $ $ $CV$ $ $     /  C     0  H 	/555O-ABBBOS111 ! >	S)))R(((&':C@@E&&&U+++!O &':HEEE"--- s+++%000' *?MJJI#I/?AQRRR #NIOOOO1   *-.A3*G*G   O  3    033F/Q/Q  
  
  #	   #  	   Mk kr6   )single_tensor_fnFr   c                   t          d |D                       st          d          t          d |D                       st          d          |t          | |	d          \  }}|r-t          j                                        rt          d          |r&t          j                                        st          }nt          } || |||||||||||||||	|
	           dS )
zpFunctional API that performs NAdam algorithm computation.

    See :class:`~torch.optim.NAdam` for details.
    c              3   J   K   | ]}t          |t          j                  V  d S rk   r-   rD   r   r   ts     r5   r   znadam.<locals>.<genexpr>s  .      @@qz!U\**@@@@@@r6   zPAPI has changed, `state_steps` argument must contain a list of singleton tensorsc              3   J   K   | ]}t          |t          j                  V  d S rk   r   r   s     r5   r   znadam.<locals>.<genexpr>x  r   r6   zPAPI has changed, `mu_products` argument must contain a list of singleton tensorsNF)	use_fusedz6torch.jit.script not supported with foreach optimizers)rd   re   r$   r'   r(   r    r)   r&   r!   r"   ra   )r   rV   r	   rD   rx   ry   r   r   )r#   r\   r]   r^   r_   r`   r)   r   r!   r"   ra   r    rd   re   r$   r'   r(   r&   r   funcs                       r5   r   r   W  sC   8 @@K@@@@@ 
^
 
 	
 @@K@@@@@ 
^
 
 	
 1Ne
 
 

7  U59))++ USTTT $uy--// $"#D!%5%#     r6   )FNFFFF) __doc__typingr   r   r   rD   r   	optimizerr   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   __all__r   r   rF   ro   r   r   r   rN   r6   r5   <module>r      s   . . ( ( ( ( ( ( ( ( ( (                                          ( G
s s s s sI s s sn&N	  
  
  
   
!  O> F`L`<` 6l` f	`
 f` f` ` ` 	` ` ` 
` !` `  !`" #`$ %` ` ` `FXLX<X 6lX f	X
 fX fX X X 	X X X 
X !X X  !X" #X$ %X X X Xv  1EFFF $)" D DLD<D 6lD f	D
 fD fD !D d^D D D D D  !D" #D$ 	%D& 'D( )D* 
+D D D GFD D Dr6   