o
    wi                    @  s  d Z ddlmZ ddlZddlZddlZddlZddlmZ ddl	m
Z
 ddlmZ ddlmZ ddlmZ dd	lmZ ddlZddlZddlZdd
lmZmZ ddlmZ ddlmZmZm Z m!Z!m"Z"m#Z#m$Z$ ddl%m&Z& ddl'm(Z( ddl)m*Z* ddl+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z: ddl;m<Z<m=Z=m>Z> ddl?m@Z@ ddlAmBZBmCZC ddlDmEZE ddlFmGZGmHZH ddlImJZJmKZK ddlLmMZM ddlNmOZO ddlPmQZQmRZR ddlSmTZTmUZU ddlVmTZW ddlXmYZY erddlZm[Z[ e\eddZ]e\edd Z^d!d" Z_d#d$ Z`d%d& Zad'd( Zbd)d* Zcd+d, Zdd-d. Zed/d0 ZfdAd:d;ZgG d<d= d=ejhZiejd>krCejkd?d@ dS dS )BzYou 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assert_almost_equal)AttributeProtoFunctionProto
ModelProtoTensorProtocheckerparsersubbyte)get_roi_align_input_values)check_model)onnx_opset_version)float32_to_bfloat16float32_to_float8e4m3float32_to_float8e5m2make_function
make_graph
make_modelmake_model_gen_version	make_nodemake_operatorsetidmake_opsetidmake_sequence_type_protomake_tensormake_tensor_sequence_value_infomake_tensor_value_infomake_value_info)float8e4m3_to_float32float8e5m2_to_float32
from_array)ReferenceEvaluator)OpRunOpRunExpand)load_op)_get_indices_is_out)Cast_19Celu)Adam)_vcelu1)_col2im_naive_implementation_2dcol2im_naive_implementation)Conv_conv_implementation)r4   )_conv_implementation_im2col)SequenceORT_MAX_IR_SUPPORTED_VERSION8$ORT_MAX_ONNX_OPSET_SUPPORTED_VERSION18c                      t   fdd}|S )Nc                    s0   t jd}|d u rtd | i | d S )Nre2zgoogle-re2 not installed)	importlibutil	find_specunittestSkipTest)argskwargsspecfn _/home/ubuntu/sommelier/.venv/lib/python3.10/site-packages/onnx/test/reference_evaluator_test.pywrapperY   s   
zskip_if_no_re2.<locals>.wrapperr   rG   rJ   rH   rF   rI   skip_if_no_re2X   s   rL   c                   r<   )Nc                    <   zdd l }~W n ty   tdd w  | i | d S )Nr   zonnxruntime not installed)onnxruntimeImportErrorrA   rB   )rC   rD   rN   rF   rH   rI   rJ   d      z'skip_if_no_onnxruntime.<locals>.wrapperr   rK   rH   rF   rI   skip_if_no_onnxruntimec      	rQ   c                   r<   )Nc                    rM   )Nr   ztorch not installed)torchrO   rA   rB   )rC   rD   rS   rF   rH   rI   rJ   r   rP   z!skip_if_no_torch.<locals>.wrapperr   rK   rH   rF   rI   skip_if_no_torchq   rR   rT   c                   r<   )Nc                    rM   )Nr   ztorchvision not installed)torchvisionrO   rA   rB   )rC   rD   rU   rF   rH   rI   rJ      rP   z'skip_if_no_torchvision.<locals>.wrapperr   rK   rH   rF   rI   skip_if_no_torchvision   rR   rV   c                   r<   )Nc                    rM   )Nr   zml-dtypes not installed)	ml_dtypesrO   rA   rB   )rC   rD   rW   rF   rH   rI   rJ      rP   z%skip_if_no_ml_dtypes.<locals>.wrapperr   rK   rH   rF   rI   skip_if_no_ml_dtypes   rR   rX   c                 C  s*   t |trt| ||S t|}t| ||S N)
isinstanceintr"   r    r$   )name	elem_typeshapes_typerH   rH   rI   make_sequence_value_info   s   
r`   c                 C  sV   dd l }t}| jD ]}|jdv r|j} nq	| jtks|tkr!d S |j|  dgdS )Nr   ) zai.onnxCPUExecutionProvider)	providers)	rN   r:   opset_importdomainversion
ir_versionr8   InferenceSessionSerializeToString)
onnx_modelortonnx_domain_opsetopsetrH   rH   rI   run_ort_inference   s   



rn   c                   s  t |tstdt|dt| jt|kr$td| jd|dtd  t fddt	 D }t
| j| }t	 D ]0}|| || d	 || d	   }t|| | || d
  || d	  ||  d	 }	|	||< qDt|}
tj|
| jd}t|}t|jd   }t	|D ]L}t||jd   }t|}t	|D ]6}t||}t|}|| |ddd
f  ||  }t|}t|| jrd
||| < q| t| ||| < qq|S )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 .   c                   s    g | ]}| |   fqS rH   rH   .0in_dimspadsrH   rI   
<listcomp>   s     z/im2col_naive_implementation.<locals>.<listcomp>   r   dtypeN)rZ   tuple	TypeErrortypelenr^   
ValueErrornparrayrangelistr[   zerosrz   prodr,   r-   )datakernel_shape	dilationsrv   stridesnew_padslist_output_shapedkdndoutput_shapereskernel_sizeres_sizers   i_rest_resji_kernelt_kerneli_imgt_imgrH   rt   rI   im2col_naive_implementation   s@   
 *


 
r   img
np.ndarrayr   tuple[int, ...]r   Sequence[int]rv   r   returnc           
      C  s   d }t | jd D ]6}t | jd D ],}t| ||df ||||}|d u r7| jd d |j }	tj|	| jd}||||df< qq	|jd t|  d }	||	S )Nr   rx   .rp   ry   ))r   r^   r   r   emptyrz   r~   reshape)
r   r   r   rv   r   r   ncout	new_shaperH   rH   rI   im2col   s   
r   c                   @  s  e Zd ZdZedddZedddZdd Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zd$d% Zd&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 Zd4d5 Zd6d7 Zd8d9 Zd:d; Zd<d= Zd>d? Zd@dA Z dBdC Z!dDdE Z"dFdG Z#dHdI Z$dJdK Z%dLdM Z&dNdO Z'dPdQ Z(dRdS Z)dTdU Z*dVdW Z+dXdY Z,dZd[ Z-d\d] Z.d^d_ Z/e0d`da Z1e0dbdc Z2ddde Z3dfdg Z4dhdi Z5djdk Z6dldm Z7dndo Z8dpdq Z9drds Z:e;dtdu Z<dvdw Z=e;dxdy Z>e;dzd{ Z?d|d} Z@d~d ZAdd ZBdd ZCdd ZDdd ZEdd ZFdd ZGdd ZHdd ZIeJKeLMdddd ZNeJKeLMdddd ZOdd ZPdd ZQe0dd ZRdd ZSe;eTdd ZUdd ZVdd ZWdd ZXdd ZYdd ZZdd Z[dd Z\dd Z]edddZ^e_j_`eabdecjdecjeecjegddggecjfdecjdddgddggecjgdgfdecjdddgddggecjfdecjdddgddggecjgdgfdecjdddgddggecjfdecjdddgddggecjgdgfdecjdddgddggecjfdecjdddgddggecjgdgfdecjdddgddggecjfdecjdddgddggecjgdgfdecjdddgddggecjfdecjdddgddggecjgdgfdecjdddgddggecjfdecjdddgddggecjgdgfdecjdddgddggecjfdecjdddgddggecjgdgfdecjdecjeecjegddggecjfdecjdddgddggecjgdgfg	ddgdddZhe_j_`g ddÐdddZidd Zjdd Zkdd Zldd Zmdd Zndd Zodd Zpdd Zqdd Zrdd Zsdd  Ztdd Zudd Zvdd Zwdd Zxd	d
 Zydd Zzdd Z{e_j_`dec|d}dd ec|dd}ddec~dddg dg dg dgfdec|d}dd ec|dd}ddecdddg dg dg dgfec|d}ddg dg dg dgec~dddg dg dg d gfec|dd!d"gd#d$gd%dg d&fecd'ecd(ec~d(d%dd	fecd)ecd(ec~d(ddd	fgd*d+ Ze_j_`ec|d}ddec|dd}ddec~dddg d,g d-g d.gfec|d}ddec|dd}ddecdddg d/g d0g d1gfecec|d}ddgd ececdddgddggecddd2gddgggec~d3ddg d4g d5gg d6g d7ggfec|d}ddg d8g d8g d8gec~dddg d9g d:g d;gfec|dddgddgd%dg d<fecd'ecd(ec~d(d%dd	fecd)ecd(ec~d(ddd	fgd=d> Zd?d@ ZdAdB ZdCdD ZdEdF ZdGdH ZdIdJ ZdKdL ZdMdN ZdOdP Ze_j_`g dQdRdS Ze_j_`g dTdUdV ZdWdX ZdYdZ Zd[d\ Ze_j_`d]d^gd_d`gdadbgdcfg dddegg dfdgfdhg dig dig djdgfgdkdl Ze_j_`dmdngdod	g dpg dqgddgfg drdod	dsdtgdudvgdtdtggg dwfg dxdoddsdtgdudvgdudyggg dzfg d{g d{gdod	g d|g d}g dqgg d|g d}g dqggg d~g d~gfg dd	d	g dg dg dgg dfg ddtd	g dg dg dgg dfddgdd	g dg dgddgfg ddecdg }dg fgdd Zdd Ze_j_`g ddg ddgfg dg dgdg dg dgdfg ddg ddfgedd Zedd Ze_j_`ejg dg dfejg dg dfejd%gd%gfejg dg dfejg dg dfejd%gd%gfgeJKeLMdddd Ze_j_`eabejejfejejfdd Ze_j_`eabejejfejejfdd Zdd Zdd Zdd Ze_j_`g dedd Ze_j_`g dedd Zdd Zdd Zdd Zd	S (  TestReferenceEvaluatora6  
        <
            ir_version: 7,
            opset_import: [ "": 10, "com.microsoft": 1]
        >
        agraph (float[N, M] B01, float[N, M] B11, float[N, M] B21) => (float[N, M] D0)
        {
            C0 = Add(B01, B11)
            C1 = Sub(B11, B21)
            D0 = Mul(C0, C1)
        }
        m_defstrr   r   c                 C  s   t | }t| |S )zjParses a model from a string representation, including checking
        the model for correctness
        )r   parse_modelr   r   )r   mrH   rH   rI   _load_model	  s   

z"TestReferenceEvaluator._load_modelFN            ?c              
     sB  t dtjd d g}t dtjd d g}t dtjd d g}t dtjd g}tdddgdg}| rtdddgdg}	|d ur~|d	k r~rZ rOtd
dgdg d}
n td
dgdgd}
n rgtd
dgdg d}
ntd
dgdg}
t||	|
gd|||g|g}nOrttjgtjdddnd } rttj gtjdddnd }d|rdnd|rdndg}td
|dg}
dd ||fD }t||	|
gd|||g|g|d} fdd}ntdddgdg}	t||	gd|||g|g}dd }|d u rt	|}n
t	|t
d|gd}z	t| W ||fS  ty  } ztd| |d }~ww )NXABYMatMulXAAddY_clip   Clip)minmax)r   )r   lrry   mir\   mara   c                 S  s   g | ]}|r|qS rH   rH   )rr   _rH   rH   rI   rw   5      z=TestReferenceEvaluator._linear_regression.<locals>.<listcomp>initializerc                   s   t || |  S rY   )r   clipxab	max_value	min_valuerH   rI   f:  s   z4TestReferenceEvaluator._linear_regression.<locals>.fc                 S  s   || | S rY   rH   r   rH   rH   rI   <lambda>@  s    z;TestReferenceEvaluator._linear_regression.<locals>.<lambda>opset_importszchecker fails for
)r#   r   FLOATr   r   r'   r   r   float32r   r   r   	ExceptionAssertionError)r   rm   r   r   r   r   r   r   node1node2node3graphr   r   inputsr   r   rj   erH   r   rI   _linear_regression  s\   

z)TestReferenceEvaluator._linear_regressionc                 C  sJ   t dtjd d g}| t t| W d    d S 1 sw   Y  d S )Nr   )r#   r   r   assertRaisesr|   r(   )selfr   rH   rH   rI   #test_reference_evaluator_exceptionsK  s   
"z:TestReferenceEvaluator.test_reference_evaluator_exceptionsc                 C  s   t t j}t| t|}| |jg d | |jdg | |j	ddd t
jddgddggt
jd	}t
jd
dgddggt
jd	}t
jddgddggt
jd	}|d |||dd }|| ||  }t|| d S NB01B11B21D0
   rx   ra   zcom.microsoftr   rp      ry               )r   r   m2_defr   r   r(   assertEqualinput_namesoutput_namesopsetsr   r   r   runr
   r   r   sessr   yzr   expectedrH   rH   rI   %test_reference_evaluator_no_attributeP  s   
z<TestReferenceEvaluator.test_reference_evaluator_no_attributec                 C  s   t t j}t| t|}| |jg d | |jdg | |j	ddd t
jddgddggt
jd	}t
jd
dgddggt
jd	}t
jddgddggt
jd	}|jd |||ddd}| |t || ||  }t||d  d S )Nr   r   r   rx   r   r   rp   r   ry   r   r   r   r   r   r   r   r   T)intermediate)r   r   r   r   r   r(   r   r   r   r   r   r   r   r   assertIsInstancedictr
   r   rH   rH   rI   2test_reference_evaluator_no_attribute_intermediate^  s   
zITestReferenceEvaluator.test_reference_evaluator_no_attribute_intermediatec                 C  s   t t j}t| t| }| |jg d | |j	dg | |j
ddd tjddgddggtjd	}tjd
dgddggtjd	}tjddgddggtjd	}|d |||dd }|| ||  }t|| d S r   )r   r   r   r   r   r(   ri   r   r   r   r   r   r   r   r   r
   r   rH   rH   rI   +test_reference_evaluator_no_attribute_bytesm  s   
zBTestReferenceEvaluator.test_reference_evaluator_no_attribute_bytesc           	   	   C  s  t t j}tjddgddggtjd}tjddgdd	ggtjd}tjd
dgddggtjd}| jdd; t|dd}t }t	| |
d |||d W d    n1 sYw   Y  | }d}| || W d    n1 stw   Y  | jdd@ t|dd}t }t	| |
d |||d W d    n1 sw   Y  | }tdd}| || W d    n1 sw   Y  | jdd@ t|dd}t }t	| |
d |||d W d    n1 sw   Y  | }tdd}| || W d    n	1 sw   Y  | jddB t|dd}t }t	| |
d |||d W d    n	1 s@w   Y  | }tdd}| || W d    d S 1 sbw   Y  d S )Nr   rx   rp   r   ry   r   r   r   r   r   r   r   r   )levelverboser   z:Add(B01, B11) -> C0
Sub(B11, B21) -> C1
Mul(C0, C1) -> D0
a  
                 +I B01: float32:(2, 2) in [0.0, 3.0]
                 +I B11: float32:(2, 2) in [4.0, 7.0]
                 +I B21: float32:(2, 2) in [-7.0, -4.0]
                Add(B01, B11) -> C0
                 + C0: float32:(2, 2) in [4.0, 10.0]
                Sub(B11, B21) -> C1
                 + C1: float32:(2, 2) in [8.0, 14.0]
                Mul(C0, C1) -> D0
                 + D0: float32:(2, 2) in [32.0, 140.0]
                
