
    $h3              !       v   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 d dlmZ d dlmZmZ ddgZd"d	Z G d
 de          Zde de	 de de
 d	e_        	 	 	 	 	 d#de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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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fd!ZdS )$    N)Tensor   )		Optimizer_use_grad_for_differentiable
_get_value_default_to_fused_or_foreach_differentiable_doc_foreach_doc_maximize_doc_capturable_doc_view_as_real)is_compiling)ListOptionalASGDasgdc                 f    t          | t          j                  st          j        | |          S | S )Ndevice)
isinstancetorchr   tensor)xr   s     P/var/www/html/auto_sub_bot/venv/lib/python3.11/site-packages/torch/optim/asgd.py
_to_tensorr      s0    a&& .|Af----H    c            	       x     e Zd Z	 	 	 	 	 	 	 	 	 d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   {Gz?-C6?      ?    .Ar   NFforeachmaximizedifferentiable
capturablec                    d|k    st          d|           d|k    st          d|           |du r|
rt          d          t          ||||||||	|
	  	        }t                                          ||           d S )Ng        zInvalid learning rate: zInvalid weight_decay value: F0Capturable not supported with single tensor ASGD)	lrlambdalphat0weight_decayr"   r#   r$   r%   )
ValueErrordictsuper__init__)selfparamsr(   r)   r*   r+   r,   r"   r#   r$   r%   defaults	__class__s               r   r0   zASGD.__init__   s     byy;r;;<<<l""JLJJKKKe
OPPP%)!

 

 

 	*****r   c                    t                                          |           | j        D ]Z}|                    dd            |                    dd           |                    dd           |                    dd           [t	          | j                                                  }t          |          dk    ot          j	        |d         d                   }|s;|D ]8}t          j
        t          |d                   t          j                  |d<   9t          |          dk    ot          j	        |d         d	                   }|s.|D ]+}t          j
        |d	         t          j                  |d	<   ,t          |          dk    ot          j	        |d         d
                   }|s;|D ]:}t          j
        t          |d
                   t          j                  |d
<   9d S d S )Nr"   r#   Fr$   r%   r   step)dtypeetamu)r/   __setstate__param_groups
setdefaultliststatevalueslenr   	is_tensorr   floatfloat32)	r1   r>   groupstate_valuesstep_is_tensorseta_is_tensormu_is_tensorr4   s	           r   r:   zASGD.__setstate__4   s   U###& 	2 	2EY---Z///-u555\51111DJ--//00l++q0 
eoOF#7
 7
  	P! P P!Lqy)9)9OOO&		\**a/ 
U_OE"6
 6
  	G! G G <%FFF%L))Q. 
EOOD!5
 5
  	L! L L,uQtW~~U]KKK$	L 	LL Lr   c                 V   d}|d         D ]}	|	j         |t          j        |	          z  }|                    |	           |	j         j        rt          d          |                    |	j                    | j        |	         }
t          |
          dk    rt          j        d|	j	        t          j
                  |
d<   t          j        |d         |	j	        t          j
                  |
d	<   t          j        d|	j	        t          j
                  |
d
<   t          j        |	t          j                  |
d<   |                    |
d
                    |                    |
d                    |                    |
d	                    |                    |
d                    |S )NFr2   z&ASGD does not support sparse gradientsr    )r   r7   r6   r(   r8   r9   )memory_formatax)gradr   
is_complexappend	is_sparseRuntimeErrorr>   r@   zerosr   rC   r   ones
zeros_likepreserve_format)r1   rD   params_with_gradgradsmusaxsetasstate_stepshas_complexpr>   s              r   _init_groupzASGD._init_groupO   s|   x 	2 	2Av!u/222 ''***6# Q&'OPPPQV$$$
1u::??$)K185=$Y$Y$YE&M#(<dAHTYTa#b#b#bE%L"'*R"V"V"VE$K"'"2)># # #E$K 

5;'''

5;'''E%L)))""5=111r   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	          ||||||	|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)   r(   r+   r*   r,   r"   r#   r$   r%   r]   )r   enable_gradr;   r_   r   )r1   closurelossrD   rW   rX   rY   rZ   r[   r\   r]   s              r   r6   z	ASGD.stepi   sQ    "$$ ! !wyy! ! ! ! ! ! ! ! ! ! ! ! ! ! ! & 	 	E!ECCDK**52BE3PSUY[fggK Gn;;Gn">2i(z*$%56 .'!    & s   /33)	r   r   r    r!   r   NFFFN)__name__
__module____qualname__r   boolr0   r:   r_   r   r6   __classcell__)r4   s   @r   r   r      s         "&$  +  + $ +  +  +  +  +  +  +  +  +DL L L L L6  4 ") ) ) "!) ) ) ) )r   ah  Implements Averaged Stochastic Gradient Descent.

    It has been proposed in `Acceleration of stochastic approximation by
    averaging`_.

    Args:
        params (iterable): iterable of parameters to optimize or dicts defining
            parameter groups
        lr (float, optional): learning rate (default: 1e-2)
        lambd (float, optional): decay term (default: 1e-4)
        alpha (float, optional): power for eta update (default: 0.75)
        t0 (float, optional): point at which to start averaging (default: 1e6)
        weight_decay (float, optional): weight decay (L2 penalty) (default: 0)
        z	
        z For ASGD, capturable is only supported when foreach is True.

    .. _Acceleration of stochastic approximation by averaging:
        https://dl.acm.org/citation.cfm?id=131098

    Fr2   rX   rZ   rY   r[   r\   r"   r#   r$   r%   r]   r)   r(   r+   r*   r,   c                b   |t          | |d          \  }}|r-t          j                                        rt	          d          |r&t          j                                        st
          }n&|	rt                      st	          d          t          } || |||||||||||||	|
           dS )znFunctional API that performs asgd algorithm computation.

    See :class:`~torch.optim.ASGD` for details.
    NF)	use_fusedz6torch.jit.script not supported with foreach optimizersr'   )	r)   r(   r+   r*   r,   r#   r$   r%   r]   )r   r   jitis_scriptingrR   _multi_tensor_asgdr   _single_tensor_asgd)r2   rX   rZ   rY   r[   r\   r"   r#   r$   r%   r]   r)   r(   r+   r*   r,   _funcs                     r   r   r      s    2 1&.TYZZZ
