§
    Ë²ÅjˆB  ã                   ót  — d dl mZmZmZ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 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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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e         dededededededefd „¦   «         ZdS )"é    )ÚAnyÚcastÚDictÚListÚ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Ú_maximize_docÚ_params_docÚ_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ef         d
edededee         dedede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   ç      ð?çÍÌÌÌÌÌì?ç�íµ ÷Æ°>r   NF)Ú
capturableÚmaximizeÚdifferentiableÚparamsÚlrÚrhoÚepsÚweight_decayÚforeachr   r   r    c          
      óÄ  •— t          |t          ¦  «        r'|                     ¦   «         dk    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|› �¦  «        ‚t	          ||||||||	¬	¦  «        }
t          ¦   «                              ||
¦  «         d S )
Nr
   zTensor lr must be 1-elementg        zInvalid learning rate: r   zInvalid rho value: zInvalid epsilon value: zInvalid weight_decay value: )r"   r#   r$   r%   r   r   r&   r    )Ú
isinstancer	   ÚnumelÚ
ValueErrorÚdictÚsuperÚ__init__)Úselfr!   r"   r#   r$   r%   r&   r   r   r    ÚdefaultsÚ	__class__s              €úEC:\Projects\Historical\venv\Lib\site-packages\torch/optim/adadelta.pyr-   zAdadelta.__init__   s  ø€ õ �b�&Ñ!Ô!ð 	< b§h¢h¡j¤j°A¢o oÝÐ:Ñ;Ô;Ð;Ø�bŠyˆyÝÐ;°rÐ;Ð;Ñ<Ô<Ð<Ø�cÐ Ð Ò Ð ˜SÒ Ð Ð Ð ÝÐ8°3Ð8Ð8Ñ9Ô9Ð9Ø�cŠzˆzÝÐ<°sÐ<Ð<Ñ=Ô=Ð=Ø�lÒ"Ð"ÝÐJ¸LÐJÐJÑKÔKÐKåØØØØ%ØØ!ØØ)ð	
ñ 	
ô 	
ˆõ 	‰Œ×Ò˜ Ñ*Ô*Ð*Ð*Ð*ó    c                 óŒ  •— t          ¦   «                              |¦  «         | j        D �]}|                     dd ¦  «         |                     dd¦  «         |                     dd¦  «         |                     dd¦  «         |d         D ]´}| j                             |g ¦  «        }t          |¦  «        dk    r„t          j        |d         ¦  «        sjt          |d         ¦  «        }|d         r(t          j
        |t          ¦   «         |j        ¬	¦  «        n!t          j
        |t          ¦   «         ¬
¦  «        |d<   Œµ�Œd S )Nr&   r   Fr    r   r!   r   Ústep©ÚdtypeÚdevice©r6   )r,   Ú__setstate__Úparam_groupsÚ
setdefaultÚstateÚgetÚlenÚtorchÚ	is_tensorÚfloatÚtensorr   r7   )r.   r<   ÚgroupÚpÚp_stateÚstep_valr0   s         €r1   r9   zAdadelta.__setstate__A   sO  ø€ Ý‰Œ×Ò˜UÑ#Ô#Ð#ØÔ&ð 	ñ 	ˆEØ×Ò˜Y¨Ñ-Ô-Ð-Ø×Ò˜Z¨Ñ/Ô/Ð/Ø×ÒÐ-¨uÑ5Ô5Ð5Ø×Ò˜\¨5Ñ1Ô1Ð1Ø˜8”_ð 
ð 
�Øœ*Ÿ.š.¨¨BÑ/Ô/�Ý�w‘<”< 1Ò$Ð$­U¬_¸WÀV¼_Ñ-MÔ-MÐ$Ý$ W¨V¤_Ñ5Ô5�Hð
 ! Ô.ðO�œØ$Õ,=Ñ,?Ô,?ÈÌðñ ô ð õ #œ\¨(Õ:KÑ:MÔ:MÐNÑNÔNð ˜F‘Oøñ	
