U
    r±Ëh2  ã                
   @  sf   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ddddd	d	dd
œdd„Z	G dd„ deƒZ
dS )é    )ÚannotationsN)ÚBase)Úexpectç      ð?z
np.ndarrayznp.ndarray | NoneÚfloatÚint)ÚAÚBÚCÚalphaÚbetaÚtransAÚtransBÚreturnc                 C  s^   |dkr| n| j } |dkr|n|j }|d k	r0|nt d¡}|t | |¡ ||  }| | j¡S )Nr   )ÚTÚnpÚarrayÚdotÚastypeZdtype)r   r	   r
   r   r   r   r   ÚY© r   úD/tmp/pip-unpacked-wheel-xnis5xre/onnx/backend/test/case/node/gemm.pyÚgemm_reference_implementation   s
    	r   c                   @  sÒ   e Zd Zeddœdd„ƒZeddœdd„ƒZeddœdd„ƒZeddœd	d
„ƒZeddœdd„ƒZeddœdd„ƒZ	eddœdd„ƒZ
eddœdd„ƒZeddœdd„ƒZeddœdd„ƒZeddœdd„ƒZdS )ÚGemmÚNone)r   c                  C  sˆ   t jjddddgdgd} tj ddg¡ tj¡}tj dd	g¡ tj¡}t d
d	g¡ tj¡}t	|||ƒ}t
| |||g|gdd d S )Nr   ÚaÚbÚcÚy©ÚinputsÚoutputsé   é   é   é   Ztest_gemm_default_zero_bias©r    r!   Úname©ÚonnxÚhelperÚ	make_noder   ÚrandomÚranfr   Úfloat32Úzerosr   r   ©Únoder   r   r   r   r   r   r   Úexport_default_zero_bias    s    zGemm.export_default_zero_biasc                  C  sl   t jjdddgdgd} tj ddg¡ tj¡}tj ddg¡ tj¡}t||ƒ}t	| ||g|gd	d
 d S )Nr   r   r   r   r   é   é
   r"   Ztest_gemm_default_no_biasr&   ©
r)   r*   r+   r   r,   r-   r   r.   r   r   )r1   r   r   r   r   r   r   Úexport_default_no_bias)   s
    
zGemm.export_default_no_biasc                  C  s„   t jjddddgdgd} tj ddg¡ tj¡}tj dd	g¡ tj¡}t d
¡ tj¡}t	|||ƒ}t
| |||g|gdd d S )Nr   r   r   r   r   r   r3   r"   r$   g…ëQ¸	@Ztest_gemm_default_scalar_biasr&   )r)   r*   r+   r   r,   r-   r   r.   r   r   r   r0   r   r   r   Úexport_default_scalar_bias1   s       ÿzGemm.export_default_scalar_biasc                  C  sˆ   t jjddddgdgd} tj ddg¡ tj¡}tj ddg¡ tj¡}tj d	g¡ tj¡}t|||ƒ}t	| |||g|gd
d d S )Nr   r   r   r   r   r   r"   é   r%   Z)test_gemm_default_single_elem_vector_biasr&   r5   r0   r   r   r   Ú&export_default_single_elem_vector_bias<   s    üz+Gemm.export_default_single_elem_vector_biasc                  C  sŠ   t jjddddgdgd} tj ddg¡ tj¡}tj dd	g¡ tj¡}tj d
d	g¡ tj¡}t|||ƒ}t	| |||g|gdd d S )Nr   r   r   r   r   r   r3   r8   r$   r%   Ztest_gemm_default_vector_biasr&   r5   r0   r   r   r   Úexport_default_vector_biasJ   s       ÿzGemm.export_default_vector_biasc                  C  sŠ   t jjddddgdgd} tj ddg¡ tj¡}tj dd	g¡ tj¡}tj dd	g¡ tj¡}t|||ƒ}t	| |||g|gd
d d S )Nr   r   r   r   r   r   r"   é   r$   Ztest_gemm_default_matrix_biasr&   r5   r0   r   r   r   Úexport_default_matrix_biasU   s       ÿzGemm.export_default_matrix_biasc                  C  sŽ   t jjddddgdgdd} tj dd	g¡ tj¡}tj dd
g¡ tj¡}t dd
g¡ tj¡}t	|||dd}t
| |||g|gdd d S )Nr   r   r   r   r   r%   )r    r!   r   r;   r"   r$   )r   Ztest_gemm_transposeAr&   r(   r0   r   r   r   Úexport_transposeA`   s       ÿzGemm.export_transposeAc                  C  sŽ   t jjddddgdgdd} tj dd	g¡ tj¡}tj d
d	g¡ tj¡}t dd
g¡ tj¡}t	|||dd}t
| |||g|gdd d S )Nr   r   r   r   r   r%   )r    r!   r   r"   r;   r$   )r   Ztest_gemm_transposeBr&   r(   r0   r   r   r   Úexport_transposeBk   s       ÿzGemm.export_transposeBc                  C  sŽ   t jjddddgdgdd} tj dd	g¡ tj¡}tj d	d
g¡ tj¡}t dd
g¡ tj¡}t	|||dd}t
| |||g|gdd d S )Nr   r   r   r   r   ç      à?)r    r!   r   r"   r#   r$   r%   )r   Ztest_gemm_alphar&   r(   r0   r   r   r   Úexport_alphav   s       ÿzGemm.export_alphac                  C  s   t jjddddgdgdd} tj dd	g¡ tj¡}tj d	d
g¡ tj¡}tj dd
g¡ tj¡}t|||dd}t	| |||g|gdd d S )Nr   r   r   r   r   r?   )r    r!   r   r3   r8   r$   r%   )r   Ztest_gemm_betar&   r5   r0   r   r   r   Úexport_beta   s       ÿzGemm.export_betac               	   C  sœ   t jjddddgdgddddd	} tj d
dg¡ tj¡}tj dd
g¡ tj¡}tj ddg¡ tj¡}t|||ddddd}t	| |||g|gdd d S )Nr   r   r   r   r   g      Ð?gffffffÖ?r%   )r    r!   r   r   r   r   r$   r"   r#   )r   r   r   r   Ztest_gemm_all_attributesr&   r5   r0   r   r   r   Úexport_all_attributesŒ   s,    ù	      ÿzGemm.export_all_attributesN)Ú__name__Ú
__module__Ú__qualname__Ústaticmethodr2   r6   r7   r9   r:   r<   r=   r>   r@   rA   rB   r   r   r   r   r      s,   






r   )Nr   r   r   r   )Ú
__future__r   Znumpyr   r)   Zonnx.backend.test.case.baser   Zonnx.backend.test.case.noder   r   r   r   r   r   r   Ú<module>   s        ù