§
    Ë²Åj&F  ã                   óv  — d Z ddl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e         dedededededededefd!„¦   «         ZdS )#z1Implementation for the Resilient backpropagation.é    )ÚcastÚListÚOptionalÚTupleÚ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ÚRpropÚrpropc                   ó¸   ‡ — e Zd Z	 	 	 ddddddœdedeeef         d	eeef         d
eeef         dede	e         dedefˆ fd„Z
ˆ fd„Zd„ Zedd„¦   «         Zˆ xZS )r   ç{®Gáz„?©g      à?g333333ó?©g�íµ ÷Æ°>é2   FN)Ú
capturableÚforeachÚmaximizeÚdifferentiableÚparamsÚlrÚetasÚ
step_sizesr   r   r    r!   c          	      ó¦  •— t          |t          ¦  «        r'|                     ¦   «         dk    rt          d¦  «        ‚d|k    st          d|› �¦  «        ‚d|d         cxk     rdcxk     r|d         k     s#n t          d|d         › d|d         › �¦  «        ‚t	          |||||||¬	¦  «        }	t          ¦   «                              ||	¦  «         d S )
Nr	   zTensor lr must be 1-elementg        zInvalid learning rate: r   ç      ð?zInvalid eta values: z, )r#   r$   r%   r   r    r!   r   )Ú
isinstancer   ÚnumelÚ
ValueErrorÚdictÚsuperÚ__init__)Úselfr"   r#   r$   r%   r   r   r    r!   ÚdefaultsÚ	__class__s             €úBC:\Projects\Historical\venv\Lib\site-packages\torch/optim/rprop.pyr-   zRprop.__init__   sý   ø€ õ �b�&Ñ!Ô!ð 	< b§h¢h¡j¤j°A¢o oÝÐ:Ñ;Ô;Ð;Ø�bŠyˆyÝÐ;°rÐ;Ð;Ñ<Ô<Ð<Ø�T˜!”WÐ,Ð,Ò,Ð,˜sÐ,Ð,Ò,Ð, T¨!¤WÒ,Ð,Ð,Ð,ÝÐH°D¸´GÐHÐH¸tÀA¼wÐHÐHÑIÔIÐIåØØØ!ØØØ)Ø!ð
ñ 
ô 
ˆõ 	‰Œ×Ò˜ Ñ*Ô*Ð*Ð*Ð*ó    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Rprop.__setstate__<   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   c           	      ó|  — d}|d         D �]¯}|j         €Œ|t          j        |¦  «        z  }|                     |¦  «         |j         }	|	j        rt          d¦  «        ‚|                     |	¦  «         | j        |         }
t          |
¦  «        dk    rÕ|d         r(t          j        dt          ¦   «         |j
        ¬¦  «        n!t          j        dt          ¦   «         ¬¦  «        |
d	<   t          j        |t          j        ¬
¦  «        |
d<   |j        j        r3t          j        |	t          |d         |d         ¦  «        ¦  «        |
d<   nt          j        |	|d         ¦  «        |
d<   |                     |
d         ¦  «         |                     |
d         ¦  «         |                     |
d	         ¦  «         �Œ±|S )NFr"   z'Rprop does not support sparse gradientsr   r   © r5   r8   r4   ©Úmemory_formatÚprevr#   Ú	step_size)Úgradr?   Ú
is_complexÚappendÚ	is_sparseÚRuntimeErrorr<   r>   Úzerosr   r7   Ú
zeros_likeÚpreserve_formatr6   Ú	full_likeÚcomplex)r.   rC   r"   ÚgradsÚprevsr%   Ústate_stepsÚhas_complexrD   rM   r<   s              r1   Ú_init_groupzRprop._init_groupO   sµ  € ØˆØ�x”ð  	.ñ  	.ˆAØŒvˆ~ØØ�5Ô+¨AÑ.Ô.Ñ.ˆKØ�MŠM˜!ÑÔÐØ”6ˆDØŒ~ð NÝ"Ð#LÑMÔMÐMà�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‘õ !&Ô 0°Å%ÔBWÐ XÑ XÔ X��f‘Ø”7Ô%ð Lõ */¬Ø�g e¨D¤k°5¸´;Ñ?Ô?ñ*ô *�E˜+Ñ&Ð&õ */¬¸¸uÀT¼{Ñ)KÔ)K�E˜+Ñ&à�LŠL˜˜vœÑ'Ô'Ð'Ø×Ò˜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 ]u}g }g }g }g }g }|d         \  }	}
|d         \  }}|d         }|d         }|                      ||||||¦  «        }t          ||||||||	|
|||d         |d         |¬¦  «         Œv|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   )	Ústep_size_minÚstep_size_maxÚetaminusÚetaplusr   r    r!   r   rZ   )Ú _cuda_graph_capture_health_checkr?   Úenable_gradr:   r[   r   )r.   ÚclosureÚlossrC   r"   rW   rX   r%   rY   r_   r`   r]   r^   r   r    rZ   s                   r1   r4   z
Rprop.stepu   sj  € ð 	×-Ò-Ñ/Ô/Ð/àˆØÐÝÔ"Ñ$Ô$ð !ð !Ø�w‘y”y�ð!ð !ð !ñ !ô !ð !ð !ð !ð !ð !ð !øøøð !ð !ð !ð !ð Ô&ð 	ð 	ˆEØ#%ˆFØ"$ˆEØ"$ˆEØ')ˆJØ(*ˆKà % f¤ÑˆH�gØ+0°Ô+>Ñ(ˆM˜=Ø˜IÔ&ˆGØ˜ZÔ(ˆHà×*Ò*Ø�v˜u e¨Z¸ñô ˆKõ ØØØØØØ+Ø+Ø!ØØØ!Ø$Ð%5Ô6Ø  Ô.Ø'ðñ ô ð ð ð" ˆs   ¬AÁAÁ
A)r   r   r   ©N)Ú__name__Ú
__module__Ú__qualname__r   r   rA   r   r   Úboolr   r-   r9   r[   r   r4   Ú__classcell__)r0   s   @r1   r   r      s  ø€ € € € € ð $(Ø$.Ø*4ð+ð !Ø"&ØØ$ð+ð +ð +àð+ð �%˜�-Ô ð+ð �E˜5�LÔ!ð	+ð
 ˜% ˜,Ô'ð+ð ð+ð ˜$”ð+ð ð+ð ð+ð +ð +ð +ð +ð +ð<ð ð ð ð ð&$ð $ð $ðL "ð/ð /ð /ñ "Ô!ð/ð /ð /ð /ð /r2   aÁ
  Implements the resilient backpropagation algorithm.

    .. math::
       \begin{aligned}
            &\rule{110mm}{0.4pt}                                                                 \\
            &\textbf{input}      : \theta_0 \in \mathbf{R}^d \text{ (params)},f(\theta)
                \text{ (objective)},                                                             \\
            &\hspace{13mm}      \eta_{+/-} \text{ (etaplus, etaminus)}, \Gamma_{max/min}
                \text{ (step sizes)}                                                             \\
            &\textbf{initialize} :   g^0_{prev} \leftarrow 0,
                \: \eta_0 \leftarrow \text{lr (learning rate)}                                   \\
            &\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} \textbf{for} \text{  } i = 0, 1, \ldots, d-1 \: \mathbf{do}            \\
            &\hspace{10mm}  \textbf{if} \:   g^i_{prev} g^i_t  > 0                               \\
            &\hspace{15mm}  \eta^i_t \leftarrow \mathrm{min}(\eta^i_{t-1} \eta_{+},
                \Gamma_{max})                                                                    \\
            &\hspace{10mm}  \textbf{else if}  \:  g^i_{prev} g^i_t < 0                           \\
            &\hspace{15mm}  \eta^i_t \leftarrow \mathrm{max}(\eta^i_{t-1} \eta_{-},
                \Gamma_{min})                                                                    \\
            &\hspace{15mm}  g^i_t \leftarrow 0                                                   \\
            &\hspace{10mm}  \textbf{else}  \:                                                    \\
            &\hspace{15mm}  \eta^i_t \leftarrow \eta^i_{t-1}                                     \\
            &\hspace{5mm}\theta_t \leftarrow \theta_{t-1}- \eta_t \mathrm{sign}(g_t)             \\
            &\hspace{5mm}g_{prev} \leftarrow  g_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 the paper
    `A Direct Adaptive Method for Faster Backpropagation Learning: The RPROP Algorithm
    <http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.21.1417>`_.
    z
    Args:
        a{  
        lr (float, optional): learning rate (default: 1e-2)
        etas (Tuple[float, float], optional): pair of (etaminus, etaplus), that
            are multiplicative increase and decrease factors
            (default: (0.5, 1.2))
        step_sizes (Tuple[float, float], optional): a pair of minimal and
            maximal allowed step sizes (default: (1e-6, 50))
        z	
        z

    r"   rW   rX   r%   rY   r]   r^   r_   r`   r    r   r!   rZ   c                óž  — t          | ¦  «        D �];\  }}||         }|	s|n| }||         }||         }||         }t          j                             ¦   «         sF|
rDt	          ¦   «         }|j        j        |j        j        k    r|j        j        |v sJ d|› d�¦   «         ‚|dz  }t          j        |¦  «        rPt          j        |¦  «        }t          j        |¦  «        }t          j        |¦  «        }t          j        |¦  «        }|r:| 	                    | 
                    ¦   «         ¦  «                             ¦   «         }n'| 	                    |¦  «                             ¦   «         }|
