
    bIg!                        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                          yy)    )annotationsN)checkerutilsc                      e Zd Zd ZddZy)TestFunctionc                    t        j                  |       | j                  t        |j                        t        |             |D ]1  | j                  t        fd|j                  D        d              3 y )Nc              3  ^   K   | ]$  }|j                   k(  r|j                  k(  r| & y w)N)namedomain).0ffunc_domainfunctions     T/var/www/html/answerous/venv/lib/python3.12/site-packages/onnx/test/function_test.py	<genexpr>z4TestFunction._verify_function_set.<locals>.<genexpr>   s0      66X-!((k2I s   *-)r   check_modelassertEquallen	functionsassertIsNotNonenext)selfextracted_modelfunction_setr   r   s      `@r   _verify_function_setz!TestFunction._verify_function_set   sn    O,_667\9JK$ 
	H  !0!:!:
 	
	    c                T   d}t         j                  j                  dd      g}t         j                  j                  dd      t         j                  j                  |d      g}d}ddg}dg}t         j                  j                  d	ddgdg      g}t         j                  j	                  ||||||      }d
}	dg}
dg}t         j                  j                  ddgdg      g}t         j                  j	                  ||	|
|||      }d}ddg}dg}t         j                  j                  d
dgdg|      t         j                  j                  d
dgdg|      t         j                  j                  dddgdg|      g}t         j                  j	                  ||||||      }t         j                  j                  |ddgdg|      }t         j                  j                  d	ddgdg      }t         j                  j                  d	ddgdg      }t         j                  j                  |	dgdg|      }t         j                  j                  ddgdg      }t         j                  j                  d	ddgdg      }t         j                  j                  |ddgdg|      }t         j                  j                  |ddgdg|      }d}d}t         j                  j                  dd      t         j                  j                  dd      g}t         j                  j                  ddg      }t         j                  j                  ||||||||g|t         j                  j                  d|       t         j                  j                  d|       t         j                  j                  d|       gt         j                  j                  d|       t         j                  j                  d|       t         j                  j                  d|       t         j                  j                  d|       g      }||d!|||gd"} t        j                  j                  |fi | }!t        j                  |!       t        j                  |!      j                  g d#dg      }"| j                  |"i |       t        j                  |!      j                  g d#dg      }#| j                  |#|h|       t        j                  |!      j                  g d#dg      }$| j                  |$||	|h|       t        j                  |!      j                  g d#dg      }%| j                  |%||	|h|       t        j                  |!      j                  g d#g d$      }&| j                  |&||	|h|       y%)&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   : "kk66r2>?KK$$R,KK$$[!4%
! #*5++//SzC5IJ;;,,
 - #u!$#{{44Z#NO11 !
 )C%+.*',/5(KK!!/C54&!UKK!!/C54&!UKK!!*tTlSE+!V*
&
 $(;;#<#<)+,*%$
  --D$<$ . 
 KK))%$vF	KK))%$~N	![[22{ 3 
 --j4&4&IKK))%$}M	 KK11)4LO	 2 
 !KK11)4LO	 2 
 5

KK$$R,KK$$Wa0
 !KK>>STRU>V&&"!!	 ++BS+T++BS+T++BS+T ++$1B ,  ++%2C ,  ++&3D ,  ++&3D , #
D %*E'3KL	
 &&u55E"$)OOE$:$H$H%
! 	!!";RM%*__U%;%I%I&
" 	!!&	
 ).(>(L(L)
% 	!!).0MN	
 ).(>(L(L)
% 	!!).0MN	
 ).(>(L(LE)
% 	!!).0MN	
r   N)returnNone)__name__
__module____qualname__r   r>    r   r   r   r      s    B
r   r   __main__)

__future__r   unittestrB   r   r   TestCaser   ro   mainrr   r   r   <module>rx      sB    #   R
8$$ R
j zHMMO r   