
    `i2                         U d dl mZ 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dS )    )OptionalN)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e         fdZ	deee                  fdZ
dS )_FunctionalSGD{Gz?        Fparamslrmomentum	dampeningweight_decaynesterovmaximizeforeachfused_allow_empty_param_listc                    t          d           ||||d| _        || _        || _        || _        |	| _        t          j                            t          t          j
        t          t          t          j
        f         f         i           | _        t          |          dk    r|
st          d          d|i| _        d S )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              z/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/torch/distributed/optim/functional_sgd.py__init__z_FunctionalSGD.__init__   s     	;aHHHH "(	
 
 ! 
Y''U\4U\@Q;R-R(SUWXX
v;;!$;DEEE %f-    paramgradc                 h   | j         d         }| j         d         }| j         d         }| j         d         }|g}g }g }	d}
|s|	                    |           |j        rd}
|| j        vr
i | j        |<   | j        |         }d|vr|                    d           n|                    |d                    t	          j                    5  t          j        ||	|||||| j        | j	        |
| j
        | j        dd	           ddd           n# 1 swxY w Y   | j        |         }|d
         }|||d<   dS dS )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;   s    }^4=,M+.	]4 79LL~ '"&DJ&&$&
5!Ju%E --$++D1111$++E2C,DEEE]__ 	 	E$)!# /j   	 	 	 	 	 	 	 	 	 	 	 	 	 	 	$ 
5!.q1&'6E#$$$ '&s   7D		DD	gradientsc                    | j         d         }g }g }g }| j        d         }| j        d         }| j        d         }| j        d         }	t          |          t          |          k    r6t          ddt          |           dz   d	t          |           z             d
}
t	          ||          D ]\  }}||                    |           |                    |           |j        rd}
|| j        vr
i | j        |<   | j        |         }d|vr|                    d            t|                    |d                    t          j	                    5  t          j        |||||||	| j        | j        |
| j        | j        d d            d d d            n# 1 swxY w Y   t!          |          D ]!\  }}| j        |         }||         }|||d<   "d S )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   r0   r1   r2   r   r   r   r   	enumerate)r"   r6   r   params_with_gradr4   r3   r   r   r   r   r+   r&   gradientr   ipr)   s                    r#   stepz_FunctionalSGD.stepm   sj   !(+79]4 }^4=,M+.	v;;#i..((W3CKK33347s9~~778    "6955 	J 	JOE8# ''...X&&&% +&*O
**(*DJu%
5)$E11(//5555(//6G0HIII]__ 	 	E $)!# /j   	 	 	 	 	 	 	 	 	 	 	 	 	 	 	& .// 	; 	;DAqJqME215O*+:'(		; 	;s   7FFFN)	r	   r
   r
   r
   FFFFF)__name__
__module____qualname__listr   floatboolr$   r   r5   r>    r%   r#   r   r      s        
 !(-. .V. . 	.
 . . . . . . "&. . . .B07 07hv.> 07 07 07 07d9;d8F#34 9; 9; 9; 9; 9; 9;r%   r   )typingr   r   torch.optim._functionaloptim_functionalr1   r   ,torch.distributed.optim._deprecation_warningr   r   rB   r   __annotations__r   scriptr   rE   r%   r#   <module>rM      s            # # # # # # # # #           
 c    M; M; M; M; M; M; M; M; M; M;r%   