o
    :5iE                     @  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                   @  s>   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S )
TestSchemareturnNonec                 C  s"   t d}| |jt jjj d S )NRelu)r   
get_schemaassertEqualnode_determinismOpSchemaNodeDeterminismDeterministic)selfrelu_schema r   c/lsinfo/ai/hellotax_ai/llm_service/venv_embed/lib/python3.10/site-packages/onnx/test/schema_test.pytest_get_schema   s   
zTestSchema.test_get_schemac                 C  s   t d d S )NConv)r   r
   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_valuer   typeonnxAttributeProtoFLOAT)r   vr   r   r   test_attr_default_value   s   z"TestSchema.test_attr_default_valuec                 C  s6   t d}| t|jtj | |jt jj	j
 d S )NSelu)r   r
   r   r   function_bodyr   FunctionProtor   r   r   r   )r   selu_schemar   r   r   test_function_body"   s
   
zTestSchema.test_function_bodyc                 C  s   t d}| |jt jjj | |j t d}| |jt jjj	 | 
|j t d}| |jt jjj	 | 
|j t d}| |jt jjj | |j d S )NRandomNormalLiker   CastLikeIf)r   r
   r   r   r   r   NonDeterministic
assertTruenon_deterministicr   assertFalse)r   rand_schema	bn_schemacast_like_schema	if_schemar   r   r   test_node_determinism)   s,   



z TestSchema.test_node_determinismNr   r   )__name__
__module____qualname__r   r   r!   r&   r2   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  s4   t ddd}| |t j | |jt jjj d S Ntest_optest_domain   )r   r   assertIsInstancer   r   r   r   r   schemar   r   r   	test_initC   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 )
Nr9   r:   r;   input1Ttensor(int64) inputstype_constraintsr   )r   r   FormalParameterr   namedomainsince_versionlenrE   type_strrF   type_param_strallowed_type_strsr   	op_schemar   r   r   test_init_with_inputsK   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 )Nr9   r:   r;   r@   rA   input2output1output2rB   rC   attr1attr1 descriptionrE   outputsrF   r      r   )r   r   rG   	AttributeAttrTypeINTSr   rK   rE   rH   rL   rX   rF   rM   rN   r   r   descriptionrO   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 )Nr9   r:   r;   r   )
r   r   r   rH   rI   rJ   rK   rE   rX   rF   rO   r   r   r   $test_init_without_optional_arguments   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;   )rI   rJ   {   r9   )assertRaises	TypeErrorr   r   r   rH   r=   r   r   r   	test_name      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 )Nr9   r;   )rH   rJ   r`   r:   )ra   rb   r   r   r   rI   r=   r   r   r   r:      rd   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 r8   )ra   rb   r   r   r   rJ   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 )Nr9   r:   r;   test_doc)doc)r   r   r   rg   r=   r   r   r   rf      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 )Nr@   rA   The first input.rH   rL   r]   r9   r:   r;   rB   rC   rD   r   )	r   r   rG   r   rK   rE   rH   rL   r]   )r   rE   r>   r   r   r   test_inputs   s   zTestOpSchema.test_inputsc                 C  rh   )NrS   rA   zThe first output.rj   r9   r:   r;   rB   rC   )rX   rF   r   )	r   r   rG   r   rK   rX   rH   rL   r]   )r   rX   r>   r   r   r   test_outputs   s   zTestOpSchema.test_outputsNr3   )r4   r5   r6   r?   rQ   r^   r_   rc   r:   re   rf   rk   rl   r   r   r   r   r7   B   s    


*	

r7   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)ri   Tr;   )param_optionis_homogeneous	min_aritydifferentiation_category)r   r   FormalParameterOptionSingleDifferentiationCategoryUnknownrG   r   rH   rL   r]   optionrp   rq   rr   )	r   rH   rL   r]   ro   rp   rq   rr   formal_parameterr   r   r   r?      s2   


zTestFormalParameter.test_initN)r4   r5   r6   r?   r   r   r   r   rm      s    rm   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_typerA   rn   Test descriptiondouble_typesrB   )tuplerA   )rn   rB   r{   _strrM   allowed_typesSequence[str]r]   r   r   c                 C  sB   t j|||}| |j| | |jt| | |j| d S N)r   r   TypeConstraintParamr   r]   rN   listrM   )r   r~   rM   r   r]   type_constraintr   r   r   r?      s   z!TestTypeConstraintParam.test_initN)
r~   r   rM   r   r   r   r]   r   r   r   )r4   r5   r6   parameterizedexpandr?   r   r   r   r   ry      s    ry   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   r[   STRINGSrZ   r   rH   r   r]   )r   rH   type_r]   	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   rU   rV   )r   r
   r   r   r<   r   r   r   rZ   r   rH   r]   )r   r   r   r   r   r   test_init_with_default_value   s   z*TestAttribute.test_init_with_default_valueN)r4   r5   r6   r?   r   r   r   r   r   r     s    
r   CustomOp   rC   )r;   rY         )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 )TestOpSchemaRegisterr   r   intr   r   z	list[int]r   r   r   c                 C  s   |  tj| j| j d S r   )r-   r   r   hasr   r   r   r   r   r   setUpD  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 r   )
r   r   
contextlibsuppressr   r   SchemaErrorderegister_schemar   r   )r   versionr   r   r   tearDownH  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 r   )r   r   r   r   r   r   r   register_schemar+   r   r
   rH   rI   r   r   )r   r   rP   registered_opr   r   r   test_register_multi_schemaN  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)
            }
           r@   rA   rR   int32rS   rn   rC   rU   rV   rW   T)check_custom_domain)rX   )r   r   r   r   parserparse_modelr   r   rG   rZ   r[   r\   ra   checkerValidationErrorcheck_modelr   r   )r   inputmodelrP   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 r   )	r   r   r   r   r   r   r   ra   r   rO   r   r   r   Atest_register_schema_raises_error_when_registering_a_schema_twice  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 r   )r   r   r   r   r   r   r   r   r+   r   rH   rI   r   r
   
assertLessrJ   )r   r   rP   r>   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 r   )ra   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   )rH   ).0oprP   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
   rH   rJ   rI   get_all_schemasget_all_schemas_with_historyr   rK   r   )r   schema_aschema_br   schema_cschema_dr   r   r   .test_legacy_schema_accessible_after_deregister  s&   zCTestOpSchemaRegister.test_legacy_schema_accessible_after_deregisterNr3   )r4   r5   r6   __annotations__r   r   r   r   r   r   r   r   r   r   r   r   r   +  s   
 

1
r   __main__)
__future__r   r   unittesttypingr   r   r   r   collections.abcr   TestCaser   r7   rm   ry   r   parameterized_classr   r4   mainr   r   r   r   <module>   sB   /  