
    bIgg                      d Z ddlmZ ddlZddlZddlZddlZddlmZ ddl	m
Z
 ddlmZ ddlmZ ddlmZ 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 m!Z!m"Z"m#Z#m$Z$ ddl%m&Z& ddl'm(Z( ddl)m*Z* ddl+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z: ddl;m<Z<m=Z=m>Z> ddl?m@Z@ ddlAmBZBmCZC ddlDmEZE ddlFmGZGmHZH ddlImJZJmKZK ddlLmMZM ddlNmOZO ddlPmQZQmRZR ddlSmTZTmUZU ddlVmTZW ddlXmYZY  eZ edd            Z[ eZ edd            Z\d  Z]d! Z^d" Z_d# Z`d$ Zad% Zbd& Zc	 	 	 	 	 	 	 	 	 	 	 	 d-d'Zd G d( d)ej                        Zfegd*k(  r ej                  d+,       yy).zYou can run a specific test by using the following syntax.

::

    python onnx/test/reference_evaluator_test.py TestReferenceEvaluator.test_function_attribute_nested_graph
    )annotationsN)redirect_stdoutwraps)StringIO)getenv)dedent)Sequence)assert_allcloseassert_almost_equal)AttributeProtoFunctionProto
ModelProtoTensorProtocheckerparsersubbyte)get_roi_align_input_values)check_model)onnx_opset_version)float32_to_bfloat16float32_to_float8e4m3float32_to_float8e5m2make_function
make_graph
make_modelmake_model_gen_version	make_nodemake_operatorsetidmake_opsetidmake_sequence_type_protomake_tensormake_tensor_sequence_value_infomake_tensor_value_infomake_value_info)float8e4m3_to_float32float8e5m2_to_float32
from_array)ReferenceEvaluator)OpRunOpRunExpand)load_op)_get_indices_is_out)Cast_19Celu)Adam)_vcelu1)_col2im_naive_implementation_2dcol2im_naive_implementation)Conv_conv_implementation)r5   )_conv_implementation_im2colORT_MAX_IR_SUPPORTED_VERSION8$ORT_MAX_ONNX_OPSET_SUPPORTED_VERSION18c                .     t                fd       }|S )Nc                 h    	 dd l }~ | i | y # t        $ r t        j                  d      d w xY w)Nr   zonnxruntime not installed)onnxruntimeImportErrorunittestSkipTest)argskwargsr>   fns      _/var/www/html/answerous/venv/lib/python3.12/site-packages/onnx/test/reference_evaluator_test.pywrapperz'skip_if_no_onnxruntime.<locals>.wrapperV   E    	K 	DF  	K##$?@dJ	K     1r   rD   rF   s   ` rE   skip_if_no_onnxruntimerJ   U        
2Y  N    c                .     t                fd       }|S )Nc                 h    	 dd l }~ | i | y # t        $ r t        j                  d      d w xY w)Nr   ztorch not installed)torchr?   r@   rA   )rB   rC   rO   rD   s      rE   rF   z!skip_if_no_torch.<locals>.wrapperd   sE    	E 	DF  	E##$9:D	ErH   r   rI   s   ` rE   skip_if_no_torchrP   c   rK   rL   c                .     t                fd       }|S )Nc                 h    	 dd l }~ | i | y # t        $ r t        j                  d      d w xY w)Nr   ztorchvision not installed)torchvisionr?   r@   rA   )rB   rC   rS   rD   s      rE   rF   z'skip_if_no_torchvision.<locals>.wrapperr   rG   rH   r   rI   s   ` rE   skip_if_no_torchvisionrT   q   rK   rL   c                .     t                fd       }|S )Nc                 h    	 dd l }~ | i | y # t        $ r t        j                  d      d w xY w)Nr   zml-dtypes not installed)	ml_dtypesr?   r@   rA   )rB   rC   rW   rD   s      rE   rF   z%skip_if_no_ml_dtypes.<locals>.wrapper   sE    	I 	DF  	I##$=>DH	IrH   r   rI   s   ` rE   skip_if_no_ml_dtypesrX      rK   rL   c                l    t        |t              rt        | ||      S t        |      }t	        | ||      S N)
isinstanceintr#   r!   r%   )name	elem_typeshapes_types       rE   make_sequence_value_infora      s4    )S!.tYFF%i0F4//rL   c                    dd l }t        }| j                  D ]  }|j                  dv s|j                  } n | j
                  t        kD  s	|t        kD  ry |j                  | j                         dg      S )Nr   ) zai.onnxCPUExecutionProvider)	providers)	r>   r:   opset_importdomainversion
ir_versionr8   InferenceSessionSerializeToString)
onnx_modelortonnx_domain_opsetopsets       rE   run_ort_inferencerp      s    <(( <<?* % 	 <<CC$$&3I2J    rL   c           	     j   t        |t              st        dt        |      d      t	        | j
                        t	        |      k7  rt        d| j
                  d|d      t	        |      dz  }t        j                  t        |      D cg c]  }||   |||z      f c}      }t        | j
                  |z         }t        |      D ]J  }	||	   ||	   dz
  ||	   dz
  z  z   }
t        ||	   |
z
  ||	   d   z   ||	   d   z   ||	   z  dz         }|||	<   L t        |      }t        j                  || j                  	      }t        j                  |      }t        j                  |j
                  d
|        }t        |      D ]  }t        ||j
                  d
|        }t        |      }t        |      D ]l  }t        ||      }t        |      }||z  |d
d
df   z
  ||z  z   }t        |      }t!        || j
                        r	d|||z   <   Y| t        |         |||z   <   n  |S c c}w )zNaive implementation for `im2col`.

    Args:
        data: image (float)
        kernel_shape: kernel shape
        dilations: dilations
        pads: pads
        strides: strides

    Returns:
        result
    zUnexpected type z for kernel_shape.zShape mismatch z and .      r   dtypeN)r[   tuple	TypeErrortypelenr_   
ValueErrornparrayrangelistr\   zerosrv   prodr-   r.   )datakernel_shape	dilationspadsstridesn_dimsinew_padslist_output_shapedkdndoutput_shapereskernel_sizeres_sizei_rest_resji_kernelt_kerneli_imgt_imgs                          rE   im2col_naive_implementationr      sI    lE**4+=*@@RSTT
4::#l++?4::.l=MQOPPY!^FxxeFmL$q'4F
#34LMHTZZ,676] "!_Q! 3	!q8HII"R'(1+a.88A;q>IWUVZW
  "!" *+L
((<tzz
2C'','Kwwsyy6'*+H8_ ;Q		(F7 34e{# 		;A#A|4HXHGOhq!tn4x)7KKE%LEudjj)()EH$%(,U5\(:EH$%		;; J7 Ms   H0c           	        d }t        | j                  d         D ]{  }t        | j                  d         D ]^  }t        | ||df   ||||      }|=| j                  d d |j                  z   }	t        j                  |	| j
                        }||||df<   ` } |j                  d t        |        dz   }	|j                  |	      S )Nr   rt   .rs   ru   ))r~   r_   r   r|   emptyrv   rz   reshape)
imgr   r   r   r   r   ncout	new_shapes
             rE   im2colr      s     C399Q<  !syy|$ 	!A-Aq#IiwC {IIbqMCII5	hhy		: C1c	N	!! 		.S../%7I;;y!!rL   c                     e Zd ZdZed-d       Zed.d       Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d  Z"d! Z#d" Z$d# Z%d$ Z&d% Z'd& Z(d' Z)d( Z*d) Z+d* Z,d+ Z-d, Z.d- Z/e0d.        Z1e0d/        Z2d0 Z3d1 Z4d2 Z5d3 Z6d4 Z7d5 Z8d6 Z9e:d7        Z;d8 Z<e:d9        Z=e:d:        Z>d; Z?d< Z@d= ZAd> ZBd? ZCd@ ZDdA ZEdB ZFdC ZGdD ZH eIj                   eKj                  dE      dF      dG        ZM eIj                   eKj                  dE      dF      dH        ZNdI ZOdJ ZPe0dK        ZQdL ZRe:eSdM               ZTdN ZUdO ZVdP ZWdQ ZXdR ZYdS ZZdT Z[dU Z\ed/dW       Z]e^j                  j                   e`j                  dX ebj                  ebj                  ebj                  gdYdZggebj                  [       ebj                  d\d]gd^d_ggebj                  [      gfd` ebj                  dadbgdcddggebj                  [       ebj                  dedfgdgdfggebj                  [      gfdh ebj                  didjgdkdlggebj                  [       ebj                  dmdegdgdfggebj                  [      gfdn ebj                  dodpgdqdrggebj                  [       ebj                  dfdegdgdfggebj                  [      gfds ebj                  dtdugdvdwggebj                  [       ebj                  dgdfgdgdfggebj                  [      gfdx ebj                  dydzgd{d|ggebj                  [       ebj                  dgdmgdgdmggebj                  [      gfd} ebj                  d~dgddggebj                  [       ebj                  dgdfgdgdfggebj                  [      gfdV ebj                  ddgddggebj                  [       ebj                  dmdegdgdfggebj                  [      gfd ebj                  ebj                  ebj                  gdYdZggebj                  [       ebj                  d\d]gdgdfggebj                  [      gfg	ddeg            d0d       Zge^j                  j                  g d      d1d2d       Zhd Zid Zjd Zkd Zld Zmd Znd Zod Zpd Zqd Zrd Zsd Ztd Zud Zvd Zwd Zxd Zyd Zze^j                  j                  d_ ebj                  d      j                  dd_      z   ebj                  dd      j                  dd\       ebj                  d      dd\g dg dg dgfd_ ebj                  d      j                  dd_      z   ebj                  dd      j                  dd\       ebj                  d      dd\g dg dg dgf ebj                  d      j                  dd      g dg dg dg ebj                  d      ddg dg dg dgf ebj                  df      ddgddgddg df ebj                  d       ebj                  d       ebj                  d      dddf ebj                  d       ebj                  d       ebj                  d      d\d\dfg      d        Ze^j                  j                   ebj                  d      j                  dd_       ebj                  dd      j                  dd\       ebj                  d      dd\g dg dg dgf ebj                  d      j                  dd_       ebj                  dd      j                  dd\       ebj                  d      dd\g dg dg dgf ebj                    ebj                  d_      j                  d\d\      gd_z         ebj                    ebj                  ddgd\dgg       ebj                  d_dgdfdgg      g       ebj                  d      d\d\g dg d¢gg dâg dĢggf ebj                  d      j                  dd      g dŢg dŢg dŢg ebj                  d      ddg dƢg dǢg dȢgf ebj                  df      d\dgdd\gddg dɢf ebj                  d       ebj                  d       ebj                  d      dddf ebj                  d       ebj                  d       ebj                  d      d\d\dfg      dʄ        Zd˄ Zd̄ Zd̈́ Zd΄ Zdτ ZdЄ Zdф Zd҄ Zdӄ Ze^j                  j                  g dԢ      dՄ        Ze^j                  j                  g d֢      dׄ        Zd؄ Zdل Zdڄ Ze^j                  j                  ddgddgddgdfg ddgg ddfdg dg dg ddfg      d        Ze^j                  j                  ddgddg dg dgddgfg dddddgddgddggg dfg dddddgddgddggg dfg dg dgddg dg dg dgg dg dg dggg dg dgfg dddg dg dg dgg dfg dddg dg dg dgg dfdd gddg dg dgdfdfgfg dd\ ebj                  g       j                  d      g fg      d        Zd Ze^j                  j                  g dd	g d
dfg dg dgdg dg d
gdfg ddg ddfg       eIj                  ej(                  dk(  d      d               Z eIj                  ej(                  dk(  d      d        Ze^j                  j                  ej0                  g dg dfej0                  g dg dfej0                  dgdgfej2                  g dg dfej2                  g dg dfej2                  dgdgfg       eIj                   eKj                  d       d!      d"               Ze^j                  j                   e`j                  ej6                  ej8                  fej0                  ej2                  f            d#        Ze^j                  j                   e`j                  ej0                  ej2                  fej6                  ej8                  f            d$        Zd% Zd& Zd' Ze^j                  j                  g d(      ed)               Ze^j                  j                  g d*      ed+               Zd, Zy(3  TestReferenceEvaluatora6  
        <
            ir_version: 7,
            opset_import: [ "": 10, "com.microsoft": 1]
        >
        agraph (float[N, M] B01, float[N, M] B11, float[N, M] B21) => (float[N, M] D0)
        {
            C0 = Add(B01, B11)
            C1 = Sub(B11, B21)
            D0 = Mul(C0, C1)
        }
        c                Z    t        j                  |       }t        j                  |       |S )zjParses a model from a string representation, including checking
        the model for correctness
        )r   parse_modelr   r   )m_defms     rE   _load_modelz"TestReferenceEvaluator._load_model   s'    
 u%ArL   Nc                v   t        dt        j                  d d g      }t        dt        j                  d d g      }t        dt        j                  d d g      }t        dt        j                  d g      }t        dddgdg      }| r0t        dddgdg      }	|g|d	k  rbr'rt        d
dgdg      }
n5t        d
dgdg      }
n#rt        d
dgdg      }
nt        d
dgdg      }
t	        ||	|
gd|||g|g      }nr1t        t        j                  gt        j                        d      nd }r1t        t        j                  gt        j                        d      nd }d|rdnd|rdndg}t        d
|dg      }
||fD cg c]  }|s|	 }}t	        ||	|
gd|||g|g|      }fd}n't        dddgdg      }	t	        ||	gd|||g|g      }d }|t        |      }nt        |t        d|      g      }	 t        |       ||fS c c}w # t        $ r}t        d|       |d }~ww xY w)NXABYMatMulXAAddY_clip   Clip)minmax)r   )r   lrru   mir]   marc   initializerc                >    t        j                  ||z  |z         S rZ   )r|   clip)xab	max_value	min_values      rE   fz4TestReferenceEvaluator._linear_regression.<locals>.f,  s    wwq1uqy)Y??rL   c                    ||z  |z   S rZ    )r   r   r   s      rE   <lambda>z;TestReferenceEvaluator._linear_regression.<locals>.<lambda>2  s    A	 rL   opset_importszchecker fails for
)r$   r   FLOATr   r   r(   r|   r}   float32r   r    r   	ExceptionAssertionError)r   ro   r   r   r   r   r   r   node1node2node3graphr   r   inputs_r   r   rl   es     ``                rE   _linear_regressionz)TestReferenceEvaluator._linear_regression  sv   "3(9(9D$<H"3(9(9D$<H"3(9(9D$<H"3(9(9D6B(S#J7edC[8*=E URZ  )"XJ9)! !*&8*se S%fxj3%YOE%fxj3%@E"E5%#8$Aq	A3O ! rxx2::FTR  ! rxx2::FTR 
 #BDBK!&&3%8+-r(8Qaq88"E5)4!QQC[@ edC[3%8Eu~taAYDE)A=#E*J#E,r5:Q9RSJ	L
# 1}) 9$  	L #6zl!CD!K	Ls$   HHH 	H8$H33H8c                    t        dt        j                  d d g      }| j                  t              5  t        |       d d d        y # 1 sw Y   y xY w)Nr   )r$   r   r   assertRaisesrx   r)   )selfr   s     rE   #test_reference_evaluator_exceptionsz:TestReferenceEvaluator.test_reference_evaluator_exceptions=  sE    "3(9(9D$<Hy) 	"q!	" 	" 	"s   AAc                   t         j                  t         j                        }t        j                  |       t        |      }| j                  |j                  g d       | j                  |j                  dg       | j                  |j                  ddd       t        j                  ddgddggt        j                  	      }t        j                  d
dgddggt        j                  	      }t        j                  ddgddggt        j                  	      }|j                  d |||d      d   }||z   ||z
  z  }t        ||       y NB01B11B21D0
   rt   rc   zcom.microsoftr   rs      ru               )r   r   m2_defr   r   r)   assertEqualinput_namesoutput_namesopsetsr|   r}   r   runr   r   r   sessr   yzr   expecteds           rE   %test_reference_evaluator_no_attributez<TestReferenceEvaluator.test_reference_evaluator_no_attributeB  s   "../E/L/LMA!!$))+@A**TF32&BCHHq!fq!f%RZZ8HHq!fq!f%RZZ8HHr2hR)<hhtQq;<Q?Ea!e$#&rL   c                   t         j                  t         j                        }t        j                  |       t        |      }| j                  |j                  g d       | j                  |j                  dg       | j                  |j                  ddd       t        j                  ddgddggt        j                  	      }t        j                  d
dgddggt        j                  	      }t        j                  ddgddggt        j                  	      }|j                  d |||dd      }| j                  |t               ||z   ||z
  z  }t!        ||d          y )Nr   r   r   rt   r   r   rs   r   ru   r   r   r   r   r   r   r   r   T)intermediate)r   r   r   r   r   r)   r   r   r   r   r|   r}   r   r   assertIsInstancedictr   r   s           rE   2test_reference_evaluator_no_attribute_intermediatezITestReferenceEvaluator.test_reference_evaluator_no_attribute_intermediateP  s'   "../E/L/LMA!!$))+@A**TF32&BCHHq!fq!f%RZZ8HHq!fq!f%RZZ8HHr2hR)<hhtQq;$hOc4(Ea!e$#d),rL   c                   t         j                  t         j                        }t        j                  |       t        |j                               }| j                  |j                  g d       | j                  |j                  dg       | j                  |j                  ddd       t        j                  ddgddggt        j                  	      }t        j                  d
dgddggt        j                  	      }t        j                  ddgddggt        j                  	      }|j                  d |||d      d   }||z   ||z
  z  }t        ||       y r   )r   r   r   r   r   r)   rk   r   r   r   r   r|   r}   r   r   r   r   s           rE   +test_reference_evaluator_no_attribute_byteszBTestReferenceEvaluator.test_reference_evaluator_no_attribute_bytes_  s   "../E/L/LMA!!"5"5"78))+@A**TF32&BCHHq!fq!f%RZZ8HHq!fq!f%RZZ8HHr2hR)<hhtQq;<Q?Ea!e$#&rL   c           	        t         j                  t         j                        }t        j                  ddgddggt        j
                        }t        j                  ddgdd	ggt        j
                        }t        j                  d
dgddggt        j
                        }| j                  d      5  t        |d      }t               }t        |      5  |j                  d |||d       d d d        |j                         }d}| j                  ||       d d d        | j                  d      5  t        |d      }t               }t        |      5  |j                  d |||d       d d d        |j                         }t        d      j                  d      }| j                  ||       d d d        | j                  d      5  t        |d      }t               }t        |      5  |j                  d |||d       d d d        |j                         }t        d      j                  d      }| j                  ||       d d d        | j                  d      5  t        |d      }t               }t        |      5  |j                  d |||d       d d d        |j                         }t        d      j                  d      }| j                  ||       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   bxY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nr   rt   rs   r   ru   r   r   r   r   r   r   r   r   )levelverboser   z:Add(B01, B11) -> C0
Sub(B11, B21) -> C1
Mul(C0, C1) -> D0
a  
                 +I B01: float32:(2, 2) in [0.0, 3.0]
                 +I B11: float32:(2, 2) in [4.0, 7.0]
                 +I B21: float32:(2, 2) in [-7.0, -4.0]
                Add(B01, B11) -> C0
                 + C0: float32:(2, 2) in [4.0, 10.0]
                Sub(B11, B21) -> C1
                 + C1: float32:(2, 2) in [8.0, 14.0]
                Mul(C0, C1) -> D0
                 + D0: float32:(2, 2) in [32.0, 140.0]
                
a  
                 +I B01: float32:(2, 2):[0.0, 1.0, 2.0, 3.0]
                 +I B11: float32:(2, 2):[4.0, 5.0, 6.0, 7.0]
                 +I B21: float32:(2, 2):[-4.0, -5.0, -6.0, -7.0]
                Add(B01, B11) -> C0
                 + C0: float32:(2, 2):[4.0, 6.0, 8.0, 10.0]
                Sub(B11, B21) -> C1
                 + C1: float32:(2, 2):[8.0, 10.0, 12.0, 14.0]
                Mul(C0, C1) -> D0
                 + D0: float32:(2, 2):[32.0, 60.0, 96.0, 140.0]
                   a  
                 +I B01: float32:(2, 2):[0.0, 1.0, 2.0, 3.0]
                 +I B11: float32:(2, 2):[4.0, 5.0, 6.0, 7.0]
                 +I B21: float32:(2, 2):[-4.0, -5.0, -6.0, -7.0]
                Add(B01, B11) -> C0
                -- begin Add.run(2 inputs)
                -- done Add.run -> 1 outputs
                 + C0: float32:(2, 2):[4.0, 6.0, 8.0, 10.0]
                Sub(B11, B21) -> C1
                -- begin Sub.run(2 inputs)
                -- done Sub.run -> 1 outputs
                 + C1: float32:(2, 2):[8.0, 10.0, 12.0, 14.0]
                Mul(C0, C1) -> D0
                -- begin Mul.run(2 inputs)
                -- done Mul.run -> 1 outputs
                 + D0: float32:(2, 2):[32.0, 60.0, 96.0, 140.0]
                )r   r   r   r|   r}   r   subTestr)   r   r   r   getvaluer   r	   lstrip)	r   r   r   r   r   r   stdoutr   logs	            rE   -test_reference_evaluator_no_attribute_verbosezDTestReferenceEvaluator.test_reference_evaluator_no_attribute_verbosem  s   "../E/L/LMHHq!fq!f%RZZ8HHq!fq!f%RZZ8HHr2hR)<\\\" 	'%a3DZF ( ?q1=>?//#CQCS#&	' \\\" 	'%a3DZF ( ?q1=>?//#C
 fTl  S#&'	'* \\\" 	'%a3DZF ( ?q1=>?//#C
 fTl  S#&'	'* \\\# 	'%a4DZF ( ?q1=>?//#C$ fTl% & S#&3	' 	'a? ?	' 	'? ?	' 	'0? ?	' 	'0? ?	' 	's   7#K;K.1,K;7#LL1AL#L/2L"	AL/'#M
L;!AM.K8	3K;;LL	LL"L,	'L//L8;M	 MMc                   t         j                         \  }}t        j                  ddgddggt        j                        }t        j                  ddgt        j                        }t        j                  dgt        j                        } ||||      }t        |      }|j                  d |||d      d   }t        ||       y )Nr   rt   rs   r   ru   r   r   r   r   )r   r   r|   r}   r   r)   r   r   )	r   r   r   r   r   r   r   r   gots	            rE   test_reference_evaluator_lrz2TestReferenceEvaluator.test_reference_evaluator_lr  s    &99;AHHq!fq!f%RZZ8HHaV2::.HHbT,Q1:!"%hht11156q9#&rL   c                   | j                  d      5  t        j                  d      \  }}t        j                  ddgddggt        j
                  	      }t        j                  ddgt        j
                  	      }t        j                  d