rµ|                     t          j        |                     d¦  «        ||¦  «        ¦  «         |                     t          j        |                     d¦  «        ||¦  «        ¦  «         |                     t          j        |                     d¦  «        d|¦  «        ¦  «         nH|||                     d¦  «        <   |||                     d¦  «        <   d||                     d¦  «        <   |                     |¦  «                             ||¦  «         | 
                    t          j        ¬¦  «        }|
r=|                     t          j        |                     |¦  «        d|¦  «        ¦  «         nd||                     |¦  «        <   |                     |                     ¦   «         |d¬¦  «         |                     |¦  «         �Œ=d S )NúIIf capturable=True, params and state_steps must be on supported devices: ú.r	   r   rI   éÿÿÿÿ©Úvalue)Ú	enumerater?   ÚcompilerÚis_compilingr   r7   ÚtyperN   Úview_as_realÚmulÚcloneÚsignÚcopy_ÚwhereÚgtÚltÚeqÚmul_Úclamp_rT   Úaddcmul_)r"   rW   rX   r%   rY   r]   r^   r_   r`   r    r   r!   rZ   ÚiÚparamrM   rK   rL   r4   Úcapturable_supported_devicesrx   s                        r1   Ú_single_tensor_rpropr„   Þ   sÿ  € õ  ˜fÑ%Ô%ð 1ñ 1‰ˆˆ5Ø�QŒxˆØ#Ð.ˆtˆt¨$¨ˆØ�QŒxˆØ˜q”Mˆ	Ø˜1Œ~ˆõ Œ~×*Ò*Ñ,Ô,ð 	{°ð 	{Ý+LÑ+NÔ+NÐ(à”Ô! T¤[Ô%5Ò5Ð5Ø”LÔ%Ð)EÐEÐEÐEØzÐ[wÐzÐzÐzñ FÔEðFð 	�‰	ˆåÔ˜EÑ"Ô"ð 	6ÝÔ% dÑ+Ô+ˆDÝÔ% dÑ+Ô+ˆDÝÔ& uÑ-Ô-ˆEÝÔ*¨9Ñ5Ô5ˆIØð 	)Ø—8’8˜DŸJšJ™LœLÑ)Ô)×.Ò.Ñ0Ô0ˆDˆDà—8’8˜D‘>”>×&Ò&Ñ(Ô(ˆDàð 	!Ø�JŠJ•u”{ 4§7¢7¨1¡:¤:¨w¸Ñ=Ô=Ñ>Ô>Ð>Ø�JŠJ•u”{ 4§7¢7¨1¡:¤:¨x¸Ñ>Ô>Ñ?Ô?Ð?Ø�JŠJ•u”{ 4§7¢7¨1¡:¤:¨q°$Ñ7Ô7Ñ8Ô8Ð8Ð8à&ˆD�—’˜‘”ÑØ'ˆD�—’˜‘”ÑØ ˆD�—’˜‘”Ñð 	�Š�tÑÔ×#Ò# M°=ÑAÔAÐAð �zŠz­Ô(=ˆzÑ>Ô>ˆØð 	(Ø�JŠJ•u”{ 4§7¢7¨8Ñ#4Ô#4°a¸Ñ>Ô>Ñ?Ô?Ð?Ð?à&'ˆD�—’˜Ñ"Ô"Ñ#ð 	�Š�t—y’y‘{”{ I°RˆÑ8Ô8Ð8Ø�
Š
�4ÑÔÐÑðc1ð 1r2   c          
      óV  ‡— t          | ¦  «        dk    rd S |r
