Ë
    ùÿæiÓA  ã                    ó   — d dl 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 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de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de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dedz  dedededededededdfd „«       Zy)"é    )ÚAnyÚcastN)ÚTensoré   )Ú_capturable_docÚ_default_to_fused_or_foreachÚ_differentiable_docÚ_disable_dynamo_if_unsupportedÚ_foreach_docÚ!_get_capturable_supported_devicesÚ_get_scalar_dtypeÚ_maximize_docÚ_params_docÚ
_to_scalarÚ_use_grad_for_differentiableÚ_view_as_realÚ	OptimizerÚParamsTÚAdadeltaÚadadeltac                   óÎ   ‡ — e Zd Z	 	 	 	 	 dddddœdedeez  dededed	edz  d
edededdfˆ fd„Zˆ fd„Zde	e
ef   dee   dee   dee   dee   dee   fd„Zedd„«       Zˆ xZS )r   NF)Ú
capturableÚmaximizeÚdifferentiableÚparamsÚlrÚrhoÚepsÚweight_decayÚforeachr   r   r   Úreturnc          	      ó@  •— t        |t        «      r|j                  «       dk7  rt        d«      ‚d|k  st        d|› �«      ‚d|cxk  rdk  sn t        d|› �«      ‚d|k  st        d|› �«      ‚d|k  st        d|› �«      ‚||||||||	d	œ}
t        ‰| �  ||
«       y )
Nr   zTensor lr must be 1-elementg        zInvalid learning rate: ç      ð?zInvalid rho value: zInvalid epsilon value: zInvalid weight_decay value: )r   r   r   r   r   r   r    r   )Ú
isinstancer   ÚnumelÚ
ValueErrorÚsuperÚ__init__)Úselfr   r   r   r   r   r    r   r   r   ÚdefaultsÚ	__class__s              €úi/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/torch/optim/adadelta.pyr(   zAdadelta.__init__   sÈ   ø€ ô �bœ&Ô! b§h¡h£j°A¢oÜÐ:Ó;Ð;Ø�bŠyÜÐ6°r°dÐ;Ó<Ð<Ø�cÔ ˜SÔ ÜÐ2°3°%Ð8Ó9Ð9Ø�cŠzÜÐ6°s°eÐ<Ó=Ð=Ø�lÒ"ÜÐ;¸L¸>ÐJÓKÐKð ØØØ(Ø Ø$ØØ,ñ	
ˆô 	‰Ñ˜ Õ*ó    c                 ó0  •— t         ‰| �  |«       | j                  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   r*t        j                  |t        «       |j                  ¬	«      nt        j                  |t        «       ¬
«      |d<   Œ§ Œù y )Nr    r   Fr   r   r   r   Ústep©ÚdtypeÚdevice©r1   )r'   Ú__setstate__Úparam_groupsÚ
setdefaultÚstateÚgetÚlenÚtorchÚ	is_tensorÚfloatÚtensorr   r2   )r)   r7   ÚgroupÚpÚp_stateÚstep_valr+   s         €r,   r4   zAdadelta.__setstate__A   sð   ø€ Ü‰Ñ˜UÔ#Ø×&Ô&ˆEØ×Ñ˜Y¨Ô-Ø×Ñ˜Z¨Ô/Ø×ÑÐ-¨uÔ5Ø×Ñ˜\¨5Ô1Ø˜8”_�ØŸ*™*Ÿ.™.¨¨BÓ/�Ü�w“< 1Ó$¬U¯_©_¸WÀV¹_Õ-MÜ$ W¨V¡_Ó5�Hð
 ! Ò.ô Ÿ™Ø$Ô,=Ó,?ÈÏÉõô #Ÿ\™\¨(Ô:KÓ:MÔNð ˜F’Oñ	 %ñ 'r-   r>   Úparams_with_gradÚgradsÚsquare_avgsÚ