a  
                 +I B01: float32:(2, 2):[0.0, 1.0, 2.0, 3.0]
                 +I B11: float32:(2, 2):[4.0, 5.0, 6.0, 7.0]
                 +I B21: float32:(2, 2):[-4.0, -5.0, -6.0, -7.0]
                Add(B01, B11) -> C0
                 + C0: float32:(2, 2):[4.0, 6.0, 8.0, 10.0]
                Sub(B11, B21) -> C1
                 + C1: float32:(2, 2):[8.0, 10.0, 12.0, 14.0]
                Mul(C0, C1) -> D0
                 + D0: float32:(2, 2):[32.0, 60.0, 96.0, 140.0]
                   a  
                 +I B01: float32:(2, 2):[0.0, 1.0, 2.0, 3.0]
                 +I B11: float32:(2, 2):[4.0, 5.0, 6.0, 7.0]
                 +I B21: float32:(2, 2):[-4.0, -5.0, -6.0, -7.0]
                Add(B01, B11) -> C0
                -- begin Add.run(2 inputs)
                -- done Add.run -> 1 outputs
                 + C0: float32:(2, 2):[4.0, 6.0, 8.0, 10.0]
                Sub(B11, B21) -> C1
                -- begin Sub.run(2 inputs)
                -- done Sub.run -> 1 outputs
                 + C1: float32:(2, 2):[8.0, 10.0, 12.0, 14.0]
                Mul(C0, C1) -> D0
                -- begin Mul.run(2 inputs)
                -- done Mul.run -> 1 outputs
                 + D0: float32:(2, 2):[32.0, 60.0, 96.0, 140.0]
                )r   r   r   r   r   r   subTestr(   r   r   r   getvaluer   r   lstrip)	r   r   r   r   r   r   stdoutr   logrH   rH   rI   -test_reference_evaluator_no_attribute_verbose{  sp   
	


$zDTestReferenceEvaluator.test_reference_evaluator_no_attribute_verbosec           	      C  s   t  \}}tjddgddggtjd}tjddgtjd}tjdgtjd}||||}t|}|d |||dd }t|| d S )Nr   rx   rp   r   ry   r   r   r   r   )r   r   r   r   r   r(   r   r
   )	r   r   r   r   r   r   r   r   gotrH   rH   rI   test_reference_evaluator_lr  s   z2TestReferenceEvaluator.test_reference_evaluator_lrc           
      C  sv  | j ddY tjdd\}}tjddgddggtjd	}tjddgtjd	}tjd
gtjd	}||||}t|}|jd }| |j	j
d |d |||dd }	t||	 W d    n1 sbw   Y  | j ddZ tjdd d\}}tjddgddggtjd	}tjddgtjd	}tjd
gtjd	}||||}t|}|jd }| |j	j
d |d |||dd }	t||	 W d    n1 sw   Y  | j dd[ tjdd d\}}tjddgddggtjd	}tjddgtjd	}tjd
gtjd	}||||}t|}|jd }| |j	j
d |d |||dd }	t||	 W d    d S 1 s4w   Y  d S )Nmin+maxoptT)r   r   rx   rp   r   ry   r   r   Clip_11r  r   )r   r   r   )r   r   )r  r   r   r   r   r   r(   	rt_nodes_r   	__class____name__r   r
   
r   r   r   r   r   r   r   r   	last_noder  rH   rH   rI    test_reference_evaluator_lr_clip  sH   


$z7TestReferenceEvaluator.test_reference_evaluator_lr_clipc           
      C  s  | j ddh tjddd\}}tjddgdd	ggtjd
}tjddgtjd
}tjdgtjd
}||||}t|}|jd }| |j	j
d | |jd | |jd |d |||dd }	t||	 W d    n1 sqw   Y  | j ddi tjddd d\}}tjddgdd	ggtjd
}tjddgtjd
}tjdgtjd
}||||}t|}|jd }| |j	j
d | |jd | |jd |d |||dd }	t||	 W d    n1 sw   Y  | j ddj tjddd d\}}tjddgdd	ggtjd
}tjddgtjd
}tjdgtjd
}||||}t|}|jd }| |j	j
d | |jd | |jd |d |||dd }	t||	 W d    d S 1 saw   Y  d S )Nr  r  Tr   )r   rm   r   rx   rp   r   ry   r   r   Clip_6r  r   )r   rm   r   g   r   )r   rm   r   g   G)r  r   r   r   r   r   r(   r  r   r  r  r   r   r   r
   r  rH   rH   rI   "test_reference_evaluator_lr_clip_6  s\   




$z9TestReferenceEvaluator.test_reference_evaluator_lr_clip_6c                 C  sR   t d}t|}tjg dtjdd}|d d|id }|}t|| d S )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   rx   r   ry   rx   rx   r   r   r   )	r   r   r(   r   r   uint8r   r   r
   )r   r   r   r   resultr   rH   rH   rI   test_nested_local_functions-  s   -z2TestReferenceEvaluator.test_nested_local_functionsc           
      C  s   t dtjd d g}t dtjd g}tddgdgdgdd}t|gd|g|g}t|tddgd	}t| t	d

dtj}|jddd}t|}|d d|id }	t||	 d S )Nr   r   	ReduceSumrx   axeskeepdimsrsra   r   r   <   r   r   r   axisr!  r   r#   r   r   r   r   r   r   r   r   aranger   astyper   sumr(   r   r
   
r   r   r   r   r   rj   r   r   r   r  rH   rH   rI   test_reduce_sum_11a  s   z)TestReferenceEvaluator.test_reduce_sum_11c           
      C  s   t dtjd d g}t dtjd g}tddgdgdgdd}t|gd|g|g}t|tddgd	}t| t	d

dtj}|| jddd}t|}|d d|id }	t||	 d S )Nr   r   ReduceSumSquarerx   r  r"  ra   r   r   r#  r$  r%  r   r'  r+  rH   rH   rI   test_reduce_sum_square_11n  s   z0TestReferenceEvaluator.test_reduce_sum_square_11c                 C  s   t dtjd d g}t dtjd d g}t dtjd g}tdddgdgdd}t|gd||g|g}t|tdd	gd
}t| t	
ddt	j}t	jdgt	jd}|jddd}	t|}
|
d ||dd }t|	| d S )Nr   r   r   r  rx   r!  r"  ra      r   r#  r$  ry   r%  r   r   r   r#   r   r   INT64r   r   r   r   r   r   r(  r   r)  r   r   int64r*  r(   r   r
   r   r   r   r   r   r   rj   r   r   r   r   r  rH   rH   rI   test_reduce_sum_13{  s   z)TestReferenceEvaluator.test_reduce_sum_13c                 C  sD  t  }d}td|t|dg}tdddgdg}t }d|_d|_tj|_|j	| t
|d	ddgdg|g|dg}tdtjd d g}tdtjd g}tdtjd g}	ttd	ddgdg|dd
gd||g|	g}
t|
||gd}t|}tddtj}tjdgtjd}|d ||dd }|jddd}t|| d S )Ncustomra   rx   r  r   r&  r   r!  MyReduceSum)re   r!  exampler   	functionsr   r   rp   r   ry   )r   r&  r   r%  )r   r   r   r   r\   ref_attr_nameINTr}   	attributeappendr   r#   r   r   r3  r   r   r(   r   r(  r   r)  r   r   r4  r   r*  r
   )r   rm   
new_domainr   nodeattmy_reduce_sumr   r&  r   r   rj   r   r   r   r  r   rH   rH   rI   test_reduce_sum_attribute  sV   
	z0TestReferenceEvaluator.test_reduce_sum_attributec                 C  s   t dtjd d g}t dtjd d g}t dtjd g}tdddgdgdd}t|gd||g|g}t|tdd	gd
}t| t	
ddt	j}t	jdgt	jd}|| jddd}	t|}
|
d ||dd }t|	| d S )Nr   r   r   r-  rx   r/  r"  ra      r   r#  r$  ry   r%  r1  r   r2  r5  rH   rH   rI   test_reduce_sum_square_18  s   z0TestReferenceEvaluator.test_reduce_sum_square_18c                 C  s   t dtjd d g}t dtjd d g}t dtjd g}tdddgdgdd}t|gd||g|g}t|tdd	gd
}t| t	
ddt	j}t	jg t	jd}|jdd}	t|}
|
d ||dd }t|	| d S )Nr   r   r   r  rx   r/  r"  ra   r0  r   r#  r$  ry   r1  r   r2  r5  rH   rH   rI   test_reduce_sum_13_empty_axes  s   z4TestReferenceEvaluator.test_reduce_sum_13_empty_axesc                 C  s   t dtjd d g}t dtjd d g}t dtjd g}tdddgdgdd}t|gd||g|g}t|tdd	gd
}t| t	
ddt	j}t	jg t	jd}|| jdd}	t|}
|
d ||dd }t|	| d S )Nr   r   r   r-  rx   r/  r"  ra   rF  r   r#  r$  ry   r1  r   r2  r5  rH   rH   rI   $test_reduce_sum_square_18_empty_axes  s   z;TestReferenceEvaluator.test_reduce_sum_square_18_empty_axesc           	      C  s   t dtjd d g}t dtjd g}tddgdgddd}t|gd|g|g}t|tddgd	}t| t	d

dtj}t|}|d d|id }t|| d S )Nr   r   r  rx   r!  noop_with_empty_axesr"  ra   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   rj   r   r   r  rH   rH   rI   "test_reduce_sum_13_empty_axes_noop  s   z9TestReferenceEvaluator.test_reduce_sum_13_empty_axes_noopc           	      C  s   t dtjd d g}t dtjd g}tddgdgddd}t|gd|g|g}t|tddgd	}t| t	d

dtj}t|}|d d|id }t|| | d S )Nr   r   r-  rx   rJ  r"  ra   rF  r   r#  r$  r   rL  rM  rH   rH   rI   )test_reduce_sum_square_18_empty_axes_noop  s   z@TestReferenceEvaluator.test_reduce_sum_square_18_empty_axes_noopc                 C  s   t dtjd d g}t dtjd g}t dtjd g}tdddgdg}t|gd||g|g}t|tddgd}t| t	d	
d
tj}tjdgtjd}||k}	t|}
|
d ||dd }t|	| d S )Nr   r   ZGreatergra   r0  r   r   rp   rp   rp   ry   r   r   r   r#   r   r   r   r   r   r   r   r   r(  r   r)  r   r   r(   r   r
   r   r   r   rP  r   r   rj   r   r   r   r   r  rH   rH   rI   test_greater     z#TestReferenceEvaluator.test_greaterc                 C  sp   t dddgdg}tddtj}tjdgtjd}||k}t|}|d ||d	d
 }t	|| d S )NrQ  r   r   rP  r   rS  rp   ry   rT  r   )
r   r   r(  r   r)  r   r   r(   r   r
   )r   r   r   r   r   r   r  rH   rH   rI   test_node_proto  s   z&TestReferenceEvaluator.test_node_protoc                 C  s   t dtjd d g}t dtjd g}t dtjd g}tdddgdg}t|gd||g|g}t|tddgd}t| t	d	
d
tj}tjdgtjd}||k}	t|}
|
d ||dd }t|	| d S )Nr   r   rP  GreaterOrEqualrR  ra   r0  r   r   rS  rp   ry   rT  r   rU  rV  rH   rH   rI   test_greater_or_equal  rX  z,TestReferenceEvaluator.test_greater_or_equalc              	   C  s  t dtjd g}tdg dgttjdgtjdd}t|gdg |g}t dtjd g}tdg dgttjdgtjdd}t|gdg |g}ttjdgtjdd	d
}tddd	gdg}tddgdg||d}t dtjd d g}	t dtjd g}
t||gd|	g|
g|gd}t	|}t
|}| t|d tjdgtjd}|d d|id }ttjdgtjd| tjdgtjd}|d d|id }ttjdgtjd| d S )NCConstantrx   ry   )value_floatsgthenr   gelsezeror   rQ  r   GIfrP  )then_branchelse_branchrR  r   zReferenceEvaluator(X) -> Zr   )r#   r   r   r   r'   r   r   r   r   r   r(   r   r   r   r
   )r   r\  bthen
bthen_bodybelse
belse_bodyra  greaternode_ifr   rP  r   	model_defr   r   r  rH   rH   rI   test_if+  sJ   zTestReferenceEvaluator.test_ifc                 C  s  t dtjdg}t dtjdg}tg dtj}tg dtj}tdg dgt|d}tdg dgt|d}t	|gdg |g}t	|gd	g |g}td
dgdg||d}	t
 }
d|
_d|
_|
jdg |
jdg |
j|	g t }|
jtd|g t	tdddgdgdgdt dtjg gt dtjdggd}t|dtd|tddgd}|j|
g t|}|d dtdi}tjg dtjd}t||d  d S )Nthen_outr   else_outrx   rp   r   r   r   )r   r   r   rp   rx   r]  r   outputsvalue	then_body	else_bodyrc  f_condf_resr   rr  rd  re  r7  rG   ra   condr   )re   r   rr  r   )nodesr\   r   rr  testrx   )producer_namer   Try   r   )r#   r   r   r   r   r)  r   r   r'   r   r   re   r\   inputextendoutputrB  r   rd   r   BOOLr   r;  r(   r   r
   )r   rn  ro  r   r   then_const_nodeelse_const_nodert  ru  if_noder   rm   r   r   r   r  r   rH   rH   rI   test_if_functionW  sV   z'TestReferenceEvaluator.test_if_functionc                 C  s  t  }d}td|t|dg}tdg dg}t }d|_d|_tj|_|j	| tdd	d
gdg}tdddgdg}t
|dd	d
gdg|||g|dg}td	tjd d g}	td
tjd d g}
tdtjd g}ttdd	d
gdg|tdtjdgdgdtddgdggd|	|
g|g}t|||gd}t|}tddtj}tjddgtjd}|d ||dd }t|| d }t|| d S )Nr7  ra   rx   r]  r   rs  biasr   r   r   r   r   r   LinearRegressionY1former_Bq=
ףp?)re   r  Absr9  r:  r   r<  r   ry   r1  r   )r   r   r   r   r\   r=  TENSORr}   r?  r@  r   r#   r   r   r   r!   r   r(   r   r(  r   r)  r   r   r   absr
   )r   rm   rA  r   cstrC  r   r   linear_regressionr   r   r   r   rj   r   r   r   r  r   rH   rH   rI   test_function_attribute  s\   

