o
    ziU!                     @   s   d dl Z d dlmZ d dlZd dlmZ d dlmZmZm	Z	 d dl
Zd dlmZ dd Zdd	 Zd
d Zdd Zeejejejejejejejejejejejejejejej ej!ej"ej#ej$ej%ej&ej'ej(ej)ej*ej+gZ,dd Z-G dd dZ.dS )    N)deepcopy)Variable)ExponentialLRReduceLROnPlateauStepLR)assert_dict_equalc                 K   s   d| git dd|gi|gS Nparams dictweightbiaskwargsr
   r
   H/home/ubuntu/.local/lib/python3.10/site-packages/tests/test_optimizer.py_build_params_dict   s   r   c                 K   s   t dd|i|gS r   r   r   r
   r
   r   _build_params_dict_single      r   c                    s    fddf fddf fddf fddf fdddd gf fddd	d d
d gf fdddd dd dd gfg} fddt t|D }||fS )Nc                        | |gddS NMbP?lrr
   r   r   optimizer_classr
   r   <lambda>       z"make_test_params.<locals>.<lambda>c                        t | |ddddS N{Gz?r   r   )r   r   r   r
   r   r          c                    r   r    r   r   r   r
   r   r      r"   c                    s    t | |ddS )Nr!   r   r#   r   r   r
   r   r   "   s    c                    r   r   r
   r   r   r
   r   r   '   r   c                 S      t | dddS Ng?
   gamma	step_sizer   optr
   r
   r   r   (       c                    r   r   r
   r   r   r
   r   r   +   r   c                 S   r$   r%   r*   r+   r
   r
   r   r   -   r-   c                 S      t | S Nr   r+   r
   r
   r   r   .       c                    r   r   r
   r   r   r
   r   r   2   r   c                 S   r$   )NGz?r&   r'   r*   r+   r
   r
   r   r   4   r-   c                 S   s   t | ddS )Nr2   )r(   )r   r+   r
   r
   r   r   5   s    c                 S   r.   r/   r0   r+   r
   r
   r   r   6   r1   c                    s   g | ]	}d  j |f qS )z%s_%s)__name__).0ir   r
   r   
<listcomp>:   s    z$make_test_params.<locals>.<listcomp>)rangelen)r   casesidsr
   r   r   make_test_params   s0   





%r;   c                  O   s   t j| i |}t |S r/   )optimYogi	Lookahead)akwbaser
   r
   r   build_lookahead>   s   
rB   c                 C   sP   d| j v r&g }g }tD ]}t|\}}|| }|| }q| jd||d d S d S )Noptimizer_constructor)r:   )fixturenames
optimizersr;   parametrize)metafuncr9   r:   ocr5   r
   r
   r   pytest_generate_testsb   s   

rJ   c                   @   s2   e Zd Zdd Zdd Z		dddZd	d
 ZdS )	TestOptimc                    s   t ddt  dd t | g }|D ]	}|| q   fdd}|  }	| tdD ]}
|D ]}t|trR| }|| qB|  qBq>|  |	k saJ d S )NTrequires_gradc                     s^      } | jr jr|    kr|   } |   d }|jdd |S N   T)create_graph)	zero_gradmvis_cuda
get_devicecudapowsumbackward)ylossr   input	optimizerr   r
   r   fn|   s   
z0TestOptim._test_basic_cases_template.<locals>.fn   )r   append__repr__itemstepr7   
isinstancer   )selfr   r   r\   constructorscheduler_constructors
schedulersscheduler_constructorr^   initial_value_i	schedulerval_lossr
   r[   r   _test_basic_cases_templaten   s&   




z$TestOptim._test_basic_cases_templatec                    s  t |dd}t |dd}t    fdd}|||}t||||}tdD ]}|| q(t |j dd}	t |j dd}
||	|
}t|||	|
}t| }t| }|	| d}tdD ] }|| || t
j||	|ds|J t
j||
|dsJ qft||sJ t
j sd S t  j  t |j  dd}t |j  dd}|||}t||||}t| }t| }|	| t||sJ tdD ]}|| || ||ksJ ||ksJ qdd	 }|||t|ksJ d S )
NTrL   c                    s>   |    |jr	n }||| d }|jdd |S rN   )rQ   rS   rR   rV   rW   rX   )r]   r   r   r5   rZ   r\   
input_cudar
   r   fn_base   s
   z+TestOptim._test_state_dict.<locals>.fn_base   g-C6?)atolc                 S   s   t dd | jD S )Nc                 s   s    | ]
}| d s|V  qdS )_N)
startswith)r4   kr
   r
   r   	<genexpr>   s    zDTestOptim._test_state_dict.<locals>.getPublicAttr.<locals>.<genexpr>)set__dict__)objr
   r
   r   getPublicAttr   r   z1TestOptim._test_state_dict.<locals>.getPublicAttr)r   	functoolspartialr7   rc   datacloner   
state_dictload_state_dicttorchallcloser   rU   is_availablefloat)re   r   r   r\   rf   rq   r]   r^   rk   weight_cbias_coptimizer_cfn_cr   state_dict_c	precisionweight_cuda	bias_cudaoptimizer_cudafn_cudar{   r
   ro   r   _test_state_dict   sT   









zTestOptim._test_state_dictNFc                 C   s  |d u rg }|  tddtdtd| | tddtdtd|| | tdddd tddd td|| tj sKd S | tdd td td || tj dkrm|rod S | tdddtddtdd|| d S )Nr&      rO   ).r      r   )r   r   randnrn   rU   r   device_count)re   rf   rg   ignore_multidevicer
   r
   r   _test_basic_cases   sJ   

zTestOptim._test_basic_casesc                 C   s   | j |  d S r/   )r   )re   rC   r
   r
   r   test_optimizer  s   zTestOptim.test_optimizer)NF)r3   
__module____qualname__rn   r   r   r   r
   r
   r
   r   rK   m   s    (J
/rK   )/r|   copyr   r   torch.autogradr   torch.optim.lr_schedulerr   r   r   torch_optimizerr<   tests.utilsr   r   r   r;   rB   	A2GradExp	A2GradInc	A2GradUniAccSGD	AdaBeliefAdaBoundAdaMod	AdafactorAdamPAggMoApolloDiffGradLambNovoGradPIDQHAdamQHMRAdamRangerRangerQHRangerVASGDPSGDWSWATSShampoor=   rE   rJ   rK   r
   r
   r
   r   <module>   sR    *