o
    toi 2                     @  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Z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re  dS dS )    )annotationsN)serializationreturnonnx.ModelProtoc                  C  s"   t  } t j| _d| _d| j_| S )Nz	onnx-testtest)onnx
ModelProto
IR_VERSION
ir_versionproducer_namegraphname)model r   H/home/ubuntu/.local/lib/python3.10/site-packages/onnx/test/basic_test.py_simple_model   s
   r   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   	data_typedimsvals)r   helpermake_tensorTensorProtoFLOATranger   r   r   r   _simple_tensor   s   r"   formatprotobuf	textprotojsononnxtxtc                   @  s>   e Zd ZU ded< dddZdddZdd	d
ZdddZdS )TestIOstrr#   r   Nonec                 C  :   t  }tj| j|}tj|| jd}| || d S Nr#   )	r   r   registrygetr#   serialize_protor   load_model_from_stringassertEqualselfprotoproto_stringloaded_protor   r   r   #test_load_model_when_input_is_bytes0      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/   r0   ioBytesIOr   
save_modelr#   
load_modelgetvaluer2   )r4   r5   r6   fr7   r   r   r   5test_save_and_load_model_when_input_has_read_function6   s   z<TestIO.test_save_and_load_model_when_input_has_read_functionc                 C  p   t  }t '}tj|d}tj||| jd tj	|| jd}| 
|| W d    d S 1 s1w   Y  d S Nz
model.onnxr-   )r   tempfileTemporaryDirectoryospathjoinr   r<   r#   r=   r2   r4   r5   temp_dir
model_pathr7   r   r   r   0test_save_and_load_model_when_input_is_file_nameA   s   
"z7TestIO.test_save_and_load_model_when_input_is_file_namec                 C  n   t  }t &}t|d}tj||| jd tj|| jd}| 	|| W d    d S 1 s0w   Y  d S rB   )
r   rC   rD   pathlibPathr   r<   r#   r=   r2   rH   r   r   r   /test_save_and_load_model_when_input_is_pathlikeI   s   
"z6TestIO.test_save_and_load_model_when_input_is_pathlikeNr   r*   )__name__
__module____qualname____annotations__r8   r@   rK   rO   r   r   r   r   r(   %   s   
 	


r(   c                   @  sB   e Zd ZU dZded< dddZddd	Zdd
dZdddZdS )TestIOTensorz'Test loading and saving of TensorProto.r)   r#   r   r*   c                 C  r+   r,   )	r"   r   r.   r/   r#   r0   r   load_tensor_from_stringr2   r3   r   r   r   $test_load_tensor_when_input_is_bytes_   r9   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"   r:   r;   r   save_tensorr#   load_tensorr>   r2   )r4   r5   r?   r7   r   r   r   6test_save_and_load_tensor_when_input_has_read_functione   s
   zCTestIOTensor.test_save_and_load_tensor_when_input_has_read_functionc                 C  rA   rB   )r"   rC   rD   rE   rF   rG   r   rX   r#   rY   r2   rH   r   r   r   1test_save_and_load_tensor_when_input_is_file_namem   s   
"z>TestIOTensor.test_save_and_load_tensor_when_input_is_file_namec                 C  rL   rB   )
r"   rC   rD   rM   rN   r   rX   r#   rY   r2   rH   r   r   r   0test_save_and_load_tensor_when_input_is_pathlikev   s   
"z=TestIOTensor.test_save_and_load_tensor_when_input_is_pathlikeNrP   )	rQ   rR   rS   __doc__rT   rW   rZ   r[   r\   r   r   r   r   rU   R   s   
 	


	rU   c                   @  sH   e Zd ZdddZdddZdddZdd	d
