
    Ph                         U d dl mZmZmZ d dlZd dlmc mZ d dlm	Z	 g Z
ee   ed<   ej                  j                   G d d             Zy)    )DictListOptionalN)Tensor__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fd
Zdedee   fdZ	deee      fdZ
y)_FunctionalSGDparamslrmomentum	dampeningweight_decaynesterovmaximizeforeach_allow_empty_param_listc
                 <   ||||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)r   r   r   r   r   z%optimizer got an empty parameter listr
   )defaultsr   r   r   torchjitannotater   r   strstatelen
ValueErrorparam_group)
selfr
   r   r   r   r   r   r   r   r   s
             qC:\Users\daisl\Desktop\realtime-object-detection\venv\Lib\site-packages\torch/distributed/optim/functional_sgd.py__init__z_FunctionalSGD.__init__   s      "(	
 ! YY''U\\4U\\@Q;R-R(SUWX
v;!$;DEE %f-    paramgradc                    | 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                  	       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   )r   append	is_sparser   r   no_gradFsgdr   r   r   )r   r!   r"   r   r   r   r   r
   momentum_buffer_listgradsr&   r   r$   s                r   
step_paramz_FunctionalSGD.step_param3   sB    }}^4==,MM+.	]]4 79LL~~"&DJJ&$&

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

5!.q1&'6E#$ '# _s   ?D55D>	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                         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   	enumerate)r   r/   r
   params_with_gradr-   r,   r   r   r   r   r&   r!   gradientr   ipr$   s                    r   stepz_FunctionalSGD.stepb   s   !!(+79]]4 }}^4==,MM+.	v;#i.(W#CK=34&s9~&678   "695OE8# ''.X&%%&*O

*(*DJJu%

5)$E1(//5(//6G0HI  6  ]]_EE $)!# /   ./DAqJJqME215O*+:'(	 0! _s   ?F==GN)g{Gz?        r8   r8   FFFF)__name__
__module____qualname__r   r   floatboolr   r   r.   r7    r    r   r	   r	      s    
 !(-.V. . 	.
 . . . . . "&.<-7 -7hv.> -7^6;d8F#34 6;r    r	   )typingr   r   r   r   torch.optim._functionaloptim_functionalr*   r   r   r   __annotations__r   scriptr	   r>   r    r   <module>rE      sK    ' '  # # c  D; D; D;r    