U
    qh[@                  
   @  s   d dl m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mZ G dd dej	Z
G dd dej	ZG d	d
 d
ej	ZG dd dej	ZG dd dej	ZedddddddgddddddddgdgG dd dej	Zedkre  dS )    )annotationsN)Sequence)defsc                   @  sD   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S )
TestSchemaNonereturnc                 C  s   t d d S )NZRelur   
get_schemaself r   9/tmp/pip-unpacked-wheel-xnis5xre/onnx/test/schema_test.pytest_get_schema   s    zTestSchema.test_get_schemac                 C  s   t d d S )NZConvr	   r   r   r   r   test_typecheck   s    zTestSchema.test_typecheckc                 C  s:   t djd j}| t|tj | |jtjj d S )NBatchNormalizationepsilon)	r   r
   
attributesdefault_valueassertEqualtypeonnxAttributeProtoFLOAT)r   vr   r   r   test_attr_default_value   s    z"TestSchema.test_attr_default_valuec                 C  s   |  ttdjtj d S )NZSelu)r   r   r   r
   Zfunction_bodyr   ZFunctionProtor   r   r   r   test_function_body   s     zTestSchema.test_function_bodyN)__name__
__module____qualname__r   r   r   r   r   r   r   r   r      s   r   c                   @  sn   e Zd Zdd ZddddZddddZddd	d
Zdd Zdd Zdd Z	dd Z
dd Zdd ZdS )TestOpSchemac                 C  s    t ddd}| |t j d S Ntest_optest_domain   )r   OpSchemaassertIsInstancer   schemar   r   r   	test_init#   s    zTestOpSchema.test_initr   r   c                 C  s   t jdddt jddgddgdfgd}| |jd | |jd | |jd | t|jd | |jd	 jd | |jd	 j	d | t|j
d | |j
d	 jd | |j
d	 jdg d S )
Nr"   r#   r$   input1Ttensor(int64) inputstype_constraintsr   )r   r%   FormalParameterr   namedomainsince_versionlenr/   type_strr0   type_param_strallowed_type_strsr   	op_schemar   r   r   test_init_with_inputs(   s&    
 z"TestOpSchema.test_init_with_inputsc                 C  s  t jdddt jddt jddgt jddt jddgdd	gd
fgt jdt jjjdgd}| t|jd | |jd j	d | |jd j
d | |jd j	d | |jd j
d | t|jd | |jd j	d | |jd j
d | |jd j	d | |jd j
d | t|jd | |jd jd | |jd jd	g | t|jd | |jd j	d | |jd jt jjj | |jd jd d S )Nr"   r#   r$   r*   r+   input2output1Zoutput2r,   r-   attr1attr1 descriptionr/   outputsr0   r      r   )r   r%   r1   	AttributeAttrTypeINTSr   r5   r/   r2   r6   rA   r0   r7   r8   r   r   descriptionr9   r   r   r   +test_init_creates_multi_input_output_schema<   sR      
 
 z8TestOpSchema.test_init_creates_multi_input_output_schemac                 C  sr   t ddd}| |jd | |jd | |jd | t|jd | t|jd | t|j	d d S )Nr"   r#   r$   r   )