gt        j
                  	      } ||||      }t        |      }|j                  d   }| j                  |j                  j                  d       |j                  d |||d      d   }	t        ||	       d d d        | j                  d      5  t        j                  dd       \  }}t        j                  ddgddggt        j
                  	      }t        j                  ddgt        j
                  	      }t        j                  d
gt        j
                  	      } ||||      }t        |      }|j                  d   }| j                  |j                  j                  d       |j                  d |||d      d   }	t        ||	       d d d        | j                  d      5  t        j                  dd       \  }}t        j                  ddgddggt        j
                  	      }t        j                  ddgt        j
                  	      }t        j                  d
gt        j
                  	      } ||||      }t        |      }|j                  d   }| j                  |j                  j                  d       |j                  d |||d      d   }	t        ||	       d d d        y # 1 sw Y   CxY w# 1 sw Y   4xY w# 1 sw Y   y xY w)Nmin+maxoptT)r   r   rt   rs   r   ru   r   r   Clip_11r  r   )r   r   r   )r   r   )r  r   r   r|   r}   r   r)   	rt_nodes_r   	__class____name__r   r   
r   r   r   r   r   r   r   r   	last_noder  s
             rE    test_reference_evaluator_lr_clipz7TestReferenceEvaluator.test_reference_evaluator_lr_clip  s   \\i\( 
	+*==4=HEB1a&1a&)<A!Qrzz2A"RZZ0AAqzH%b)Dr*IY00999E((4qqq!9:1=CHc*
	+ \\e\$ 
	+*==4SW=XEB1a&1a&)<A!Qrzz2A"RZZ0AAqzH%b)Dr*IY00999E((4qqq!9:1=CHc*
	+ \\e\$ 
	+*==4SW=XEB1a&1a&)<A!Qrzz2A"RZZ0AAqzH%b)Dr*IY00999E((4qqq!9:1=CHc*
	+ 
	+1
	+ 
	+
	+ 
	+
	+ 
	+s&   DM.DM"
DM/M"M,/M8c                L   | j                  d      5  t        j                  dd      \  }}t        j                  ddgdd	ggt        j
                  
      }t        j                  ddgt        j
                  
      }t        j                  dgt        j
                  
      } ||||      }t        |      }|j                  d   }| j                  |j                  j                  d       | j                  |j                  d       | j                  |j                  d       |j                  d |||d      d   }	t        ||	       d d d        | j                  d      5  t        j                  ddd       \  }}t        j                  ddgdd	ggt        j
                  
      }t        j                  ddgt        j
                  
      }t        j                  dgt        j
                  
      } ||||      }t        |      }|j                  d   }| j                  |j                  j                  d       | j                  |j                  d       | j                  |j                  d       |j                  d |||d      d   }	t        ||	       d d d        | j                  d      5  t        j                  ddd       \  }}t        j                  ddgdd	ggt        j
                  
      }t        j                  ddgt        j
                  
      }t        j                  dgt        j
                  
      } ||||      }t        |      }|j                  d   }| j                  |j                  j                  d       | j                  |j                  d       | j                  |j                  d       |j                  d |||d      d   }	t        ||	       d d d        y # 1 sw Y   xY w# 1 sw Y   mxY w# 1 sw Y   y xY w)Nr  r  Tr   )r   ro   r   rt   rs   r   ru   r   r   Clip_6r  r   )r   ro   r   g   r   )r   ro   r   g   G)r  r   r   r|   r}   r   r)   r  r   r  r  r   r   r   r   r  s
             rE   "test_reference_evaluator_lr_clip_6z9TestReferenceEvaluator.test_reference_evaluator_lr_clip_6  sm   \\i\( 	+*==4r=REB1a&1a&)<A!Qrzz2A"RZZ0AAqzH%b)Dr*IY00998DY]]B/Y]]A.((4qqq!9:1=CHc*	+ \\e\$ 	+*==t > EB 1a&1a&)<A!Qrzz2A"RZZ0AAqzH%b)Dr*IY00998DY]]A.Y]],BC((4qqq!9:1=CHc*	+  \\e\$ 	+*==t > EB 1a&1a&)<A!Qrzz2A"RZZ0AAqzH%b)Dr*IY00998DY]]B/Y]],AB((4qqq!9:1=CHc*	+ 	+=	+ 	+	+ 	+ 	+ 	+s&   D:P 'D;P<D;P P
PP#c                    t        j                  d      }t        |      }t        j                  g dt        j
                        j                  d      }|j                  d d|i      d   }|}t        ||       y )Naf  
            <
              ir_version: 8,
              opset_import: [ "" : 14, "local" : 1],
              producer_name: "test",
              producer_version: "1.0",
              model_version: 1,
              doc_string: "Test preprocessing model"
            >
            agraph (uint8[H, W, C] x) => (uint8[H, W, C] x_processed)
            {
                x_processed = local.func(x)
            }

            <
              opset_import: [ "" : 14 ],
              domain: "local",
              doc_string: "function 1"
            >
            f1 (x) => (y) {
                y = Identity(x)
            }

            <
              opset_import: [ "" : 14 ],
              domain: "local",
              doc_string: "function 2"
            >
            f2 (x) => (y) {
                y = Identity(x)
            }

            <
              opset_import: [ "" : 14, "local" : 1 ],
              domain: "local",
              doc_string: "Preprocessing function."
            >
            func (x) => (y) {
                x1 = local.f1(x)
                y = local.f2(x1)
            }
        )r   rt   r   ru   rt   rt   r   r   r   )	r   r   r)   r|   r}   uint8r   r   r   )r   r   r   r   resultr   s         rE   test_nested_local_functionsz2TestReferenceEvaluator.test_nested_local_functions  sk    )+
Z "!$HHYbhh/77	B$a)!,&)rL   c                   t        dt        j                  d d g      }t        dt        j                  d g      }t        ddgdgdgd      }t	        |gd|g|g      }t        |t        dd      g	      }t        |       t        j                  d
      j                  d      j                  t        j                        }|j                  dd      }t        |      }|j                  d d|i      d   }	t!        ||	       y )Nr   r   	ReduceSumrt   axeskeepdimsrsrc   r   r   <   r   r   r   axisr'  r   r$   r   r   r   r   r   r    r   r|   aranger   astyper   sumr)   r   r   
r   r   r   r   r   rl   r   r   r   r  s
             rE   test_reduce_sum_11z)TestReferenceEvaluator.test_reduce_sum_11S  s    "3(9(9D$<H"3(9(9D6B+use1#JE7D1#s3l2r6J5KL
JIIbM!!),33BJJ?55a!5,!*-hhtc1X&q)#&rL   c                   t        dt        j                  d d g      }t        dt        j                  d g      }t        ddgdgdgd      }t	        |gd|g|g      }t        |t        dd      g	      }t        |       t        j                  d
      j                  d      j                  t        j                        }||z  j                  dd      }t        |      }|j                  d d|i      d   }	t!        ||	       y )Nr   r   ReduceSumSquarert   r%  r(  rc   r   r   r)  r*  r+  r   r-  r1  s
             rE   test_reduce_sum_square_11z0TestReferenceEvaluator.test_reduce_sum_square_11`  s    "3(9(9D$<H"3(9(9D6B+cUSEaPE7D1#s3l2r6J5KL
JIIbM!!),33BJJ?E;;A;2!*-hhtc1X&q)#&rL   c                   t        dt        j                  d d g      }t        dt        j                  d d g      }t        dt        j                  d g      }t	        dddgdgd      }t        |gd||g|g      }t        |t        dd	      g
      }t        |       t        j                  d      j                  d      j                  t        j                        }t        j                  dgt        j                        }|j!                  dd      }	t#        |      }
|
j%                  d ||d      d   }t'        |	|       y )Nr   r   r   r$  rt   r'  r(  rc      r   r)  r*  ru   r+  r   r   r   r$   r   r   INT64r   r   r   r    r   r|   r.  r   r/  r   r}   int64r0  r)   r   r   r   r   r   r   r   r   rl   r   r   r   r   r  s               rE   test_reduce_sum_13z)TestReferenceEvaluator.test_reduce_sum_13m  s   "3(9(9D$<H"3(9(9D$<H"3(9(9D6B+SzC51EE7D1a&1#6l2r6J5KL
JIIbM!!),33BJJ?HHaS)55a!5,!*-hht11-.q1#&rL   c           	        t               }d}t        d|      t        |d      g}t        dddgdg      }t               }d|_        d|_        t        j                  |_        |j                  j                  |       t        |d	ddgdg|g|dg      }t        dt        j                  d d g      }t        dt        j                  d g      }t        dt        j                  d g      }	t        t        d	ddgdg|d
      gd||g|	g      }
t!        |
||g      }t#        |      }t%        j&                  d      j)                  d      j+                  t$        j,                        }t%        j.                  dgt$        j0                        }|j3                  d ||d      d   }|j5                  dd      }t7        ||       y )Ncustomrc   rt   r$  r   r,  r   r'  MyReduceSum)rg   r'  exampler   	functionsr   r   rs   r   ru   )r   r,  r   r+  )r   r    r   r   r]   ref_attr_nameINTry   	attributeappendr   r$   r   r   r;  r   r   r)   r|   r.  r   r/  r   r}   r<  r   r0  r   )r   ro   
new_domainr   nodeattmy_reduce_sumr   r,  r   r   rl   r   r   r   r!  r   s                    rE   test_reduce_sum_attributez0TestReferenceEvaluator.test_reduce_sum_attribute|  s   "$
%b%0,z12MNsFmcU;&!%%c"%&MEFL
 #3(9(9D$<H%fk.?.?$H"3(9(9D6B!&ME% IC
  =/

 "*-IIaL  (//

;HHbT*$a 34Q755b15-&)rL   c                   t        dt        j                  d d g      }t        dt        j                  d d g      }t        dt        j                  d g      }t	        dddgdgd      }t        |gd||g|g      }t        |t        dd	      g
      }t        |       t        j                  d      j                  d      j                  t        j                        }t        j                  dgt        j                        }||z  j!                  dd      }	t#        |      }
|
j%                  d ||d      d   }t'        |	|       y )Nr   r   r   r4  rt   r7  r(  rc      r   r)  r*  ru   r+  r9  r   r:  r=  s               rE   test_reduce_sum_square_18z0TestReferenceEvaluator.test_reduce_sum_square_18  s   "3(9(9D$<H"3(9(9D$<H"3(9(9D6B+c3Z#KE7D1a&1#6l2r6J5KL
JIIbM!!),33BJJ?HHaS)E;;A;2!*-hht11-.q1#&rL   c                   t        dt        j                  d d g      }t        dt        j                  d d g      }t        dt        j                  d g      }t	        dddgdgd      }t        |gd||g|g      }t        |t        dd	      g
      }t        |       t        j                  d      j                  d      j                  t        j                        }t        j                  g t        j                        }|j!                  d      }	t#        |      }
|
j%                  d ||d      d   }t'        |	|       y )Nr   r   r   r$  rt   r7  r(  rc   r8  r   r)  r*  ru   r9  r   r:  r=  s               rE   test_reduce_sum_13_empty_axesz4TestReferenceEvaluator.test_reduce_sum_13_empty_axes  s   "3(9(9D$<H"3(9(9D$<H"3(9(9D6B+SzC51EE7D1a&1#6l2r6J5KL
JIIbM!!),33BJJ?HHRrxx(55!5$!*-hht11-.q1#&rL   c                   t        dt        j                  d d g      }t        dt        j                  d d g      }t        dt        j                  d g      }t	        dddgdgd      }t        |gd||g|g      }t        |t        dd	      g
      }t        |       t        j                  d      j                  d      j                  t        j                        }t        j                  g t        j                        }||z  j!                  d      }	t#        |      }
|
j%                  d ||d      d   }t'        |	|       y )Nr   r   r   r4  rt   r7  r(  rc   rP  r   r)  r*  ru   r9  r   r:  r=  s               rE   $test_reduce_sum_square_18_empty_axesz;TestReferenceEvaluator.test_reduce_sum_square_18_empty_axes  s   "3(9(9D$<H"3(9(9D$<H"3(9(9D6B+c3Z#KE7D1a&1#6l2r6J5KL
JIIbM!!),33BJJ?HHRrxx(E;;;*!*-hht11-.q1#&rL   c                   t        dt        j                  d d g      }t        dt        j                  d g      }t        ddgdgdd      }t	        |gd|g|g      }t        |t        dd      g	      }t        |       t        j                  d
      j                  d      j                  t        j                        }t        |      }|j                  d d|i      d   }t        ||       y )Nr   r   r$  rt   r'  noop_with_empty_axesr(  rc   r8  r   r)  r*  r   r$   r   r   r   r   r   r    r   r|   r.  r   r/  r   r)   r   r   	r   r   r   r   r   rl   r   r   r  s	            rE   "test_reduce_sum_13_empty_axes_noopz9TestReferenceEvaluator.test_reduce_sum_13_empty_axes_noop  s    "3(9(9D$<H"3(9(9D6B+useaVWXE7D1#s3l2r6J5KL
JIIbM!!),33BJJ?!*-hhtc1X&q)3rL   c                   t        dt        j                  d d g      }t        dt        j                  d g      }t        ddgdgdd      }t	        |gd|g|g      }t        |t        dd      g	      }t        |       t        j                  d
      j                  d      j                  t        j                        }t        |      }|j                  d d|i      d   }t        ||z  |       y )Nr   r   r4  rt   rW  r(  rc   rP  r   r)  r*  r   rY  rZ  s	            rE   )test_reduce_sum_square_18_empty_axes_noopz@TestReferenceEvaluator.test_reduce_sum_square_18_empty_axes_noop  s    "3(9(9D$<H"3(9(9D6Buseaa
 E7D1#s3l2r6J5KL
JIIbM!!),33BJJ?!*-hhtc1X&q)As#rL   c                n   t        dt        j                  d d g      }t        dt        j                  d g      }t        dt        j                  d g      }t        dddgdg      }t	        |gd||g|g      }t        |t        dd      g      }t        |       t        j                  d	      j                  d
      j                  t        j                        }t        j                  dgt        j                        }||kD  }	t        |      }
|
j                  d ||d      d   }t!        |	|       y )Nr   r   ZGreatergrc   r8  r   r   rs   rs   rs   ru   r   r   r   r$   r   r   r   r   r   r    r   r|   r.  r   r/  r   r}   r)   r   r   r   r   r   r_  r   r   rl   r   r   r   r   r  s               rE   test_greaterz#TestReferenceEvaluator.test_greater  s   "3(9(9D$<H"3(9(9D6B"3(9(9D6B)c3Z#7E7C!Q!5l2r6J5KL
JIIaL  (//

;HHaS

+q5!*-hht11-.q1#&rL   c                Z   t        dddgdg      }t        j                  d      j                  d      j	                  t        j
                        }t        j                  dgt        j
                        }||kD  }t        |      }|j                  d ||d	      d
   }t        ||       y )Nr`  r   r   r_  r   rb  rs   ru   rc  r   )
r   r|   r.  r   r/  r   r}   r)   r   r   )r   r   r   r   r   r   r  s          rE   test_node_protoz&TestReferenceEvaluator.test_node_proto  s    )c3Z#7IIaL  (//

;HHaS

+q5!%(hht11-.q1#&rL   c                n   t        dt        j                  d d g      }t        dt        j                  d g      }t        dt        j                  d g      }t        dddgdg      }t	        |gd||g|g      }t        |t        dd      g      }t        |       t        j                  d	      j                  d
      j                  t        j                        }t        j                  dgt        j                        }||k\  }	t        |      }
|
j                  d ||d      d   }t!        |	|       y )Nr   r   r_  GreaterOrEqualra  rc   r8  r   r   rb  rs   ru   rc  r   rd  re  s               rE   test_greater_or_equalz,TestReferenceEvaluator.test_greater_or_equal  s   "3(9(9D$<H"3(9(9D6B"3(9(9D6B*S#J>E7C!Q!5l2r6J5KL
JIIaL  (//

;HHaS

+6!*-hht11-.q1#&rL   c                    t        dt        j                  d g      }t        dg dgt	        t        j                  dgt
        j                                    }t        |gdg |g      }t        dt        j                  d g      }t        dg dgt	        t        j                  dgt
        j                                    }t        |gdg |g      }t	        t        j                  dgt
        j                        d	
      }t        ddd	gdg      }t        ddgdg||      }t        dt        j                  d d g      }	t        dt        j                  d g      }
t        ||gd|	g|
g|g      }t        |      }t        |      }| j                  t        |      d       t        j                  dgt
        j                        }|j                  d d|i      d   }t        t        j                  dgt
        j                        |       t        j                  dgt
        j                        }|j                  d d|i      d   }t        t        j                  dgt
        j                        |       y )NCConstantrt   ru   )value_floatsgthenr   gelsezeror   r`  r   GIfr_  )then_branchelse_branchra  r   zReferenceEvaluator(X) -> Zr   )r$   r   r   r   r(   r|   r}   r   r   r   r)   r   strr   r   )r   rm  bthen
bthen_bodybelse
belse_bodyrr  greaternode_ifr   r_  r   	model_defr   r   r  s                   rE   test_ifzTestReferenceEvaluator.test_if  s   "3(9(9D6BE#BHHaS

$CD	
  "qc:
"3(9(9D6BE#BHHaS

$CD	
  "qc:
"((A3bjj9GIV}se<EE""
 #3(9(9D$<H"3(9(9D6BGW-sQC!4&Qu%	!),T$@AHHaS

+hhtc1X&q)!BJJ7=HHbT,hhtc1X&q)!BJJ7=rL   c           
     <   t        dt        j                  dg      }t        dt        j                  dg      }t        j                  g d      j                  t        j                        }t        j                  g d      j                  t        j                        }t        dg dgt        |            }t        dg dgt        |            }t        |gdg |g      }t        |gd	g |g      }t        d
dgdg||      }	t               }
d|
_        d|
_        |
j                  j                  dg       |
j                  j                  dg       |
j                   j                  |	g       t#               }|
j$                  j                  t'        d|      g       t        t        dddgdg      gdt        dt        j(                  g       gt        dt        j                  dg      g      }t+        |dt'        d|      t'        dd      g      }|j,                  j                  |
g       t/        |      }|j1                  d dt        j                  d      i      }t        j                  g dt        j                        }t3        ||d          y )Nthen_outr   else_outrt   rs   r   r   r   )r   r   r   rs   rt   rn  r   outputsvalue	then_body	else_bodyrt  f_condf_resr   r  ru  rv  r@  rD   rc   condr   )rg   r   r  r   )nodesr]   r   r  testrt   )producer_namer   Tru   r   )r$   r   r   r|   r}   r/  r   r   r(   r   r   rg   r]   inputextendoutputrK  r   rf   r    BOOLr   rD  r)   r   r   )r   r  r  r   r   then_const_nodeelse_const_noder  r  if_noder   ro   r   r   r   r!  r   s                    rE   test_if_functionz'TestReferenceEvaluator.test_if_functionI  s+   )*k6G6G!M)*k6G6G!MHH_%,,RZZ8HH_%,,RZZ8#rJ<z!}
 $rJ<z!}
 0+rH:N	0+rH:N	:I!!
 O	z"		"	wi "$	|B678T(F8eWUV*6;3C3CRHI+E;3D3DqcJK	
  'E2L14MN

 	
A3!!$$$ 8988O2::>&),rL   c                0   t               }d}t        d|      t        |d      g}t        dg dg      }t               }d|_        d|_        t        j                  |_        |j                  j                  |       t        dd	d
gdg      }t        dddgdg      }t        |dd	d
gdg|||g|dg      }t        d	t        j                  d d g      }	t        d
t        j                  d d g      }
t        dt        j                  d g      }t        t        dd	d
gdg|t        dt        j                  dgdg            t        ddgdg      gd|	|
g|g      }t!        |||g      }t#        |      }t%        j&                  d      j)                  d      j+                  t$        j,                        }t%        j.                  ddgt$        j,                        }|j1                  d ||d      d   }t%        j2                  ||z  dz         }t5        ||       y )Nr@  rc   rt   rn  r   r  biasr   r   r   r   r   r   LinearRegressionY1former_Bq=
ףp?)rg   r  AbsrB  rC  r   rE  r   ru   r9  r   )r   r    r   r   r]   rF  TENSORry   rH  rI  r   r$   r   r   r   r"   r   r)   r|   r.  r   r/  r   r}   r   absr   )r   ro   rJ  r   cstrL  r   r   linear_regressionr   r   r   r   rl   r   r   r   r!  r   s                      rE   test_function_attributez.TestReferenceEvaluator.test_function_attribute|  s   "$
%b%0,z12MN
B."!((S!(S#J7%$se4)#JE%H
 #3(9(9D$<H"3(9(9D$<H"3(9(9D6B&#JF%$Z1B1BQC$P %$#/	 FC
   ;L:M

 "*-IIaL  (//

;HHaWBJJ/$aa 01!466!a%$,'&)rL   c                4	   t               }d}t        d|      t        |d      g}t        dg dg      }t               }d|_        d|_        t        j                  |_        |j                  j                  |       t        dg dg      }t               }d|_        d	|_        t        j                  |_        |j                  j                  |       t        dt        j                  d g      }t        dt        j                  d g      }t        |gd
g |g      }	t        |gdg |g      }
t        dg dgt        t        j                   dgt        j"                                    }t        ddgdg      }t        dddgdg      }t        ddgdg|	|
      }t        dddgdg      }t        dddgdg      }t%        |dddgdg||||||g|dd	g      }t        dt        j                  d d g      }t        dt        j                  d d g      }t        dt        j                  d g      }t        t        dddgdg|t'        dt        j                  dgd g      t'        d!t        j                  dgd"g      #      t        d$dgdg      gd%||g|g      }t)        |||g&      }t+        |       t-        |      }| j/                  |j0                  d   j2                  j4                  d'       | j/                  |j0                  d   j6                  j2                  j4                  d(       |j0                  d   j6                  }d)}|j0                  D ]N  }|j2                  j4                  j9                  d      s)|j:                  st=        d*t        |       d+      d,}P |st=        d-      t        j>                  d.      jA                  d/      jC                  t        j"                        }t        j                   dd0gt        j"                        }|jE                  d |dz   |d1      d   }t        jF                  ||z  d z         }tI        ||       |jE                  d |d2z
  |d1      d   }t        jF                  ||z  d"z         }tI        ||       y )3Nr@  rc   rt   rn  B1r  bias1B2bias2r  r  rr  r   ru   r  	ReduceMinr   Xminr`  r  rt  r   r  r   r   r   r   r   r  r  	former_B1r  	former_B2	  )rg   r  r  r  rB  rC  
