
    Si                      S r SSKJr  SSKrSSKrSSKrSSKrSSKJr  SSK	J
r
  SSKJr  SSKJr  SSKJr  SS	KJr  SSKrSSKrSSKrSSKrSS
KJr  SSKrSSKJrJrJrJrJrJ r   SSK!J"r"  SSK#J$r$  SSK%J&r&  SSK'J(r(J)r)J*r*J+r+J,r,J-r-J.r.J/r/J0r0J1r1J2r2J3r3  SSK4J5r5  SSK6J7r7  SSK8J9r9J:r:  SSK;J<r<  SSK=J>r>J?r?  SSK@JArAJBrB  SSKCJDrD  SSKEJFrF  SSKGJHrH  SSKIJJrJJKrK  SSKLJMrMJNrN  SSKOJMrP  SSKQJRrR  \(       a  SSKSJTrT  \U" \" SS5      5      rV\U" \" S S!5      5      rWS" rXS# rYS$ rZS% r[S& r\S' r]            S.S( jr^ " S) S*\R                  5      r`\aS+:X  a  \R                  " S,S-9  gg)/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)TYPE_CHECKING)assert_allclose)AttributeProtoFunctionProto
ModelProtoTensorProtocheckerparser)get_roi_align_input_values)check_model)onnx_opset_version)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)
from_array)ReferenceEvaluator)OpRunOpRunExpand)load_op)_get_indices_is_out)Cast_19Celu)Adam)_apply_causal)_vcelu1)_col2im_naive_implementation_2dcol2im_naive_implementation)Conv_conv_implementation)r/   )_conv_implementation_im2col)SequenceORT_MAX_IR_SUPPORTED_VERSION8$ORT_MAX_ONNX_OPSET_SUPPORTED_VERSION18c                0   ^  [        T 5      U 4S j5       nU$ )Nc                    > [         R                  R                  S5      c  [        R                  " S5      eT" U 0 UD6  g )Nonnxruntimezonnxruntime not installed	importlibutil	find_specunittestSkipTestargskwargsfns     a/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/onnx/test/reference_evaluator_test.pywrapper'skip_if_no_onnxruntime.<locals>.wrapperX   7    >>##M2:##$?@@
DF    r   rC   rE   s   ` rD   skip_if_no_onnxruntimerJ   W        
2Y 
 NrH   c                0   ^  [        T 5      U 4S j5       nU$ )Nc                    > [         R                  R                  S5      c  [        R                  " S5      eT" U 0 UD6  g )Ntorchztorch not installedr:   r@   s     rD   rE   !skip_if_no_torch.<locals>.wrapperb   s7    >>##G,4##$9::
DFrH   r   rI   s   ` rD   skip_if_no_torchrP   a   rK   rH   c                0   ^  [        T 5      U 4S j5       nU$ )Nc                    > [         R                  R                  S5      c  [        R                  " S5      eT" U 0 UD6  g )Ntorchvisionztorchvision not installedr:   r@   s     rD   rE   'skip_if_no_torchvision.<locals>.wrapperl   rG   rH   r   rI   s   ` rD   skip_if_no_torchvisionrU   k   rK   rH   c                r    [        U[        5      (       a  [        XU5      $ [        U5      n[	        XU5      $ N)
isinstanceintr   r   r    )name	elem_typeshapes_types       rD   make_sequence_value_infor^   u   s3    )S!!.tFF%i0F4//rH   c                    SS K n[        nU R                   H!  nUR                  S;   d  M  UR                  n  O   U R
                  [        :  d
  U[        :  a  g UR                  U R                  5       S/S9$ )Nr   ) zai.onnxCPUExecutionProvider)	providers)	r9   r5   opset_importdomainversion