r   r%   r   r2   r3   r4   r5   r/   rA   r0   r9   r   r   r   $test_init_without_optional_argumentsf   s    z1TestOpSchema.test_init_without_optional_argumentsc              	   C  sh   |  t tjddd W 5 Q R X |  t tddd W 5 Q R X tddd}| |jd d S )Nr#   r$   )r3   r4   {   r"   )assertRaises	TypeErrorr   r%   r   r2   r'   r   r   r   	test_nameo   s    zTestOpSchema.test_namec              	   C  sh   |  t tjddd W 5 Q R X |  t tddd W 5 Q R X tddd}| |jd d S )Nr"   r$   )r2   r4   rI   r#   )rJ   rK   r   r%   r   r3   r'   r   r   r   r#   y   s    zTestOpSchema.test_domainc              	   C  sB   |  t tdd W 5 Q R X tddd}| |jd d S r!   )rJ   rK   r   r%   r   r4   r'   r   r   r   test_since_version   s    zTestOpSchema.test_since_versionc                 C  s$   t jddddd}| |jd d S )Nr"   r#   r$   test_doc)doc)r   r%   r   rO   r'   r   r   r   rN      s    zTestOpSchema.test_docc                 C  s   t jjddddg}t jddd|ddgd	fgd
}| t|jd | |jd jd | |jd jd | |jd jd d S )Nr*   r+   The first input.r2   r6   rF   r"   r#   r$   r,   r-   r.   r   )	r   r%   r1   r   r5   r/   r2   r6   rF   )r   r/   r(   r   r   r   test_inputs   s"      zTestOpSchema.test_inputsc                 C  s   t jjddddg}t jddd|ddgd	fgd
}| t|jd | |jd jd | |jd jd | |jd jd d S )Nr=   r+   zThe first output.rQ   r"   r#   r$   r,   r-   )rA   r0   r   )	r   r%   r1   r   r5   rA   r2   r6   rF   )r   rA   r(   r   r   r   test_outputs   s"      zTestOpSchema.test_outputsN)r   r   r   r)   r;   rG   rH   rL   r#   rM   rN   rR   rS   r   r   r   r   r    "   s   *	

r    c                   @  s   e Zd Zdd ZdS )TestFormalParameterc           	   	   C  s   d}d}d}t jjj}d}d}t jjj}t jj|||||||d}| |j| | |j	| | |j
| | |j| | |j| | |j| | |j| d S )Nr*   tensor(float)rP   Tr$   )param_optionis_homogeneous	min_aritydifferentiation_category)r   r%   ZFormalParameterOptionSingleZDifferentiationCategoryUnknownr1   r   r2   r6   rF   optionrW   rX   rY   )	r   r2   r6   rF   rV   rW   rX   rY   Zformal_parameterr   r   r   r)      s4    


 zTestFormalParameter.test_initN)r   r   r   r)   r   r   r   r   rT      s   rT   c                   @  sJ   e Zd Zejdddgdfddddgdfdgddd	dd
dddZdS )TestTypeConstraintParamZsingle_typer+   rU   Test descriptionZdouble_typesr,   )tupler+   )rU   r,   r^   strzSequence[str]r   )_r7   allowed_typesrF   r   c                 C  sB   t j|||}| |j| | |jt| | |j| d S N)r   r%   ZTypeConstraintParamr   rF   r8   listr7   )r   ra   r7   rb   rF   Ztype_constraintr   r   r   r)      s      z!TestTypeConstraintParam.test_initN)r   r   r   parameterizedexpandr)   r   r   r   r   r]      s   r]   c                   @  s   e Zd Zdd Zdd ZdS )TestAttributec                 C  sP   d}t jjj}d}t j|||}| |j| | |j| | |j| d S )NZ	test_attrzTest attribute)	r   r%   rD   ZSTRINGSrC   r   r2   r   rF   )r   r2   type_rF   	attributer   r   r   r)      s    
zTestAttribute.test_initc                 C  s^   t djd j}| |tj t jd|d}| 	||j | 	d|j
 | 	d|j d S )Nr   r   r>   r?   )r   r
   r   r   r&   r   r   r%   rC   r   r2   rF   )r   r   ri   r   r   r   test_init_with_default_value   s    z*TestAttribute.test_init_with_default_valueN)r   r   r   r)   rj   r   r   r   r   rg      s   
rg   ZCustomOp   r-   r$   rB         )op_type
op_version	op_domaintrap_op_versiontestc                   @  sz   e Zd ZU ded< ded< ded< ded< dd	d
dZdd	ddZdd Zdd Zdd Zdd Z	dd Z
dd ZdS )TestOpSchemaRegisterr`   rn   intro   rp   z	list[int]rq   r   r   c                 C  s   |  tj| j| j d S rc   )ZassertFalser   r   hasrn   rp   r   r   r   r   setUp!  s    zTestOpSchemaRegister.setUpc              
   C  sF   | j | jfD ]2}ttjj tj| j|| j	 W 5 Q R X qd S rc   )
rq   ro   
contextlibsuppressr   r   SchemaErrorderegister_schemarn   rp   )r   versionr   r   r   tearDown%  s    zTestOpSchemaRegister.tearDownc                 C  s   | j | jfD ]<}t| j| j|}tj| | tj	| j|| j q| j | jfD ]>}tj
|j||j}t| j| j|}| t|t| qZd S rc   )rq   ro   r   r%   rn   rp   r   register_schema
assertTrueru   r
   r2   r3   r   r`   )r   r{   r:   Zregistered_opr   r   r   test_register_multi_schema+  s(      z/TestOpSchemaRegister.test_register_multi_schemac                 C  s  d| j  d| j d| j  d| j d	}tj|}tj| j| j | jtjddtjdd	gtjd