OpFunctionr)   FzNested node z2 declares no linked attribute but a subgraph does.TzBNo node 'If' was found, has_linked_attribute could not be checked.r   rE  r   r9  r   )%r   r    r   r   r]   rF  r  ry   rH  rI  r$   r   r   r   r(   r|   r}   r   r   r"   r   r   r)   r   r  r  r  impl_
startswithhas_linked_attributer   r.  r   r/  r   r  r   )r   ro   rJ  r   cst1rL  cst2r  r  r  r  rr  minir  r  r   r   r  r   r   r   r   rl   r   fctcheckedrK  r   r   r!  r   s                                  rE   $test_function_attribute_nested_graphz;TestReferenceEvaluator.test_function_attribute_nested_graph  sj   "$
%b%0,z12MNR$0#!((c"R$0#!((c")$0A0AD6J)$0A0AD6Jv{B
C	v{B
C	HRXXqc<=	
 sefX69vv&6
C:E!!
 (S#J7%$se4)#JE4%7g
 #3(9(9D$<H"3(9(9D$<H"3(9(9D6B&#JF%%k;3D3DqcD6R%k;3D3DqcC5Q %$#/
 FC
"  ;L:M

 	J!*-*44==|LNN1##--668L	
 nnQ%%MM 	D~~&&11$700(&tDzl 3/ 0  	  T  IIaL  (//

;HHaWBJJ/$a!e! 45a866!a%$,'&)$a"f1 56q966!a%#+&&)rL   c                &
   t               }d}t        d|      t        |d      g}t        dg dg      }t               }d|_        d|_        t        j                  |_        |j                  j                  |       t        dg dg      }t               }d|_        d	|_        t        j                  |_        |j                  j                  |       t        dt        j                  d g      }t        dt        j                  d g      }t        |gd
g |g      }	t        |gdg |g      }
t        dg dgt        t        j                   dgt        j"                                    }t        dddgdg      }t        ddgdg|	|
      }t        dg dg      }t               }d|_        d|_        t        j                  |_        |j                  j                  |       t        dt        j                  d g      }t        |gd
g |g      }t        dt        j                  d g      }t        |||gdg |g      }t        dg dgt        t        j                   dgt        j"                                    }t        ddgdg      }t        dddgdg      }t        ddgdg||      }t        ddd gd!g      }t        d"d!dgd#g      }t%        |d$dd gd#g||||||g|g d%      }t        dt        j                  d d g      }t        d t        j                  d d g      }t        d#t        j                  d g      }t        t        d$dd gd&g|t'        d't        j                  dgd(g      t'        d)t        j                  dgd*g      t'        d+t        j                  dgd,g      -      t        d.d&gd#g      gd/||g|g      }t)        |||g0      }t+        |       t-        |      }t        j.                  d1      j1                  d2      j3                  t        j"                        }t        j                   dd3gt        j"                        }|j5                  d |dz   |d4      d   }t        j6                  ||z  d*z         }t9        ||       |j5                  d |d5z
  |d4      d   }t        j6                  ||z  d6z
        }t9        ||       |j5                  d |d7z   |d4      d   }t        j6                  ||z  d(z         }t9        ||       y )8Nr@  rc   rt   rn  r  r  r  r  r  r  r  c100d   ru   r  r`  r  
f_cond_100rt  B4r  B3bias3rr  r   r  r   Lessf_cond_zeror   r   r   r   r   r   r  )r  r  r  r  r  r  r  r  	former_B3i)rg   r  r  r  r  rB  rC  r   rE  r   r9  r   ix  i  )r   r    r   r   r]   rF  r  ry   rH  rI  r$   r   r   r   r(   r|   r}   r   r   r"   r   r   r)   r.  r   r/  r   r  r   ) r   ro   rJ  r   r  rL  r  r  r  
then_body1
else_body1r  r  r  cst3
then_body2
else_body2rr  r  r   r   r  r   r   r   r   rl   r   r   r   r!  r   s                                    rE   +test_function_attribute_nested_nested_graphzBTestReferenceEvaluator.test_function_attribute_nested_nested_graph!  s   "$
%b%0,z12MN R$0#!((c"R$0#!((c")$0A0AD6J)$0A0AD6JR(D
R(D
 HRXXse2::>?	
 9vv&6G >F""
 R$0#!((c")$0A0AD6JR(D
)$0A0AD6Jvw 7b8*U
 HRXXqc<=	
 sefX66FF#3m_E!?E""
 (S#J7%$se4)#JE4%7'
 #3(9(9D$<H"3(9(9D$<H"3(9(9D6B&#JF%%k;3D3DqcD6R%k;3D3DqcC5Q%k;3D3DqcD6R %$#/ FC
"  ;L:M

 	J!*-IIaL  (//

;HHaWBJJ/$a!e! 45a866!a%#+&&)$a"f1 56q966!a%#+&&)$a$hQ 78;66!a%$,'&)rL   c                    G d d      } G d dt               } G d dt               }t        dt        j                  d d g      }t        dt        j                  d g      }t	        ddgdgd	d
      }t        |gd|g|g      }t        |t        d
d      g      }t        j                  d      j                  d      j                  t        j                        dz   }	| j                  t              5  t        |       d d d        t	        ddgdgd	d
      }t        |gd|g|g      }t        |t        d
d      g      }| j                  t               5  t        ||g       d d d        t	        ddgdgd	d
      }t        |gd|g|g      }t        |t        d
d      g      }| j                  t              5  t        ||g       d d d        t	        ddgdgd	d
      }t        |gd|g|g      }t        |t        d
d      g      }t        |||g      }
|
j#                  d d|	i      d   }d|	d	z   z  }t%        ||       y # 1 sw Y   NxY w# 1 sw Y   xY w# 1 sw Y   xY w)Nc                      e Zd ZdZd Zd Zy):TestReferenceEvaluator.test_custom_node.<locals>._InvAlphar@  c                     || _         || _        y rZ   )	onnx_node
run_params)r   r  r  s      rE   __init__zCTestReferenceEvaluator.test_custom_node.<locals>._InvAlpha.__init__  s    !*",rL   c                (    d|| j                   z   z  fS Nrt   alphar   r   s     rE   _runz?TestReferenceEvaluator.test_custom_node.<locals>._InvAlpha._run      Q^,..rL   N)r  
__module____qualname__	op_domainr  r  r   rL   rE   	_InvAlphar    s     I-/rL   r  c                      e Zd Zd Zy):TestReferenceEvaluator.test_custom_node.<locals>.InvAlpha2c                (    d|| j                   z   z  fS r  r  r  s     rE   r  z?TestReferenceEvaluator.test_custom_node.<locals>.InvAlpha2._run  r  rL   N)r  r  r  r  r   rL   rE   	InvAlpha2r    s    /rL   r  c                      e Zd ZdZddZy)9TestReferenceEvaluator.test_custom_node.<locals>.InvAlphar@  Nc                4    |xs | j                   }d||z   z  fS r  r  r   r   r  s      rE   r  z>TestReferenceEvaluator.test_custom_node.<locals>.InvAlpha._run  s!    +QY))rL   rZ   r  r  r  r  r  r   rL   rE   InvAlphar    s     I*rL   r  r   r         ?r@  r  rg   r(  rt   r   r)  r*  new_opsr   )r*   r$   r   r   r   r   r   r    r|   r.  r   r/  r   r   NotImplementedErrorr)   rx   r   r   )r   r  r  r  r   r   r   r   rl   r   r   r  r   s                rE   test_custom_nodez'TestReferenceEvaluator.test_custom_node  sb   	/ 	/	/ 	/	*u 	* #3(9(9D$<H"3(9(9D6B*secU#hOE7D1#s3l8Q6O5PQ
IIbM!!),33BJJ?!C23 	+z*	+ +use3xPE7D1#s3l8Q6O5PQ
y) 	@zI;?	@ +use3xPE7D1#s3l8Q6O5PQ
23 	@zI;?	@ *secU#hOE7D1#s3l8Q6O5PQ
!*x6JKhhtc1X&q)C=#&+	+ 	+	@ 	@	@ 	@s$   6III'II$'I0c                *    G d dt               }t        dt        j                  d d g      }t        dt        j                  d g      }t	        ddgdgdd      }t        |gd|g|g      }t        |t        dd	      g
      }t        j                  d      j                  d      j                  t        j                        d	z   }t        ||g      }| j                  t              5  |j!                  d d|i       d d d        y # 1 sw Y   y xY w)Nc                      e Zd ZdZddZy)DTestReferenceEvaluator.test_custom_no_output_tuple.<locals>.InvAlphar@  Nc                2    |xs | j                   }d||z   z  S r  r  r  s      rE   r  zITestReferenceEvaluator.test_custom_no_output_tuple.<locals>.InvAlpha._run  s    +AI&rL   rZ   r  r   rL   rE   r  r    s     I'rL   r  r   r   r  r@  r  r(  rt   r   r)  r*  r  r*   r$   r   r   r   r   r   r    r|   r.  r   r/  r   r)   r   rx   r   	r   r  r   r   r   r   rl   r   refs	            rE   test_custom_no_output_tuplez2TestReferenceEvaluator.test_custom_no_output_tuple  s    	'u 	' #3(9(9D$<H"3(9(9D6B*secU#hOE7D1#s3l8Q6O5PQ
IIbM!!),33BJJ?!C hZ@y) 	$GGD3(#	$ 	$ 	$   +D		Dc                *    G d dt               }t        dt        j                  d d g      }t        dt        j                  d g      }t	        ddgdgdd      }t        |gd|g|g      }t        |t        dd	      g
      }t        j                  d      j                  d      j                  t        j                        d	z   }t        ||g      }| j                  t              5  |j!                  d d|i       d d d        y # 1 sw Y   y xY w)Nc                      e Zd ZdZddZy)ATestReferenceEvaluator.test_custom_empty_output.<locals>.InvAlphar@  Nc                    t               S rZ   )rw   r  s      rE   r  zFTestReferenceEvaluator.test_custom_empty_output.<locals>.InvAlpha._run  s	    wrL   rZ   r  r   rL   rE   r  r    s     IrL   r  r   r   r  r@  r  r(  rt   r   r)  r*  r  )r*   r$   r   r   r   r   r   r    r|   r.  r   r/  r   r)   r   r{   r   r  s	            rE   test_custom_empty_outputz/TestReferenceEvaluator.test_custom_empty_output  s    	u 	 #3(9(9D$<H"3(9(9D6B*secU#hOE7D1#s3l8Q6O5PQ
IIbM!!),33BJJ?!C hZ@z* 	$GGD3(#	$ 	$ 	$r  c                *    G d dt               }t        dt        j                  d d g      }t        dt        j                  d g      }t	        ddgdgdd      }t        |gd|g|g      }t        |t        dd	      g
      }t        j                  d      j                  d      j                  t        j                        d	z   }t        ||g      }| j                  t              5  |j!                  d d|i       d d d        y # 1 sw Y   y xY w)Nc                      e Zd ZdZddZy)@TestReferenceEvaluator.test_custom_tuple_tuple.<locals>.InvAlphar@  Nc                    |xs | j                   }t        t        d||z   z  g      g      }t        |t              sJ t        |d   t              sJ |S )Nrt   r   )r  rw   r[   )r   r   r  r   s       rE   r  zETestReferenceEvaluator.test_custom_tuple_tuple.<locals>.InvAlpha._run  sV    +UAUO#4567!#u---!#a&%000
rL   rZ   r  r   rL   rE   r  r    s     IrL   r  r   r   r  r@  r  r(  rt   r   r)  r*  r  r  r  s	            rE   test_custom_tuple_tuplez.TestReferenceEvaluator.test_custom_tuple_tuple  s    	u 	 #3(9(9D$<H"3(9(9D6B*secU#hOE7D1#s3l8Q6O5PQ
IIbM!!),33BJJ?!C hZ@y) 	$GGD3(#	$ 	$ 	$r  c                D  	  G d d      	 G 	fddt               }t        dt        j                  d d g      }t        dt        j                  d g      }t	        ddgdgdd	      }t        |gd
|g|g      }t        |t        dd      g      }t        j                  d      j                  d      j                  t        j                        dz   }t        ||g      }| j                  t              5  |j!                  d d|i       d d d        y # 1 sw Y   y xY w)Nc                      e Zd Zy)LTestReferenceEvaluator.test_custom_tuple_unexpected_type.<locals>.CustomTypeNr  r  r  r   rL   rE   
CustomTyper  
      rL   r  c                      e Zd ZdZd fd	Zy)JTestReferenceEvaluator.test_custom_tuple_unexpected_type.<locals>.InvAlphar@  Nc                p    t                g      }t        |t               sJ t        |d         sJ |S )Nr   )rw   r[   )r   r   r  r   r  s       rE   r  zOTestReferenceEvaluator.test_custom_tuple_unexpected_type.<locals>.InvAlpha._run  s:    Z\N+!#u---!#a&*555
rL   rZ   r  )r  s   rE   r  r    s     IrL   r  r   r   r  r@  r  r(  rt   r   r)  r*  r  r  )
r   r  r   r   r   r   rl   r   r  r  s
            @rE   !test_custom_tuple_unexpected_typez8TestReferenceEvaluator.test_custom_tuple_unexpected_type	  s    	 		u 	 #3(9(9D$<H"3(9(9D6B*secU#hOE7D1#s3l8Q6O5PQ
IIbM!!),33BJJ?!C hZ@y) 	$GGD3(#	$ 	$ 	$s   8DDc                   t        dt        j                  g       }t        dt        j                  g       }t        dt        j                  g       }t	        dt        j
                  d       }t	        dt        j
                  d       }t        j                  g d      j                  t        j                        }t        dg dgt        d	t        j
                  |j                  |j                         j                  t              
            }t        dg dgt        dt        j                  ddg
            }t        dg dgt        dt        j                  ddg
            }	t        dg dgt        dt        j                  ddg
            }
t        dddgdg      }t        dddgdg      }t        dg ddg      }t        dddgdg      }t        ddgdg      }t        ||||	||
|||g	d |||g||g      }t        d!g d"d#g|$      }t        d%d#gd&gdd'      }t        j                  d(      j                  t        j                         }g }t        j                  d      j                  t        j"                        }t%        t        d)t        d*t        j                  |j                        t        d+t        j                  |j                        t'        d,t        j
                  g       gt        d&t        j
                  d       g||g-      .      }t        j                  g d/t        j                  0      }t)        |      }|||d"}|j+                  d |      }t-        ||d          y )1Ncond_incond_out
iter_countseq_inseq_outr  rn  r   const_tensor_x)r]   	data_typedimsvalsr  oneconst_tensor_oner   rt   slice_startconst_tensor_zerort   r   r&  const_tensor_axesr   endr   r  	Unsqueeze	slice_endSlice)r   r  r  	slice_outSequenceInsertIdentity	loop_bodyLoop)
trip_countr  	seq_emptyseq_res)r   r  bodyConcatFromSequencer   )r   r  r,  new_axisr   	loop_testr!  r  r"  )r]   r   r  r  )r   )      ?r(         @r(  r)        @r(  r)  r*        @r(  r)  r*  r+        @ru   )r$   r   r  r;  r#   r   r|   r}   r/  r   r   r"   r_   flattenfloatr   r<  bool_r   ra   r)   r   r   )r   r  r	  r
  r  r  r   x_const_nodeone_const_nodezero_const_node	axes_nodeadd_nodeend_unsqueeze_node
slice_nodeinsert_nodeidentity_noder  rK  node_concatr!  r"  r  r~  r   oinfr   r  s                              rE   	test_loopz TestReferenceEvaluator.test_loop   s]   
 )K4D4DbI)*k6F6FK+L+:K:KRP
0;;L;LdS1)[=N=NPTUHH_%,,RZZ8 E%%++WWYY[''.		

 #G'%++S		

 $"O(%++S		

 H(%++S		

	 UL%+@5'R&+
 =}

  h%<yk
 "*i[:,W"
 &)w
	" 6K	
   ;G
 XXa[''1
	xx{!!"((+ *$k&7&79I9I +6;3C3CTZZP,[+:K:KRP 0{7H7H$OP[)
	 88W**
 "), *DyQhhtV$#a&)rL   c                   t        dt        j                  d g      }t        dt        j                  d g      }t        ddgdgd      }t	        |gd|g|g      }t        |      }t        |       t        |      }|j                  d dt        j                  dt        j                        d	z   i      d
   }| j                  |j                  d       | j                  |j                  t        j                         | j                  |j!                         d       | j#                  |j%                         d       y )Nr   r   	Bernoulli        seedra  rs   r   ru   r  r   gh㈵grZ|
 ?r$   r   r   r   r   r   r   r)   r   r|   r   r   r   r_   rv   assertGreaterr   
assertLessr   r   r   r   r   r   rl   r   r  s           rE   test_onnxt_runtime_bernoulliz3TestReferenceEvaluator.test_onnxt_runtime_bernoulli  s    "3(9(9D6B"3(9(9D6B+use#>E7C!qc2&
J!*-hhtc288F"**#E#KLMaPF+BJJ/3779e,	8,rL   c                   t        dt        j                  d g      }t        dg dgdddg      }t	        |gdg |g      }t        |      }t        |       t        |      }|j                  d i       d   }| j                  |j                  d	       | j                  |j                  t        j                         | j                  |j                         d       | j!                  |j#                         d
       y )Nr   RandomUniformr>  rs   r   r@  r_   ra  r   rA  rt   )r$   r   r   r   r   r   r   r)   r   r   r_   rv   r|   r   rC  r   rD  r   r   r   r   r   rl   r   r  s          rE   !test_onnxt_runtime_random_uniformz8TestReferenceEvaluator.test_onnxt_runtime_random_uniform  s    "3(9(9D6B/2u3q!fME7CaS1&
J!*-hhtR #F+BJJ/3779a(	1%rL   c                z   t        dt        j                  d g      }t        dt        j                  d g      }t        ddgdgd      }t	        |gd|g|g      }t        |      }t        |       t        |      }|j                  d dt        j                  dt        j                        i      d	   }| j                  |j                  d       | j                  |j                  t        j                         | j                  |j!                         d	       | j#                  |j%                         d
       y )Nr   r   RandomUniformLiker>  r?  ra  rA  ru   r   rt   rB  rE  s           rE   &test_onnxt_runtime_random_uniform_likez=TestReferenceEvaluator.test_onnxt_runtime_random_uniform_like  s    "3(9(9D6B"3(9(9D6B-use#FE7C!qc2&
J!*-hhtc288F"**#EFGJF+BJJ/3779a(	1%rL   c                z   t        dt        j                  d g      }t        dg dgdddg      }t	        |gdg |g      }t        |      }t        |       t        |      }|j                  d i       d   }| j                  |j                  d	       | j                  |j                  t        j                         y )
Nr   RandomNormalr>  rs   r   rI  ra  r   rA  )r$   r   r   r   r   r   r   r)   r   r   r_   rv   r|   r   rJ  s          rE    test_onnxt_runtime_random_normalz7TestReferenceEvaluator.test_onnxt_runtime_random_normal  s    "3(9(9D6B."se#aVLE7CaS1&
J!*-hhtR #F+BJJ/rL   c                   t        dt        j                  d g      }t        dt        j                  d g      }t        ddgdgd      }t	        |gd|g|g      }t        |      }t        |       t        |      }|j                  d dt        j                  dt        j                        i      d	   }| j                  |j                  d       | j                  |j                  t        j                         y )
Nr   r   RandomNormalLiker>  r?  ra  rA  ru   r   )r$   r   r   r   r   r   r   r)   r   r|   r   r   r   r_   rv   rE  s           rE   %test_onnxt_runtime_random_normal_likez<TestReferenceEvaluator.test_onnxt_runtime_random_normal_like  s    "3(9(9D6B"3(9(9D6B,secUEE7C!qc2&
J!*-hhtc288F"**#EFGJF+BJJ/rL   c                   t        j                  d      }| j                  |j                  d       t	        j
                  ddgddggt        j                        }t        j                  |d      }t        |d      }t        ||       y )Nr  r  r   rt   r   rs   ru   )
r0   creater   r  r|   r}   r   evalr2   r   )r   instr   r   r   s        rE   test_eval_celuz%TestReferenceEvaluator.test_eval_celu  sk    {{%S)HHq!fr1g&bjj9IIas#1C(!$rL   c                
   t        j                  ddgddggt         j                        }t        j                  |t
        j                        }t        j                  |t
        j                        }|}t        ||       y )Nr   rt   r   rs   ru   to)	r|   r}   r   r/   rW  r   FLOAT8E4M3FNr   r   )r   r   r   dyr   s        rE   test_eval_castz%TestReferenceEvaluator.test_eval_cast  s^    HHq!fr1g&bjj9LL{778\\! 1 12"%rL   c                ^   t        dd      }| j                  |j                  d       |j                  d      }| j                  |j                  d       t        j                  ddgddggt
        j                  	      }|j                  |d      }t        |d      }t        ||       y )
Nrc   r0   r  r  r   rt   r   rs   ru   )r,   r   r  rV  r  r|   r}   r   rW  r2   r   )r   celurX  r   r   r   s         rE   test_eval_celu_load_opz-TestReferenceEvaluator.test_eval_celu_load_op  s    r6",{{{%S)HHq!fr1g&bjj9IIasI#1C(!$rL   c                h    t        j                  d      }| j                  |j                  d       y )Nr  r  )r1   rV  r   r  )r   rX  s     rE   test_create_adamz'TestReferenceEvaluator.test_create_adam  s$    {{%S)rL   c           	        t        dt        j                  g d      }t        dt        j                  g d      }t        dt        j                  g d      }t        dt        j                  g d      }t        dg ddgg dd	d	gd
d
g      }t	        |gd|||g|g      }t        |t        dd      g      }t        |      }|y t        |d      }	| j                  |	j                  d   t               t        |t        gd      }
| j                  |
j                  d   t               t        |d      }| j                  |j                  d   t               d\  }}t        |      D ]c  }t        |      D ]Q  }t        j                  d	d	||ft        j                         }d|dd||f<   t        j                  dt        j                         }t        j"                  d
t        j$                  d      j'                  d      z  d      |ddd d d d f<   t        j(                  dggggt        j                         }|j+                  d |||d      d   }|	j+                  d |||d      d   }t-        ||       |
j+                  d |||d      d   }t-        ||       |j+                  d |||d      d   }t-        ||       T f y )Nr   NNNNr   r   Wr5   r   rg  r   rt   rt   rt   rt   rt   rs   )r   r   r   ra  rc      r   F)	optimizedr   )r  rk  T)r   r   ru   r(  rt   rt   r   r   	   r   r      )r$   r   r   r   r   r   r    rp   r)   r   r  r5   ConvOptimizedr~   r|   r   r   minimumr.  r   r}   r   r   )r   r   r   r   rg  rK  r   rl   sess1sess2sess3sess4sHsWr   r   r   r  got3got4s                       rE   	test_convz TestReferenceEvaluator.test_conv  s   "3(9(9;ST"3(9(9;ST"3(9(9;ST"3(9(9;STE!fF
 D63Aq	A37+E,rSUBVAWX
!*-=":?eooa0$7":RWXeooa0-@":>eooa0-@Br 	0A2Y 0HHaB^2::> #!Q1*HH\< "

1		!0D0DW0M+Ms S!Q1*HHugYbjj9 99T+CDQGiiAAA&>?B#.yyQQQ'?@C$/yyQQQ'?@C$/0	0rL   c                   t        dt        j                  g d      }t        dt        j                  g d      }t        dt        j                  g d      }t        dt        j                  d g      }t        dt        j                  d g      }t        dt        j                  d g      }t        dt        j                  d g      }t        d	t        j                  d g      }t        d
t        j                  d g      }	t	        dg ddg      }
t        |
gd||||||||	g|g      }t        |t        dd      g      }t        |      }|y t        |      }d\  }}t        |      D ]  }t        |      D ]  }t        j                  dd||ft        j                        }d|dd||f<   | j                  d||      5  t        j                  dt        j                        }d|ddd d d d f<   |t        j                  dgt        j                         t        j                  dgt        j                        |t        j                  dgt        j                         t        j                  dgt        j                        t        j                  dgt        j                         t        j                  dgt        j                        d}|j#                  d |      d   }|j#                  d |      d   }t%        ||       d d d        | j                  d||      5  t        j                  dt        j                        }t        j&                  dt        j(                  d      j+                  d      z  d      |ddd d d d f<   |t        j                  dgt        j                         t        j                  dgt        j                        |t        j                  dgt        j                         t        j                  dgt        j                        t        j                  dgt        j                         t        j                  dgt        j                        d}|j#                  d |      d   }|j#                  d |      d   }t%        ||       d d d        | j                  d||      5  t        j                  dt        j                        }d|ddd d d d f<   |t        j                  dgt        j                         t        j                  d gt        j                        |t        j                  d!gt        j                         t        j                  d"gt        j                        t        j                  d#gt        j                         t        j                  d gt        j                        d}|j#                  d |      d   }|j#                  d |      d   }t%        ||       d d d          t        j                  g d$g d%g d&g d'g d(g d)g d*gt        j                        j+                  d+      }t        j                  dgt        j                         }t        j                  d gt        j                        }t        j                  dgt        j                        j+                  d      }t        j                  d,gt        j                         }t        j                  d"gt        j                        }t        j                  d#gt        j                         }t        j                  d-gt        j                        }	||||||||	d}|j#                  d |      d   }|j#                  d |      d   }t%        ||       y # 1 sw Y   xY w# 1 sw Y   (xY w# 1 sw Y   rxY w).Nr   rf  wr   x_scalew_scaley_scalex_zero_pointw_zero_pointy_zero_pointQLinearConv)r   r}  r  r|  r~  r  r  r  ra  rc   rj  r   r   r   rt   ru   r(  r   1x1)r|  r   r   ri  3x3rl  rs   rm  rn     g칟>n?   gO Y@   g{XZ?)r                 :   )r  ;      _      r   @   )8            r        )            r  r  r  )   '   |   M   P   f   +   )         S   )   (      )r     \      *         rt   rt   r   r   gO\?{   )r$   r   UINT8r   r   r   r   r    rp   r)   r~   r|   r   r   r  r}   r   r   r   rq  r.  r   )r   r   r|  r   r}  r~  r  r  r  r  rK  r   rl   rr  rs  rv  rw  r   r   feedsr   r  s                         rE   test_qlinearconvz'TestReferenceEvaluator.test_qlinearconv1  s)   "3(9(9;ST"3(9(9;ST"3(9(9;ST(K4E4EvN(K4E4EvN(K4E4EvN-nk>O>ORVQWX-nk>O>ORVQWX-nk>O>ORVQWX	 E
 Fq'<,WC	
 ,E,rSUBVAWX
!*-=":.Br 3	3A2Y 23HHaB^288< #!Q1*\\EQ!\4 3RXX>A$%AaAqjM#%88QCrzz#B(*!BHH(E#%88QCrzz#B(*!BHH(E#%88QCrzz#B(*!bhh(?	E  %yyu5a8H))D%03C#Hc23  \\EQ!\4 3RXX>A$&JJqBIIaL4H4H4Q/QSV$WAaAqjM#%88QCrzz#B(*!BHH(E#%88QCrzz#B(*!BHH(E#%88QCrzz#B(*!bhh(?	E  %yyu5a8H))D%03C#Hc23  \\EQ!\4 3RXX>A$%AaAqjM#%88]O2::#N(*#bhh(G#%88-=,>bjj#Q(*#bhh(G#%88]O2::#N(*#(A	E  %yyu5a8H))D%03C#Hc23 3G233	3j HH1-13//1 ((
 ',
 	
 ((M?"**=xxRXX6HHaS)11,?((M?"**=xxRXX6((M?"**=xxRXX6 (((	
 99T5)!,iie$Q'#&c3 3 3 3 3 3s'   E_)F_	E_ __ _*c                   t        dt        j                  g d      }t        dt        j                  g d      }t        dt        j                  g d      }t        dt        j                  g d      }t        dddgdg|||      }	t        ddgd	g      }
t        d
dd	gdg|||d      }t        ddgdg      }t        dddgdg      }t	        |	|
|||gd||g||g      }t        |t        dd      t        dd      g      }t	        |	gd||g|g      }t        |t        dd      g      }t        |      }	 t        |      }|y 	 d\  }}t        j                  |      }t        |      D ]E  }t        |      D ]3  }t        j                  dd||ft        j                        }d|dd||f<   t        j                  ddg|t        j                        }t        j                   dt        j"                  |      j%                  |d   df      z  d      |ddd d d d f<   |j'                  d ||d      }|C|j'                  d ||d      d   }t)        |d   j+                         |j+                                	 t)        |d   j+                         |d   j+                                6 H y # t        $ r d }Y }w xY w# t,        $ r)}t-        d| d| d | d!| d"|d    d#|d          |d }~ww xY w)$Nr   rf  r  Y2rg  r5   r   r   r   Shaper_   Im2Colximexperimental)r   r   r   rg   Flattenwflatr   ra  rc   rj  rt   r   )r   r   ru   r(  r   rs   r   ro  )r   rg  zDiscrepancies: pads=z, dilations=z
, strides=z, kernel_shape=r  
!=
)r$   r   r   r   r   r   r    r   r)   rp   r?   r|   r   r~   r   r   rq  r.  r   r   r   ravelr   )r   r   r   r   r   r   r  r  rg  rK  
node_shapenode_im	node_flatnode_gemr   rl   
graph_convonnx_model_convr   	sess_convrv  rw  nkerr   r   r  ort_resr   s                               rE   common_test_im2colz)TestReferenceEvaluator.common_test_im2col  s6   "3(9(9;ST#D+*;*;=UV#D+*;*;=UV"3(9(9;STS#JT7i
 wy9
'NG!
 i#	:	X'7$@:w	8<FH	
  ,r2"6^UV8W!X

  aVbT:
0|B';&<
 "*-	)/:I  !
 Bww|$r 	A2Y HHaB^2::> #!Q1*HH)L)** !#

400,q/21FGG!!Q1* hht11%56('mmD2BCAFG#CFLLNGMMOD#CFLLNCFLLNC!	  	I	. & (.tfL:V]U^ _((4~SVHF3q6(4 	s*   <J: .K:K	K		K>$K99K>c                :    | j                  dg dddgddg       y )Nrt   rt   rt   rt   rt   rs   rt   r  r  r   s    rE   test_im2col_1x1z&TestReferenceEvaluator.test_im2col_1x1  &    1v!Q 	  	
rL   c                :    | j                  dg dddgddg       y )Nrb  r  rt   r  r  r  s    rE   test_im2col_2x2z&TestReferenceEvaluator.test_im2col_2x2  r  rL   c                :    | j                  dg dddgddg       y )Nr  r  rt   r  r  r  s    rE   test_im2col_3x3z&TestReferenceEvaluator.test_im2col_3x3  r  rL   c                :    | j                  dg dddgddg       y )Nr  )r   rt   rs   r   rt   r  r  r  s    rE   test_im2col_3x3_padsz+TestReferenceEvaluator.test_im2col_3x3_pads  r  rL   c                :    | j                  dg dddgddg       y )Nr  )r   rt   rt   rt   rt   rs   r  r  r  s    rE   test_im2col_3x3_stridesz.TestReferenceEvaluator.test_im2col_3x3_strides	  r  rL   c                :    | j                  dg dddgddg       y )Nr   r   r  rt   r  r  r  s    rE   test_im2col_5x5z&TestReferenceEvaluator.test_im2col_5x5  r  rL   c           	        dd l }t        dt        j                  g d      }t        dt        j                  g d      }t        dt        j                  d g      }t        dt        j                  d g      }t        dg ddgg d	d
d
gd
d
g      }t        |gd|||g|g      }t        |t        dd      g      }t        |      }	t        j                  g dg dg dg dg dgg      j                  t        j                        }t        j                  ddg      j                  t        j                        }
t        j                  d
dg      j                  t        j                        }|j                  j!                  t#        |
      |      }|	j%                  d |||
d      } ||j'                  |            j)                         }t+        ||d          y )Nr   r   NNNr   Ir   Col2Imr   r  r   r   r   r   r   rt   r  ra  rc   rj  r   )r(        @      &@      0@      5@)r)        @      (@      1@      6@)r*         @      *@g      2@      7@)r+        "@      ,@      3@      8@)r,  r>        .@g      4@g      9@r   )output_sizer   r   r   r  )rO   r$   r   r   r;  r   r   r   r    r)   r|   r}   r/  r   r<  nnFoldrw   r   
from_numpynumpyr   )r   rO   r   r   ISBSrK  r   rl   r   image_shapeblock_shapefoldr  r  s                  rE   test_col2imz"TestReferenceEvaluator.test_col2im  s   "3(9(9;MN"3(9(9;MN#C):):TFC#C):):TFCEF!f
 D63BaS9l2r6J5KL
!*-HH 10000

 &
 	
 hh1v&--bhh7hh1v&--bhh7xx}}{);}Uhht1;[IJe&&q)*002A'rL   c           	        dd l }t        dt        j                  g d      }t        dt        j                  g d      }	t        dt        j                  d g      }
t        dt        j                  d g      }t        dg ddg|||	      }t        |gd
||
|g|	g      }t        |t        dd      g      }t        |      }|j                  j                  t        |      t        |      t        |      t        |      t        |            }t        j                  |      }t!        |      D ]  }t!        |      D ]  }t        j"                  d||ft        j$                        }d|d||f<   t        j&                  |t        j(                        }t        j&                  |t        j(                        } ||j+                  |            j-                         }|j/                  d |||d      }t1        ||d            y )Nr   r   r  r   r  r   r  r  r  ra  rc   rj  r   )r  r   dilationpaddingstridert   ru   r(  r  )rO   r$   r   r   r;  r   r   r   r    r)   r  r  rw   r   r|   r   r~   r   r   r}   r<  r  r  r   r   )r   sizer  r  r   r   r   rO   r   r   r  r  rK  r   rl   r   r  r  r   r   i_shapeb_shaper  r  s                           rE   common_test_col2imz)TestReferenceEvaluator.common_test_col2im;  s    	"3(9(9;MN"3(9(9;MN#C):):TFC#C):):TFCE
 D63BaS9l2r6J5KL
!*-xx}}k*k*9%I>  
 ww{#t 	0A4[ 
0HHat_BJJ? !Q'
((;bhh?((;bhh?e..q1288:hht17%IJ  A/
0	0rL   c           	     >    | j                  dddg dddgddg       y )Nr   r   r   rs   r   r  rt   r  r  r  s    rE   test_col2im_2x3z&TestReferenceEvaluator.test_col2im_2x3f  +    \Aq6aQRV 	  	
rL   c           	     >    | j                  dddg dddgddg       y )N   r
  r  ri  rt   r  r  r  s    rE   test_col2im_2x3_padsz+TestReferenceEvaluator.test_col2im_2x3_padsl  r  rL   c                |   t        j                  ddgt         j                        }d|d   d<   t        j                  ddg      dt        j                  ddg      t        j                  g d	      t        j                  ddg      f\  }}}}}t	        ||||||      }t        ||||||      }t        ||       y )
Nr   r  ru   r(  r   r   r  rt   ri  )r|   r   r   r}   r3   r4   r   )	r   r   r  r   r   r   r  r1r2s	            rE   test_col2im_2dz%TestReferenceEvaluator.test_col2im_2dr  s    xxBrzz2Q
HHaVHHaVHH\"HHaV>
:\9dF -+|Yf
 )+|Yf
 	BrL   c                   t        dt        j                  g d      }t        dt        j                  g d      }t        dt        j                  dg      }t        dt        j                  g d      }t        dg d	dgdd
d
gddgg dd
d
g      }t	        |gd|||g|g      }t        |t        dd      g      }t        j                  d      j                  d      j                  t        j                        t        j                  g dg dg dggg dg dg dggg dg dg dggg dg dg dgggt        j                        t        j                  g d t        j                        d	}d!|d   d d  |d   }|d   }|d   }t        j                  d|j                        }t        |j                   d!         D ]v  }	t        d      D ]f  }
||	|	d
z   |
|
d
z   f   }||
   }t#        |d"d
d
gg dd
d
g      }t        j$                  ||j'                               }|||
   z   }|||	|
d d d d f<   h x t)        |      }|j+                  d |      }t-        ||d!   d#$       y )%Nr   )rs   r   r   r   rg  )r   rt   r   r   r   r   r   r5   rh  rt   r   ri  groupr   r   r   r   ra  rc   rj  r   i   )g    ޚg   ]?g    ~n)g   `cKg   @A?g   ,?)g   $w?g   ʩ?g   @)g   ug    ?g   )g    ?g    ?g   )g   
?g   
g   @V?)g    ?g   Jg     )g   ¿g   i_g   ?)g    c?g   ?g   r)g    sg   g    N{)g   @ʲ?g   m?g    @?)g   X?g    Ug   `Ζru   )g   @[¿g   &g   (g   `䠾r   r  h㈵>atol)r$   r   r   r   r   r   r    r|   r.  r   r/  r   r}   r   rv   r~   r_   r   matmulr-  r)   r   r   )r   r   rg  r   r   rK  r   rl   r  r   ra  r   r|  c2mulref1got1s                    rE   test_conv_im2col_group4z.TestReferenceEvaluator.test_conv_im2col_group4  s   "3(9(9<H"3(9(9<H"3(9(9A3?"3(9(9<HE!fQF	
 D63Aq	A37l2r6J5KL
 =)11,?FFrzzR

*

*

*

uM\ jj_Pb  jjg\
z c
1 #J#J#JHH\1qwwqz" 	$A1X $a!a%iQU*+aDAv1v|aVDiiAIIK0AaDj #!Q1*$	$ "*-xxe$47.rL   c                t   t        dt        j                  g d      }t        dt        j                  g d      }t        dt        j                  dg      }t        dt        j                  g d      }t        d	g d
dgdddgddgg dddg      }t	        |gd|||g|g      }t        |t        dd      g      }t        j                  d      j                  d      j                  t        j                        dz   t        j                  dt        j                        t        j                  dt        j                        d
}d|d   d<   t        |      }	|	j                  d |      }
t        j                  g dg dg dgg dg dg dgggt        j                        }t!        ||
d          y )Nr   rt   r   r   r   rg  rs   r   r   r   r   rs   r   rf  r5   rh  rt   r   ri  r  ra  rc   rj  r   l   ru   rs   )r   r   r   rt   )r>  r>  r>  )r  r  r  )r  r  r  r   )r$   r   r   r   r   r   r    r|   r.  r   r/  r   r   r)   r   r}   r   r   r   rg  r   r   rK  r   rl   r  r  r   r   s               rE   test_conv_stridesz(TestReferenceEvaluator.test_conv_strides
  s   "3(9(9<H"3(9(9<H"3(9(9A3?"3(9(9;STE!fQF	
 D63Aq	A37l2r6J5KL
 =)11,?FFrzzRUVV,bjj9$bjj1

 "#c
:!*-xxe$88 %&68JK$oG **
 	$q'*rL   c           	     L   t        dt        j                  g d      }t        dt        j                  g d      }t        ddgdgddgg dddg      }t	        |gd	|g|g      }t        |t        d
d      g      }dt        j                  d      d d d   j                  d      j                  t        j                        i}t        j                  g dg dg dg dgggt        j                        }t        |      }|j                  d |      }	t        ||	d          y )Nr   rf  r   MaxPoolr   ri  rs   r   r   r   ra  rc   rj  r   1   r   r  )g      H@g     G@g     F@g     E@)g     D@g      D@g      C@g      B@)g      ;@g      :@r  r  )r  r        $@r  ru   r   r$   r   r   r   r   r   r    r|   r.  r   r/  r   r}   r)   r   r   
r   r   r   rK  r   rl   r  r   r  r   s
             rE   test_max_pool_2d_1z)TestReferenceEvaluator.test_max_pool_2d_12  s   "3(9(9;ST"3(9(9;STEEQF
 D63aS1l2r6J5KL
biimDbD)11,?FFrzzRS88 100/		 **
 "*-xxe$$q'*rL   c                6   t        dt        j                  g d      }t        dt        j                  g d      }t        ddgdgddgg dddg      }t	        |gd	|g|g      }t        |t        d
d      g      }dt        j                  g dg dg dg dg dg dg dgggt        j                        i}t        j                  g dg dg dg dgggt        j                        }t        |      }|j                  d |      }	t        ||	d          y )Nr   rf  r   r*  r   ri  rs   r+  ra  rc   rj  r   )i  if  i  iB  i  i     )i  i  i  r      r  iF  )iB  B   i  ix  iT  i  i  )o   i  is  iL  i  iJ  i  )i  4   i  Q   i'  i;  ih  )  i>  r7  i  i  i  i  )i|  i  K   iA  r8  i  i  ru   )g     X@g     @     @r:  )g     8@g     x@g     @     P@)     `@g     @r;  r;  )r<  g     @r<  g      @r   )r$   r   r   r   r   r   r    r|   r}   r   r)   r   r   r/  s
             rE   test_max_pool_2d_2z)TestReferenceEvaluator.test_max_pool_2d_2S  s)   "3(9(9;ST"3(9(9;STEEQF
 D63aS1l2r6J5KL
  @=>?=>>
 jj
$ 88 5444		 **
 "*-xxe$$q'*rL   c                   t        dt        j                  d d g      }t        dt        j                  d d g      }t        dt        j                  d d g      }t        dt        j                  d d g      }t	        dg ddgdd	      }t        |gd
|||g|g      }t        |t        dd      g      }t        j                  g dgt        j                        t        j                  ddgg      t        j                  ddggt        j                        d}t        |      }	|	j                  d |      }
t        j                  g dgt        j                        }t        ||
d          y )Nr   r  Ur   ScatterElementsr   r  r?  rt   r   r,  	reductionra  rc   rj  r   )r(  r)  r*  r+  r,  ru   皙?g @)r(  rD  r*  r+  r,  r   r$   r   r   r;  r   r   r   r    r|   r}   r   r)   r   r   r   r   Indr?  r   rK  r   rl   r  r  r   r   s               rE   test_scatter_elementsz,TestReferenceEvaluator.test_scatter_elements  s8   "3(9(9D$<H$S+*;*;dD\J"3(9(9D$<H"3(9(9D$<HE
 D63CaS9l2r6J5KL
45RZZHAq6(#C:,bjj9
 "*-xxe$8867rzzJ$q'*rL   c                   t        dt        j                  d d g      }t        dt        j                  d d g      }t        dt        j                  d g      }t        dt        j                  d d g      }t	        dg ddg      }t        |gd|||g|g      }t        |t        dd	      g
      }t        j                  ddggt        j                        t        j                  ddgg      t        j                  dgt        j                        d}t        |      }	|	j                  d |      }