acc_deltasÚstate_stepsc                 óú  — d}|d   D �]o  }|j                   €Œ|t        j                  |«      z  }|j                  |«       |j                   j                  rt        d«      ‚|j                  |j                   «       | j                  |   }	t        |	«      dk(  r¡|d   r*t        j                  dt        «       |j                  ¬«      nt        j                  dt        «       ¬«      |	d	<   t        j                  |t        j                  ¬
«      |	d<   t        j                  |t        j                  ¬
«      |	d<   |j                  |	d   «       |j                  |	d   «       |j                  |	d	   «       �Œr |S )NFr   z*Adadelta does not support sparse gradientsr   r   © r0   r3   r/   )Úmemory_formatÚ
square_avgÚ	acc_delta)Úgradr:   Ú
is_complexÚappendÚ	is_sparseÚRuntimeErrorr7   r9   Úzerosr   r2   Ú
zeros_likeÚpreserve_format)
r)   r>   rB   rC   rD   rE   rF   Úhas_complexr?   r7   s
             r,   Ú_init_groupzAdadelta._init_groupT   sN  € ð ˆà�x•ˆAØ�v‰vˆ~ØØœ5×+Ñ+¨AÓ.Ñ.ˆKØ×#Ñ# AÔ&Ø�v‰v×ÒÜ"Ð#OÓPÐPØ�L‰L˜Ÿ™Ô à—J‘J˜q‘MˆEô �5‹z˜QŠð ˜\Ò*ô —K‘K Ô*;Ó*=ÀaÇhÁhÕOäŸ™ RÔ/@Ó/BÔCð �f‘ô ',×&6Ñ&6Ø¤U×%:Ñ%:ô'��lÑ#ô &+×%5Ñ%5Ø¤U×%:Ñ%:ô&��kÑ"ð ×Ñ˜u \Ñ2Ô3Ø×Ñ˜e KÑ0Ô1Ø×Ñ˜u V™}Ö-ð9 !ð< Ðr-   c                 óx  — | j                  «        d}|�$t        j                  «       5   |«       }ddd«       | j                  D ]f  }g }g }g }g }g }|d   |d   |d   |d   |d   |d   |d   |d	   f\  }	}
}}}}}}| j	                  ||||||«      }t        ||||||	|
|||||||¬
«       Œh |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   r   r   r    r   r   r   rT   )Ú'_accelerator_graph_capture_health_checkr:   Úenable_gradr5   rU   r   )r)   ÚclosureÚlossr>   rB   rC   rD   rE   rF   r   r   r   r   r    r   r   r   rT   s                     r,   r/   zAdadelta.step   s'  € ð 	×4Ñ4Ô6àˆØÐÜ×"Ñ"Õ$Ù“y�÷ %ð ×&Ô&ˆEØ-/ÐØ"$ˆEØ(*ˆKØ')ˆJØ(*ˆKð �d‘Ø�e‘Ø�e‘Ø�nÑ%Ø�iÑ Ø�jÑ!ØÐ&Ñ'Ø�lÑ#ð	ñ	ØØØØØØØØð ×*Ñ*ØÐ'¨°¸ZÈóˆKô Ø ØØØØØØØØ)ØØ!Ø-Ø%Ø'öð= 'ð^ ˆ÷e %Ð$ús   ©B0Â0B9)r#   gÍÌÌÌÌÌì?g�íµ ÷Æ°>r   N©N)Ú__name__Ú
__module__Ú__qualname__r   r<   r   Úboolr(   r4   ÚdictÚstrr   ÚlistrU   r   r/   Ú__classcell__)r+   s   @r,   r   r      s	  ø„ ð !ØØØØ#ð"+ð !ØØ$ò"+àð"+ð �F‰Nð"+ð ð	"+ð
 ð"+ð ð"+ð ˜‘ð"+ð ð"+ð ð"+ð ð"+ð 