z.TestReferenceEvaluator.test_function_attributec                 C  sH  t  }d}td|t|dg}tdg dg}t }d|_d|_tj|_|j	| tdg dg}t }d|_d	|_tj|_|j	| t
dtjd g}t
dtjd g}t|gd
g |g}	t|gdg |g}
tdg dgttjdgtjdd}tddgdg}tdddgdg}tddgdg|	|
d}tdddgdg}tdddgdg}t|dddgdg||||||g|dd	g}t
dtjd d g}t
dtjd d g}t
dtjd g}ttdddgdg|tdtjdgd gtd!tjdgd"gd#td$dgdggd%||g|g}t|||gd&}t| t|}| |jd jjd' | |jd jjjd( |jd j}d)}|jD ]}|jjdrM|jsKtd*t| d+d,}q3|sVtd-td. d/!tj}tjdd0gtjd}|"d |d |d1d }t#|| d  }t$|| |"d |d2 |d1d }t#|| d" }t$|| d S )3Nr7  ra   rx   r]  B1rs  bias1B2bias2rt  ru  ra  r   ry   rq  	ReduceMinr   XminrQ  rv  rc  r   rx  r   r   r   r   r   r  r  	former_B1r  	former_B2	  )re   r  r  r  r9  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   r<  r   r1  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  impl_
startswithhas_linked_attributer   r(  r   r)  r   r  r
   )r   rm   rA  r   cst1rC  cst2rn  ro  rt  ru  ra  minirv  r  r   r   r  r   r   r   r   rj   r   fctcheckedrB  r   r   r  r   rH   rH   rI   $test_function_attribute_nested_graph  s   


z;TestReferenceEvaluator.test_function_attribute_nested_graphc                  C  s  t  }d}td|t|dg}tdg dg}t }d|_d|_tj|_|j	| tdg dg}t }d|_d	|_tj|_|j	| t
dtjd g}t
dtjd g}t|gd
g |g}	t|gdg |g}
tdg dgttjdgtjdd}tdddgdg}tddgdg|	|
d}tdg dg}t }d|_d|_tj|_|j	| t
dtjd g}t|gd
g |g}t
dtjd g}t|||gdg |g}tdg dgttjdgtjdd}tddgdg}tdddgdg}tddgdg||d}tddd gd!g}td"d!dgd#g}t|d$dd gd#g||||||g|g d%}t
dtjd d g}t
d tjd d g}t
d#tjd g}ttd$dd gd&g|td'tjdgd(gtd)tjdgd*gtd+tjdgd,gd-td.d&gd#ggd/||g|g}t|||gd0}t| t|}td1d2tj}tjdd3gtjd}|d |d |d4d }t|| d* }t|| |d |d5 |d4d }t|| d6 }t|| |d |d7 |d4d }t|| d( }t|| d S )8Nr7  ra   rx   r]  r  rs  r  r  r  rt  ru  c100d   ry   rq  rQ  r  
f_cond_100rc  B4rx  B3bias3ra  r   r  r   Lessf_cond_zeror   r   r   r   r   r   r  )r  r  r  r  r  r  r  r  	former_B3i)re   r  r  r  r  r9  r:  r   r<  r   r1  r   ix  i  )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   rm   rA  r   r  rC  r  rn  ro  
then_body1
else_body1r  rv  r  cst3
then_body2
else_body2ra  r  r   r   r  r   r   r   r   rj   r   r   r   r  r   rH   rH   rI   +test_function_attribute_nested_nested_graph/  s   	
	

zBTestReferenceEvaluator.test_function_attribute_nested_nested_graphc                 C  sD  G dd d}G dd dt }G dd dt }tdtjd d g}tdtjd g}tddgdgd	d
d}t|gd|g|g}t|td
dgd}t	d
dtjd }	| t t| W d    n1 siw   Y  tddgdgd	d
d}t|gd|g|g}t|td
dgd}| t t||gd W d    n1 sw   Y  tddgdgd	d
d}t|gd|g|g}t|td
dgd}| t t||gd W d    n1 sw   Y  tddgdgd	d
d}t|gd|g|g}t|td
dgd}t|||gd}
|
d d|	id }d|	d	  }t|| d S )Nc                   @  s    e Zd ZdZdd Zdd ZdS )z:TestReferenceEvaluator.test_custom_node.<locals>._InvAlphar7  c                 S  s   || _ || _d S rY   )	onnx_node
run_params)r   r  r  rH   rH   rI   __init__  s   
zCTestReferenceEvaluator.test_custom_node.<locals>._InvAlpha.__init__c                 S     d|| j   fS Nrx   alphar   r   rH   rH   rI   _run     z?TestReferenceEvaluator.test_custom_node.<locals>._InvAlpha._runN)r  
__module____qualname__	op_domainr  r  rH   rH   rH   rI   	_InvAlpha  s    r  c                   @  s   e Zd Zdd ZdS )z:TestReferenceEvaluator.test_custom_node.<locals>.InvAlpha2c                 S  r  r  r  r  rH   rH   rI   r    r  z?TestReferenceEvaluator.test_custom_node.<locals>.InvAlpha2._runN)r  r  r  r  rH   rH   rH   rI   	InvAlpha2  s    r  c                   @     e Zd ZdZdddZdS )z9TestReferenceEvaluator.test_custom_node.<locals>.InvAlphar7  Nc                 S  s   |p| j }d||  fS r  r  r   r   r  rH   rH   rI   r    s   
z>TestReferenceEvaluator.test_custom_node.<locals>.InvAlpha._runrY   r  r  r  r  r  rH   rH   rH   rI   InvAlpha      r  r   r         ?r7  r  re   r"  rx   r   r#  r$  new_opsr   )r)   r#   r   r   r   r   r   r   r   r(  r   r)  r   r   NotImplementedErrorr(   r|   r   r
   )r   r  r  r  r   r   r   r   rj   r   r   r  r   rH   rH   rI   test_custom_node  s>   

z'TestReferenceEvaluator.test_custom_nodec           	      C     G dd dt }tdtjd d g}tdtjd g}tddgdgddd}t|gd|g|g}t|tdd	gd
}t	d
dtjd	 }t||gd}| t |d d|i W d    d S 1 sfw   Y  d S )Nc                   @  r  )zDTestReferenceEvaluator.test_custom_no_output_tuple.<locals>.InvAlphar7  Nc                 S  s   |p| j }d||  S r  r  r  rH   rH   rI   r    s   
zITestReferenceEvaluator.test_custom_no_output_tuple.<locals>.InvAlpha._runrY   r  rH   rH   rH   rI   r    r  r  r   r   r  r7  r  r"  rx   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   rj   r   refrH   rH   rI   test_custom_no_output_tuple  s   "z2TestReferenceEvaluator.test_custom_no_output_tuplec           	      C  r  )Nc                   @  r  )zATestReferenceEvaluator.test_custom_empty_output.<locals>.InvAlphar7  Nc                 S  s   t  S rY   )r{   r  rH   rH   rI   r    s   zFTestReferenceEvaluator.test_custom_empty_output.<locals>.InvAlpha._runrY   r  rH   rH   rH   rI   r    r  r  r   r   r  r7  r  r"  rx   r   r#  r$  r  )r)   r#   r   r   r   r   r   r   r   r(  r   r)  r   r(   r   r   r   r  rH   rH   rI   test_custom_empty_output  s   "z/TestReferenceEvaluator.test_custom_empty_outputc           	      C  r  )Nc                   @  r  )z@TestReferenceEvaluator.test_custom_tuple_tuple.<locals>.InvAlphar7  Nc                 S  sF   |p| j }ttd||  gg}t|tsJ t|d ts!J |S )Nrx   r   )r  r{   rZ   r   r   r  r   rH   rH   rI   r    s
   
zETestReferenceEvaluator.test_custom_tuple_tuple.<locals>.InvAlpha._runrY   r  rH   rH   rH   rI   r    r  r  r   r   r  r7  r  r"  rx   r   r#  r$  r  r  r  rH   rH   rI   test_custom_tuple_tuple  s   
"z.TestReferenceEvaluator.test_custom_tuple_tuplec           	        s   G dd d G  fdddt }tdtjd d g}tdtjd g}tddgdgddd	}t|gd
|g|g}t|tddgd}t	d
dtjd }t||gd}| t |d d|i W d    d S 1 sow   Y  d S )Nc                   @     e Zd ZdS )zLTestReferenceEvaluator.test_custom_tuple_unexpected_type.<locals>.CustomTypeNr  r  r  rH   rH   rH   rI   
CustomType      r  c                      s   e Zd ZdZd fdd	ZdS )zJTestReferenceEvaluator.test_custom_tuple_unexpected_type.<locals>.InvAlphar7  Nc                   s0   t   g}t|t sJ t|d  sJ |S )Nr   )r{   rZ   r  r  rH   rI   r    s   zOTestReferenceEvaluator.test_custom_tuple_unexpected_type.<locals>.InvAlpha._runrY   r  rH   r  rH   rI   r    s    r  r   r   r  r7  r  r"  rx   r   r#  r$  r  r  r  rH   r  rI   !test_custom_tuple_unexpected_type  s   	"z8TestReferenceEvaluator.test_custom_tuple_unexpected_typec                 C  sb  t dtjg }t dtjg }t dtjg }tdtjd }tdtjd }tg dtj	}t
dg dgtd	tj|j| td
d}t
dg dgtdtjddgd
d}t
dg dgtdtjddgd
d}	t
dg dgtdtjddgd
d}
t
dddgdgd}t
dddgdgd}t
dg ddgd}t
dddgdgd}t
ddgdgd}t||||	||
|||g	d |||g||g}t
d!g d"d#g|d$}t
d%d#gd&gddd'}td(tj}g }tdtj}ttd)t d*tj|jt d+tj|jtd,tjg gt d&tjd g||gd-d.}tjg d/tj	d0}t|}|||d"}|d |}t||d  d S )1Ncond_incond_out
iter_countseq_inseq_outrp  r]  r   const_tensor_x)r\   	data_typedimsvalsrq  oneconst_tensor_onerH   rx   slice_startconst_tensor_zerorx   r   r   const_tensor_axesr   endr   rr  	Unsqueeze	slice_endSlice)r   r  r  	slice_outSequenceInsertIdentity	loop_bodyLoop)
trip_country  	seq_emptyseq_res)r   rr  bodyConcatFromSequencer   )r   rr  r&  new_axisr   	loop_testr  ry  r  )r\   r   rr  rz  )r   )r   r          @r   r        @r   r  r        @r   r  r  r        @ry   )r#   r   r  r3  r"   r   r   r   r)  r   r   r!   r^   flattenfloatr   r4  bool_r   r`   r(   r   r
   )r   r  r  r  r  r  r   x_const_nodeone_const_nodezero_const_node	axes_nodeadd_nodeend_unsqueeze_node
slice_nodeinsert_nodeidentity_noder  rB  node_concatr  r  ry  rl  r   oinfr   r  rH   rH   rI   	test_loop.  s   
z TestReferenceEvaluator.test_loopc                 C  s   t dtjd g}t dtjd g}tddgdgdd}t|gd|g|g}t|}t| t|}|d dt	j
dt	jdd	 id
 }| |jd | |jt	j | | d | | d d S )Nr   r   	Bernoulli        seedrR  rp   r   ry   r  r   gh㈵grZ|
 ?r#   r   r   r   r   r   r   r(   r   r   r   r   r   r^   rz   assertGreaterr   
assertLessr   r   r   r   r   r   rj   r   r  rH   rH   rI   test_onnxt_runtime_bernoulli  s   $z3TestReferenceEvaluator.test_onnxt_runtime_bernoullic                 C  s   t dtjd g}tdg dgdddgd}t|gdg |g}t|}t| t|}|d i d }| 	|j
d	 | 	|jtj | | d | | d
 d S )Nr   RandomUniformr  rp   r   r  r^   rR  r   r  rx   )r#   r   r   r   r   r   r   r(   r   r   r^   rz   r   r   r  r   r  r   r   r   r   r   rj   r   r  rH   rH   rI   !test_onnxt_runtime_random_uniform  s   z8TestReferenceEvaluator.test_onnxt_runtime_random_uniformc                 C  s   t dtjd g}t dtjd g}tddgdgdd}t|gd|g|g}t|}t| t|}|d dt	j
dt	jdid	 }| |jd | |jt	j | | d	 | | d
 d S )Nr   r   RandomUniformLiker  r  rR  r  ry   r   rx   r  r  rH   rH   rI   &test_onnxt_runtime_random_uniform_like  s    z=TestReferenceEvaluator.test_onnxt_runtime_random_uniform_likec                 C  s   t dtjd g}tdg dgdddgd}t|gdg |g}t|}t| t|}|d i d }| 	|j
d	 | 	|jtj d S )
Nr   RandomNormalr  rp   r   r  rR  r   r  )r#   r   r   r   r   r   r   r(   r   r   r^   rz   r   r   r  rH   rH   rI    test_onnxt_runtime_random_normal  s   z7TestReferenceEvaluator.test_onnxt_runtime_random_normalc                 C  s   t dtjd g}t dtjd g}tddgdgdd}t|gd|g|g}t|}t| t|}|d dt	j
dt	jdid	 }| |jd | |jt	j d S )
Nr   r   RandomNormalLiker  r  rR  r  ry   r   )r#   r   r   r   r   r   r   r(   r   r   r   r   r   r^   rz   r  rH   rH   rI   %test_onnxt_runtime_random_normal_like  s    z<TestReferenceEvaluator.test_onnxt_runtime_random_normal_likec                 C  s^   t jdd}| |jd tjddgddggtjd}t j|dd}t|dd}t	|| d S )Nr  r  r   rx   r   rp   ry   )
r/   creater   r  r   r   r   evalr1   r
   )r   instr   r   r   rH   rH   rI   test_eval_celu  s   z%TestReferenceEvaluator.test_eval_celuc                 C  sN   t jddgddggt jd}tj|tjd}tj|tjd}|}t|| d S )Nr   rx   r   rp   ry   to)	r   r   r   r.   r"  r   FLOAT8E4M3FNr   r
   )r   r   r   dyr   rH   rH   rI   test_eval_cast  s
   z%TestReferenceEvaluator.test_eval_castc                 C  sv   t dd}| |jd |jdd}| |jd tjddgddggtjd	}|j|dd}t	|dd}t
|| d S )
Nra   r/   r  r  r   rx   r   rp   ry   )r+   r   r  r!  r  r   r   r   r"  r1   r
   )r   celur#  r   r   r   rH   rH   rI   test_eval_celu_load_op  s   
z-TestReferenceEvaluator.test_eval_celu_load_opc                 C  s   t jdd}| |jd d S )Nr  r  )r0   r!  r   r  )r   r#  rH   rH   rI   test_create_adam  s   z'TestReferenceEvaluator.test_create_adamc              	   C  s2  t dtjg d}t dtjg d}t dtjg d}t dtjg d}tdg ddgg dd	d	gd
d
gd}t|gd|||g|g}t|tddgd}t|}|d u rWd S t|dd}	| 	|	j
d t t|tgdd}
| 	|
j
d t t|dd}| 	|j
d t d\}}t|D ]}t|D ]}tjd	d	||ftjd}d|dd||f< tjdtjd}td
tdd d|ddd d d d f< tjdggggtjd}|d |||dd }|	d |||dd }t|| |
d |||dd }t|| |d |||dd }t|| qqd S )Nr   NNNNr   r   Wr4   r   r.  r   rx   rx   rx   rx   rx   rp   )rv   r   r   rR  ra      r   F)	optimizedr   )r  r2  T)r   r   ry   r   rx   rx   r   r   	   r   r      )r#   r   r   r   r   r   r   rn   r(   r   r  r4   ConvOptimizedr   r   r   r   minimumr(  r   r   r   r
   )r   r   r   r   r.  rB  r   rj   sess1sess2sess3sess4sHsWrs   r   r   r  got3got4rH   rH   rI   	test_conv  sP   0