t        j                  ddggt        j                        }t        ||
d          y )Nr   r  r?  r   	ScatterNDrA  ra  rc   rj  r   r(  r)  ru   r   r*  rE  rF  s               rE   test_scatterndz%TestReferenceEvaluator.test_scatternd  s0   "3(9(9D$<H$S+*;*;dD\J"3(9(9D6B"3(9(9D$<HE

 D63CaS9l2r6J5KL
C:,bjj9Aq6(#3%rzz2
 "*-xxe$88c3ZL

;$q'*rL   c                   	 dd	 dfd	}t        dt        j                  g d      }t        dt        j                  d g      }t        dt        j                  d g      }t        dt        j                  g d	      }t	        d
g ddgg d      }t        |gd|||g|g      }t        |t        dd      g      }t        j                  d      j                  t        j                        j                  d      t        j                  ddg      t        j                  ddg      d}	t        |      }
|
j                  d |	      } ||	d   dddg d      }t!        ||d          y )Nrt   c                n   | \  }}}}~||d   z   |d   z   |z
  |z  dk(  sJ ||d   z   |d   z   |z
  |z  dk(  sJ ||d   z   |d   z   |z
  |z  dz   }	||d   z   |d   z   |z
  |z  dz   }
t        j                  t        j                  |      |      }t        j                  ||      }|t        j                  t        j                  |	      |
      z  }t        j                  t        j                  |      ||z        }|t        j                  t        j                  |
      |	      z  }|j	                  dd      |j	                  dd      z   }|j	                  dd      |j	                  dd      z   }t        j                  t        j                  |      ||z        j	                  dd      }|||fS )Nr   rs   rt   r   r   )r|   repeatr.  tiler   )x_shapefield_heightfield_widthr  r  Nrm  Hrg  
out_height	out_widthi0i1j0j1r   r   ks                     rE   get_im2col_indiceszCTestReferenceEvaluator.test_col2im_impl.<locals>.get_im2col_indices  s    !JAq!Q
NWQZ/,>&HAMMM
NWQZ/,>&HAMMMgaj.71:5DORSSJWQZ'!*4{BvMPQQI299\2K@BQB"))BIIj$99EEB;/1ABB"''"))I"6
CCB

2q!BJJq"$55A

2q!BJJq"$55A		"))A,{(BCKKBPQRAq!9rL   c                   |\  }}}}	||d   z   |d   z   |	|d   z   |d   z   }}
t        j                  |||
|f| j                        } |||||      \  }}}| j                  ||z  |z  d|      }|j	                  ddd      }t         j
                  j                  |t        d       |||f|       |j                         }|d   dk(  r|dxx   |j                  d   z  cc<   n|d   dkD  r|dxx   dz  cc<   |d   dk(  r|dxx   |j                  d   z  cc<   n|d   dkD  r|dxx   dz  cc<   |d d d d |d   |d   |d   |d   f   }|S )Nr   rs   rt   r   ru   r   )
