
    i
                         U d dl Z d dlmc mZ d dl mZ d dlmZ g Ze	e
   ed<   e j                  j                   G d d             Zy)    N)Tensor)2_scripted_functional_optimizer_deprecation_warning__all__c                       e Zd Z	 	 	 	 	 	 	 	 	 d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dedz  fdZdeedz     fdZ	y)_FunctionalSGDparamslrmomentum	dampeningweight_decaynesterovmaximizeforeachfused_allow_empty_param_listc                 b   t        d       ||||d| _        || _        || _        || _        |	| _        t        j                  j                  t        t        j                  t        t        t        j                  f   f   i       | _        t        |      dk(  r|
st        d      d|i| _        y )N   )
stacklevel)r	   r
   r   r   r   z%optimizer got an empty parameter listr   )r   defaultsr   r   r   r   torchjitannotatedictr   strstatelen
ValueErrorparam_group)selfr   r	   r
   r   r   r   r   r   r   r   s              `/var/www/html/engine/venv/lib/python3.12/site-packages/torch/distributed/optim/functional_sgd.py__init__z_FunctionalSGD.__init__   s     	;aH "(	
 ! 
YY''U\\4U\\@Q;R-R(SUWX
v;!$;DEE %f-    paramgradNc                    | j                   d   }| j                   d   }| j                   d   }| j                   d   }|g}g }g }	d}
|u|	j                  |       |j                  rd}
|| j                  vri | j                  |<   | j                  |   }d|vr|j                  d       n|j                  |d          t	        j
                         5  t        j                  ||	|||||| j                  | j                  |
| j                  | j                  dd	       ddd       | j                  |   }|d
   }|||d<   yy# 1 sw Y   &xY w)z[Similar to self.step, but operates on a single parameter and
        its gradient.
        r   r
   r   r	   FNTmomentum_bufferr   r
   r	   r   r   r   has_sparse_gradr   r   
grad_scale	found_infr   )r   append	is_sparser   r   no_gradFsgdr   r   r   r   )r   r#   r$   r   r
   r   r	   r   momentum_buffer_listgradsr(   r   r&   s                r    
step_paramz_FunctionalSGD.step_param:   sW    }}^4==,MM+.	]]4 46LL~~"&DJJ&$&

5!JJu%E -$++D1$++E2C,DE]]_ 	EE$)!# /jj	$ 

5!.q1&'6E#$ ')	 	s   AEE	gradientsc                    | j                   d   }g }g }g }| j                  d   }| j                  d   }| j                  d   }| j                  d   }	t        |      t        |      k7  r*t        ddt        |       dz   d	t        |       z         d
}
t	        ||      D ]  \  }}|	|j                  |       |j                  |       |j                  rd}
|| j                  vri | j                  |<   | j                  |   }d|vr|j                  d        {|j                  |d           t        j                         5  t        j                  |||||||	| j                  | j                  |
| j                  | j                  d d        d d d        t!        |      D ]!  \  }}| j                  |   }||   }|||d<   # y # 1 sw Y   9xY w)Nr   r	   r   r
   r   zEthe gradients passed in does not equal to the size of the parameters!zParams length: z. zGradients length: FTr&   r'   )r   r   r   r   zipr+   r,   r   r   r-   r.   r/   r   r   r   r   	enumerate)r   r3   r   params_with_gradr1   r0   r	   r   r
   r   r(   r#   gradientr   ipr&   s                    r    stepz_FunctionalSGD.stepl   s   !!(+46]]4 }}^4==,MM+.	v;#i.(W#CK=34&s9~&678   "695 	JOE8# ''.X&%%&*O

*(*DJJu%

5)$E1(//5(//6G0HI	J  ]]_ 	EE $)!# /jj	& ./ 	;DAqJJqME215O*+:'(		;'	 	s   AG

G)	g{Gz?        r<   r<   FFFFF)
__name__
__module____qualname__listr   floatboolr!   r2   r;    r"   r    r   r      s    
 !(-.V. . 	.
 . . . . . . "&.B07 07ftm 07d9;d6D=1 9;r"   r   )r   torch.optim._functionaloptim_functionalr.   r   ,torch.distributed.optim._deprecation_warningr   r   r@   r   __annotations__r   scriptr   rC   r"   r    <module>rJ      sN     # # 
 c  M; M; M;r"   