o
    wi@                     @  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 er*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g dddddg ddgG dd dejZedkre  dS dS )    )annotationsN)TYPE_CHECKING)defs)Sequencec                   @  s4   e Zd ZdddZdddZdddZdd	d
ZdS )
TestSchemareturnNonec                 C     t d d S )NRelur   
get_schemaself r   R/home/ubuntu/sommelier/.venv/lib/python3.10/site-packages/onnx/test/schema_test.pytest_get_schema      zTestSchema.test_get_schemac                 C  r	   )NConvr   r   r   r   r   test_typecheck   r   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 )NSelu)r   r   r   r   function_bodyr   FunctionProtor   r   r   r   test_function_body   s   zTestSchema.test_function_bodyNr   r   )__name__
__module____qualname__r   r   r   r#   r   r   r   r   r      s
    


r   c                   @  sb   e Zd Zdd ZdddZdddZ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lenr7   type_strr8   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,   r2   r3   input2output1output2r4   r5   attr1attr1 descriptionr7   outputsr8   r      r   )r   r-   r9   	AttributeAttrTypeINTSr   r=   r7   r:   r>   rJ   r8   r?   r@   r   r   descriptionrA   r   r   r   +test_init_creates_multi_input_output_schema?   sJ   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   r:   r;   r<   r=   r7   rJ   r8   rA   r   r   r   $test_init_without_optional_argumentsi   s   z1TestOpSchema.test_init_without_optional_argumentsc                 C  s   |  t tjddd W d    n1 sw   Y  |  t tddd W d    n1 s3w   Y  tddd}| |jd d S )Nr+   r,   )r;   r<   {   r*   )assertRaises	TypeErrorr   r-   r   r:   r/   r   r   r   	test_namer      zTestOpSchema.test_namec                 C  s   |  t tjddd W d    n1 sw   Y  |  t tddd W d    n1 s3w   Y  tddd}| |jd d S )Nr*   r,   )r:   r<   rR   r+   )rS   rT   r   r-   r   r;   r/   r   r   r   r+   |   rV   zTestOpSchema.test_domainc                 C  sV   |  t tdd W d    n1 sw   Y  tddd}| |jd d S r)   )rS   rT   r   r-   r   r<   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   rY   r/   r   r   r   rX      s   zTestOpSchema.test_docc                 C     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 )Nr2   r3   The first input.r:   r>   rO   r*   r+   r,   r4   r5   r6   r   )	r   r-   r9   r   r=   r7   r:   r>   rO   )r   r7   r0   r   r   r   test_inputs   s   zTestOpSchema.test_inputsc                 C  rZ   )NrE   r3   zThe first output.r\   r*   r+   r,   r4   r5   )rJ   r8   r   )	r   r-   r9   r   r=   rJ   r:   r>   rO   )r   rJ   r0   r   r   r   test_outputs   s   zTestOpSchema.test_outputsNr$   )r%   r&   r'   r1   rC   rP   rQ   rU   r+   rW   rX   r]   r^   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 )Nr2   tensor(float)r[   Tr,   )param_optionis_homogeneous	min_aritydifferentiation_category)r   r-   FormalParameterOptionSingleDifferentiationCategoryUnknownr9   r   r:   r>   rO   optionrb   rc   rd   )	r   r:   r>   rO   ra   rb   rc   rd   formal_parameterr   r   r   r1      s2   


