U
    q±Ėh  ć                   @  s   d dl mZ d dlZd dlZd dlZd dlZd dlmZ	 d dl
Z
d dlZ
d dlZ
d dlZ
d dlZ
dd Zdd ZG dd dejZed	krejd
d dS )é    )ŚannotationsNc                  C  s  t j dt jjd d g”} t j dt jjd g”}t j t j dddgdg”t j dddgdg”t j dddgdg”gd	| g|gt jjt	 
d
” t	j” d”ddt jjt	 
d
”d  t	j” d”ddt jjt	 
d
”d  t	j” d”ddg”}t j |”}t j |” |S )NŚXŚYŚMatMulŚAŚXAŚBŚXBŚCŚmmé	   ©é’’’’é   ©Śnameéd   é
   )ŚonnxŚhelperŚmake_tensor_value_infoŚTensorProtoŚFLOATŚ
make_graphŚ	make_nodeŚnumpy_helperŚ
from_arrayŚnpŚarangeŚastypeŚfloat32ŚreshapeŚ
make_modelŚcheckerŚcheck_model)r   r   ŚgraphŚ
onnx_model© r'   śJ/tmp/pip-unpacked-wheel-xnis5xre/onnx/test/model_container_refeval_test.pyŚ_linear_regression   s6    ż ’žžų÷r)   c                  C  s*  t j dt jjd d g”} t j dt jjd g”}t j t j dddgdg”t j dddgdg”t j dddgdg”gd	| g|gt j d
dt jjd”t j	j
t d” tj” d”ddt j ddt jjd”g”}t j |”}t j |jt d”d  tj” d”t d”d  tj” d”d”}| ”  |S )Nr   r   r   r   r   r   r	   r
   r   ś#loc0)r   r   r   r   r   ś#loc1r   r   )r*   r+   )r   r   r   r   r   r   r   Śmodel_containerZmake_large_tensor_protor   r   r   r   r   r    r!   r"   Śmake_large_modelr%   r$   )r   r   r%   r&   Ślarge_modelr'   r'   r(   Ś_large_linear_regression3   sJ    ż   ’ ’   ’ł÷žžr/   c                   @  s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
ŚTestLargeOnnxReferenceEvaluatorc                 C  sp   t  d” t j” d”}tj |”}| d d|i”}t j	dddgddd	gd
ddggt jd}t
 ||d ” d S )Nr   r   r   ihk i } iŲ ipT, i0 / išė2 ix=J iĄĀO iHU )Zdtyper   )r   r   r   r    r!   r   Ś	referenceZReferenceEvaluatorŚrunŚarrayŚnptZassert_allclose)ŚselfŚ	containerr   ŚrefŚgotŚexpectedr'   r'   r(   Ś common_check_reference_evaluatorX   s    żśz@TestLargeOnnxReferenceEvaluator.common_check_reference_evaluatorc              	   C  s   t  }tj |j”}|  |” |  t” |d  W 5 Q R X t 	” <}t
j |d”}| |” tj ” }| |” |  |” W 5 Q R X d S )Nz#anymissingkeyś
model.onnx)r)   r   r,   r-   r%   r:   ŚassertRaisesŚ
ValueErrorŚtempfileŚTemporaryDirectoryŚosŚpathŚjoinŚsaveŚModelContainerŚload)r5   Zmodel_protor.   ŚtempŚfilenameŚcopyr'   r'   r(   Ś$test_large_onnx_no_large_initializerf   s    




zDTestLargeOnnxReferenceEvaluator.test_large_onnx_no_large_initializerc              	   C  sn   t  }|  |” t ” L}tj |d”}| |d” tj	 
” }| |” tj|dd}|  |” W 5 Q R X d S )Nr;   T©Zload_external_data)r/   r:   r>   r?   r@   rA   rB   rC   r   r,   rD   rE   Ś
load_model©r5   r.   rF   rG   rH   Zloaded_modelr'   r'   r(   Śtest_large_one_weight_filet   s    



z:TestLargeOnnxReferenceEvaluator.test_large_one_weight_filec              	   C  sn   t  }|  |” t ” L}tj |d”}| |d” t 	|”}|  |” tj	|dd}|  |” W 5 Q R X d S )Nr;   FTrJ   )
r/   r:   r>   r?   r@   rA   rB   rC   r   rK   rL   r'   r'   r(   Śtest_large_multi_files   s    



z6TestLargeOnnxReferenceEvaluator.test_large_multi_filesN)Ś__name__Ś
__module__Ś__qualname__r:   rI   rM   rN   r'   r'   r'   r(   r0   W   s   r0   Ś__main__é   )Ś	verbosity)Ś
__future__r   r@   r>   ZunittestZnumpyr   Znumpy.testingZtestingr4   r   Zonnx.helperZonnx.model_containerZonnx.numpy_helperZonnx.referencer)   r/   ZTestCaser0   rO   Śmainr'   r'   r'   r(   Ś<module>   s   $4