z TestReferenceEvaluator.test_convc                 C  s*  t dtjg d}t dtjg d}t dtjg d}t dtjd g}t dtjd g}t dtjd g}t dtjd g}t d	tjd g}t d
tjd g}	tdg ddg}
t|
gd||||||||	g|g}t|tddgd}t|}|d u ryd S t	|}d\}}t
|D ]}t
|D ]}tjdd||ftjd}d|dd||f< | jd||de tjdtjd}d|ddd d d d f< |tjdgtjdtjdgtjd|tjdgtjdtjdgtjdtjdgtjdtdgtjd}|d |d }|d |d }t|| W d    n	1 sw   Y  | jd||dq tjdtjd}tdtdd d|ddd d d d f< |tjdgtjdtjdgtjd|tjdgtjdtjdgtjdtjdgtjdtdgtjd}|d |d }|d |d }t|| W d    n	1 sw   Y  | jd||de tjdtjd}d|ddd d d d f< |tjdgtjdtjd gtjd|tjd!gtjdtjd"gtjdtjd#gtjdtd gtjd}|d |d }|d |d }t|| W d    n	1 sw   Y  qqd S )$Nr   r-  wr   x_scalew_scaley_scalex_zero_pointw_zero_pointy_zero_pointQLinearConvr   rC  rF  rB  rD  rG  rE  rH  rR  ra   r1  r   r   r   rx   ry   r   r   1x1)rB  rs   r   r0  3x3r3  rp   r4  r5     칟>n?   gO Y@   {XZ?)r#   r   UINT8r   r   r   r   r   rn   r(   r   r   r   r  r  r   r   r   r
   r8  r(  r   )r   r   rB  r   rC  rD  rE  rF  rG  rH  rB  r   rj   r9  r:  r=  r>  rs   r   feedsr   r  rH   rH   rI   test_qlinearconv?  s   

0

z'TestReferenceEvaluator.test_qlinearconvc                 C  s  t dtjg d}t dtjg d}t dtjg d}t dtjd g}t dtjd g}t dtjd g}t dtjd g}t d	tjd g}t d
tjd g}	tdg ddg}
t|
gd||||||||	g|g}t|tddgd}t|}| 	d t
jg dg dg dg dg dg dg dgt
jdd}t
jdgt
jd}t
jdgt
jd}t
jdgt
jdd}t
jdgt
jd}t
jd gt
jd}t
jd!gt
jd}t
jd"gt
jd}	||||||||	d}g d#g d$g d%g d&g d'g d(g d)ggg}|d |d }t|| W d    n	1 sw   Y  | 	d* t
jg dg dg dg dg dg dg dgt
jdd}t
jd+gt
jd}t
jdgt
jd}t
jg d,d-t
jd}d.|d/< d0|d1< t
jd+d2gt
jd}t
jd-d-gt
jd}t
jd!gt
jd}t
jd"gt
jd}	||||||||	d}g d3g d4g d5g d6g d7gg d8g d9g d:g d;g d<ggg}|d |d }t|| W d    n	1 sw   Y  | 	d= t
jdt
jd}t
jd+gt
jd}t
jdgt
jd}t
jg d,d-t
jd}t
jd+d2gd>d>ggt
jd}t
jd-d-gt
jd}t
jd!gt
jd}t
jd"gt
jd}	||||||||	d}| td? |d |d  W d    n	1 sRw   Y  W d    n	1 sbw   Y  | 	d@ t
jdt
jd}t
jd+gt
jd}t
jdgt
jd}t
jg d,d-t
jd}t
jg dAt
jd}t
jd-d-gt
jd}t
jd!gt
jd}t
jd"gt
jd}	||||||||	d}| tdB |d |d  W d    n1 sw   Y  W d    d S W d    d S 1 sw   Y  d S )CNr   r-  rB  r   rC  rD  rE  rF  rG  rH  rI  rJ  rR  ra   r1  r   single_channel)rQ                 :   )r  ;      _      r   @   )8            r[        )            r^  rX  r^  )   '   |   M   P   f   +   )         S   )   (      )rQ     \      *         ry   rx   rx   r   r   rO  rP  r   r0  gO\?rQ  rR  {   )r   Q   ]   rt  4   W      )      rF     ~   rQ     )   r0  rq  "   r     Y   )   ro  E   r#  rF  r  rF  )C         ri     rd     )rN  rY              y   )r   e      r      k      multiple_output_channels      p?)rp   rx   r   r   rN     )r   r   rx   rp   rp   )rx   r   rx   r         `?)rQ        r  rg  )   rQ     r     )   rQ  rQ  rh  rQ  )   r           )            r  )r  X   r   r  /   )Z   r   !   r      )r   rF  r0  r  r   )rf  r  2   ro  L   )0   r   o   J   c   fails_with_w_scale_2Drx   z(w_scale must be a scalar or a 1-D tensorfails_with_w_scale_wrong_length)r  r  rx   z+w_scale elements must match output channels)r#   r   rS  r   r   r   r   r   r(   r  r   r   r  r   r   r   r
   fullr   assertRaisesRegexr   )r   r   rB  r   rC  rD  rE  rF  rG  rH  rB  r   rj   r   rT  r   r  rH   rH   rI   test_qlinearconv_w_scale_vector  sJ  
	0	7

 $z6TestReferenceEvaluator.test_qlinearconv_w_scale_vectorc                 C  s  t dtjg d}t dtjg d}t dtjg d}t dtjg d}tdddgdg|||d}	tddgd	g}
td
dd	gdg|||dd}tddgdg}tdddgdg}t|	|
|||gd||g||g}t|tddtddgd}t|	gd||g|g}t|tddgd}t|}zt	|}|d u rW d S W n t
y   d }Y nw d\}}t|}t|D ]}t|D ]}tjdd||ftjd}d|dd||f< tjddg|R tjd}tdt||d df d|ddd d d d f< |d ||d}|d ur|d ||dd }t|d  |  zt|d  |d   W q tyU } ztd| d| d | d!| d"|d  d#|d  |d }~ww qd S )$Nr   r-  r  Y2r.  r4   rv   r   r   Shaper^   Im2Colximexperimental)rv   r   r   re   Flattenwflatr   rR  ra   r1  rx   r   )r   r   ry   r   r   rp   r   r6  )r   r.  zDiscrepancies: pads=z, dilations=z
, strides=z, kernel_shape=r  
!=
)r#   r   r   r   r   r   r   r   r(   rn   rO   r   r   r   r   r   r8  r(  r   r   r
   ravelr   )r   r   rv   r   r   r   r  r  r.  rB  
node_shapenode_im	node_flatnode_gemr   rj   
graph_convonnx_model_convr   	sess_convr=  r>  nkerrs   r   r  ort_resr   rH   rH   rI   common_test_im2colW  s   	

z)TestReferenceEvaluator.common_test_im2colc                 C  "   | j dg dddgddgd d S )Nrx   rx   rx   rx   rx   rp   rx   r  r  r   rH   rH   rI   test_im2col_1x1     
z&TestReferenceEvaluator.test_im2col_1x1c                 C  r  )NrS  r  rx   r  r  r  rH   rH   rI   test_im2col_2x2  r  z&TestReferenceEvaluator.test_im2col_2x2c                 C  r  )NrK  r  rx   r  r  r  rH   rH   rI   test_im2col_3x3  r  z&TestReferenceEvaluator.test_im2col_3x3c                 C  r  )NrK  )r   rx   rp   r   rx   r  r  r  rH   rH   rI   test_im2col_3x3_pads  r  z+TestReferenceEvaluator.test_im2col_3x3_padsc                 C  s"   | j dg dddgddgd d S )NrK  )r   rx   rx   rx   rx   rp   r  r  r  rH   rH   rI   test_im2col_3x3_strides  r  z.TestReferenceEvaluator.test_im2col_3x3_stridesc                 C  r  )Nr   r   r  rx   r  r  r  rH   rH   rI   test_im2col_5x5  r  z&TestReferenceEvaluator.test_im2col_5x5c                 C  sP  dd l }tdtjg d}tdtjg d}tdtjd g}tdtjd g}tdg ddgg d	d
d
gd
d
gd}t|gd|||g|g}t|tddgd}t	|}	t
g dg dg dg dg dggt
j}t
ddgt
j}
t
d
dgt
j}|jjt|
|d}|	d |||
d}||| }t||d  d S )Nr   r   NNNr   Ir   Col2Imr   r  r   r   r   r   r   rx   r  rR  ra   r1  r   )r         @      &@      0@      5@)r        @      (@      1@      6@)r         @      *@g      2@      7@)r        "@      ,@      3@      8@)r  r        .@g      4@g      9@r   )output_sizer   r   r   r  )rS   r#   r   r   r3  r   r   r   r   r(   r   r   r)  r   r4  nnFoldr{   r   
from_numpynumpyr
   )r   rS   r   r   ISBSrB  r   rj   r   image_shapeblock_shapefoldr  r  rH   rH   rI   test_col2im  sB   
z"TestReferenceEvaluator.test_col2imc              	   C  sf  dd l }tdtjg d}tdtjg d}	tdtjd g}
tdtjd g}tdg ddg|||d	}t|gd
||
|g|	g}t|tddgd}t	|}|j
jt|t|t|t|t|d}t|}t|D ]E}t|D ]>}tjd||ftjd}d|d||f< tj|tjd}tj|tjd}||| }|d |||d}t||d  qqqkd S )Nr   r   r  r   r  r   r  r  r  rR  ra   r1  r   )r  r   dilationpaddingstriderx   ry   r   r  )rS   r#   r   r   r3  r   r   r   r   r(   r  r  r{   r   r   r   r   r   r   r   r4  r  r  r   r
   )r   sizer  r  rv   r   r   rS   r   r   r   r  rB  r   rj   r   r  r  rs   r   i_shapeb_shaper  r  rH   rH   rI   common_test_col2im  sF   
z)TestReferenceEvaluator.common_test_col2imc                 C  &   | j dddg dddgddgd d S )Nr   r   r   rp   r   r  rx   r  r  r  rH   rH   rI   test_col2im_2x3     
z&TestReferenceEvaluator.test_col2im_2x3c                 C  r  )N   r  r  r0  rx   r  r  r  rH   rH   rI   test_col2im_2x3_pads  r  z+TestReferenceEvaluator.test_col2im_2x3_padsc           	      C  s   t jddgt jd}d|d d< t ddgdt ddgt g d	t ddgf\}}}}}t||||||}t||||||}t|| d S )
Nr   r  ry   r   r   r   r  rx   r0  )r   r   r   r   r2   r3   r
   )	r   r   r  r   r   rv   r  r1r2rH   rH   rI   test_col2im_2d  s   z%TestReferenceEvaluator.test_col2im_2dc              
   C  s,  t dtjg d}t dtjg d}t dtjdg}t dtjg d}tdg d	dgdd
d
gddgg dd
d
gd}t|gd|||g|g}t|tddgd}td	d
tjtjg dg dg dggg dg dg dggg dg dg dggg dg dg dgggtjdtjg d tjdd	}d!|d d d < |d }|d }|d }tjd|jd}t|jd! D ]C}	tdD ]<}
||	|	d
 |
|
d
 f }||
 }t|d"d
d
gg dd
d
g}t|| }|||
  }|||	|
d d d d f< qqt|}|d |}t||d! d#d$ d S )%Nr   )rp   r   r   r   r.  )r   rx   r   r   r   r   r   r4   r/  rx   r   r0  groupr   r   rv   r   rR  ra   r1  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   `Ζry   )g   @[¿g   &g   (g   `䠾r   rK  h㈵>atol)r#   r   r   r   r   r   r   r   r(  r   r)  r   r   r   rz   r   r^   r   matmulr  r(   r   r
   )r   r   r.  r   r   rB  r   rj   rT  r   rR  r   rB  c2mulref1got1rH   rH   rI   test_conv_im2col_group4+  s~   
NQ]z.TestReferenceEvaluator.test_conv_im2col_group4c              
   C  sH  t dtjg d}t dtjg d}t dtjdg}t dtjg d}td	g d
dgdddgddgg dddgd}t|gd|||g|g}t|tddgd}td	d
tjd tjdtjdtjdtjdd
}d|d d< t|}	|	d |}
tjg dg dg dgg dg dg dgggtjd}t||
d  d S )Nr   rx   r   r   r   r.  rp   r   r   r   r   rp   r   r-  r4   r/  rx   r   r0  r  rR  ra   r1  r   l   ry   rp   )r   r   r   rx   )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   rB  r   rj   rT  r   r!  r   rH   rH   rI   test_conv_strides  s>   

z(TestReferenceEvaluator.test_conv_stridesc           
      C  s   t dtjg d}t dtjg d}tddgdgddgg dddgd}t|gd	|g|g}t|td
dgd}dtdd d d 	d
tji}tjg dg dg dg dgggtjd}t|}|d |}	t||	d  d S )Nr   r-  r   MaxPoolr   r0  rp   r   rv   r   rR  ra   r1  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  ry   r   r#   r   r   r   r   r   r   r   r(  r   r)  r   r   r(   r   r
   
r   r   r   rB  r   rj   rT  r   r   r!  rH   rH   rI   test_max_pool_2d_1  s4   &
z)TestReferenceEvaluator.test_max_pool_2d_1c           
   
   C  s  t dtjg d}t dtjg d}tddgdgddgg dddgd}t|gd	|g|g}t|td
dgd}dtjg dg dg dg dg dg dg dgggtj	di}tjg dg dg dg dgggtj	d}t
|}|d |}	t||	d  d S )Nr   r-  r   r)  r   r0  rp   r*  rR  ra   r1  r   )i  if  i  iB  i  i  r  )i  i  i  r   r  rQ  iF  )iB  B   i  ix  iT  i  i  )r  i  is  iL  i  iJ  i  )i  r  i  r  i'  i;  ih  )  i>  r  i  i  i  i  )i|  i  K   iA  r1  i  i  ry   )g     X@g     @     @r3  )g     8@g     x@g     @     P@)     `@g     @r4  r4  )r5  g     @r5  g      @r   )r#   r   r   r   r   r   r   r   r   r   r(   r   r
   r.  rH   rH   rI   test_max_pool_2d_2  sN   