zTestFormalParameter.test_initN)r%   r&   r'   r1   r   r   r   r   r_      s    r_   c                   @  s>   e Zd ZejdddgdfddddgdfdgdddZdS )TestTypeConstraintParamsingle_typer3   r`   Test descriptiondouble_typesr4   )tupler3   )r`   r4   rm   _strr?   allowed_typesSequence[str]rO   r   r   c                 C  sB   t j|||}| |j| | |jt| | |j| d S N)r   r-   TypeConstraintParamr   rO   r@   listr?   )r   rp   r?   rr   rO   type_constraintr   r   r   r1      s   z!TestTypeConstraintParam.test_initN)
rp   rq   r?   rq   rr   rs   rO   rq   r   r   )r%   r&   r'   parameterizedexpandr1   r   r   r   r   rk      s    rk   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 )N	test_attrzTest attribute)	r   r-   rM   STRINGSrL   r   r:   r   rO   )r   r:   type_rO   	attributer   r   r   r1      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   rG   rH   )r   r   r   r   r.   r   r   r-   rL   r   r:   rO   )r   r   r~   r   r   r   test_init_with_default_value   s   z*TestAttribute.test_init_with_default_valueN)r%   r&   r'   r1   r   r   r   r   r   rz      s    
rz   CustomOp   r5   )r,   rK         )op_type
op_version	op_domaintrap_op_versiontestc                   @  sr   e Zd ZU ded< ded< ded< ded< dd
dZdddZdd Zdd Zdd Zdd Z	dd Z
dd ZdS )TestOpSchemaRegisterrq   r   intr   r   z	list[int]r   r   r   c                 C  s   |  tj| j| j d S rt   )assertFalser   r   hasr   r   r   r   r   r   setUp$  s   zTestOpSchemaRegister.setUpc              	   C  s\   g | j | jD ]#}ttjj tj| j|| j	 W d    n1 s&w   Y  qd S rt   )
r   r   
contextlibsuppressr   r   SchemaErrorderegister_schemar   r   )r   versionr   r   r   tearDown(  s   zTestOpSchemaRegister.tearDownc                 C  s   g | j | jD ]}t| j| j|}tj| | tj	| j|| j qg | j | jD ]}tj
|j||j}t| j| j|}| t|t| q/d S rt   )r   r   r   r-   r   r   r   register_schema
assertTruer   r   r:   r;   r   rq   )r   r   rB   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 d    n1 scw   Y  tj| | jD ]}tjtj| j| j |tjd
d	gd qqt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)
            }
           r2   r3   rD   int32rE   r`   r5   rG   rH   rI   T)check_custom_domain)rJ   )r   r   r   r   parserparse_modelr   r-   r9   rL   rM   rN   rS   checkerValidationErrorcheck_modelr   r   )r   inputmodelrB   r   r   r   r   .test_using_the_specified_version_in_onnx_checkC  sP   		

zCTestOpSchemaRegister.test_using_the_specified_version_in_onnx_checkc                 C  s`   t | j| j| j}tj | | tj j tj | W d    d S 1 s)w   Y  d S rt   )	r   r-   r   r   r   r   r   rS   r   rA   r   r   r   Atest_register_schema_raises_error_when_registering_a_schema_twicet  s   "zVTestOpSchemaRegister.test_register_schema_raises_error_when_registering_a_schema_twicec                 C  s   g | j | jD ]}t| j| j|}tj| | tj	|j
||j qtj|j
| j|j | j D ]}| tj	|j
||j q5tj	|j
| j|jretj|j
| j|j}| |j| j d S d S rt   )r   r   r   r-   r   r   r   r   r   r   r:   r;   r   r   
assertLessr<   )r   r   rB   r0   r   r   r   $test_deregister_the_specified_schema~  s"   
z9TestOpSchemaRegister.test_deregister_the_specified_schemac                 C  sJ   |  tjj tj| j| j| j W d    d S 1 sw   Y  d S rt   )rS   r   r   r   r   r   r   r   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   )r:   ).0oprB   r   r   
<listcomp>  s    znTestOpSchemaRegister.test_legacy_schema_accessible_after_deregister.<locals>.filter_schema.<locals>.<listcomp>r   )schemasr   r   r   filter_schema  s   zZTestOpSchemaRegister.test_legacy_schema_accessible_after_deregister.<locals>.filter_schemar,   r   )r   r-   r   r   r   r   r   r   r:   r<   r;   get_all_schemasget_all_schemas_with_historyr   r=   rq   )r   schema_aschema_br   schema_cschema_dr   r   r   .test_legacy_schema_accessible_after_deregister  s&   zCTestOpSchemaRegister.test_legacy_schema_accessible_after_deregisterNr$   )r%   r&   r'   __annotations__r   r   r   r   r   r   r   r   r   r   r   r   r     s   
 

1
r   __main__)
__future__r   r   unittesttypingr   rx   r   r   collections.abcr   TestCaser   r(   r_   rk   rz   parameterized_classr   r%   mainr   r   r   r   <module>   sB     