ð	ð 	r2   rC   Úparams_with_gradÚgradsÚsquare_avgsÚ
acc_deltasÚstate_stepsc                 ó  — d}|d         D �]x}|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	<   t          j        |t          j        ¬
¦  «        |	d<   t          j        |t          j        ¬
¦  «        |	d<   |                     |	d         ¦  «         |                     |	d         ¦  «         |                     |	d	         ¦  «         �Œz|S )NFr!   z*Adadelta does not support sparse gradientsr   r   © r5   r8   r4   )Úmemory_formatÚ
square_avgÚ	acc_delta)Úgradr?   Ú
is_complexÚappendÚ	is_sparseÚRuntimeErrorr<   r>   Úzerosr   r7   Ú
zeros_likeÚpreserve_format)
r.   rC   rG   rH   rI   rJ   rK   Úhas_complexrD   r<   s
             r1   Ú_init_groupzAdadelta._init_groupT   sŽ  € ð ˆà�x”ð 	.ñ 	.ˆAØŒvˆ~ØØ�5Ô+¨AÑ.Ô.Ñ.ˆKØ×#Ò# AÑ&Ô&Ð&ØŒvÔð QÝ"Ð#OÑPÔPÐPØ�LŠL˜œÑ Ô Ð à”J˜q”MˆEõ �5‰zŒz˜QŠˆð ˜\Ô*ðD•E”K Õ*;Ñ*=Ô*=ÀaÄhÐOÑOÔOÐOåœ RÕ/@Ñ/BÔ/BÐCÑCÔCð �f‘õ ',Ô&6Ø¥UÔ%:ð'ñ 'ô '��lÑ#õ &+Ô%5Ø¥UÔ%:ð&ñ &ô &��kÑ"ð ×Ò˜u \Ô2Ñ3Ô3Ð3Ø×Ò˜e KÔ0Ñ1Ô1Ð1Ø×Ò˜u Vœ}Ñ-Ô-Ð-Ñ-àÐr2   c                 ó¼  — |                       ¦   «          d}|�5t          j        ¦   «         5   |¦   «         }ddd¦  «         n# 1 swxY w Y   | j        D ]†}g }g }g }g }g }|d         |d         |d         |d         |d         |d         |d         |d	         f\  }	}
}}}}}}|                      ||||||¦  «        }t          ||||||	|
|||||||¬
¦  «         Œ‡|S )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   rY   )Ú _cuda_graph_capture_health_checkr?   Úenable_gradr:   rZ   r   )r.   ÚclosureÚlossrC   rG   rH   rI   rJ   rK   r"   r#   r$   r%   r&   r   r    r   rY   s                     r1   r4   zAdadelta.step   s”  € ð 	×-Ò-Ñ/Ô/Ð/àˆØÐÝÔ"Ñ$Ô$ð !ð !Ø�w‘y”y�ð!ð !ð !ñ !ô !ð !ð !ð !ð !ð !ð !øøøð !ð !ð !ð !ð Ô&ð -	ð -	ˆEØ-/ÐØ"$ˆEØ(*ˆKØ')ˆJØ(*ˆKð �d”Ø�e”Ø�e”Ø�nÔ%Ø�iÔ Ø�jÔ!ØÐ&Ô'Ø�lÔ#ð	ñ	ØØØØØØØØð ×*Ò*ØÐ'¨°¸ZÈñô ˆKõ Ø ØØØØØØØØ)ØØ!Ø-Ø%Ø'ðñ ô ð ð ð" ˆs   ¬AÁAÁ
A)r   r   r   r   N©N)Ú__name__Ú
__module__Ú__qualname__r   r   rA   r	   r   Úboolr-   r9   r   Ústrr   r   rZ   r   r4   Ú__classcell__)r0   s   @r1   r   r      ss  ø€ € € € € ð $'ØØØØ"&ð"+ð !ØØ$ð"+ð "+ð "+àð"+ð �%˜�-Ô ð"+ð ð	"+ð
 ð"+ð ð"+ð ˜$”ð"+ð ð"+ð ð"+ð ð"+ð "+ð "+ð "+ð "+ð "+ðHð ð ð ð ð&)à�C˜�HŒ~ð)ð ˜vœ,ð)ð �FŒ|ð	)ð
 ˜&”\ð)ð ˜”Lð)ð ˜&”\ð)ð )ð )ð )ðV "ð=ð =ð =ñ "Ô!ð=ð =ð =ð =ð =r2   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!   rH   rI   rJ   rK   r"   r#   r$   r%   r   r    r   rY   c                óT  ‡— t           j                             ¦   «         sI|rGt          d¬¦  «        Št	          ˆfd„t          | |¦  «        D ¦   «         ¦  «        sJ d‰› d�¦   «         ‚t          | ||||¦  «        D �]ª\  }}}}}|dz  }|	s|n| }|dk    r|                     ||¬¦  «        }t          j        |¦  «        r<t          j        |¦  «        }t          j        |¦  «        }t          j        |¦  «        }| 	                    |¦  «         
                    ||d|z
  ¬	¦  «         |                     |¦  «                             ¦   «         }|                     |¦  «                             ¦   «         }|