r|   r   rv   r   	transposeaddatslicecopyr_   )colsrP  rQ  rR  r  r  rS  rm  rT  rg  H_paddedW_paddedx_paddedr[  r   r   cols_reshapedr   r\  s                     rE   col2im_indicesz?TestReferenceEvaluator.test_col2im_impl.<locals>.col2im_indices  s    !JAq!QGAJ+GAJ+ H xxAx :$**MH({GVGAq! !LL\)9K)GQOM)33Aq!<MFFIIhtaA 6FllnGqzQ
hnnQ//
a
b 
qzQ
hnnQ//
a
b 
1agaj!8'!*wqz:QQRCJrL   r   r  r  r  r   rf  r  )r   r  r  )r   rt   r   rt   )r   ra  rc   rj  r   r9  )rt   r   r  r   rt   rt   r   r   )rQ  rR  r  r   r  )r   r   Nrt   )r$   r   r   r;  r   r   r   r    r|   r.  r/  r   r   r}   r)   r   r   )r   rh  r   r  r  r   rK  r   rl   r  r  r   r   r\  s                @rE   test_col2im_implz'TestReferenceEvaluator.test_col2im_impl  sH   EF	0 PQ	8 #3(9(9;MN#D+*;*;dVD#D+*;*;dVD"3(9(9;ST#4se,OD63BaS9l2r6J5KL
6"))"**5==jI((Aq6"((Aq6"
 "*-xxe$!#J 
 	$q'*rL   c                   t        dt        j                  g d      }t        dt        j                  g d      }t        dt        j                  d g      }t        dt        j                  g d      }t        dg ddgddgd	d	gd
d
gg dddg      }t	        |gd|||g|g      }t        |t        dd      g      }t        j                  d      j                  d      j                  t        j                        t        j                  d      j                  d      j                  t        j                        t        j                  g dt        j                        d}t        |      }	|	j                  d |      }
t        j                  g dg dg dg dg dgggt        j                        }t        ||
d
          |dxx   d
z  cc<   d|d   d<   t        |      }	|	j                  d |      }
t        j                  g dg dg dg dg dgggt        j                        }t        ||
d
          y )Nr   rf  rg  r   r   ConvTransposerh  rt   r   r   ri  )r   r   output_paddingr   r   ra  rc   rj  r   r)  )rt   r   r   r      )r   rt   r   r   r  ru   )i  i  i  iA  )id  i.  id/  i!  )i   i3  i4  i$  )il$  i8  i\:  i(  )i  i+  i,  i#  )r   r   r   r   )r      r   r   r.  r'  s               rE   test_conv_transpose_2dz-TestReferenceEvaluator.test_conv_transpose_2d	  s   "3(9(9;ST"3(9(9;ST"3(9(9D6B"3(9(9;STE!fQq6F	
 D63Aq	A37l2r6J5KL
=)11,?FFrzzR=)11,?FFrzzR,bjj9
 "*-xxe$88 12232
 **
 	$q'*c
a
!"c
:!*-xxe$88 %$$$$
 **
 	$q'*rL   c           
        t        dt        j                  g d      }t        dt        j                  g d      }t        dt        j                  d g      }t        dt        j                  g d      }t        dg ddgdd	d	g
      }t	        |gd|||g|g      }t        |t        dd      g      }t        j                  d      j                  d      j                  t        j                        t        j                  d      j                  d      j                  t        j                        t        j                  g dt        j                        d}t        j                  g dg dg dg dg dg dgg dg dg dg dg dg d gggt        j                        }	t        |      }
|
j                  d |      }t        |	|d!          y )"Nr   rf  rg  r   r   rl  rh  
SAME_UPPERrs   )auto_padr   ra  rc   rj  r   rm  rl  rP  )rt   rs   r   r   r  ru   )r   r   r   rt   rs   rs   )r   r   r   r   r   ro  )r   r   r  r   r     )rm  r  rn  rj  #      )rP  rn  r)  ru  L   r  )rP     3   r  r      )r   r   rm  r      rv  )r   r   r  r8  &      )rn     T   r     R   )$   r  Z   r6  t   A   )c   r%  r3  r  i$     )H   N   r  [      h   r   r.  )r   r   rg  r   r   rK  r   rl   r  r   r  r   s               rE   test_conv_transpose_2d_upperz3TestReferenceEvaluator.test_conv_transpose_2d_upperI	  s   "3(9(9;ST"3(9(9;ST"3(9(9D6B"3(9(9;STE!F
 D63Aq	A37l2r6J5KL
=)11,?FFrzzR=)11,?FFrzzR,bjj9
 88 ++./00 ..1153( **+
8 "*-xxe$$q'*rL   z1.21.5z+op_dft and op_stft requires numpy >= 1.21.5c                   t        dt        j                  g d      }t        dt        j                  d g      }t        dt        j                  d g      }t        dt        j                  g d      }t	        dg ddg      }t        |gd	|||g|g      }t        |t        d
d      g      }t        j                  d      j                  d      j                  t        j                        t        j                  dt        j                        t        j                  dt        j                        d}|d   }t        |d         }t        |d         }|dz  dz   }	|d   j                   d   |z
  |z  dz   }
t        j"                  d|
|	dgt        j                        }t%        |
      D ]m  }||z  }||z  |z   }t        j&                  j'                  |d||df         }|d|	 }t        j(                  |j*                  |j,                  fd      |d|f<   o t/        |      }|j1                  d |      }t3        ||d          y )Nsignalr  
frame_stepframe_lengthr   rf  STFT)r  r  rc   r  ra  rc      r   r  rt   r  rt   ro  ru   rj  )r  r  r  rs   rt   r   r,  )r$   r   r   r;  r   r   r   r    r|   r.  r   r/  r   r}   r<  r\   r_   r   r~   fftstackrealimagr)   r   r   )r   r  r  r  r   rK  r   rl   r  onesided_lengthnstftsr   r   startstopcomplex_outc_outr  r   s                      rE   	test_stftz TestReferenceEvaluator.test_stft	  s   
 (+2C2CEWX+L+:K:KdVT
-nk>O>ORVQWX"3(9(9;ST8E

 D63\(JQCPl2r6J5KL
iin,,[9@@L((1BHH5HHRrxx8
 x501|,-
'1,1?((+l:zIQN88Q;2::Nv 	HA
NEz>L0D&&**VAuTz1,<%=>K/2EXXuzz5::&>QGHQTN	H& "*-xxe$$q'*rL   c                   t        dt        j                  g d      }t        dt        j                  d g      }t        dt        j                  d g      }t        dt        j                  d g      }t        dt        j                  g d      }t	        dg d	dg      }t        |gd
||||g|g      }t        |t        dd      g      }t        j                  d      j                  d      j                  t        j                        t        j                  dt        j                        ddt        j                  dt        j                   z  t        j                  dddt        j                        z  dz        z  z   t        j                  dt        j                        d	}	|	d   }t#        |	d         }|	d   }t#        |	d         }|dz  dz   }
d|j$                  d   |j$                  d   z
  dz  z   }t        j&                  d||
dgt        j                        }t)        |      D ]s  }||z  }||z  |z   }t        j*                  j+                  |d||df   |z        d|
 }|d|
 }t        j,                  |j.                  |j0                  fd      |d|f<   u t3        |      }|j5                  d |	      }t7        ||d          y )Nr  r  r  windowr  r   rf  r  )r  r  r  r  ra  rc   r  r   r  r  ro  ru   r  rs   r   rj  rt   r  )r$   r   r   r;  r   r   r   r    r|   r.  r   r/  r   r}   r<  cospir\   r_   r   r~   r  r  r  r  r)   r   r   )r   r  r  r  r  r   rK  r   rl   r  r  r  r   r   r  r  r  r  r  r   s                       rE   test_stft_with_windowz,TestReferenceEvaluator.test_stft_with_window	  s   
 (+2C2CEWX+L+:K:KdVT
'+2C2CdVL-nk>O>ORVQWX"3(9(9;ST>E

 D63V\(RUVTWXl2r6J5KL
iin,,[9@@L((1BHH5BFF1ruu9ryyB'LLrQRRSHHRrxx8
 x501x|,-
'1,1fll1oQ7A==88Q;2::Nv 	HA
NEz>L0D&&**VAuTz1,<%=%FG/K  /2EXXuzz5::&>QGHQTN	H& "*-xxe$$q'*rL   c                l   t        dt        j                  g d      }t        dt        j                  d d g      }t        dt        j                  g d      }t        dt        j                  d g      }t	        dg ddgddd	d
d|	      }t        |gd|||g|g      }t        |t        dd      g      S )Nr   rf  roisr   r  RoiAlignr   r  r  r   rs   r(  output_half_pixel)output_heightoutput_widthsampling_ratiospatial_scalecoordinate_transformation_modemodera  rc   r  r   )r$   r   r   r;  r   r   r   r    )r   r  r   r  r   r  rK  r   s           rE   get_roi_align_modelz*TestReferenceEvaluator.get_roi_align_model	  s    "3(9(9;ST%fk.?.?$N"3(9(9;ST#C):):TFCE+>

 D63D"s;%eLR<P;QRRrL   c                    | j                  |      }t               \  }}}|||d}t        |      }|y |j                  d |      }t	        |      }	|	j                  d |      }
t        |d   |
d   d       y )Nr  r   r  r  )r  r   rp   r   r)   r   )r   r  rl   r   batch_indicesr  r  r   r   r  r  s              rE   common_test_roi_alignz,TestReferenceEvaluator.common_test_roi_align 
  s}    --d3
!;!==$M: ,<88D%( ,ggdE"SV$7rL   c                    | j                  d      5  | j                  d       d d d        | j                  d      5  | j                  d       d d d        y # 1 sw Y   6xY w# 1 sw Y   y xY w)Navgr  r   )r  r  r  s    rE   test_roi_alignz%TestReferenceEvaluator.test_roi_align
  sk    \\u\% 	.&&u-	. \\u\% 	.&&u-	. 	.	. 	.	. 	.s   AA&A#&A/c                    dd l }ddlm} | j                  |      }t	        |      }t               \  }}}|j                  d |||d      }	 |ddd      }
 |
|j                  |      |j                  |      g      }t        ||	d   d	       y )
Nr   )RoIAlignr  r  r(  rs   )r  r  r  r  )	rO   torchvision.opsr  r  r)   r   r   r  r   )r   r  rO   r  rl   r   r   r  r  r  r   r   s               rE   common_test_roi_align_torchz2TestReferenceEvaluator.common_test_roi_align_torch
  s    ,--d3
!*-!;!==$hht1dGHV3qAU%%a(5+;+;D+A*BC#a&t4rL   c                t    | j                  d      5  | j                  d       d d d        y # 1 sw Y   y xY w)Nr  r  )r  r  r  s    rE   test_roi_align_torchz+TestReferenceEvaluator.test_roi_align_torch!
  s5     \\u\% 	4,,U3	4 	4 	4s   .7c           	        t        dt        j                  d g      }t        dt        j                  d g      }t        dt        j                  d g      }t        dt        j                  d g      }t        dt        j                  d g      }t        ddgg dd	      }t	        |gd
|g||||g      }t        |t        dd      g      }dt        j                  d      j                  t        j                        i}	t        j                  g dt        j                        t        j                  g dt        j                        t        j                  g dt        j                        t        j                  dgt        j                        g}
t        |      }|j                  d |	      }t        d      D ]  }t        |
|   ||           y Nr   r  r  Y3Y4Splitr  r  r  r  r   )num_outputsra  rc   rP  r   r   r   rt   rs   ru   r*  )r   r   ro  rm  r$   r   r   r   r   r   r    r|   r.  r/  r   r}   r)   r   r~   r   r   r   r  r  r  r  rK  r   rl   r  r   r  r   r   s                 rE   
test_splitz!TestReferenceEvaluator.test_split*
  sk   "3(9(9D6B#D+*;*;dVD#D+*;*;dVD#D+*;*;dVD#D+*;*;dVD3%)AqQD63b"b"-=>l2r6J5KL
biim**2::67 HHYbjj1HHYbjj1HHYbjj1HHaS

+	
 "*-xxe$q 	2AHQKa1	2rL   c           	        t        dt        j                  d g      }t        dt        j                  d g      }t        dt        j                  d g      }t        dt        j                  d g      }t        dt        j                  d g      }t        dddgg d      }t	        |gd	|g||||g      }t        |t        d
d      g      }t        j                  d      j                  t        j                        t        j                  g dt        j                        d}	t        j                  g dt        j                        t        j                  g dt        j                        t        j                  ddgt        j                        t        j                  ddgt        j                        g}
t        |      }|j                  d |	      }t        d      D ]  }t!        |
|   ||           y )Nr   r  r  r  r  r  splitr  ra  rc   rP  r   r   )r   r   rs   rs   ru   )r   r  r  r*  r   r   ro  rm  r   )r$   r   r   r   r   r   r    r|   r.  r/  r   r}   r<  r)   r   r~   r   r  s                 rE   test_split_2z#TestReferenceEvaluator.test_split_2B
  s   "3(9(9D6B#D+*;*;dVD#D+*;*;dVD#D+*;*;dVD#D+*;*;dVD3.2JKD63b"b"-=>l2r6J5KL
2%%bjj1XXl"((;
 HHYbjj1HHYbjj1HHaV2::.HHaV2::.	
 "*-xxe$q 	2AHQKa1	2rL   c           	        t        dt        j                  d g      }t        dt        j                  d g      }t        dt        j                  d g      }t        dt        j                  d g      }t        dt        j                  d g      }t        ddgg dd	      }t	        |gd
|g||||g      }t        |t        dd      g      }dt        j                  d      j                  t        j                        i}	t        j                  g dt        j                        t        j                  g dt        j                        t        j                  g dt        j                        t        j                  dgt        j                        g}
t        |      }|j                  d |	      }t        d      D ]  }t        |
|   ||           dt        j                  d      j                  t        j                        i}	t        j                  g dt        j                        t        j                  g dt        j                        t        j                  g dt        j                        t        j                  g t        j                        g}
t        |      }|j                  d |	      }t        d      D ]  }t        |
|   ||           y r  r  r  s                 rE   test_split_num_outputs_4z/TestReferenceEvaluator.test_split_num_outputs_4]
  s   "3(9(9D6B#D+*;*;dVD#D+*;*;dVD#D+*;*;dVD#D+*;*;dVD3%)AqQD63b"b"-=>l2r6J5KL
 biim**2::67HHYbjj1HHYbjj1HHYbjj1HHaS

+	
 "*-xxe$q 	2AHQKa1	2 biil))"**56HHYbjj1HHYbjj1HHYbjj1HHRrzz*	
 "*-xxe$q 	2AHQKa1	2rL   c                x   t        dt        j                  d d g      }t        dt        j                  d g      }t	        ddgdgd      }t        |gd|g|g      }t        |t        dd      g	      }dt        j                  d
      j                  d      j                  t        j                        i}t        |      }|j                  d |      }t        j                  g dt        j                         j                  d      }	| j#                  |	j%                         |d   j%                                y )Nr   r   ArgMinrt   r  ra  rc   rP  r   r  r   r   )r   r   r   ru   r   rt   r   r$   r   r   r;  r   r   r   r    r|   r.  r   r/  r   r)   r   r}   r<  r   tolist
r   r   r   rK  r   rl   r  r  r   r   s
             rE   test_argminz"TestReferenceEvaluator.test_argmin
      "3(9(9D$<H"3(9(9D6BC53%a8D63aS1l2r6J5KL
biim++F3::2::FG!*-xxe$88IRXX6>>wG*DGNN,<=rL   c                x   t        dt        j                  d d g      }t        dt        j                  d g      }t	        ddgdgd      }t        |gd|g|g      }t        |t        dd      g	      }dt        j                  d
      j                  d      j                  t        j                        i}t        |      }|j                  d |      }t        j                  g dt        j                         j                  d      }	| j#                  |	j%                         |d   j%                                y )Nr   r   ArgMaxrt   r  ra  rc   rP  r   r  r  r   r   r   ru   r  r   r  r  s
             rE   test_argmaxz"TestReferenceEvaluator.test_argmax
  r  rL   c                   t        dt        j                  d d g      }t        dt        j                  d g      }t        dt        j                  d g      }t        dt        j                  d g      }t        dt        j                  d g      }t	        dg ddg      t	        d	ddgdg      g}t        |d
||||g|g      }t        |t        dd      g      }t        j                  dggt        j                        t        j                  dgt        j                        t        j                  dgt        j                        t        j                  dgt        j                        d}	t        |      }
|
j                  d |	      }t        j                  dgt        j                        }| j                  |j                         |d   j                                y )Nr   startsendsr&  r   r  )r   r  r  r&  TSqueezera  rc   rP  r   r   ru   rt   r$   r   r   r;  r   r   r   r    r|   r}   r<  r)   r   r   r  )r   r   r  r  r&  r   r  r   rl   r  r  r   r   s                rE   test_slice_squeezez)TestReferenceEvaluator.test_slice_squeeze
  sz   "3(9(9D$<H'+2C2CdVL%fk.?.?$H%fk.?.?$H"3(9(9D6Bg>Fi#v6
 5#64'>Dl2r6J5KL
A3%rxx0hhs"((3HHaS1HHaS1	
 "*-xxe$88QCrxx0*DGNN,<=rL   c                P   t        dt        j                  d d g      }t        dt        j                  d g      }t	        ddgdgdgdgdg      t	        ddgdgdg	      g}t        |d
|g|g      }t        |t        dd      g      }dt        j                  dggt        j                        i}t        |      }|j                  d |      }t        j                  dgt        j                        }	| j                  |	j                         |d   j                                y )Nr   r   r  r  r   rt   )r&  r  r  r  )r&  ra  rc   r   r   ru   r  )
r   r   r   r  r   rl   r  r  r   r   s
             rE   test_slice_squeeze_6z+TestReferenceEvaluator.test_slice_squeeze_6
  s   "3(9(9D$<H"3(9(9D6Bguse1#qcLi#QC8
 5#sQC0l2q6I5JK
bhhuBHH56!*-xxe$88QCrxx0*DGNN,<=rL   c                   t        dt        j                  d d g      }t        dt        j                  d d g      }t        ddgdg      }t	        |gd|g|g      }t        |t        dd      g      }t        |       t        |      }|j                  d   }| j                  |j                  j                  d	       |j                  d dt        j                  d
t        j                         i      d   }| j                  |j"                  d       | j                  |d   d       t        |t        dd      g      }t        |       t        |      }|j                  d   }| j                  |j                  j                  d       |j                  d dt        j                  d
t        j                         i      d   }| j                  |j"                  d       | j                  |d   d       y )Nr   r   
ReduceMeanra  rc   r  r   r   ReduceMean_1rA  ru   r  r   r   rt   rP  ReduceMean_18)r$   r   r   r   r   r   r    r   r)   r  r   r  r  r   r|   onesr   r_   )	r   r   r   r   r   rl   r   clsr  s	            rE   test_onnxrt_reduce_meanz.TestReferenceEvaluator.test_onnxrt_reduce_mean
  s   "3(9(9D$<H"3(9(9D$<H,u5E7C!qc2l2r6J5KL
J!*-nnQ//@hhtc2776#DEFqIF+TA&l2r6J5KL
J!*-nnQ//Ahhtc2776#DEFqIF+TA&rL   r4  c                   g }t        dt        j                  d dg      t        dt        j                  d g      g}t        dt        j                  d d g      t        dt        j                  d g      g}| dk\  rT|j                  t	        t        j                  dgt
        j                        d	
             t        |dd	gdgdd      }nt        |dgdgddgd      }t        ddgdgd
      t        dddgdgd
      |t        ddgdgd
      g}t        |d|||      }g }g d}|j                  t	        t        j                  |t
        j                        j                  d      d
             |j                  t	        t        j                  dgt
        j                        d
             t        dt        j                  d dg      g}t        dt        j                  d dg      t        dt        j                  d dg      g}t        dddgd d!gd"|d#      t        d$d!gd%gd&ddg'      t        d(d%gd)gd*
      t        d+d)dgddgd,dd-      g}t        |d.|||      }t        |t        d/|       g0      }	|	S )1Nnext_inr   nextnext_outscan_outrP  rt   ru   axis_redr   cdistdf_17_C0cdistdf_17_reduced0cdistdf_17_ReduceSumSquarer   )r]   r'  )r]   r&  r'  r  cdistd_17_IdentitySubcdistdf_17_Subcdistdf_17_IdentityOnnxIdentity)Pg   @:?g   g   g    ?g   `?g   9?g   `Ƕٿg   Jg    Og   3?g   h	ܿg    sg   g   @`6?g   dg    Lg   ?g   @_ÿg   @Eg   g?g   lg   пg   q?g    v?g   C?g   3?g   `~?g   @Q?g   ˄g   ڞg   @׿g   `Kg    g    ?g   g    zӿg   @E?g   Xӿg   <?g   `ؿg    u(@g    ǿg    Eg    m?g   g    ?g   @?g   T?g   ?g   Tg   @Bʿg    M	?g    9?g   `Y@g    -?g   `Q?g   E?g   &7׿g    [?g   ]Lg    Xg    i?g   g   `ۜg   g   ?g   ;˿g   g   kZ?g   Z?g    &?g   `Ah?g    lg   @D?g    ?G?g    p?g   hg   @>?g   Wg   `1Dֿ)rv  r   
Sc_Scancstrs   
To_TopKcstr  valuesindicesScanUU032UUUU033UUSc_Scan)r]   r$  num_scan_inputs	TransposeTr_transposed0Tr_Transpose)r]   permSqrtSq_Y0Sq_SqrtTopKTo_TopK)r]   largestsorteddummyrc   r   )r$   r   r   rI  r(   r|   r}   r<  r   r   r   r   r;  r   r    )
ro   	reduce_opinitializersr   r  node_reducer  r   
list_valuerl   s
             rE   _cdist_modelz#TestReferenceEvaluator._cdist_model
  s     #9k.?.?$K"6;+<+<tfE
 #:{/@/@4,O":{/@/@4&I

 B;288QCrxx8zJ $ *-&'1K $ !&'1SK j9+
|BVW	6*_,=DT &'*	
 5.&'<P Q

d 	2::6>>wG!	
 	rxx2884<H	
 )+2C2CdAYOP"8[->->q	J"9k.?.?$K
 ,'I& ! !"#V f/07))L,'9%#
6 5'67LI  l2u6M5NO
rL   r  g]l,@g.s,&2@ru   rs   r  r   r   ReduceL1gQ@gK-J3@g%s}N@gZOc10@rP  r   r8  ReduceL2g&?gq#i?giE@g=@r   ReduceLogSumgd?gUU?g(?gQOIR?ReduceLogSumExpg?g?g9z%4~@g	Y;@	ReduceMaxgS?gsn`{?go@g@r  gύ]`?gJ?g%s}N @gZOc10@gNs	@ghi
@gXE!@gHg`y#@
ReduceProdr  c                   |\  }}t        j                  d      j                  d      j                  t         j                        }i }| j                  ||      }t        |      }|j                  d d|i      }	|	|d|f<   |j                  d   j                  j                  D 
cg c])  }
|
j                  j                  j                  |      r|
+ }}
|d   j                  }t        ||d   j                  fd|i      }t        ||g      }|j                  d d|i      }	|	|d|f<   d	}|j                         D ]  \  }}t!        t#        |      t#        |            D ]  \  }}|j$                  |j$                  k7  r/t'        d
|d| d|j$                   d| d|j$                   d      t        j(                  ||z
        j+                         }|dkD  szt'        d| d|d| d| d| d|         y c c}
