o
    ziv                     @   sh   d dl mZmZmZmZ d dlmZ d dlmZ eeg e	f  Z
eee ee f ZG dd deZdS )    )CallableIterableOptionalUnion)Tensor)	Optimizerc                       sZ   e Zd Zddededdf fddZdeddf fd	d
Zddede	e fddZ
  ZS )SGDMbP?paramslrreturnNc                    s    t |d}tt| || d S )N)r   )dictsuperr   __init__)selfr
   r   defaults	__class__ G/home/ubuntu/.local/lib/python3.10/site-packages/torch_optimizer/sgd.pyr      s   
zSGD.__init__statec                    s   t t| | d S N)r   r   __setstate__)r   r   r   r   r   r      s   zSGD.__setstate__closurec                 C   sX   d }|d ur	| }| j D ]}|d D ]}|jd u rq|jj}|j|d  | qq|S )Nr
   r   )param_groupsgraddataadd_)r   r   lossgrouppd_pr   r   r   step   s   

zSGD.step)r	   r   )__name__
__module____qualname__	_params_tfloatr   r   r   
OptClosurer   r"   __classcell__r   r   r   r   r   
   s     r   N)typingr   r   r   r   torchr   torch.optim.optimizerr   r'   r(   r   r&   r   r   r   r   r   <module>   s    