o
    to™ir  ã                   @  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rMejd
d dS 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'   úZ/home/ubuntu/.local/lib/python3.10/site-packages/onnx/test/model_container_refeval_test.pyÚ_linear_regression   s4   ýÿþþø÷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_containerÚ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   s<   ýÿÿÿù÷þþr0   c                   @  s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚTestLargeOnnxReferenceEvaluatorc                 C  sj   t  d¡ t j¡ d¡}tj |¡}| d d|i¡}t j	g d¢g d¢g d¢gt jd}t
 |d |¡ d S )	Nr   r   r   )ihk i } iØ )ipT, i0 / iðë2 )ix=J iÀÂO iHU )Údtyper   )r   r   r   r    r!   r   Ú	referenceÚReferenceEvaluatorÚrunÚarrayÚnptÚ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 d   ƒ n1 s#w   Y  t 	¡ $}t
j |d¡}| |¡ tj ¡ }| |¡ |  |¡ W d   ƒ d S 1 sSw   Y  d S )Nz#anymissingkeyú
model.onnx)r)   r   r,   r.   r%   r>   ÚassertRaisesÚ
ValueErrorÚtempfileÚTemporaryDirectoryÚosÚpathÚjoinÚsaveÚModelContainerÚload)r9   Úmodel_protor/   ÚtempÚfilenameÚcopyr'   r'   r(   Ú$test_large_onnx_no_large_initializerf   s   

ÿ



"ûzDTestLargeOnnxReferenceEvaluator.test_large_onnx_no_large_initializerc                 C  s„   t ƒ }|  |¡ t ¡ ,}tj |d¡}| |d¡ tj	 
¡ }| |¡ tj|dd}|  |¡ W d   ƒ d S 1 s;w   Y  d S )Nr?   T©Úload_external_data)r0   r>   rB   rC   rD   rE   rF   rG   r   r,   rH   rI   Ú
load_model©r9   r/   rK   rL   rM   Úloaded_modelr'   r'   r(   Útest_large_one_weight_filet   ó   



"úz:TestLargeOnnxReferenceEvaluator.test_large_one_weight_filec                 C  s„   t ƒ }|  |¡ t ¡ ,}tj |d¡}| |d¡ t 	|¡}|  |¡ tj	|dd}|  |¡ W d   ƒ d S 1 s;w   Y  d S )Nr?   FTrO   )
r0   r>   rB   rC   rD   rE   rF   rG   r   rQ   rR   r'   r'   r(   Útest_large_multi_files   rU   z6TestLargeOnnxReferenceEvaluator.test_large_multi_filesN)Ú__name__Ú
__module__Ú__qualname__r>   rN   rT   rV   r'   r'   r'   r(   r1   W   s
    r1   Ú__main__é   )Ú	verbosity)Ú
__future__r   rD   rB   ÚunittestÚnumpyr   Únumpy.testingÚtestingr7   r   Úonnx.helperÚonnx.model_containerÚonnx.numpy_helperÚonnx.referencer)   r0   ÚTestCaser1   rW   Úmainr'   r'   r'   r(   Ú<module>   s"   $4ÿ