w )Nro  )r   r   r  r  r   	op_schemar  ref_clconstantzShape mismatch for z, :z != rr   gư>zDiscrepancies (max=z) for r  r  )r|   r.  r   r/  r   r  r)   r   r  r$  r  r  r  _schemary   itemszipreversedr_   r   r  r   )r   reduce_op_expectedro   r  r   r   resultsmodelr   r  r   clschemanew_clbaseliner[  vr   r   diffs                       rE   test_op_reducez%TestReferenceEvaluator.test_op_reduce  s   @ 1	8IIaL  )00<!!%3!%(hhtgq\* #u ^^A&++55
{{##..y9 
 

 Ai"Q%//!3k65JK!%&:hhtgq\*#&% MMO 
	DAqHX.< 	177agg%(-i]"XJayPTUVTWWXYZY`Y`Xaabc  vva!e}((*$;(-dV6)b
RVWXVYY[\][^^defdgh 	
	
s   &.G<)r8  )r  )rP  c                   t        dt        j                  g d      }t        dt        j                  g d      }t        ddgdg      g}t	        |d|g|g      }t
        j                  j                  dddd      j                  t
        j                        }t        |t        d|      g	      }t        |      }	|	j                  d d|i      d
   }
t        |t        d|      g	      }t        |      }|j                  d d|i      d
   }| j                  |j                  |
j                         t!        ||
       y )Nr   rf  r   MeanVarianceNormalizationra  r   rt   rc   r   r   )r$   r   r   r   r   r|   randomrandr/  r   r   r    r)   r   r   r_   r   )r   ro   	ref_opsetr   r   r  r   r   rl   r  r  ref_onnx_modelref_expectedr   s                 rE   test_mvnzTestReferenceEvaluator.test_mvn  s    #3(9(9;ST"3(9(9;ST1C53%@
 5#sQC0IINN1aA&--bjj9l2u6M5NO
 ,ggdS!H%a(#E,r9:U9VW).9##D3(3A63#&rL   c                   d } |       }t        j                  ddgddggt         j                        }t        j                  ddggt         j                        }t        j                  d	d
ggt         j                        }t        j                  |||g      }t	        |      }|||d}|j                  d |      }	t        ||	d          y )Nc                    g } g }g }g }t               dd}g }t        dddgdgdd	      }|j                  |       |j                         D cg c]  \  }}t	        ||dn|       }	}}t        d
dddgdg||	      }
|j                  |
       |j                  t        dt        j                  g              |j                  t        dt        j                  g              |j                  t        dt        j                  g              |j                  t        dt        j                  g              t        dddgdgdd
	      }| j                  |       t        dddgdgdd
	      }| j                  |       |j                         D cg c]  \  }}t	        ||dn|       }}}t        | d||      }t        |||      }|S c c}}w c c}}w )Nrt   )rc   custom_domainConcatzx:0zx:1r__0r   rc   )r,  rg   r9  concat_2I__0I__1I__2r__4r__3numpyxrC  )r   r   rI  r!  r    r   r$   r   DOUBLEr   r   )r  r   r  rD  r   	nodes_fctrK  rg   rh   opset_imports_fctr  r   r   rl   s                 rE   create_modelzFTestReferenceEvaluator.test_concat_in_a_function.<locals>.create_model3  s   EFGI,.CFIXu~xaPRSDT" (.||~!#FG V'/QwG! !  !C S!MM09K9KRPQMM09K9KRPQMM09K9KRPQNN1&+:L:LbQRVV,vhQD LLVV,vhQD LL (.||~#FG V'/QwGM 
 uh@E#]iJ K!6s   GGr   r   r  r   ru   rt   rs   r   )r?  r=  r>  r   )r|   r}   float64vstackr)   r   r   )
r   rF  rl   x1x2x3r   r  r  r  s
             rE   test_concat_in_a_functionz0TestReferenceEvaluator.test_concat_in_a_function2  s    0	d "^
XXAwQ(

;XX1vhbjj1XXBxj

3IIr2rl# ,R4ggdE"3q6"rL   c           
     <   t        dt        j                  d g      }t        dt        j                  d g      }t	        t        t        ddgdgt        j                        gd|g|g            }t        |      }t        j                  dddt        j                  g      }|j                  d d|i      d	   }| j                  |t        j                  dddt        j                  g      j                  t        j                        k(  j                                y )
Nr   r   Castr[  ra  Clp?Q}>ʈÿr>  r   )r$   r   r   STRINGr   r   r   r)   r|   r}   nanr   
assertTruer/  str_allr   r   r   r&  r  r   r  s          rE   test_cast_float_to_stringz0TestReferenceEvaluator.test_cast_float_to_stringo  s    "3(9(9D6B"3(:(:TFCfsecU{7I7IJ 	
 !'xx9c266:;ggdS$K(+BHHh	3?@GGPPUUW	
rL   c                   t        dt        j                  d g      }t        dt        j                  d g      }t        t	        t        ddgdgt        j                        t        ddgdgt        j                        gd|g|g            }t        |      }t        j                  ddd	t        j                  g      }|j                  d d|i      d
   }t        |t        j                  ddd	t        j                  g             y )Nr   r   rO  r_  r[  ra  rP  rQ  r>  r   )r$   r   r   r   r   r   rR  r)   r|   r}   rS  r   r   rW  s          rE   "test_cast_float_to_string_and_backz9TestReferenceEvaluator.test_cast_float_to_string_and_back  s    "3(9(9D6B"3(9(9D6BfsecU{7I7IJfsecU{7H7HI 

 !'xx9c266:;ggdS$K(+RXXxC&HIJrL   c                   t        dt        j                  d       }t        dt        j                  d       }t        dt        j                  d       }t        dddgdgd      g}t        t        |d||g|g            }t        |      }t        j                  d      j                  d	      j                  t        j                        }t        j                  dt        j                  
      }|j!                  d ||d      }	t        j                  ddgddgddgggt        j                  
      t        j                  ddgddgddgggt        j                  
      t        j                  ddgddgddgggt        j                  
      gg}
| j#                  t%        |
d         t%        |	d                t'        |
d   |	d         D ]  \  }}t)        ||        y )Nr   r   r_  SplitToSequencers   r  ra  rP  rt   r   r   ru   rc  r>  r(  r  r  r  r  r)  r*  r  r  r  r  r+  r,  r-  r  r  r  r   r$   r   r   r;  	UNDEFINEDr   r   r   r)   r|   r.  r   r/  r   r}   r<  r   r   rz   r"  r   r   r   r   r_  r  r&  r  r   r  r  r   r   r   s                rE   test_split_to_sequencez-TestReferenceEvaluator.test_split_to_sequence  s   "3(9(94@"3(9(94@"3(=(=tD,sCj3%aHI:eS1a&1#>? 'yy}$$Y/66rzzB((1BHH-ggd$W56 C:SzD$<@ATC:SzD$<@ATC:d|dD\BC2::V
 	Xa[)3s1v;7SV, 	"DAqAq!	"rL   c                   t        dt        j                  d       }t        dt        j                  d       }t        dt        j                  d       }t        dddgdgd      g}t        t        |d||g|g            }t        |      }t        j                  d      j                  d	      j                  t        j                        }t        j                  g d
t        j                        }|j!                  d ||d      }	t        j                  ddgddgddgggt        j                        t        j                  ddgddgddgggt        j                        t        j                  ddgddgddgggt        j                        gg}
| j#                  t%        |
d         t%        |	d                t'        |
d   |	d         D ]  \  }}t)        ||        y ) Nr   r   r_  r\  rs   r  ra  rP  r]  rs   rs   rs   ru   rc  r>  r(  r  r  r  r  r)  r*  r  r  r  r  r+  r,  r-  r  r  r  r   r^  r`  s                rE   test_split_to_sequence_1dz0TestReferenceEvaluator.test_split_to_sequence_1d  s   "3(9(94@"3(9(94@"3(=(=tD,sCj3%aHI:eS1a&1#>? 'yy}$$Y/66rzzB((9BHH5ggd$W56 C:SzD$<@ATC:SzD$<@ATC:d|dD\BC2::V
 	Xa[)3s1v;7SV, 	"DAqAq!	"rL   c                   t        dt        j                  d       }t        dt        j                  d       }t	        ddgdgdd      g}t        t        |d|g|g            }t        |      }t        j                  d      j                  d	      j                  t        j                        }|j                  d d|i      }t        |j                  d         D cg c]  }|d d d d |f    c}g}	| j!                  t#        |	d         t#        |d                t%        |	d   |d         D ]  \  }
}t'        |
|        y c c}w )
Nr   r_  r\  rs   r   r+  ra  rP  r]  )r$   r   r   r_  r   r   r   r)   r|   r.  r   r/  r   r   r~   r_   r   rz   r"  r   )r   r   r_  r  r&  r  r   r  r   r   r   r   s               rE   )test_split_to_sequence_nokeepdims_noinputz@TestReferenceEvaluator.test_split_to_sequence_nokeepdims_noinput  s   "3(9(94@"3(=(=tD,secUQOP:eS1#s;< 'yy}$$Y/66rzzBggdS$K(,1$**Q-,@AqT!Q']ABXa[)3s1v;7SV, 	"DAqAq!	" Bs   Ec                   t        dt        j                  d g      }t        dt        j                  d g      }t        dt        j                  d g      }t        dt        j                  d g      }t        dt        j                  d g      }t        t	        t        ddgdgt        j                        t        ddgd	gt        j                        t        d
g dgt        dt        j                  dgg d            t        d
g dgt        dt        j                  dgg d            t        ddgdgt        j                        t        dd	gdgt        j                        t        ddgdgt        j                        t        ddgdgt        j                        gd|g||||g            }t        |      }t        j                  g dt        j                        }t        |D 	cg c]  }	t        |	       c}	       t        j                  |D 	cg c]  }	t        t        |	             c}	      }
t        j                  |D 	cg c]  }	t!        t#        |	             c}	      }|j%                  d d|i      }t'        |
|d          t'        ||d          t'        |
|d          t'        ||d          y c c}	w c c}	w c c}	w )Nr   F1F2F3F4rO  f81r[  f82rn  C1r   r   rt   rs   g?r2  r  C2ra  ru   r   rt   rs   r   )r$   r   r   r   r   r   r]  
FLOAT8E5M2r"   r)   r|   r}   r   printr   r&   r'   r   r   r   )r   r   rh  ri  rj  rk  r&  r  r   r   	expected1	expected2r  s                rE   test_cast_float8z'TestReferenceEvaluator.test_cast_float8  ss   "3(9(9D6B#D+*;*;dVD#D+*;*;dVD#D+*;*;dVD#D+*;*;dVDfseeW9Q9QRfseeW9O9OP") +":":QCAU	 ") +"8"81#?S	 fugv+:K:KLfugv+:K:KLftftf9J9JKftftf9J9JK-0 RR 7
> !'xx,BJJ?6A$Q'67HHFJK"#8#;<K
	 HHFJK"#8#;<K
	 ggdS$K(	3q6*	3q6*	3q6*	3q6* 7K Ls   0KK	Kc                   t        dt        j                  d g      }t        dt        j                  d g      }t        t	        t        ddgdgt        j                        t        dddgdgd	      t        ddgdgt        j                        gd
|g|g            }t        j                  ddgt        j                        }t        j                  |D cg c]  }t        t        |dd      d       c}      }t        |      }|j                  d d|i      }t        |d   |        G d dt              }	t        ||	g      }|j                  d d|i      }t        |d   |       y c c}w )Nr   r   rO  f8r[  CastLikef32r   )saturatera  g    cAru   TF)uzr{  )r|  c                      e Zd ZdZy)>TestReferenceEvaluator.test_cast_like_float8.<locals>.CastLikerc   N)r  r  r  r  r   rL   rE   ry  r~     s    IrL   r  )r$   r   r   r   r   r   FLOAT8E4M3FNUZr|   r}   r   r&   r   r)   r   r   r+   )
r   r   r   r&  r   r   r   r  r  ry  s
             rE   test_cast_like_float8z,TestReferenceEvaluator.test_cast_like_float8  s^   "3(9(9D6B"3(9(9D6BfsedV8R8RSj3+wKfugu9J9JK
 	
 xxC

388
 	  &)!uE$
 !'ggdS$K(A)	{ 	 !
;ggdS$K(A)%s    E/c                l   t        dt        j                  d g      }t        dt        j                  d g      }t        dt        j                  d g      }t        t        t        ddgdgt        j                        t        ddgdgt        j                        gd|g||g            }t        |      }t        j                  g dt        j                        }t        j                  |D cg c]  }t        |       c}      }t        j                  |D cg c]  }t        |       c}      }	|j                  d d|i      }
| j                  |j!                         |
d	   j!                                | j                  |	j!                         |
d
   j!                                y c c}w c c}w )Nr   rh  ri  rO  r[  ra  ro  ru   r   rt   )r$   r   r   r]  rr  r   r   r   r)   r|   r}   r   r   r   r   r   r  )r   r   rh  ri  r&  r  r   r   rt  ru  r  s              rE   test_cast_float8_outputz.TestReferenceEvaluator.test_cast_float8_output'  s^   "3(9(9D6B#D+*B*BTFK#D+*@*@4&IfsedV8P8PQfsedV8N8NO R

 !'xx,BJJ?HHE13A6EF	HHE13A6EF	ggdS$K())+SV]]_=))+SV]]_=	 FEs   0F,F1c                   t        j                  ddddddddd	d
dddt         j                  t         j                   t         j                  gt         j                        }t
        j                  t        j                  dddddddddddddddt         j                  gt         j                        t
        j                  t        j                  dddddddddddddddt         j                  gt         j                        t
        j                  t        j                  dddddddddddddddt         j                  gt         j                        t
        j                  t        j                  ddddddddd ddddddt         j                  gt         j                        i}d! }|j                         D ]  \  }}| j                  |"      5   ||      }t        |      }|j                  d d#|i      d$   }t        ||       | j                  |j                   |j                          | j                  |j"                  |j"                         d d d         y # 1 sw Y   xY w)%Ng	?i`  i  iP  i0  i  iig-C6?g{Gz?i       j@ru   g      ?g      v@g      z@g      t@g      p@g      pg      Xr>  g      ?g      |@g      |g      n@g      ng      ?g      x@g      ?g      @g      g?c                &   t        dt        j                  d g      }t        dt        j                  d g      }t        ddgdg|       }t        ddgdgt        j                        }t	        ||gd|g|g      }t        |      }t        |       |S )Nr   r   rO  r  r[  r   )r$   r   r   r   r   r   r   )r\  r   r   r   r   r   rl   s          rE   model_cast_castzCTestReferenceEvaluator.test_float8_4_types.<locals>.model_cast_cast  s    &sK,=,=vFA&sK,=,=vFAfsecUr:EfsecU{7H7HIEu~taS1#>E#E*J
#rL   r[  r   r   )r|   r}   infrS  r   r   r]  r  rr  FLOAT8E5M2FNUZr!  r  r)   r   r   r   r_   rv   )	r   r   r   r  r\  expectrl   r  r   s	            rE   test_float8_4_typesz*TestReferenceEvaluator.test_float8_4_types>  sv   HH!$ **'
, $$bhhFF!$ jj''* &&FF!$ jj')* ""BHH&FF!$ jj'%* &&!     !!!!    !FF!$ jj')AU
n	 #..* 	8JB$ 8,R0
(4GGD3(+A.*  qww7  qww78 8	88 8s   BI  I)	c           
     2   t        dt        j                  d g      }t        dt        j                  d g      }t	        t        t        ddgdgt        j                        gd|g|g            }t        |      }t        j                  g dt        j                        }t        j                  |D cg c]  }t        |       c}      }|j                  d d|i      }| j                  |j                         |d   j                                y c c}w )	Nr   r   rO  r[  ra  r   rt   rs   r  r2  ru   r   )r$   r   r   BFLOAT16r   r   r   r)   r|   r}   r   r   r   r   r  )	r   r   r   r&  r  r   r   rt  r  s	            rE   test_cast_bfloat16_outputz0TestReferenceEvaluator.test_cast_bfloat16_output  s    "3(9(9D6B"3(<(<tfEfsecU{7K7KL 	
 !'xx+2::>HHdC1!4CD	ggdS$K())+SV]]_= Ds   5Dc                   t        dt        j                  d g      }t        dt        j                  d g      }t        t	        t        dg dgt        dt        j                  dgdg            t        dg dgt        dt        j                  dgd	g            t        d
g ddg      t        dddgdgd      gd|g|g            }t        |      }t        j                  g dt        j                        }t        j                  g dt        j                        }|j                  d d|i      }t        ||d          y )Nr   r   rn  scalert   r)  rp  rr  r>  QuantizeLinearr   r  rr  r  DequantizeLinearr   r  ra  r  ru   r   rt   rs   i     r$   r   r   r   r   r   r"   r]  r)   r|   r}   r   r   r   r   r   r   r&  r  r   r   r  s           rE   test_quantize_linear_e4m3z0TestReferenceEvaluator.test_quantize_linear_e4m3  s-   "3(9(9D6B"3(9(9D6B" 	)';3D3DqcC5Q	 ")&+2J2JQCRUQVW	 .0FN03.3%aP  '
. !'xx+2::>88/rzzBggdS$K(#a&)rL   c                T   t        dt        j                  d g      }t        dt        j                  d g      }t        t	        t        dg ddg      t        dddgdgd	      gd
|g|gt        dt        j                  dgdg      t        dt        j                  dgdg      g            }t        |      }t        j                  g dt        j                        }t        j                  g dt        j                        }|j                  d d|i      }t        ||d          y )Nr   r   r  r  r  r  r  r   r  ra  rt   r)  rr  r>  r  ru   r  r  r  s           rE   %test_quantize_linear_e4m3_initializerz<TestReferenceEvaluator.test_quantize_linear_e4m3_initializer  s   "3(9(9D6B"3(9(9D6B.0FN03.3%aP ):):QC#G(@(@1#uM
 !'xx+2::>88/rzzBggdS$K(#a&)rL   c                   t        dt        j                  d g      }t        dt        j                  d g      }t        t	        t        dg dgt        dt        j                  dgdg            t        dg dgt        dt        j                  dgd	g            t        d