dgddgdfgtj	dtjj
jdgd}| tjj tjj|dd W 5 Q R X tj| | jD ].}tjtj| j| j |tjd
d	gd qtjj|dd d S )Nzc
            <
                ir_version: 7,
                opset_import: [
                    "z" : z
                ]
            >
            agraph (float[N, 128] X, int32 Y) => (float[N] Z)
            {
                Z = .z-<attr1=[1,2]>(X, Y)
            }
           r*   r+   r<   Zint32r=   rU   r-   r>   r?   r@   T)Zcheck_custom_domain)rA   )rp   ro   rn   r   parserZparse_modelr   r%   r1   rC   rD   rE   rJ   checkerZValidationErrorZcheck_modelr}   rq   )r   inputmodelr:   r{   r   r   r   .test_using_the_specified_version_in_onnx_check@  sR    	  

zCTestOpSchemaRegister.test_using_the_specified_version_in_onnx_checkc              	   C  sJ   t | j| j| j}tj | | tj j tj | W 5 Q R X d S rc   )	r   r%   rn   rp   ro   r   r}   rJ   ry   r9   r   r   r   Atest_register_schema_raises_error_when_registering_a_schema_twiceq  s    zVTestOpSchemaRegister.test_register_schema_raises_error_when_registering_a_schema_twicec                 C  s   | j | jfD ]<}t| j| j|}tj| | tj	|j
||j qtj|j
| j|j | j D ]}| tj	|j
||j qhtj	|j
| j|jrtj|j
| j|j}| |j| j d S rc   )rq   ro   r   r%   rn   rp   r   r}   r~   ru   r2   r3   rz   r
   Z
assertLessr4   )r   r{   r:   r(   r   r   r   $test_deregister_the_specified_schema{  s$    
  z9TestOpSchemaRegister.test_deregister_the_specified_schemac              	   C  s4   |  tjj tj| j| j| j W 5 Q R X d S rc   )rJ   r   r   ry   rz   rn   ro   rp   r   r   r   r   @test_deregister_schema_raises_error_when_opschema_does_not_exist  s    zUTestOpSchemaRegister.test_deregister_schema_raises_error_when_opschema_does_not_existc                   s   t | j| j| j tj   tj  j j	 j
}tj  j j
} fdd}|tj  }|tj  }| t|d | t|d | t|t  | t|t  | t|d t  | t|d t  d S )Nc                   s    fdd| D S )Nc                   s   g | ]}|j  j kr|qS r   )r2   ).0opr:   r   r   
<listcomp>  s      znTestOpSchemaRegister.test_legacy_schema_accessible_after_deregister.<locals>.filter_schema.<locals>.<listcomp>r   )Zschemasr   r   r   filter_schema  s    zZTestOpSchemaRegister.test_legacy_schema_accessible_after_deregister.<locals>.filter_schemar$   r   )r   r%   rn   rp   ro   r   r}   r
   r2   r4   r3   Zget_all_schemasZget_all_schemas_with_historyr   r5   r`   )r   Zschema_aZschema_br   Zschema_cZschema_dr   r   r   .test_legacy_schema_accessible_after_deregister  s*      zCTestOpSchemaRegister.test_legacy_schema_accessible_after_deregisterN)r   r   r   __annotations__rv   r|   r   r   r   r   r   r   r   r   r   r   rs     s   
1
rs   __main__)
__future__r   rw   Zunittesttypingr   re   r   r   ZTestCaser   r    rT   r]   rg   Zparameterized_classrs   r   mainr   r   r   r   <module>   s:    

 