U
    qh%                     @  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Zd dl	Zd dl
Z
d dlZd dlmZ ddddZddd	d
Ze
ddiddiddiddigG dd dejZe
ddiddiddigG dd dejZG dd dejZG dd dejZedkre  dS )    )annotationsN)serializationzonnx.ModelProtoreturnc                  C  s"   t  } t j| _d| _d| j_| S )Nz	onnx-testtest)onnx
ModelProto
IR_VERSION
ir_versionZproducer_namegraphname)model r   8/tmp/pip-unpacked-wheel-xnis5xre/onnx/test/basic_test.py_simple_model   s
    r   zonnx.TensorProtoc                  C  s*   t jjdt jjddd tdD d} | S )Nztest-tensor)         c                 S  s   g | ]}|d  qS )g      ?r   ).0xr   r   r   
<listcomp>!   s     z"_simple_tensor.<locals>.<listcomp>   )r   Z	data_typeZdimsvals)r   helperZmake_tensorZTensorProtoFLOATrange)Ztensorr   r   r   _simple_tensor   s    r   formatprotobuf	textprotojsonZonnxtxtc                   @  sN   e Zd ZU ded< ddddZddddZddd	d
ZddddZdS )TestIOstrr   Noner   c                 C  s:   t  }tj| j|}tj|| jd}| || d S Nr   )	r   r   registrygetr   serialize_protor   Zload_model_from_stringassertEqualselfprotoproto_stringloaded_protor   r   r   #test_load_model_when_input_is_bytes1   s    z*TestIO.test_load_model_when_input_is_bytesc                 C  s\   t  }tjd|}t }tj||| j	d tj
t| | j	d}| || d S )Nr   r%   )r   r   r&   r'   r(   ioBytesIOr   
save_modelr   
load_modelgetvaluer)   )r+   r,   r-   fr.   r   r   r   5test_save_and_load_model_when_input_has_read_function7   s    z<TestIO.test_save_and_load_model_when_input_has_read_functionc              	   C  sZ   t  }t B}tj|d}tj||| jd tj	|| jd}| 
|| W 5 Q R X d S Nz
model.onnxr%   )r   tempfileTemporaryDirectoryospathjoinr   r2   r   r3   r)   r+   r,   temp_dir
model_pathr.   r   r   r   0test_save_and_load_model_when_input_is_file_nameB   s    
z7TestIO.test_save_and_load_model_when_input_is_file_namec              	   C  sX   t  }t @}t|d}tj||| jd tj|| jd}| 	|| W 5 Q R X d S r7   )
r   r8   r9   pathlibPathr   r2   r   r3   r)   r=   r   r   r   /test_save_and_load_model_when_input_is_pathlikeJ   s    
z6TestIO.test_save_and_load_model_when_input_is_pathlikeN)__name__
__module____qualname____annotations__r/   r6   r@   rC   r   r   r   r   r!   &   s
   
	r!   c                   @  sR   e Zd ZU dZded< ddddZdddd	Zddd
dZddddZdS )TestIOTensorz'Test loading and saving of TensorProto.r"   r   r#   r   c                 C  s:   t  }tj| j|}tj|| jd}| || d S r$   )	r   r   r&   r'   r   r(   r   Zload_tensor_from_stringr)   r*   r   r   r   $test_load_tensor_when_input_is_bytes`   s    z1TestIOTensor.test_load_tensor_when_input_is_bytesc                 C  sJ   t  }t }tj||| jd tjt| | jd}| || d S r$   )	r   r0   r1   r   save_tensorr   load_tensorr4   r)   )r+   r,   r5   r.   r   r   r   6test_save_and_load_tensor_when_input_has_read_functionf   s
    zCTestIOTensor.test_save_and_load_tensor_when_input_has_read_functionc              	   C  sZ   t  }t B}tj|d}tj||| jd tj	|| jd}| 
|| W 5 Q R X d S r7   )r   r8   r9   r:   r;   r<   r   rJ   r   rK   r)   r=   r   r   r   1test_save_and_load_tensor_when_input_is_file_namen   s    
z>TestIOTensor.test_save_and_load_tensor_when_input_is_file_namec              	   C  sX   t  }t @}t|d}tj||| jd tj|| jd}| 	|| W 5 Q R X d S r7   )
r   r8   r9   rA   rB   r   rJ   r   rK   r)   r=   r   r   r   0test_save_and_load_tensor_when_input_is_pathlikew   s    
z=TestIOTensor.test_save_and_load_tensor_when_input_is_pathlikeN)	rD   rE   rF   __doc__rG   rI   rL   rM   rN   r   r   r   r   rH   S   s   
		rH   c                   @  s`   e Zd ZddddZddddZddddZddd	d