r|                     ¦   «         }|                     |¦  «         	                    |¦  «         | 	                    |¦  «         
                    ||d|z
  ¬	¦  «         t          j        |¦  «        rt          j        |¦  «        }|                     || ¬¦  «         �Œ¬d S )
NF©Úsupports_xlac              3   ón   •K  — | ]/\  }}|j         j        |j         j        k    o|j         j        ‰v V — Œ0d S r`   ©r7   Útype©Ú.0rD   r4   Úcapturable_supported_devicess      €r1   ú	<genexpr>z*_single_tensor_adadelta.<locals>.<genexpr>
  ó]   øè è € ð 
ð 
ñ ��4ð ŒHŒM˜Tœ[Ô-Ò-ð >Ø””Ð!=Ð=ð
ð 
ð 
ð 
ð 
ð 
r2   úIIf capturable=True, params and state_steps must be on supported devices: ú.r
   r   ©Úalpha©Úvalue)r?   ÚcompilerÚis_compilingr   ÚallÚzipÚaddrR   Úview_as_realÚmul_Úaddcmul_Úsqrt_ÚcloneÚdiv_Úview_as_complexÚadd_)r!   rH   rI   rJ   rK   r"   r#   r$   r%   r   r    r   rY   ÚparamrQ   rO   rP   r4   ÚstdÚdeltaro   s                       @r1   Ú_single_tensor_adadeltarˆ   õ   sf  ø€ õ" Œ>×&Ò&Ñ(Ô(ð w¨Zð wÝ'HØð(
ñ (
ô (
Ð$õ ð 
ð 
ð 
ð 
õ ˜v {Ñ3Ô3ð
ñ 
ô 
ñ 
ô 
ð 	wð 	wð wÐWsÐvÐvÐvñ		wô 	wð 
õ 58Ø��{ J°ñ5ô 5ð %ñ %Ñ0ˆˆt�Z ¨Dð 	�‰	ˆØ#Ð.ˆtˆt¨$¨ˆà˜1ÒÐØ—8’8˜E¨�8Ñ6Ô6ˆDåÔ˜EÑ"Ô"ð 	,ÝÔ+¨JÑ7Ô7ˆJÝÔ*¨9Ñ5Ô5ˆIÝÔ% dÑ+Ô+ˆDà�Š˜ÑÔ×%Ò% d¨D¸¸C¹Ð%Ñ@Ô@Ð@Ø�nŠn˜SÑ!Ô!×'Ò'Ñ)Ô)ˆØ—’˜cÑ"Ô"×(Ò(Ñ*Ô*ˆØð 	"Ø—K’K‘M”MˆEØ�
Š
�3‰Œ×Ò˜TÑ"Ô"Ð"Ø�Š�sÑÔ×$Ò$ U¨E¸¸S¹Ð$ÑAÔAÐAåÔ˜EÑ"Ô"ð 	1ÝÔ)¨%Ñ0Ô0ˆEØ�
Š
�5  ˆ
Ñ$Ô$Ð$Ñ$ð1%ð %r2   c                óâ  ‡— |
r
J d¦   «         ‚t           j                             ¦   «         sI|rGt          d¬¦  «        Št	          ˆfd„t          | |¦  «        D ¦   «         ¦  «        sJ d‰› d�¦   «         ‚t          | ¦  «        dk    rd S t          j        | ||||g¦  «        }| 	                    ¦   «         D �]¶\  \  }}}}}}t          t          t                   |¦  «        }t          t          t                   |¦  «        }t          t          t                   |¦  «        }t          t          t                   |¦  «        }t          t          t                   |¦  «        }|rt          ||||¦  «         t           j                             ¦   «         s9|d         j        r,t          j        |t          j        dd	¬
¦  «        d¬¦  «         nt          j        |d¦  «         |	rt          j        |¦  «        }|dk    r1|	rt          j        |||¬¦  «         nt          j        |||¬¦  «        }t          j        ||¦  «         t          j        |||d|z
  ¬¦  «         t          j        ||¦  «        }t          j        |¦  «         t          j        ||¦  «        }t          j        |¦  «         t          j        ||¦  «         t          j        ||¦  «         t          j        ||¦  «         t          j        |||d|z
  ¬¦  «         |rGt/          |t           j        ¦  «        r-t          j        || ¦  «         t          j        ||¦  «         �Œžt          j        ||| ¬¦  «         �Œ¸d S )Nz#_foreach ops don't support autogradFrh   c              3   ón   •K  — | ]/\  }}|j         j        |j         j        k    o|j         j        ‰v V — Œ0d S r`   rk   rm   s      €r1   rp   z)_multi_tensor_adadelta.<locals>.<genexpr>B  rq   r2   rr   rs   r   r   Úcpu)r7   rt   r
   rv   )r?   rx   ry   r   rz   r{   r>   r   Ú"_group_tensors_by_device_and_dtypeÚvaluesr   r   r	   r   Úis_cpuÚ_foreach_add_rB   Ú_foreach_negÚ_foreach_addÚ_foreach_mul_Ú_foreach_addcmul_Ú_foreach_sqrt_Ú_foreach_div_r(   )r!   rH   rI   rJ   rK   r"   r#   r$   r%   r   r    r   rY   Ú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†   Údeltasro   s                              @r1   Ú_multi_tensor_adadeltar£   +  sé  ø€ ð  ÐDÐDÐDÑDÔDÐõ Œ>×&Ò&Ñ(Ô(ð w¨Zð wÝ'HØð(
ñ (
ô (
Ð$õ ð 
ð 
ð 
ð 
õ ˜v {Ñ3Ô3ð
ñ 
ô 
ñ 
ô 
ð 	wð 	wð wÐWsÐvÐvÐvñ		wô 	wð 
õ ˆ6�{„{�aÒÐØˆåÔBØ	�˜ Z°Ð=ñô €Oð ×"Ò"Ñ$Ô$ð>Bñ >Bñ 		ñ 	ØØØØØØÝ�T¥&œ\¨>Ñ:Ô:ˆÝ�D¥œL¨-Ñ8Ô8ˆÝ!¥$¥v¤,Ð0CÑDÔDÐÝ ¥¥f¤Ð/AÑBÔBÐÝ!¥$¥v¤,Ð0CÑDÔDÐØð 	ÝØ˜|Ð-?ÐARñô ð õ Œ~×*Ò*Ñ,Ô,ð 	7Ð1CÀAÔ1FÔ1Mð 	7ÝÔØ"¥E¤L°¸UÐ$CÑ$CÔ$CÈ3ðñ ô ð ð õ ÔÐ 2°AÑ6Ô6Ð6àð 	<Ý Ô-¨lÑ;Ô;ˆLà˜1ÒÐàð ÝÔ# L°-À|ÐTÑTÔTÐTÐTå$Ô1Ø  -°|ð ñ  ô  �õ 	ÔÐ.°Ñ4Ô4Ð4ÝÔØ ¨lÀ!ÀcÁ'ð	
ñ 	
ô 	
ð 	
õ Ô Ð!3°SÑ9Ô9ˆÝÔ˜SÑ!Ô!Ð!åÔ#Ð$5°sÑ;Ô;ˆÝÔ˜VÑ$Ô$Ð$ÝÔ˜F CÑ(Ô(Ð(ÝÔ˜F LÑ1Ô1Ð1åÔÐ-¨sÑ3Ô3Ð3ÝÔÐ 1°6¸6ÈÈSÉÐQÑQÔQÐQð ð 	B�* R­¬Ñ6Ô6ð 	BÝÔ ¨¨Ñ,Ô,Ð,ÝÔ ¨vÑ6Ô6Ð6Ñ6åÔ ¨v¸b¸SÐAÑAÔAÐAÑAð}>Bð >Br2   )Úsingle_tensor_fnFr&   c	                ó¬  — t           j                             ¦   «         s(t          d„ |D ¦   «         ¦  «        st	          d¦  «        ‚|€t          | |d¬¦  «        \  }}|r-t           j                             ¦   «         rt	          d¦  «        ‚|r&t           j                             ¦   «         st          }nt          } || |||||	|
||||||¬¦  «         dS )zvFunctional API that performs Adadelta algorithm computation.

    See :class:`~torch.optim.Adadelta` for details.
    c              3   óJ   K  — | ]}t          |t          j        ¦  «        V — Œd S r`   )r(   r?   r	   )rn   Úts     r1   rp   zadadelta.<locals>.<genexpr>ª  s?   è è € ð 5ð 5Ø()�
�1•e”lÑ#Ô#ð5ð 5ð 5ð 5ð 5ð 5r2   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   rY   )
r?   rx   ry   rz   rU   r   ÚjitÚis_scriptingr£   rˆ   )r!   rH   rI   rJ   rK   r   r&   r    rY   r"   r#   r$   r%   r   rœ   Úfuncs                   r1   r   r   �  s'  € õ6 Œ>×&Ò&Ñ(Ô(ð 
µð 5ð 5Ø-8ð5ñ 5ô 5ñ 2ô 2ð 
õ Ø^ñ
ô 
ð 	
ð
 €Ý1Ø�N¨eð
ñ 
ô 
‰
ˆˆ7ð ð U•5”9×)Ò)Ñ+Ô+ð UÝÐSÑTÔTÐTàð '•u”y×-Ò-Ñ/Ô/ð 'Ý%ˆˆå&ˆà€DØØØØØØØØØ!ØØ%ØØðñ ô ð ð ð r2   )FNFF)Útypingr   r   r   r   r   r   r?   r	   Ú	optimizerr   r   r   r   r   r   r   r   r   r   r   r   r   Ú__all__r   Ú__doc__rA   rd   rˆ   r£   r   rM   r2   r1   ú<module>r°      së  ðð :Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9à €€€Ø Ð Ð Ð Ð Ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð" �zÐ
"€ðað að að að aˆyñ aô að aðJð8à	ðð ð 
ðð ð 
ðð ð 
ðð ð 
ðð ð ñ90ð 	Ô ðj3%Ø�ŒLð3%à�Œ<ð3%ð �f”ð3%ð �V”ð	3%ð
 �f”ð3%ð 	ð3%ð 
ð3%ð 
ð3%ð ð3%ð ð3%ð ð3%ð ð3%ð ð3%ð 3%ð 3%ð 3%ðlaBØ�ŒLðaBà�Œ<ðaBð �f”ðaBð �V”ð	aBð
 �f”ðaBð 	ðaBð 
ðaBð 
ðaBð ðaBð ðaBð ðaBð ðaBð ðaBð aBð aBð aBðH  ÐÐ1HÐIÑIÔIð Ø"Ø Øð=ð =Ø�ŒLð=à�Œ<ð=ð �f”ð=ð �V”ð	=ð
 �f”ð=ð ð=ð �dŒ^ð=ð ð=ð ð=ð 	ð=ð 
ð=ð 
ð=ð  ð!=ð" ð#=ð =ð =ñ JÔIð=ð =ð =r2   