U
    rh                     @  sd   d dl mZ d dlZd dlZd dlmZ d dlmZ d dl	m
Z
 dd Zdd	 ZG d
d deZdS )    )annotationsN)Base)expect)AI_ONNX_PREVIEW_TRAINING_DOMAINc                 C  s@   || | }|dkr|nd}	|| |	|  }
|| |
  }||
fS Nr       rtxgvnorm_coefficientalphabetaZg_regularizedZbeta_adjustedv_newx_newr   r   H/tmp/pip-unpacked-wheel-xnis5xre/onnx/backend/test/case/node/momentum.pyapply_momentum   s
    r   c                 C  sH   || | }|dkr|nd}	|| |	|  }
|| |||
    }||
fS r   r   r	   r   r   r   apply_nesterov   s
    r   c                   @  sB   e Zd ZeddddZeddddZeddddZd	S )
MomentumNone)returnc               
   C  s   d} d}d}t jjdddddd	gd
dg| ||dtd}tjdtjd}tjdtjd}tjddgtjd}tjddgtjd}tjddgtjd}t|||||| ||\}	}
t	||||||g|	|
gdt j
tdgd d S )NMbP?ffffff?皙?r   RTXGVX_newV_newstandardinputsoutputsr   r   r   modedomainZdtyper   333333?ffffff@Gz      333333?@Ztest_momentumr   r&   r'   nameZopset_importsonnxhelper	make_noder   nparrayfloat32int64r   r   make_opsetidr   r   r   noder
   r   r   r   r   r   r   r   r   r   export_momentum'   s6    zMomentum.export_momentumc               
   C  s   d} d}d}t jjdddddd	gd
dg| ||dtd}tjdtjd}tjdtjd}tjddgtjd}tjddgtjd}tjddgtjd}t|||||| ||\}	}
t	||||||g|	|
gdt j
tdgd d S )Ng{Gz?r         ?r   r   r   r   r    r!   r"   r#   Znesterovr%   r   r*   r   r+   r,   r-   r.   r/   r0   Ztest_nesterov_momentumr   r1   )r4   r5   r6   r   r7   r8   r9   r:   r   r   r;   r<   r   r   r   export_nesterov_momentumO   s6    z!Momentum.export_nesterov_momentumc               
   C  s@  d} d}d}t jjdddddd	d
ddgddddg| ||dtd}tjdtjd}tjdtjd}tjdgtjd}tjdgtjd}tjdgtjd}tjddgtjd}	tjddgtjd}
tjddgtjd}t|||||| ||\}}t|||	|
|| ||\}}t	|||||	||
||g||||gdt j
tdgd d S )Nr   r   g333333?r   r   r   ZX1ZX2ZG1ZG2ZH1ZH2ZX1_newZX2_newZV1_newZV2_newr$   r%   r   r*   r   r?   g      g       @g      g      @Ztest_momentum_multipler   r1   r3   )r   r   r   r=   r
   r   x1Zg1Zv1Zx2Zg2Zv2Zx1_newZv1_newZx2_newZv2_newr   r   r   export_momentum_multiplew   s>    

z!Momentum.export_momentum_multipleN)__name__
__module____qualname__staticmethodr>   r@   rB   r   r   r   r   r   &   s   ''r   )
__future__r   Znumpyr7   r4   Zonnx.backend.test.case.baser   Zonnx.backend.test.case.noder   Z	onnx.defsr   r   r   r   r   r   r   r   <module>   s   