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Zd dlm	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é
   )Ú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&   úB/tmp/pip-unpacked-wheel-xnis5xre/onnx/test/model_container_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   ú#loc1éd   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_regression2   sJ    ý   ÿ ÿ   ÿù÷þþr/   c                   @  s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚTestLargeOnnxc              
   C  s¶   t ƒ }t|tjƒst‚tj |j¡}t|tjjƒs6t‚t	 
¡ n}tj |d¡}| |¡ tj ¡ }|  t¡ |jsxt‚W 5 Q R X | |¡ |jd k	sšt‚tj |j¡ W 5 Q R X d S )Nú
model.onnx)r(   Ú
isinstancer   Ú
ModelProtoÚAssertionErrorr,   r-   r$   ÚModelContainerÚtempfileÚTemporaryDirectoryÚosÚpathÚjoinÚsaveÚassertRaisesÚRuntimeErrorÚmodel_protoÚloadr"   r#   )Úselfr>   r.   ÚtempÚfilenameÚcopyr&   r&   r'   Ú$test_large_onnx_no_large_initializerW   s    



z2TestLargeOnnx.test_large_onnx_no_large_initializerc              	   C  s   t ƒ }t|tjjƒst‚t ¡ f}tj	 
|d¡}| |d¡}t|tjƒsLt‚tj ¡ }| |¡ | ¡  tj|dd}tj |¡ W 5 Q R X d S )Nr1   T©Zload_external_data)r/   r2   r   r,   r5   r4   r6   r7   r8   r9   r:   r;   r3   r?   r#   Ú
load_modelr"   )r@   r.   rA   rB   Úsaved_protorC   Úloaded_modelr&   r&   r'   Útest_large_one_weight_filef   s    


z(TestLargeOnnx.test_large_one_weight_filec           
   	   C  sä   t ƒ }t|tjjƒst‚t ¡ º}tj	 
|d¡}| |d¡}t|tjƒsLt‚t |¡}tj |¡ t |¡D ]N}t |¡rld}|jD ](}|jdkr„tj	 |j¡s¤t‚|d7 }q„|  |d¡ qltj|dd}	tj |	¡ W 5 Q R X d S )Nr1   Fr   Úlocationé   TrE   )r/   r2   r   r,   r5   r4   r6   r7   r8   r9   r:   r;   r3   rF   r"   r#   Úext_dataZ_get_all_tensorsZuses_external_dataZexternal_dataÚkeyÚexistsÚvalueÚassertEqual)
r@   r.   rA   rB   rG   rC   ZtensorZtestedÚextrH   r&   r&   r'   Útest_large_multi_filess   s$    





z$TestLargeOnnx.test_large_multi_filesN)Ú__name__Ú
__module__Ú__qualname__rD   rI   rR   r&   r&   r&   r'   r0   V   s   r0   Ú__main__é   )Ú	verbosity)Ú
__future__r   r8   r6   ZunittestZnumpyr   r   Zonnx.external_data_helperZexternal_data_helperrL   Zonnx.helperZonnx.model_containerZonnx.numpy_helperr(   r/   ZTestCaser0   rS   Úmainr&   r&   r&   r'   Ú<module>   s   $2