Ë
    [^(h(D  ã                   óú  — 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 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y)"z1Implementation for the Resilient backpropagation.é    )Ú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Ú_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   FN)Ú
capturableÚforeachÚmaximizeÚdifferentiableÚparamsÚlrÚetasÚ
step_sizesr   r   r   r   c          	      ó,  •— t        |t        «      r|j                  «       dk7  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
        ‰
| �  ||	«       y )
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             €úO/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/torch/optim/rprop.pyr'   zRprop.__init__   s¬   ø€ ô �bœ&Ô! b§h¡h£j°A¢oÜÐ:Ó;Ð;Ø�bŠyÜÐ6°r°dÐ;Ó<Ð<Ø�T˜!‘WÔ,˜sÔ, T¨!¡WÔ,ÜÐ3°D¸±G°9¸B¸tÀA¹w¸iÐHÓIÐIäØØØ!ØØØ)Ø!ô
ˆô 	‰Ñ˜ Õ*ó    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©r0   )r&   Ú__setstate__Úparam_groupsÚ
setdefaultÚstateÚgetÚlenÚtorchÚ	is_tensorÚfloatÚtensorr   r1   )r(   r6   ÚgroupÚpÚp_stateÚstep_valr*   s         €r+   r3   zRprop.__setstate__;   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,   c           	      óR  — d}|d   D �]›  }|j                   €Œ|t        j                  |«      z  }|j                  |«       |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<   |j                  j                  r*t        j                  |	t        |d   |d   «      «      |
d<   nt        j                  |	|d   «      |
d<   |j                  |
d   «       |j                  |
d   «       |j                  |
d	   «       �Œž |S )NFr   z'Rprop does not support sparse gradientsr   r   © r/   r2   r.   ©Úmemory_formatÚprevr   Ú	step_size)Úgradr9   Ú
is_complexÚappendÚ	is_sparseÚRuntimeErrorr6   r8   Úzerosr   r1   Ú
zeros_likeÚpreserve_formatr0   Ú	full_likeÚcomplex)r(   r=   r   ÚgradsÚprevsr   Ústate_stepsÚhas_complexr>   rG   r6   s              r+   Ú_init_groupzRprop._init_groupN   sv  € ØˆØ�x‘ó  	.ˆAØ�v‰vˆ~ØØœ5×+Ñ+¨AÓ.Ñ.ˆKØ�M‰M˜!ÔØ—6‘6ˆDØ�~Š~Ü"Ð#LÓMÐMà�L‰L˜ÔØ—J‘J˜q‘MˆEô �5‹z˜QŠð ˜\Ò*ô —K‘K Ô*;Ó*=ÀaÇhÁhÕOäŸ™ RÔ/@Ó/BÔCð �f‘ô !&× 0Ñ 0°Ä%×BWÑBWÔ X��f‘Ø—7‘7×%Ò%ô */¯©Øœg e¨D¡k°5¸±;Ó?ó*�E˜+Ò&ô */¯©¸¸uÀT¹{Ó)K�E˜+Ñ&à�L‰L˜˜v™Ô'Ø×Ñ˜e KÑ0Ô1Ø×Ñ˜u V™}Ö-ðA 	.ðD Ðr,   c                 ób  — | j                  «        d}|�$t        j                  «       5   |«       }ddd«       | j                  D ][  }g }g }g }g }g }|d   \  }	}
|d   \  }}|d   }|d   }| j	                  ||||||«      }t        ||||||||	|
|||d   |d   |¬«       Œ] |S # 1 sw Y   Œux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   )	Ústep_size_minÚstep_size_maxÚetaminusÚetaplusr   r   r   r   rT   )Ú _cuda_graph_capture_health_checkr9   Úenable_gradr4   rU   r   )r(   ÚclosureÚlossr=   r   rQ   rR   r   rS   rY   rZ   rW   rX   r   r   rT   s                   r+   r.   z
Rprop.stept   s	  € ð 	×-Ñ-Ô/àˆØÐÜ×"Ñ"Ó$ñ !Ù“y�÷!ð ×&Ñ&ò 	ˆEØ#%ˆFØ"$ˆEØ"$ˆEØ')ˆJØ(*ˆKà % f¡ÑˆH�gØ+0°Ñ+>Ñ(ˆM˜=Ø˜IÑ&ˆGØ˜ZÑ(ˆHà×*Ñ*Ø�v˜u e¨Z¸óˆKô ØØØØØØ+Ø+Ø!ØØØ!Ø$Ð%5Ñ6Ø  Ñ.Ø'öð!	ðB ˆ÷I!ð !ús   ©B%Â%B.)g{®Gáz„?)g      à?g333333ó?)g�íµ ÷Æ°>é2   ©N)Ú__name__Ú
__module__Ú__qualname__r   r   r;   r   ÚtupleÚboolr   r'   r3   rU   r   r.   Ú__classcell__)r*   s   @r+   r   r      s²   ø„ ð $(Ø$.Ø*4ð+ð !Ø"&ØØ$ò+àð+ð �%˜�-Ñ ð+ð �E˜5�LÑ!ð	+ð
 ˜% ˜,Ñ'ð+ð ð+ð ˜$‘ð+ð ð+ð õ+ô<ò&$ðL "ò/ó "ô/r,   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   rQ   rR   r   rS   rW   rX   rY   rZ   r   r   r   rT   c                ó  — t        | «      D �]ö  \  }}||   }|	s|n| }||   }||   }||   }t        j                  j                  «       s\|