z)TestReferenceEvaluator.test_max_pool_2d_2c                 C  s  t dtjd d g}t dtjd d g}t dtjd d g}t dtjd d g}tdg ddgddd	}t|gd
|||g|g}t|tddgd}tj	g dgtj
dt	ddggtj	ddggtj
dd}t|}	|	d |}
tj	g dgtj
d}t||
d  d S )Nr   r  Ur   ScatterElementsr   r  r7  rx   r   r&  	reductionrR  ra   r1  r   )r   r  r  r  r  ry   皙?g @)r   r<  r  r  r  r   r#   r   r   r3  r   r   r   r   r   r   r   r(   r   r
   r   r   Indr7  r   rB  r   rj   rT  r   r!  r   rH   rH   rI   test_scatter_elements,	  s*   z,TestReferenceEvaluator.test_scatter_elementsc                 C  s   t dtjd d g}t dtjd d g}t dtjd g}t dtjd d g}tdg ddg}t|gd|||g|g}t|tdd	gd
}tj	ddggtj
dt	ddggtj	dgtj
dd}t|}	|	d |}
tj	ddggtj
d}t||
d  d S )Nr   r  r7  r   	ScatterNDr9  rR  ra   r1  r   r   r  ry   r   r  r=  r>  rH   rH   rI   test_scatterndF	  s&   z%TestReferenceEvaluator.test_scatterndc                   s  	ddd 	d fdd	}t dtjg d}t d	tjd g}t d
tjd g}t dtjg d}tdg ddgg dd}t|gd|||g|g}t|tddgd}t	d
tjdtddgtddgd}	t|}
|
d |	}||	d dddg dd}t||d  d S )Nrx   c                 S  sN  | \}}}}~||d  |d  | | dksJ ||d  |d  | | dks+J ||d  |d  | | d }	||d  |d  | | d }
t t ||}t ||}|t t |	|
 }t t ||| }|t t |
|	 }|dd|dd }|dd|dd }t t ||| dd}|||fS )Nr   rp   rx   r   r   )r   repeatr(  tiler   )x_shapefield_heightfield_widthr  r  Nr\  Hr.  
out_height	out_widthi0i1j0j1rs   r   krH   rH   rI   get_im2col_indices_	  s   $$  
zCTestReferenceEvaluator.test_col2im_impl.<locals>.get_im2col_indicesr   c                   s`  |\}}}}	||d  |d  |	|d  |d  }
}t j|||
|f| jd} |||||\}}}| || | d|}|ddd}t j|td |||f| | }|d dkrh|d  |j	d 7  < n|d dkrv|d  d9  < |d dkr|d  |j	d 7  < n|d dkr|d  d9  < |d d d d |d |d |d |d f }|S )Nr   rp   rx   r   ry   r   )
r   r   rz   r   	transposeaddatslicecopyr^   )colsrE  rF  rG  r  r  rH  r\  rI  r.  H_paddedW_paddedx_paddedrP  rs   r   cols_reshapedr   rQ  rH   rI   col2im_indicesv	  s,   

0z?TestReferenceEvaluator.test_col2im_impl.<locals>.col2im_indicesr   r  r   r  r   r-  r  )r   r   r  )r   rx   r   rx   )rv   rR  ra   r1  r   r2  )rx   r   r  r   rx   rx   r   r   )rF  rG  r  r   r  )r   r   Nrx   )r#   r   r   r3  r   r   r   r   r   r(  r)  r   r   r   r(   r   r
   )r   r]  r   r   r  r   rB  r   rj   rT  r   r!  r   rH   r\  rI   test_col2im_impl^	  s2   
z'TestReferenceEvaluator.test_col2im_implc              
   C  s  t dtjg d}t dtjg d}t dtjd g}t dtjg d}tdg ddgddgd	d	gd
d
gg dddgd}t|gd|||g|g}t|tddgd}td	d
tjtd	d
tjtjg dtjdd}t|}	|	d |}
tjg dg dg dg dg dgggtjd}t||
d
  |d  d
9  < d|d d< t|}	|	d |}
tjg dg dg dg dg dgggtjd}t||
d
  d S )Nr   r-  r.  r   r   ConvTransposer/  rx   r   r   r0  )r   r   output_paddingrv   r   rR  ra   r1  r   r#  )rx   r   r   r      )r   rx   r   r   r  ry   )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'  rH   rH   rI   test_conv_transpose_2d	  sd   
z-TestReferenceEvaluator.test_conv_transpose_2dc              	   C  sV  t dtjg d}t dtjg d}t dtjd g}t dtjg d}tdg ddgdd	d	gd
}t|gd|||g|g}t|tddgd}td	d
tjtd	d
tjtjg dtjdd}tjg dg dg dg dg dg dgg dg dg dg dg dg d gggtjd}	t|}
|
d |}t|	|d!  d S )"Nr   r-  r.  r   r   r`  r/  
SAME_UPPERrp   )auto_padr   rR  ra   r1  r   r4  r3  rF  )rx   rp   r   r   r  ry   )r   r   r   rx   rp   rp   )r   r   r   r   r   r  )r   r   rf  r   r     )r4  rf  rb  r1  #      )rF  rb  r#  rg  r  rr  )rF  r  3   r  r]      )r   r   r4  r      rh  )r   r   rf  r0  &      )rb     T   rb     R   )$   rm  r  r  t   A   )r  r%  r  ry  i$  r  )H   N   r[  [      h   r   r-  )r   r   r.  r   r   rB  r   rj   rT  r   r   r!  rH   rH   rI   test_conv_transpose_2d_upper	  sN   	z3TestReferenceEvaluator.test_conv_transpose_2d_upperz1.21.5z+op_dft and op_stft requires numpy >= 1.21.5c                 C  s  t dtjg d}t dtjd g}t dtjd g}t dtjg d}tdg ddg}t|gd	|||g|g}t|td
dgd}t	d
dtjtjdtjdtjdtjdd}|d }t|d }t|d }|d d }	|d jd | | d }
tjd|
|	dgtjd}t|
D ].}|| }|| | }tj|d||df }|d|	 }tj|j|jfdd|d|f< qt|}|d |}t||d  d S )Nsignalr  
frame_stepframe_lengthr   r-  STFT)r{  r|  ra   r}  rR  ra      r   rN  rx   rN  rx   r  ry   r1  )r{  r|  r}  rp   rx   r   r&  )r#   r   r   r3  r   r   r   r   r   r(  r   r)  r   r   r4  r[   r^   r   r   fftstackrealimagr(   r   r
   )r   r{  r|  r}  r   rB  r   rj   rT  onesided_lengthnstftsr   rs   startstopcomplex_outc_outr   r!  rH   rH   rI   	test_stft&
  s<    z TestReferenceEvaluator.test_stftc                 C  s  t dtjg d}t dtjd g}t dtjd g}t dtjd g}t dtjg d}tdg d	dg}t|gd
||||g|g}t|tddgd}t	d
dtjtjdtjdddtdtj tj	dddtjd d   tjdtjdd	}	|	d }t|	d }|	d }t|	d }|d d }
d|jd |jd  d  }tjd||
dgtjd}t|D ]4}|| }|| | }tj|d||df | d|
 }|d|
 }tj|j|jfdd|d|f< qt|}|d |	}t||d  d S )Nr{  r  r|  windowr}  r   r-  r~  )r{  r|  r  r}  rR  ra   r  r   rN  r  r  ry   r  rp   r   r1  rx   r  )r#   r   r   r3  r   r   r   r   r   r(  r   r)  r   r   r4  cospir[   r^   r   r   r  r  r  r  r(   r   r
   )r   r{  r|  r  r}  r   rB  r   rj   rT  r  r  r   rs   r  r  r  r  r   r!  rH   rH   rI   test_stft_with_window[
  sJ   * z,TestReferenceEvaluator.test_stft_with_windowc                 C  s   t dtjg d}t dtjd d g}t dtjg d}t dtjd g}tdg ddgddd	d
d|d	}t|gd|||g|g}t|tddgdS )Nr   r-  roisr   r  RoiAlignr   r  r  r   rp   r   output_half_pixel)output_heightoutput_widthsampling_ratiospatial_scalecoordinate_transformation_modemoderR  ra   r  r   )r#   r   r   r3  r   r   r   r   )r   r  r   r  r   r   rB  r   rH   rH   rI   get_roi_align_model
  s"   z*TestReferenceEvaluator.get_roi_align_modelc                 C  sp   |  |}t \}}}|||d}t|}|d u rd S |d |}t|}	|	d |}
t|d |
d dd d S )Nr  r   r  r  )r  r   rn   r   r(   r
   )r   r  rj   r   batch_indicesr  rT  r   r   r  r  rH   rH   rI   common_test_roi_align
  s   
z,TestReferenceEvaluator.common_test_roi_alignc                 C  sr   | j dd | d W d    n1 sw   Y  | j dd | d W d    d S 1 s2w   Y  d S )Navgr  r   )r  r  r  rH   rH   rI   test_roi_align
  s   "z%TestReferenceEvaluator.test_roi_alignc                 C  s   dd l }ddlm} | |}t|}t \}}}|d |||d}	|dddd}
|
||||g}t||	d dd	 d S )
Nr   )RoIAlignr  r  r   rp   )r  r  r  r  )	rS   torchvision.opsr  r  r(   r   r   r  r
   )r   r  rS   r  rj   r   r   r  r  r  r   r   rH   rH   rI   common_test_roi_align_torch
  s   
z2TestReferenceEvaluator.common_test_roi_align_torchc                 C  s<   | j dd | d W d    d S 1 sw   Y  d S )Nr  r  )r  r  r  rH   rH   rI   test_roi_align_torch
  s   "z+TestReferenceEvaluator.test_roi_align_torchc                 C  s,  t dtjd g}t dtjd g}t dtjd g}t dtjd g}t dtjd g}tddgg ddd	}t|gd
|g||||g}t|tddgd}dtd	tj
i}	tjg dtj
dtjg dtj
dtjg dtj
dtjdgtj
dg}
t|}|d |	}tdD ]}t|
| ||  qd S Nr   r  r  Y3Y4Splitr  r  r  r  r   )num_outputsrR  ra   rF  r   r   r   rx   rp   ry   r$  )r   r   r  r4  r#   r   r   r   r   r   r   r   r(  r)  r   r   r(   r   r   r
   r   r   r  r  r  r  rB  r   rj   rT  r   r   r!  rs   rH   rH   rI   
test_split
  s&   z!TestReferenceEvaluator.test_splitc                 C  s>  t dtjd g}t dtjd g}t dtjd g}t dtjd g}t dtjd g}tdddgg d}t|gd	|g||||g}t|td
dgd}td	tj
tjg dtjdd}	tjg dtj
dtjg dtj
dtjddgtj
dtjddgtj
dg}
t|}|d |	}tdD ]}t|
| ||  qd S )Nr   r  r  r  r  r  splitr  rR  ra   rF  r   r   )r   r   rp   rp   ry   )r   r  r  r$  r   r   r  r4  r   )r#   r   r   r   r   r   r   r   r(  r)  r   r   r4  r(   r   r   r
   r  rH   rH   rI   test_split_2
  s*   z#TestReferenceEvaluator.test_split_2c                 C  s  t dtjd g}t dtjd g}t dtjd g}t dtjd g}t dtjd g}tddgg ddd	}t|gd
|g||||g}t|tddgd}dtd	tj
i}	tjg dtj
dtjg dtj
dtjg dtj
dtjdgtj
dg}
t|}|d |	}tdD ]}t|
| ||  qdtd	tj
i}	tjg dtj
dtjg dtj
dtjg dtj
dtjg tj
dg}
t|}|d |	}tdD ]}t|
| ||  qd S r  r  r  rH   rH   rI   test_split_num_outputs_4  s:   z/TestReferenceEvaluator.test_split_num_outputs_4c           
      C     t dtjd d g}t dtjd g}tddgdgdd}t|gd|g|g}t|tddgd	}dt	d

dtji}t|}|d |}tjg dtjd
d}	| |	 |d   d S )Nr   r   ArgMinrx   r  rR  ra   rF  r   rf  r   r   )r   r   r   ry   r   rx   r   r#   r   r   r3  r   r   r   r   r   r(  r   r)  r   r(   r   r   r4  r   tolist
r   r   r   rB  r   rj   rT  r   r!  r   rH   rH   rI   test_argmin+     z"TestReferenceEvaluator.test_argminc           
      C  r  )Nr   r   ArgMaxrx   r  rR  ra   rF  r   rf  r  r   r   r   ry   r  r   r  r  rH   rH   rI   test_argmax7  r  z"TestReferenceEvaluator.test_argmaxc                 C  s,  t dtjd d g}t dtjd g}t dtjd g}t dtjd g}t dtjd g}tdg ddgtd	ddgdgg}t|d
||||g|g}t|tddgd}tj	dggtj
dtj	dgtj
dtj	dgtj
dtj	dgtj
dd}	t|}
|
d |	}tj	dgtj
d}| | |d   d S )Nr   startsendsr   r   r  )r   r  r  r   TSqueezerR  ra   rF  r   r   ry   rx   r#   r   r   r3  r   r   r   r   r   r   r4  r(   r   r   r  )r   r   r  r  r   r   rz  r   rj   rT  r   r!  r   rH   rH   rI   test_slice_squeezeC  s&   z)TestReferenceEvaluator.test_slice_squeezec           
      C  s   t dtjd d g}t dtjd g}tddgdgdgdgdgdtddgdgdgd	g}t|d
|g|g}t|tddgd}dtj	dggtj
di}t|}|d |}tj	dgtj
d}	| |	 |d   d S )Nr   r   r  r  r   rx   )r   r  r  r  )r   rR  ra   r   r   ry   r  )
r   r   r   rz  r   rj   rT  r   r!  r   rH   rH   rI   test_slice_squeeze_6Z  s   z+TestReferenceEvaluator.test_slice_squeeze_6c           	      C  sD  t dtjd d g}t dtjd d g}tddgdg}t|gd|g|g}t|tddgd}t| t|}|j	d }| 
|jjd	 |d dtjd
tjdid }| 
|jd | 
|d d t|tddgd}t| t|}|j	d }| 
|jjd |d dtjd
tjdid }| 
|jd | 
|d d d S )Nr   r   
ReduceMeanrR  ra   r  r   r   ReduceMean_1r  ry   r  r   r   rx   rF  ReduceMean_18)r#   r   r   r   r   r   r   r   r(   r  r   r  r  r   r   onesr   r^   )	r   r   r   r   r   rj   r   clsr  rH   rH   rI   test_onnxrt_reduce_meani  s(   
 
 z.TestReferenceEvaluator.test_onnxrt_reduce_meanr-  c           
      C  s  g }t dtjd dgt dtjd gg}t dtjd d gt dtjd gg}| dkrE|ttjdgtjdd	d
 t|dd	gdgddd}nt|dgdgddgdd}tddgdgdd
tdddgdgdd
|tddgdgdd
g}t	|d|||}g }g d}|ttj|tj
dddd
 |ttjdgtjddd
 t dtjd dgg}t dtjd dgt dtjd dgg}tdddgd d!gd"|dd#td$d!gd%gd&ddgd'td(d%gd)gd*d