ZdddZdddZdS )TestSaveAndLoadFileExtensionsr   r*   c                 C  sh   t  }t #}tj|d}t|| tj|dd}| 	|| W d    d S 1 s-w   Y  d S Nmodel.textprotor%   r-   
r   rC   rD   rE   rF   rG   r   r<   r=   r2   rH   r   r   r   3test_save_model_picks_correct_format_from_extension   s   
"zQTestSaveAndLoadFileExtensions.test_save_model_picks_correct_format_from_extensionc                 C  sh   t  }t #}tj|d}tj||dd t|}| 	|| W d    d S 1 s-w   Y  d S r_   ra   rH   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 J}tj|d}tj||dd tj|dd}| 	|| | 
tjjj t| W d    n1 s<w   Y  W d    d S W d    d S 1 sTw   Y  d S )Nr`   r$   r-   )r   rC   rD   rE   rF   rG   r   r<   r=   r2   assertRaisesgoogler$   text_format
ParseErrorrH   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 B}tj|d}t|| | t	j
jj tj|dd W d    n1 s/w   Y  tj|dd}| || W d    d S 1 sLw   Y  d S )Nzmodel.protobufr%   r-   r$   r   rC   rD   rE   rF   rG   r   r<   rd   re   r$   rf   rg   r=   r2   rH   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 B}tj|d}tj||dd | t	j
jj t| W d    n1 s/w   Y  tj|dd}| || W d    d S 1 sLw   Y  d S )Nr   r%   r-   )r   rC   rD   rE   rF   rG   r   r<   rd   re   r$   messageDecodeErrorr=   r2   rH   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 M}tj|d}t|| | t	j
jj tj|dd W d    n1 s/w   Y  t|}| || tj|dd}| || W d    d S 1 sWw   Y  d S )Nr   r%   r-   r$   ri   )r4   r5   rI   rJ   r7   #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_protobufNrP   )	rQ   rR   rS   rb   rc   rh   rj   rm   ro   r   r   r   r   r^      s    

	
	

r^   c                   @  s4   e Zd ZdddZdddZdddZdd	d
ZdS )TestBasicFunctionsr   r*   c                 C  s   t j}t j}t j}t j}d S )N)r   AttributeProto	NodeProto
GraphProtor   )r4   _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   assertFalseHasFieldr	   r
   SerializeToStringParseFromString
assertTruer2   )r4   r   model_stringr   r   r   test_version_exists   s   
z&TestBasicFunctions.test_version_existsc                 C  sX   t  }t|}| |d d}tj|}t|}| |d t|j}| |d d S )NzNModelProto(ir_version=13, producer_name='onnx-test', graph=GraphProto('test'))a  
           <
             ir_version: 10,
             opset_import: [ "" : 19]
           >
           agraph (float[N] X) => (float[N] C)
           <
             float[1] weight = {1}
           >
           {
              C = Cast<to=1>(X)
           }
        zModelProto(ir_version=10, opset_import={'': 19}, graph=GraphProto('agraph', input=<1 inputs>, output=<1 outputs>, initializer=<1 initializers>, node=<1 nodes>))zhGraphProto('agraph', input=<1 inputs>, output=<1 outputs>, initializer=<1 initializers>, node=<1 nodes>))r   reprr2   r   parserparse_modelr   )r4   r   
model_repr
text_model
graph_reprr   r   r   test_model_and_graph_repr   s$   
z,TestBasicFunctions.test_model_and_graph_reprc                 C  s>   d}t j|}| t|d t|jd }| |d d S )Nac  
            <
            ir_version: 9,
            opset_import: [ "" : 15, "custom_domain" : 1],
            producer_name: "FunctionProtoTest",
            producer_version: "1.0",
            model_version: 1,
            doc_string: "A test model for model local functions."
          >
         agraph (float[N] x) => (float[N] out)
         {
            out = custom_domain.Selu<alpha=2.0, gamma=3.0>(x)
         }
         <
         domain: "custom_domain",
         opset_import: [ "" : 15],
         doc_string: "Test function proto"
         >
           Selu
           <alpha: float=1.67326319217681884765625, gamma: float=1.05070102214813232421875>
           (X) => (C)
           {
               constant_alpha = Constant<value_float: float=@alpha>()
               constant_gamma = Constant<value_float: float=@gamma>()
               alpha_x = CastLike(constant_alpha, X)
               gamma_x = CastLike(constant_gamma, X)
               exp_x = Exp(X)
               alpha_x_exp_x = Mul(alpha_x, exp_x)
               alpha_x_exp_x_ = Sub(alpha_x_exp_x, alpha_x)
               neg = Mul(gamma_x, alpha_x_exp_x_)
               pos = Mul(gamma_x, X)
               _zero = Constant<value_float=0.0>()
               zero = CastLike(_zero, X)
               less_eq = LessOrEqual(X, zero)
               C = Where(less_eq, neg, pos)
           }
        zModelProto(ir_version=9, opset_import={'': 15, 'custom_domain': 1}, producer_name='FunctionProtoTest', producer_version='1.0', graph=GraphProto('agraph', input=<1 inputs>, output=<1 outputs>, node=<1 nodes>), functions=<1 functions>)r   z{FunctionProto('Selu', domain='custom_domain', opset_import={'': 15}, input=<1 inputs>, output=<1 outputs>, node=<13 nodes>))r   r~   r   r2   r}   	functions)r4   textr   function_reprr   r   r   test_function_repr  s   %z%TestBasicFunctions.test_function_reprNrP   )rQ   rR   rS   ru   r|   r   r   r   r   r   r   rp      s
    


#rp   __main__)r   r   )r   r   )
__future__r   r:   rE   rM   rC   unittestgoogle.protobuf.messagere   google.protobuf.text_formatparameterizedr   r   r   r"   parameterized_classTestCaser(   rU   r^   rp   rQ   mainr   r   r   r   <module>   sB   

	%&Pj