J d¦   «         ‚t          j                             ¦   «         sG|
rEt	          ¦   «         Št          ˆfd„t          | |¦  «        D ¦   «         ¦  «        sJ d‰› d�¦   «         ‚t          j        | ||||g¦  «        }| 	                    ¦   «         D �]r\  \  }}}}}}t          t          t                   |¦  «        }t          t          t                   |¦  «        }t          t          t                   |¦  «        }t          t          t                   |¦  «        }t          t          t                   |¦  «        }t          j                             ¦   «         s9|d         j        r,t          j        |t          j        dd¬¦  «        d¬	¦  «         nt          j        |d
¦  «         |rt!          ||||¦  «         t          j        ||¦  «        }|	rt          j        |¦  «         t          j        ||¦  «         |	rt          j        |¦  «         |}t          j        |¦  «         |
rº|D ]¶}|                     t          j        |                     d¦  «        ||¦  «        ¦  «         |                     t          j        |                     d¦  «        ||¦  «        ¦  «         |                     t          j        |                     d¦  «        d
|¦  «        ¦  «         Œ·nM|D ]J}|||                     d¦  «        <   |||                     d¦  «        <   d
||                     d¦  «        <   ŒKt          j        ||¦  «         |D ]}|                     ||¦  «         Œt9          |¦  «        }t;          t          |¦  «        ¦  «        D ]P}||                              t          j        ||                              |¦  «        d||         ¦  «        ¦  «         ŒQ~d„ |D ¦   «         }t          j        |||d¬¦  «         �Œtd S )Nr   z#_foreach ops don't support autogradc              3   ón   •K  — | ]/\  }}|j         j        |j         j        k    o|j         j        ‰v V — Œ0d S re   )r7   rt   )Ú.0rD   r4   rƒ   s      €r1   ú	<genexpr>z&_multi_tensor_rprop.<locals>.<genexpr>:  s]   øè è € ð 
ð 
ñ ��4ð ŒHŒM˜Tœ[Ô-Ò-ð >Ø””Ð!=Ð=ð
ð 
ð 
ð 
ð 
ð 
r2   rl   rm   r'   Úcpu)r7   )Úalphar	   c                 ó6   — g | ]}|                      ¦   «         ‘ŒS rH   )rx   )r‡   rM   s     r1   ú
<listcomp>z'_multi_tensor_rprop.<locals>.<listcomp>Š  s    € Ð<Ð<Ð< d�d—i’i‘k”kÐ<Ð<Ð<r2   rn   ro   )r>   r?   rr   rs   r   ÚallÚzipr   Ú"_group_tensors_by_device_and_dtypeÚvaluesr   r   r   Úis_cpuÚ_foreach_add_rB   r   Ú_foreach_mulÚ_foreach_neg_Ú_foreach_copy_Ú_foreach_sign_ry   rz   r{   r|   r}   Ú_foreach_mul_r   ÚlistÚrangeÚ_foreach_addcmul_)r"   rW   rX   r%   rY   r]   r^   r_   r`   r    r   r!   rZ   Úgrouped_tensorsÚgrouped_params_Úgrouped_grads_Úgrouped_prevs_Úgrouped_step_sizes_Úgrouped_state_steps_Ú_Úgrouped_paramsÚgrouped_gradsÚgrouped_prevsÚgrouped_step_sizesÚgrouped_state_stepsÚsignsrx   rL   r�   Ú
grad_signsrƒ   s                                 @r1   Ú_multi_tensor_rpropr©   "  s„  ø€ õ  ˆ6�{„{�aÒÐØˆàÐDÐDÐDÑDÔDÐõ Œ>×&Ò&Ñ(Ô(ð w¨Zð wÝ'HÑ'JÔ'JÐ$Ýð 
ð 
ð 
ð 
õ ˜v {Ñ3Ô3ð
ñ 
ô 
ñ 
ô 
ð 	wð 	wð wÐWsÐvÐvÐvñ		wô 	wð 
õ  ÔBØ	�˜˜z¨;Ð7ñô €Oð ×"Ò"Ñ$Ô$ðJ
ñ J
ñ 		ñ 	ØØØØØØÝ�d¥6œl¨OÑ<Ô<ˆÝ�T¥&œ\¨>Ñ:Ô:ˆÝ�T¥&œ\¨>Ñ:Ô:ˆÝ!¥$¥v¤,Ð0CÑDÔDÐÝ"¥4­¤<Ð1EÑFÔFÐõ Œ~×*Ò*Ñ,Ô,ð 	8Ð1DÀQÔ1GÔ1Nð 	8ÝÔØ#¥U¤\°#¸eÐ%DÑ%DÔ%DÈCðñ ô ð ð õ ÔÐ 3°QÑ7Ô7Ð7ð ð 	ÝØ ¨}Ð>Pñô ð õ Ô" =°-Ñ@Ô@ˆØð 	'ÝÔ Ñ&Ô&Ð&õ
 	Ô˜]¨MÑ:Ô:Ð:Øð 	/ÝÔ Ñ.Ô.Ð.Ø%ˆåÔ˜UÑ#Ô#Ð#Øð 		%Øð =ð =�Ø—
’
�5œ; t§w¢w¨q¡z¤z°7¸DÑAÔAÑBÔBÐBØ—
’
�5œ; t§w¢w¨q¡z¤z°8¸TÑBÔBÑCÔCÐCØ—
’
�5œ; t§w¢w¨q¡z¤z°1°dÑ;Ô;Ñ<Ô<Ð<Ð<ð=ð
 ð %ð %�Ø#*��T—W’W˜Q‘Z”ZÑ Ø#+��T—W’W˜Q‘Z”ZÑ Ø#$��T—W’W˜Q‘Z”ZÑ Ð õ 	ÔÐ.°Ñ6Ô6Ð6Ø+ð 	;ð 	;ˆIØ×Ò˜]¨MÑ:Ô:Ð:Ð:õ ˜]Ñ+Ô+ˆÝ•s˜=Ñ)Ô)Ñ*Ô*ð 	ð 	ˆAØ˜!Ô×"Ò"Ý”˜E !œHŸKšK¨Ñ1Ô1°1°mÀAÔ6FÑGÔGñô ð ð ð
 ð =Ð<¨mÐ<Ñ<Ô<ˆ
ÝÔØ˜JÐ(:À"ð	
ñ 	
ô 	
ð 	
ñ 	
ðQJ
ð J
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 )zpFunctional API that performs rprop algorithm computation.

    See :class:`~torch.optim.Rprop` for details.
    c              3   óJ   K  — | ]}t          |t          j        ¦  «        V — Œd S re   )r(   r?   r   )r‡   Úts     r1   rˆ   zrprop.<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!   rZ   )
