
    ȅi
                         % S SK r S SKJs  Jr  S SK Jr  S SKJr  / r\	\
   \S'   \ R                  R                   " S S5      5       rg)    N)Tensor)2_scripted_functional_optimizer_deprecation_warning__all__c                       \ rS rSr         SS\\   S\S\S\S\S\S\S	\S
\S\4S jjrS\S\S-  4S jr	S\\S-     4S jr
Srg)_FunctionalSGD   paramslrmomentum	dampeningweight_decaynesterovmaximizeforeachfused_allow_empty_param_listc                 `   [        SS9  UUUUS.U l        X`l        Xpl        Xl        Xl        [        R                  R                  [        [        R                  [        [        [        R                  4   4   0 5      U l        [        U5      S:X  a  U
(       d  [        S5      eSU0U l        g )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              `/home/james-whalen/.local/lib/python3.13/site-packages/torch/distributed/optim/functional_sgd.py__init___FunctionalSGD.__init__   s     	;aH "(	
 ! 
YY''U\\4U\\@Q;R-R(SUWX
v;!$;DEE %f-    paramgradNc                    U R                   S   nU R                   S   nU R                   S   nU R                   S   nU/n/ n/ n	Sn
Ub}  U	R                  U5        UR                  (       a  Sn
XR                  ;  a  0 U R                  U'   U R                  U   nSU;  a  UR                  S5        OUR                  US   5        [        R
                  " 5          [        R                  " UU	UUUUUU R                  U R                  U
U R                  U R                  SSS	9  SSS5        U R                  U   nUS
   nUb  XS'   gg! , (       d  f       N+= f)zKSimilar 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_param_FunctionalSGD.step_param:   sK    }}^4==,MM+.	]]4 46LL~~"&JJ&$&

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

5!.q1&'6#$ ') _s   A
E


E	gradientsc                    U R                   S   n/ n/ n/ nU R                  S   nU R                  S   nU R                  S   nU R                  S   n	[        U5      [        U5      :w  a*  [        SS[        U5       S3-   S	[        U5       3-   5      eS
n
[	        X!5       H  u  pUc  M
  UR                  U5        UR                  U5        UR                  (       a  Sn
XR                  ;  a  0 U R                  U'   U R                  U   nSU;  a  UR                  S 5        M  UR                  US   5        M     [        R                  " 5          [        R                  " UUUUUUU	U R                  U R                  U
U R                  U R                  S S S9  S S S 5        [!        U5       H"  u  pU R                  U   nX^   nUc  M  UUS'   M$     g ! , (       d  f       N@= f)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/   r0   r1   r   r   r   r   	enumerate)r    r6   r	   params_with_gradr3   r2   r
   r   r   r   r*   r%   gradientr   ipr(   s                    r!   step_FunctionalSGD.stepl   s   !!(+46]]4 }}^4==,MM+.	v;#i.(W#CK=34&s9~&678   "65OE# ''.X&%%&*O

*(*DJJu%

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