ZddddZddddZdS )TestSaveAndLoadFileExtensionsr#   r   c              	   C  sR   t  }t :}tj|d}t|| tj|dd}| 	|| W 5 Q R X d S Nmodel.textprotor   r%   
r   r8   r9   r:   r;   r<   r   r2   r3   r)   r=   r   r   r   3test_save_model_picks_correct_format_from_extension   s    
zQTestSaveAndLoadFileExtensions.test_save_model_picks_correct_format_from_extensionc              	   C  sR   t  }t :}tj|d}tj||dd t|}| 	|| W 5 Q R X d S rQ   rS   r=   r   r   r   3test_load_model_picks_correct_format_from_extension   s    

zQTestSaveAndLoadFileExtensions.test_load_model_picks_correct_format_from_extensionc              
   C  s|   t  }t d}tj|d}tj||dd tj|dd}| 	|| | 
tjjj t| W 5 Q R X W 5 Q R X d S )NrR   r   r%   )r   r8   r9   r:   r;   r<   r   r2   r3   r)   assertRaisesgoogler   text_format
ParseErrorr=   r   r   r   0test_save_model_uses_format_when_it_is_specified   s    
zNTestSaveAndLoadFileExtensions.test_save_model_uses_format_when_it_is_specifiedc              
   C  s|   t  }t d}tj|d}t|| | t	j
jj tj|dd W 5 Q R X tj|dd}| || W 5 Q R X d S )Nzmodel.protobufr   r%   r   r   r8   r9   r:   r;   r<   r   r2   rV   rW   r   rX   rY   r3   r)   r=   r   r   r   0test_load_model_uses_format_when_it_is_specified   s    
zNTestSaveAndLoadFileExtensions.test_load_model_uses_format_when_it_is_specifiedc              
   C  s|   t  }t d}tj|d}tj||dd | t	j
jj t| W 5 Q R X tj|dd}| || W 5 Q R X d S )Nr   r   r%   )r   r8   r9   r:   r;   r<   r   r2   rV   rW   r   messageDecodeErrorr3   r)   r=   r   r   r   Ftest_load_and_save_model_to_path_without_specifying_extension_succeeds   s    
zdTestSaveAndLoadFileExtensions.test_load_and_save_model_to_path_without_specifying_extension_succeedsc              
   C  s   t  }t z}tj|d}t|| | t	j
jj tj|dd W 5 Q R X t|}| || tj|dd}| || W 5 Q R X d S )Nr   r   r%   r   r[   )r+   r,   r>   r?   r.   Z#loaded_proto_as_explicitly_protobufr   r   r   Ttest_load_and_save_model_without_specifying_extension_or_format_defaults_to_protobuf   s    

 zrTestSaveAndLoadFileExtensions.test_load_and_save_model_without_specifying_extension_or_format_defaults_to_protobufN)	rD   rE   rF   rT   rU   rZ   r\   r_   r`   r   r   r   r   rP      s   		rP   c                   @  s(   e Zd ZddddZddddZdS )TestBasicFunctionsr#   r   c                 C  s   t j}t j}t j}t j}d S )N)r   ZAttributeProtoZ	NodeProtoZ
GraphProtor   )r+   _r   r   r   test_protos_exist   s    z$TestBasicFunctions.test_protos_existc                 C  sV   t  }| |d t j|_| }|| | |d | 	|jt j d S )Nr
   )
r   r   ZassertFalseZHasFieldr	   r
   ZSerializeToStringZParseFromString
assertTruer)   )r+   r   Zmodel_stringr   r   r   test_version_exists   s    
z&TestBasicFunctions.test_version_existsN)rD   rE   rF   rc   re   r   r   r   r   ra      s   ra   __main__)
__future__r   r0   r:   rA   r8   ZunittestZgoogle.protobuf.messagerW   Zgoogle.protobuf.text_formatZparameterizedr   r   r   r   Zparameterized_classZTestCaser!   rH   rP   ra   rD   mainr   r   r   r   <module>   s>   
%&P