r?   rr   rs   r�   rQ   r   ÚjitÚis_scriptingr©   r„   )r"   rW   rX   r%   rY   r   r   r    r!   rZ   r]   r^   r_   r`   r¡   Úfuncs                   r1   r   r   ”  s'  € õ4 Œ>×&Ò&Ñ(Ô(ð 
µð 5ð 5Ø-8ð5ñ 5ô 5ñ 2ô 2ð 
õ Ø^ñ
ô 
ð 	
ð €Ý1Ø�N¨eð
ñ 
ô 
‰
ˆˆ7ð ð U•5”9×)Ò)Ñ+Ô+ð UÝÐSÑTÔTÐTàð $•u”y×-Ò-Ñ/Ô/ð $Ý"ˆˆå#ˆà€DØØØØØØ#Ø#ØØØØØ%Øðñ ô ð ð ð r2   )NFFFF)Ú__doc__Útypingr   r   r   r   r   r?   r   Ú	optimizerr
   r   r   r   r   r   r   r   r   r   r   r   r   Ú__all__r   rA   ri   r„   r©   r   rH   r2   r1   ú<module>r¶      sï  ðð 9Ð 8Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5à €€€Ø Ð Ð Ð Ð Ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð" �GÐ
€ðHð Hð Hð Hð HˆIñ Hô Hð HðX"ðFà	ðð ð 
ðð ð 
ðð ð 
ðð ð 
ðð ð ñG1ð „ðlAØ�ŒLðAà�Œ<ðAð �Œ<ðAð �V”ð	Að
 �f”ðAð ðAð ðAð ðAð ðAð ðAð ðAð ðAð ðAð Að Að AðHk
Ø�ŒLðk
à�Œ<ðk
ð �Œ<ðk
ð �V”ð	k
ð
 �f”ðk
ð ðk
ð ðk
ð ðk
ð ðk
ð ðk
ð ðk
ð ðk
ð ðk
ð k
ð k
ð k
ðd  ÐÐ1EÐFÑFÔFð #ØØØ Øð;ð ;Ø�ŒLð;à�Œ<ð;ð �Œ<ð;ð �V”ð	;ð
 �f”ð;ð �dŒ^ð;ð ð;ð ð;ð ð;ð ð;ð ð;ð ð;ð  ð!;ð" ð#;ð ;ð ;ñ GÔFð;ð ;ð ;r2   