
    bIg(                       d dl mZ d dlZd dlZd dlZd dlmZmZ d dlm	Z	 d dl
mZmZmZ d dlmZmZmZmZmZ d dlmZ d dlmZmZ  ed	  e       D        d
       Z ed  e       D        d       Z ed  e       D        d       Z	 	 	 	 ddZ	 d	 	 	 	 	 	 	 	 	 	 	 ddZ G d dej>                        Z e!dk(  r ejD                          yy)    )annotationsN)TensorProto	TypeProto)ValidationError)OpSchemaget_all_schemas_with_history
get_schema)
make_graph	make_nodemake_opsetidmake_tensor_type_protomake_tensor_value_info)
from_array)InferenceErrorinfer_node_outputsc              #  `   K   | ]&  }|j                   d k(  s|j                  dk(  s#| ( yw)Add Nnamedomain.0ss     ^/var/www/html/answerous/venv/lib/python3.12/site-packages/onnx/test/inference_function_test.py	<genexpr>r      s%     U1!&&E/ahhRTnQU   ...c                    | j                   S Nsince_versionr   s    r   <lambda>r#      
    !//     )keyc              #  \   K   | ]$  }|j                   d k(  r|j                  dk(  r| & yw)Reshaper   Nr   r   s     r   r   r      s.      66Y188r> 	
s   *,c                    | j                   S r   r    r"   s    r   r#   r#   "   r$   r%   c              #  `   K   | ]&  }|j                   d k(  s|j                  dk(  s#| ( yw)Clipr   Nr   r   s     r   r   r   %   s&     V1!&&F2BqxxSU~QVr   c                    | j                   S r   r    r"   s    r   r#   r#   &   r$   r%   c                b    | j                         D ci c]  \  }}|t        |  c}}S c c}}w r   )itemsr   )tensor_typesr&   values      r   _to_tensor_typesr1   *   s2     COBTBTBVWJCC'//WWWs   +c                    |i }t        | t        | j                  ||| j                        ||j	                         D ci c]  \  }}|t        |       c}}      S c c}}w )N)r   )r   r   r   r   r.   r   )schemainput_namesoutput_namesinput_types
input_datar&   arrs          r   	_run_caser9   0   sb     
&++{LO.8.>.>.@A(#sjo	A	  	Bs   Ac                  D    e Zd Zd	dZd	dZd	dZd	dZd	dZd	dZd	dZ	y)
TestInferenceFunctionCallc           	        t         j                  dft         j                  dfddt         j                  dfift         j                  dft         j                  dfddt         j                  dfift         j                  dft         j                  dfddt         j                  dfift         j                  dft         j                  dfddt         j                  dfift         j                  d	ft         j                  d
fddt         j                  dfifg}|D ]1  \  }}t        t        ddgdgt        |            t        |      k(  r1J  y )N ABC)N   )rB   )   rB   )nm)rC   rD   rE   )xrB   )yrB   r?   r@   )r   FLOATDOUBLEr9   
ADD_SCHEMAr1   )selfcasesinsoutss       r   test_add_inferencez,TestInferenceFunctionCall.test_add_inferenceB   sy    #(("-[5F5F4KL{(("-. &++Y7%++T2 {(()45 &++Y7%++V4 {(()45 &,,j9%,,m< {))=9: &++X6%++X6 {(()455!
D  	mICZ#scU<LS<QRVfgkVllll	mr%   c                    g d}dg}t        t        j                  dft        j                  dfd      }t        dt        j                  dfi      }t        t        |||      |k(  sJ y )N)Xr   maxY      r=   )rQ   rR   )r1   r   rH   r9   CLIP_SCHEMA)rK   r4   r5   r6   expected_output_typess        r   'test_clip_inference_with_optional_inputzATestInferenceFunctionCall.test_clip_inference_with_optional_inputh   ss    &u&$$f-{7H7H"6MN
 !1#8I8I67R1S Tk;kJ$%	
