o
    to™iºE  ã                   @  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   úI/home/ubuntu/.local/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   / üü÷ÿ ÿ