ir_versionr3   InferenceSessionSerializeToString)
onnx_modelortonnx_domain_opsetopsets       rD   run_ort_inferencerm   |   s{    <((<<?* % ) 	 <<CC$$&3I2J    rH   c           	        [        U[        5      (       d  [        S[        U5      < S35      e[	        U R
                  5      [	        U5      :w  a  [        SU R
                  < SU< S35      e[	        U5      S-  n[        R                  " [        U5       Vs/ s H  ocU   X6U-      4PM     sn5      n[        U R
                  U-   5      n[        U5       HC  n	X   X   S-
  X)   S-
  -  -   n
[        X   U
-
  Xy   S   -   Xy   S   -   XI   -  S-   5      nXU	'   ME     [        U5      n[        R                  " XR                  S	9n[        R                  " U5      n[        R                  " UR
                  S
U*  5      n[        U5       H  n[        XmR
                  S
U*  5      n[        U5      n[        U5       Hs  n[        UU5      n[        U5      nUU-  US
S
2S4   -
  UU-  -   n[        U5      n[!        UU R
                  5      (       a
  SUUU-   '   M_  U [        U5         UUU-   '   Mu     M     U$ s  snf )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)rX   tuple	TypeErrortypelenr\   
ValueErrornparrayrangelistrY   zerosrs   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                          rD   im2col_naive_implementationr      s*    lE***4+=*@@RSTT
4::#l++?4::.l=MQOPPY!^FxxeFmLmq'4F
#34mLMHTZZ,676]_! 3	q8HII"R'(+a.88;q>IWZW
  "!  *+L
((<zz
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   H=c           	        S n[        U R                  S   5       Hw  n[        U R                  S   5       HX  n[        XUS4   XX45      nUc:  U R                  S S UR                  -   n	[        R                  " XR
                  S9nXXgS4'   MZ     My     / UR                  S [        U5      *  QSP7n	UR                  U	5      $ )Nr   rq   .rp   rr   )r{   r\   r   ry   emptyrs   rw   reshape)
imgr   r   r   r   r   ncout	new_shapes
             rD   im2colr      s     C399Q< syy|$A-q#IC {IIbqMCII5	hhy		: c	N % ! 7#))0s<001626I;;y!!rH   c                  v   \ rS rSrSr\GS7S j5       r\GS8S j5       rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS r S r!S  r"S! r#S" r$S# r%S$ r&S% r'S& r(S' r)S( r*S) r+S* r,S+ r-S, r.S- r/S. r0S/ r1\2S0 5       r3\2S1 5       r4S2 r5S3 r6S4 r7S5 r8S6 r9S7 r:S8 r;S9 r<\=S: 5       r>S; r?\=S< 5       r@\=S= 5       rAS> rBS? rCS@ rDSA rESB rFSC rGSD rHSE rISF rJSG rKSH rLSI rMSJ rN\2SK 5       rOSL rP\=\QSM 5       5       rRSN rSSO rTSP rUSQ rVSR rWSS rXST rYSU rZ\GS9SW j5       r[\\R                  R                  \^R                  " SX\`R                  " \`R                  \`R                  /SYSZ//\`R                  S[9\`R                  " S\S]/S^S_//\`R                  S[9/4S`\`R                  " SaSb/ScSd//\`R                  S[9\`R                  " SeSf/SgSf//\`R                  S[9/4Sh\`R                  " SiSj/SkSl//\`R                  S[9\`R                  " SmSe/SgSf//\`R                  S[9/4Sn\`R                  " SoSp/SqSr//\`R                  S[9\`R                  " SfSe/SgSf//\`R                  S[9/4Ss\`R                  " StSu/SvSw//\`R                  S[9\`R                  " SgSf/SgSf//\`R                  S[9/4Sx\`R                  " SySz/S{S|//\`R                  S[9\`R                  " SgSm/SgSm//\`R                  S[9/4S}\`R                  " S~S/SS//\`R                  S[9\`R                  " SgSf/SgSf//\`R                  S[9/4SV\`R                  " SS/SS//\`R                  S[9\`R                  " SmSe/SgSf//\`R                  S[9/4S\`R                  " \`R                  \`R                  /SYSZ//\`R                  S[9\`R                  " S\S]/SgSf//\`R                  S[9/4/	SSe/5      5      GS:S j5       re\\R                  R                  / SQ5      GS;GS<S jj5       rfS rgS rhS riS rjS rkS rlS rm\nR                  " \pR                  " S5      S5      S 5       rrS rsS rtS ruS rvS rwS rxS ryS rzS r{S r|\\R                  R                  S_\`R                  " S5      R                  SS_5      -  \`R                  " SS5      R                  SS\5      \`R                  " S5      SS\/ SQ/ SQ/ SQ/4S_\`R                  " S5      R                  SS_5      -  \`R                  " SS5      R                  SS\5      \`GR                   " S5      SS\/ SQ/ SQ/ SQ/4\`R                  " S5      R                  SS5      / SQ/ SQ/ SQ/\`R                  " S5      SS/ SQ/ SQ/ SQ/4\`R                  " Sf5      SS/SS/SS/ SQ4\`GR                   " S5      \`GR                   " S5      \`R                  " S5      SSS4\`GR                   " S5      \`GR                   " S5      \`R                  " S5      S\S\S4/5      S 5       r\\R                  R                  \`R                  " S5      R                  SS_5      \`R                  " SS5      R                  SS\5      \`R                  " S5      SS\/ SQ/ SQ/ SQ/4\`R                  " S5      R                  SS_5      \`R                  " SS5      R                  SS\5      \`GR                   " S5      SS\/ SQ/ SQ/ SQ/4\`GR                  " \`R                  " S_5      R                  S\S\5      /S_-  5      \`GR                  " \`R                  " SS/S\S//5      \`R                  " S_S/SfS//5      /5      \`R                  " S5      S\S\/ SQ/ SQ// SQ/ SQ//4\`R                  " S5      R                  SS5      / SQ/ SQ/ SQ/\`R                  " S5      SS/ SQ/ SQ/ SQ/4\`R                  " Sf5      S\S/SS\/SS/ SQ4\`GR                   " S5      \`GR                   " S5      \`R                  " S5      SSS4\`GR                   " S5      \`GR                   " S5      \`R                  " S5      S\S\S4/5      S 5       rS rS rS rS rS rS rS rS rS r\\R                  R                  / SQ5      S 5       r\\R                  R                  / SQ5      S 5       rS rS rS r\\R                  R                  SS/SS/SS/S4/ SQS// SQS4S/ SQ/ SQ/ SQS4/5      S 5       r\\R                  R                  SS/SS/ SQ/ SQ/SS/4/ SQSSSS/SS/SS/// SQ4/ SQSSSS/SS/SS/// SQ4/ SQ/ SQ/SS/ SQ/ SQ/ SQ// SQ/ SQ/ SQ/// SQ/ SQ/4/ SQSS/ SQ/ SQ/ SQ// GS Q4/ SQSS/ SQ/ SQ/ SQ// GS Q4GSGS/GSS/ GSQ/ GSQ/SfSf/4/ GSS\\`R                  " / 5      R                  GS5      / 4/5      GS 5       rGS	 r\\R                  R                  / GS
QGS/ GSQS4/ GSQ/ GSQ/GS/ GSQ/ GSQ/GS4/ GSQGS/ GSQGS4/5      GS 5       rGS r\\R                  R                  \GR0                  / GSQ/ GSQ4\GR0                  / GSQ/ GSQ4\GR0                  S/S/4\GR2                  / GSQ/ GSQ4\GR2                  / GSQ/ GSQ4\GR2                  S/S/4/5      GS  5       r\\R                  R                  \^R                  " \GR6                  \GR8                  4\GR0                  \GR2                  45      5      GS! 5       r\\R                  R                  \^R                  " \GR0                  \GR2                  4\GR6                  \GR8                  45      5          GS=GS" j5       r\\R                  R                  \GR>                  / GSQ/ GS#Q4\GR>                  / GSQ/ GS$Q4\GR>                  S/S/4\GR@                  / GSQ/ GS%Q4\GR@                  / GSQ/ GS&Q4\GR@                  S/S/4/5      GS' 5       r\\R                  R                  \^R                  " \GR6                  \GR8                  4\GR>                  \GR@                  45      5      GS( 5       r\\R                  R                  \^R                  " \GR>                  \GR@                  4\GR6                  \GR8                  45      5          GS=GS) j5       rGS* rGS+ rGS, r\\R                  R                  / GS-Q5      GS>GS. j5       r\\R                  R                  / GS/Q5      GS0 5       rGS1 rGS2 rGS3 rGS4 rGS5 rGS6rg(?  TestReferenceEvaluator   a6  
        <
            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                ^    [         R                  " U 5      n[        R                  " U5        U$ )zZParses a model from a string representation, including checking
the model for correctness
)r   parse_modelr   r   )m_defms     rD   _load_model"TestReferenceEvaluator._load_model   s'    
 u%ArH   Nc                  ^^ [        S[        R                  S S /5      n[        S[        R                  S S /5      n[        S[        R                  S S /5      n[        S[        R                  S /5      n[        SSS/S/5      nU (       GaC  [        SSS/S/5      n	Ubl  US	:  af  T(       a&  T(       a  [        S
S/S/TTS9n
O4[        S
S/S/TS9n
O%T(       a  [        S
S/S/TS9n
O[        S
S/S/5      n
[	        XU
/SXEU/U/5      nOT(       a,  [        [        R                  " T/[        R                  S9SS9OS nT(       a,  [        [        R                  " T/[        R                  S9SS9OS nSU(       a  SOSU(       a  SOS/n[        S
US/5      n
X4 Vs/ s H  o(       d  M  UPM     nn[	        XU
/SXEU/U/US9nUU4S jnO%[        SSS/S/5      n	[	        X/SXEU/U/5      nS nUc  [        U5      nO[        U[        SU5      /S9n [        U5        UU4$ s  snf ! [         a  n[        SU 35      UeS nAff = f)NXABYMatMulXAAddY_clip   Clip)minmax)r   )r   lrrr   mirZ   mar`   initializerc                >   > [         R                  " X-  U-   TT5      $ rW   )ry   clip)xab	max_value	min_values      rD   f4TestReferenceEvaluator._linear_regression.<locals>.f  s    wwquqy)Y??rH   c                    X-  U-   $ rW    )r   r   r   s      rD   <lambda>;TestReferenceEvaluator._linear_regression.<locals>.<lambda>  s
    	rH   opset_importszchecker fails for
)r   r   FLOATr   r   r!   ry   rz   float32r   r   r   	ExceptionAssertionError)r   rl   r   r   r   r   r   r   node1node2node3graphr   r   inputs_r   r   ri   es     ``                rD   _linear_regression)TestReferenceEvaluator._linear_regression   si   "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"E%#8$q	A3O ! rxx2::FTR  ! rxx2::FTR 
 #BDBK!&&3%8+-(8(Qaq(8"5)4!QC[@ edC[3%8E~taAYDE)A=#E*J#E,r5:Q9RSJ	L
# 1}) 9$  	L #6zl!CD!K	Ls$   !
H*/H*H/ /
I9IIc                    [        S[        R                  S S /5      nU R                  [        5         [        U5        S S S 5        g ! , (       d  f       g = f)Nr   )r   r   r   assertRaisesru   r"   )selfr   s     rD   #test_reference_evaluator_exceptions:TestReferenceEvaluator.test_reference_evaluator_exceptions%  s<    "3(9(9D$<Hy)q! *))s   A
Ac                   [         R                  [         R                  5      n[        R                  " U5        [        U5      nU R                  UR                  / SQ5        U R                  UR                  S/5        U R                  UR                  SSS.5        [        R                  " SS/SS//[        R                  S	9n[        R                  " S
S/SS//[        R                  S	9n[        R                  " SS/SS//[        R                  S	9nUR                  S X4US.5      S   nX4-   XE-
  -  n[        Xg5        g NB01B11B21D0
   rq   r`   zcom.microsoftr   rp      rr               )r   r   m2_defr   r   r"   assertEqualinput_namesoutput_namesopsetsry   rz   r   runr   r   r   sessr   yzr   expecteds           rD   %test_reference_evaluator_no_attribute<TestReferenceEvaluator.test_reference_evaluator_no_attribute*  s   "../E/L/LMA!!$))+@A**TF32&BCHHq!fq!f%RZZ8HHq!fq!f%RZZ8HHr2hR)<hhtQ;<Q?Eae$&rH   c                   [         R                  [         R                  5      n[        R                  " U5        [        U5      nU R                  UR                  / SQ5        U R                  UR                  S/5        U R                  UR                  SSS.5        [        R                  " SS/SS//[        R                  S	9n[        R                  " S
S/SS//[        R                  S	9n[        R                  " SS/SS//[        R                  S	9nUR                  S X4US.SS9nU R                  U[        5        X4-   XE-
  -  n[!        US   U5        g )Nr   r   r   rq   r   r   rp   r   rr   r   r   r   r   r   r   r   r   T)intermediate)r   r   r   r   r   r"   r   r   r   r   ry   rz   r   r   assertIsInstancedictr   r   s           rD   2test_reference_evaluator_no_attribute_intermediateITestReferenceEvaluator.test_reference_evaluator_no_attribute_intermediate8  s!   "../E/L/LMA!!$))+@A**TF32&BCHHq!fq!f%RZZ8HHq!fq!f%RZZ8HHr2hR)<hhtQ;$hOc4(Eae$D	8,rH   c                   [         R                  [         R                  5      n[        R                  " U5        [        UR                  5       5      nU R                  UR                  / SQ5        U R                  UR                  S/5        U R                  UR                  SSS.5        [        R                  " SS/SS//[        R                  S	9n[        R                  " S
S/SS//[        R                  S	9n[        R                  " SS/SS//[        R                  S	9nUR                  S X4US.5      S   nX4-   XE-
  -  n[        Xg5        g r   )r   r   r   r   r   r"   rh   r   r   r   r   ry   rz   r   r   r   r   s           rD   +test_reference_evaluator_no_attribute_bytesBTestReferenceEvaluator.test_reference_evaluator_no_attribute_bytesG  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)<hhtQ;<Q?Eae$&rH   c           	        [         R                  [         R                  5      n[        R                  " SS/SS//[        R
                  S9n[        R                  " SS/SS	//[        R
                  S9n[        R                  " S
S/SS//[        R
                  S9nU R                  SS9   [        USS9n[        5       n[        U5         UR                  S X#US.5        S S S 5        UR                  5       nSnU R                  X5        S S S 5        U R                  SS9   [        USS9n[        5       n[        U5         UR                  S X#US.5        S S S 5        UR                  5       n[        S5      R                  S5      nU R                  X5        S S S 5        U R                  SS9   [        USS9n[        5       n[        U5         UR                  S X#US.5        S S S 5        UR                  5       n[        S5      R                  S5      nU R                  X5        S S S 5        U R                  SS9   [        USS9n[        5       n[        U5         UR                  S X#US.5        S S S 5        UR                  5       n[        S5      R                  S5      nU R                  X5        S S S 5        g ! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GNf= f! , (       d  f       GN+= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       g = f)Nr   rq   rp   r   rr   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   ry   rz   r   subTestr"   r   r   r   getvaluer   r	   lstrip)	r   r   r   r   r   r   stdoutr   logs	            rD   -test_reference_evaluator_no_attribute_verboseDTestReferenceEvaluator.test_reference_evaluator_no_attribute_verboseU  s   "../E/L/LMHHq!fq!f%RZZ8HHq!fq!f%RZZ8HHr2hR)<\\\"%a3DZF (q1=> )//#CQCS& # \\\"%a3DZF (q1=> )//#C
 fTl  S&' #* \\\"%a3DZF (q1=> )//#C
 fTl  S&' #* \\\#%a4DZF (q1=> )//#C$ fTl% & S&3 $#a )( #" )( #"0 )( #"0 )( $#s   . KK$+K& K>K,AK>6 L"L,AL" M&L3<AM
K	K
K),
K;	6K>>
L
L	L""
L03
M	=M
Mc                   [        S[        R                  S S/5      n[        S[        R                  S S/5      n[        SS/S/5      n[	        U/SU/U/5      n[        U5      nS H  nU R                  US9   [        XVS9n[        R                  " / [        R                  S	9R                  S
S5      n[        5       n	[        U	5         UR                  S SU05      n
S S S 5        Un[        W
S
   U5        U R!                  U
S
   R"                  S5        U	R%                  5       nU R'                  SU5        S S S 5        M     g ! , (       d  f       Nm= f! , (       d  f       GM  = f)Ninputr   outputIdentitytest_empty_array)rp   r   r   r  r  r	  rr   r   )r   r   )r   r   r   r   r   r   r  r"   ry   rz   r   r   r   r   r   r   r   r\   r  assertIn)r   input_tensoroutput_tensornoder   modelverbose_levelr   empty_inputr  resultr   r   s                rD   ,test_reference_evaluator_empty_array_verboseCTestReferenceEvaluator.test_reference_evaluator_empty_array_verbose  s4   -g{7H7H4QR)T.x9J9JTSTIVgY
;D6#5~W5!*MM2)%G hhr<DDQJ!$V,!XXdWk,BCF - 'q	84  &9oo'j#. 32 + -, 32s&   :AEE!AE
EE
E)	c                   [         R                  5       u  p[        R                  " SS/SS//[        R                  S9n[        R                  " SS/[        R                  S9n[        R                  " S/[        R                  S9nU" X4U5      n[        U5      nUR                  S XDUS.5      S   n[        X5        g )Nr   rq   rp   r   rr   r   r   r   r   )r   r   ry   rz   r   r"   r   r   )	r   r   r   r   r   r   r   r   gots	            rD   test_reference_evaluator_lr2TestReferenceEvaluator.test_reference_evaluator_lr  s    &99;HHq!fq!f%RZZ8HHaV2::.HHbT,Q1:!"%hht1156q9&rH   c                   U R                  SS9   [        R                  SS9u  p[        R                  " SS/SS//[        R
                  S	9n[        R                  " SS/[        R
                  S	9n[        R                  " S
/[        R
                  S	9nU" X4U5      n[        U5      nUR                  S   nU R                  UR                  R                  S5        UR                  S XDUS.5      S   n	[        X5        S S S 5        U R                  SS9   [        R                  SS S9u  p[        R                  " SS/SS//[        R
                  S	9n[        R                  " SS/[        R
                  S	9n[        R                  " S
/[        R
                  S	9nU" X4U5      n[        U5      nUR                  S   nU R                  UR                  R                  S5        UR                  S XDUS.5      S   n	[        X5        S S S 5        U R                  SS9   [        R                  SS S9u  p[        R                  " SS/SS//[        R
                  S	9n[        R                  " SS/[        R
                  S	9n[        R                  " S
/[        R
                  S	9nU" X4U5      n[        U5      nUR                  S   nU R                  UR                  R                  S5        UR                  S XDUS.5      S   n	[        X5        S S S 5        g ! , (       d  f       GN(= f! , (       d  f       GN.= f! , (       d  f       g = f)Nmin+maxoptT)r   r   rq   rp   r   rr   r   r   Clip_11r$  r   )r   r   r   )r   r   )r  r   r   ry   rz   r   r"   	rt_nodes_r   	__class____name__r   r   
r   r   r   r   r   r   r   r   	last_noder%  s
             rD    test_reference_evaluator_lr_clip7TestReferenceEvaluator.test_reference_evaluator_lr_clip  s   \\i\(*==4=HEB1a&1a&)<A!Qrzz2A"RZZ0AqzH%b)Dr*IY00999E((4qq!9:1=CC* ) \\e\$*==4SW=XEB1a&1a&)<A!Qrzz2A"RZZ0AqzH%b)Dr*IY00999E((4qq!9:1=CC* % \\e\$*==4SW=XEB1a&1a&)<A!Qrzz2A"RZZ0AqzH%b)Dr*IY00999E((4qq!9:1=CC* %$1 )( %$ %$s&   C4L%C5L7'C5M	%
L47
M	
Mc                
   U R                  SS9   [        R                  SSS9u  p[        R                  " SS/SS	//[        R
                  S
9n[        R                  " SS/[        R
                  S
9n[        R                  " S/[        R
                  S
9nU" X4U5      n[        U5      nUR                  S   nU R                  UR                  R                  S5        U R                  UR                  S5        U R                  UR                  S5        UR                  S XDUS.5      S   n	[        X5        S S S 5        U R                  SS9   [        R                  SSS S9u  p[        R                  " SS/SS	//[        R
                  S
9n[        R                  " SS/[        R
                  S
9n[        R                  " S/[        R
                  S
9nU" X4U5      n[        U5      nUR                  S   nU R                  UR                  R                  S5        U R                  UR                  S5        U R                  UR                  S5        UR                  S XDUS.5      S   n	[        X5        S S S 5        U R                  SS9   [        R                  SSS S9u  p[        R                  " SS/SS	//[        R
                  S
9n[        R                  " SS/[        R
                  S
9n[        R                  " S/[        R
                  S
9nU" X4U5      n[        U5      nUR                  S   nU R                  UR                  R                  S5        U R                  UR                  S5        U R                  UR                  S5        UR                  S XDUS.5      S   n	[        X5        S S S 5        g ! , (       d  f       GN= f! , (       d  f       GNg= f! , (       d  f       g = f)Nr)  r*  Tr   )r   rl   r   rq   rp   r   rr   r   r   Clip_6r$  r   )r   rl   r   g   r   )r   rl   r   g   G)r  r   r   ry   rz   r   r"   r-  r   r.  r/  r   r   r   r   r0  s
             rD   "test_reference_evaluator_lr_clip_69TestReferenceEvaluator.test_reference_evaluator_lr_clip_6  s>   \\i\(*==4r=REB1a&1a&)<A!Qrzz2A"RZZ0AqzH%b)Dr*IY00998DY]]B/Y]]A.((4qq!9:1=CC* ) \\e\$*==t > EB 1a&1a&)<A!Qrzz2A"RZZ0AqzH%b)Dr*IY00998DY]]A.Y]],BC((4qq!9:1=CC* %  \\e\$*==t > EB 1a&1a&)<A!Qrzz2A"RZZ0AqzH%b)Dr*IY00998DY]]B/Y]],AB((4qq!9:1=CC* %$= )( %$  %$s&   D-OD.O"D.O4
O"
O14
Pc                    [         R                  " S5      n[        U5      n[        R                  " / SQ[        R
                  S9R                  S5      nUR                  S SU05      S   nUn[        XE5        g )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   rq   r   rr   rq   rq   r   r   r   )	r   r   r"   ry   rz   uint8r   r   r   )r   r   r   r   r   r   s         rD   test_nested_local_functions2TestReferenceEvaluator.test_nested_local_functions   si    )+
Z "!$HHYbhh/77	B$a)!,)rH   c                   [        S[        R                  S S /5      n[        S[        R                  S /5      n[        SS/S/S/SS9n[	        U/SU/U/5      n[        U[        SS5      /S	9n[        U5        [        R                  " S
5      R                  S5      R                  [        R                  5      nUR                  SSS9n[        U5      nUR                  S SU05      S   n	[!        X5        g )Nr   r   	ReduceSumrq   axeskeepdimsrsr`   r   r   <   r   r   r   axisrA  r   r   r   r   r   r   r   r   r   ry   aranger   astyper   sumr"   r   r   
r   r   r   r   r   ri   r   r   r   r%  s
             rD   test_reduce_sum_11)TestReferenceEvaluator.test_reduce_sum_11T  s    "3(9(9D$<H"3(9(9D6B+use1#JE7D1#s3l2r6J5KL
JIIbM!!),33BJJ?55a!5,!*-hhtc1X&q)&rH   c                   [        S[        R                  S S /5      n[        S[        R                  S /5      n[        SS/S/S/SS9n[	        U/SU/U/5      n[        U[        SS5      /S	9n[        U5        [        R                  " S
5      R                  S5      R                  [        R                  5      nXf-  R                  SSS9n[        U5      nUR                  S SU05      S   n	[!        X5        g )Nr   r   ReduceSumSquarerq   r?  rB  r`   r   r   rC  rD  rE  r   rG  rK  s
             rD   test_reduce_sum_square_110TestReferenceEvaluator.test_reduce_sum_square_11a  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)&rH   c                v   [        S[        R                  S S /5      n[        S[        R                  S S /5      n[        S[        R                  S /5      n[	        SSS/S/SS9n[        U/SX/U/5      n[        U[        SS	5      /S
9n[        U5        [        R                  " S5      R                  S5      R                  [        R                  5      n[        R                  " S/[        R                  S9nUR!                  SSS9n	[#        U5      n
U
R%                  S XxS.5      S   n['        X5        g )Nr   r   r   r>  rq   rA  rB  r`      r   rC  rD  rr   rE  r   r   r   r   r   r   INT64r   r   r   r   r   ry   rH  r   rI  r   rz   int64rJ  r"   r   r   r   r   r   r   r   r   ri   r   r   r   r   r%  s               rD   test_reduce_sum_13)TestReferenceEvaluator.test_reduce_sum_13n  s   "3(9(9D$<H"3(9(9D$<H"3(9(9D6B+SzC51EE7D1&1#6l2r6J5KL
JIIbM!!),33BJJ?HHaS)55a!5,!*-hht1-.q1&rH   c           
     n   [        5       nSn[        SU5      [        US5      /n[        SSS/S/5      n[        5       nSUl        SUl        [        R                  Ul        UR                  R                  U5        [        US	SS/S/U/US/5      n[        S[        R                  S S /5      n[        S[        R                  S /5      n[        S[        R                  S /5      n	[        [        S	SS/S/USS
9/SXx/U	/5      n
[!        XU/S9n[#        U5      n[$        R&                  " S5      R)                  S5      R+                  [$        R,                  5      n[$        R.                  " S/[$        R0                  S9nUR3                  S XS.5      S   nUR5                  SSS9n[7        UU5        g )Ncustomr`   rq   r>  r   rF  r   rA  MyReduceSum)rd   rA  exampler   	functionsr   r   rp   r   rr   )r   rF  r   rE  )r   r   r   r   rZ   ref_attr_nameINTrv   	attributeappendr   r   r   r   rW  r   r   r"   ry   rH  r   rI  r   rz   rX  r   rJ  r   )r   rl   
new_domainr   r  attmy_reduce_sumr   rF  r   r   ri   r   r   r   r   r   s                    rD   test_reduce_sum_attribute0TestReferenceEvaluator.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-)rH   c                z   [        S[        R                  S S /5      n[        S[        R                  S S /5      n[        S[        R                  S /5      n[	        SSS/S/SS9n[        U/SX/U/5      n[        U[        SS	5      /S
9n[        U5        [        R                  " S5      R                  S5      R                  [        R                  5      n[        R                  " S/[        R                  S9nXw-  R!                  SSS9n	[#        U5      n
U
R%                  S XxS.5      S   n['        X5        g )Nr   r   r   rO  rq   rS  rB  r`      r   rC  rD  rr   rE  rU  r   rV  rY  s               rD   test_reduce_sum_square_180TestReferenceEvaluator.test_reduce_sum_square_18  s   "3(9(9D$<H"3(9(9D$<H"3(9(9D6B+c3Z#KE7D1&1#6l2r6J5KL
JIIbM!!),33BJJ?HHaS)E;;A;2!*-hht1-.q1&rH   c                r   [        S[        R                  S S /5      n[        S[        R                  S S /5      n[        S[        R                  S /5      n[	        SSS/S/SS9n[        U/SX/U/5      n[        U[        SS	5      /S
9n[        U5        [        R                  " S5      R                  S5      R                  [        R                  5      n[        R                  " / [        R                  S9nUR!                  SS9n	[#        U5      n
U
R%                  S XxS.5      S   n['        X5        g )Nr   r   r   r>  rq   rS  rB  r`   rT  r   rC  rD  rr   rU  r   rV  rY  s               rD   test_reduce_sum_13_empty_axes4TestReferenceEvaluator.test_reduce_sum_13_empty_axes  s   "3(9(9D$<H"3(9(9D$<H"3(9(9D6B+SzC51EE7D1&1#6l2r6J5KL
JIIbM!!),33BJJ?HHRrxx(55!5$!*-hht1-.q1&rH   c                v   [        S[        R                  S S /5      n[        S[        R                  S S /5      n[        S[        R                  S /5      n[	        SSS/S/SS9n[        U/SX/U/5      n[        U[        SS	5      /S
9n[        U5        [        R                  " S5      R                  S5      R                  [        R                  5      n[        R                  " / [        R                  S9nXw-  R!                  SS9n	[#        U5      n
U
R%                  S XxS.5      S   n['        X5        g )Nr   r   r   rO  rq   rS  rB  r`   rm  r   rC  rD  rr   rU  r   rV  rY  s               rD   $test_reduce_sum_square_18_empty_axes;TestReferenceEvaluator.test_reduce_sum_square_18_empty_axes  s
   "3(9(9D$<H"3(9(9D$<H"3(9(9D6B+c3Z#KE7D1&1#6l2r6J5KL
JIIbM!!),33BJJ?HHRrxx(E;;;*!*-hht1-.q1&rH   c                   [        S[        R                  S S /5      n[        S[        R                  S /5      n[        SS/S/SSS9n[	        U/SU/U/5      n[        U[        SS5      /S	9n[        U5        [        R                  " S
5      R                  S5      R                  [        R                  5      n[        U5      nUR                  S SU05      S   n[        Xh5        g )Nr   r   r>  rq   rA  noop_with_empty_axesrB  r`   rT  r   rC  rD  r   r   r   r   r   r   r   r   r   ry   rH  r   rI  r   r"   r   r   	r   r   r   r   r   ri   r   r   r%  s	            rD   "test_reduce_sum_13_empty_axes_noop9TestReferenceEvaluator.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)rH   c                   [        S[        R                  S S /5      n[        S[        R                  S /5      n[        SS/S/SSS9n[	        U/SU/U/5      n[        U[        SS5      /S	9n[        U5        [        R                  " S
5      R                  S5      R                  [        R                  5      n[        U5      nUR                  S SU05      S   n[        Xf-  U5        g )Nr   r   rO  rq   rw  rB  r`   rm  r   rC  rD  r   ry  rz  s	            rD   )test_reduce_sum_square_18_empty_axes_noop@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)s#rH   c                ^   [        S[        R                  S S /5      n[        S[        R                  S /5      n[        S[        R                  S /5      n[        SSS/S/5      n[	        U/SX/U/5      n[        U[        SS5      /S9n[        U5        [        R                  " S	5      R                  S
5      R                  [        R                  5      n[        R                  " S/[        R                  S9nXx:  n	[        U5      n
U
R                  S XxS.5      S   n[!        X5        g )Nr   r   ZGreatergr`   rT  r   r   rp   rp   rp   rr   r   r   r   r   r   r   r   r   r   r   r   ry   rH  r   rI  r   rz   r"   r   r   r   r   r   r  r   r   ri   r   r   r   r   r%  s               rD   test_greater#TestReferenceEvaluator.test_greater  s    "3(9(9D$<H"3(9(9D6B"3(9(9D6B)c3Z#7E7C!!5l2r6J5KL
JIIaL  (//

;HHaS

+5!*-hht1-.q1&rH   c                R   [        SSS/S/5      n[        R                  " S5      R                  S5      R	                  [        R
                  5      n[        R                  " S/[        R
                  S9nX#:  n[        U5      nUR                  S X#S	.5      S
   n[        Xd5        g )Nr  r   r   r  r   r  rp   rr   r  r   )
r   ry   rH  r   rI  r   rz   r"   r   r   )r   r   r   r   r   r   r%  s          rD   test_node_proto&TestReferenceEvaluator.test_node_proto  s    )c3Z#7IIaL  (//

;HHaS

+5!%(hht1-.q1&rH   c                ^   [        S[        R                  S S /5      n[        S[        R                  S /5      n[        S[        R                  S /5      n[        SSS/S/5      n[	        U/SX/U/5      n[        U[        SS5      /S9n[        U5        [        R                  " S	5      R                  S
5      R                  [        R                  5      n[        R                  " S/[        R                  S9nXx:  n	[        U5      n
U
R                  S XxS.5      S   n[!        X5        g )Nr   r   r  GreaterOrEqualr  r`   rT  r   r   r  rp   rr   r  r   r  r  s               rD   test_greater_or_equal,TestReferenceEvaluator.test_greater_or_equal  s    "3(9(9D$<H"3(9(9D6B"3(9(9D6B*S#J>E7C!!5l2r6J5KL
JIIaL  (//

;HHaS

+6!*-hht1-.q1&rH   c                   [        S[        R                  S /5      n[        S/ S/[	        [
        R                  " S/[
        R                  S95      S9n[        U/S/ U/5      n[        S[        R                  S /5      n[        S/ S/[	        [
        R                  " S/[
        R                  S95      S9n[        U/S/ U/5      n[	        [
        R                  " S/[
        R                  S9S	S
9n[        SSS	/S/5      n[        SS/S/UUS9n[        S[        R                  S S /5      n	[        S[        R                  S /5      n
[        Xx/SU	/U
/U/S9n[        U5      n[        U5      nU R                  [        U5      S5        [
        R                  " S/[
        R                  S9nUR                  S SU05      S   n[        [
        R                  " S/[
        R                  S9U5        [
        R                  " S/[
        R                  S9nUR                  S SU05      S   n[        [
        R                  " S/[
        R                  S9U5        g )NCConstantrq   rr   )value_floatsgthenr   gelsezeror   r  r   GIfr  )then_branchelse_branchr  r   zReferenceEvaluator(X) -> Zr   )r   r   r   r   r!   ry   rz   r   r   r   r"   r   strr   r   )r   r  bthen
bthen_bodybelse
belse_bodyr  greaternode_ifr   r  r   	model_defr   r   r%  s                   rD   test_if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G-sQC!4&Qu%	!),T$@AHHaS

+hhtc1X&q)!BJJ7=HHbT,hhtc1X&q)!BJJ7=rH   c           
        [        S[        R                  S/5      n[        S[        R                  S/5      n[        R                  " / SQ5      R                  [        R                  5      n[        R                  " / SQ5      R                  [        R                  5      n[        S/ S/[        U5      S9n[        S/ S/[        U5      S9n[        U/S/ U/5      n[        U/S	/ U/5      n[        S
S/S/UUS9n	[        5       n
SU
l        SU
l        U
R                  R                  S/5        U
R                  R                  S/5        U
R                   R                  U	/5        [#        5       nU
R$                  R                  ['        SU5      /5        [        [        SSS/S/S9/S[        S[        R(                  / 5      /[        S[        R                  S/5      /S9n[+        US['        SU5      ['        SS5      /S9nUR,                  R                  U
/5        [/        U5      nUR1                  S S[        R                  " S5      05      n[        R                  " / SQ[        R                  S9n[3        US   U5        g )Nthen_outr   else_outrq   rp   r   r   r   )r   r   r   rp   rq   r  r   outputsvalue	then_body	else_bodyr  f_condf_resr   r  r  r  r]  rC   r`   condr   )rd   r   r  r   )nodesrZ   r   r  testrq   )producer_namer   Trr   r   )r   r   r   ry   rz   rI  r   r   r!   r   r   rd   rZ   r  extendr  r  r   rc   r   BOOLr   ra  r"   r   r   )r   r  r  r   r   then_const_nodeelse_const_noder  r  if_noder   rl   r   r   r   r   r   s                    rD   test_if_function'TestReferenceEvaluator.test_if_functionJ  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::>q	8,rH   c                   [        5       nSn[        SU5      [        US5      /n[        S/ S/5      n[        5       nSUl        SUl        [        R                  Ul        UR                  R                  U5        [        SS	S
/S/5      n[        SSS/S/5      n[        USS	S
/S/XFU/US/5      n[        S	[        R                  S S /5      n	[        S
[        R                  S S /5      n
[        S[        R                  S /5      n[        [        SS	S
/S/U[        S[        R                  S/S/5      S9[        SS/S/5      /SX/U/5      n[!        XU/S9n[#        U5      n[$        R&                  " S5      R)                  S5      R+                  [$        R,                  5      n[$        R.                  " SS/[$        R,                  S9nUR1                  S UUS.5      S   n[$        R2                  " UU-  S-   5      n[5        UU5        g )Nr]  r`   rq   r  r   r  biasr   r   r   r   r   r   LinearRegressionY1former_Bq=
ףp?)rd   r  Absr_  r`  r   rb  r   rr   rU  r   )r   r   r   r   rZ   rc  TENSORrv   re  rf  r   r   r   r   r   r   r   r"   ry   rH  r   rI  r   rz   r   absr   )r   rl   rg  r   cstrh  r   r   linear_regressionr   r   r   r   ri   r   r   r   r   r   s                      rD   test_function_attribute.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%$,')rH   c                :	   [        5       nSn[        SU5      [        US5      /n[        S/ S/5      n[        5       nSUl        SUl        [        R                  Ul        UR                  R                  U5        [        S/ S/5      n[        5       nSUl        S	Ul        [        R                  Ul        UR                  R                  U5        [        S[        R                  S /5      n[        S[        R                  S /5      n[        U/S
/ U/5      n	[        U/S/ U/5      n
[        S/ S/[        [        R                   " S/[        R"                  S95      S9n[        SS/S/5      n[        SSS/S/5      n[        SS/S/U	U
S9n[        SSS/S/5      n[        SSS/S/5      n[%        USSS/S/XXUU/USS	/5      n[        S[        R                  S S /5      n[        S[        R                  S S /5      n[        S[        R                  S /5      n[        [        SSS/S/U['        S[        R                  S/S /5      ['        S![        R                  S/S"/5      S#9[        S$S/S/5      /S%UU/U/5      n[)        UUU/S&9n[+        U5        [-        U5      nU R/                  UR0                  S   R2                  R4                  S'5        U R/                  UR0                  S   R6                  R2                  R4                  S(5        UR0                  S   R6                  nS)nUR0                   HZ  nUR2                  R4                  R9                  S5      (       d  M/  UR:                  (       d  [=        S*[        U5       S+35      eS,nM\     U(       d  [=        S-5      e[        R>                  " S.5      RA                  S/5      RC                  [        R"                  5      n[        R                   " SS0/[        R"                  S9nURE                  S US-   US1.5      S   n[        RF                  " UU-  S -   5      n[I        UU5        URE                  S US2-
  US1.5      S   n[        RF                  " UU-  S"-   5      n[I        UU5        g )3Nr]  r`   rq   r  B1r  bias1B2bias2r  r  r  r   rr   r  	ReduceMinr   Xminr  r  r  r   r  r   r   r   r   r   r  r  	former_B1r  	former_B2	  )rd   r  r  r  r_  r`  
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   rb  r   rU  r   )%r   r   r   r   rZ   rc  r  rv   re  rf  r   r   r   r   r!   ry   rz   r   r   r   r   r   r"   r   r-  r.  r/  impl_
startswithhas_linked_attributer   rH  r   rI  r   r  r   )r   rl   rg  r   cst1rh  cst2r  r  r  r  r  minir  r  r   r   r  r   r   r   r   ri   r   fctcheckedr  r   r   r   r   s                                  rD   $test_function_attribute_nested_graph;TestReferenceEvaluator.test_function_attribute_nested_graph  sd   "$
%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%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%%MMD~~&&11$7700(&tDzl 3/ 0   "  T  IIaL  (//

;HHaWBJJ/$a!e! 45a866!a%$,')$a"f1 56q966!a%#+&)rH   c                	   [        5       nSn[        SU5      [        US5      /n[        S/ S/5      n[        5       nSUl        SUl        [        R                  Ul        UR                  R                  U5        [        S/ S/5      n[        5       nSUl        S	Ul        [        R                  Ul        UR                  R                  U5        [        S[        R                  S /5      n[        S[        R                  S /5      n[        U/S
/ U/5      n	[        U/S/ U/5      n
[        S/ S/[        [        R                   " S/[        R"                  S95      S9n[        SSS/S/5      n[        SS/S/U	U
S9n[        S/ S/5      n[        5       nSUl        SUl        [        R                  Ul        UR                  R                  U5        [        S[        R                  S /5      n[        U/S
/ U/5      n[        S[        R                  S /5      n[        XU/S/ U/5      n[        S/ S/[        [        R                   " S/[        R"                  S95      S9n[        SS/S/5      n[        SSS/S/5      n[        SS/S/UUS9n[        SSS /S!/5      n[        S"S!S/S#/5      n[%        US$SS /S#/UUXUU/U/ S%Q5      n[        S[        R                  S S /5      n[        S [        R                  S S /5      n[        S#[        R                  S /5      n[        [        S$SS /S&/U['        S'[        R                  S/S(/5      ['        S)[        R                  S/S*/5      ['        S+[        R                  S/S,/5      S-9[        S.S&/S#/5      /S/UU/U/5      n[)        UUU/S09n[+        U5        [-        U5      n[        R.                  " S15      R1                  S25      R3                  [        R"                  5      n[        R                   " SS3/[        R"                  S9nUR5                  S US-   US4.5      S   n[        R6                  " UU-  S*-   5      n[9        UU5        UR5                  S US5-
  US4.5      S   n[        R6                  " UU-  S6-
  5      n[9        UU5        UR5                  S US7-   US4.5      S   n[        R6                  " UU-  S(-   5      n[9        UU5        g )8Nr]  r`   rq   r  r  r  r  r  r  r  r  c100d   rr   r  r  r  
f_cond_100r  B4r  B3bias3r  r   r  r   Lessf_cond_zeror   r   r   r   r   r   r  )r  r  r  r  r  r  r  r  	former_B3i)rd   r  r  r  r  r_  r`  r   rb  r   rU  r   ix  i  )r   r   r   r   rZ   rc  r  rv   re  rf  r   r   r   r   r!   ry   rz   r   r   r   r   r   r"   rH  r   rI  r   r  r   ) r   rl   rg  r   r  rh  r  r  r  
then_body1
else_body1r  r  r  cst3
then_body2
else_body2r  r  r   r   r  r   r   r   r   ri   r   r   r   r   r   s                                    rD   +test_function_attribute_nested_nested_graphBTestReferenceEvaluator.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w 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%$,')rH   c                    " S S5      n " S S[         5      n " S S[         5      n[        S[        R                  S S /5      n[        S[        R                  S /5      n[	        SS/S/S	S
S9n[        U/SU/U/5      n[        U[        S
S5      /S9n[        R                  " S5      R                  S5      R                  [        R                  5      S-   n	U R                  [        5         [        U5        S S S 5        [	        SS/S/S	S
S9n[        U/SU/U/5      n[        U[        S
S5      /S9nU R                  [         5         [        X/S9  S S S 5        [	        SS/S/S	S
S9n[        U/SU/U/5      n[        U[        S
S5      /S9nU R                  [        5         [        X/S9  S S S 5        [	        SS/S/S	S
S9n[        U/SU/U/5      n[        U[        S
S5      /S9n[        XU/S9n
U
R#                  S SU	05      S   nSU	S	-   -  n[%        X5        g ! , (       d  f       GN4= f! , (       d  f       N= f! , (       d  f       N= f)Nc                  $    \ rS rSrSrS rS rSrg):TestReferenceEvaluator.test_custom_node.<locals>._InvAlphai  r]  c                    Xl         X l        g rW   	onnx_node
run_params)r   r  r  s      rD   __init__CTestReferenceEvaluator.test_custom_node.<locals>._InvAlpha.__init__  s    !*",rH   c                &    SXR                   -   -  4$ Nrq   alphar   r   s     rD   _run?TestReferenceEvaluator.test_custom_node.<locals>._InvAlpha._run      Q^,..rH   r  N)r/  
__module____qualname____firstlineno__	op_domainr  r  __static_attributes__r   rH   rD   	_InvAlphar    s     I-/rH   r  c                      \ rS rSrS rSrg):TestReferenceEvaluator.test_custom_node.<locals>.InvAlpha2i  c                &    SXR                   -   -  4$ r  r  r  s     rD   r  ?TestReferenceEvaluator.test_custom_node.<locals>.InvAlpha2._run  r   rH   r   N)r/  r  r  r  r  r  r   rH   rD   	InvAlpha2r    s    /rH   r  c                  "    \ rS rSrSrSS jrSrg)9TestReferenceEvaluator.test_custom_node.<locals>.InvAlphai  r]  Nc                <    U=(       d    U R                   nSX-   -  4$ r  r  r   r   r  s      rD   r  >TestReferenceEvaluator.test_custom_node.<locals>.InvAlpha._run  s    +QY))rH   r   rW   r/  r  r  r  r  r  r  r   rH   rD   InvAlphar    s     I*rH   r  r   r         ?r]  r  rd   rB  rq   r   rC  rD  new_opsr   )r#   r   r   r   r   r   r   r   ry   rH  r   rI  r   r   NotImplementedErrorr"   ru   r   r   )r   r  r  r  r   r   r   r   ri   r   r   r%  r   s                rD   test_custom_node'TestReferenceEvaluator.test_custom_node  s=   	/ 	/	/ 	/	*u 	* #3(9(9D$<H"3(9(9D6B*secU#hOE7D1#s3l8Q6O5PQ
IIbM!!),33BJJ?!C23z* 4 +use3xPE7D1#s3l8Q6O5PQ
y)z;? * +use3xPE7D1#s3l8Q6O5PQ
23z;? 4 *secU#hOE7D1#s3l8Q6O5PQ
!*6JKhhtc1X&q)C=&+ 43 *) 43s$   1H*H<,I*
H9<
I

Ic                "    " S S[         5      n[        S[        R                  S S /5      n[        S[        R                  S /5      n[	        SS/S/SSS9n[        U/SU/U/5      n[        U[        SS	5      /S
9n[        R                  " S5      R                  S5      R                  [        R                  5      S	-   n[        Xa/S9nU R                  [        5         UR!                  S SU05        S S S 5        g ! , (       d  f       g = f)Nc                  "    \ rS rSrSrSS jrSrg)DTestReferenceEvaluator.test_custom_no_output_tuple.<locals>.InvAlphai  r]  Nc                :    U=(       d    U R                   nSX-   -  $ r  r  r  s      rD   r  ITestReferenceEvaluator.test_custom_no_output_tuple.<locals>.InvAlpha._run  s    +AI&rH   r   rW   r  r   rH   rD   r  r    s     I'rH   r  r   r   r  r]  r  rB  rq   r   rC  rD  r  r#   r   r   r   r   r   r   r   ry   rH  r   rI  r   r"   r   ru   r   	r   r  r   r   r   r   ri   r   refs	            rD   test_custom_no_output_tuple2TestReferenceEvaluator.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 Z@y)GGD3(# *))   "D  
Dc                "    " S S[         5      n[        S[        R                  S S /5      n[        S[        R                  S /5      n[	        SS/S/SSS9n[        U/SU/U/5      n[        U[        SS	5      /S
9n[        R                  " S5      R                  S5      R                  [        R                  5      S	-   n[        Xa/S9nU R                  [        5         UR!                  S SU05        S S S 5        g ! , (       d  f       g = f)Nc                  "    \ rS rSrSrSS jrSrg)ATestReferenceEvaluator.test_custom_empty_output.<locals>.InvAlphai  r]  Nc                    AAg)Nr   r   r  s      rD   r  FTestReferenceEvaluator.test_custom_empty_output.<locals>.InvAlpha._run  s
    urH   r   rW   r  r   rH   rD   r  r'    s     IrH   r  r   r   r  r]  r  rB  rq   r   rC  rD  r  )r#   r   r   r   r   r   r   r   ry   rH  r   rI  r   r"   r   rx   r   r   s	            rD   test_custom_empty_output/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 Z@z*GGD3(# +**r$  c                "    " S S[         5      n[        S[        R                  S S /5      n[        S[        R                  S /5      n[	        SS/S/SSS9n[        U/SU/U/5      n[        U[        SS	5      /S
9n[        R                  " S5      R                  S5      R                  [        R                  5      S	-   n[        Xa/S9nU R                  [        5         UR!                  S SU05        S S S 5        g ! , (       d  f       g = f)Nc                  "    \ rS rSrSrSS jrSrg)@TestReferenceEvaluator.test_custom_tuple_tuple.<locals>.InvAlphai  r]  Nc                    U=(       d    U R                   n[        [        SX-   -  /5      /5      n[        U[        5      (       d   e[        US   [        5      (       d   eU$ )Nrq   r   )r  rt   rX   )r   r   r  r   s       rD   r  ETestReferenceEvaluator.test_custom_tuple_tuple.<locals>.InvAlpha._run  sZ    +UAO#4567!#u----!#a&%0000
rH   r   rW   r  r   rH   rD   r  r.    s     IrH   r  r   r   r  r]  r  rB  rq   r   rC  rD  r  r  r   s	            rD   test_custom_tuple_tuple.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 Z@y)GGD3(# *))r$  c                >  ^	  " S S5      m	 " U	4S jS[         5      n[        S[        R                  S S /5      n[        S[        R                  S /5      n[	        SS/S/SSS	9n[        U/S
U/U/5      n[        U[        SS5      /S9n[        R                  " S5      R                  S5      R                  [        R                  5      S-   n[        Xa/S9nU R                  [        5         UR!                  S SU05        S S S 5        g ! , (       d  f       g = f)Nc                      \ rS rSrSrg)LTestReferenceEvaluator.test_custom_tuple_unexpected_type.<locals>.CustomTypei  r   Nr/  r  r  r  r  r   rH   rD   
CustomTyper5        rH   r7  c                  *   > \ rS rSrSrSU 4S jjrSrg)JTestReferenceEvaluator.test_custom_tuple_unexpected_type.<locals>.InvAlphai  r]  Nc                v   > AAT" 5       4n[        U[        5      (       d   e[        US   T5      (       d   eU$ )Nr   )rX   rt   )r   r   r  r   r7  s       rD   r  OTestReferenceEvaluator.test_custom_tuple_unexpected_type.<locals>.InvAlpha._run  s@    u!|o!#u----!#a&*5555
rH   r   rW   r  )r7  s   rD   r  r:    s     I rH   r  r   r   r  r]  r  rB  rq   r   rC  rD  r  r  )
r   r  r   r   r   r   ri   r   r!  r7  s
            @rD   !test_custom_tuple_unexpected_type8TestReferenceEvaluator.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 Z@y)GGD3(# *))s   0D
Dc                   [        S[        R                  / 5      n[        S[        R                  / 5      n[        S[        R                  / 5      n[	        S[        R
                  S 5      n[	        S[        R
                  S 5      n[        R                  " / SQ5      R                  [        R                  5      n[        S/ S/[        S	[        R
                  UR                  UR                  5       R                  [        5      S
9S9n[        S/ S/[        S[        R                  SS/S
9S9n[        S/ S/[        S[        R                  SS/S
9S9n	[        S/ S/[        S[        R                  SS/S
9S9n
[        SSS/S/S9n[        SSS/S/S9n[        S/ SQS/S9n[        SSS/S/S9n[        SS/S/S9n[        UUUU	UU
UUU/	S X1U/X%/5      n[        S!/ S"QS#/US$9n[        S%S#/S&/SSS'9n[        R                  " S(5      R                  [        R                   5      n/ n[        R                  " S5      R                  [        R"                  5      n[%        [        S)[        S*[        R                  UR                  5      [        S+[        R                  UR                  5      ['        S,[        R
                  / 5      /[        S&[        R
                  S 5      /UU/S-9S.9n[        R                  " / S/Q[        R                  S09n[)        U5      nUUUS".nUR+                  S U5      n[-        US   U5        g )1Ncond_incond_out
iter_countseq_inseq_outr  r  r   const_tensor_x)rZ   	data_typedimsvalsr  oneconst_tensor_oner   rq   slice_startconst_tensor_zerorq   r   r@  const_tensor_axesr   endr   r  	Unsqueeze	slice_endSlice)r   rK  rR  	slice_outSequenceInsertr  	loop_bodyLoop)
trip_countr  	seq_emptyseq_res)r   r  bodyConcatFromSequencer   )r   r  rF  new_axisr   	loop_testrX  r  rY  )rZ   r   r  r  )r   )      ?r_         @r_  r`        @r_  r`  ra        @r_  r`  ra  rb        @rr   )r   r   r  rW  r   r   ry   rz   rI  r   r   r   r\   flattenfloatr   rX  bool_r   r^   r"   r   r   )r   r@  rA  rB  rC  rD  r   x_const_nodeone_const_nodezero_const_node	axes_nodeadd_nodeend_unsqueeze_node
slice_nodeinsert_nodeidentity_noderV  r  node_concatrX  rY  r  r  r   oinfr   r%  s                              rD   	test_loop TestReferenceEvaluator.test_loop#  sY   
 )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"
 &)
	" 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)rH   c           	     v   [        S[        R                  S /5      n[        S[        R                  S /5      n[        SS/S/SS9n[	        U/SU/U/5      n[        U5      n[        U5        [        U5      nUR                  S S[        R                  " S[        R                  S9S	-   05      S
   nU R                  UR                  S5        U R                  UR                  [        R                  5        U R                  UR!                  5       S5        U R#                  UR%                  5       S5        g )Nr   r   	Bernoulli        seedr  rp   r   rr   r  r   gh㈵grZ|
 ?r   r   r   r   r   r   r   r"   r   ry   r}   r   r   r\   rs   assertGreaterr   
assertLessr   r   r   r   r   r   ri   r   r%  s           rD   test_onnxt_runtime_bernoulli3TestReferenceEvaluator.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,rH   c                   [        S[        R                  S /5      n[        S/ S/SSS/S9n[	        U/S/ U/5      n[        U5      n[        U5        [        U5      nUR                  S 0 5      S   nU R                  UR                  S	5        U R                  UR                  [        R                  5        U R                  UR                  5       S5        U R!                  UR#                  5       S
5        g )Nr   RandomUniformrv  rp   r   rx  r\   r  r   ry  rq   )r   r   r   r   r   r   r   r"   r   r   r\   rs   ry   r   r{  r   r|  r   r   r   r   r   ri   r   r%  s          rD   !test_onnxt_runtime_random_uniform8TestReferenceEvaluator.test_onnxt_runtime_random_uniform  s    "3(9(9D6B/2u3q!fME7CaS1&
J!*-hhtR #F+BJJ/3779a(	1%rH   c           	     p   [        S[        R                  S /5      n[        S[        R                  S /5      n[        SS/S/SS9n[	        U/SU/U/5      n[        U5      n[        U5        [        U5      nUR                  S S[        R                  " S[        R                  S905      S	   nU R                  UR                  S5        U R                  UR                  [        R                  5        U R                  UR!                  5       S	5        U R#                  UR%                  5       S
5        g )Nr   r   RandomUniformLikerv  rw  r  ry  rr   r   rq   rz  r}  s           rD   &test_onnxt_runtime_random_uniform_like=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%rH   c                t   [        S[        R                  S /5      n[        S/ S/SSS/S9n[	        U/S/ U/5      n[        U5      n[        U5        [        U5      nUR                  S 0 5      S   nU R                  UR                  S	5        U R                  UR                  [        R                  5        g )
Nr   RandomNormalrv  rp   r   r  r  r   ry  )r   r   r   r   r   r   r   r"   r   r   r\   rs   ry   r   r  s          rD    test_onnxt_runtime_random_normal7TestReferenceEvaluator.test_onnxt_runtime_random_normal  s    "3(9(9D6B."se#aVLE7CaS1&
J!*-hhtR #F+BJJ/rH   c           	        [        S[        R                  S /5      n[        S[        R                  S /5      n[        SS/S/SS9n[	        U/SU/U/5      n[        U5      n[        U5        [        U5      nUR                  S S[        R                  " S[        R                  S905      S	   nU R                  UR                  S5        U R                  UR                  [        R                  5        g )
Nr   r   RandomNormalLikerv  rw  r  ry  rr   r   )r   r   r   r   r   r   r   r"   r   ry   r}   r   r   r\   rs   r}  s           rD   %test_onnxt_runtime_random_normal_like<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/rH   c                
   [         R                  " SS9nU R                  UR                  S5        [        R
                  " SS/SS//[        R                  S9n[         R                  " USS9n[        USS9n[        X45        g )Nr  r  r   rq   r   rp   rr   )
r)   creater   r  ry   rz   r   evalr,   r   )r   instr   r   r   s        rD   test_eval_celu%TestReferenceEvaluator.test_eval_celu  si    {{%S)HHq!fr1g&bjj9IIas#1C($rH   c                    [         R                  " SS/SS//[         R                  S9n[        R                  " U[
        R                  S9n[        R                  " U[
        R                  S9nUn[        X45        g )Nr   rq   r   rp   rr   to)	ry   rz   r   r(   r  r   FLOAT8E4M3FNr   r   )r   r   r   dyr   s        rD   test_eval_cast%TestReferenceEvaluator.test_eval_cast  s\    HHq!fr1g&bjj9LL{778\\! 1 12%rH   c                F   [        SS5      nU R                  UR                  S5        UR                  SS9nU R                  UR                  S5        [
        R                  " SS/SS//[
        R                  S	9nUR                  USS9n[        USS9n[        XE5        g )
Nr`   r)   r  r  r   rq   r   rp   rr   )r%   r   r  r  r  ry   rz   r   r  r,   r   )r   celur  r   r   r   s         rD   test_eval_celu_load_op-TestReferenceEvaluator.test_eval_celu_load_op  s    r6",{{{%S)HHq!fr1g&bjj9IIasI#1C($rH   c                d    [         R                  " SS9nU R                  UR                  S5        g )Nr  r  )r*   r  r   r  )r   r  s     rD   test_create_adam'TestReferenceEvaluator.test_create_adam  s$    {{%S)rH   c           	        [        S[        R                  / SQ5      n[        S[        R                  / SQ5      n[        S[        R                  / SQ5      n[        S[        R                  / SQ5      n[        S/ SQS// SQS	S	/S
S
/S9n[	        U/SXU/U/5      n[        U[        SS5      /S9n[        U5      nUc  g [        USS9n	U R                  U	R                  S   [        5        [        U[        /SS9n
U R                  U
R                  S   [        5        [        USS9nU R                  UR                  S   [        5        Su  p[        U5       GH\  n[        U5       GHH  n[        R                  " S	S	X4[        R                   S9nSUSSX4'   [        R                  " S[        R                   S9n[        R"                  " S
[        R$                  " S5      R'                  S5      -  S5      USSS S 2S S 24'   [        R(                  " S////[        R                   S9nUR+                  S XUS.5      S   nU	R+                  S XUS.5      S   n[-        UU5        U
R+                  S XUS.5      S   n[-        UU5        UR+                  S XUS.5      S   n[-        UU5        GMK     GM_     g )Nr   NNNNr   r   Wr/   r   r  r   rq   rq   rq   rq   rq   rp   )r   r   r   r  r`      r   F)	optimizedr   )r  r  T)r   r   rr   r_  rq   rq   r   r   	   r   r      )r   r   r   r   r   r   r   rm   r"   r   r-  r/   ConvOptimizedr{   ry   r}   r   minimumrH  r   rz   r   r   )r   r   r   r   r  r  r   ri   sess1sess2sess3sess4sHsWr   r   r   r%  got3got4s                       rD   	test_conv TestReferenceEvaluator.test_conv	  si   "3(9(9;ST"3(9(9;ST"3(9(9;ST"3(9(9;STE!fF
 D63q	A37+E,rSUBVAWX
!*-=":?eooa0$7":RWXeooa0-@":>eooa0-@rA2YHHaB^2::> #!Q*HH\< "

1		!0D0DW0M+Ms S!Q1*HHugYbjj9 99T+CDQGiiAA&>?BX.yyQQ'?@Ch/yyQQ'?@Ch/  rH   c                \   [        S[        R                  / SQ5      n[        S[        R                  / SQ5      n[        S[        R                  / SQ5      n[        S[        R                  S /5      n[        S[        R                  S /5      n[        S[        R                  S /5      n[        S[        R                  S /5      n[        S	[        R                  S /5      n[        S
[        R                  S /5      n	[	        S/ SQS/5      n
[        U
/SXXrXXXi/U/5      n[        U[        SS5      /S9n[        U5      nUc  g [        U5      nSu  nn[        U5       GH  n[        U5       GHz  n[        R                  " SSUU4[        R                  S9nSUSSUU4'   U R                  SUUS9   [        R                  " S[        R                  S9nSUSSS S 2S S 24'   U[        R                  " S/[        R                   S9[        R                  " S/[        R                  S9U[        R                  " S/[        R                   S9[        R                  " S/[        R                  S9[        R                  " S/[        R                   S9[        R                  " S/[        R                  5      S.nUR#                  S U5      S   nUR#                  S U5      S   n[%        UU5        S S S 5        U R                  SUUS9   [        R                  " S[        R                  S9n[        R&                  " S[        R(                  " S5      R+                  S5      -  S5      USSS S 2S S 24'   U[        R                  " S/[        R                   S9[        R                  " S/[        R                  S9U[        R                  " S/[        R                   S9[        R                  " S/[        R                  S9[        R                  " S/[        R                   S9[        R                  " S/[        R                  5      S.nUR#                  S U5      S   nUR#                  S U5      S   n[%        UU5        S S S 5        U R                  SUUS9   [        R                  " S[        R                  S9nSUSSS S 2S S 24'   U[        R                  " S/[        R                   S9[        R                  " S /[        R                  S9U[        R                  " S!/[        R                   S9[        R                  " S"/[        R                  S9[        R                  " S#/[        R                   S9[        R                  " S /[        R                  5      S.nUR#                  S U5      S   nUR#                  S U5      S   n[%        UU5        S S S 5        GM}     GM     g ! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GM  = f)$Nr   r  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  r  r`   r  r   r   r   rq   rr   r_  r   1x1)r  r   r   r  3x3r  rp   r  r     칟>n?   gO Y@   {XZ?)r   r   UINT8r   r   r   r   r   rm   r"   r{   ry   r}   r:  r  rz   r   r   r   r  rH  r   )r   r   r  r   r  r  r  r  r  r  r  r   ri   r  r  r  r  r   r   feedsr   r%  s                         rD   test_qlinearconv'TestReferenceEvaluator.test_qlinearconv4  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'WC	
 ,E,rSUBVAWX
!*-=":.BrA2YHHaB^288< #!Q1*\\EQ!\4RXX>A$%AaAqjM#%88QCrzz#B(*!BHH(E#%88QCrzz#B(*!BHH(E#%88QCrzz#B(*!bhh(?	E  %yyu5a8H))D%03C#C2 5  \\EQ!\4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#C2 5  \\EQ!\4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#C2 54G   54  54  54s'   7E W7E;X	$E X7
X	
X
X+c                ,   [        S[        R                  / SQ5      n[        S[        R                  / SQ5      n[        S[        R                  / SQ5      n[        S[        R                  S /5      n[        S[        R                  S /5      n[        S[        R                  S /5      n[        S[        R                  S /5      n[        S	[        R                  S /5      n[        S
[        R                  S /5      n	[	        S/ SQS/5      n
[        U
/SXXrXXXi/U/5      n[        U[        SS5      /S9n[        U5      nU R                  S5         [        R                  " / SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/[        R                  S9R                  S5      n[        R                  " S/[        R                  S9n[        R                  " S/[        R                  S9n[        R                  " S/[        R                  S9R                  S5      n[        R                  " S/[        R                  S9n[        R                  " S /[        R                  S9n[        R                  " S!/[        R                  S9n[        R                  " S"/[        R                  S9n	UUUUUUUU	S.n/ S#Q/ S$Q/ S%Q/ S&Q/ S'Q/ S(Q/ S)Q///nUR                  S U5      S   n[!        UU5        S S S 5        U R                  S*5         [        R                  " / SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/[        R                  S9R                  S5      n[        R                  " S+/[        R                  S9n[        R                  " S/[        R                  S9n[        R"                  " / S,QS-[        R                  S9nS.US/'   S0US1'   [        R                  " S+S2/[        R                  S9n[        R                  " S-S-/[        R                  S9n[        R                  " S!/[        R                  S9n[        R                  " S"/[        R                  S9n	UUUUUUUU	S.n/ S3Q/ S4Q/ S5Q/ S6Q/ S7Q// S8Q/ S9Q/ S:Q/ S;Q/ S<Q///nUR                  S U5      S   n[!        UU5        S S S 5        U R                  S=5         [        R$                  " S[        R                  S9n[        R                  " S+/[        R                  S9n[        R                  " S/[        R                  S9n[        R"                  " / S,QS-[        R                  S9n[        R                  " S+S2/S>S>//[        R                  S9n[        R                  " S-S-/[        R                  S9n[        R                  " S!/[        R                  S9n[        R                  " S"/[        R                  S9n	UUUUUUUU	S.nU R'                  [(        S?5         UR                  S U5      S     S S S 5        S S S 5        U R                  S@5         [        R$                  " S[        R                  S9n[        R                  " S+/[        R                  S9n[        R                  " S/[        R                  S9n[        R"                  " / S,QS-[        R                  S9n[        R                  " / SAQ[        R                  S9n[        R                  " S-S-/[        R                  S9n[        R                  " S!/[        R                  S9n[        R                  " S"/[        R                  S9n	UUUUUUUU	S.nU R'                  [(        SB5         UR                  S U5      S     S S S 5        S S S 5        g ! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       N_= f! , (       d  f       g = f)CNr   r  r  r   r  r  r  r  r  r  r  r  r  r`   r  r   single_channel)r                 :   )r  ;      _      r   @   )8            r        )            r  r  r  )   '   |   M   P   f   +   )         S   )   (      )r     \      *         rr   rq   rq   r   r   r  r  r   r  gO\?r  r  {   )r   Q   ]   r  4   W      )      rm     ~   r     )   rT  r  "   r     Y   )   r  E   rC  rm  r  rm  )C         r     r     )r  r              y   )r   e      r   r   k      multiple_output_channels      p?)rp   rq   r   r   r     )r   r   rq   rp   rp   )rq   r   rq   r         `?)r        r  r  )   r     r     )   r  r  r  r  )   r           )            r   )r  X   r   r  /   )Z   r   !   r      )r   rm  rT  r  r   )r  r  2   r  L   )0   r   o   J   c   fails_with_w_scale_2Drq   z(w_scale must be a scalar or a 1-D tensorfails_with_w_scale_wrong_length)r   r"  rq   z+w_scale elements must match output channels)r   r   r  r   r   r   r   r   r"   r  ry   rz   r:  r   r   r   r   fullr}   assertRaisesRegexrx   )r   r   r  r   r  r  r  r  r  r  r  r   ri   r   r  r   r%  s                    rD   test_qlinearconv_w_scale_vector6TestReferenceEvaluator.test_qlinearconv_w_scale_vector  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'WC	
 ,E,rSUBVAWX
!*-\\*+5157335 hh gl#  hhbjjAG88SE:L!BHH-55lCAhhbjjAG88SE:LhhbjjAG88SE:L " ," ," ,	E 6:74::7
H ((4'*CC*] ,` \\455157335 hh gl#  hh
|2::>G88QCrxx8Lc:AAjMAjMhh
K8

KG88S#Jbhh?LhhbjjAG88SE:L " ," ," ,	E 21111 -*)-,H& ((4'*CC*k 6n \\12RXX6Ahh
|2::>G88QCrxx8Lc:Ahh[ 9Aq6B"**UG88S#Jbhh?LhhbjjAG88SE:L " ," ," ,	E ''F u%a() 32 \\;<RXX6Ahh
|2::>G88QCrxx8Lc:Ahh;2::NG88S#Jbhh?LhhbjjAG88SE:L " ," ," ,	E ''I u%a() =<A ,+` 65V ) 32Z ) =<sd   F^,F!^> E	_"	__" E`_4`,
^;>
_
_	_""
_14
`	>`
`c                   [        S[        R                  / SQ5      n[        S[        R                  / SQ5      n[        S[        R                  / SQ5      n[        S[        R                  / SQ5      n[        SSS/S/X#US9n	[        SS/S	/5      n
[        S
SS	/S/UUUSS9n[        SS/S/5      n[        SSS/S/5      n[	        XXU/SXX/Xg/5      n[        U[        SS5      [        SS5      /S9n[	        U	/SXX/U/5      n[        U[        SS5      /S9n[        U5      n [        U5      nUc  g  Su  nn[        R                  " U5      n[        U5       GHE  n[        U5       GH1  n[        R                  " SSUU4[        R                  S9nSUSSUU4'   [        R                  " SS/UQ7[        R                  S9n[        R                   " S[        R"                  " U5      R%                  US   S45      -  S5      USSS S 2S S 24'   UR'                  S XXS.5      nUbB  UR'                  S XXS.5      S   n[)        US   R+                  5       UR+                  5       5         [)        US   R+                  5       US   R+                  5       5        GM4     GMH     g ! [         a    S n GNf = f! [,         a)  n[-        SU SU S U S!U S"US    S#US    35      UeS nAff = f)$Nr   r  r  Y2r  r/   r   r   r   Shaper\   Im2Colximexperimental)r   r   r   rd   Flattenwflatr   r  r`   r  rq   r   )r   r   rr   r_  r   rp   r   r  )r   r  zDiscrepancies: pads=z, dilations=z
, strides=z, kernel_shape=r  
!=
)r   r   r   r   r   r   r   r   r"   rm   ImportErrorry   r~   r{   r}   r   r  rH  r   r   r   ravelr   )r   r   r   r   r   r   r  rC  r  r  
node_shapenode_im	node_flatnode_gemr   ri   
graph_convonnx_model_convr   	sess_convr  r  nkerr   r   r%  ort_resr   s                               rD   common_test_im2col)TestReferenceEvaluator.common_test_im2colL  s   "3(9(9;ST#D+*;*;=UV#D+*;*;=UV"3(9(9;STS#JTi
 wy9
'NG!
 i#	:	X'7$@w8<FH	
  ,r2"6^UV8W!X

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

400,q/21FGG!!Q1* hht1%56('mmD2BCAFG#CFLLNGMMOD#CFLLNCFLLNC!    	I	. & (.tfL:V]U^ _((4~SVHF3q6(4 	s*   *J+ 2.J>+J;:J;>
K1$K,,K1c                4    U R                  S/ SQSS/SS/S9  g )Nrq   rq   rq   rq   rq   rp   rq   rD  rW  r   s    rD   test_im2col_1x1&TestReferenceEvaluator.test_im2col_1x1  &    1v!Q 	  	
rH   c                4    U R                  S/ SQSS/SS/S9  g )Nr  r[  rq   rD  r\  r]  s    rD   test_im2col_2x2&TestReferenceEvaluator.test_im2col_2x2  r`  rH   c                4    U R                  S/ SQSS/SS/S9  g )Nr  r[  rq   rD  r\  r]  s    rD   test_im2col_3x3&TestReferenceEvaluator.test_im2col_3x3  r`  rH   c                4    U R                  S/ SQSS/SS/S9  g )Nr  )r   rq   rp   r   rq   rD  r\  r]  s    rD   test_im2col_3x3_pads+TestReferenceEvaluator.test_im2col_3x3_pads  r`  rH   c                4    U R                  S/ SQSS/SS/S9  g )Nr  )r   rq   rq   rq   rq   rp   rD  r\  r]  s    rD   test_im2col_3x3_strides.TestReferenceEvaluator.test_im2col_3x3_strides  r`  rH   c                4    U R                  S/ SQSS/SS/S9  g )Nr   r   r[  rq   rD  r\  r]  s    rD   test_im2col_5x5&TestReferenceEvaluator.test_im2col_5x5  r`  rH   c           	        SS K n[        S[        R                  / SQ5      n[        S[        R                  / SQ5      n[        S[        R                  S /5      n[        S[        R                  S /5      n[        S/ SQS// S	QS
S
/S
S
/S9n[        U/SX$U/U/5      n[        U[        SS5      /S9n[        U5      n	[        R                  " / SQ/ SQ/ SQ/ SQ/ SQ//5      R                  [        R                  5      n[        R                  " SS/5      R                  [        R                  5      n
[        R                  " S
S/5      R                  [        R                  5      nUR                  R!                  [#        U
5      US9nU	R%                  S X+U
S.5      nU" UR'                  U5      5      R)                  5       n[+        XS   5        g )Nr   r   NNNr   Ir   Col2Imr   rs  r   r   r   r   r   rq   rD  r  r`   r  r   )r_        @      &@      0@      5@)r`        @      (@      1@      6@)ra         @      *@g      2@      7@)rb        "@      ,@      3@      8@)rc  rv        .@g      4@g      9@r   )output_sizer   r   r   rs  )rN   r   r   r   rW  r   r   r   r   r"   ry   rz   rI  r   rX  nnFoldrt   r   
from_numpynumpyr   )r   rN   r   r   ISBSr  r   ri   r   image_shapeblock_shapefoldr%  r  s                  rD   test_col2im"TestReferenceEvaluator.test_col2im  s   "3(9(9;MN"3(9(9;MN#C):):TFC#C):):TFCEF!f
 D63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'rH   c           	        SS K n[        S[        R                  / SQ5      n[        S[        R                  / SQ5      n	[        S[        R                  S /5      n
[        S[        R                  S /5      n[        S/ SQS/UUUS	9n[        U/S
XU/U	/5      n[        U[        SS5      /S9n[        U5      nUR                  R                  [        U5      [        U5      [        U5      [        U5      [        U5      S9n[        R                  " U5      n[!        U5       H  n[!        U5       H  n[        R"                  " SUU4[        R$                  S9nSUSUU4'   [        R&                  " U[        R(                  S9n[        R&                  " U[        R(                  S9nU" UR+                  U5      5      R-                  5       nUR/                  S UUUS.5      n[1        UUS   5        M     M     g )Nr   r   rr  r   rs  r   rt  ru  rD  r  r`   r  r   )r  r   dilationpaddingstriderq   rr   r_  r  )rN   r   r   r   rW  r   r   r   r   r"   r  r  rt   r   ry   r~   r{   r}   r   rz   rX  r  r  r   r   )r   sizer  r  r   r   r   rN   r   r   r  r  r  r   ri   r   r  rU  r   r   i_shapeb_shaper  r%  s                           rD   common_test_col2im)TestReferenceEvaluator.common_test_col2im  s    	"3(9(9;MN"3(9(9;MN#C):):TFC#C):):TFCE
 D63aS9l2r6J5KL
!*-xx}}k*k*9%I>  
 ww{#tA4[HHat_BJJ? !Q'
((;bhh?((;bhh?e..q1288:hht17%IJA/ ! rH   c           	     8    U R                  SSS/ SQSS/SS/S9  g )Nr   r   r   rp   r   rv  rq   rD  r  r]  s    rD   test_col2im_2x3&TestReferenceEvaluator.test_col2im_2x3   +    \Aq6aQRV 	  	
rH   c           	     8    U R                  SSS/ SQSS/SS/S9  g )N   r  r  r  rq   rD  r  r]  s    rD   test_col2im_2x3_pads+TestReferenceEvaluator.test_col2im_2x3_pads  r  rH   c                n   [         R                  " SS/[         R                  S9nSUS   S'   [         R                  " SS/5      S[         R                  " SS/5      [         R                  " / S	Q5      [         R                  " SS/5      4u  p#pEn[	        XX4XV5      n[        XX4XV5      n[        Xx5        g )
Nr   r  rr   r_  r   r   r  rq   r  )ry   r}   r   rz   r-   r.   r   )	r   r   r  r   r   r   r  r1r2s	            rD   test_col2im_2d%TestReferenceEvaluator.test_col2im_2d  s    xxBrzz2Q
HHaVHHaVHH\"HHaV>
:9F -|
 )|
 	rH   c                   [        S[        R                  / SQ5      n[        S[        R                  / SQ5      n[        S[        R                  S/5      n[        S[        R                  / SQ5      n[        S/ S	QS/SS
S
/SS// SQS
S
/S9n[	        U/SXU/U/5      n[        U[        SS5      /S9n[        R                  " S5      R                  S5      R                  [        R                  5      [        R                  " / SQ/ SQ/ SQ/// SQ/ SQ/ SQ/// SQ/ SQ/ SQ/// SQ/ SQ/ SQ///[        R                  S9[        R                  " / S Q[        R                  S9S	.nS!US   S S & US   nUS   nUS   n[        R                  " SUR                  S9n[        UR                   S!   5       Hs  n	[        S5       Ha  n
XU	S
-   2XS
-   24   nX*   n[#        US"S
S
// SQS
S
/5      n[        R$                  " XR'                  5       5      nXU
   -   nXXS S 2S S 24'   Mc     Mu     [)        U5      nUR+                  S U5      n[-        UUS!   S#S$9  g )%Nr   )rp   r   r   r   r  )r   rq   r   r   r   r   r   r/   r  rq   r   r  groupr   r   r   r   r  r`   r  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   `Ζrr   )g   @[¿g   &g   (g   `䠾r   r  h㈵>atol)r   r   r   r   r   r   r   ry   rH  r   rI  r   rz   r   rs   r{   r\   r   matmulrd  r"   r   r   )r   r   r  r   r   r  r   ri   r  r   r  r   r  c2mulref1got1s                    rD   test_conv_im2col_group4.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q	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%iU*+DAv1v|aVDiiIIK0aDj #!1*  # "*-xxe$47.rH   c                \   [        S[        R                  / SQ5      n[        S[        R                  / SQ5      n[        S[        R                  S/5      n[        S[        R                  / SQ5      n[        S	/ S
QS/SSS/SS// SQSS/S9n[	        U/SXU/U/5      n[        U[        SS5      /S9n[        R                  " S5      R                  S5      R                  [        R                  5      S-   [        R                  " S[        R                  S9[        R                  " S[        R                  S9S
.nSUS   S'   [        U5      n	U	R                  S U5      n
[        R                  " / SQ/ SQ/ SQ// SQ/ SQ/ SQ///[        R                  S9n[!        U
S   U5        g )Nr   rq   r   r   r   r  rp   r   r   r   r   rp   r   r  r/   r  rq   r   r  r  r  r`   r  r   l   rr   rp   )r   r   r   rq   )rv  rv  rv  )r{  r  rx  )r  rz  r  r   )r   r   r   r   r   r   r   ry   rH  r   rI  r   r}   r"   r   rz   r   r   r   r  r   r   r  r   ri   r  r  r  r   s               rD   test_conv_strides(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q	A37l2r6J5KL
 =)11,?FFrzzRUVV,bjj9$bjj1

 "#c
:!*-xxe$88 %&68JK$oG **
 	Q*rH   c           	     >   [        S[        R                  / SQ5      n[        S[        R                  / SQ5      n[        SS/S/SS// SQSS/S9n[	        U/S	U/U/5      n[        U[        S
S5      /S9nS[        R                  " S5      S S S2   R                  S5      R                  [        R                  5      0n[        R                  " / SQ/ SQ/ SQ/ SQ///[        R                  S9n[        U5      nUR                  S U5      n	[        U	S   U5        g )Nr   r  r   MaxPoolr   r  rp   r   r   r   r  r`   r  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  rr   r   r   r   r   r   r   r   r   ry   rH  r   rI  r   rz   r"   r   r   
r   r   r   r  r   ri   r  r   r  r  s
             rD   test_max_pool_2d_1)TestReferenceEvaluator.test_max_pool_2d_1  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*rH   c                "   [        S[        R                  / SQ5      n[        S[        R                  / SQ5      n[        SS/S/SS// SQSS/S9n[	        U/S	U/U/5      n[        U[        S
S5      /S9nS[        R                  " / SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ///[        R                  S90n[        R                  " / SQ/ SQ/ SQ/ SQ///[        R                  S9n[        U5      nUR                  S U5      n	[        U	S   U5        g )Nr   r  r   r  r   r  rp   r  r  r`   r  r   )i  if  i  iB  i  i  r!  )i  i  i  r   r  r  iF  )iB  B   i  ix  iT  i  i  )r9  i  is  iL  i  iJ  i  )i  r  i  r   i'  i;  ih  )  i>  r   i  i  i  i  )i|  i  K   iA  r  i  i  rr   )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   ry   rz   r   r"   r   r   r  s
             rD   test_max_pool_2d_2)TestReferenceEvaluator.test_max_pool_2d_2  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*rH   c                   [        S[        R                  S S /5      n[        S[        R                  S S /5      n[        S[        R                  S S /5      n[        S[        R                  S S /5      n[	        S/ SQS/SSS	9n[        U/S
XU/U/5      n[        U[        SS5      /S9n[        R                  " / SQ/[        R                  S9[        R                  " SS//5      [        R                  " SS//[        R                  S9S.n[        U5      n	U	R                  S U5      n
[        R                  " / SQ/[        R                  S9n[        U
S   U5        g )Nr   rs  Ur   ScatterElementsr   rs  r  rq   r   rF  	reductionr  r`   r  r   )r_  r`  ra  rb  rc  rr   皙?g @)r_  r  ra  rb  rc  r   r   r   r   rW  r   r   r   r   ry   rz   r   r"   r   r   r   r   Indr  r   r  r   ri   r  r  r  r   s               rD   test_scatter_elements,TestReferenceEvaluator.test_scatter_elements	  s6   "3(9(9D$<H$S+*;*;dD\J"3(9(9D$<H"3(9(9D$<HE
 D63aS9l2r6J5KL
45RZZHAq6(#C:,bjj9
 "*-xxe$8867rzzJQ*rH   c                   [        S[        R                  S S /5      n[        S[        R                  S S /5      n[        S[        R                  S /5      n[        S[        R                  S S /5      n[	        S/ SQS/5      n[        U/SXU/U/5      n[        U[        SS	5      /S
9n[        R                  " SS//[        R                  S9[        R                  " SS//5      [        R                  " S/[        R                  S9S.n[        U5      n	U	R                  S U5      n
[        R                  " SS//[        R                  S9n[        U
S   U5        g )Nr   rs  r  r   	ScatterNDr  r  r`   r  r   r_  r`  rr   r   ra  r  r  s               rD   test_scatternd%TestReferenceEvaluator.test_scatternd9	  s.   "3(9(9D$<H$S+*;*;dD\J"3(9(9D6B"3(9(9D$<HE

 D63aS9l2r6J5KL
C:,bjj9Aq6(#3%rzz2
 "*-xxe$88c3ZL

;Q*rH   c                n   [        S[        R                  / SQ5      n[        S[        R                  / SQ5      n[        S[        R                  S /5      n[        S[        R                  / SQ5      n[        S/ SQS/SS/S	S	/S
S
// SQSS/S9n[	        U/SXU/U/5      n[        U[        SS5      /S9n[        R                  " S5      R                  S5      R                  [        R                  5      [        R                  " S5      R                  S5      R                  [        R                  5      [        R                  " / SQ[        R                  S9S.n[        U5      n	U	R                  S U5      n
[        R                  " / SQ/ SQ/ SQ/ SQ/ SQ///[        R                  S9n[        U
S
   U5        US==   S
-  ss'   SUS   S'   [        U5      n	U	R                  S U5      n
[        R                  " / SQ/ SQ/ SQ/ SQ/ SQ///[        R                  S9n[        U
S
   U5        g )Nr   r  r  r   r   ConvTransposer  rq   r   r   r  )r   r   output_paddingr   r   r  r`   r  r   rC  )rq   r   r   r      )r   rq   r   r   rv  rr   )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  r  s               rD   test_conv_transpose_2d-TestReferenceEvaluator.test_conv_transpose_2dQ	  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q	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*rH   c           
        [        S[        R                  / SQ5      n[        S[        R                  / SQ5      n[        S[        R                  S /5      n[        S[        R                  / SQ5      n[        S/ SQS/SS	S	/S
9n[	        U/SXU/U/5      n[        U[        SS5      /S9n[        R                  " S5      R                  S5      R                  [        R                  5      [        R                  " S5      R                  S5      R                  [        R                  5      [        R                  " / SQ[        R                  S9S.n[        R                  " / SQ/ SQ/ SQ/ SQ/ SQ/ SQ// SQ/ SQ/ SQ/ SQ/ SQ/ S Q///[        R                  S9n	[        U5      n
U
R                  S U5      n[        US!   U	5        g )"Nr   r  r  r   r   r  r  
SAME_UPPERrp   )auto_padr   r  r`   r  r   r  r  rm  )rq   rp   r   r   rv  rr   )r   r   r   rq   rp   rp   )r   r   r   r   r   r  )r   r   r  r   r     )r  r  r  r  #      )rm  r  rC  r  r7  r  )rm  r5  3   r  r      )r   r   r  r      r  )r   r   r  rT  &      )r     T   r     R   )$   r  r3  r  t   A   )r;  r  r  r  i$  r  )H   N   r  [      h   r   r  )r   r   r  r   r   r  r   ri   r  r   r  r  s               rD   test_conv_transpose_2d_upper3TestReferenceEvaluator.test_conv_transpose_2d_upper	  s   "3(9(9;ST"3(9(9;ST"3(9(9D6B"3(9(9;STE!F
 D63q	A37l2r6J5KL
=)11,?FFrzzR=)11,?FFrzzR,bjj9
 88 ++./00 ..1153( **+
0 "*-xxe$Q*rH   c                   [        S[        R                  / SQ5      n[        S[        R                  S /5      n[        S[        R                  S /5      n[        S[        R                  / SQ5      n[	        S/ SQS/5      n[        U/S	XU/U/5      n[        U[        S
S5      /S9n[        R                  " S5      R                  S5      R                  [        R                  5      [        R                  " S[        R                  S9[        R                  " S[        R                  S9S.nUS   n[        US   5      n[        US   5      nUS-  S-   n	US   R                   S   U-
  U-  S-   n
[        R"                  " SXS/[        R                  S9n[%        U
5       Hi  nX-  nX-  U-   n[        R&                  R'                  USX2S4   5      nUSU	 n[        R(                  " UR*                  UR,                  4SS9USU4'   Mk     [/        U5      nUR1                  S U5      n[3        US   U5        g )Nsignalrr  
frame_stepframe_lengthr   r  STFT)r  r  r`   r  r  r`      r   r  rq   r  rq   r  rr   r  )r  r  r  rp   rq   r   rF  )r   r   r   rW  r   r   r   r   ry   rH  r   rI  r   rz   rX  rY   r\   r   r{   fftstackrealimagr"   r   r   )r   r  r  r  r   r  r   ri   r  onesided_lengthnstftsr   r   startstopcomplex_outc_outr  r  s                      rD   	test_stft 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ANE>L0D&&**VAuz1,<%=>K/2EXXuzz5::&>QGHQTN  "*-xxe$Q*rH   c                   [        S[        R                  / SQ5      n[        S[        R                  S /5      n[        S[        R                  S /5      n[        S[        R                  S /5      n[        S[        R                  / SQ5      n[	        S/ S	QS/5      n[        U/S
XX4/U/5      n[        U[        SS5      /S9n[        R                  " S5      R                  S5      R                  [        R                  5      [        R                  " S[        R                  S9SS[        R                  " S[        R                   -  [        R                  " SSS[        R                  S9-  S-  5      -  -   [        R                  " S[        R                  S9S	.n	U	S   n[#        U	S   5      nU	S   n[#        U	S   5      nUS-  S-   n
SUR$                  S   UR$                  S   -
  S-  -   n[        R&                  " SXS/[        R                  S9n[)        U5       Ho  nX-  nX-  U-   n[        R*                  R+                  USX2S4   U-  5      SU
 nUSU
 n[        R,                  " UR.                  UR0                  4SS9USU4'   Mq     [3        U5      nUR5                  S U	5      n[7        US   U5        g )Nr  rr  r  windowr  r   r  r  )r  r  r  r  r  r`   r  r   r  r	  r  rr   r  rp   r   r  rq   r
  )r   r   r   rW  r   r   r   r   ry   rH  r   rI  r   rz   rX  cospirY   r\   r   r{   r  r  r  r  r"   r   r   )r   r  r  r  r  r   r  r   ri   r  r  r  r   r   r  r  r  r  r  r  s                       rD   test_stft_with_window,TestReferenceEvaluator.test_stft_with_window	  st   '+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ANE>L0D&&**VAuz1,<%=%FG/K  /2EXXuzz5::&>QGHQTN  "*-xxe$Q*rH   c                ^   [        S[        R                  / SQ5      n[        S[        R                  S S /5      n[        S[        R                  / SQ5      n[        S[        R                  S /5      n[	        S/ SQS/SSS	S
SUS9	n[        U/SX#U/U/5      n[        U[        SS5      /S9$ )Nr   r  roisr   rs  RoiAlignr   r  rs  r   rp   r_  output_half_pixel)output_heightoutput_widthsampling_ratiospatial_scalecoordinate_transformation_modemoder  r`   r  r   )r   r   r   rW  r   r   r   r   )r   r'  r   r  r   r  r  r   s           rD   get_roi_align_model*TestReferenceEvaluator.get_roi_align_model
  s    "3(9(9;ST%fk.?.?$N"3(9(9;ST#C):):TFCE+>

 D63"s;%eLR<P;QRRrH   c                    U R                  U5      n[        5       u  p4nX5US.n[        U5      nUc  g UR                  S U5      n[	        U5      n	U	R                  S U5      n
[        U
S   US   SS9  g )Nr   r   r  r  )r(  r   rm   r   r"   r   )r   r'  ri   r   batch_indicesr  r  r   r   r!  r%  s              rD   common_test_roi_align,TestReferenceEvaluator.common_test_roi_align%
  sy    --d3
!;!=$M: ,<88D%( ,ggdE"A$7rH   c                    U R                  SS9   U R                  S5        S S S 5        U R                  SS9   U R                  S5        S S S 5        g ! , (       d  f       N8= f! , (       d  f       g = f)Navgr'  r   )r  r,  r]  s    rD   test_roi_align%TestReferenceEvaluator.test_roi_align1
  s[    \\u\%&&u- & \\u\%&&u- &% &% &%s   AA%
A"%
A3c                   SS K nSSKJn  U R                  U5      n[	        U5      n[        5       u  pgnUR                  S XhUS.5      n	U" SSSS9n
U
" UR                  U5      UR                  U5      /5      n[        U	S   USS	9  g )
Nr   )RoIAlignr   rn  r_  rp   )r%  r$  r  r  )	rN   torchvision.opsr4  r(  r"   r   r   r  r   )r   r'  rN   r4  ri   r   r   r+  r  r%  r   r   s               rD   common_test_roi_align_torch2TestReferenceEvaluator.common_test_roi_align_torch9
  s    ,--d3
!*-!;!=$hht1GHV3qAU%%a(5+;+;D+A*BCAt4rH   c                x    U R                  SS9   U R                  S5        S S S 5        g ! , (       d  f       g = f)Nr/  r0  )r  r6  r]  s    rD   test_roi_align_torch+TestReferenceEvaluator.test_roi_align_torchF
  s,     \\u\%,,U3 &%%s   +
9c           	        [        S[        R                  S /5      n[        S[        R                  S /5      n[        S[        R                  S /5      n[        S[        R                  S /5      n[        S[        R                  S /5      n[        SS// SQSS	9n[	        U/S
U/X#XE/5      n[        U[        SS5      /S9nS[        R                  " S5      R                  [        R                  5      0n	[        R                  " / SQ[        R                  S9[        R                  " / SQ[        R                  S9[        R                  " / SQ[        R                  S9[        R                  " S/[        R                  S9/n
[        U5      nUR                  S U	5      n[        S5       H'  n[        R                  R!                  X   X   5        M)     g Nr   r  rC  Y3Y4Splitr  rC  r=  r>  r   )num_outputsr  r`   rm  r   r   r   rq   rp   rr   rD  )r   r   r  r  )r   r   r   r   r   r   r   ry   rH  rI  r   rz   r"   r   r{   testingassert_equalr   r   r  rC  r=  r>  r  r   ri   r  r   r  r  r   s                 rD   
test_split!TestReferenceEvaluator.test_splitO
  sh   "3(9(9D6B#D+*;*;dVD#D+*;*;dVD#D+*;*;dVD#D+*;*;dVD3%)AqQD63bb-=>l2r6J5KL
biim**2::67 HHYbjj1HHYbjj1HHYbjj1HHaS

+	
 "*-xxe$qAJJ##DGX[9 rH   c           	        [        S[        R                  S /5      n[        S[        R                  S /5      n[        S[        R                  S /5      n[        S[        R                  S /5      n[        S[        R                  S /5      n[        SSS// SQ5      n[	        U/S	U/X#XE/5      n[        U[        S
S5      /S9n[        R                  " S5      R                  [        R                  5      [        R                  " / SQ[        R                  S9S.n	[        R                  " / SQ[        R                  S9[        R                  " / SQ[        R                  S9[        R                  " SS/[        R                  S9[        R                  " SS/[        R                  S9/n
[        U5      nUR                  S U	5      n[        S5       H  n[!        X   X   5        M     g )Nr   r  rC  r=  r>  r?  splitr@  r  r`   rm  r   r   )r   r   rp   rp   rr   )r   rI  rB  rD  r   r   r  r  r   )r   r   r   r   r   r   r   ry   rH  rI  r   rz   rX  r"   r   r{   r   rE  s                 rD   test_split_2#TestReferenceEvaluator.test_split_2g
  sv   "3(9(9D6B#D+*;*;dVD#D+*;*;dVD#D+*;*;dVD#D+*;*;dVD3.2JKD63bb-=>l2r6J5KL
2%%bjj1XXl"((;
 HHYbjj1HHYbjj1HHaV2::.HHaV2::.	
 "*-xxe$qADGX[1 rH   c           	        [        S[        R                  S /5      n[        S[        R                  S /5      n[        S[        R                  S /5      n[        S[        R                  S /5      n[        S[        R                  S /5      n[        SS// SQSS	9n[	        U/S
U/X#XE/5      n[        U[        SS5      /S9nS[        R                  " S5      R                  [        R                  5      0n	[        R                  " / SQ[        R                  S9[        R                  " / SQ[        R                  S9[        R                  " / SQ[        R                  S9[        R                  " S/[        R                  S9/n
[        U5      nUR                  S U	5      n[        S5       H  n[        X   X   5        M     S[        R                  " S5      R                  [        R                  5      0n	[        R                  " / SQ[        R                  S9[        R                  " / SQ[        R                  S9[        R                  " / SQ[        R                  S9[        R                  " / [        R                  S9/n
[        U5      nUR                  S U	5      n[        S5       H  n[        X   X   5        M     g r<  )r   r   r   r   r   r   r   ry   rH  rI  r   rz   r"   r   r{   r   rE  s                 rD   test_split_num_outputs_4/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bb-=>l2r6J5KL
 biim**2::67HHYbjj1HHYbjj1HHYbjj1HHaS

+	
 "*-xxe$qADGX[1  biil))"**56HHYbjj1HHYbjj1HHYbjj1HHRrzz*	
 "*-xxe$qADGX[1 rH   c                j   [        S[        R                  S S /5      n[        S[        R                  S /5      n[	        SS/S/SS9n[        U/SU/U/5      n[        U[        SS5      /S	9nS[        R                  " S
5      R                  S5      R                  [        R                  5      0n[        U5      nUR                  S U5      n[        R                  " / SQ[        R                   S9R                  S5      n	U R#                  US   R%                  5       U	R%                  5       5        g )Nr   r   ArgMinrq   r
  r  r`   rm  r   r  r   r   )r   r   r   rr   r   rq   r   r   r   r   rW  r   r   r   r   ry   rH  r   rI  r   r"   r   rz   rX  r   tolist
r   r   r   r  r   ri   r  r  r  r   s
             rD   test_argmin"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a)8??+<=rH   c                j   [        S[        R                  S S /5      n[        S[        R                  S /5      n[	        SS/S/SS9n[        U/SU/U/5      n[        U[        SS5      /S	9nS[        R                  " S
5      R                  S5      R                  [        R                  5      0n[        U5      nUR                  S U5      n[        R                  " / SQ[        R                   S9R                  S5      n	U R#                  US   R%                  5       U	R%                  5       5        g )Nr   r   ArgMaxrq   r
  r  r`   rm  r   r  rQ  r   r   r   rr   rR  r   rS  rU  s
             rD   test_argmax"TestReferenceEvaluator.test_argmax
  rX  rH   c                   [        S[        R                  S S /5      n[        S[        R                  S /5      n[        S[        R                  S /5      n[        S[        R                  S /5      n[        S[        R                  S /5      n[	        S/ SQS/5      [	        S	SS/S/5      /n[        US
XX4/U/5      n[        U[        SS5      /S9n[        R                  " S//[        R                  S9[        R                  " S/[        R                  S9[        R                  " S/[        R                  S9[        R                  " S/[        R                  S9S.n	[        U5      n
U
R                  S U	5      n[        R                  " S/[        R                  S9nU R                  US   R                  5       UR                  5       5        g )Nr   startsendsr@  r   rS  )r   r_  r`  r@  TSqueezer  r`   rm  r   r   rr   rq   r   r   r   rW  r   r   r   r   ry   rz   rX  r"   r   r   rT  )r   r   r_  r`  r@  r   r  r   ri   r  r  r  r   s                rD   test_slice_squeeze)TestReferenceEvaluator.test_slice_squeeze
  sv   "3(9(9D$<H'+2C2CdVL%fk.?.?$H%fk.?.?$H"3(9(9D6Bg>Fi#v6
 5#4'>Dl2r6J5KL
A3%rxx0hhs"((3HHaS1HHaS1	
 "*-xxe$88QCrxx0a)8??+<=rH   c           	     6   [        S[        R                  S S /5      n[        S[        R                  S /5      n[	        SS/S/S/S/S/S9[	        SS/S/S/S	9/n[        US
U/U/5      n[        U[        SS5      /S9nS[        R                  " S//[        R                  S90n[        U5      nUR                  S U5      n[        R                  " S/[        R                  S9n	U R                  US   R                  5       U	R                  5       5        g )Nr   r   rS  ra  r   rq   )r@  r_  r`  rb  )r@  r  r`   r   r   rr   rc  )
r   r   r   r  r   ri   r  r  r  r   s
             rD   test_slice_squeeze_6+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a)8??+<=rH   c           	        [        S[        R                  S S /5      n[        S[        R                  S S /5      n[        SS/S/5      n[	        U/SU/U/5      n[        U[        SS5      /S9n[        U5        [        U5      nUR                  S   nU R                  UR                  R                  S	5        UR                  S S[        R                  " S
[        R                   S905      S   nU R                  UR"                  S5        U R                  US   S5        [        U[        SS5      /S9n[        U5        [        U5      nUR                  S   nU R                  UR                  R                  S5        UR                  S S[        R                  " S
[        R                   S905      S   nU R                  UR"                  S5        U R                  US   S5        g )Nr   r   
ReduceMeanr  r`   r  r   r   ReduceMean_1ry  rr   rZ  r   r   rq   rm  ReduceMean_18)r   r   r   r   r   r   r   r   r"   r-  r   r.  r/  r   ry   onesr   r\   )	r   r   r   r   r   ri   r   clsr%  s	            rD   test_onnxrt_reduce_mean.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&rH   rO  c                   / n[        S[        R                  S S/5      [        S[        R                  S /5      /n[        S[        R                  S S /5      [        S[        R                  S /5      /nU S:  aL  UR                  [	        [
        R                  " S/[
        R                  S9S	S
95        [        USS	/S/SSS9nO[        US/S/SS/SS9n[        SS/S/SS
9[        SSS/S/SS
9U[        SS/S/SS
9/n[        USX4U5      n/ n/ SQnUR                  [	        [
        R                  " U[
        R                  S9R                  S5      SS
95        UR                  [	        [
        R                  " S/[
        R                  S9SS
95        [        S[        R                  S S/5      /n[        S[        R                  S S/5      [        S[        R                  S S/5      /n[        SSS/S S!/S"USS#9[        S$S!/S%/S&SS/S'9[        S(S%/S)/S*S
9[        S+S)S/SS/S,SSS-9/n[        US.X4U5      n[        U[        S/U 5      /S09$ )1Nnext_inr   nextnext_outscan_outrm  rq   rr   axis_redr   cdistdf_17_C0cdistdf_17_reduced0cdistdf_17_ReduceSumSquarer   )rZ   rA  )rZ   r@  rA  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ֿ)r  r   
Sc_Scancstrp   
To_TopKcstr  valuesindicesScanUU032UUUU033UUSc_Scan)rZ   r[  num_scan_inputs	TransposeTr_transposed0Tr_Transpose)rZ   permSqrtSq_Y0Sq_SqrtTopKTo_TopK)rZ   largestsorteddummyr`   r   )r   r   r   rf  r!   ry   rz   rX  r   r   r   r   rW  r   r   )	rl   	reduce_opinitializersr   r  node_reducer  r   
list_values	            rD   _cdist_model#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'6LI %R0G/HIIrH   r  g]l,@g.s,&2@rr   rp   r  r   r   ReduceL1gQ@gK-J3@g%s}N@gZOc10@rm  r   rT  ReduceL2g&?gq#i?giE@g=@r   ReduceLogSumgd?gUU?g(?gQOIR?ReduceLogSumExpg?g?g9z%4~@g	Y;@	ReduceMaxgS?gsn`{?go@g@rj  gύ]`?gJ?g%s}N @gZOc10@gNs	@ghi
@gXE!@gHg`y#@
ReduceProdr  c                   Uu  p4[         R                  " S5      R                  S5      R                  [         R                  5      n0 nU R                  X#5      n[        U5      nUR                  S SU05      n	XSU4'   UR                  S   R                  R                   V
s/ s H1  n
U
R                  R                  R                  U5      (       d  M/  U
PM3     nn
US   R                  n[        X;S   R                  4SU05      n[        X}/S9nUR                  S SU05      n	XSU4'   S	nUR                  5        H  u  nn[!        [#        U5      [#        U5      S
S9 H  u  nnUR$                  UR$                  :w  a0  ['        SU< SU SUR$                   SU SUR$                   S35      e[         R(                  " UU-
  5      R+                  5       nUS:  d  M  ['        SU SU< SU SU SU SU 35      e   M     g s  sn
f )Nr  )r   r   r  r!  r   	op_schemar  ref_clconstantTstrictzShape mismatch for z, :z != ro   gư>zDiscrepancies (max=z) for r  rK  )ry   rH  r   rI  r   r  r"   r   r-  r[  r.  r/  r  _schemarv   itemszipreversedr\   r   r  r   )r   reduce_op_expectedrl   r  r   r   resultsr  r   r%  r   clschemanew_clbaselinekvr   r   diffs                       rD   test_op_reduce%TestReferenceEvaluator.test_op_reduce  s   @ 1	IIaL  )00<!!%3!%(hhtgq\* #u ^^A&++55
5{{##..y9 5 	 

 AiQ%//!3k65JK!%:hhtgq\*#&% MMODAqHX.DI177agg%(-i]"XJayPTUVTWWXYZY`Y`Xaabc  vva!e}((*$;(-dV6)b
RVWXVYY[\][^^defdgh  J $
s   $.HH)rT  )r  )rm  c                t   [        S[        R                  / SQ5      n[        S[        R                  / SQ5      n[        SS/S/5      /n[	        USU/U/5      n[
        R                  R                  SSSS5      R                  [
        R                  5      n[        U[        SU5      /S	9n[        U5      n	U	R                  S SU05      S
   n
[        U[        SU5      /S	9n[        U5      nUR                  S SU05      S
   nU R                  U
R                  UR                  5        [!        X5        g )Nr   r  r   MeanVarianceNormalizationr  r   rq   r`   r   r   )r   r   r   r   r   ry   randomrandrI  r   r   r   r"   r   r   r\   r   )r   rl   	ref_opsetr   r   r  r   r   ri   r!  r%  ref_onnx_modelref_expectedr   s                 rD   test_mvn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HNN3&rH   c                   S nU" 5       n[         R                  " SS/SS//[         R                  S9n[         R                  " SS//[         R                  S9n[         R                  " S	S
//[         R                  S9n[         R                  " X4U/5      n[	        U5      nX4US.nUR                  S U5      n	[        XiS   5        g )Nc                    / n / n/ n/ n[        5       SS.n/ n[        SSS/S/SSS	9nUR                  U5        UR                  5        VVs/ s H  u  px[	        Xxc  SOU5      PM     n	nn[        S
SSS/S/UU	5      n
UR                  U
5        UR                  [        S[        R                  / 5      5        UR                  [        S[        R                  / 5      5        UR                  [        S[        R                  / 5      5        UR                  [        S[        R                  / 5      5        [        SSS/S/SS
S	9nU R                  U5        [        SSS/S/SS
S	9nU R                  U5        UR                  5        VVs/ s H  u  px[	        Xxc  SOU5      PM     nnn[        U SX5      n[        XUS9$ s  snnf s  snnf )Nrq   )r`   custom_domainConcatzx:0zx:1r__0r   r`   )rF  rd   r  concat_2I__0I__1I__2r__4r__3numpyxr`  )r   r   rf  r  r   r   r   r   DOUBLEr   r   )r  r   r  ra  r   	nodes_fctr  rd   re   opset_imports_fctr  r   r   s                rD   create_modelFTestReferenceEvaluator.test_concat_in_a_function.<locals>.create_modelW  s   EFGI,.CFIXu~xaPRSDT" (.||~!'5OF V/QwG'5  !  !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 (.||~'5OF V/QwG'5  
 uh@EeIVVE!6s   GGr   r   r  r   rr   rq   rp   r   )r  r  r  r   )ry   rz   float64vstackr"   r   r   )
r   r  ri   x1x2x3r   r!  r  r%  s
             rD   test_concat_in_a_function0TestReferenceEvaluator.test_concat_in_a_functionV  s    -	W^ "^
XXAwQ(

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

3IIrrl# ,4ggdE"q6"rH   c                :   [        S[        R                  S /5      n[        S[        R                  S /5      n[	        [        [        SS/S/[        R                  S9/SU/U/5      5      n[        U5      n[        R                  " SSS[        R                  /5      nUR                  S SU05      S	   nU R                  U[        R                  " SSS[        R                  /5      R                  [        R                  5      :H  R                  5       5        g )
Nr   r   Castr  r  Clp?Q}>ʈÿrv  r   )r   r   r   STRINGr   r   r   r"   ry   rz   nanr   
assertTruerI  str_allr   r   r   r  r!  r   r%  s          rD   test_cast_float_to_string0TestReferenceEvaluator.test_cast_float_to_string  s    "3(9(9D6B"3(:(:TFCfsecU{7I7IJ 	
 !'xx9c266:;ggdS$K(+BHHh	3?@GGPPUUW	
rH   c                
   [        S[        R                  S /5      n[        S[        R                  S /5      n[        [	        [        SS/S/[        R                  S9[        SS/S/[        R                  S9/SU/U/5      5      n[        U5      n[        R                  " SSS	[        R                  /5      nUR                  S SU05      S
   n[        U[        R                  " SSS	[        R                  /5      5        g )Nr   r   r  r  r  r  r  r  rv  r   )r   r   r   r   r   r   r  r"   ry   rz   r  r   r   r  s          rD   "test_cast_float_to_string_and_back9TestReferenceEvaluator.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JrH   c                   [        S[        R                  S 5      n[        S[        R                  S 5      n[        S[        R                  S 5      n[        SSS/S/SS9/n[        [        USX/U/5      5      n[        U5      n[        R                  " S5      R                  S	5      R                  [        R                  5      n[        R                  " S[        R                  S
9nUR!                  S XxS.5      n	[        R                  " SS/SS/SS///[        R                  S
9[        R                  " SS/SS/SS///[        R                  S
9[        R                  " SS/SS/SS///[        R                  S
9//n
U R#                  [%        U
S   5      [%        U	S   5      5        ['        U
S   U	S   SS 9 H  u  p[)        X5        M     g )!Nr   r   r  SplitToSequencerp   r
  r  rm  rq   r   r   rr   r  rv  r_  rw  r{  r|  r  r`  ra  r  r  r  r  rb  rc  r  rx  ry  r}  r   Tr  r   r   r   rW  	UNDEFINEDr   r   r   r"   ry   rH  r   rI  r   rz   rX  r   r   rw   r  r   r   r   r   r  r  r  r!  r   r  r%  r   r   r   s                rD   test_split_to_sequence-TestReferenceEvaluator.test_split_to_sequence  s   "3(9(94@"3(9(94@"3(=(=tD,sCj3%aHI:eS1&1#>? 'yy}$$Y/66rzzB((1BHH-ggd$56 C:SzD$<@ATC:SzD$<@ATC:d|dD\BC2::V
 	Xa[)3s1v;7SVD9DAA! :rH   c                   [        S[        R                  S 5      n[        S[        R                  S 5      n[        S[        R                  S 5      n[        SSS/S/SS9/n[        [        USX/U/5      5      n[        U5      n[        R                  " S5      R                  S	5      R                  [        R                  5      n[        R                  " / S
Q[        R                  S9nUR!                  S XxS.5      n	[        R                  " SS/SS/SS///[        R                  S9[        R                  " SS/SS/SS///[        R                  S9[        R                  " SS/SS/SS///[        R                  S9//n
U R#                  [%        U
S   5      [%        U	S   5      5        ['        U
S   U	S   S S!9 H  u  p[)        X5        M     g )"Nr   r   r  r  rp   r
  r  rm  r  rp   rp   rp   rr   r  rv  r_  rw  r{  r|  r  r`  ra  r  r  r  r  rb  rc  r  rx  ry  r}  r   Tr  r  r  s                rD   test_split_to_sequence_1d0TestReferenceEvaluator.test_split_to_sequence_1d  s   "3(9(94@"3(9(94@"3(=(=tD,sCj3%aHI:eS1&1#>? 'yy}$$Y/66rzzB((9BHH5ggd$56 C:SzD$<@ATC:SzD$<@ATC:d|dD\BC2::V
 	Xa[)3s1v;7SVD9DAA! :rH   c                   [        S[        R                  S 5      n[        S[        R                  S 5      n[	        SS/S/SSS9/n[        [        USU/U/5      5      n[        U5      n[        R                  " S5      R                  S	5      R                  [        R                  5      nUR                  S SU05      n[        UR                  S   5       Vs/ s H  oS S 2S S 2U4   PM     sn/n	U R!                  [#        U	S   5      [#        US   5      5        [%        U	S   US   S
S9 H  u  p['        X5        M     g s  snf )Nr   r  r  rp   r   rE  r  rm  r  Tr  )r   r   r   r  r   r   r   r"   ry   rH  r   rI  r   r   r{   r\   r   rw   r  r   )r   r   r  r  r  r!  r   r%  r   r   r   r   s               rD   )test_split_to_sequence_nokeepdims_noinput@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-,@A,@q!Q'],@ABXa[)3s1v;7SVD9DAA! : Bs   Ec                d   [        S[        R                  S /5      n[        S[        R                  S /5      n[        S[        R                  S /5      n[        S[        R                  S /5      n[        S[        R                  S /5      n[        [	        [        SS/S/[        R                  S9[        SS/S	/[        R                  S9[        S
/ S/[        S[        R                  S// SQ5      S9[        S
/ S/[        S[        R                  S// SQ5      S9[        SS/S/[        R                  S9[        SS	/S/[        R                  S9[        SS/S/[        R                  S9[        SS/S/[        R                  S9/SU/X#XE/5      5      n[        U5      n[        R                  " / SQ[        R                  S9n[        R                  R                  U[         R"                  5      R%                  [        R                  5      n	[        R                  R                  U[         R&                  5      R%                  [        R                  5      n
UR)                  S SU05      n[+        US   U	5        [+        US   U
5        [+        US   U	5        [+        US   U
5        g )Nr   F1F2F3F4r  f81r  f82r  C1r   r   rq   rp   g?r!  r  C2r  rr   r   rq   rp   r   )r   r   r   r   r   r   r  
FLOAT8E5M2r   r"   ry   rz   r   onnxnumpy_helpersaturate_cast	ml_dtypesfloat8_e4m3fnrI  float8_e5m2r   r   )r   r   r  r  r  r  r  r!  r   	expected1	expected2r%  s               rD   test_cast_float8'TestReferenceEvaluator.test_cast_float8  sZ   "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  7
> !'xx,BJJ?%%33)))

&
 	 %%33D):O:OPWWJJ
	 ggdS$K(A	*A	*A	*A	*rH   z2.0z9assert_allclose does not support ml_dtypes in numpy < 2.0c                   [        S[        R                  S /5      n[        S[        R                  S /5      n[        [	        [        SS/S/[        R                  S9[        SSS/S/SS	9[        SS/S/[        R                  S9/S
U/U/5      5      n[        R                  " SS/[        R                  S9nUR                  [        R                  5      n[        U5      nUR                  S SU05      n[        US   U5         " S S[         5      n[        X8/S9nUR                  S SU05      n[        US   U5        g )Nr   r   r  f8r  CastLikef32r   )saturater  g    cArr   c                      \ rS rSrSrSrg)>TestReferenceEvaluator.test_cast_like_float8.<locals>.CastLikei=  r`   r   N)r/  r  r  r  r  r  r   rH   rD   r  r  =  s    IrH   r  )r   r   r   r   r   r   FLOAT8E4M3FNUZry   rz   r   rI  r  float8_e4m3fnuzr"   r   r   r$   )	r   r   r   r  r   r   r!  r%  r  s	            rD   test_cast_like_float8,TestReferenceEvaluator.test_cast_like_float8"  s0   
 #3(9(9D6B"3(9(9D6BfsedV8R8RSj3+wKfugu9J9JK
 	
 xxC

3;;y889 'ggdS$K(A)	{ 	 !
;ggdS$K(A)rH   c                N   [        S[        R                  S /5      n[        S[        R                  S /5      n[        S[        R                  S /5      n[        [        [        SS/S/[        R                  S9[        SS/S/[        R                  S9/SU/X#/5      5      n[        U5      n[        R                  " / SQ[        R                  S9n[        R                  R                  U[        R                   5      n[        R                  R                  U[        R"                  5      nUR%                  S SU05      n	U R'                  U	S	   R)                  5       UR)                  5       5        U R'                  U	S
   R)                  5       UR)                  5       5        g )Nr   r  r  r  r  r  r   rr   r   rq   )r   r   r   r  r  r   r   r   r"   ry   rz   r   r  r  r  r  r  r	  r   r   rT  )
r   r   r  r  r  r!  r   r
  r  r%  s
             rD   test_cast_float8_output.TestReferenceEvaluator.test_cast_float8_outputD  sQ   "3(9(9D6B#D+*B*BTFK#D+*@*@4&IfsedV8P8PQfsedV8N8NO 

 !'xx,BJJ?%%33D):Q:QR	%%33D):O:OP	ggdS$K(Q)*:*:*<=Q)*:*:*<=rH   c                   [         R                  " SSSSSSSSS	S
SSS[         R                  [         R                  * [         R                  /[         R                  S9n[
        R                  [         R                  " SSSSSSSSSSSSSSS[         R                  /[         R                  S9[
        R                  [         R                  " SSSSSSSSSSSSSSS[         R                  /[         R                  S9[
        R                  [         R                  " SSSSSSSSSSSSSSS[         R                  /[         R                  S9[
        R                  [         R                  " SSSSSSSSS SSSSSS[         R                  /[         R                  S90nS! nUR                  5        H  u  pEU R                  US"9   U" U5      n[        U5      nUR                  S S#U05      S$   n[        X5        U R                  UR                   UR                   5        U R                  UR"                  UR"                  5        S S S 5        M     g ! , (       d  f       M  = f)%Ng	?i`  i  iP  i0  i  iig-C6?g{Gz?i       j@rr   g      ?g      v@g      z@g      t@g      p@g      pg      Xrv  g      ?g      |@g      |g      n@g      ng      ?g      x@g      ?g      @g      g?c                   [        S[        R                  S /5      n[        S[        R                  S /5      n[        SS/S/U S9n[        SS/S/[        R                  S9n[	        X4/SU/U/5      n[        U5      n[        U5        U$ )Nr   r   r  ra  r  r   )r   r   r   r   r   r   r   )r  r   r   r   r   r   ri   s          rD   model_cast_castCTestReferenceEvaluator.test_float8_4_types.<locals>.model_cast_cast  s    &sK,=,=vFA&sK,=,=vFAfsecUr:EfsecU{7H7HIE~taS1#>E#E*J
#rH   r  r   r   )ry   rz   infr  r   r   r  r  r  FLOAT8E5M2FNUZr  r  r"   r   r   r   r\   rs   )	r   r   r   r  r  expectri   r!  r   s	            rD   test_float8_4_types*TestReferenceEvaluator.test_float8_4_types[  sb   HH!$ **'
, $$bhhFF!$ jj''* &&FF!$ jj')* ""BHH&FF!$ jj'%* &&!     !!!!    !FF!$ jj')AU
n	 #..*JB$,R0
(4GGD3(+A.*  &,,7  &,,7 %$ +$$s   BI
I"	c                   [        S[        R                  S /5      n[        S[        R                  S /5      n[	        [        [        SS/S/[        R                  S9/SU/U/5      5      n[        U5      n[        R                  " / SQ[        R                  S9nUR                  [        R                  5      nUR                  S SU05      n[        R                  R!                  US   U5        g )	Nr   r   r  r  r  r   rq   rp   r  r!  rr   r   )r   r   r   BFLOAT16r   r   r   r"   ry   rz   r   rI  r  bfloat16r   rC  assert_array_equalr   r   r   r  r!  r   r   r%  s           rD   test_cast_bfloat16_output0TestReferenceEvaluator.test_cast_bfloat16_output  s    "3(9(9D6B"3(<(<tfEfsecU{7K7KL 	
 !'xx+2::>;;y112ggdS$K(


%%c!fh7rH   c                p   [        S[        R                  S /5      n[        S[        R                  S /5      n[        [	        [        S/ S/[        S[        R                  S/S/5      S9[        S/ S/[        S[        R                  S/S	/5      S9[        S
/ SQS/5      [        SSS/S/SS9/SU/U/5      5      n[        U5      n[        R                  " / SQ[        R                  S9n[        R                  " / SQ[        R                  S9nUR                  S SU05      n[        US   U5        g )Nr   r   r  scalerq   r`  r  r  rv  QuantizeLinearr   r/  r  ra  DequantizeLinearr   r
  r  r'  rr   r   rq   rp   i  r+  r   r   r   r   r   r   r   r  r"   ry   rz   r   r   r   r+  s           rD   test_quantize_linear_e4m30TestReferenceEvaluator.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)rH   c                F   [        S[        R                  S /5      n[        S[        R                  S /5      n[        [	        [        S/ SQS/5      [        SSS/S/SS	9/S
U/U/[        S[        R                  S/S/5      [        S[        R                  S/S/5      /5      5      n[        U5      n[        R                  " / SQ[        R                  S9n[        R                  " / SQ[        R                  S9nUR                  S SU05      n[        US   U5        g )Nr   r   r0  r1  ra  r2  r/  r   r
  r  rq   r`  r  rv  r'  rr   r3  r4  r+  s           rD   %test_quantize_linear_e4m3_initializer<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)rH   c                p   [        S[        R                  S /5      n[        S[        R                  S /5      n[        [	        [        S/ S/[        S[        R                  S/S/5      S9[        S/ S/[        S[        R                  S/S	/5      S9[        S
/ SQS/5      [        SSS/S/SS9/SU/U/5      5      n[        U5      n[        R                  " / SQ[        R                  S9n[        R                  " / SQ[        R                  S9nUR                  S SU05      n[        US   U5        g )Nr   r   r  r/  rq   r`  r  r  rv  r0  r1  ra  r2  r   r
  r  r'  rr   )r   rq   rp   i  r+  )r   r   r   r   r   r   r   r  r"   ry   rz   r   r   r   r+  s           rD   test_quantize_linear_e5m20TestReferenceEvaluator.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)rH   c                *   [        S[        R                  S /5      n[        S[        R                  S /5      n[	        [        [        S/ SQS/5      /SU/U/[        S[        R                  S/S/5      [        S	[        R                  S/S
/5      /5      5      n[        U5      n[        R                  " / SQ[        R                  S9n[        R                  " / SQ[        R                  S9nUR                  S SU05      n[        US   U5        g )Nr   r   r0  r1  r  r/  rq   r`  r    )rv  g      `ra        333333@333333@g      @g         @     rr   )r>  i         i  rF  rG    r   rI  r   r   )r   r   r   UINT16r   r   r   r   r"   ry   rz   r   uint16r   r   r+  s           rD   test_quantize_linear_uint162TestReferenceEvaluator.test_quantize_linear_uint16F  s   "3(9(9D6B"3(:(:TFC.0FN ):):QC#G(:(:QC%I
 !'xx& **)
, 88 ))
" ggdS$K(A)rH   c                *   [        S[        R                  S /5      n[        S[        R                  S /5      n[	        [        [        S/ SQS/5      /SU/U/[        S[        R                  S/S/5      [        S	[        R                  S/S
/5      /5      5      n[        U5      n[        R                  " / SQ[        R                  S9n[        R                  " / SQ[        R                  S9nUR                  S SU05      n[        US   U5        g )Nr   r   r0  r1  r  r/  rq   r`  r  r  )rv  g     ra  r?  r@  rA  rB  rC  g    @g    g    @g    g     @g      rD  rE  rr   )r  r        i  r  rO  rP  r>  ir>   r>  rQ  r>  rQ  r   )r   r   r   INT16r   r   r   r   r"   ry   rz   r   int16r   r   r+  s           rD   test_quantize_linear_int161TestReferenceEvaluator.test_quantize_linear_int16  s   "3(9(9D6B"3(9(9D6B.0FN ):):QC#G(9(9A3F
 !'xx. **1
4 88$ (('
* ggdS$K(A)rH   c                (   [        S[        R                  S /5      n[        S[        R                  S /5      n[	        [        [        S/ SQS/SS9/SU/U/[        S[        R                  S	/S
/5      [        S[        R                  S	/S/5      /5      5      n[        U5      n[        R                  " / SQ[        R                  S9n[        R                  " / SQ[        R                  S9nUR                  S SU05      n[        US   U5        g )Nr   r   r2  r1  r   r
  r  r/  rq   r`  r  r>  )i0u  iy  rH  i  rr   )g     g     r`  g      }@)r   r   rJ  r   r   r   r   r   r"   ry   rz   rK  r   r   r   r+  s           rD   test_dequantize_linear_uint164TestReferenceEvaluator.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)rH   c                (   [        S[        R                  S /5      n[        S[        R                  S /5      n[	        [        [        S/ SQS/SS9/SU/U/[        S[        R                  S	/S
/5      [        S[        R                  S	/S/5      /5      5      n[        U5      n[        R                  " / SQ[        R                  S9n[        R                  " / SQ[        R                  S9nUR                  S SU05      n[        US   U5        g )Nr   r   r2  r1  r   r
  r  r/  rq   r`  r  i )iiii  rr   )g     @g     @g       g     @)r   r   rR  r   r   r   r   r   r"   ry   rz   rS  r   r   r   r+  s           rD   test_dequantize_linear_int163TestReferenceEvaluator.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)rH   r  r   rq   r   rb  )r   r   r   r   )r   r   r   r   )r   r   r   r   )rq   r   r   r   )r   r  r   r  )r   r  r  r  r5  r  )      ?r  rq   r  )r   r   r  r   r  r   r   r   )r  r  r     r5  r     r  )r  D   r  r  r  r  r]  r  r\  r  r   r  r   )r   r   r   r   r   r  )r  r  rQ  )r   r   r   r   c                \   [        S[        R                  S /5      n[        S[        R                  S /5      n[        R
                  " U[        R                  S9n	[        R
                  " U[        R                  S9n
[        [        [        S/ SQS/UUS9/SU/U/[        S[        R                  U	R                  U	5      [        S	[        R                  U	R                  U
5      /5      5      n[        U5      n[        R
                  " U[        R                  S9nUbG  [        R
                  " U[        R                  S9nUR                  S SU05      n[        US
   U5        g U R!                  ["        5         UR                  S SU05        S S S 5        g ! , (       d  f       g = f)Nr   r   rr   r0  r1  rF  
block_sizer  r/  r  r   )r   r   r   INT8ry   rz   r   int8r   r   r   r   r\   r"   r   r   r   rx   r   r   r/  
zero_pointrF  rb  r   r   r   
scale_datazp_datar  r!  r   r%  s                  rD   test_blocked_quantize_linear3TestReferenceEvaluator.test_blocked_quantize_linear  s^   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CFH-"":.sDk* /..   ?F
F+)r   rq   r   r   )r  r  r5  r  )r  -   rC  r  )r   r   rp   r   )r  r  r  r5  )r  r  6   rC  r   r  rv  )rq   rq   r   r   )r   r   r  r  )r  r  r  r  )rp   rq   r   )r   rp   r   r   r   r   rm  r  )r  rm  r  r   r  rT  r  rl  )r  r  r  r  r  r  r  r  )r  r   rp   r   r   r  c                \   [        S[        R                  S /5      n[        S[        R                  S /5      n[        R
                  " U[        R                  S9n	[        R
                  " U[        R                  S9n
[        [        [        S/ SQS/UUS9/SU/U/[        S[        R                  U	R                  U	5      [        S	[        R                  U	R                  U
5      /5      5      n[        U5      n[        R
                  " U[        R                  S9nUbG  [        R
                  " U[        R                  S9nUR                  S SU05      n[        US
   U5        g U R!                  ["        5         UR                  S SU05        S S S 5        g ! , (       d  f       g = f)Nr   r   rr   r2  r1  ra  r  r/  r  r   )r   r   rc  r   ry   rz   r   rd  r   r   r   r   r\   r"   r   r   r   rx   re  s                  rD   test_blocked_dequantize_linear5TestReferenceEvaluator.test_blocked_dequantize_linearZ  s^   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CFH-"":.sDk* /..rk  c           
        S nSnSnSnSn[        S[        R                  / SQ5      n[        S[        R                  S 5      n[	        S	S/S/X#XES
9/n[        [        USU/U/5      5      n	[        U	5      n
[        R                  R                  SSSS5      R                  [        R                  5      nU
R                  S SU05      nU" XX4U5      nU R                  [        US   5      [        U5      5        g )Nc                   [         R                  " S5      R                  [         R                  5      n[         R                  " U R
                  5       Hs  u  pgp[        U U[        SU[        R                  " US-
  S-  5      -
  5      [        SU[        R                  " US-
  S-  5      -   S-   5      2UU	4   S-  5      XVXxU	4'   Mu     XX-  U-  -   U-  -  $ )N)r   r   r   r   r   rq   rp   r   )ry   r}   rI  r   ndindexr\   rJ  r   mathfloorr   ceil)
r   r  betar  r  
square_sumr   r   hr  s
             rD   	_expected2TestReferenceEvaluator.test_lrn.<locals>._expected  s    ,/66rzzBJ jj1
a),Aq4::tax1n#==>q499dQh!^#<<q@B   
*
aA:& 2  ;;DEErH   g-C6*?r  r`  r   r   )r   r   r6  r6  r  LRN)r  rw  r  r  r  r   r   )r   r   r   r  r   r   r   r"   ry   r  r  rI  r   r   r   rw   )r   rz  r  rw  r  r  r   r  r  r  r!  r   r%  r   s                 rD   test_lrnTestReferenceEvaluator.test_lrn  s    	F" "3(9(9>J"3(=(=tDecUSEX
 :eS1#s;< 'yy~~aAq)00<ggdS$K(T$d;SVc(m4rH   c           	        [         R                  " S5      R                  S5      R                  [         R                  5      S-   [         R                  " S5      R                  S5      R                  [         R                  5      [         R
                  " S[         R                  S9S.n[        SS/S/SS/S/S	S
9n[        S0 UDUD6n[        S0 UDUD6n[        XC5        g )Nr   )rq   rq   r   rq   r   r9  rM  rr   r  NOTSETr  r   r   r   r   r  r   
ry   rH  r   rI  r   r}   r   r0   r1   r   r   r  rB   r   r%  s        rD   test_conv_im2col_1d*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<&rH   c           	        [         R                  " S5      R                  S5      R                  [         R                  5      S-   [         R                  " S5      R                  S5      R                  [         R                  5      [         R
                  " S[         R                  S9S.n[        SS/S/S	S	/S/S
S9n[        S0 UDUD6n[        S0 UDUD6n[        XC5        g )Nr5  )rp   r   r   rq   )r   r   r   rM  rr   r  r   r   r  r  r   r  r  s        rD   test_conv_im2col_1d_pad0/TestReferenceEvaluator.test_conv_im2col_1d_pad0  s    9%--j9@@LqP9%--j9@@L$bjj1

 cQC
 (:%:6:)<E<V<&rH   c           	        [         R                  " S5      R                  S5      R                  [         R                  5      S-   [         R                  " S5      R                  S5      R                  [         R                  5      [         R
                  " S[         R                  S9S.n[        SSS/S	S	// S
QSS/SS9n[        S0 UDUD6n[        S0 UDUD6n[        XC5        g )N   )rq   rq   r   r  rq   r  r  rM  rr   r  r   r  r  r  r   r  r  s        rD   test_conv_im2col_2d*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<&rH   c           	        [         R                  " S5      R                  S5      R                  [         R                  5      S-   S[         R                  " S5      R                  S5      R                  [         R                  5      -  [         R
                  " S[         R                  S9S	.n[        SSS/SS// S
QSS/SS9n[        S0 UDUD6n[        S0 UDUD6n[        XC5        g )NrC  )rp   r   r   r   rq   rp   rm  )r   r   rq   rp   rM  rr   r  rv  r  r  r   r  r  s        rD   test_conv_im2col_2d_pad0/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<&rH   c           	        [         R                  " S5      R                  S5      R                  [         R                  5      S-   S[         R                  " S5      R                  S5      R                  [         R                  5      -  [         R
                  " S[         R                  S9S	.n[        SSS/S
S
/SS/S SS9n[        S0 UDUD6n[        S0 UDUD6n[        XC5        g )Nr  )rq   rq   r   r   rq   rp   r  r  rM  rr   r  r   
SAME_LOWER)r  r   r   r   r   r  r   r  r  s        rD   test_conv_im2col_2d_autopad2TestReferenceEvaluator.test_conv_im2col_2d_autopad1  s    5!))-8??

KaObii&..|<CCBJJOO$bjj1

 !fQF!
 (:%:6:)<E<V<&rH   c           	        [         R                  " S5      R                  S5      R                  [         R                  5      S-   [         R                  " S5      R                  S5      R                  [         R                  5      [         R
                  " S[         R                  S9S.n[        S/ S	Q/ S
Q/ SQ/ S	QSS9n[        S0 UDUD6n[        S0 UDUD6n[        XC5        g )Ni  )rq   rq   r   r   rT  rq   r  )rq   rq   r   r   r   rM  rr   r  rq   rq   rq   r[  )rq   rq   rq   rq   rq   rq   r  r  r   r  r  s        rD   test_conv_im2col_3d*TestReferenceEvaluator.test_conv_im2col_3dC  s    ./W&'VBJJ 2&&7>>rzzJ$bjj1
 "#
 (:%:6:)<E<V<&rH   c           	        [         R                  " S5      R                  S5      R                  [         R                  5      S-   [         R                  " S5      R                  S5      R                  [         R                  5      [         R
                  " S[         R                  S9S.n[        SSS/S	S	// S
QSS/SS9n[        S0 UDUD6n[        S0 UDUD6n[        XC5        g )Nr  r  rq   rm  r  r  rr   r  r   r  rp   r  r  r   r  r  s        rD   test_conv_im2col_2d_strides2TestReferenceEvaluator.test_conv_im2col_2d_stridesX      =)11,?FFrzzRUVV=)11,?FFrzzR$bjj1

 !fQF
 (:%:6:)<E<V<&rH   c           	        [         R                  " S5      R                  S5      R                  [         R                  5      S-   [         R                  " S5      R                  S5      R                  [         R                  5      [         R
                  " S[         R                  S9S.n[        SS	S/S
S
// SQS	S	/SS9n[        S0 UDUD6n[        S0 UDUD6n[        XC5        g )Nr  r  rq   rm  r  r  rr   r  rp   r   r  r  r  r   r  r  s        rD   test_conv_im2col_2d_dilations4TestReferenceEvaluator.test_conv_im2col_2d_dilationsj  r  rH   ))r>  )r  )r  )r  )r  )r  rO  c                   [        S[        R                  S 5      n[        S[        R                  S 5      n[        R                  " S5      R                  S5      R                  [        R                  5      n[        US/S/SS9/n[        [        USU/U/5      5      n[        U5      nUR                  S SU05      nUS   n	U R                  U	[        R                  5        U R                  U	R                   S5        g )	Nr   r   r   )rq   r   rp   r   rS  r  r   )r   r   r   ry   rH  r   rI  r   r   r   r   r"   r   r   ndarrayr   r\   )
r   opr   r   r   r  r  r!  r%  rs
             rD   test_reduce_op_no_axis-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,"%rH   )rM  r  r   r   )r   )r   c           	     :   [        S[        R                  S 5      n[        S[        R                  S 5      n[        S[        R                  S 5      n[        S[        R                  S 5      n[        R
                  " S/[        R                  S9n[        S/ SQS/S	S
9n[        [        U/SX#U/U/5      5      n[        U5      n	[        R
                  " S/[        R                  S9R                  SU-  5      n
[        R
                  " SS/U-  [        R                  S9nU	R                  S XUS.5      S   nU R                  UR                  SU-  5        U R                  UR                   [        R                  5        [        R"                  " SS/U5      R%                  [        R                  5      nU	R                  S XUS.5      S   nU R                  UR                  SU-  5        U R                  UR                   [        R                  5        g )Nr   PVr   r   rr   Pad)r   r  r  r  )r   r  r'  r  rq   rM  r   r  r   r   )r   )r   r   r   rW  ry   rz   r   r   r   r   r"   r   rX  r   r   r\   rs   repeatrI  )r   dimr   r  r  r   r  r  r  r!  r   pr%  s                rD   test_padTestReferenceEvaluator.test_pad  s   "3(9(94@"3(9(94@"3(9(94@"3(9(94@"RZZ0JW:tfcA!9qcBC 'HHaS

+33D3J?HHaVc\2ggd!%89!<D3J/BJJ/IIq!fc"))"((3ggd!%89!<ECK0BJJ/rH   c                   [        S[        R                  S 5      n[        S[        R                  S 5      n[        SS/S/S9[        SS/S/[	        S[        R
                  S/S/5      S	9/n[        [        US
U/U/5      5      n[        U5      n[        R                  " S[        R                  S9nUR                  S SU05      S   nU R                  UR                  S5        U R                  UR                  [        R                   5        [#        [        R                  " S[        R                   S9U5        g )Nr   r   rE  r\   rP  ConstantOfShaper  rq   r  r  rr   r   r   )r   r   r   r   r   rJ  r   r   r"   ry   rz   r   r   r   r\   rs   rK  r   r   r   r   r  r  r!  r   r%  s           rD   test_constant_of_shape-TestReferenceEvaluator.test_constant_of_shape  s   "3(9(94@"3(9(94@ gsegY?!y!';+=+=sQCH	
 :eS1#s;< 'HHQbjj)ggdS!H%a(B'BII."))4c:rH   c                   [        S[        R                  S 5      n[        S[        R                  S 5      n[        S/ S/[	        S[        R
                  S/S/5      S9[        S	S/S
/S9[        SS
/S/[	        S[        R                  S/S/5      S9[        SSS/S/5      /n[        [        USU/U/5      5      n[        U5      n[        R                  " S[        R                  S9nUR                  S SU05      S   nU R                  UR                  S5        U R                  UR                   [        R"                  5        [%        [        R                  " S[        R"                  S9U5        g )Nr   r   r  liker   rq   rp   r  rE  r\   rP  r  r  r  r  r  r  rr   r   r   )r   r   r   r   r   rJ  rW  r   r   r"   ry   rz   r   r   r   r\   rs   rK  r   r  s           rD   test_constant_of_shape_castlike6TestReferenceEvaluator.test_constant_of_shape_castlike  sH   "3(9(94@"3(9(94@ !#{'9'9A3D	 gsegY?!y!';+<+<qcA3G	 j5&/C59
  :eS1#s;< 'HHQbjj)ggdS!H%a(B'BII."))4c:rH   c           
     j   S[         R                  " / SQ/ SQ/ SQ/ SQ/ SQ/[         R                  S90n[         R                  " / SQ/ S	Q/ S
Q/ SQ/ SQ/[         R                  S9[         R                  " S[         R                  S9[         R                  " S[         R                  S9/n[	        S[
        R                  S 5      n[	        S[
        R                  S 5      n[	        S[
        R                  S 5      n[	        S[
        R                  S 5      n[        SS// SQ5      /n[        [        USU/XEU/5      [        S[        5       S-
  5      /S9n[        U5      n	U	R                  S U5      n
U R                  [!        U
5      S5        [#        SSS5       H  n[%        X   X+   5        M     g )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`Rrr   )dr  r  r  r     r  r	  r  r     r  i   r           r  r        w   r0     z   r-        r  r  r  r        r         r  r  r     a   r-  r  r  r  r  r  r     r:  U         s   r  r     r&  r  r  r        q   r  r  r3        r9  ^      r  r  r  r  r  r  r1  r  r+  r0     r     r
  r     r  rm     r  r  r.  r  r  r  F   r  r  )db   r7  r  x   r  r  r  r        r  r;     r     r     r  r  r  g   r  r  r     r  r  r  r  }   r     r  r  r  r-     r  j   r  p   r  r  r  r  r  r  r  r  r  r;  r  r  r  r  r*  r  r  r-  r  r  r  r  r  r     n   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r)  r)  u   r  r  r  r+  r  r  r  r     r   r9  r  r  )dr  r  r  r  r  r  r  r0  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  r  r  r  r  r  r  r9  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  )dr  V   r0  r9  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r9  r  r  r  r  r  r  r  r/     r     r  r.  r  >   r  r  r  r/  r  r0  r   r  r0  r  r  r  r  r  r  r1  r  r  r  r  r  r     r  r  r  m   r  r  r  r     r  r   r  v   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  )dr  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  r(  r  r  r  r  r  9   r1  r*  r  r  r  r  r   r  r  r!  r  r  r  r  r  r  r  r  r  r  G   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  g    v?r  r   r/  zpDynamicQuantizeLinear)r   r/  r  r  r`   rq   r   r   rp   r   )ry   rz   r   r:  r   r   r   r  r   r   r   r   r   r"   r   r   rw   r{   r   )r   r  r   r   r   ScaleZpr  r  r!  r%  r   s               rD   test_dynamic_quantize_linear3TestReferenceEvaluator.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27',>,@1,DEF
 !'ggdE"S1%q"b!ACFHK0 "rH   abcdefz.comz.netzabc.comzdef.netr  )catdogsnakes)catsdogssnakesr  )r  r  r  r   )r      ßr   )aau   ßßyyc                N   [        S[        R                  S 5      n[        S[        R                  S 5      n[        S[        R                  S 5      n[        SSS/S/S9n[	        [        U/SXV/U/5      5      n	[        U	5      n
U
R                  S [        R                  " U5      [        R                  " U5      S.5      tp[        R                  R                  X5        U R                  UR                  R                  SS	15        U R                  UR                   U5        g )
Nr   r   r   StringConcatrP  r  )r   r   Or  )r   r   r  r   r   r   r"   r   ry   rz   rC  r*  r  rs   kindr   r\   )r   r   r   r   expected_shaper   r   r   r  r  r!  r   r   s                rD   test_string_concat)TestReferenceEvaluator.test_string_concat   s     #3(:(:DA"3(:(:DA"3(:(:DAc
SEJ:tfcA6A3?@ 'WWT!288A;#GH



%%f7fll''#s4~6rH   z1,2,34,5,6,)123)456)1,4,6r`   r"  r`   r%  r'  )rp   rp   rq   )r"  r)  r   z5,6)rq   rp   rp   )r(  r)  r   )r"  r`   r`   )r%  r'  r`   )rp   rp   r   )zhello world !z  hello   world !z hello world   ! )helloworld!r[  z	o-n-n--x-z	o-n----nx-)or   r   r`   r   r`   )r.  r   r`   r`   r`   nx rl  c           	     ^   [        S[        R                  S 5      n[        S[        R                  S 5      n[        S[        R                  S 5      n[	        SS/SS/UUS9n	[        [        U	/SU/Xx/5      5      n
[        U
5      n[        R                  " U[        S9nUR                  S SU05      tpn[        R                  R                  U[        R                  " U[        S95        [        R                  R                  U[        R                  " U[        R                  S95        g )Nr   Splits	MaxSplitsStringSplit)r   r  	delimitermaxsplitr  rr   )r   r   r  INT32r   r   r   r"   ry   rz   objectr   rC  r*  rX  )r   r   r5  r6  expected_splitexpected_num_splitsr   r2  r3  r  r  r!  r   
num_splitsr   s                  rD   test_string_split(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	
rH   c                   [        S/ SQS/S9n[        U/S[        S[        R                  S S /5      [        S[        R                  S/5      [        S	[        R
                  S/5      [        S
[        R                  S S /5      [        S[        R                  S/5      [        S[        R
                  S/5      [        S[        R                  S/5      [        S[        R
                  S/5      /[        S[        R                  S S /5      /5      n[        U[        SS5      /SS9n[        U5      n[        R                  " / SQ/ SQ/5      nUS-  nUR                  [        R                  5      n[        R                  " S/[        R                  S9n[        R                  " S/[        R                  S9n[        R                  " / SQ/ SQ/ SQ/ SQ/5      nUS-  nUR                  [        R                  5      n[        R                  " S/[        R                  S9n	[        R                  " S/[        R                  S9n
[        R                  " S/[        R                  S9n[        R                  " S /[        R                  S9nUR                  S [        UUUUU	U
UUS95      n[        R                   R#                  [        R                  " / S!Q/ S"Q/[        R                  S9US#   5        g )$NQLinearMatMul)r   a_scalea_zero_pointr   b_scaleb_zero_pointr  r  r   rP  r  r   r@  rq   rA  r   rB  rC  r  r  r`   r  r  r   rf   )r  r&  r      )r   r  r  r  r  gF%u{?rr   )r,  r     )rC  r  r  )r   r     )r  rP  r  g!u|?ig'?)r  irI  )rq   ir  r   )r   r   r   r   r   rc  r   r   r"   ry   rz   rI  rd  r   r   r   rC  r*  )r   r  r   ri   r   r   r@  rA  r   rB  rC  r  r  r%  s                 rD   test_qlinearconv_int8,TestReferenceEvaluator.test_qlinearconv_int8v  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	
rH   )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  c                   [        S[        R                  S 5      n[        S[        R                  S 5      n[	        SS/S/US9n[        [        U/SU/U/5      5      n[        U5      n	U	R                  S S[        R                  " U5      05      tp[        R                  R                  X5        U R                  U
R                  R                  S5        U R                  U
R                   U5        g )Nr   r   RegexFullMatchr   r  patternr  r   )r   r   r  r  r   r   r   r"   r   ry   rz   rC  r*  r   rs   r  r\   )r   r   rU  r   r  r   r   r  r  r!  r   r   s               rD   test_regex_full_match,TestReferenceEvaluator.test_regex_full_match  s    8 #3(:(:DA"3(8(8$?)3%#PWX:tfcA3<= 'WWTC!#56



%%f7**C0~6rH   c                   [        S[        R                  S 5      n[        S[        R                  S 5      n[	        SS/S/SS9n[        [        U/SU/U/5      5      n[        U5      nU R                  [        5         UR                  S S[        R                  " S/5      05        S S S 5        g ! , (       d  f       g = f)Nr   r   rS  zx)rT  r  r   )r   r   r  r  r   r   r   r"   r   rx   r   ry   rz   )r   r   r   r  r  r!  s         rD   test_regex_invalid_pattern1TestReferenceEvaluator.test_regex_invalid_pattern  s    "3(:(:DA"3(8(8$?)3%#PTU:tfcA3<= 'z*GGD3#01 +**s   ?*B22
C )r   r         ?rp   ffffff
@r   r  r  )r   r   rp   rp   r   r   r   r   )r   r   r[  rp   r\  r   r  )r   r   rp   rp   r   r   r   )      -r   r[  rp   r\  r   r  )r   r   r   rp   rp   rp   rp   rp   )r]  r^  r   r[  rp   r\  r   )r   r   r   rp   rp   rp   rp   c                   [        S[        R                  S /5      n[        S[        R                  S /5      n[        [	        [        S/ S/[        S[        R                  S/S/5      S9[        S/ S/[        SUS/S	/5      S9[        S
/ SQS/5      [        SSS/S/S	S9/SU/U/5      5      n[        U5      nUR                  S S[        R                  " U5      05      n[        US	   U5        g Nr   r   r  r/  rq   r`  r  r  r   r0  r1  ra  r2  r
  r  r   r   r   r   r   r   r   r"   r   ry   asarrayr   	r   qtyper   r   r   r   r  r!  r%  s	            rD   test_quantize_linear_int20TestReferenceEvaluator.test_quantize_linear_int2     . #3(9(9D6B"3(9(9D6B" 	)';3D3DqcC5Q	 ")&%!qcB	 .0FN03.3%aP  '
. !'ggdS"**T"234A)rH   c                   [        SUS /5      n[        SUS /5      n[        [        [        SS/S/US9/SU/U/5      5      n[	        U5      n[
        R                  " / SQ[        R                  R                  U5      S9nUR                  [        R                  R                  U5      5      nUR                  S SU05      n	U R                  U	S   R                  5       UR                  5       5        g 	Nr   r   r  r  r  )r   rq   g333333@g@r   r   rr   r   r   r   r   r   r"   ry   rz   r  helpertensor_dtype_to_np_dtyperI  r   r   rT  
r   	cast_fromcast_tor   r   r  r!  r   r   r%  s
             rD   test_cast_int2_output,TestReferenceEvaluator.test_cast_int2_output       #3	D6:"3$8fsecUw? 	
 !'xx#++66yA
 ;;t{{CCGLMggdS$K(Q(//*;<rH   c                   [        SUS /5      n[        SUS /5      n[        [        [        SS/S/[        R
                  S9/SU/U/5      5      n[        U5      n[        R                  " [        S5      [        R                  S9nUR                  [        R                  R                  U5      5      nUR                  S SU05      n	[        R                   R#                  U	S   U5        g )	Nr   r   r  r  r  rp   rr   r   r   r   r   r   r   r   r"   ry   rz   r{   r   rI  r  rk  rl  r   rC  r*  rm  s
             rD   test_cast_int2_input+TestReferenceEvaluator.test_cast_int2_input;       #3	D6:"3$8fsecU{7H7HI 	
 !'xxa

3;;t{{CCINOggdS$K(


%%c!fh7rH   )r   r   rp   rp   r   r   r  r  )r   r   rp   rp   r   r   r  )rF  r   rp   rp   r   r   r^  )rx  rF  r   rp   rp   r   r   c                   [        S[        R                  S /5      n[        S[        R                  S /5      n[        [	        [        S/ S/[        S[        R                  S/S/5      S9[        S/ S/[        SUS/S	/5      S9[        S
/ SQS/5      [        SSS/S/S	S9/SU/U/5      5      n[        U5      nUR                  S S[        R                  " U5      05      n[        US	   U5        g r`  ra  rc  s	            rD   test_quantize_linear_int40TestReferenceEvaluator.test_quantize_linear_int4V  rg  rH   c                   [        SUS /5      n[        SUS /5      n[        [        [        SS/S/US9/SU/U/5      5      n[	        U5      n[
        R                  " / SQ[        R                  R                  U5      S9nUR                  [        R                  R                  U5      5      nUR                  S SU05      n	U R                  U	S   R                  5       UR                  5       5        g ri  rj  rm  s
             rD   test_cast_int4_output,TestReferenceEvaluator.test_cast_int4_output  rr  rH   c                   [        SUS /5      n[        SUS /5      n[        [        [        SS/S/[        R
                  S9/SU/U/5      5      n[        U5      n[        R                  " [        S5      [        R                  S9nUR                  [        R                  R                  U5      5      nUR                  S SU05      n	[        R                   R#                  U	S   U5        g )	Nr   r   r  r  r  r   rr   r   rt  rm  s
             rD   test_cast_int4_input+TestReferenceEvaluator.test_cast_int4_input  rw  rH   c                   [        S[        R                  S/5      n[        S[        R                  S/5      n[        S[        R                  S/5      n[        SSS/S/[	        S/ S/S	/S
S9[	        SSS/S/SS9/[        SS5      /S9n[        SSS/S/[	        S/ S/S	/SS9[	        SSS/S/5      [	        SS/S/[        [	        SS/S/SS9/S/ U/5      [        [	        SSS/S/SS9/S/ U/5      SS9/[        SS5      [        SS5      /S9n[        [        [	        SS/S/SS9/SU/U/5      S[        SS5      [        SS5      /XE/S 9nS[        R                  " S!/[        R                  S"90n[        U5      nUR                  S U5      n	[        R                  R                  [        R                  " S#/[        R                  S"9U	S$   5        g )%Nr   Nr  thisfctaddinput2r  rI  r_  CC0r  rZ   r   A1r   r`   r  r   r  r  CCr  r  r  rd   r  r  :IFr  r  rZ   rq   r  r   rf   r   ra  r   rr   r   r   r   r   r   r   r   r   r   r   ry   rz   r   r"   r   rC  rD  
r   r   r  r  func_def_addfunc_defr  r  rq  r   s
             rD   'test_a_function_calling_a_function_once>TestReferenceEvaluator.test_a_function_calling_a_function_once  s0   "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- $.
	" bhht2::67!),88D%( 	

"RZZ @(1+NrH   c                   [        S[        R                  S/5      n[        S[        R                  S/5      n[        S[        R                  S/5      n[        SSS/S/[	        S/ S/S	/S
S9[	        SSS/S/SS9/[        SS5      /S9n[        SSS/S/[	        S/ S/S	/SS9[	        SSS/S/5      [	        SS/S/[        [	        SS/S/SS9/S/ U/5      [        [	        SSS/S/SS9/S/ U/5      SS9/[        SS5      [        SS5      /S9n[        [        [	        SS/S/SS9[	        SS/S/SS9/SU/U/5      S [        SS5      [        SS5      /XE/S!9nS[        R                  " S"/[        R                  S#90n[        U5      nUR                  S U5      n	[        R                  R                  [        R                  " S$/[        R                  S#9U	S%   5        g )&Nr   r  r  r  r  r  r  rI  r_  r  r  r   r  r   r`   r  r   r  r  r  r  r  r  r  r  r  r  r  rq   ztmpr  r   r  r   rr   r   r  r  s
             rD   )test_a_function_calling_a_function_double@TestReferenceEvaluator.test_a_function_calling_a_function_double  sB   "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- $.
	$ bhht2::67!),88D%( 	

"RZZ @(1+NrH   c                P   [        S[        R                  S/5      n[        S[        R                  S/5      n[        S[        R                  S/5      n[        SSS/S/[	        S/ S/S	/S
S9[	        SSS/S/SS9/[        SS5      /S9n[        SSS/S/[	        S/ S/S	/SS9[	        SSS/S/5      [	        SS/S/[        [	        SS/S/SS9/S/ U/5      [        [	        SSS/S/SS9/S/ U/5      SS9/[        SS5      [        SS5      /S9n[        [        [	        SS/S/SS9[	        SS/S/SS9/SU/U/5      S [        SS5      [        SS5      /XE/S!9n " S" S#[        5      nU" U5      nUR                  R                  5        H  n	U R                  X5        M     g )$Nr   r  r  r  r  r  r  rI  r_  r  r  r   r  r   r`   r  r   r  r  r  r  r  r  r  r  r  r  r  rq   r  r  r   r  c                      \ rS rSrSrg)[TestReferenceEvaluator.test_overload_reference_implementation.<locals>.MyReferenceEvaluatori  r   Nr6  r   rH   rD   MyReferenceEvaluatorr    r8  rH   r  )r   r   r   r   r   r   r   r   r"   
functions_r  r   )
r   r   r  r  r  r  r  r  rq  r  s
             rD   &test_overload_reference_implementation=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- $.
	$	#5 	 $I.'')A!!!: *rH   ))r  q=
ףp?)r  r  )r  333333?)r"  r  )r  r   )r   r   )FLOAT16gMb`?)r(  g{Gz?c                   [        [        U5      n[        [        [	        SS/S/US9[	        SS/S/US9[	        SSS/S/5      [	        SS/S	/[        R
                  S9/S
[        S[        R
                  / SQ5      [        S[        R
                  / SQ5      /[        S	[        R
                  / SQ5      /5      [        SS5      /SS9n[        USS9n[        R                  " S5      S-  R                  S5      R                  [        R                  5      n[        R                  " S5      S-  R                  S5      R                  [        R                  5      n[        XgS9nXg-   n	UR                  S U5      S   n
[!        XUS9  g )Nr  r   Xcr  r   Ycr   Zcr  r   rr  r`   rm  r  rD  r   r	  r   rp   r   r   r  r  )getattrr   r   r   r   r   r   r   r"   ry   rH  r   rI  r   r   r   r   )r   styper  ityper  r!  r   r   r  r   r%  s              rD   test_add_custom_dtype,TestReferenceEvaluator.test_add_custom_dtype  sd    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q5ggdE"1%D1rH   ))r  )r   )r  )r(  )r  )r  )r  )r"  )INT4)UINT4)INT2)UINT2c                J   [        [        U5      n[        [        [	        SS/S/US9[	        SS/S/US9[	        SSS/S/5      [	        SS/S	/[        R
                  S9/S
[        S[        R                  / SQ5      [        S[        R                  / SQ5      /[        S	[        R                  / SQ5      /5      [        SS5      /SS9n[        U5      n[        R                  " S5      S-  R                  S5      R                  [        R                  5      n[        R                  " S5      S-
  S-  R                  S5      R                  [        R                  5      n[        XVS9nXV:  nUR!                  S U5      S   n	[        R"                  R%                  X5        g )Nr  r   r  r  r   r  r  r  r  r   rr  r`   rm  r  rD  r  r  r   )r  r   r   r   r   r  r   r   r   r"   ry   rH  r   rI  r   r   r   rC  rD  )
r   r  r  r  r!  r   r   r  r   r%  s
             rD   test_cmp_custom_dtype,TestReferenceEvaluator.test_cmp_custom_dtype  sp   " U+fsedV>fsedV>.ttfE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q6ggdE"1%


.rH   c                   [        [        [        S/ SQS/SSS9/S[        S[        R
                  S 5      [        S	[        R                  S 5      [        S
[        R
                  S 5      /[        S[        R
                  S 5      /5      [        SS5      /S9n[        R                  " S[        R                  S9R                  S5      n[        R                  " S////[        R                  S9n[        R                  " S////[        R                  S9n[        R                  " / SQ[        R                  S9R                  S5      n[        U5      nUR                  S X#US.5      n[!        US   U5        g )Nr  )r   r  updatesr  r   addr  rZ   r   r  r  r`   rm  r   r  rr   )rp   rp   rp   rp   r   rq   )rq   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   rW  r   ry   r}   r   r   rz   rX  r"   r   r   )r   r  r   r  r  r   r!  r%  s           rD   test_scatter_elements_4d/TestReferenceEvaluator.test_scatter_elements_4d  sD   )6"' *6;3D3DdK*9k6G6GN*9k6G6GN
 ([->->EF!$ (B/0'
* xxBJJ/77E((qcUG9BHH5((qcUG9BJJ7HH<BJJ

',
 	
 !'ggdT'RSA"rH   c                    U R                  S5      n[        U5      n[        R                  " S[        R                  " S5      S9nUR                  S/SU/05      S   nU R                  SUR                  5        g )	Na  
        <
            ir_version: 8,
            opset_import: [ "" : 21 ]
        >
        preprocess (seq(float[X, Y]) images) => (float[N, 5, 5] preprocessed)
        {
            seq = SequenceMap<
                body=preprocess_single(float[X, Y] image) => (float[5, 5] resized)
                {
                    size = Constant<value=int64[2] {5, 5}>()

                    resized = Resize<
                        mode="linear",
                        axes=[0, 1]
                    >(image, , , size)
                }
            >(images)
            preprocessed = ConcatFromSequence<axis=0, new_axis=1>(seq)
        }
        )r   r   r   rr   preprocessedimagesr   )rq   r   r   )r   r"   ry   r}   rs   r   r   r\   )r   r  	evaluatorimageInr  s        rD   test_sequence_axis)TestReferenceEvaluator.test_sequence_axis!  so      
. 'u-	((8288I+>?/(WI1FGJFLL1rH   c                   [        [        [        SS/S/SS9/S[        S[        R
                  S 5      /[        S[        R
                  S 5      /5      [        SS5      /S	9n[        R                  R                  S
S5      R                  [        R                  5      n[        U5      nUR                  S SU05      nU R                  UR                  US   R                  5        g )N	LeakyRelur   r   r[  r  rZ   r`   rm  r   r   r   r   )r   r   r   r   r   r  r   ry   r  randnrI  r  r"   r   r   rs   )r   r  r   r!  r%  s        rD   test_convert_ml_dtypes-TestReferenceEvaluator.test_convert_ml_dtypes>  s    ;uC@A'[-?-?FG'[-?-?FG	 (B/0
 IIOOAq!((4 'ggdS!H%#a&,,/rH   c           	        [         R                  " S[         R                  S9n[        US5        U R	                  UR
                  [         R                  5        [        [         R                  " S[         R                  * [         R                  * /SS[         R                  * // SQ/UR
                  S9U5        [         R                  " S[         R                  S9n[        US5        U R	                  UR
                  [         R                  5        [        [         R                  " SS[         R                  * [         R                  * /SSS[         R                  * // SQ/UR
                  S9U5        g )Nr  rr   r   rq   r  rQ  rv  )
ry   rn  float16r+   r   rs   r   rz   r!  r}   )r   r   s     rD   test_apply_causal(TestReferenceEvaluator.test_apply_causalM  s   GGF"**-a"**-HHbffWrvvg&AwC177 		
 HHV2::.a"**-HHQ"&&)Aq!bffW+=|Lgg 	
rH   c                   [        S[        R                  / SQ5      n[        S[        R                  S/5      n[        S[        R                  / SQ5      n[	        SSS/S/5      n[        U/SX/U/5      n[        U[        SS	5      /S
9n[        U5        [        R                  " S5      R                  S5      R                  [        R                  5      n[        R                  " / SQ[        R                  S9nUSS2SS2SS24   n	[!        U5      n
U
R#                  SXxS.5      S   n[%        X5        U R'                  UR(                  S5        g)zTest CenterCropPad when target shape equals current dimension.

Validates the fix where comparison should be 'if sh == dim' not 'if sh == a'.
Uses input (5, 5, 1) with target [1, 1, 1] to test axis 2 where dim=1, sh=1, a=2.
r   rr  r\   r   r   CenterCropPadr  r`   rm  r   r  )r   r   rq   r  rr   rp   N)r   r\   r   )r   r   r   rW  r   r   r   r   r   ry   rH  r   rI  r   rz   rX  r"   r   r   r   r\   )r   r   r\   r   r  r   ri   r   target_shaper   r   r%  s               rD   4test_center_crop_pad_no_change_when_shape_equals_dimKTestReferenceEvaluator.test_center_crop_pad_no_change_when_shape_equals_dimc  s    #3(9(9;MN&w0A0AA3G"3(9(9;MN3.3%@D63
QC8l2r6J5KL
JIIbM!!),33BJJ?xx	:QqS!A#q[>!*-hht1<=a@&I.rH   r   )r   r  returnr   )FNg      r_  r  )rl   rY   r  )rl   rY   r  rY   )rn  TensorProto.DataTypero  r  )r  r  r  re  )r/  r  r  r  r   staticmethodr   r   r   r   r  r  r  r!  r&  r2  r6  r;  rL  rP  rZ  rj  rn  rq  rt  r{  r~  r  r  r  r  r  r  r  r  r  r"  r*  r1  r=  rr  r~  r  r  r  r  r  r  r  r  rJ   r  r  r@  rW  r^  rb  re  rh  rk  ro  rP   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r(  r,  r1  r6  rU   r9  rF  rJ  rM  rV  r\  rd  rg  rp  r  parameterizedexpand	itertoolsproductry   rz   r  r   rX  r  r  r  r  r  r  r  r  r  r>   skipIfversion_utilsnumpy_older_thanr  r  r$  r,  r5  r8  r;  rL  rT  rW  rZ  rH  r   r}   rn  ri  dstackro  r}  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r<  rJ  rV  rY  r   r  r  re  r   r  rp  ru  r  r  rz  r}  r  r  r  r  r  r  r  r  r  r  r  r  r   rH   rD   r   r      s   F   6 6p"
'-'R'h/2'#+J-+^2*h'''1*f'''
 $'''*>X1-f5*nl*\{*z1'f$$$$$*$0G*R-&&	0
0%&%* (0 (0T Z3 Z3xy)vCJ











 %( %(N'0R 
 

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

 $D/L&+P+B0+d+4+0=+~0+d#+J)+VS&
8 . .5 4  4:026%2N
>
>>.>'0 wJ wJr   ''   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   ''	
''(8#t
(K&"*"*"1+f __&&u-C*	*<>.~8@8&*@*0*@:*xB*H*2*2   '' BIIbM))!Q//		!Q''1- |\: BIIbM))!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 		299Q<//156:;		288aVaV$45rxx!Q!Q@P7QRS#-/OP 		"%%a+Iy1 .44 		 AA#	    % o?	
AD'+EAD'+R 5D'$'$'&'&'$'*'$'$   ''	


&

&   ''(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	776	72   '' !!0(
  <>STaS)  4*   0'
 sQC(%	
,*-,*<   '' 3 34 0 01	
==,   '' 0 01 3 34	
8-88L88*   '' !!0+
  <>UVaS)  4.   0*
 sQC(%	
,*-,*<   '' 3 34 0 01	
==,   '' 0 01 3 34	
8-88L88*LO\MO^I;V   ''		
22<   ''	
 /! /<#@2:0
,/rH   r   __main__rp   )	verbosity)r   
np.ndarrayr   ztuple[int, ...]r   Sequence[int]r   r  r   r  r  r  )c__doc__
__future__r   r;   r  rt  r>   
contextlibr   	functoolsr   ior   osr   textwrapr	   typingr
   r  r  ry   r  r  numpy.testingr   r  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    onnx.numpy_helperr!   onnx.referencer"   onnx.reference.op_runr#   r$   onnx.reference.opsr%   %onnx.reference.ops._op_common_indicesr&   r'   onnx.reference.ops._op_listr(   r)   3onnx.reference.ops.aionnx_preview_training._op_listr*   onnx.reference.ops.op_attentionr+   onnx.reference.ops.op_celur,   onnx.reference.ops.op_col2imr-   r.   onnx.reference.ops.op_convr/   r0   onnx.reference.ops_optimizedr  .onnx.reference.ops_optimized.op_conv_optimizedr1   collections.abcr2   rY   r3   r5   rJ   rP   rU   r^   rm   r   r   TestCaser   r/  mainr   rH   rD   <module>r     sW   #     &           )   L $ (    ) - 4 & G 5 D 9 . B > V(
  #6*H##NO '*
148( $
0(-`"	"!" " 	"
 " "*d^/X.. d^/N} zMMA rH   