g ddg      t        dddgdgd      gd|g|g            }t        |      }t        j                  g dt        j                        }t        j                  g dt        j                        }|j                  d d|i      }t        ||d          y )Nr   r   rn  r  rt   r)  rp  rr  r>  r  r  r  r  r   r  ra  r  ru   )r   rt   rs   i  r  )r$   r   r   r   r   r   r"   rr  r)   r|   r}   r   r   r   r  s           rE   test_quantize_linear_e5m2z0TestReferenceEvaluator.test_quantize_linear_e5m2	  s,   "3(9(9D6B"3(9(9D6B" 	)';3D3DqcC5Q	 ")&+2H2H1#PSuU	 .0FN03.3%aP  '
. !'xx+2::>881DggdS$K(#a&)rL   c                2   t        dt        j                  d g      }t        dt        j                  d g      }t	        t        t        dg ddg      gd|g|gt        dt        j                  dgdg      t        d	t        j                  dgd
g      g            }t        |      }t        j                  g dt        j                        }t        j                  g dt        j                        }|j                  d d|i      }t        ||d          y )Nr   r   r  r  ra  r  rt   r)  rr    )r>  g      `r*        333333@333333@g      @g         @     ru   )r  i         i  r  r    r   r  r   r   )r$   r   r   UINT16r   r   r   r"   r)   r|   r}   r   uint16r   r   r  s           rE   test_quantize_linear_uint16z2TestReferenceEvaluator.test_quantize_linear_uint16)  s   "3(9(9D6B"3(:(:TFC.0FN ):):QC#G(:(:QC%I
 !'xx& **)
, 88 ))
" ggdS$K(#a&)rL   c                2   t        dt        j                  d g      }t        dt        j                  d g      }t	        t        t        dg ddg      gd|g|gt        dt        j                  dgdg      t        d	t        j                  dgd
g      g            }t        |      }t        j                  g dt        j                        }t        j                  g dt        j                        }|j                  d d|i      }t        ||d          y )Nr   r   r  r  ra  r  rt   r)  rr  ro  )r>  g     r*  r  r  r  r  r  g    @g    g    @g    g     @g      r  r  ru   )ro  r        i  r  r  r  r  ir   r  r  r  r  r   )r$   r   r   INT16r   r   r   r"   r)   r|   r}   r   int16r   r   r  s           rE   test_quantize_linear_int16z1TestReferenceEvaluator.test_quantize_linear_int16e  s   "3(9(9D6B"3(9(9D6B.0FN ):):QC#G(9(9A3F
 !'xx. **1
4 88$ (('
* ggdS$K(#a&)rL   c                6   t        dt        j                  d g      }t        dt        j                  d g      }t	        t        t        dg ddgd      gd|g|gt        dt        j                  d	gd
g      t        dt        j                  d	gdg      g            }t        |      }t        j                  g dt        j                        }t        j                  g dt        j                        }|j                  d d|i      }t        ||d          y )Nr   r   r  r  r   r  ra  r  rt   r)  rr  r  )i0u  iy  r  i  ru   )g     g     r)  g      }@)r$   r   r  r   r   r   r   r"   r)   r|   r}   r  r   r   r   r  s           rE   test_dequantize_linear_uint16z4TestReferenceEvaluator.test_dequantize_linear_uint16  s    "3(:(:TFC"3(9(9D6B*,BSEPQ
 ):):QC#G(:(:QC%I
  !'xx4BIIF88:"**MggdS$K(#a&)rL   c                6   t        dt        j                  d g      }t        dt        j                  d g      }t	        t        t        dg ddgd      gd|g|gt        dt        j                  d	gd
g      t        dt        j                  d	gdg      g            }t        |      }t        j                  g dt        j                        }t        j                  g dt        j                        }|j                  d d|i      }t        ||d          y )Nr   r   r  r  r   r  ra  r  rt   r)  rr  i )iiii  ru   )g     @g     @g       g     @)r$   r   r  r   r   r   r   r"   r)   r|   r}   r  r   r   r   r  s           rE   test_dequantize_linear_int16z3TestReferenceEvaluator.test_dequantize_linear_int16  s    "3(9(9D6B"3(9(9D6B*,BSEPQ
 ):):QC#G(9(9A3H
  !'xx0A88:"**MggdS$K(#a&)rL   r  r   rt   r   rE  )r   r   r   r   )r   r   r   r   )r   r   r   r   )rt   r   r   r   )r   ro  r   ro  )r   ro  ro  ro  rx  ro  )      ?r  rt   r  )r   r   ro  r   ro  r   r   r   )rz  r  r     rx  r}     r  )r  D   r  r|  r  r  r     r  r  r   rG  r   )r   r   r   r   r   ro  )rm  r  r  )r   r   r   r   c                f   t        dt        j                  d g      }t        dt        j                  d g      }t	        j
                  |t        j                        }	t	        j
                  |t        j                        }
t        t        t        dg ddg||      gd|g|gt        dt        j                  |	j                  |	      t        d	t        j                  |	j                  |
      g            }t        |      }t	        j
                  |t        j                        }|It	        j
                  |t        j                        }|j                  d d|i      }t        ||d
          y | j!                  t"              5  |j                  d d|i       d d d        y # 1 sw Y   y xY w)Nr   r   ru   r  r  r,  
block_sizera  r  rr  r   )r$   r   r   INT8r|   r}   r   int8r   r   r   r"   r_   r)   r   r   r   r{   r   r   r  
zero_pointr,  r  r   r   r   
scale_datazp_datar&  r  r   r  s                  rE   test_blocked_quantize_linearz3TestReferenceEvaluator.test_blocked_quantize_linear  sg   v #3(9(9D6B"3(8(84&AXXe2::6
((:RWW5(.!#- !2!2J4D4Dj  (8(8*:J:JGT	
, !'xx,xx8H''$d,CHc!f-"":. +sDk*+ + +   	F''F0)r   rt   r   r   )r  r  rx  r  )r  -   r)  r4  )r   r   rs   r   )rm  r  rv  rx  )ru  r  6   r)  r   rc  r  ri  )r   r   r  r  )rm  rm  r  r  )rs   rt   r   )r   rs   r   r   r   r   rP  r  )rj  rP  rv  r   r  r8  r  r  )rz  "   r  rt  rv  r  r4  E   )rG  r   rs   r   r   rm  c                f   t        dt        j                  d g      }t        dt        j                  d g      }t	        j
                  |t        j                        }	t	        j
                  |t        j                        }
t        t        t        dg ddg||      gd|g|gt        dt        j                  |	j                  |	      t        d	t        j                  |	j                  |
      g            }t        |      }t	        j
                  |t        j                        }|It	        j
                  |t        j                        }|j                  d d|i      }t        ||d
          y | j!                  t"              5  |j                  d d|i       d d d        y # 1 sw Y   y xY w)Nr   r   ru   r  r  r  ra  r  rr  r   )r$   r   r  r   r|   r}   r   r  r   r   r   r"   r_   r)   r   r   r   r{   r  s                  rE   test_blocked_dequantize_linearz5TestReferenceEvaluator.test_blocked_dequantize_linear=  sg   J #3(8(84&A"3(9(9D6BXXe2::6
((:RWW5*.!#- !2!2J4D4Dj  (8(8*:J:JGT	
, !'xx)xx

;H''$d,CHc!f-"":. +sDk*+ + +r  c           	        d }d}d}d}d}t        dt        j                  g d      }t        dt        j                  d       }t	        d	dgdg||||
      g}t        t        |d|g|g            }	t        |	      }
t        j                  j                  dddd      j                  t        j                        }|
j                  d d|i      } ||||||      }| j                  t        |      t        |d                y )Nc                   t        j                  d      j                  t         j                        }t        j                  | j
                        D ]  \  }}}}	t        | |t        d|t        t        j                  |dz
  dz              z
        t        d|t        t        j                  |dz
  dz              z   dz         ||	f   dz        |||||	f<    | |||z  |z  z   |z  z  }
|
S )N)r   r   r   r   r   rt   rs   r   )r|   r   r/  r   ndindexr_   r0  r   r\   mathfloorr   ceil)r   r  betar  r  
square_sumr   r   hr|  r   s              rE   	_expectedz2TestReferenceEvaluator.test_lrn.<locals>._expected  s    ,/66rzzBJ jj1 
1a),Aq3tzz4!8q.'A#BBCcq3tyy$(a'@#AAAEG   
*
1aA:& dedlj88TABAHrL   g-C6*?r  r)  r   r   )r   r   2   r  r_  LRN)r  r  r  r  ra  r   r   )r$   r   r   r_  r   r   r   r)   r|   r1  r2  r/  r   r   r   rz   )r   r  r  r  r  r  r   r_  r  r&  r  r   r  r   s                 rE   test_lrnzTestReferenceEvaluator.test_lrn  s    	$ "3(9(9>J"3(=(=tDecUSETSWX
 :eS1#s;< 'yy~~aAq)00<ggdS$K(T5$d;XCF4rL   c                   t        j                  d      j                  d      j                  t         j                        dz   t        j                  d      j                  d      j                  t         j                        t        j
                  dt         j                        d}t        ddgdgddgdgd	
      }t        di ||}t        di ||}t        ||       y )Nr   )rt   rt   r   rt   r   r  r  ru   rh  NOTSETr  r   r   r   r   rs  r   
r|   r.  r   r/  r   r   r   r6   r7   r   r   r  rC   r   r  s        rE   test_conv_im2col_1dz*TestReferenceEvaluator.test_conv_im2col_1d  s    :&..z:AA"**MPQQ1%%i077

C$bjj1

 cQC
 (:%:6:)<E<V<#&rL   c                   t        j                  d      j                  d      j                  t         j                        dz   t        j                  d      j                  d      j                  t         j                        t        j
                  dt         j                        d}t        ddgdgd	d	gdgd
      }t        di ||}t        di ||}t        ||       y )Nrx  )rs   r   r   rt   )r   r   r   r  ru   rh  r   r   r  r  r   r  r  s        rE   test_conv_im2col_1d_pad0z/TestReferenceEvaluator.test_conv_im2col_1d_pad0  s    9%--j9@@LqP9%--j9@@L$bjj1

 cQC
 (:%:6:)<E<V<#&rL   c                   t        j                  d      j                  d      j                  t         j                        dz   t        j                  d      j                  d      j                  t         j                        t        j
                  dt         j                        d}t        dddgd	d	gg d
ddgd      }t        di ||}t        di ||}t        ||       y )N   )rt   rt   r   r  rt   rm  rl  r  ru   rh  r   ri  r  r  r   r  r  s        rE   test_conv_im2col_2dz*TestReferenceEvaluator.test_conv_im2col_2d  s    ?+33NCJJ2::V1%%l3::2::F$bjj1	
 !fQF
 (:%:6:)<E<V<#&rL   c                   t        j                  d      j                  d      j                  t         j                        dz   dt        j                  d      j                  d      j                  t         j                        z  t        j
                  dt         j                        d	}t        dddgddgg d
ddgd      }t        di ||}t        di ||}t        ||       y )Nr)  )rs   r   r   r   rt   rs   rP  )r   r   rt   rs   r  ru   rh  r  r  r  r   r  r  s        rE   test_conv_im2col_2d_pad0z/TestReferenceEvaluator.test_conv_im2col_2d_pad0  s    =)11-@GG

SVWWyy'//>EEbjjQR$bjj1	
 !fQF
 (:%:6:)<E<V<#&rL   c                   t        j                  d      j                  d      j                  t         j                        dz   dt        j                  d      j                  d      j                  t         j                        z  t        j
                  dt         j                        d	}t        dddgd
d
gddgd d      }t        di ||}t        di ||}t        ||       y )Nr  )rt   rt   r   r   rt   rs   rm  rl  r  ru   rh  r   
SAME_LOWER)r  r   r   r   r   rs  r   r  r  s        rE   test_conv_im2col_2d_autopadz2TestReferenceEvaluator.test_conv_im2col_2d_autopad  s    5!))-8??

KaObii&..|<CCBJJOO$bjj1

 !fQF!
 (:%:6:)<E<V<#&rL   c                   t        j                  d      j                  d      j                  t         j                        dz   t        j                  d      j                  d      j                  t         j                        t        j
                  dt         j                        d}t        dg d	g d
g dg d	d      }t        di ||}t        di ||}t        ||       y )Ni  )rt   rt   r   r   r8  rt   rn  )rt   rt   r   r   r   r  ru   rh  )rt   rt   rt   r  )rt   rt   rt   rt   rt   rt   r  r  r   r  r  s        rE   test_conv_im2col_3dz*TestReferenceEvaluator.test_conv_im2col_3d'  s    ./W&'VBJJ 2&&7>>rzzJ$bjj1
 "#
 (:%:6:)<E<V<#&rL   c                   t        j                  d      j                  d      j                  t         j                        dz   t        j                  d      j                  d      j                  t         j                        t        j
                  dt         j                        d}t        dddgd	d	gg d
ddgd      }t        di ||}t        di ||}t        ||       y )Nr%  r#  rt   r  r$  r&  ru   rh  r   ri  rs   r  r  r   r  r  s        rE   test_conv_im2col_2d_stridesz2TestReferenceEvaluator.test_conv_im2col_2d_strides<      =)11,?FFrzzRUVV=)11,?FFrzzR$bjj1

 !fQF
 (:%:6:)<E<V<#&rL   c                   t        j                  d      j                  d      j                  t         j                        dz   t        j                  d      j                  d      j                  t         j                        t        j
                  dt         j                        d}t        dd	dgd
d
gg dd	d	gd      }t        di ||}t        di ||}t        ||       y )Nr%  r#  rt   r  r$  r&  ru   rh  rs   r   ri  r  r  r   r  r  s        rE   test_conv_im2col_2d_dilationsz4TestReferenceEvaluator.test_conv_im2col_2d_dilationsN  r  rL   ))r$  )r  )r  )r  )r  )r  r4  c                   t        dt        j                  d       }t        dt        j                  d       }t        j                  d      j                  d      j                  t        j                        }t        |dgdgd      g}t        t        |d|g|g            }t        |      }|j                  d d|i      }|d   }	| j                  |	t        j                         | j                  |	j                   d       y )	Nr   r   r   )rt   r   rs   r   r7  ra  r   )r$   r   r   r|   r.  r   r/  r   r   r   r   r)   r   r   ndarrayr   r_   )
r   opr   r   r   r  r&  r  r  rs
             rE   test_reduce_op_no_axisz-TestReferenceEvaluator.test_reduce_op_no_axis`  s     #3(9(94@"3(9(94@yy|##I.55bjjA2usea89:eS1#s;< 'ggdS$K(Fa,"%rL   )r  r&  r   r   )r   )r   c           	     P   t        dt        j                  d       }t        dt        j                  d       }t        dt        j                  d       }t        dt        j                  d       }t	        j
                  dgt        j                        }t        dg ddgd	
      }t        t        |gd|||g|g            }t        |      }	t	        j
                  dgt        j                        j                  d|z        }
t	        j
                  ddg|z  t        j                        }|	j                  d |
||d      d   }| j                  |j                  d|z         | j                  |j                   t        j                         t	        j"                  ddg|      j%                  t        j                        }|	j                  d |
||d      d   }| j                  |j                  d|z         | j                  |j                   t        j                         y )Nr   PVr   r   ru   Pad)r   r  r  r  )r   r  r  ra  rt   r  r   r  r   r   )r   )r$   r   r   r;  r|   r}   r   r   r   r   r)   r   r<  r   r   r_   rv   rN  r/  )r   dimr   r  r  r   r  rK  r&  r  r   pr  s                rE   test_padzTestReferenceEvaluator.test_padw  s   "3(9(94@"3(9(94@"3(9(94@"3(9(94@"RZZ0JW:tfcAq!9qcBC 'HHaS

+33D3J?HHaVc\2ggd!!%89!<D3J/BJJ/IIq!fc"))"((3ggd!!%89!<ECK0BJJ/rL   c                   t        dt        j                  d       }t        dt        j                  d       }t        ddgdg      t        ddgdgt	        dt        j
                  dgdg      	      g}t        t        |d
|g|g            }t        |      }t        j                  dt        j                        }|j                  d d|i      d   }| j                  |j                  t                      | j                  |j                   t        j"                         t%        t        j                  dt        j"                        |       y )Nr   r   r  r_   r  ConstantOfShaper  rt   r  ra  ru   r   )r$   r   r   r   r"   r  r   r   r)   r|   r}   r   r   r   r_   rw   rv   r  r   r   r   r   r  r&  r  r   r  s           rE   test_constant_of_shapez-TestReferenceEvaluator.test_constant_of_shape  s	   "3(9(94@"3(9(94@ gsegY?!y!';+=+=sQCH	
 :eS1#s;< 'HHQbjj)ggdS!H%a(EG,BII."))4c:rL   c                   t        dt        j                  d       }t        dt        j                  d       }t        dg dgt	        dt        j
                  dgdg            t        d	dgd
g      t        dd
gdgt	        dt        j                  dgdg            t        dddgdg      g}t        t        |d|g|g            }t        |      }t        j                  dt        j                        }|j                  d d|i      d   }| j                  |j                  t!                      | j                  |j"                  t        j$                         t'        t        j                  dt        j$                        |       y )Nr   r   rn  liker   rt   rs   rp  r  r_   r  r  r  r  r  ry  ra  ru   r   )r$   r   r   r   r"   r  r;  r   r   r)   r|   r}   r   r   r   r_   rw   rv   r  r   r  s           rE   test_constant_of_shape_castlikez6TestReferenceEvaluator.test_constant_of_shape_castlike  sJ   "3(9(94@"3(9(94@ !#{'9'9A3D	 gsegY?!y!';+<+<qcA3G	 j5&/C59
  :eS1#s;< 'HHQbjj)ggdS!H%a(EG,BII."))4c:rL   c           
        dt        j                  g dg dg dg dg dgt         j                        i}t        j                  g dg d	g d
g dg dgt         j                        t        j                  dt         j                        t        j                  dt         j                        g}t	        dt
        j                  d       }t	        dt
        j                  d       }t	        dt
        j                  d       }t	        dt
        j                  d       }t        ddgg d      g}t        t        |d|g|||g      t        dt               dz
        g      }t        |      }	|	j                  d |      }
| j                  t!        |
      d       t#        ddd      D ]  }t%        ||   |
|           y )Nr   )dg6`gQs[ؿgq2 d!?ggc%^?gQF
?g2o?g?gܝ>G?gG@b?gpA?g/ʿg`Y`?g??g@@?gߥ.gt?>P?g<0?ge~% 9g"?gf<߉xgs nY?gA?gOd* ǼgɀqgZ9?g} ixg`?g«kgY Ȧgd?JKg>Y?g LQ?gu@gc0@"?gZֈɾ?g.ykj?g}Ͽh?g2_ѿgg``m?gVHϿgO?g ?g2 vE?g~ۺg?Ͽg:h T?g(ۿ㣿gp}L?g& ׿gӿg֟?gj@@[?g(SHcÿgR,^Rgͼӟ(ɷ?g'U?gם՟P?g2ÿgk{?g; ȿgW^U0?gn ޒgGgĿg3ſ2ѿgT) 8?g^ҿgSQg=vpp?gS_ſgxпgK/Zeg)4$w?g_!@r?g8z?g0(Ngグg|p=fugoҿgN ?gPL2 ?gɗ֓?gtY?g؁?g"cٿF?ge] d`?gut~g/!?g:'?gS*gH?g=T@Au1?gH{?g_@?ggi- BI?gU?q?gHT`EϿgi4-ٿg" ?gʃ)dg9Ͽg3ֿg3d?gP>g@Ӫg- ,Ggk?g d;mgKT?g8?giz_?gဉDοg0+?g ¬?gO?gy_?g%D?g&j'?g+[gu?gv `˿g	?m?g{A>?gggCv?g4.&?g#?g>ġ@?gTg xg"Ug@F?gZ 7?g$s4`?g?u~ؿg~`ӽ?g?sZgs#|?gZ&!?g|Zzɿg(Ϳ?g^stS$ſg+q9gL>?gUo?gR^Igɿg?V??g蒷?g8-?g_ֿg@}\οgcg)?gĿgOɿg9Z?gWK v]?g>@{?gsVg14 @[n?gEc@ѿgVAg;?r?gj &;g#% ÿg:`i?gB@oƿgf_Xjg=?gHCſgk @]ſgG5?g	. ?gr{?g*8⮤g3Z  ,Zgä?g{`b?gjxvԿg^?g1?g?g 7gzPl߅h?g|?gdy1?g$ 9¿gtՉ?g0_?ge߿gx?X?gI??gG]t?gߛgfϾ"Z?g&@?g̅vʿgҿ@ſg?	?gyW?)dg?FgEFI@3Կg?gZa}gѠ 
:?g5 g)?g~ ?g69q?g?g6XCg|8ҿg?Ԫοg  [0?g.,?g_gԻ?g՟E:g@Ŀg@T?g|iͿgf k̿gE& ?g'@gu^ eŮgP{?gSh?5og=6% ?gg]~:gv!g MgB	 |?g6`r?g]ſgB7?g%Q?g7ف?gg g))L?g*- Jӿg9;ґ?gCr?g>Yͱ?g(?KĿgu gSV?gޟNZ?gE?g?_Sݿg|k`HѿgRS?gۨe?g#@ſg4׶gդϟ?g!5n?g]y ?g-?g}a ?g7_1ԿgrXƿg(;?gQ㿠Kg[#g9*X_4V?go@¿g<~?	ѿgVH?g`2J¿g}3?gڒ ?g.K?ÓgGd?gӕ`?g#K@+g1 ߷?g!?gב ǿg\!>?gmCl7\?gCn~W?g9hgW?2L?gM?gXp?go, 
ǿgs̠?gFė 1?g?ݿg?gTԄ?g	 %ag"d?gg=!p?g?qgAEȿg
?g9c"Vպ?g{wXk?)dgƣg-@ɧӿgˬ?0)?gcſgc fgR˷䤿g	 ?gu9e?glû?g!H?g1?j?gDXԿg7Z??g߄ gs?g%`g%(hg f?g)1ƿg0c@?gU
g`?֠9g=?Nn?gle lgᩱg0@}gK>?gw4򟌆?gWkByEgt??gCU?g2 v?g邀?g; ۿgW\md?g^?ս?gmg,@?gT }ĿgN?gGb Dտgu?gg4\m?gVKן?g7$@g?¿gE?gfFS?g~P?gBMӿgTzտg(?g?Ԏ?g2~>͌?g}8_g$9 ?g?gﲿf?gÑ!`zg@\ F?g~@eǿg8EU?gsC Y?gg ĿgP?go	 
geʿg_ ?g\u8hg Cɿgz]ڈgu% ?gyd*?gf* xq?gZ߿ǥ?g1_9?g^?gQÄɰͿg!`Tg?gԓͧgs)@ig?grJ?gB?gIzgq"?gt:꾿gJd`k?gu=>R?g gr?gu]?gc?gTyf?gH*?gf?g1g&o}пgG`?gxKu?)dgu@?gnO~ҿgJ_!g9 kg +g-nt?g[?g _ÿg2Z?n?g_S`?gA 0cu?gwsRֿgܣgaS˭?gI?g-a`bпg(???g]["=gLֿ#~ѿgZG`?gvϿVڿge?ꖿg|?g2MԿg^;?gX_?g3o-߱?gFV߼?g9ǿgqM&gj,??g:Y+?g?g&@.g(䟑w?gl_{gΧr ?g-f??g g] (?g]v	 Oݿgj`PKӿg$ߏ?gyB@BX?g*gS>ϿgY?geƿg4@?g,P &ݿgz`ҿg	~?gf?	?g?1gq^{пg?g)`$?gHo}?gqyF?g> G?g87@Eɿgɷg	_Ng^E`g)˿gkd`?gjF_g}пgzη?gL@ĿgSؿg>&`e<?gB`h٤?g> gWmN?gb_gtߏvgA gb9?տg7B篿g?g '-\?g>+Ʃ?gzi_`?gbP?gHWo?g!/gw?gEf@
?ge$5g@?gW ?gh<g; ?g g?gbj@ÿg#@`5g%`|?gR`Rru   )dr  r  r  r     r     r  r     r  i   r           r           w         z            r  y   r  r        r         r  r	  ]      a   r  r  r  r  r!     r     J   U         s   r  r        r(  r  k         q   r     r        r5  ^      r  r	  r  r     r  X      r  r     r         r     r  rP     r7  r     r  r  r!  F   r  r  )db   rw  r  x   r  r0  r6  r        r&  r     r     r     r  r  r  g   r  r  r     r&  rA  r  r  }   r,     r1  r  rA  r     rB  j   r  p   r  rD  r'  r  r  r  r     r  r  r  r  r.  r+        r  r  rC  r  r?  rB  r  r      n   r  r  rK  rK  r  r  r  r  r  r  r  r  r	  r  rA  r4  r     rR  u   r"  r  ry  r  r	  rD  r  rA     r  r5  r&  r  )dr4  r  r  r  r7  r  r  r  rA  rP  r  Y   r  r  r'  r  rA  r4  r.  rI  r  r     r  r     r     r  r  r        rK  r<  rV  rT  r-  r  rT  W   r        rO     r  r&     r  r  r  rV  rK  ~   rB  r  r:  r  r   r  r5  r7  r  r  rW  rS  r2  r  r  r4  r     rD  r  r^  r  r  r%  r  r8  r  r  rD  r  rP  rQ  r,  r   r  r<  rH  r  r  rZ  ra  r%  r  r  rZ  )dr  V   r  r5  r^  r  rT  r3  r  r  r  r%  r  r  r\  r^  r  rT  r5  r:  r?  ra  r/  r  r0  r  rV     r     rd  r<  rZ  >   r  rB  r0  rV  r.  r  r7  r  r  r;  r  r  rH  r  r"  r5  r  r@  r  r  r  rH     r'  r  r)  m   r  rd  rG  r.     r?  r  rd  v   rJ  r  rF  r  r7  rV  rD  r  r  r  rZ  r  r	  r  r'  r@  r  r
  r  r~  rP  r  r   r   rZ  r  rS  r  rM  r  )dr3  rU  r  r0  r  r   r  r(  r  r/  rF  r  r  r  r'  `   rT  r  r  r  C   ra  r<  r     r  rT  r:  rQ  r  rP  r'     r  r  r  r     r4  r	  r  r[  rW     r  r!  rI  rQ  r3  9   r5  rM  r)  r  r  r  rh  r'  r,  r2  r  r`  r  ri  rE  r  r  r2  r  rO  G   r&  rV  r  r  r  r0  r  r  r4     r@  rl  r  r3  rX  r?  r  r  r,  r1  r   r  r  r  r  rO  r`  rB  r  g    v?r3  r   r  zpDynamicQuantizeLinear)r   r  rs  ra  rc   rt   r   r   rs   r   )r|   r}   r   r   r$   r   r   r  r   r   r   r    r   r)   r   r   rz   r~   r   )r   r  r   r   r   ScaleZpr  r&  r  r  r   s               rE   test_dynamic_quantize_linearz3TestReferenceEvaluator.test_dynamic_quantize_linear  s   eLeLeLeLes@ jjCBD
N HHeLeLeLeLes@ hhCBF HH)<HHS)KF
P #3(9(94@"3(9(94@&w0A0A4H#D+*;*;TB '$
 ucA3E27',>,@1,DEF
 !'ggdE"S1%q"b! 	1AHQKQ0	1rL   abcdefz.comz.netzabc.comzdef.netr&  )catdogsnakes)catsdogssnakesr  )rz  r}  r~  r   )r      ßr   )aau   ßßyyc                V   t        dt        j                  d       }t        dt        j                  d       }t        dt        j                  d       }t        dddgdg      }t	        t        |gd||g|g            }	t        |	      }