%r%   c                   | j                  t              5  t        t        dgdgt	        dt
        j                  dfi             d d d        | j                  t              5  t        t        ddgdgt	        t
        j                  dfdd             d d d        | j                  t              5  t        t        ddgdgt	        t
        j                  dft
        j                  dfd             d d d        | j                  t              5  t        t        ddgdgt	        dt
        j                  dfi             d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   qxY w# 1 sw Y   y xY w)Nr?   rA   rT   r@   )rB   rT   r>   )rB   rV   )	assertRaisesr   r9   rJ   r1   r   rH   r   KeyErrorrK   s    r    test_add_inference_raises_errorsz:TestInferenceFunctionCall.test_add_inference_raises_errorsu   sd   / 	 #(9(96'B!CD		 / 	c
 (9(96'B!UV		 ~. 	c
 )//8)//8	
	 x( 	c
 #(9(96'B!CD		 	5	 		 		 		 	s0   0E#2E2AE$1E0EE!$E-0E9c                   t        t        ddgdgt        t        j                  dft        j
                  dfd      dt        j                  g dt        j                        i      t        dt        j                  dfi      k(  sJ y )	NrF   trG   )   rV   )rU   )rF   r`   )rB   rB   ra   )dtype)	r9   RESHAPE_SCHEMAr1   r   rH   INT64nparrayint64r]   s    r   test_reshape_inferencez0TestInferenceFunctionCall.test_reshape_inference   s    #JE%++V4%++T2 "((9BHH56
 s[%6%6	$BCDE 	E Er%   c           
        d}d}d}t        dt        j                  d       t        dt        j                  d       t        dt        j                  d       g}t        dt        j                  d       t        dt        j                  ||f      g}t	        t        d	dgdg      t        d
ddgdg      gd||      }t        t        dd      t        dg dddgd|      t        t        j                  |fft        j                  ||fft        j                  |ffd      t        dd      gd      t        t        j                  |fft        j                  ||ffd      k(  sJ y )NsequencerB   rU   loop_state_ininputouterloop_state_outoutputIdentityr   subgraphScan	   )loop_state_orig
scan_input
scan_outerloop_state_finalscan_outputrC   )num_scan_inputsbodyr   rV   )opset_imports
ir_version)rw   rx   )
r   r   	UNDEFINEDrH   r
   r   r   r	   r1   r   )rK   seq_len
input_sizeloop_state_sizeinput_value_infosoutput_value_infosrq   s          r   !test_scan_inference_with_subgraphz;TestInferenceFunctionCall.test_scan_inference_with_subgraph   s   
 #?K4I4I4P"7K,A,A4H"7K,A,A4H
 ##3[5J5JDQ"8[->->*@UV

 *&7:J9KL%'7!3hZ@ 
 "vq!?#]3 ! (3(9(9O;M'N#.#4#4w
6K"L#.#4#4zm"D (A./%
& %0%6%68J$K + 1 1GZ3HI
'
 	
 
r%   c                F   d}t         j                  j                  |      }t         j                  j	                  |d       | j                  t         j                  j                        5  t         j                  j	                  |d       d d d        y # 1 sw Y   y xY w)Na  
        <
            ir_version: 8,
            opset_import: ["" : 18, "onnxscript.atenlib" : 1],
            producer_name: "pytorch",
            producer_version: "2.1.0"
        >
        torch_jit (float input_0) => (float reault, int64 index)
        {
            reault, index = onnxscript.atenlib.aten_min_dim <dim = 0, keepdim = 1> (input_0)
        }
        <
            domain: "onnxscript.atenlib",
            opset_import: ["" : 18]
        >
        aten_min_dim <dim>(self) => (result_7, indices_6)
        {
            tmp = Shape (self)
            tmp_0 = Size (tmp)
            tmp_1 = Constant <value = int64 tmp_1 {0}> ()
            tmp_1_cast = CastLike (tmp_1, tmp_0)
            tmp_2 = Equal (tmp_0, tmp_1_cast)
            cond = Not (tmp_2)
            indices_6, result_7 = If (cond) <
                then_branch = thenGraph_4 () => ( indices,  result) {
                    dim = Constant <value_int: int = @dim> ()
                    tmp_3 = Constant <value_ints = [-1]> ()
                    dims = Reshape (dim, tmp_3)
                    result = ReduceMin <keepdims: int = @keepdim> (self, dims)
                    indices = ArgMin <axis: int = @dim, keepdims: int = @keepdim> (self)
                }, else_branch = elseGraph_4 () => ( indices_4,  result_5) {
                    indices_4 = Constant <value_int = 0> ()
                    result_5 = Identity (self)
                }
            >
        }
        Fstrict_modeT)onnxparserparse_modelshape_inferenceinfer_shapesr[   r   rK   model_scriptmodels      r   test_inference_with_conflowz5TestInferenceFunctionCall.test_inference_with_conflow   s    $J ''5))%U)Ct33BBC 	G  --e-F	G 	G 	Gs   ,"BB c                    d}t         j                  j                  |      }t         j                  j	                  |d       y )Na  
        <
            ir_version: 8,
            opset_import: ["" : 18, "custom" : 1],
            producer_name: "",
            producer_version: "1.0"
        >
        MeanVarianceNormalization (float[N] x) => (float[M] y)
        {
            y = custom.custom_mvn <axes = [0]> (x)
        }
        <
            domain: "custom",
            opset_import: ["" : 18]
        >
        custom_mvn <axes>(X) => (Y)
        {
          Exponent = Constant <value = float {2.0}>()
          Epsilon = Constant <value = float {1e-9}>()
          axes = Constant <value_ints: ints = @axes>()
          X_RM = ReduceMean (X, axes)
          EX_squared = Pow (X_RM, Exponent)
          X_squared = Pow (X, Exponent)
          E_Xsquared = ReduceMean (X_squared, axes)
          Variance = Sub (E_Xsquared, EX_squared)
          STD = Sqrt (Variance)
          X_variance = Sub (X, X_RM)
          Processed_STD = Add (STD, Epsilon)
          Y = Div (X_variance, Processed_STD)
        }
        Tr   )r   r   r   r   r   r   s      r   test_inference_with_attributez7TestInferenceFunctionCall.test_inference_with_attribute  s8    > ''5))%T)Br%   N)returnNone)
__name__
__module____qualname__rO   rY   r^   rh   r   r   r   r=   r%   r   r;   r;   A   s-    $mL
!FE1
f)GV"Cr%   r;   __main__)r/   z3dict[str, tuple[int, tuple[int | str | None, ...]]]r   dict[str, TypeProto]r   )r3   r   r4   	list[str]r5   r   r6   r   r7   zdict[str, np.ndarray] | Noner   r   )#
__future__r   unittestnumpyre   r   r   r   onnx.checkerr   	onnx.defsr   r   r	   onnx.helperr
   r   r   r   r   onnx.numpy_helperr   onnx.shape_inferencer   r   rR   rJ   rc   rW   r1   r9   TestCaser;   r   mainr=   r%   r   <module>r      s   #    ' ( H H  ) CU,.U!
 -/
 	" V,.V!XEXX 04  &	
 - "eC 1 1 eCP zHMMO r%   