td+d)dgddgd,ddd-g}t	|d.|||}t|td/| gd0}	|	S )1Nnext_inr   nextnext_outscan_outrF  rx   ry   axis_redr   cdistdf_17_C0cdistdf_17_reduced0cdistdf_17_ReduceSumSquarer   )r\   r!  )r\   r   r!  r  cdistd_17_IdentitySubcdistdf_17_Subcdistdf_17_IdentityOnnxIdentity)Pg   @:?g   g   g    ?g   `?g   9?g   `Ƕٿg   Jg    Og   3?g   h	ܿg    sg   g   @`6?g   dg    Lg   ?g   @_ÿg   @Eg   g?g   lg   пg   q?g    v?g   C?g   3?g   `~?g   @Q?g   ˄g   ڞg   @׿g   `Kg    g    ?g   g    zӿg   @E?g   Xӿg   <?g   `ؿg    u(@g    ǿg    Eg    m?g   g    ?g   @?g   T?g   ?g   Tg   @Bʿg    M	?g    9?g   `Y@g    -?g   `Q?g   E?g   &7׿g    [?g   ]Lg    Xg    i?g   g   `ۜg   g   ?g   ;˿g   g   kZ?g   Z?g    &?g   `Ah?g    lg   @D?g    ?G?g    p?g   hg   @>?g   Wg   `1Dֿ)rh  r   
Sc_Scancstrp   
To_TopKcstr}  valuesindicesScanUU032UUUU033UUSc_Scan)r\   r  num_scan_inputs	TransposeTr_transposed0Tr_Transpose)r\   permSqrtSq_Y0Sq_SqrtTopKTo_TopK)r\   largestsorteddummyra   r   )r#   r   r   r@  r'   r   r   r4  r   r   r   r   r3  r   r   )
rm   	reduce_opinitializersr   rr  node_reducerz  r   
list_valuerj   rH   rH   rI   _cdist_model  s   
Rz#TestReferenceEvaluator._cdist_modelr  g]l,@g.s,&2@ry   rp   r  r   r   ReduceL1gQ@gK-J3@g%s}N@gZOc10@rF  r   r0  ReduceL2g&?gq#i?giE@g=@r   ReduceLogSumgd?gUU?g(?gQOIR?ReduceLogSumExpg?g?g9z%4~@g	Y;@	ReduceMaxgS?gsn`{?go@g@r  gύ]`?gJ?g%s}N @gZOc10@gNs	@ghi
@gXE!@gHg`y#@
ReduceProdr  rm   r[   c                   sp  |\ }t ddt j}i }| | }t|}|d d|i}||d|f<  fdd|jd j	jD }	|	d j
}
t |	d jfd|
i}t||gd	}|d d|i}||d
|f< d}| D ]Q\}}tt|t|D ]C\}}|j|jkrtd d| d|j d| d|j dt ||  }|dkrtd| d d| d| d| d| qqqdd S )Nr  )r   r   r}  r  c                   s   g | ]}|j j r|qS rH   )r  r  r  )rr   r   r  rH   rI   rw     s    z9TestReferenceEvaluator.test_op_reduce.<locals>.<listcomp>r   	op_schemar  ref_clconstantzShape mismatch for z, :z != ro   gư>zDiscrepancies (max=z) for r  r  )r   r(  r   r)  r   r  r(   r   r  r  _schemar}   r  itemszipreversedr^   r   r  r   )r   reduce_op_expectedrm   r   r   resultsmodelr   r  clschemanew_clbaselinerP  vr   r   diffrH   r  rI   test_op_reduce<  s<   `

&&z%TestReferenceEvaluator.test_op_reduce)r0  )r  )rF  	ref_opsetc                 C  s   t dtjg d}t dtjg d}tddgdgg}t|d|g|g}tjddddtj	}t
|td|gd	}t|}	|	d d|id
 }
t
|td|gd	}t|}|d d|id
 }| |j|
j t||
 d S )Nr   r-  r   MeanVarianceNormalizationrR  r   rx   ra   r   r   )r#   r   r   r   r   r   randomrandr)  r   r   r   r(   r   r   r^   r
   )r   rm   r  r   r   rz  r   r   rj   r  r  ref_onnx_modelref_expectedr   rH   rH   rI   test_mvn  s   zTestReferenceEvaluator.test_mvnc           
      C  s   dd }| }t jddgddggt jd}t jdd	ggt jd}t jd
dggt jd}t |||g}t|}|||d}|d |}	t||	d  d S )Nc                  S  s<  g } g }g }g }t  dd}g }tdddgdgddd	}|| d
d | D }tddddgdg||}|| |tdtjg  |tdtjg  |tdtjg  |tdtjg  tdddgdgddd	}| | tdddgdgddd	}| | dd | D }	t| d||}
t	|
|	|d}|S )Nrx   )ra   custom_domainConcatzx:0zx:1r__0r   ra   )r&  re   c                 S  &   g | ]\}}t ||d u rdn|qS r  r   rr   re   rf   rH   rH   rI   rw         zZTestReferenceEvaluator.test_concat_in_a_function.<locals>.create_model.<locals>.<listcomp>r  concat_2I__0I__1I__2r__4r__3c                 S  r  r  r  r  rH   rH   rI   rw      r  numpyxr:  )
r   r   r@  r  r   r#   r   DOUBLEr   r   )rz  r   rr  r;  r   	nodes_fctrB  opset_imports_fctr  r   r   rj   rH   rH   rI   create_model  sP   



zFTestReferenceEvaluator.test_concat_in_a_function.<locals>.create_modelr   r   r  r   ry   rx   rp   r   )r  r  r  r   )r   r   float64vstackr(   r   r
   )
r   r%  rj   x1x2x3r   r  rT  r  rH   rH   rI   test_concat_in_a_function  s   2z0TestReferenceEvaluator.test_concat_in_a_functionc              	   C  s   t dtjd g}t dtjd g}tttddgdgtjdgd|g|g}t|}t	dddtj
g}|d d|id	 }| |t	dddtj
gtjk  d S )
Nr   r   Castr%  rR  Clp?Q}>ʈÿr  r   )r#   r   r   STRINGr   r   r   r(   r   r   nanr   
assertTruer)  str_allr   r   r   r  r  r   r  rH   rH   rI   test_cast_float_to_string  s"   
"z0TestReferenceEvaluator.test_cast_float_to_stringc              	   C  s   t dtjd g}t dtjd g}tttddgdgtjdtddgdgtjdgd|g|g}t|}t	ddd	tj
g}|d d|id
 }t|t	ddd	tj
g d S )Nr   r   r-  rP  r%  rR  r.  r/  r  r   )r#   r   r   r   r   r   r0  r(   r   r   r1  r   r
   r5  rH   rH   rI   "test_cast_float_to_string_and_back*  s    z9TestReferenceEvaluator.test_cast_float_to_string_and_backc                 C  sN  t dtjd }t dtjd }t dtjd }tdddgdgddg}tt|d||g|g}t|}t	
dd	t	j}t	jdt	jd
}|d ||d}	t	jddgddgddgggt	jd
t	jddgddgddgggt	jd
t	jddgddgddgggt	jd
gg}
| t|
d t|	d  t|
d |	d D ]	\}}t|| qd S )Nr   r   rP  SplitToSequencerp   r  rR  rF  rx   r   r   ry   rT  r  r   r  r  r  r  r  r  r  r  r  r  r  r  r,  r  r  r  r   r#   r   r   r3  	UNDEFINEDr   r   r   r(   r   r(  r   r)  r   r   r4  r   r   r~   r   r
   r   r   r   rP  rz  r  r  r   r  r  r   r   r   rH   rH   rI   test_split_to_sequence=  s$   """z-TestReferenceEvaluator.test_split_to_sequencec                 C  sR  t dtjd }t dtjd }t dtjd }tdddgdgddg}tt|d||g|g}t|}t	
dd	t	j}t	jg d
t	jd}|d ||d}	t	jddgddgddgggt	jdt	jddgddgddgggt	jdt	jddgddgddgggt	jdgg}
| t|
d t|	d  t|
d |	d D ]	\}}t|| qd S ) Nr   r   rP  r8  rp   r  rR  rF  r9  rp   rp   rp   ry   rT  r  r   r  r  r  r  r  r  r  r  r  r  r  r  r,  r  r  r  r   r:  r<  rH   rH   rI   test_split_to_sequence_1dR  s$   """z0TestReferenceEvaluator.test_split_to_sequence_1dc           
        s   t dtjd }t dtjd }tddgdgdddg}tt|d|g|g}t|}t	d
d	tj |d d i} fd
dt jd D g}| t|d t|d  t|d |d D ]	\}}	t||	 qcd S )Nr   rP  r8  rp   r   r%  rR  rF  r9  c                   s"   g | ]} d d d d |f qS rY   rH   rq   r   rH   rI   rw   p  s   " zTTestReferenceEvaluator.test_split_to_sequence_nokeepdims_noinput.<locals>.<listcomp>)r#   r   r   r;  r   r   r   r(   r   r(  r   r)  r   r   r   r^   r   r~   r   r
   )
r   r   rP  rz  r  r  r  r   r   r   rH   r@  rI   )test_split_to_sequence_nokeepdims_noinputg  s   z@TestReferenceEvaluator.test_split_to_sequence_nokeepdims_noinputc                 C  s  t dtjd g}t dtjd g}t dtjd g}t dtjd g}t dtjd g}tttddgdgtjdtddgd	gtjdtd
g dgtdtjdgg ddtd
g dgtdtjdgg ddtddgdgtjdtdd	gdgtjdtddgdgtjdtddgdgtjdgd|g||||g}t	|}t
jg dt
jd}tdd |D  t
dd |D }	t
dd |D }
|d d|i}t|	|d  t|
|d  t|	|d  t|
|d  d S )Nr   F1F2F3F4r-  f81r%  f82r]  C1r   r   rx   rp   g?r  rs  C2rR  ry   c                 S     g | ]}t |qS rH   r   rr   r   rH   rH   rI   rw     r   z;TestReferenceEvaluator.test_cast_float8.<locals>.<listcomp>c                 S     g | ]}t t|qS rH   r%   r   rN  rH   rH   rI   rw         c                 S  rO  rH   )r&   r   rN  rH   rH   rI   rw     rQ  r   rx   rp   r   )r#   r   r   r   r   r   r'  
FLOAT8E5M2r!   r(   r   r   r   printr   r
   )r   r   rB  rC  rD  rE  r  r  r   	expected1	expected2r  rH   rH   rI   test_cast_float8u  sb   
z'TestReferenceEvaluator.test_cast_float8c           	   
   C  s   t dtjd g}t dtjd g}tttddgdgtjdtdddgdgdd	tddgdgtjdgd
|g|g}tjddgtj	d}tdd |D }t
|}|d d|i}t|d | G dd dt}t
||gd}|d d|i}t|d | d S )Nr   r   r-  f8r%  CastLikef32r   )saturaterR  g    cAry   c                 S  s"   g | ]}t t|d ddd dqS )TF)uzrZ  )r[  rP  rN  rH   rH   rI   rw     s    z@TestReferenceEvaluator.test_cast_like_float8.<locals>.<listcomp>c                   @  s   e Zd ZdZdS )z>TestReferenceEvaluator.test_cast_like_float8.<locals>.CastLikera   N)r  r  r  r  rH   rH   rH   rI   rX    s    r  )r#   r   r   r   r   r   FLOAT8E4M3FNUZr   r   r   r(   r   r
   r*   )	r   r   r   r  r   r   r  r  rX  rH   rH   rI   test_cast_like_float8  s4   z,TestReferenceEvaluator.test_cast_like_float8c           
   	   C  s   t dtjd g}t dtjd g}t dtjd g}tttddgdgtjdtddgdgtjdgd|g||g}t|}t	j
g dt	jd}t	
d	d
 |D }t	
dd
 |D }|d d|i}	| | |	d   | | |	d   d S )Nr   rB  rC  r-  r%  rR  rI  ry   c                 S  rL  rH   rM  rN  rH   rH   rI   rw     r   zBTestReferenceEvaluator.test_cast_float8_output.<locals>.<listcomp>c                 S  rL  rH   )r   rN  rH   rH   rI   rw     r   r   rx   )r#   r   r   r'  rR  r   r   r   r(   r   r   r   r   r   r  )
r   r   rB  rC  r  r  r   rT  rU  r  rH   rH   rI   test_cast_float8_output  s(   z.TestReferenceEvaluator.test_cast_float8_outputc           	      C  s  t jddddddddd	d
dddt jt j t jgt jd}tjt jdddddddddddddddt jgt jdtjt jdddddddddddddddt jgt jdtjt jdddddddddddddddt jgt jdtj	t jddddddddd ddddddt jgt jdi}d!d" }|
 D ]A\}}| j|d#/ ||}t|}|d d$|id% }t|| | |j|j | |j|j W d    n1 sw   Y  qd S )&Ng	?i`  i  iP  i0  i  iig-C6?g{Gz?i       j@ry   g      ?g      v@g      z@g      t@g      p@g      pg      Xr  g      ?g      |@g      |g      n@g      ng      ?g      x@g      ?g      @g      g?c                 S  st   t dtjd g}t dtjd g}tddgdg| d}tddgdgtjd}t||gd|g|g}t|}t| |S )Nr   r   r-  r  r%  r   )r#   r   r   r   r   r   r   )r&  r   r   r   r   r   rj   rH   rH   rI   model_cast_castR  s   zCTestReferenceEvaluator.test_float8_4_types.<locals>.model_cast_castr%  r   r   )r   r   infr1  r   r   r'  r\  rR  FLOAT8E5M2FNUZr  r  r(   r   r
   r   r^   rz   )	r   r   r   r`  r&  expectrj   r  r   rH   rH   rI   test_float8_4_types  s   W

z*TestReferenceEvaluator.test_float8_4_typesc                 C  s   t dtjd g}t dtjd g}tttddgdgtjdgd|g|g}t|}tj	g dtj
d}t	dd	 |D }|d d|i}| | |d
   d S )Nr   r   r-  r%  rR  r   rx   rp   r_  r  ry   c                 S  rL  rH   )r   rN  rH   rH   rI   rw   t  r   zDTestReferenceEvaluator.test_cast_bfloat16_output.<locals>.<listcomp>r   )r#   r   r   BFLOAT16r   r   r   r(   r   r   r   r   r   r  )r   r   r   r  r  r   rT  r  rH   rH   rI   test_cast_bfloat16_outpute  s    
z0TestReferenceEvaluator.test_cast_bfloat16_outputc                 C     t dtjd g}t dtjd g}tttdg dgtdtjdgdgdtdg dgtdtjdgd	gdtd
g ddgtdddgdgddgd|g|g}t|}t	j
g dt	jd}t	j
g dt	jd}|d d|i}t||d  d S )Nr   r   r]  scalerx   r  rJ  ra  r  QuantizeLinearr   ri  ra  r  DequantizeLinearr   r  rR  re  ry   r   rx   rp   i  r  r#   r   r   r   r   r   r!   r'  r(   r   r   r   r   r
   r   r   r   r  r  r   r   r  rH   rH   rI   test_quantize_linear_e4m3x  :   z0TestReferenceEvaluator.test_quantize_linear_e4m3c                 C  s   t dtjd g}t dtjd g}tttdg ddgtdddgdgdd	gd
|g|gtdtjdgdgtdtjdgdgg}t|}t	j
g dt	jd}t	j
g dt	jd}|d d|i}t||d  d S )Nr   r   rj  rk  r  rl  ri  r   r  rR  rx   r  ra  r  re  ry   rm  rn  ro  rH   rH   rI   %test_quantize_linear_e4m3_initializer  s(   z<TestReferenceEvaluator.test_quantize_linear_e4m3_initializerc                 C  rh  )Nr   r   r]  ri  rx   r  rJ  ra  r  rj  rk  r  rl  r   r  rR  re  ry   )r   rx   rp   i  r  )r#   r   r   r   r   r   r!   rR  r(   r   r   r   r   r
   ro  rH   rH   rI   test_quantize_linear_e5m2  rq  z0TestReferenceEvaluator.test_quantize_linear_e5m2c                 C     t dtjd g}t dtjd g}tttdg ddggd|g|gtdtjdgdgtd	tjdgd
gg}t|}t	j
g dt	jd}t	j
g dt	jd}|d d|i}t||d  d S )Nr   r   rj  rk  rR  ri  rx   r  ra    )r  g      `r        333333@333333@g      @g         @     ry   )ru  i         i  r}  r~    r   r  r   r   )r#   r   r   UINT16r   r   r   r!   r(   r   r   r   uint16r   r
   ro  rH   rH   rI   test_quantize_linear_uint16  s2   z2TestReferenceEvaluator.test_quantize_linear_uint16c                 C  rt  )Nr   r   rj  rk  rR  ri  rx   r  ra  r6  )r  g     r  rv  rw  rx  ry  rz  g    @g    g    @g    g     @g      r{  r|  ry   )r6  r        i  rQ  r  r  ru  iru   ru  r  ru  r  r   )r#   r   r   INT16r   r   r   r!   r(   r   r   r   int16r   r
   ro  rH   rH   rI   test_quantize_linear_int16  s2   z1TestReferenceEvaluator.test_quantize_linear_int16c                 C     t dtjd g}t dtjd g}tttdg ddgddgd|g|gtdtjd	gd