|
j                  d t        j                  |      t        j                  |      d      ^}}t        j                  j                  ||       | j                  |j                  j                  dd	h       | j                  |j                   |       y )
Nr   r   r   StringConcatr  ra  )r   r   Or?  )r$   r   rR  r   r   r   r)   r   r|   r}   testingassert_array_equalassertInrv   kindr   r_   )r   r   r   r   expected_shaper   r   r   rK  r&  r  r!  r   s                rE   test_string_concatz)TestReferenceEvaluator.test_string_concat  s     #3(:(:DA"3(:(:DA"3(:(:DAc
SEJ:tfcAq6A3?@ 'WWT!288A;#GH



%%fh7fll''#s4~6rL   z1,2,34,5,6,)123)456)1,4,6rc   r  rc   r  r  )rs   rs   rt   )r  r  r  z5,6)rt   rs   rs   )r  r  r  )r  rc   rc   )r  r  rc   )rs   rs   r   )zhello world !z  hello   world !z hello world   ! )helloworld!r  z	o-n-n--x-z	o-n----nx-)or   r   rc   r   rc   )r  r   rc   rc   rc   nx r  c           	     t   t        dt        j                  d       }t        dt        j                  d       }t        dt        j                  d       }t	        ddgddg||      }	t        t        |	gd|g||g            }
t        |
      }t        j                  |t              }|j                  d d|i      ^}}}t        j                  j                  |t        j                  |t                     t        j                  j                  |t        j                  |t        j                               y )Nr   Splits	MaxSplitsStringSplit)r   r  	delimitermaxsplitra  ru   )r$   r   rR  INT32r   r   r   r)   r|   r}   objectr   r  r  r<  )r   r   r  r  expected_splitexpected_num_splitsr   r  r  rK  r&  r  r!  
num_splitsr   s                  rE   test_string_splitz(TestReferenceEvaluator.test_string_split  s    ^ #3(:(:TC'+2D2DtM*;8I8IDR	5{+
 :tfcA38KLM 'HHQf%!$Qx!8
Q


%%fbhh~V.TU


%%!4BHHE	
rL   c                &   t        dg ddg      }t        |gdt        dt        j                  d d g      t        dt        j                  dg      t        d	t        j
                  dg      t        d
t        j                  d d g      t        dt        j                  dg      t        dt        j
                  dg      t        dt        j                  dg      t        dt        j
                  dg      gt        dt        j                  d d g      g      }t        |t        dd      gd      }t        |      }t        j                  g dg dg      }|dz  }|j                  t        j                        }t        j                  dgt        j                        }t        j                  dgt        j                        }t        j                  g dg dg dg dg      }|dz  }|j                  t        j                        }t        j                  dgt        j                        }	t        j                  dgt        j                        }
t        j                  dgt        j                        }t        j                  d gt        j                        }|j                  d t        |||||	|
||            }t        j                   j#                  t        j                  g d!g d"gt        j                        |d#          y )$NQLinearMatMul)r   a_scalea_zero_pointr   b_scaleb_zero_pointr  r  r   r  ra  r   r  rt   r  r   r  r  r  r  rc   rv  rm  r   ri   )rr  r*  r      )r   rN  r  r{  r  gF%u{?ru   )rl  ry     )r)  r}  r  )r   r     )r  r  r  g!u|?ig'?)r  ir  )rt   irv  r   )r   r   r$   r   r   r  r   r    r)   r|   r}   r/  r  r   r   r   r  r  )r   rK  r   rl   r   r   r  r  r   r  r  r  r  r  s                 rE   test_qlinearconv_int8z,TestReferenceEvaluator.test_qlinearconv_int8Z  sd   	 E
 F&sK,=,=d|L&y+2C2CaSI&~{7G7G!M&sK,=,=d|L&y+2C2CaSI&~{7G7G!M&y+2C2CaSI&~{7G7G!M	 $C):):T4LIJ
  ,r2"6!7A

 "*-HH(*;<=	SHHRWW((F82::6xx277;HHnm]OTU	SHHRWW((G9BJJ7xx277;((F82::6xx277;hh)))	
 	

%%HHm\2"''BCF	
rL   )zwww.google.comzwww.facebook.comzwww.bbc.co.ukzwww\.[\w.-]+\.\bcom\b)TTF)Onnx
tensorflowNumpy)PytorchCythonnumbaz^[A-Z][a-z]*$)TFTr  )zaccount@gmail.comzaccount@hotmail.comz	not emailzaccount2@yahoo.comz,(\W|^)[\w.\-]{0,25}@(yahoo|gmail)\.com(\W|$))TFFTr  win32z)google-re2 package is not built for win32c                   t        dt        j                  d       }t        dt        j                  d       }t	        ddgdg|      }t        t        |gd|g|g            }t        |      }	|	j                  d dt        j                  |      i      ^}
}t        j                  j                  |
|       | j                  |
j                  j                  d       | j                  |
j                   |       y )Nr   r   RegexFullMatchr   r  patternra  r   )r$   r   rR  r  r   r   r   r)   r   r|   r}   r  r  r   rv   r  r_   )r   r   r  r   r  r   r   rK  r&  r  r!  r   s               rE   test_regex_full_matchz,TestReferenceEvaluator.test_regex_full_match  s    > #3(:(:DA"3(8(8$?)3%#PWX:tfcA3<= 'WWTC!#56



%%fh7**C0~6rL   c                   t        dt        j                  d       }t        dt        j                  d       }t	        ddgdgd      }t        t        |gd|g|g            }t        |      }| j                  t              5  |j                  d dt        j                  dg      i       d d d        y # 1 sw Y   y xY w)Nr   r   r  zx)r  ra  r   )r$   r   rR  r  r   r   r   r)   r   r{   r   r|   r}   )r   r   r   rK  r&  r  s         rE   test_regex_invalid_patternz1TestReferenceEvaluator.test_regex_invalid_pattern  s     #3(:(:DA"3(8(8$?)3%#PTU:tfcA3<= 'z* 	2GGD3#01	2 	2 	2s   )B44B=)r   r         ?rs   ffffff
@r   rv  r  )r   r   rs   rs   r   r   rv  r~  )r   r   r  rs   r  r   r  )r   r   rs   rs   r   r   r~  )      -r   r  rs   r  r   rv  )r  r   rs   rs   r   r   r  )r  r  r   r  rs   r  r   )r  r  r   rs   rs   r   r   z1.22.0z'The test requires numpy 1.22.0 or laterc                   t        dt        j                  d g      }t        dt        j                  d g      }t        t	        t        dg dgt        dt        j                  dgdg            t        dg dgt        d|dgd	g            t        d
g ddg      t        dddgdgd	      gd|g|g            }t        |      }|j                  d dt        j                  |      i      }t        ||d	          y )Nr   r   rn  r  rt   r)  rp  rr  r   r  r  r  r  r  ra  )r$   r   r   r   r   r   r"   r)   r   r|   asarrayr   )	r   qtyper   r   r   r   r&  r  r  s	            rE   test_quantize_linear_int4z0TestReferenceEvaluator.test_quantize_linear_int4  s   6 #3(9(9D6B"3(9(9D6B" 	)';3D3DqcC5Q	 ")&%!qcB	 .0FN03.3%aP  '
. !'ggdS"**T"234#a&)rL   c           
        t        d|d g      }t        d|d g      }t        t        t        ddgdg|      gd|g|g            }t	        |      }t        j                  g dt
        j                        }|t        j                  k(  }t        j                  |D 	cg c]  }	t        j                  |	|       c}	      }
|j                  d d|i      }| j                  |
j                         |d	   j                                y c c}	w )
Nr   r   rO  r[  ra  )r   rt   g333333@g@r   r   ru   )signedr   )r$   r   r   r   r)   r|   r}   r   r   INT4r   float32_to_4bit_unpackedr   r   r  )r   	cast_fromcast_tor   r   r&  r  r   r  r   rt  r  s               rE   test_cast_int4_outputz,TestReferenceEvaluator.test_cast_int4_output  s     #3	D6:"3$8fsecUw? 	
 !'xx/rzzBK,,,HHIMNAW--a?N
	 ggdS$K())+SV]]_= Os   D	c           
        t        d|d g      }t        d|d g      }t        t        t        ddgdgt        j
                        gd|g|g            }t        |      }t        j                  t        d      t        j                        }|t        j                  k(  rt        j                  nt        j                  }t        j                  |D 	cg c]  }	t        j                   |	|       c}	      }
|j#                  d d|i      }| j%                  |
j'                         |d   j'                                y c c}	w )	Nr   r   rO  r[  ra  r   ru   r   )r$   r   r   r   r   r   r)   r|   r}   r~   r   UINT4r@  uint4int4r   r  r   r   r  )r   r  r  r   r   r&  r  r   cast_from_npr   rt  r  s               rE   test_cast_int4_inputz+TestReferenceEvaluator.test_cast_int4_input)  s
    #3	D6:"3$8fsecU{7H7HI 	
 !'xxa

3'0K4E4E'Ev||6;;HHHLM1W--a>M
	 ggdS$K())+SV]]_= Ns   D=c                   t        dt        j                  dg      }t        dt        j                  dg      }t        dt        j                  dg      }t        dddgdgt	        dg dgd	gd
      t	        dddgdgd      gt        dd      g      }t        dddgdgt	        dg dgd	gd      t	        dddgdg      t	        ddgdgt        t	        ddgdgd      gdg |g      t        t	        dddgdgd      gdg |g      d      gt        dd      t        dd      g      }t        t        t	        ddgdgd      gd|g|g      dt        dd      t        dd      g||g       }dt        j                  d!gt        j                  "      i}t        |      }|j                  d |      }	| j                  |	d#   t        j                  d$gt        j                  "             y )%Nr   rS  r  thisfctaddinput2rn  r  r(  CC0ro  r]   r   A1r   rc   r  r   r  r  CCr`  r  rt  rg   rp  rq  :IFru  rv  r]   rt   r  r   ri   r   rD  r   ru   r   r   r$   r   r   r   r   r   r   r   r|   r}   r   r)   r   r   
r   r   r  r_  func_def_addfunc_defr~  r  r:  r   s
             rE   'test_a_function_calling_a_function_oncez>TestReferenceEvaluator.test_a_function_calling_a_function_onceE  s.   "3(9(9C5A'+2C2CcUK"8[->->F$JJ*b5'ER%(E!2XJTJ .b"56

 !IJ*b5'DQ)gu%5x@HJ *"8gY
6RS	! !+"57E*:XJrRS	! !. #2r*"61-7
B ecUXJvF  "2r*"61- $X.
	" bhht2::67!),88D%( 	!bhht2::&FGrL   c                   t        dt        j                  dg      }t        dt        j                  dg      }t        dt        j                  dg      }t        dddgdgt	        dg dgd	gd
      t	        dddgdgd      gt        dd      g      }t        dddgdgt	        dg dgd	gd      t	        dddgdg      t	        ddgdgt        t	        ddgdgd      gdg |g      t        t	        dddgdgd      gdg |g      d      gt        dd      t        dd      g      }t        t        t	        ddgdgd      t	        ddgdgd      gd|g|g      d t        dd      t        dd      g||g!      }dt        j                  d"gt        j                  #      i}t        |      }|j                  d |      }	| j                  |	d$   t        j                  d%gt        j                  #             y )&Nr   rS  r  r  r  r  rn  r  r(  r  r  r   r  r   rc   r  r   r  r  r  r`  r  rt  r  rp  rq  r  r  rt   ztmpr  r   r  r   ru   r   r  r  s
             rE   )test_a_function_calling_a_function_doublez@TestReferenceEvaluator.test_a_function_calling_a_function_double  s@   "3(9(9C5A'+2C2CcUK"8[->->F$JJ*b5'ER%(E!2XJTJ .b"56

 !IJ*b5'DQ)gu%5x@HJ *"8gY
6RS	! !+"57E*:XJrRS	! !. #2r*"61-7
B ecUVHVDefXz&I  "2r*"61- $X.
	$ bhht2::67!),88D%( 	!bhht2::&FGrL   c                   t        dt        j                  dg      }t        dt        j                  dg      }t        dt        j                  dg      }t        dddgdgt	        dg dgd	gd
      t	        dddgdgd      gt        dd      g      }t        dddgdgt	        dg dgd	gd      t	        dddgdg      t	        ddgdgt        t	        ddgdgd      gdg |g      t        t	        dddgdgd      gdg |g      d      gt        dd      t        dd      g      }t        t        t	        ddgdgd      t	        ddgdgd      gd|g|g      d t        dd      t        dd      g||g!      } G d" d#t              } ||      }|j                  j                         D ]  }	| j                  |	|        y )$Nr   rS  r  r  r  r  rn  r  r(  r  r  r   r  r   rc   r  r   r  r  r  r`  r  rt  r  rp  rq  r  r  rt   r  r  r   r  c                      e Zd Zy)[TestReferenceEvaluator.test_overload_reference_implementation.<locals>.MyReferenceEvaluatorNr   r   rL   rE   MyReferenceEvaluatorr  &  r  rL   r  )r$   r   r   r   r   r   r   r   r)   
functions_r  r   )
r   r   r  r_  r  r  r~  r  r:  r+  s
             rE   &test_overload_reference_implementationz=TestReferenceEvaluator.test_overload_reference_implementation  s(   "3(9(9C5A'+2C2CcUK"8[->->F$JJ*b5'ER%(E!2XJTJ .b"56

 !IJ*b5'DQ)gu%5x@HJ *"8gY
6RS	! !+"57E*:XJrRS	! !. #2r*"61-7
B ecUVHVDefXz&I  "2r*"61- $X.
	$	#5 	 $I.'') 	;A!!!%9:	;rL   )
)r  zG?)r  r  )r]  q=
ףp?)r  r  )rr  333333?)r  r  )rC  r   )r   r   )FLOAT16gMb`?)r  g{Gz?c                D   t        t        |      }t        t        t	        ddgdg|      t	        ddgdg|      t	        dddgdg      t	        ddgd	gt        j
                        gd
t        dt        j
                  g d      t        dt        j
                  g d      gt        d	t        j
                  g d      g      t        dd      gd      }t        |d      }t        j                  d      dz  j                  d      j                  t        j                        }t        j                  d      dz  j                  d      j                  t        j                        }t        ||      }||z   }	|j                  d |      d   }
t!        |	|
|       y )NrO  r   Xcr[  r   Ycr   Zcr_  r   r  rc   rP  rm  r  r   r  r   rs   r   r   rc  r  )getattrr   r   r   r   r   r$   r    r)   r|   r.  r   r/  r   r   r   r   )r   styper  ityper&  r  r   r   r  r   r  s              rE   test_add_custom_dtypez,TestReferenceEvaluator.test_add_custom_dtype-  sj     U+fsedV>fsedV>edD\D6:ftfse8I8IJ	 *30A0ACUV*30A0ACUV ([->->@RST (B/0!
& !2YYr]Q''	299"**EYYr]Q''	299"**EqAq5ggdE"1%#D1rL   ))rC  )r   )r  )r  c                B   t        t        |      }t        t        t	        ddgdg|      t	        ddgdg|      t	        dddgdg      t	        ddgd	gt        j
                        gd
t        dt        j                  g d      t        dt        j                  g d      gt        d	t        j                  g d      g      t        dd      gd      }t        |      }t        j                  d      dz  j                  d      j                  t        j                        }t        j                  d      dz
  dz  j                  d      j                  t        j                        }t        ||      }||k\  }|j!                  d |      d   }	t#        ||	       y )NrO  r   r  r[  r   r  r`  r  r_  r   r  rc   rP  rm  r  r  rc  r   )r  r   r   r   r   r  r$   r   r    r)   r|   r.  r   r/  r   r   r   r   )
r   r   r  r&  r  r   r   r  r   r  s
             rE   test_cmp_custom_dtypez,TestReferenceEvaluator.test_cmp_custom_dtypeZ  sk   " U+fsedV>fsedV>i$v>ftfse8H8HI	 *30A0ACUV*30A0ACUV ([->->@RST (B/0!
& !'YYr]R((3::2::Fiima2%..y9@@LqA6ggdE"1%Hc*rL   c                   t        t        t        dg ddgdd      gdt        dt        j
                  d       t        d	t        j                  d       t        d
t        j
                  d       gt        dt        j
                  d       g      t        dd      g      }t        j                  dt        j                        j                  d      }t        j                  dggggt        j                        }t        j                  dggggt        j                        }t        j                  g dt        j                        j                  d      }t        |      }|j                  d |||d      }t!        ||d          y )Nr@  )r   r  updatesr_  r   r_  rB  r]   r   r  r  rc   rP  r   rj  ru   )rs   rs   rs   rs   r   rt   )rt   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r$   r   r   r;  r    r|   r   r   r   r}   r<  r)   r   r   )r   r&  r   r  r  r   r  r  s           rE   test_scatter_elements_4dz/TestReferenceEvaluator.test_scatter_elements_4d  sF   )6"' *6;3D3DdK*9k6G6GN*9k6G6GN
 ([->->EF!$ (B/0'
* xxBJJ/77E((qcUG9BHH5((qcUG9BJJ7HH<BJJ

',
 	
 !'ggdTg'RS3q6"rL   )r   rw  returnr   )FNg      r(  r  )ro   r\   r.  )ro   r\   r3  r\   )r  r  r  r   staticmethodr   r   r   r   r   r   r  r  r  r  r"  r2  r5  r>  rN  rQ  rS  rU  r[  r]  rf  rh  rk  r  r  r  r  r  r  r  r  r  r  r;  rF  rK  rN  rQ  rT  rY  r_  rb  rd  rJ   rz  r  r  r  r  r  r  r  r  rP   r   r  r  r  r  r!  r(  r0  r=  rH  rK  rj  rp  r  r@   skipIfversion_utilsnumpy_older_thanr  r  r  r  r  r  rT   r  r  r  r  r  r  r  r  r  r  parameterizedexpand	itertoolsproductr|   r}   rS  r   r<  r-  r6  rM  rX  rZ  ra  rd  rf  rv  r  r  r  r  r  r  r  r  r  r  r  r.  r   r   r  r  dstackr  r  r  r  r  r  r  r  r  r  r  r   r  r  rw  r  r  r  sysplatformr  r  r   r  r  r  r   r  r  r  r  r  r  rX   r  r  r  r   rL   rE   r   r      se   F   6 6p"
'-'R'h'#+J-+^2*h'''1*f'''
 $'''*>X1-f5*nl*\{*z1'f$$$"$*$.G*R-&&	0
0%&%* (0 (0T |' |'|CJ











 %( %(N)0V 
 

 
 

 $D/L&+P+B0+d+4+0K+ZC+J4+l X__&&&x05/+	/+b X__&&&x053+	3+jS&
8 . .5 4  42026%2N
>
>>.>'0 x xt   ''	    ffbff-	8/DERZZ !1b'B7!3288D	  '3h	5JK"$** !2q'B7!3288D	  %y1Iy3IJ"$** !2r(RG!4BHHE	 # '3i5IJ"$** !1b'B7!3288D	 & '3i5KL"$** !2q'B7!3288D	   '3h	5JK"$** !2r(RH!5RXXF	 ! (*5)7LM"$** !2q'B7!3288D	 & '3h	5JK"$** !2r(RG!4BHHE	 !  ffbff-	8/DERZZ !1b'B7!3288D	aYt Hw\	
^~!^~!F   ''	
''(;#z
(K&"*"*"2+h#*J>.~8@>&*@*0*@:*xB*H*2*2   '' IBIIbM))!Q//		!Q''1- |\: IBIIbM))!Q//		!Q''1-|\: 		"%%a+@ -44 		!sR#    % [5	
7p(+q7p(+T   '' 		"%%a+		!Q''1- /1AB 		"%%a+		!Q''1-1AB 		9299Q<//156:;		8288aVaV$45xrxx!Q!Q@P7QRS#-/OP 		"%%a+Iy1 .44 		 AA#	    % o?	
AD'+EAD'+R!5F'$'$'&'&'$'*'$'$   ''	


&

&   ''(LM0 N0,;*;8c1J!   ''U^ff-	9/EtL$se-GN$/1EtL		

7
7   '' '" /2A "rS#JR1 &rS#Je5 ()?@"NOD"NOD I&	 L+++
 
 L+++
 
 k*-/KLA $$V,{D	
FN
OFN
6D
L   '' H(#	 12PQ $&9:	 @*
	
6 X__!L	77<	7 X__!L22   '' !!0+
  <>UVaS)  4.   0*
 sQC(%	
, X__&&&x01*	-4*<   ''	 3 34 0 01	
>>,   ''	 0 01 3 34	
>>,LH\MH^I;V   ''	
 2 2<   ''	
 +  +<#rL   r   __main__rs   )	verbosity)r   
np.ndarrayr   ztuple[int, ...]r   Sequence[int]r   r  r   r  r  r  )i__doc__
__future__r   r  r  r  r@   
contextlibr   	functoolsr   ior   osr   textwrapr	   typingr
   r  r|   r  r  numpy.testingr   r   onnx._custom_element_types_custom_element_typesr@  onnxr   r   r   r   r   r   r   $onnx.backend.test.case.node.roialignr   onnx.checkerr   	onnx.defsr   onnx.helperr   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   onnx.numpy_helperr&   r'   r(   onnx.referencer)   onnx.reference.op_runr*   r+   onnx.reference.opsr,   %onnx.reference.ops._op_common_indicesr-   r.   onnx.reference.ops._op_listr/   r0   3onnx.reference.ops.aionnx_preview_training._op_listr1   onnx.reference.ops.op_celur2   onnx.reference.ops.op_col2imr3   r4   onnx.reference.ops.op_convr5   r6   onnx.reference.ops_optimizedrp  .onnx.reference.ops_optimized.op_conv_optimizedr7   r\   r8   r:   rJ   rP   rT   rX   ra   rp   r   r   TestCaser   r  mainr   rL   rE   <module>r6     s`   #   
  &         > +   L $ (    " W V - 4 & G 5 D . B > V  #6*H##NO '*
148( $
0(-`"	"!" " 	"
 " "*yZ#X.. yZ#xu zHMMA rL   