rZt	        «       }|j
                  j                  |j
                  j                  k(  r|j
                  j                  |v sJ d|› d�«       ‚|dz  }t        j                  |«      rTt        j                  |«      }t        j                  |«      }t        j                  |«      }t        j                  |«      }|r.|j                  |j                  «       «      j                  «       }n|j                  |«      j                  «       }|
r |j                  t        j                  |j                  d«      ||«      «       |j                  t        j                  |j                  d«      ||«      «       |j                  t        j                  |j!                  d«      d|«      «       n<|||j                  d«      <   |||j                  d«      <   d||j!                  d«      <   |j#                  |«      j%                  ||«       |j                  t        j&                  ¬«      }|
r6|j                  t        j                  |j!                  |«      d|«      «       nd||j!                  |«      <   |j)                  |j                  «       |d¬«       |j                  |«       �Œù y )NúIIf capturable=True, params and state_steps must be on supported devices: ú.r   r   rC   éÿÿÿÿ©Úvalue)Ú	enumerater9   ÚcompilerÚis_compilingr   r1   ÚtyperH   Úview_as_realÚmulÚcloneÚsignÚcopy_ÚwhereÚgtÚltÚeqÚmul_Úclamp_rN   Úaddcmul_)r   rQ   rR   r   rS   rW   rX   rY   rZ   r   r   r   rT   ÚiÚparamrG   rE   rF   r.   Úcapturable_supported_devicesrt   s                        r+   Ú_single_tensor_rpropr€   Ý   sx  € ô  ˜fÓ%ó 1‰ˆˆ5Ø�Q‰xˆÙ#‰t¨$¨ˆØ�Q‰xˆØ˜q‘Mˆ	Ø˜1‰~ˆô �~‰~×*Ñ*Ô,±Ü+LÓ+NÐ(à—‘×!Ñ! T§[¡[×%5Ñ%5Ò5Ø—L‘L×%Ñ%Ð)EÑEð{ð [Ð[wÐZxÐxyÐzó{ðFð 	�‰	ˆä×Ñ˜EÔ"Ü×%Ñ% dÓ+ˆDÜ×%Ñ% dÓ+ˆDÜ×&Ñ& uÓ-ˆEÜ×*Ñ*¨9Ó5ˆIÙØ—8‘8˜DŸJ™J›LÓ)×.Ñ.Ó0‰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Õ8à&ˆD�—‘˜“ÑØ'ˆD�—‘˜“ÑØ ˆD�—‘˜“Ñð 	�‰�tÓ×#Ñ# M°=ÔAð �z‰z¬×(=Ñ(=ˆzÓ>ˆÙØ�J‰J”u—{‘{ 4§7¡7¨8Ó#4°a¸Ó>Õ?à&'ˆD�—‘˜Ó"Ñ#ð 	�‰�t—y‘y“{ I°RˆÔ8Ø�
‰
�4Öñc1r,   c          
      óŒ  ‡— t        | «      dk(  ry |rJ d«       ‚t        j                  j                  «       s5|
r3t	        «       Št        ˆfd„t        | |«      D «       «      sJ d‰› d�«       ‚t        j                  | ||||g«      }|j                  «       D �]%  \  \  }}}}}}t        t        t           |«      }t        t        t           |«      }t        t        t           |«      }t        t        t           |«      }t        t        t           |«      }t        j                  j                  «       s=|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 ]¡  }|j+                  t        j,                  |j/                  d«      ||«      «       |j+                  t        j,                  |j1                  d«      ||«      «       |j+                  t        j,                  |j3                  d«      d
|«      «       Œ£ nC|D ]>  }|||j/                  d«      <   |||j1                  d«      <   d
||j3                  d«      <   Œ@ t        j4                  ||«       |D ]  }|j7                  ||«       Œ t        |«      }t9        t        |«      «      D ]@  }||   j+                  t        j,                  ||   j3                  |«      d||   «      «       ŒB ~|D �cg c]  }|j;                  «       ‘Œ }}t        j<                  |||d¬«       �Œ( y c c}w )Nr   z#_foreach ops don't support autogradc              3   ó²   •K  — | ]N  \  }}|j                   j                  |j                   j                  k(  xr |j                   j                  ‰v –— ŒP y ­wr`   )r1   rp   )Ú.0r>   r.   r   s      €r+   ú	<genexpr>z&_multi_tensor_rprop.<locals>.<genexpr>9  sQ   øè ø€ ò 
ñ ��4ð �H‰H�M‰M˜TŸ[™[×-Ñ-Ñ-ò >Ø—‘—‘Ð!=Ð=ó>ñ
ùs   ƒAArh   ri   r!   Úcpu)r1   )Úalphar   rj   rk   )r8   r9   rn   ro   r   ÚallÚzipr   Ú"_group_tensors_by_device_and_dtypeÚvaluesr   Úlistr   Úis_cpuÚ_foreach_add_r<   r   Ú_foreach_mulÚ_foreach_neg_Ú_foreach_copy_Ú_foreach_sign_ru   rv   rw   rx   ry   Ú_foreach_mul_r{   Úrangert   Ú_foreach_addcmul_) r   rQ   rR   r   rS   rW   rX   rY   rZ   r   r   r   rT   Ú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Úsignsrt   rF   r}   rG   Ú
grad_signsr   s                                   @r+   Ú_multi_tensor_rpropr£   !  sw  ø€ ô  ˆ6ƒ{�aÒØáÐDÐDÓDÐô �>‰>×&Ñ&Ô(©ZÜ'HÓ'JÐ$Üó 
ô ˜v {Ó3ô
ô 
ð 	wð WÐWsÐVtÐtuÐvó		wð 
ô  ×BÑBØ	�˜˜z¨;Ð7ó€Oð ×"Ñ"Ó$óJ
ñ 		ñ 	ØØØØØØÜœd¤6™l¨OÓ<ˆÜœT¤&™\¨>Ó:ˆÜœT¤&™\¨>Ó:ˆÜ!¤$¤v¡,Ð0CÓDÐÜ"¤4¬¡<Ð1EÓFÐô �~‰~×*Ñ*Ô,Ð1DÀQÑ1G×1NÒ1NÜ×ÑØ#¤U§\¡\°#¸eÔ%DÈCöô ×ÑÐ 3°QÔ7ñ ÜØ ¨}Ð>Pôô ×"Ñ" =°-Ó@ˆÙÜ×Ñ Ô&ô
 	×Ñ˜]¨MÔ:ÙÜ×Ñ Ô.Ø%ˆä×Ñ˜UÔ#ÙØò =�Ø—
‘
œ5Ÿ;™; t§w¡w¨q£z°7¸DÓAÔBØ—
‘
œ5Ÿ;™; t§w¡w¨q£z°8¸TÓBÔCØ—
‘
œ5Ÿ;™; t§w¡w¨q£z°1°dÓ;Õ<ñ=ð
 ò %�Ø#*��T—W‘W˜Q“ZÑ Ø#+��T—W‘W˜Q“ZÑ Ø#$��T—W‘W˜Q“ZÒ ð%ô 	×ÑÐ.°Ô6Ø+ò 	;ˆIØ×Ñ˜]¨MÕ:ð	;ô
 ˜]Ó+ˆÜ”s˜=Ó)Ó*ò 	ˆAØ˜!Ñ×"Ñ"Ü—‘˜E !™HŸK™K¨Ó1°1°mÀAÑ6FÓGõð	ð ð /<Ö< d�d—i‘i•kÐ<ˆ
