
    
Ng}!                     z    d dl Z d dlZd dlmZmZ  G d de j                  Zedk    r e j                     dS dS )    N)checkerutilsc                       e Zd Zd ZddZdS )TestFunctionc                    t          j        |           |                     t          |j                  t          |                     |D ]7|                     t          fd|j        D             d                      8d S )Nc              3   H   K   | ]}|j         k    |j        k    |V  d S )N)namedomain).0ffunc_domainfunctions     S/var/www/html/ai-engine/env/lib/python3.11/site-packages/onnx/test/function_test.py	<genexpr>z4TestFunction._verify_function_set.<locals>.<genexpr>   sH        6X--!(k2I2I 2I2I2I2I     )r   check_modelassertEquallen	functionsassertIsNotNonenext)selfextracted_modelfunction_setr   r   s      `@r   _verify_function_setz!TestFunction._verify_function_set   s    O,,,_677\9J9JKKK$ 
	 
	H      !0!:  
  	 	 	 	
	 
	r   returnNc                    d}t           j                            dd          g}t           j                            dd          t           j                            |d          g}d}ddg}dg}t           j                            d	ddgdg          g}t           j                            ||||||          }d
}	dg}
dg}t           j                            ddgdg          g}t           j                            ||	|
|||          }d}ddg}dg}t           j                            d
dgdg|          t           j                            d
dgdg|          t           j                            dddgdg|          g}t           j                            ||||||          }t           j                            |ddgdg|          }t           j                            d	ddgdg          }t           j                            d	ddgdg          }t           j                            |	dgdg|          }t           j                            ddgdg          }t           j                            d	ddgdg          }t           j                            |ddgdg|          }t           j                            |ddgdg|          }d}d}t           j                            dd          t           j                            dd          g}t           j                            ddg          }t           j                            ||||||||g|t           j                            d|           t           j                            d|           t           j                            d|           gt           j                            d|           t           j                            d|           t           j                            d|           t           j                            d|           g          }||d!|||gd"} t          j        j        |fi | }!t          j
        |!           t          j        |!                              g d#dg          }"|                     |"i |           t          j        |!                              g d#dg          }#|                     |#|h|           t          j        |!                              g d#dg          }$|                     |$||	|h|           t          j        |!                              g d#dg          }%|                     |%||	|h|           t          j        |!                              g d#g d$          }&|                     |&||	|h|           d%S )&aO  #   1. build a model with graph below. extract models with output combinations
        #   2. validate extracted models' local functions
        #
        # model graph:
        #      i0                    i1                 i2
        #      |   __________________|__________________/_________
        #      |  |                  |             |   /          |
        #      |  |                  |             |  /           |
        #   func_add        func_identity          add         identity
        #    |  ___\___________\____________________|_________    |
        #    | |    \           \                   |  _______|___|
        #    | |     \           \                  | |       |   |
        #    add     function_nested_identity_add   add     function_nested_identity_add
        #     |                 |                    |              |
        #     |                 |                    |              |
        #   o_func_add      o_all_func0           o_no_func     o_all_func1
        #
        # where function_nested_identity_add is a function that is defined with functions:
        #       a               b
        #       |               |
        #   func_identity   func_identity
        #             \       /
        #             func_add
        #                |
        #                c
        #
        local       func_addabcAddfunc_identityIdentityfunc_nested_identity_adda1)r
   b1i0i1t0i2t2
o_func_addt1t3	o_no_funco_all_func0o_all_func1graph_with_imbedded_functions         )	elem_typeshape)r	   
type_proto&test_extract_model_with_local_function)
ir_versionopset_importsproducer_namer   )r,   r-   r/   )r4   r1   r5   r6   N)onnxhelpermake_opsetid	make_nodemake_functionmake_tensor_type_proto
make_graphmake_value_info
make_modelr   r   r   	Extractorextract_modelr   )'r   r   func_opset_importsfunc_nested_opset_importsfunc_add_namefunc_add_inputsfunc_add_outputsfunc_add_nodesr"   func_identity_namefunc_identity_inputsfunc_identity_outputsfunc_identity_nodesr'   func_nested_identity_add_namefunc_nested_identity_add_inputs func_nested_identity_add_outputsfunc_nested_identity_add_nodesr)   node_func_add	node_add0	node_add1node_func_identitynode_identity	node_add2node_func_nested0node_func_nested1
graph_namer?   r@   tensor_type_protographmetamodelextracted_with_no_funcionextracted_with_add_funcionextracted_with_o_all_funcion0extracted_with_o_all_funcion1extracted_with_o_all_funcion2s'                                          r   r>   z3TestFunction.test_extract_model_with_local_function   s}   : "k66r2>>?K$$R,,K$$[!44%
! #*5+//SzC5IIJ;,,
 
 - #u!$#{44Z#NNO11 !
 
 )C%+.*',/5(K!!/C54&!UUK!!/C54&!UUK!!*tTlSE+!VV*
&
 $(;#<#<)+,*%$
 $
  --D$<$ . 
 
 K))%$vFF	K))%$~NN	![22{ 3 
 
 --j4&4&IIK))%$}MM	 K11)4LO	 2 
 
 !K11)4LO	 2 
 
 5

K$$R,,K$$Wa00
 !K>>STRU>VV&&"!!	 ++BS+TT++BS+TT++BS+TT ++$1B ,   ++%2C ,   ++&3D ,   ++&3D ,  #
 
D %*E'3KL	
 
 &u5555E"""$)OE$:$:$H$H%
 %
! 	!!";RMMM%*_U%;%;%I%I&
 &
" 	!!&	
 	
 	
 ).(>(>(L(L)
 )
% 	!!).0MN	
 	
 	
 ).(>(>(L(L)
 )
% 	!!).0MN	
 	
 	
 ).(>(>(L(LEEE)
 )
% 	!!).0MN	
 	
 	
 	
 	
r   )r   N)__name__
__module____qualname__r   r>    r   r   r   r      s=          B
 B
 B
 B
 B
 B
r   r   __main__)unittestrB   r   r   TestCaser   rm   mainrp   r   r   <module>ru      s   
          R
 R
 R
 R
 R
8$ R
 R
 R
j zHMOOOOO r   