õ"+ôHð&)à�C˜�H‰~ð)ð ˜v™,ð)ð �F‰|ð	)ð
 ˜&‘\ð)ð ˜‘Lð)ð ˜&‘\ó)ðV "ò=ó "ô=r-   a  Implements Adadelta algorithm.

    .. math::
       \begin{aligned}
            &\rule{110mm}{0.4pt}                                                                 \\
            &\textbf{input}      : \gamma \text{ (lr)}, \: \theta_0 \text{ (params)},
                \: f(\theta) \text{ (objective)}, \: \rho \text{ (decay)},
                \: \lambda \text{ (weight decay)}                                                \\
            &\textbf{initialize} :  v_0  \leftarrow 0 \: \text{ (square avg)},
                \: u_0 \leftarrow 0 \: \text{ (accumulate variables)}                     \\[-1.ex]
            &\rule{110mm}{0.4pt}                                                                 \\
            &\textbf{for} \: t=1 \: \textbf{to} \: \ldots \: \textbf{do}                         \\
            &\hspace{5mm}g_t           \leftarrow   \nabla_{\theta} f_t (\theta_{t-1})           \\
            &\hspace{5mm}if \: \lambda \neq 0                                                    \\
            &\hspace{10mm} g_t \leftarrow g_t + \lambda  \theta_{t-1}                            \\
            &\hspace{5mm} v_t      \leftarrow v_{t-1} \rho + g^2_t (1 - \rho)                    \\
            &\hspace{5mm}\Delta x_t    \leftarrow   \frac{\sqrt{u_{t-1} +
                \epsilon }}{ \sqrt{v_t + \epsilon}  }g_t \hspace{21mm}                           \\
            &\hspace{5mm} u_t  \leftarrow   u_{t-1}  \rho +
                 \Delta x^2_t  (1 - \rho)                                                        \\
            &\hspace{5mm}\theta_t      \leftarrow   \theta_{t-1} - \gamma  \Delta x_t            \\
            &\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 `ADADELTA: An Adaptive Learning Rate Method`_.
    z
    Args:
        ar  
        lr (float, Tensor, optional): coefficient that scale delta before it is applied
            to the parameters (default: 1.0)
        rho (float, optional): coefficient used for computing a running average
            of squared gradients (default: 0.9). A higher value of `rho` will
            result in a slower average, which can be helpful for preventing
            oscillations in the learning process.
        eps (float, optional): term added to the denominator to improve
            numerical stability (default: 1e-6).
        weight_decay (float, optional): weight decay (L2 penalty) (default: 0)
        z	
        zd

    .. _ADADELTA\: An Adaptive Learning Rate Method:
        https://arxiv.org/abs/1212.5701

    r   rC   rD   rE   rF   r   r   r   r   r   r   r   rT   r!   c                ó.  ‡— t         j                  j                  «       s=|r;t        d¬«      Št	        ˆfd„t        | |d¬«      D «       «      st        d‰› d�«      ‚t         j                  j                  «       st        |«      }t        | ||||d¬«      D �]{  \  }}}}}|dz  }|	s|n| }|d	k7  r|j                  ||¬
«      }t        j                  |«      r?t        j                  |«      }t        j                  |«      }t        j                  |«      }|j                  |«      j                  ||d|z
  ¬«       |j                  |«      j                  «       }|j                  |«      j                  «       }|
r|j!                  «       }|j#                  |«      j                  |«       |j                  |«      j                  ||d|z
  ¬«       t        j                  |«      rt        j$                  |«      }|j'                  || ¬
