
    wi!                        d dl m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 )    )annotationsN)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     g/root/.openclaw/workspace/chatterbox_venv_py311/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   returnNonec                   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/   r1   )r6   r3   r7   r8   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_namerA   rB   tensor_type_protographmetamodelextracted_with_no_functionextracted_with_add_functionextracted_with_o_all_function0extracted_with_o_all_function1extracted_with_o_all_function2s'                                          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"""%*_U%;%;%I%I&
 &
" 	!!"<b+NNN&+oe&<&<&J&J'
 '
# 	!!'-+	
 	
 	
 */)?)?)M)M*
 *
& 	!!*.0MN	
 	
 	
 */)?)?)M)M*
 *
& 	!!*.0MN	
 	
 	
 */)?)?)M)MEEE*
 *
& 	!!*.0MN	
 	
 	
 	
 	
r   N)r   r   )__name__
__module____qualname__r   r@    r   r   r   r      s=          B
 B
 B
 B
 B
 B
r   r   __main__)

__future__r   unittestrD   r   r   TestCaser   ro   mainrr   r   r   <module>rx      s    # " " " " "          R
 R
 R
 R
 R
8$ R
 R
 R
j zHMOOOOO r   