gtdtjd	gdgg}t|}t	j
g dt	jd}t	j
g dt	jd}|d d|i}t||d  d S )Nr   r   rl  rk  r   r  rR  ri  rx   r  ra  ru  )i0u  iy  r  i  ry   )g     g     r  g      }@)r#   r   r  r   r   r   r   r!   r(   r   r   r  r   r   r
   ro  rH   rH   rI   test_dequantize_linear_uint16P  *   z4TestReferenceEvaluator.test_dequantize_linear_uint16c                 C  r  )Nr   r   rl  rk  r   r  rR  ri  rx   r  ra  i )iiii  ry   )g     @g     @g       g     @)r#   r   r  r   r   r   r   r!   r(   r   r   r  r   r   r
   ro  rH   rH   rI   test_dequantize_linear_int16i  r  z3TestReferenceEvaluator.test_dequantize_linear_int16rf  r   rx   r   r<  )r   r   r   r   )r   r   r   r   )r   r   r   r   )rx   r   r   r   )r   r  r   r  )r   r  r  r  r  r  )      ?r  rx   rK  )r   r   r  r   r  r   r   r   )rj  rr  rx     r  rm     r  )ra  D   ru  rl  rx  r}  r  r  r  r  r   r&  r   )r   r   r   r   r   r  )r4  rf  r  )r   r   r   r   c                 C  s   t dtjd g}t dtjd g}tj|tjd}	tj|tjd}
tt	t
dg ddg||dgd|g|gtdtj|	j|	td	tj|	j|
g}t|}tj|tjd}|d urptj|tjd}|d d|i}t||d
  d S | t |d d|i W d    d S 1 sw   Y  d S )Nr   r   ry   rj  rk  r&  
block_sizerR  ri  ra  r   )r#   r   r   INT8r   r   r   int8r   r   r   r!   r^   r(   r   r
   r   r   r   r   ri  
zero_pointr&  r  r   r   r   
scale_datazp_datar  r  r   r  rH   rH   rI   test_blocked_quantize_linear  sB   ;	"z3TestReferenceEvaluator.test_blocked_quantize_linear)r   rx   r   r   )rf  r  r  r  )rx  -   r#  r0  )r   r   rp   r   )r4  rf  rh  r  )rg  rx  6   r#  r   r>  r  r^  )r   r   rf  rf  )r4  r4  ru  ru  )rp   rx   r   )r   rp   r   r   r   r   rF  ru  )r1  rF  rh  r   rf  r0  r}  r  )rj  r  rr  rf  rh  ru  r0  r  )r&  r   rp   r   r   r4  c                 C  s   t dtjd g}t dtjd g}tj|tjd}	tj|tjd}
tt	t
dg ddg||dgd|g|gtdtj|	j|	td	tj|	j|
g}t|}tj|tjd}|d urptj|tjd}|d d|i}t||d
  d S | t |d d|i W d    d S 1 sw   Y  d S )Nr   r   ry   rl  rk  r  rR  ri  ra  r   )r#   r   r  r   r   r   r   r  r   r   r   r!   r^   r(   r   r
   r   r   r  rH   rH   rI   test_blocked_dequantize_linear  sB   E	"z5TestReferenceEvaluator.test_blocked_dequantize_linearc              	   C  s   dd }d}d}d}d}t dtjg d}t d	tjd }td
dgd	g||||dg}tt|d|g|g}	t|	}
tj	
ddddtj}|
d d|i}||||||}| t|t|d  d S )Nc                 S  s   t dt j}t | jD ]8\}}}}	t| |td|tt	
|d d  td|tt	|d d  d ||	f d |||||	f< q| ||| |  |  }
|
S )N)r   r   r   r   r   rx   rp   r   )r   r   r)  r   ndindexr^   r*  r   r[   mathfloorr   ceil)r   r  betar  r	  
square_sumr   r   hrB  r   rH   rH   rI   	_expectedP  s"    z2TestReferenceEvaluator.test_lrn.<locals>._expectedg-C6*?r  r  r   r   )r   r   r  r  rP  LRN)r  r  r  r	  rR  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   rP  rz  r  r  r   r  r   rH   rH   rI   test_lrnO  s   zTestReferenceEvaluator.test_lrnc                 C  s   t ddt jd t ddt jt jdt jdd}tddgdgddgdgd	d
}tdi ||}tdi ||}t	|| d S )Nr   )rx   rx   r   rx   r   r  r  ry   r/  NOTSETr  r   r   rv   r   re  rH   
r   r(  r   r)  r   r   r   r5   r6   r
   r   rT  rD   r   r  rH   rH   rI   test_conv_im2col_1dr     z*TestReferenceEvaluator.test_conv_im2col_1dc                 C  s   t ddt jd t ddt jt jdt jdd}tddgdgd	d	gdgd
d}tdi ||}tdi ||}t	|| d S )Nr  )rp   r   r   rx   )r   r   r   r  ry   r/  r   r   r  r  rH   r  r  rH   rH   rI   test_conv_im2col_1d_pad0  r  z/TestReferenceEvaluator.test_conv_im2col_1d_pad0c                 C  s   t ddt jd t ddt jt jdt jdd}tdddgd	d	gg d
ddgdd}tdi ||}tdi ||}t	|| d S )N   )rx   rx   r   r  rx   r4  r3  r  ry   r/  r   r0  r  r  rH   r  r  rH   rH   rI   test_conv_im2col_2d  s"   z*TestReferenceEvaluator.test_conv_im2col_2dc                 C  s   t ddt jd dt ddt j t jdt jdd	}tdddgddgg d
ddgdd}tdi ||}tdi ||}t	|| d S )Nr#  )rp   r   r   r   rx   rp   rF  )r   r   rx   rp   r  ry   r/  r  r  r  rH   r  r  rH   rH   rI   test_conv_im2col_2d_pad0  s"   z/TestReferenceEvaluator.test_conv_im2col_2d_pad0c                 C  s   t ddt jd dt ddt j t jdt jdd	}tdddgd
d
gddgd dd}tdi ||}tdi ||}t	|| d S )NrY  )rx   rx   r   r   rx   rp   r4  r3  r  ry   r/  r   
SAME_LOWER)r  r   r   r   rv   re  rH   r  r  rH   rH   rI   test_conv_im2col_2d_autopad  s   z2TestReferenceEvaluator.test_conv_im2col_2d_autopadc                 C  s   t ddt jd t ddt jt jdt jdd}tdg d	g d
g dg d	dd}tdi ||}tdi ||}t	|| d S )Ni  )rx   rx   r   r   r0  rx   rb  )rx   rx   r   r   r   r  ry   r/  )rx   rx   rx   r  )rx   rx   rx   rx   rx   rx   r  r  rH   r  r  rH   rH   rI   test_conv_im2col_3d  s&   z*TestReferenceEvaluator.test_conv_im2col_3dc                 C  s   t ddt jd t ddt jt jdt jdd}tdddgd	d	gg d
ddgdd}tdi ||}tdi ||}t	|| d S )Nr%  r#  rx   r  r$  r&  ry   r/  r   r0  rp   r  r  rH   r  r  rH   rH   rI   test_conv_im2col_2d_strides     z2TestReferenceEvaluator.test_conv_im2col_2d_stridesc                 C  s   t ddt jd t ddt jt jdt jdd}tdd	dgd
d
gg dd	d	gdd}tdi ||}tdi ||}t	|| d S )Nr%  r#  rx   r  r$  r&  ry   r/  rp   r   r0  r  r  rH   r  r  rH   rH   rI   test_conv_im2col_2d_dilations  r  z4TestReferenceEvaluator.test_conv_im2col_2d_dilations))r  )r  )r  )r  )r  )r  r-  c           
      C  s   t dtjd }t dtjd }tddtj}t|dgdgddg}t	t
|d|g|g}t|}|d d|i}|d }	| |	tj | |	jd d S )	Nr   r   r   )rx   r   rp   r   r/  rR  rH   )r#   r   r   r   r(  r   r)  r   r   r   r   r(   r   r   ndarrayr   r^   )
r   opr   r   r   rz  r  r  r  rrH   rH   rI   test_reduce_op_no_axis  s   z-TestReferenceEvaluator.test_reduce_op_no_axis)r  r&  r   r   )r   )r   c                 C  sH  t dtjd }t dtjd }t dtjd }t dtjd }tjdgtjd}tdg ddgd	d
}tt	|gd|||g|g}t
|}	tjdgtjdd| }
tjddg| tjd}|	d |
||dd }| |jd|  | |jtj tddg|tj}|	d |
||dd }| |jd|  | |jtj d S )Nr   PVr   r   ry   Pad)r   r  r  r  )r   rr  r  rR  rx   r  r   r  r   r   )r   )r#   r   r   r3  r   r   r   r   r   r   r(   r   r4  r   r   r^   rz   rC  r)  )r   dimr   r  r  r   rs  rB  r  r  r   pr  rH   rH   rI   test_pad  s"   zTestReferenceEvaluator.test_padc              
   C  s   t dtjd }t dtjd }tddgdgdtddgdgtdtjdgdgd	g}tt|d
|g|g}t|}t	j
dt	jd}|d d|id }| |jt  | |jt	j tt	j
dt	jd| d S )Nr   r   r  r^   r  ConstantOfShapers  rx   rq  rR  ry   r   )r#   r   r   r   r!   r  r   r   r(   r   r   r   r   r   r^   r{   rz   r  r
   r   r   r   rz  r  r  r   r  rH   rH   rI   test_constant_of_shape5  s"   	z-TestReferenceEvaluator.test_constant_of_shapec                 C  s   t dtjd }t dtjd }tdg dgtdtjdgdgdtd	dgd
gdtdd
gdgtdtjdgdgdtdddgdgg}tt|d|g|g}t	|}t
jdt
jd}|d d|id }| |jt  | |jt
j tt
jdt
jd| d S )Nr   r   r]  liker   rx   rp   rJ  r  r^   r  r  r  rs  rq  rX  rR  ry   r   )r#   r   r   r   r!   r  r3  r   r   r(   r   r   r   r   r   r^   r{   rz   r  r
   r  rH   rH   rI   test_constant_of_shape_castlikeJ  s0   z6TestReferenceEvaluator.test_constant_of_shape_castlikec                 C  sB  dt jg dg dg dg dg dgt jdi}t jg dg d	g d
g dg dgt jdt jdt jdt jdt jdg}tdtjd }tdtjd }tdtjd }tdtjd }tddgg dg}t	t
|d|g|||gtdt d gd}t|}	|	d |}
| t|
d tdddD ]}t|| |
|  qd S )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`Rry   )dr`  ru  r[  rN     rd  r  r  ri     r[  i   rW           r  r        w   r     z   r        rh  r  r  r`        r         r  r  r     a   r  r  rQ  rn  r  r  rp     r  U         s   rn  r     r  r  r  r        q   r{  r  r        r  ^      r  r  r~  r  r  r  r  r  r  r     r     r  r     r  rF     r  r  r  r  rk  r  F   r  r|  )db   r  rg  x   r  r  r  r        r  r     rd     r     rd  rn  r  g   r~  r  rs     r  r  rk  rp  }   r     r  ru  r  r     r  j   r  p   r  r  r  r  r  rj  r  r  ro  r  ry  rW  r  r  r  r  re  r  r  rw  r  r  rP  r     n   rs  r  r  r  rW  r  rW  rp  rN  r  rW  ro  r  rd  r  r  r[  r  r  u   r  r  ri  r  r  r  rP  r     ry  r  r  r[  )dr  rv  r  r  r  r  rj  r  r  r  r  r  r  r  r  ry  r  r  r  r  r  rq  r  r  rP     r|  r  r  rs  r|        r  r  r  r   r  rp  r   r  r        r     r  r     r\  r  r  r  r  r  r  r~  r  r  r  ro  r  r  r  r  r  r  r  r  rs  r  r     r  r  r  r  r  r%  rz  r  rX  r  r  rx  r  r  r  r  r]  r  r  r|  r  r  r  r%  r  rX  r  )drp  V   r  r  r  r  r   r  rg  r  r  r  r[  rN  r  r  r|  r   r  r  r  r  r  r  r  r  r     rn     r  r  r  >   rz  r  r  r  r  r  r  ri  r  r  r  rs  r  r~  r  r  rp  r  r  r  rs  r     r  r  r  m   rd  r  r  r     r  ry  r  v   r  r|  r  rt  r  r  r  r  r  rN  r  ry  r  rX  r  r  r  r  rW  rn  r  r  r  r  r  r  r  r_  r  r~  )dr  r  r  r  ry  r  ri  r  r  r  r  ro  rp  rz  r  `   r   ry  r{  r  r  r  r  rq  r  ri  r   r  r  r  r  r     rr  r  r  ri  r  r  r  r\  r  r  r  rn  r  r  r  r  9   r  r  r  rs  r_  rj  r  r  r  r  r  r  r|  r  r  r  r  r  r  r  G   r  r  r  r  r  r  rp  rp  r     r  r  ri  r  r  r  r  rd  r+  r  r  r  r  rp  r  r  r  r  ry  g    v?r  r   ri  zpDynamicQuantizeLinear)r   ri  r  rR  ra   rx   r   r   rp   r   )r   r   r   r  r#   r   r   rS  r   r   r   r   r   r(   r   r   r~   r   r
   )r   rT  r   r   r   ScaleZprz  r  r  r  rs   rH   rH   rI   test_dynamic_quantize_linearf  s   ffff               ffff                       z3TestReferenceEvaluator.test_dynamic_quantize_linearabcdefz.comz.netzabc.comzdef.netr&  )catdogsnakes)catsdogssnakesr  )r  r   r!  rH   )r      ßr   )aau   ßßyyc                 C  s   t dtjd }t dtjd }t dtjd }tdddgdgd}tt|gd||g|g}	t|	}