«       �Œ~ y )NF©Úsupports_xlac              3   ó²   •K  — | ]N  \  }}|j                   j                  |j                   j                  k(  xr |j                   j                  ‰v –— ŒP y ­wr[   ©r2   Útype©Ú.0r?   r/   Úcapturable_supported_devicess      €r,   Ú	<genexpr>z*_single_tensor_adadelta.<locals>.<genexpr>
  óR   øè ø€ ð 
ñ A‘��4ð �H‰H�M‰M˜TŸ[™[×-Ñ-Ñ-ò >Ø—‘—‘Ð!=Ð=ó>á@ùó   ƒAAT©ÚstrictúIIf capturable=True, params and state_steps must be on supported devices: Ú.r   r   ©Úalpha©Úvalue)r:   ÚcompilerÚis_compilingr   ÚallÚzipÚAssertionErrorÚjitÚis_scriptingr   ÚaddrM   Úview_as_realÚmul_Úaddcmul_Úsqrt_ÚcloneÚdiv_Úview_as_complexÚadd_)r   rC   rD   rE   rF   r   r   r   r   r   r   r   rT   ÚparamrL   rJ   rK   r/   ÚstdÚdeltarl   s                       @r,   Ú_single_tensor_adadeltar‹   õ   sà  ø€ ô" �>‰>×&Ñ&Ô(©ZÜ'HØô(
Ð$ô ó 
ô ˜v {¸4Õ@ó
ô 
ô
 !Ø[Ð\xÐ[yÐyzÐ{óð ô �9‰9×!Ñ!Ô#Ü˜‹^ˆä47Ø��{ J°ÀD÷5ð 5Ñ0ˆˆt�Z ¨Dð 	�‰	ˆÙ#‰t¨$¨ˆà˜1ÒØ—8‘8˜E¨�8Ó6ˆDä×Ñ˜EÔ"Ü×+Ñ+¨JÓ7ˆJÜ×*Ñ*¨9Ó5ˆIÜ×%Ñ% dÓ+ˆDà�‰˜Ó×%Ñ% d¨D¸¸C¹Ð%Ô@Ø�n‰n˜SÓ!×'Ñ'Ó)ˆØ—‘˜cÓ"×(Ñ(Ó*ˆÙØ—K‘K“MˆEØ�
‰
�3‹×Ñ˜TÔ"Ø�‰�sÓ×$Ñ$ U¨E¸¸S¹Ð$ÔAä×Ñ˜EÔ"Ü×)Ñ)¨%Ó0ˆEØ�
‰
�5  ˆ
Ö$ñ15r-   c                ó˜  ‡— |
rt        d«      ‚t        j                  j                  «       s=|r;t	        d¬«      Št        ˆfd„t        | |d¬«      D «       «      st        d‰› d�«      ‚t        | «      d	k(  ry t        |«      }t        j                  | ||||g«      }|j                  «       D �]™  \  \  }}}}}}t        t        t           |«      }t        t        t           |«      }t        t        t           |«      }t        t        t           |«      }t        t        t           |«      }|rt        ||||«       t        j                  j                  «       s=|d	   j                   r.t        j"                  |t        j$                  d
d¬«      d
¬«       nt        j"                  |d«       |	rt        j&                  |«      }|d	k7  r3|	rt        j"                  |||¬«       nt        j(                  |||¬«      }t        j*                  ||«       t        j,                  |||d|z
  ¬«       t        j(                  ||«      }t        j.                  |«       t        j(                  ||«      }t        j.                  |«       t        j0                  ||«       t        j*                  ||«       t        j*                  ||«       t        j,                  |||d|z
  ¬«       |rIt3        |t        j                  «      r/t        j*                  || «       t        j"                  ||«       �Œ�t        j"                  ||| ¬«       �Œœ y )Nz#_foreach ops don't support autogradFre   c              3   ó²   •K  — | ]N  \  }}|j                   j                  |j                   j                  k(  xr |j                   j                  ‰v –— ŒP y ­wr[   rh   rj   s      €r,   rm   z)_multi_tensor_adadelta.<locals>.<genexpr>I  rn   ro   Trp   rr   rs   r   r#   Úcpu)r2   rt   r   rv   )r|   r:   rx   ry   r   rz   r{   r9   r   r   Ú"_group_tensors_by_device_and_dtypeÚvaluesr   rb   r   r   Úis_cpuÚ_foreach_add_r=   Ú_foreach_negÚ_foreach_addÚ_foreach_mul_Ú_foreach_addcmul_Ú_foreach_sqrt_Ú_foreach_div_r$   )r   rC   rD   rE   rF   r   r   r   r   r   r   r   rT   Úgrouped_tensorsÚdevice_params_Údevice_grads_Údevice_square_avgs_Údevice_acc_deltas_Údevice_state_steps_Ú_Údevice_paramsÚdevice_gradsÚdevice_square_avgsÚdevice_acc_deltasÚdevice_state_stepsr‰   Údeltasrl   s                              @r,   Ú_multi_tensor_adadeltar¦   1  sè  ø€ ñ  ÜÐBÓCÐCô �>‰>×&Ñ&Ô(©ZÜ'HØô(