Ð<Ü×ÑØ˜JÐ(:À"÷	
ñQJ
ùòN =s   ÎO)Ú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)zpFunctional API that performs rprop algorithm computation.

    See :class:`~torch.optim.Rprop` for details.
    c              3   óP   K  — | ]  }t        |t        j                  «      –— Œ  y ­wr`   )r"   r9   r   )rƒ   Úts     r+   r„   zrprop.<locals>.<genexpr>­  s    è ø€ ò 5Ø()Œ
�1”e—l‘l×#ñ5ùs   ‚$&zPAPI has changed, `state_steps` argument must contain a list of singleton tensorsNF)Ú	use_fusedz6torch.jit.script not supported with foreach optimizers)rW   rX   rY   rZ   r   r   r   rT   )
r9   rn   ro   r‡   rK   r	   ÚjitÚis_scriptingr£   r€   )r   rQ   rR   r   rS   r   r   r   r   rT   rW   rX   rY   rZ   r›   Úfuncs                   r+   r   r   “  sÁ   € ô4 �>‰>×&Ñ&Ô(´ñ 5Ø-8ô5ô 2ô Ø^ó
ð 	
ð €Ü1Ø�N¨eô
‰
ˆˆ7ñ ”5—9‘9×)Ñ)Ô+ÜÐSÓTÐTá”u—y‘y×-Ñ-Ô/Ü"‰ä#ˆáØØØØØØ#Ø#ØØØØØ%Øör,   )NFFFF)Ú__doc__Útypingr   r   r   r9   r   Ú	optimizerr   r	   r
   r   r   r   r   r   r   r   r   r   r   Ú__all__r   r‹   r;   re   r€   r£   r   rB   r,   r+   ú<module>r°      s¯  ðá 8ß (Ñ (ã Ý ÷÷ ÷ õ ð" �GÐ
€ôHˆIô HðX"ðF	à	ˆð 	ð 
Ðð 	Ø	ˆð 	Ø	ˆð 	Ø	Ðð ðñG1ð „ðlAØ�‰LðAà�‰<ðAð �‰<ðAð �V‘ð	Að
 �f‘ð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
ñd  Ð1EÔFð #ØØØ Øñ;Ø�‰Lð;à�‰<ð;ð �‰<ð;ð �V‘ð	;ð
 �f‘ð;ð �d‰^ð;ð ð;ð ð;ð ð;ð ð;ð ð;ð ð;ð  ð!;ð" ò#;ó Gñ;r,   