7 U59))++ USTTT #uy--// #! 	Slnn 	SQRRR"D!%     r   c       	   	         t          |           D ]\  }}||         }|s|n| }||         }||         }||         }||         }t          j        |          r<t          j        |          }t          j        |          }t          j        |          }|dz  }t	          |          }|
dk    r|                    ||
          }t	          |          }|                    d||z  z
             |                    ||            t                      s|	                                dk    r<|                    |
                    |                              |                     n|                    |           t          |d||z  |z  z   |	z  z            }|                    |           t          dt          d||z
            z            }|                    |           d S )Nr   r   r*   )	enumerater   rO   view_as_realr   addmul_add_r   itemsubmulcopy_r   max)r2   rX   rZ   rY   r[   r\   r)   r(   r+   r*   r,   r#   r$   r%   r]   iparamrN   r9   rM   r8   step_tr6   	eta_valuenew_etanew_mus                             r   ro   ro      s   $ f%% $ $5Qx#.tt$VV1gQE"" 	(%d++D&u--E#B''B 	!&!!188E866DsOO	

1uy(())) 	

4	z
*** >> 	RWWYY!^^GGEIIbMM%%b))****HHUOOORA
T(9$9e#CDEE		'AAtby 1 1122
I$ $r   c       	   
         t          |           dk    rd S |r
J d            t          j        | |||||g          }|                                D ]\  \  }}\  \  }}}}}}}|rt	          j        |          }t          |          }|rt          |||           |d         j        r,t	          j	        |t	          j
        dd          d           nt	          j	        |d           |
dk    rK|rt	          j	        |||
           |}nt	          j        |||
          }t	          j	        |||           nt	          j        |||          }t	          j        |||d	           ~t	          j        ||          }t	          j        |||           ~|rt	          j        ||          }t	          j        |d           t	          j        |           t	          j        ||           ~t	          j        ||	          }t	          j        ||           t	          j        ||           t	          j	        |d           t	          j        |           t	          j        ||           t	          j        ||           0|d                                         }g }g }t)          t          |                    D ]q}t+          |d||z  ||	z  z  z   z  |          }|                    |           t+          dt/          d||z
            z  |          }|                    |           rt	          j        ||           t	          j        ||           d S )
Nr   z#_foreach ops don't support autogradg      ?cpur   rs   r   )value)r@   r   "_group_tensors_by_device_and_dtypeitemsr   _foreach_negr=   r   is_cpu_foreach_add_r   _foreach_add_foreach_addcmul__foreach_sub_foreach_maximum__foreach_reciprocal__foreach_copy__foreach_pow_foreach_mul_ry   ranger   rP   r}   )r2   rX   rZ   rY   r[   r\   r)   r(   r+   r*   r,   r#   r$   r%   r]   grouped_tensorsr   rp   grouped_paramsgrouped_gradsgrouped_axsgrouped_musgrouped_etasgrouped_state_stepsintermediatenew_musnew_etasr6   r~   r   r   s                                  r   rn   rn      s   & 6{{aDDDDDBFESVX[]acnCoppO4C4I4I4K4KO7 O7 	1&! 0 ,{K	*Q 	>!.}==M]++ 	F.-EEE q!( 	8 3U\#e5T5T5T\_````` 3Q777 1 e#M>VVVV,$1-WcdddnEJJJJJ -m^SXYYYL 	lRTUUUU ).+FF\;GGG 	7()<bAAG#GS111&w/// g666 )*=uEEH%000"---!,,,&x000"--- x8888&q)..00DHG3{++,, ' '$!ebj45=889&   (((#AAtby(9(9$9&IIIv&&&& x888 g6666_O7 O7r   rd   )NFFFF)r   r   	optimizerr   r   r   r   r	   r
   r   r   r   torch._utilsr   typingr   r   __all__r   r   __doc__rh   rB   r   ro   rn   rK   r   r   <module>r      s         j j j j j j j j j j j j j j j j j j j j j j % % % % % % ! ! ! ! ! ! ! !6
   B B B B B9 B B BJ 
  
  
   
!  B # 6 6L6<6 
f6 
f	6
 v,6 f6 d^6 6 6 6 6 6  	!6" 	#6$ %6& '6 6 6 6r6L6<6 
f6 
f	6
 v,6 f6 6 	6 	6 6 6 6 6 6  !6 6 6 6rh7Lh7<h7 
fh7 
f	h7
 v,h7 fh7 h7 	h7 	h7 h7 h7 h7 h7 h7  !h7 h7 h7 h7 h7 h7r   