Ð$ô ó 
ô ˜v {¸4Õ@ó
ô 
ô
 !Ø[Ð\xÐ[yÐyzÐ{óð ô ˆ6ƒ{�aÒØä	�B‹€Bä×BÑBØ	�˜ Z°Ð=ó€Oð ×"Ñ"×$ñ		ñ 	ØØØØØØÜœT¤&™\¨>Ó:ˆÜœD¤™L¨-Ó8ˆÜ!¤$¤v¡,Ð0CÓDÐÜ ¤¤f¡Ð/AÓBÐÜ!¤$¤v¡,Ð0CÓDÐÙÜØ˜|Ð-?ÐARôô �~‰~×*Ñ*Ô,Ð1CÀAÑ1F×1MÒ1MÜ×ÑØ"¤E§L¡L°¸UÔ$CÈ3öô ×ÑÐ 2°AÔ6áÜ ×-Ñ-¨lÓ;ˆLà˜1ÒáÜ×#Ñ# L°-À|ÖTä$×1Ñ1Ø  -°|ô �ô 	×ÑÐ.°Ô4Ü×ÑØ ¨lÀ!ÀcÁ'õ	
ô × Ñ Ð!3°SÓ9ˆÜ×Ñ˜SÔ!ä×#Ñ#Ð$5°sÓ;ˆÜ×Ñ˜VÔ$Ü×Ñ˜F CÔ(Ü×Ñ˜F LÔ1ä×ÑÐ-¨sÔ3Ü×ÑÐ 1°6¸6ÈÈSÉÕQñ œ* R¬¯©Ô6Ü×Ñ ¨¨Ô,Ü×Ñ ¨vÖ6ä×Ñ ¨v¸b¸S×Añq %r-   )Úsingle_tensor_fnr    c	                óz  — t         j                  j                  «       st        d„ |D «       «      st	        d«      ‚|€t        | |d¬«      \  }}|r)t         j                  j                  «       rt	        d«      ‚|r%t         j                  j                  «       st        }nt        } || |||||	|
||||||¬«       y)zvFunctional API that performs Adadelta algorithm computation.

    See :class:`~torch.optim.Adadelta` for details.
    c              3   óP   K  — | ]  }t        |t        j                  «      –— Œ  y ­wr[   )r$   r:   r   )rk   Úts     r,   rm   zadadelta.<locals>.<genexpr>¶  s   è ø€ ð 5Ù-8¨Œ
�1”e—l‘l×#©[ùs   ‚$&zPAPI has changed, `state_steps` argument must contain a list of singleton tensorsNF)Ú	use_fusedz6torch.jit.script not supported with foreach optimizers)r   r   r   r   r   r   r   rT   )
r:   rx   ry   rz   rP   r   r}   r~   r¦   r‹   )r   rC   rD   rE   rF   r   r    r   rT   r   r   r   r   r   rŸ   Úfuncs                   r,   r   r   ›  sÁ   € ô6 �>‰>×&Ñ&Ô(´ñ 5Ù-8ó5ô 2ô Ø^ó
ð 	
ð
 €Ü1Ø�N¨eô
‰
ˆˆ7ñ ”5—9‘9×)Ñ)Ô+ÜÐSÓTÐTá”u—y‘y×-Ñ-Ô/Ü%‰ä&ˆáØØØØØØØØØ!ØØ%ØØör-   )FNFF)Útypingr   r   r:   r   Ú	optimizerr   r   r	   r
   r   r   r   r   r   r   r   r   r   r   Ú__all__r   Ú__doc__rb   r<   r_   r‹   r¦   r   rH   r-   r,   Ú<module>r±      sÅ  ðç ã Ý ÷÷ ÷ ÷ ð$ �zÐ
"€ôaˆyô aðJð8	à	ˆð 
	ð 
ˆð 	Ø	Ðð 	Ø	ˆð 	Ø	Ðð ðñ90ð 	Ô ðj9%Ø�‰Lð9%à�‰<ð9%ð �f‘ð9%ð �V‘ð	9%ð
 �f‘ð9%ð 	ð9%ð 
ð9%ð 
ð9%ð ð9%ð ð9%ð ð9%ð ð9%ð ð9%ð 
ó9%ðxgBØ�‰LðgBà�‰<ðgBð �f‘ðgBð �V‘ð	gBð
 �f‘ðgBð 	ðgBð 
ðgBð 
ðgBð ðgBð ðgBð ðgBð ðgBð ðgBð 
ógBñT  Ð1HÔIð ØØ Øñ=Ø�‰Lð=à�‰<ð=ð �f‘ð=ð �V‘ð	=ð
 �f‘ð=ð ð=ð �D‰[ð=ð ð=ð ð=ð 	ð=ð 
ð=ð 
ð=ð  ð!=ð" ð#=ð$ 
ò%=ó Jñ=r-   