|
d t	|t	|d^}}tj
|| | |jjdd	h | |j| d S )
Nr   r   r   StringConcatr  rR  )r   r   Or7  )r#   r   r0  r   r   r   r(   r   r   r   testingassert_array_equalassertInrz   kindr   r^   )r   r   r   r   expected_shaper   r   r   rB  r  r  r  r   rH   rH   rI   test_string_concat  s   	"z)TestReferenceEvaluator.test_string_concatz1,2,34,5,6,)123)456)1,4,6ra   r1  ra   r4  r6  )rp   rp   rx   )r1  r8  r/  z5,6)rx   rp   rp   )r7  r8  r/  )r1  ra   ra   )r4  r6  ra   )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   ra   r   ra   )r=  r   ra   ra   ra   nx r  c                 C  s   t dtjd }t dtjd }t dtjd }tddgddg||d}	tt|	gd|g||g}
t|
}tj	|t
d}|d d|i^}}}tj|tj	|t
d tj|tj	|tjd d S )Nr   Splits	MaxSplitsStringSplit)r   rr  	delimitermaxsplitrR  ry   )r#   r   r0  INT32r   r   r   r(   r   r   objectr   r)  r*  r4  )r   r   rC  rD  expected_splitexpected_num_splitsr   r@  rA  rB  r  r  r  
num_splitsr   rH   rH   rI   test_string_split  s$   Oz(TestReferenceEvaluator.test_string_splitc                 C  s  t dg ddgd}t|gdtdtjd d gtdtjdgtd	tjdgtd
tjd d gtdtjdgtdtjdgtdtjdgtdtjdggtdtjd d gg}t|tddgdd}t|}t	
g dg dg}|d8 }|t	j}t	j
dgt	jd}t	j
dgt	jd}t	
g dg dg dg dg}|d8 }|t	j}t	j
dgt	jd}	t	j
dgt	jd}
t	j
dgt	jd}t	j
d gt	jd}|d t|||||	|
||d}t	jt	j
g d!g d"gt	jd|d#  d S )$NQLinearMatMul)r   a_scalea_zero_pointr   b_scaleb_zero_pointrE  rH  r   r  rR  r   rL  rx   rM  r   rN  rO  rE  rH  ra   rh  r4  r   rg   )r  r  r      )r   r  rQ  rk  rs  gF%u{?ry   )r  ri     )r#  rm  rQ  )r   rs     )rs  r  r  g!u|?ig'?)rw  irU  )rx   irh  r   )r   r   r#   r   r   r  r   r   r(   r   r   r)  r  r   r   r   r)  r*  )r   rB  r   rj   r   r   rL  rM  r   rN  rO  rE  rH  r  rH   rH   rI   test_qlinearconv_int8  sf   

" z,TestReferenceEvaluator.test_qlinearconv_int8)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                 C  s   t dtjd }t dtjd }tddgdg|d}tt|gd|g|g}t|}	|	d dt	
|i^}
}t	j|
| | |
jjd | |
j| d S )Nr   r   RegexFullMatchr   rr  patternrR  r   )r#   r   r0  r  r   r   r   r(   r   r   r   r)  r*  r   rz   r,  r^   )r   r   r_  r   r-  r   r   rB  r  r  r  r   rH   rH   rI   test_regex_full_matchG  s   z,TestReferenceEvaluator.test_regex_full_matchc                 C  s   t dtjd }t dtjd }tddgdgdd}tt|gd|g|g}t|}| t	 |
d dtdgi W d    d S 1 sEw   Y  d S )Nr   r   r]  zx)r^  rR  r   )r#   r   r0  r  r   r   r   r(   r   r   r   r   r   )r   r   r   rB  r  r  rH   rH   rI   test_regex_invalid_patternn  s   "z1TestReferenceEvaluator.test_regex_invalid_pattern)r   r         ?rp   ffffff
@r   rh  rx  )r   r   rp   rp   r   r   rh  rn  )r   r   rb  rp   rc  r   rx  )r   r   rp   rp   r   r   rn  )      -r   rb  rp   rc  r   rh  )rR  r   rp   rp   r   r   r  )rd  re  r   rb  rp   rc  r   )rf  rR  r   rp   rp   r   r   z1.22.0z'The test requires numpy 1.22.0 or laterc           	      C  s   t dtjd g}t dtjd g}tttdg dgtdtjdgdgdtdg dgtd|dgd	gdtd
g ddgtdddgdgd	dgd|g|g}t|}|d dt	
|i}t||d	  d S )Nr   r   r]  ri  rx   r  rJ  ra  r   rj  rk  r  rl  r  rR  )r#   r   r   r   r   r   r!   r(   r   r   asarrayr
   )	r   qtyper   r   r   r   r  r  r  rH   rH   rI   test_quantize_linear_int4x  s6   z0TestReferenceEvaluator.test_quantize_linear_int4c           
        s   t d|d g}t d|d g}tttddgdg|dgd|g|g}t|}tjg dtjd}|tj	k t fdd	|D }|
d d|i}	| | |	d
   d S )Nr   r   r-  r%  rR  )r   rx   g333333@g@r   r   ry   c                   s   g | ]	}t j| d qS )signedr   float32_to_4bit_unpackedrN  rj  rH   rI   rw     s    z@TestReferenceEvaluator.test_cast_int4_output.<locals>.<listcomp>r   )r#   r   r   r   r(   r   r   r   r   INT4r   r   r  
r   	cast_fromcast_tor   r   r  r  r   rT  r  rH   rj  rI   test_cast_int4_output  s&   

z,TestReferenceEvaluator.test_cast_int4_outputc           
        s   t d|d g}t d|d g}tttddgdgtjdgd|g|g}t|}tjt	dtj
d}|tjkr9tjntj t fdd	|D }|d d|i}	| | |	d
   d S )Nr   r   r-  r%  rR  r   ry   c                   s   g | ]}t | qS rH   rl  rN  cast_from_nprH   rI   rw     rQ  z?TestReferenceEvaluator.test_cast_int4_input.<locals>.<listcomp>r   )r#   r   r   r   r   r   r(   r   r   r   r   UINT4r7  uint4int4r   r   r  ro  rH   rs  rI   test_cast_int4_input  s&   
z+TestReferenceEvaluator.test_cast_int4_inputc           
      C  s  t dtjdg}t dtjdg}t dtjdg}tdddgdgtdg dgd	gd
dtdddgdgddgtddgd}tdddgdgtdg dgd	gddtdddgdgtddgdgttddgdgddgdg |gttdddgdgddgdg |gddgtddtddgd}tttddgdgddgd|g|gdtddtddg||gd }dtj	d!gtj
d"i}t|}|d |}	| |	d# tj	d$gtj
d" d S )%Nr   rH  r  thisfctaddinput2r]  r  r   CC0r^  r\   r   A1r   ra   r  r   r  r}  CCrQ  ry  rc  re   r_  r`  :IFrd  re  r\   rx   r{  r   rg   r   r;  r   ry   r   r   r#   r   r   r   r   r   r   r   r   r   r   r(   r   r   
r   r   r  rP  func_def_addfunc_defrl  rT  r  r   rH   rH   rI   'test_a_function_calling_a_function_once  sz   
!"z>TestReferenceEvaluator.test_a_function_calling_a_function_oncec           
      C  s  t dtjdg}t dtjdg}t dtjdg}tdddgdgtdg dgd	gd
dtdddgdgddgtddgd}tdddgdgtdg dgd	gddtdddgdgtddgdgttddgdgddgdg |gttdddgdgddgdg |gddgtddtddgd}tttddgdgddtddgdgddgd|g|gd tddtddg||gd!}dtj	d"gtj
d#i}t|}|d |}	| |	d$ tj	d%gtj
d# d S )&Nr   rH  r  ry  rz  r{  r]  r  r   r|  r}  r   r~  r   ra   r  r   r  r}  r  rQ  ry  rc  r  r_  r`  r  r  rx   ztmpr{  r   r  r   ry   r   r  r  rH   rH   rI   )test_a_function_calling_a_function_double6  s|   
!	"z@TestReferenceEvaluator.test_a_function_calling_a_function_doublec           
      C  s  t dtjdg}t dtjdg}t dtjdg}tdddgdgtdg dgd	gd
dtdddgdgddgtddgd}tdddgdgtdg dgd	gddtdddgdgtddgdgttddgdgddgdg |gttdddgdgddgdg |gddgtddtddgd}tttddgdgddtddgdgddgd|g|gd tddtddg||gd!}G d"d# d#t}||}|j	
 D ]}	| |	| qd S )$Nr   rH  r  ry  rz  r{  r]  r  r   r|  r}  r   r~  r   ra   r  r   r  r}  r  rQ  ry  rc  r  r_  r`  r  r  rx   r  r{  r   r  c                   @  r  )z[TestReferenceEvaluator.test_overload_reference_implementation.<locals>.MyReferenceEvaluatorNr  rH   rH   rH   rI   MyReferenceEvaluator  r  r  )r#   r   r   r   r   r   r   r   r(   
functions_r  r   )
r   r   r  rP  r  r  rl  r  r  r	  rH   rH   rI   &test_overload_reference_implementation  s~   
!	z=TestReferenceEvaluator.test_overload_reference_implementation)
)ru  zG?)rn  r  )r'  q=
ףp?)r\  r  )rR  333333?)rb  r  )r"  r   )r   r   )FLOAT16gMb`?)rf  g{Gz?c                 C  s  t t|}tttddgdg|dtddgdg|dtdddgdgtddgd	gtjdgd
tdtjg dtdtjg dgtd	tjg dgtddgdd}t|dd}t	
dd dt	j}t	
dd dt	j}t||d}|| }	|d |d }
t|	|
|d d S )Nr-  r   Xcr%  r   Ycr   ZcrP  r   r  ra   rF  r4  rP  r   r  r   rp   r   r   rT  r  )getattrr   r   r   r   r   r#   r   r(   r   r(  r   r)  r   r   r   r
   )r   styper  ityper  r  r   r   rT  r   r  rH   rH   rI   test_add_custom_dtype  s0   

z,TestReferenceEvaluator.test_add_custom_dtype))r"  )r   )r  )rf  c           
      C  s  t t|}tttddgdg|dtddgdg|dtdddgdgtddgd	gtjdgd
tdtjg dtdtjg dgtd	tjg dgtddgdd}t	|}t
dd dt
j}t
dd d dt
j}t||d}||k}|d |d }	t||	 d S )Nr-  r   r  r%  r   r  rQ  r  rP  r   r  ra   rF  r4  rP  r  rT  r   )r  r   r   r   r   r  r#   r   r   r(   r   r(  r   r)  r   r   r   r   )
r   r  r  r  r  r   r   rT  r   r  rH   rH   rI   test_cmp_custom_dtype  s0   

 z,TestReferenceEvaluator.test_cmp_custom_dtypec              
   C  s   t ttdg ddgdddgdtdtjd td	tjd td
tjd gtdtjd gtddgd}tj	dtj
dd}tjdggggtjd}tjdggggtj
d}tjg dtj
dd}t|}|d |||d}t||d  d S )Nr8  )r   r  updatesrP  r   rS  r:  r\   r   r  r  ra   rF  r   r1  ry   )rp   rp   rp   rp   r   rx   )rx   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r#   r   r   r3  r   r   r   r   r   r   r4  r(   r   r
   )r   r  r   r  r  r   r  r  rH   rH   rI   test_scatter_elements_4d+  s<   	

z/TestReferenceEvaluator.test_scatter_elements_4dc                 C  sP   |  d}t|}tjdtdd}|dgd|gid }| d|j d S )	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   ry   preprocessedimagesr   )rx   r   r   )r   r(   r   r   rz   r   r   r^   )r   r  	evaluatorimageInr  rH   rH   rI   test_sequence_axisK  s   z)TestReferenceEvaluator.test_sequence_axisc              	   C  s   t ttddgdgddgdtdtjd gtdtjd gtddgd	}tj	d
d
tj}t|}|d d|i}| |j|d j d S )N	LeakyRelur   r   rb  r  r\   ra   rF  r   r   r   r   )r   r   r   r#   r   r"  r   r   r  randnr)  r'  r(   r   r   rz   )r   r  r   r  r  rH   rH   rI   test_convert_ml_dtypesh  s   
	z-TestReferenceEvaluator.test_convert_ml_dtypes)r   r   r   r   )FNr   r   r  )rm   r[   r  )rm   r[   r  r[   )r  r  r  r   staticmethodr   r   r   r   r   r   r
  r  r  r  r  r,  r.  r6  rE  rG  rH  rI  rN  rO  rW  rY  r[  rm  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r$  r)  r+  r,  rQ   rA  rU  r  r  r  r  r  r  r  r  rT   r  r  r  r  r  r"  r(  r/  r6  r@  rB  r_  rc  rz  rA   skipIfversion_utilsnumpy_older_thanr  r  r  r  r  r  rV   r  r  r  r  r  r  r  r  r  r  parameterizedexpand	itertoolsproductr   r   r1  r   r4  r  r  r,  r6  r7  r=  r?  rA  rV  r]  r^  rd  rg  rp  rr  rs  r  r  r  r  r(  r   r   r  r  dstackr  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r.  rJ  rV  rL   r`  ra  r   ru  rn  ri  r   r  rr  rx  r  r  r  rX   r  r  r  r  r  rH   rH   rH   rI   r      s   8T
%/43	,37n}3 


*
\ <E
'+

 (!2ME6
1
5
' ;
Z_#=4% 
  <D
	
	



	


	

8*
	
	:
&	




	

B)#        -$

  
GF	




NOK r   __main__rp   )	verbosity)r   r   r   r   r   r   rv   r   r   r   r   r   )l__doc__
__future__r   r>   r  r  rA   
contextlibr   	functoolsr   ior   osr   textwrapr   typingr	   r  r   r  r  numpy.testingr
   r   onnx._custom_element_types_custom_element_typesr7  onnxr   r   r   r   r   r   r   $onnx.backend.test.case.node.roialignr   onnx.checkerr   	onnx.defsr   onnx.helperr   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   onnx.numpy_helperr%   r&   r'   onnx.referencer(   onnx.reference.op_runr)   r*   onnx.reference.opsr+   %onnx.reference.ops._op_common_indicesr,   r-   onnx.reference.ops._op_listr.   r/   3onnx.reference.ops.aionnx_preview_training._op_listr0   onnx.reference.ops.op_celur1   onnx.reference.ops.op_col2imr2   r3   onnx.reference.ops.op_convr4   r5   onnx.reference.ops_optimizedr7  .onnx.reference.ops_optimized.op_conv_optimizedr6   collections.abcr7   r[   r8   r:   rL   rQ   rT   rV   rX   r`   rn   r   r   TestCaser   r  mainrH   rH   rH   rI   <module>   s   $	D
0                                               
,