
    
NgQ                       d 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mZ ddlZddlZddlZdd	lmZ ddlmc 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.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9 ddl:m;Z;m<Z<m=Z= ddl>m?Z? ddl@mAZAmBZB ddlCmDZD ddlEmFZFmGZG ddlHmIZImJZJ ddlKmLZL ddlMmNZN ddlOmPZPmQZQ ddlRmSZSmTZT ddlUmSZV ddlWmXZX  eY edd                    ZZ eY edd                    Z[d Z\d  Z]d! Z^d" Z_d# Z`d$ Zad%ejb        d&eeYd'f         d(eeY         d)eeY         d*eeY         d+ejb        fd,Zc G d- d.ejd                  Zeefd/k    r ejg        d01           dS dS )2zYou can run a specific test by using the following syntax.

::

    python onnx/test/reference_evaluator_test.py TestReferenceEvaluator.test_function_attribute_nested_graph
    N)redirect_stdoutwraps)StringIO)getenv)dedent)SequenceTuple)assert_allclose)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ORT_MAX_IR_SUPPORTED_VERSION8$ORT_MAX_ONNX_OPSET_SUPPORTED_VERSION18c                 <     t                      fd            }|S )Nc                  l    	 dd l }~n## t          $ r t          j        d          d w xY w | i | d S )Nr   zonnxruntime not installed)onnxruntimeImportErrorunittestSkipTest)argskwargsr=   fns      ^/var/www/html/ai-engine/env/lib/python3.11/site-packages/onnx/test/reference_evaluator_test.pywrapperz'skip_if_no_onnxruntime.<locals>.wrapperT   h    	K 	K 	K 	K#$?@@dJ	K
DF   	  )r   rC   rE   s   ` rD   skip_if_no_onnxruntimerI   S   3    
2YY    Y N    c                 <     t                      fd            }|S )Nc                  l    	 dd l }~n## t          $ r t          j        d          d w xY w | i | d S )Nr   ztorch not installed)torchr>   r?   r@   )rA   rB   rN   rC   s      rD   rE   z!skip_if_no_torch.<locals>.wrapperb   se    	ELLL 	E 	E 	E#$9::D	E
DFrG   r   rH   s   ` rD   skip_if_no_torchrO   a   rJ   rK   c                 <     t                      fd            }|S )Nc                  l    	 dd l }~n## t          $ r t          j        d          d w xY w | i | d S )Nr   ztorchvision not installed)torchvisionr>   r?   r@   )rA   rB   rR   rC   s      rD   rE   z'skip_if_no_torchvision.<locals>.wrapperp   rF   rG   r   rH   s   ` rD   skip_if_no_torchvisionrS   o   rJ   rK   c                     t          |t                    rt          | ||          S t          |          }t	          | ||          S N)
isinstanceintr"   r    r$   )name	elem_typeshapes_types       rD   make_sequence_value_infor\   }   sF    )S!! G.tYFFF%i00F4///rK   c                     dd l }t          }| j        D ]}|j        dv r	|j        } n| j        t          k    s|t          k    rd S |                    |                                 dg          S )Nr   ) zai.onnxCPUExecutionProvider)	providers)	r=   r9   opset_importdomainversion
ir_versionr7   InferenceSessionSerializeToString)
onnx_modelortonnx_domain_opsetopsets       rD   run_ort_inferencerk      s    <(  <?** %E +
 	 <<<CCCt$$&&3I2J     rK   c                    t          |t                    s t          dt          |          d          t	          | j                  t	          |          k    rt          d| j        d|d          t	                    dz  t          j        fdt                    D                       }t          | j        |z             }t                    D ]i}||         ||         dz
  ||         dz
  z  z   }t          ||         |z
  ||         d	         z   ||         d         z   ||         z  dz             }	|	||<   jt          |          }
t          j        |
| j        
          }t          j        |          }t          j        |j        d                    }t          |          D ]}t          ||j        d                    }t          |          }t          |          D ]}t          ||          }t          |          }||z  |ddd	f         z
  ||z  z   }t          |          }t!          || j                  r	d	|||z   <   f| t          |                   |||z   <   |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                 6    g | ]}|         |z            fS  rp   ).0in_dimspadss     rD   
<listcomp>z/im2col_naive_implementation.<locals>.<listcomp>   s+    LLL$q'4F
#34LLLrK      r   dtypeN)rV   tuple	TypeErrortypelenrZ   
ValueErrornparrayrangelistrW   zerosrx   prodr,   r-   )datakernel_shape	dilationsrt   stridesnew_padslist_output_shapedkdndoutput_shapereskernel_sizeres_sizerr   i_rest_resji_kernelt_kerneli_imgt_imgrs   s      `                  @rD   im2col_naive_implementationr      s    lE** US4+=+=SSSTTT
4:#l++++O4:OOlOOOPPPYY!^FxLLLLLeFmmLLLMMHTZ,6776]] " "!_Q! 3	!q8HII"R'(1+a.88A;q>IWUVZW
 
  "!*++L
(<tz
2
2
2C',''Kwsy6'*++H8__ ; ;Q	(F7( 344e{## 		; 		;A#A|44HXHGOhqqq!tn4x)7KKE%LLEudj)) ;()EH$%%(,U5\\(:EH$%%		; JrK   imgr   .r   rt   r   returnc           	         d }t          | j        d                   D ]w}t          | j        d                   D ]Z}t          | ||df         ||||          }|2| j        d d         |j        z   }	t          j        |	| j                  }||||df<   [x|j        d t          |                    dz   }	|                    |	          S )Nr   rv   .rn   rw   ))r   rZ   r   r~   emptyrx   r|   reshape)
r   r   r   rt   r   r   ncout	new_shapes
             rD   im2colr      s     C39Q<   ! !sy|$$ 	! 	!A-Aq#Iiw C {IbqbMCI5	hy	::: C1c	NN	! 	.S..../%7I;;y!!!rK   c                      e Zd ZdZededefd            Zed.d	            Zd
 Z	d Z
d Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd  Zd! Z d" Z!d# Z"d$ Z#d% Z$d& Z%d' Z&d( Z'd) Z(d* Z)d+ Z*d, Z+d- Z,d. Z-d/ Z.d0 Z/d1 Z0e1d2             Z2e1d3             Z3d4 Z4d5 Z5d6 Z6d7 Z7d8 Z8d9 Z9d: Z:e;d;             Z<d< Z=e;d=             Z>e;d>             Z?d? Z@d@ ZAdA ZBdB ZCdC ZDdD ZEdE ZFdF ZGdG ZHdH ZI eJjK         eLjM        dI          dJ          dK             ZN eJjK         eLjM        dI          dJ          dL             ZOdM ZPdN ZQe1dO             ZRdP ZSe;eTdQ                         ZUdR ZVdS ZWdT ZXdU ZYdV ZZdW Z[dX Z\dY Z]ed/d[            Z^e_j_        `                     eajb        d\ ecjd        ecje        ecje        gd]d^ggecjf        _           ecjd        d`dagdbdcggecjg        _          gfdd ecjd        dedfgdgdhggecjf        _           ecjd        didjgdkdjggecjg        _          gfdl ecjd        dmdngdodpggecjf        _           ecjd        dqdigdkdjggecjg        _          gfdr ecjd        dsdtgdudvggecjf        _           ecjd        djdigdkdjggecjg        _          gfdw ecjd        dxdygdzd{ggecjf        _           ecjd        dkdjgdkdjggecjg        _          gfd| ecjd        d}d~gddggecjf        _           ecjd        dkdqgdkdqggecjg        _          gfd ecjd        ddgddggecjf        _           ecjd        dkdjgdkdjggecjg        _          gfdZ ecjd        ddgddggecjf        _           ecjd        dqdigdkdjggecjg        _          gfd ecjd        ecje        ecje        gd]d^ggecjf        _           ecjd        d`dagdkdjggecjg        _          gfg	ddig                    dehfd            Zie_j_        `                    g d          d0dehdehfd            Zjd Zkd Zld Zmd Znd Zod Zpd Zqd Zrd Zsd Ztd Zud Zvd Zwd Zxd Zyd Zzd Z{d Z|e_j_        `                    dc ecj}        d          ~                    ddc          z   ecj}        dd          ~                    dd`           ecj        d          dd`g dg dg dgfdc ecj}        d          ~                    ddc          z   ecj}        dd          ~                    dd`           ecj        d          dd`g dg dg dgf ecj}        d          ~                    dd          g dg dg dg ecj        d          ddg dg dg dgf ecj}        dj          ddgddgddg df ecj        d           ecj        d           ecj        d          dddf ecj        d           ecj        d           ecj        d          d`d`dfg          d             Ze_j_        `                     ecj}        d          ~                    ddc           ecj}        dd          ~                    dd`           ecj        d          dd`g dg dg dgf ecj}        d          ~                    ddc           ecj}        dd          ~                    dd`           ecj        d          dd`g d¢g dâg dĢgf ecj         ecj}        dc          ~                    d`d`          gdcz             ecj         ecjd        ddgd`dgg           ecjd        dcdgdjdgg          g           ecj        dƦ          d`d`g dǢg dȢgg dɢg dʢggf ecj}        d          ~                    dd          g dˢg dˢg dˢg ecj        d          ddg d̢g d͢g d΢gf ecj}        dj          d`dgdd`gddg dϢf ecj        d           ecj        d           ecj        d          dddf ecj        d           ecj        d           ecj        d          d`d`dfg          dЄ             Zdф Zd҄ Zdӄ ZdԄ ZdՄ Zdք Zdׄ Zd؄ Zdل Ze_j_        `                    g dڢ          dۄ             Ze_j_        `                    g dܢ          d݄             Zdބ Zd߄ Zd Ze_j_        `                    ddgddgddgdfg ddgg ddfdg dg dg ddfg          d             Ze_j_        `                    ddgddg dg dgddgfg dddddgddgddggg dfg dddddgddgddggg dfg dg dgddg dg d g dgg dg d g dggg dg dgfg dddg dg dg dgg dfg dddg dg dg dgg dfddgddg dg d	gdjdjgfg d
d` ecjd        g           ~                    d          g fg          d             Zd Ze_j_        `                    g ddg ddfg dg dgdg dg dgdfg ddg ddfg           eJjK        ej        dk    d          d                         Z eJjK        ej        dk    d          d             Ze_j_        `                    ej        g dg dfej        g d g d!fej        dgdgfej        g d"g d#fej        g d$g d%fej        dgdgfg           eJjK         eLjM        d&          d'          d(                         Ze_j_        `                     eajb        ej        ej        fej        ej        f                    d)             Ze_j_        `                     eajb        ej        ej        fej        ej        f                    d*             Zd+ Zd, Zd- ZdS (1  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_defr   c                 V    t          j        |           }t          j        |           |S )zjParses a model from a string representation, including checking
        the model for correctness
        )r   parse_modelr   r   )r   ms     rD   _load_modelz"TestReferenceEvaluator._load_model   s*    
 u%%ArK   FN            ?c                    t          dt          j        d d g          }t          dt          j        d d g          }t          dt          j        d d g          }t          dt          j        d g          }t          dddgdg          }| rIt          dddgdg          }	|||d	k     rvr/rt          d
dgdg          }
nAt          d
dgdg          }
n+rt          d
dgdg          }
nt          d
dgdg          }
t	          ||	|
gd|||g|g          }nr0t          t          j        gt          j                  d          nd }r0t          t          j        gt          j                  d          nd }d|rdnd|rdndg}t          d
|dg          }
d ||fD             }t	          ||	|
gd|||g|g|          }fd}n/t          dddgdg          }	t	          ||	gd|||g|g          }d }|t          |          }n t          |t          d|          g          }	 t          |           n%# t          $ r}t          d|           |d }~ww xY w||fS )NXABYMatMulXAAddY_clip   Clip)minmax)r   )r   lrrw   mirX   mar^   c                     g | ]}||S rp   rp   )rq   _s     rD   ru   z=TestReferenceEvaluator._linear_regression.<locals>.<listcomp>  s    888Qa8q888rK   initializerc                 <    t          j        ||z  |z             S rU   )r~   clip)xab	max_value	min_values      rD   <lambda>z;TestReferenceEvaluator._linear_regression.<locals>.<lambda>  s    A	9i H H rK   c                     ||z  |z   S rU   rp   )r   r   r   s      rD   r   z;TestReferenceEvaluator._linear_regression.<locals>.<lambda>  s    A	 rK   opset_importszchecker fails for
)r#   r   FLOATr   r   r'   r~   r   float32r   r   r   	ExceptionAssertionError)r   rj   r   r   r   r   r   r   node1node2node3graphr   r   inputsr   frg   es     ``               rD   _linear_regressionz)TestReferenceEvaluator._linear_regression   s#   "3(9D$<HH"3(9D$<HH"3(9D$<HH"3(9D6BB(S#J77 $	*edC[8*==E URZZ 
A  T )"XJ9)! ! ! !*&8*se S S S A%fxj3%YOOOEE%fxj3%@@E"E5%#8$Aq	A3OO !Jrx2:FFFTRRRR  !Jrx2:FFFTRRRR 
 #B$6DDB8JK!&&3%88882r(888"E5)4!QQC[   IHHHHAAedC[3%88Eu~taAYDDE))A=#E**JJ#E,r5:Q:Q9RSSSJ	L
#### 	L 	L 	L !Cz!C!CDD!K	L1}s   8I 
I*I%%I*c                     t          dt          j        d d g          }|                     t                    5  t          |           d d d            d S # 1 swxY w Y   d S )Nr   )r#   r   r   assertRaisesrz   r(   )selfr   s     rD   #test_reference_evaluator_exceptionsz:TestReferenceEvaluator.test_reference_evaluator_exceptions*  s    "3(9D$<HHy)) 	" 	"q!!!	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"s   AAAc                    t                               t           j                  }t          j        |           t          |          }|                     |j        g d           |                     |j        dg           |                     |j	        ddd           t          j        ddgddggt          j        	          }t          j        d
dgddggt          j        	          }t          j        ddgddggt          j        	          }|                    d |||d          d         }||z   ||z
  z  }t          ||           d S NB01B11B21D0
   rv   )r^   zcom.microsoftr   rn      rw               )r   r   m2_defr   r   r(   assertEqualinput_namesoutput_namesopsetsr~   r   r   runr   r   r   sessr   yzr   expecteds           rD   %test_reference_evaluator_no_attributez<TestReferenceEvaluator.test_reference_evaluator_no_attribute/  sE   "../E/LMMA!!$$)+@+@+@AAA*TF3332&B&BCCCHq!fq!f%RZ888Hq!fq!f%RZ888Hr2hR)<<<hhtQq;;<<Q?Ea!e$#&&&&&rK   c                    t                               t           j                  }t          j        |           t          |                                          }|                     |j        g d           |                     |j	        dg           |                     |j
        ddd           t          j        ddgddggt          j        	          }t          j        d
dgddggt          j        	          }t          j        ddgddggt          j        	          }|                    d |||d          d         }||z   ||z
  z  }t          ||           d S r   )r   r   r   r   r   r(   rf   r   r   r   r   r~   r   r   r   r   r   s           rD   +test_reference_evaluator_no_attribute_byteszBTestReferenceEvaluator.test_reference_evaluator_no_attribute_bytes=  sQ   "../E/LMMA!!"5"5"7"788)+@+@+@AAA*TF3332&B&BCCCHq!fq!f%RZ888Hq!fq!f%RZ888Hr2hR)<<<hhtQq;;<<Q?Ea!e$#&&&&&rK   c           	         t                               t           j                  }t          j        ddgddggt          j                  }t          j        ddgdd	ggt          j                  }t          j        d
dgddggt          j                  }|                     d          5  t          |d          }t                      }t          |          5  |
                    d |||d           d d d            n# 1 swxY w Y   |                                }d}|                     ||           d d d            n# 1 swxY w Y   |                     d          5  t          |d          }t                      }t          |          5  |
                    d |||d           d d d            n# 1 swxY w Y   |                                }t          d                              d          }|                     ||           d d d            n# 1 swxY w Y   |                     d          5  t          |d          }t                      }t          |          5  |
                    d |||d           d d d            n# 1 swxY w Y   |                                }t          d                              d          }|                     ||           d d d            n# 1 swxY w Y   |                     d          5  t          |d          }t                      }t          |          5  |
                    d |||d           d d d            n# 1 swxY w Y   |                                }t          d                              d          }|                     ||           d d d            d S # 1 swxY w Y   d S )Nr   rv   rn   r   rw   r   r   r   r   r   r   r   r   )level)verboser   z:Add(B01, B11) -> C0
Sub(B11, B21) -> C1
Mul(C0, C1) -> D0
a  
                 +I B01: float32:(2, 2) in [0.0, 3.0]
                 +I B11: float32:(2, 2) in [4.0, 7.0]
                 +I B21: float32:(2, 2) in [-7.0, -4.0]
                Add(B01, B11) -> C0
                 + C0: float32:(2, 2) in [4.0, 10.0]
                Sub(B11, B21) -> C1
                 + C1: float32:(2, 2) in [8.0, 14.0]
                Mul(C0, C1) -> D0
                 + D0: float32:(2, 2) in [32.0, 140.0]
                
a  
                 +I B01: float32:(2, 2):[0.0, 1.0, 2.0, 3.0]
                 +I B11: float32:(2, 2):[4.0, 5.0, 6.0, 7.0]
                 +I B21: float32:(2, 2):[-4.0, -5.0, -6.0, -7.0]
                Add(B01, B11) -> C0
                 + C0: float32:(2, 2):[4.0, 6.0, 8.0, 10.0]
                Sub(B11, B21) -> C1
                 + C1: float32:(2, 2):[8.0, 10.0, 12.0, 14.0]
                Mul(C0, C1) -> D0
                 + D0: float32:(2, 2):[32.0, 60.0, 96.0, 140.0]
                   a  
                 +I B01: float32:(2, 2):[0.0, 1.0, 2.0, 3.0]
                 +I B11: float32:(2, 2):[4.0, 5.0, 6.0, 7.0]
                 +I B21: float32:(2, 2):[-4.0, -5.0, -6.0, -7.0]
                Add(B01, B11) -> C0
                -- begin Add.run(2 inputs)
                -- done Add.run -> 1 outputs
                 + C0: float32:(2, 2):[4.0, 6.0, 8.0, 10.0]
                Sub(B11, B21) -> C1
                -- begin Sub.run(2 inputs)
                -- done Sub.run -> 1 outputs
                 + C1: float32:(2, 2):[8.0, 10.0, 12.0, 14.0]
                Mul(C0, C1) -> D0
                -- begin Mul.run(2 inputs)
                -- done Mul.run -> 1 outputs
                 + D0: float32:(2, 2):[32.0, 60.0, 96.0, 140.0]
                )r   r   r   r~   r   r   subTestr(   r   r   r   getvaluer   r   lstrip)	r   r   r   r   r   r   stdoutr   logs	            rD   -test_reference_evaluator_no_attribute_verbosezDTestReferenceEvaluator.test_reference_evaluator_no_attribute_verboseK  s   "../E/LMMHq!fq!f%RZ888Hq!fq!f%RZ888Hr2hR)<<<\\\"" 	' 	'%a333DZZF (( ? ?q1==>>>? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//##CQCS#&&&	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' \\\"" 	' 	'%a333DZZF (( ? ?q1==>>>? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//##C
  fTll  S#&&&'	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	'* \\\"" 	' 	'%a333DZZF (( ? ?q1==>>>? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//##C
  fTll  S#&&&'	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	'* \\\## 	' 	'%a444DZZF (( ? ?q1==>>>? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//##C $ fTll% & S#&&&3	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	's   -/ED7ED	E
D	/EE
E
'/H F=1H =G	H G	AH  H$'H$/K:0JK:J	K:J	AK::K>K>/O
M1%O1M5	5O8M5	9AOOOc                    t                                           \  }}t          j        ddgddggt          j                  }t          j        ddgt          j                  }t          j        dgt          j                  } ||||          }t          |          }|                    d |||d          d         }t          ||           d S )Nr   rv   rn   r   rw   r   r   r   r   )r   r   r~   r   r   r(   r   r   )	r   r   r   r   r   r   r   r   gots	            rD   test_reference_evaluator_lrz2TestReferenceEvaluator.test_reference_evaluator_lr  s    &99;;AHq!fq!f%RZ888HaV2:...HbT,,,1Q1::!"%%hht1115566q9#&&&&&rK   c                     |                      d          5  t                              d          \  }}t          j        ddgddggt          j        	          }t          j        ddgt          j        	          }t          j        d
gt          j        	          } ||||          }t          |          }|j        d         }|                     |j	        j
        d           |                    d |||d          d         }	t          ||	           d d d            n# 1 swxY w Y   |                      d          5  t                              dd           \  }}t          j        ddgddggt          j        	          }t          j        ddgt          j        	          }t          j        d
gt          j        	          } ||||          }t          |          }|j        d         }|                     |j	        j
        d           |                    d |||d          d         }	t          ||	           d d d            n# 1 swxY w Y   |                      d          5  t                              dd           \  }}t          j        ddgddggt          j        	          }t          j        ddgt          j        	          }t          j        d
gt          j        	          } ||||          }t          |          }|j        d         }|                     |j	        j
        d           |                    d |||d          d         }	t          ||	           d d d            d S # 1 swxY w Y   d S )Nmin+maxoptT)r   r   rv   rn   r   rw   r   r   Clip_11r  r   )r   r   r   )r   r   )r  r   r   r~   r   r   r(   	rt_nodes_r   	__class____name__r   r   
r   r   r   r   r   r   r   r   	last_noder	  s
             rD    test_reference_evaluator_lr_clipz7TestReferenceEvaluator.test_reference_evaluator_lr_clip  s   \\i\(( 
	+ 
	+*==4=HHEB1a&1a&)<<<A!Qrz222A"RZ000AqAqzzH%b))Dr*IY099EEE((4qqq!9!9::1=CHc***
	+ 
	+ 
	+ 
	+ 
	+ 
	+ 
	+ 
	+ 
	+ 
	+ 
	+ 
	+ 
	+ 
	+ 
	+ \\e\$$ 
	+ 
	+*==4SW=XXEB1a&1a&)<<<A!Qrz222A"RZ000AqAqzzH%b))Dr*IY099EEE((4qqq!9!9::1=CHc***
	+ 
	+ 
	+ 
	+ 
	+ 
	+ 
	+ 
	+ 
	+ 
	+ 
	+ 
	+ 
	+ 
	+ 
	+ \\e\$$ 
	+ 
	+*==4SW=XXEB1a&1a&)<<<A!Qrz222A"RZ000AqAqzzH%b))Dr*IY099EEE((4qqq!9!9::1=CHc***
	+ 
	+ 
	+ 
	+ 
	+ 
	+ 
	+ 
	+ 
	+ 
	+ 
	+ 
	+ 
	+ 
	+ 
	+ 
	+ 
	+ 
	+s8   DD$$D(+D(DIII4DNN
Nc                 j   |                      d          5  t                              dd          \  }}t          j        ddgdd	ggt          j        
          }t          j        ddgt          j        
          }t          j        dgt          j        
          } ||||          }t          |          }|j        d         }|                     |j	        j
        d           |                     |j        d           |                     |j        d           |                    d |||d          d         }	t          ||	           d d d            n# 1 swxY w Y   |                      d          5  t                              ddd           \  }}t          j        ddgdd	ggt          j        
          }t          j        ddgt          j        
          }t          j        dgt          j        
          } ||||          }t          |          }|j        d         }|                     |j	        j
        d           |                     |j        d           |                     |j        d           |                    d |||d          d         }	t          ||	           d d d            n# 1 swxY w Y   |                      d          5  t                              ddd           \  }}t          j        ddgdd	ggt          j        
          }t          j        ddgt          j        
          }t          j        dgt          j        
          } ||||          }t          |          }|j        d         }|                     |j	        j
        d           |                     |j        d           |                     |j        d           |                    d |||d          d         }	t          ||	           d d d            d S # 1 swxY w Y   d S )Nr  r  Tr   )r   rj   r   rv   rn   r   rw   r   r   Clip_6r  r   )r   rj   r   g   r   )r   rj   r   g   G)r  r   r   r~   r   r   r(   r  r   r  r  r   r   r   r   r  s
             rD   "test_reference_evaluator_lr_clip_6z9TestReferenceEvaluator.test_reference_evaluator_lr_clip_6  s   \\i\(( 	+ 	+*==4r=RREB1a&1a&)<<<A!Qrz222A"RZ000AqAqzzH%b))Dr*IY098DDDY]B///Y]A...((4qqq!9!9::1=CHc***	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ \\e\$$ 	+ 	+*==t >  EB 1a&1a&)<<<A!Qrz222A"RZ000AqAqzzH%b))Dr*IY098DDDY]A...Y],BCCC((4qqq!9!9::1=CHc***	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+  \\e\$$ 	+ 	+*==t >  EB 1a&1a&)<<<A!Qrz222A"RZ000AqAqzzH%b))Dr*IY098DDDY]B///Y],ABBB((4qqq!9!9::1=CHc***	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+s8   D8EE"E<D9KKK"D9P((P,/P,c                    t          j        d          }t          |          }t          j        g dt          j                                      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   rv   r   rw   rv   rv   r   r   r   )	r   r   r(   r~   r   uint8r   r   r   )r   r   r   r   resultr   s         rD   test_nested_local_functionsz2TestReferenceEvaluator.test_nested_local_functions  s    )+
 +
Z "!$$HYYYbh///77	BB$a))!,&)))))rK   c                 ^   t          dt          j        d d g          }t          dt          j        d g          }t          ddgdgdgd          }t	          |gd|g|g          }t          |t          dd          g	          }t          |           t          j	        d
          
                    d                              t          j                  }|                    dd          }t          |          }|                    d d|i          d         }	t!          ||	           d S )Nr   r   	ReduceSumrv   axeskeepdimsrsr^   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   rg   r   r   r   r	  s
             rD   test_reduce_sum_11z)TestReferenceEvaluator.test_reduce_sum_111  s   "3(9D$<HH"3(9D6BB+use1#JJJE7D1#s33l2r6J6J5KLLL
JIbMM!!),,33BJ??55a!5,,!*--hhtc1X&&q)#&&&&&rK   c                 d   t          dt          j        d d g          }t          dt          j        d g          }t          ddgdgdgd          }t	          |gd|g|g          }t          |t          dd          g	          }t          |           t          j	        d
          
                    d                              t          j                  }||z                      dd          }t          |          }|                    d d|i          d         }	t!          ||	           d S )Nr   r   ReduceSumSquarerv   r   r#  r^   r   r   r$  r%  r&  r   r(  r,  s
             rD   test_reduce_sum_square_11z0TestReferenceEvaluator.test_reduce_sum_square_11>  s   "3(9D$<HH"3(9D6BB+cUSEaPPPE7D1#s33l2r6J6J5KLLL
JIbMM!!),,33BJ??E;;A;22!*--hhtc1X&&q)#&&&&&rK   c                    t          dt          j        d d g          }t          dt          j        d d g          }t          dt          j        d g          }t	          dddgdgd          }t          |gd||g|g          }t          |t          dd	          g
          }t          |           t          j
        d                              d                              t          j                  }t          j        dgt          j                  }|                    dd          }	t#          |          }
|
                    d ||d          d         }t'          |	|           d S )Nr   r   r   r  rv   r"  r#  r^      r   r$  r%  rw   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   rg   r   r   r   r   r	  s               rD   test_reduce_sum_13z)TestReferenceEvaluator.test_reduce_sum_13K  sG   "3(9D$<HH"3(9D$<HH"3(9D6BB+SzC51EEEE7D1a&1#66l2r6J6J5KLLL
JIbMM!!),,33BJ??HaS)))55a!5,,!*--hht11--..q1#&&&&&rK   c           	         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
          gd||g|	g          }
t!          |
||g          }t#          |          }t%          j        d                              d                              t$          j                  }t%          j        dgt$          j                  }|                    d ||d          d         }|                    dd          }t7          ||           d S )Ncustomr^   rv   r  r   r'  r   r"  MyReduceSum)rb   r"  exampler   	functionsr   r   rn   r   rw   )r   r'  r   r&  )r   r   r   r   rX   ref_attr_nameINTr{   	attributeappendr   r#   r   r   r6  r   r   r(   r~   r)  r   r*  r   r   r7  r   r+  r   )r   rj   
new_domainr   nodeattmy_reduce_sumr   r'  r   r   rg   r   r   r   r  r   s                    rD   test_reduce_sum_attributez0TestReferenceEvaluator.test_reduce_sum_attributeZ  s   "$$
%b%00,z12M2MNsFmcU;;&!%c"""%&MEFL
 
 #3(9D$<HH%fk.?$HH"3(9D6BB!&ME%   IC
 
  =/
 
 

 "*--IaLL  ((//
;;HbT***$a 3 344Q755b15--&)))))rK   c                    t          dt          j        d d g          }t          dt          j        d d g          }t          dt          j        d g          }t	          dddgdgd          }t          |gd||g|g          }t          |t          dd	          g
          }t          |           t          j
        d                              d                              t          j                  }t          j        dgt          j                  }||z                      dd          }	t#          |          }
|
                    d ||d          d         }t'          |	|           d S )Nr   r   r   r/  rv   r2  r#  r^      r   r$  r%  rw   r&  r4  r   r5  r8  s               rD   test_reduce_sum_square_18z0TestReferenceEvaluator.test_reduce_sum_square_18  sL   "3(9D$<HH"3(9D$<HH"3(9D6BB+c3Z#KKKE7D1a&1#66l2r6J6J5KLLL
JIbMM!!),,33BJ??HaS)))E;;A;22!*--hht11--..q1#&&&&&rK   c                    t          dt          j        d d g          }t          dt          j        d d g          }t          dt          j        d g          }t	          dddgdgd          }t          |gd||g|g          }t          |t          dd	          g
          }t          |           t          j
        d                              d                              t          j                  }t          j        g t          j                  }|                    d          }	t#          |          }
|
                    d ||d          d         }t'          |	|           d S )Nr   r   r   r  rv   r2  r#  r^   r3  r   r$  r%  rw   r4  r   r5  r8  s               rD   test_reduce_sum_13_empty_axesz4TestReferenceEvaluator.test_reduce_sum_13_empty_axes  sC   "3(9D$<HH"3(9D$<HH"3(9D6BB+SzC51EEEE7D1a&1#66l2r6J6J5KLLL
JIbMM!!),,33BJ??HRrx(((55!5$$!*--hht11--..q1#&&&&&rK   c                    t          dt          j        d d g          }t          dt          j        d d g          }t          dt          j        d g          }t	          dddgdgd          }t          |gd||g|g          }t          |t          dd	          g
          }t          |           t          j
        d                              d                              t          j                  }t          j        g t          j                  }||z                      d          }	t#          |          }
|
                    d ||d          d         }t'          |	|           d S )Nr   r   r   r/  rv   r2  r#  r^   rK  r   r$  r%  rw   r4  r   r5  r8  s               rD   $test_reduce_sum_square_18_empty_axesz;TestReferenceEvaluator.test_reduce_sum_square_18_empty_axes  sH   "3(9D$<HH"3(9D$<HH"3(9D6BB+c3Z#KKKE7D1a&1#66l2r6J6J5KLLL
JIbMM!!),,33BJ??HRrx(((E;;;**!*--hht11--..q1#&&&&&rK   c                 .   t          dt          j        d d g          }t          dt          j        d g          }t          ddgdgdd          }t	          |gd|g|g          }t          |t          dd          g	          }t          |           t          j	        d
          
                    d                              t          j                  }t          |          }|                    d d|i          d         }t          ||           d S )Nr   r   r  rv   r"  noop_with_empty_axesr#  r^   r3  r   r$  r%  r   r#   r   r   r   r   r   r   r   r~   r)  r   r*  r   r(   r   r   	r   r   r   r   r   rg   r   r   r	  s	            rD   "test_reduce_sum_13_empty_axes_noopz9TestReferenceEvaluator.test_reduce_sum_13_empty_axes_noop  s    "3(9D$<HH"3(9D6BB+useaVWXXXE7D1#s33l2r6J6J5KLLL
JIbMM!!),,33BJ??!*--hhtc1X&&q)3rK   c                 4   t          dt          j        d d g          }t          dt          j        d g          }t          ddgdgdd          }t	          |gd|g|g          }t          |t          dd          g	          }t          |           t          j	        d
          
                    d                              t          j                  }t          |          }|                    d d|i          d         }t          ||z  |           d S )Nr   r   r/  rv   rR  r#  r^   rK  r   r$  r%  r   rT  rU  s	            rD   )test_reduce_sum_square_18_empty_axes_noopz@TestReferenceEvaluator.test_reduce_sum_square_18_empty_axes_noop  s	   "3(9D$<HH"3(9D6BBuseaa
 
 
 E7D1#s33l2r6J6J5KLLL
JIbMM!!),,33BJ??!*--hhtc1X&&q)As#####rK   c                    t          dt          j        d d g          }t          dt          j        d g          }t          dt          j        d g          }t          dddgdg          }t	          |gd||g|g          }t          |t          dd          g          }t          |           t          j	        d	          
                    d
                              t          j                  }t          j        dgt          j                  }||k    }	t          |          }
|
                    d ||d          d         }t!          |	|           d S )Nr   r   ZGreatergr^   r3  r   r   rn   rn   rn   rw   r   r   r   r#   r   r   r   r   r   r   r   r~   r)  r   r*  r   r   r(   r   r   r   r   r   rZ  r   r   rg   r   r   r   r   r	  s               rD   test_greaterz#TestReferenceEvaluator.test_greater  s4   "3(9D$<HH"3(9D6BB"3(9D6BB)c3Z#77E7C!Q!55l2r6J6J5KLLL
JIaLL  ((//
;;HaS
+++q5!*--hht11--..q1#&&&&&rK   c                    t          dddgdg          }t          j        d                              d                              t          j                  }t          j        dgt          j                  }||k    }t          |          }|                    d ||d	          d
         }t          ||           d S )Nr[  r   r   rZ  r   r]  rn   rw   r^  r   )
r   r~   r)  r   r*  r   r   r(   r   r   )r   r   r   r   r   r   r	  s          rD   test_node_protoz&TestReferenceEvaluator.test_node_proto  s    )c3Z#77IaLL  ((//
;;HaS
+++q5!%((hht11--..q1#&&&&&rK   c                    t          dt          j        d d g          }t          dt          j        d g          }t          dt          j        d g          }t          dddgdg          }t	          |gd||g|g          }t          |t          dd          g          }t          |           t          j	        d	          
                    d
                              t          j                  }t          j        dgt          j                  }||k    }	t          |          }
|
                    d ||d          d         }t!          |	|           d S )Nr   r   rZ  GreaterOrEqualr\  r^   r3  r   r   r]  rn   rw   r^  r   r_  r`  s               rD   test_greater_or_equalz,TestReferenceEvaluator.test_greater_or_equal  s5   "3(9D$<HH"3(9D6BB"3(9D6BB*S#J>>E7C!Q!55l2r6J6J5KLLL
JIaLL  ((//
;;HaS
+++6!*--hht11--..q1#&&&&&rK   c                 X   t          dt          j        d g          }t          dg dgt	          t          j        dgt
          j                                      }t          |gdg |g          }t          dt          j        d g          }t          dg dgt	          t          j        dgt
          j                                      }t          |gdg |g          }t	          t          j        dgt
          j                  d	
          }t          ddd	gdg          }t          ddgdg||          }t          dt          j        d d g          }	t          dt          j        d g          }
t          ||gd|	g|
g|g          }t          |          }t          |          }|                     t          |          d           t          j        dgt
          j                  }|                    d d|i          d         }t          t          j        dgt
          j                  |           t          j        dgt
          j                  }|                    d d|i          d         }t          t          j        dgt
          j                  |           d S )NCConstantrv   rw   )value_floatsgthenr   gelsezeror   r[  r   GIfrZ  )then_branchelse_branchr\  r   zReferenceEvaluator(X) -> Zr   )r#   r   r   r   r'   r~   r   r   r   r   r(   r   strr   r   )r   rh  bthen
bthen_bodybelse
belse_bodyrm  greaternode_ifr   rZ  r   	model_defr   r   r	  s                   rD   test_ifzTestReferenceEvaluator.test_if  s{   "3(9D6BBE#BHaS
$C$C$CDD	
 
 
  "qc::
"3(9D6BBE#BHaS
$C$C$CDD	
 
 
  "qc::
"(A3bj999GGGIV}se<<EE""
 
 
 #3(9D$<HH"3(9D6BBGW-sQC!4&QQQu%%	!),,T$@AAAHaS
+++hhtc1X&&q)!BJ777===HbT,,,hhtc1X&&q)!BJ777=====rK   c           
         t          dt          j        dg          }t          dt          j        dg          }t          j        g d                              t          j                  }t          j        g d                              t          j                  }t          dg dgt          |                    }t          dg dgt          |                    }t          |gdg |g          }t          |gd	g |g          }t          d
dgdg||          }	t                      }
d|
_        d|
_        |
j                            dg           |
j                            dg           |
j                            |	g           t#                      }|
j                            t'          d|          g           t          t          dddgdg          gdt          dt          j        g           gt          dt          j        dg          g          }t+          |dt'          d|          t'          dd          g          }|j                            |
g           t/          |          }|                    d dt          j        d          i          }t          j        g dt          j                  }t3          ||d                    d S )Nthen_outr   else_outrv   rn   r   r   r   )r   r   r   rn   rv   ri  r   outputsvalue	then_body	else_bodyro  f_condf_resr   r  rp  rq  r;  rC   r^   condr   )rb   r   r  r   )nodesrX   r   r  testrv   )producer_namer   Trw   r   )r#   r   r   r~   r   r*  r   r   r'   r   r   rb   rX   inputextendoutputrF  r   ra   r   BOOLr   r?  r(   r   r   )r   r|  r}  r   r   then_const_nodeelse_const_noder  r  if_noder   rj   r   r   r   r  r   s                    rD   test_if_functionz'TestReferenceEvaluator.test_if_function'  s   )*k6G!MM)*k6G!MMH___%%,,RZ88H___%%,,RZ88#rJ<z!}}
 
 
 $rJ<z!}}
 
 
 0+rH:NN	0+rH:NN	:I!!
 
 
 OO	z"""		"""	wi   "$$	|B667888T(F8eWUUUV*6;3CRHHI+E;3DqcJJK	
 
 
  'E22L14M4MN
 
 

 	
A3!!$$$$ 8998OOO2:>>>&),,,,,rK   c                    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                    t          ddgdg          gd|	|
g|g          }t!          |||g          }t#          |          }t%          j        d                              d                              t$          j                  }t%          j        ddgt$          j                  }|                    d ||d          d         }t%          j        ||z  dz             }t5          ||           d S )Nr;  r^   rv   ri  r   r  biasr   r   r   r   r   r   LinearRegressionY1former_Bq=
ףp?)rb   r  Absr=  r>  r   r@  r   rw   r4  r   )r   r   r   r   rX   rA  TENSORr{   rC  rD  r   r#   r   r   r   r!   r   r(   r~   r)  r   r*  r   r   r   absr   )r   rj   rE  r   cstrG  r   r   linear_regressionr   r   r   r   rg   r   r   r   r  r   s                      rD   test_function_attributez.TestReferenceEvaluator.test_function_attributeZ  s_   "$$
%b%00,z12M2MN
B.."!(S!!!(S#J77%$se44)#JE%H
 
 #3(9D$<HH"3(9D$<HH"3(9D6BB&#JF%$Z1BQC$PP   %$#//	 FC
 
   ;L:M
 
 

 "*--IaLL  ((//
;;HaWBJ///$aa 0 011!46!a%$,''&)))))rK   c                 	   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                                      }t          ddgdg          }t          dddgdg          }t          ddgdg|	|
          }t          dddgdg          }t          dddgdg          }t%          |dddgdg||||||g|dd	g          }t          dt          j        d d g          }t          dt          j        d d g          }t          dt          j        d g          }t          t          dddgdg|t'          dt          j        dgd g          t'          d!t          j        dgd"g          #          t          d$dgdg          gd%||g|g          }t)          |||g&          }t+          |           t-          |          }|                     |j        d         j        j        d'           |                     |j        d         j        j        j        d(           |j        d         j        }d)}|j        D ]J}|j        j                            d          r)|j        s t=          d*t          |           d+          d,}K|st=          d-          t          j        d.                               d/          !                    t          j                  }t          j        dd0gt          j                  }|"                    d |dz   |d1          d         }t          j#        ||z  d z             }tI          ||           |"                    d |d2z
  |d1          d         }t          j#        ||z  d"z             }tI          ||           d S )3Nr;  r^   rv   ri  B1r  bias1B2bias2r  r  rm  r   rw   r  	ReduceMinr   Xminr[  r  ro  r   r  r   r   r   r   r   r  r  	former_B1r  	former_B2	  )rb   r  r  r  r=  r>  
OpFunctionr(   FzNested node z2 declares no linked attribute but a subgraph does.TzBNo node 'If' was found, has_linked_attribute could not be checked.r   r@  r   r4  r   )%r   r   r   r   rX   rA  r  r{   rC  rD  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   rj   rE  r   cst1rG  cst2r|  r}  r  r  rm  minir  r  r   r   r  r   r   r   r   rg   r   fctcheckedrF  r   r   r  r   s                                  rD   $test_function_attribute_nested_graphz;TestReferenceEvaluator.test_function_attribute_nested_graph  s   "$$
%b%00,z12M2MNR$00#!(c"""R$00#!(c""")$0AD6JJ)$0AD6JJv{B
CC	v{B
CC	HRXqc<<<==	
 
 
 sefX669vv&6
CC:E!!
 
 
 (S#J77%$se44)#JE4%7g
 
 #3(9D$<HH"3(9D$<HH"3(9D6BB&#JF%%k;3DqcD6RR%k;3DqcC5QQ   %$#//
 FC
 
"  ;L:M
 
 

 	J!*--*4=|LLLN1#-68L	
 	
 	
 nQ%M 	 	D~&11$77 0 (0tDzz 0 0 0    	 T   IaLL  ((//
;;HaWBJ///$a!e! 4 455a86!a%$,''&)))$a"f1 5 566q96!a%#+&&&)))))rK   c                 &   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                                      }t          dddgdg          }t          ddgdg|	|
          }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                                      }t          ddgdg          }t          dddgdg          }t          ddgdg||          }t          ddd gd!g          }t          d"d!dgd#g          }t%          |d$dd gd#g||||||g|g d%          }t          dt          j        d d g          }t          d t          j        d d g          }t          d#t          j        d g          }t          t          d$dd gd&g|t'          d't          j        dgd(g          t'          d)t          j        dgd*g          t'          d+t          j        dgd,g          -          t          d.d&gd#g          gd/||g|g          }t)          |||g0          }t+          |           t-          |          }t          j        d1                              d2                              t          j                  }t          j        dd3gt          j                  }|                    d |dz   |d4          d         }t          j        ||z  d*z             }t9          ||           |                    d |d5z
  |d4          d         }t          j        ||z  d6z
            }t9          ||           |                    d |d7z   |d4          d         }t          j        ||z  d(z             }t9          ||           d S )8Nr;  r^   rv   ri  r  r  r  r  r  r  r  c100d   rw   r  r[  r  
f_cond_100ro  B4r  B3bias3rm  r   r  r   Lessf_cond_zeror   r   r   r   r   r   r  )r  r  r  r  r  r  r  r  	former_B3i)rb   r  r  r  r  r=  r>  r   r@  r   r4  r   ix  i  )r   r   r   r   rX   rA  r  r{   rC  rD  r#   r   r   r   r'   r~   r   r   r   r!   r   r   r(   r)  r   r*  r   r  r   ) r   rj   rE  r   r  rG  r  r|  r}  
then_body1
else_body1r  r  r  cst3
then_body2
else_body2rm  r  r   r   r  r   r   r   r   rg   r   r   r   r  r   s                                    rD   +test_function_attribute_nested_nested_graphzBTestReferenceEvaluator.test_function_attribute_nested_nested_graph  s   "$$
%b%00,z12M2MN R$00#!(c"""R$00#!(c""")$0AD6JJ)$0AD6JJR(DD
R(DD
 HRXse2:>>>??	
 
 
 9vv&6GG >F""
 
 
 R$00#!(c""")$0AD6JJR(DD
)$0AD6JJvw 7b8*UU
 HRXqc<<<==	
 
 
 sefX666FF#3m_EE!?E""
 
 
 (S#J77%$se44)#JE4%7'''
 
 #3(9D$<HH"3(9D$<HH"3(9D6BB&#JF%%k;3DqcD6RR%k;3DqcC5QQ%k;3DqcD6RR   %$#// FC
 
"  ;L:M
 
 

 	J!*--IaLL  ((//
;;HaWBJ///$a!e! 4 455a86!a%#+&&&)))$a"f1 5 566q96!a%#+&&&)))$a$hQ 7 788;6!a%$,''&)))))rK   c                     G d d          } G d dt                     } G d dt                     }t          dt          j        d d g          }t          dt          j        d g          }t	          ddgdgd	d
          }t          |gd|g|g          }t          |t          d
d          g          }t          j	        d          
                    d                              t          j                  dz   }	|                     t                    5  t          |           d d d            n# 1 swxY w Y   t	          ddgdgd	d
          }t          |gd|g|g          }t          |t          d
d          g          }|                     t                     5  t          ||g           d d d            n# 1 swxY w Y   t	          ddgdgd	d
          }t          |gd|g|g          }t          |t          d
d          g          }|                     t                    5  t          ||g           d d d            n# 1 swxY w Y   t	          ddgdgd	d
          }t          |gd|g|g          }t          |t          d
d          g          }t          |||g          }
|
                    d d|	i          d         }d|	d	z   z  }t%          ||           d S )Nc                       e Zd ZdZd Zd ZdS ):TestReferenceEvaluator.test_custom_node.<locals>._InvAlphar;  c                 "    || _         || _        d S rU   )	onnx_node
run_params)r   r  r  s      rD   __init__zCTestReferenceEvaluator.test_custom_node.<locals>._InvAlpha.__init__  s    !*",rK   c                     d|| j         z   z  fS Nrv   alphar   r   s     rD   _runz?TestReferenceEvaluator.test_custom_node.<locals>._InvAlpha._run      Q^,..rK   N)r  
__module____qualname__	op_domainr  r  rp   rK   rD   	_InvAlphar  }  s7         I- - -/ / / / /rK   r  c                       e Zd Zd ZdS ):TestReferenceEvaluator.test_custom_node.<locals>.InvAlpha2c                     d|| j         z   z  fS r  r  r  s     rD   r  z?TestReferenceEvaluator.test_custom_node.<locals>.InvAlpha2._run  r  rK   N)r  r  r  r  rp   rK   rD   	InvAlpha2r    s#        / / / / /rK   r  c                       e Zd ZdZddZdS )9TestReferenceEvaluator.test_custom_node.<locals>.InvAlphar;  Nc                 &    |p| j         }d||z   z  fS r  r  r   r   r  s      rD   r  z>TestReferenceEvaluator.test_custom_node.<locals>.InvAlpha._run  s    +QY))rK   rU   r  r  r  r  r  rp   rK   rD   InvAlphar    s-         I* * * * * *rK   r  r   r         ?r;  r  rb   r#  rv   r   r$  r%  new_opsr   )r)   r#   r   r   r   r   r   r   r~   r)  r   r*  r   r   NotImplementedErrorr(   rz   r   r   )r   r  r  r  r   r   r   r   rg   r   r   r	  r   s                rD   test_custom_nodez'TestReferenceEvaluator.test_custom_node|  s!   	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/	* 	* 	* 	* 	*u 	* 	* 	* #3(9D$<HH"3(9D6BB*secU#hOOOE7D1#s33l8Q6O6O5PQQQ
IbMM!!),,33BJ??!C233 	+ 	+z***	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ +use3xPPPE7D1#s33l8Q6O6O5PQQQ
y)) 	@ 	@zI;????	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ +use3xPPPE7D1#s33l8Q6O6O5PQQQ
233 	@ 	@zI;????	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ *secU#hOOOE7D1#s33l8Q6O6O5PQQQ
!*x6JKKKhhtc1X&&q)C=#&&&&&s6   D55D9<D9%GGG4IIIc                 |    G d dt                     }t          dt          j        d d g          }t          dt          j        d g          }t	          ddgdgdd          }t          |gd|g|g          }t          |t          dd	          g
          }t          j	        d          
                    d                              t          j                  d	z   }t          ||g          }|                     t                    5  |                    d d|i           d d d            d S # 1 swxY w Y   d S )Nc                       e Zd ZdZddZdS )DTestReferenceEvaluator.test_custom_no_output_tuple.<locals>.InvAlphar;  Nc                 $    |p| j         }d||z   z  S r  r  r  s      rD   r  zITestReferenceEvaluator.test_custom_no_output_tuple.<locals>.InvAlpha._run  s    +AI&rK   rU   r  rp   rK   rD   r  r    s-         I' ' ' ' ' 'rK   r  r   r   r  r;  r  r#  rv   r   r$  r%  r  r)   r#   r   r   r   r   r   r   r~   r)  r   r*  r   r(   r   rz   r   	r   r  r   r   r   r   rg   r   refs	            rD   test_custom_no_output_tuplez2TestReferenceEvaluator.test_custom_no_output_tuple  s   	' 	' 	' 	' 	'u 	' 	' 	' #3(9D$<HH"3(9D6BB*secU#hOOOE7D1#s33l8Q6O6O5PQQQ
IbMM!!),,33BJ??!C hZ@@@y)) 	$ 	$GGD3(###	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$   D11D58D5c                 |    G d dt                     }t          dt          j        d d g          }t          dt          j        d g          }t	          ddgdgdd          }t          |gd|g|g          }t          |t          dd	          g
          }t          j	        d          
                    d                              t          j                  d	z   }t          ||g          }|                     t                    5  |                    d d|i           d d d            d S # 1 swxY w Y   d S )Nc                       e Zd ZdZddZdS )ATestReferenceEvaluator.test_custom_empty_output.<locals>.InvAlphar;  Nc                     t                      S rU   )ry   r  s      rD   r  zFTestReferenceEvaluator.test_custom_empty_output.<locals>.InvAlpha._run  s    wwrK   rU   r  rp   rK   rD   r  r    s-         I     rK   r  r   r   r  r;  r  r#  rv   r   r$  r%  r  )r)   r#   r   r   r   r   r   r   r~   r)  r   r*  r   r(   r   r}   r   r  s	            rD   test_custom_empty_outputz/TestReferenceEvaluator.test_custom_empty_output  s   	 	 	 	 	u 	 	 	 #3(9D$<HH"3(9D6BB*secU#hOOOE7D1#s33l8Q6O6O5PQQQ
IbMM!!),,33BJ??!C hZ@@@z** 	$ 	$GGD3(###	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$r  c                 |    G d dt                     }t          dt          j        d d g          }t          dt          j        d g          }t	          ddgdgdd          }t          |gd|g|g          }t          |t          dd	          g
          }t          j	        d          
                    d                              t          j                  d	z   }t          ||g          }|                     t                    5  |                    d d|i           d d d            d S # 1 swxY w Y   d S )Nc                       e Zd ZdZddZdS )@TestReferenceEvaluator.test_custom_tuple_tuple.<locals>.InvAlphar;  Nc                     |p| j         }t          t          d||z   z  g          g          }t          |t                    sJ t          |d         t                    sJ |S )Nrv   r   )r  ry   rV   )r   r   r  r   s       rD   r  zETestReferenceEvaluator.test_custom_tuple_tuple.<locals>.InvAlpha._run  sf    +UAUO#455677!#u-----!#a&%00000
rK   rU   r  rp   rK   rD   r  r    s-         I     rK   r  r   r   r  r;  r  r#  rv   r   r$  r%  r  r  r  s	            rD   test_custom_tuple_tuplez.TestReferenceEvaluator.test_custom_tuple_tuple  s   	 	 	 	 	u 	 	 	 #3(9D$<HH"3(9D6BB*secU#hOOOE7D1#s33l8Q6O6O5PQQQ
IbMM!!),,33BJ??!C hZ@@@y)) 	$ 	$GGD3(###	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$r  c                   	  G d d          	 G 	fddt                     }t          dt          j        d d g          }t          dt          j        d g          }t	          ddgdgdd	          }t          |gd
|g|g          }t          |t          dd          g          }t          j	        d          
                    d                              t          j                  dz   }t          ||g          }|                     t                    5  |                    d d|i           d d d            d S # 1 swxY w Y   d S )Nc                       e Zd ZdS )LTestReferenceEvaluator.test_custom_tuple_unexpected_type.<locals>.CustomTypeNr  r  r  rp   rK   rD   
CustomTyper            DrK   r  c                        e Zd ZdZd fd	ZdS )JTestReferenceEvaluator.test_custom_tuple_unexpected_type.<locals>.InvAlphar;  Nc                     t                       g          }t          |t                     sJ t          |d                   sJ |S )Nr   )ry   rV   )r   r   r  r   r  s       rD   r  zOTestReferenceEvaluator.test_custom_tuple_unexpected_type.<locals>.InvAlpha._run  sM    ZZ\\N++!#u-----!#a&*55555
rK   rU   r  )r  s   rD   r  r    s8         I       rK   r  r   r   r  r;  r  r#  rv   r   r$  r%  r  r  )
r   r  r   r   r   r   rg   r   r  r  s
            @rD   !test_custom_tuple_unexpected_typez8TestReferenceEvaluator.test_custom_tuple_unexpected_type  s   	 	 	 	 	 	 	 		 	 	 	 	 	 	u 	 	 	 #3(9D$<HH"3(9D6BB*secU#hOOOE7D1#s33l8Q6O6O5PQQQ
IbMM!!),,33BJ??!C hZ@@@y)) 	$ 	$GGD3(###	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$s   EEEc                 v   t          dt          j        g           }t          dt          j        g           }t          dt          j        g           }t	          dt          j        d           }t	          dt          j        d           }t          j        g d                              t          j	                  }t          dg dgt          d	t          j        |j        |                                                    t                    
                    }t          dg dgt          dt          j        ddg
                    }t          dg dgt          dt          j        ddg
                    }	t          dg dgt          dt          j        ddg
                    }
t          dddgdg          }t          dddgdg          }t          dg ddg          }t          dddgdg          }t          ddgdg          }t          ||||	||
|||g	d |||g||g          }t          d!g d"d#g|$          }t          d%d#gd&gdd'          }t          j        d(                              t          j                  }g }t          j        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-          .          }t          j        g d/t          j	        0          }t)          |          }|||d"}|                    d |          }t-          ||d                    d S )1Ncond_incond_out
iter_countseq_inseq_outr~  ri  r   const_tensor_x)rX   	data_typedimsvalsr  oneconst_tensor_onerp   rv   slice_startconst_tensor_zerorv   r   r!  const_tensor_axesr   endr   r  	Unsqueeze	slice_endSlice)r   r  r  	slice_outSequenceInsertIdentity	loop_bodyLoop)
trip_countr  	seq_emptyseq_res)r   r  bodyConcatFromSequencer   )r   r  r'  new_axisr   	loop_testr  r  r  )rX   r   r  r  )r   )r   r          @r   r#        @r   r#  r$        @r   r#  r$  r%        @rw   )r#   r   r  r6  r"   r   r~   r   r*  r   r   r!   rZ   flattenfloatr   r7  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  rF  node_concatr  r  r  ry  r   oinfr   r	  s                              rD   	test_loopz TestReferenceEvaluator.test_loop  s-   
 )K4DbII)*k6FKK+L+:KRPP
0;;LdSS1)[=NPTUUH___%%,,RZ88 E%%+WYY[[''..	  	

 

 

 #G'%+S	  	

 

 

 $"O(%+S	  	

 

 

 H(%+S	  	

 

 

	 UL%+@5'RRR&+
 
 
 ===}
 
 

  h%<yk
 
 
 "*i[:,WWW"
 &)w
 
	" 666K	
 
 
   ;G
 
 
 Xa[[''11
	x{{!!"(++ *$k&79I  +6;3CTZPP,[+:KRPP 0{7H$OOP[)  
 
 
	 8WWW*
 
 
 "),, *DyQQhhtV$$#a&)))))rK   c                    t          dt          j        d g          }t          dt          j        d g          }t          ddgdgd          }t	          |gd|g|g          }t          |          }t          |           t          |          }|                    d dt          j
        dt          j                  d	z   i          d
         }|                     |j        d           |                     |j        t          j                   |                     |                                d           |                     |                                d           d S )Nr   r   	Bernoulli        seedr\  rn   r   rw   r  r   gh㈵grZ|
 ?r#   r   r   r   r   r   r   r(   r   r~   r   r   r   rZ   rx   assertGreaterr   
assertLessr   r   r   r   r   r   rg   r   r	  s           rD   test_onnxt_runtime_bernoulliz3TestReferenceEvaluator.test_onnxt_runtime_bernoulli  s.   "3(9D6BB"3(9D6BB+use#>>>E7C!qc22&&
J!*--hhtc28F"*#E#E#E#KLMMaPF+++BJ///37799e,,,		8,,,,,rK   c                 F   t          dt          j        d g          }t          dg dgdddg          }t	          |gdg |g          }t          |          }t          |           t          |          }|                    d i           d         }| 	                    |j
        d	           | 	                    |j        t          j                   |                     |                                d           |                     |                                d
           d S )Nr   RandomUniformr8  rn   r   r:  rZ   r\  r   r;  rv   )r#   r   r   r   r   r   r   r(   r   r   rZ   rx   r~   r   r=  r   r>  r   r   r   r   r   rg   r   r	  s          rD   !test_onnxt_runtime_random_uniformz8TestReferenceEvaluator.test_onnxt_runtime_random_uniform  s    "3(9D6BB/2u3q!fMMME7CaS11&&
J!*--hhtR  #F+++BJ///37799a(((		1%%%%%rK   c                    t          dt          j        d g          }t          dt          j        d g          }t          ddgdgd          }t	          |gd|g|g          }t          |          }t          |           t          |          }|                    d dt          j
        dt          j                  i          d	         }|                     |j        d           |                     |j        t          j                   |                     |                                d	           |                     |                                d
           d S )Nr   r   RandomUniformLiker8  r9  r\  r;  rw   r   rv   r<  r?  s           rD   &test_onnxt_runtime_random_uniform_likez=TestReferenceEvaluator.test_onnxt_runtime_random_uniform_like  s*   "3(9D6BB"3(9D6BB-use#FFFE7C!qc22&&
J!*--hhtc28F"*#E#E#EFGGJF+++BJ///37799a(((		1%%%%%rK   c                    t          dt          j        d g          }t          dg dgdddg          }t	          |gdg |g          }t          |          }t          |           t          |          }|                    d i           d         }| 	                    |j
        d	           | 	                    |j        t          j                   d S )
Nr   RandomNormalr8  rn   r   rC  r\  r   r;  )r#   r   r   r   r   r   r   r(   r   r   rZ   rx   r~   r   rD  s          rD    test_onnxt_runtime_random_normalz7TestReferenceEvaluator.test_onnxt_runtime_random_normal  s    "3(9D6BB."se#aVLLLE7CaS11&&
J!*--hhtR  #F+++BJ/////rK   c                    t          dt          j        d g          }t          dt          j        d g          }t          ddgdgd          }t	          |gd|g|g          }t          |          }t          |           t          |          }|                    d dt          j
        dt          j                  i          d	         }|                     |j        d           |                     |j        t          j                   d S )
Nr   r   RandomNormalLiker8  r9  r\  r;  rw   r   )r#   r   r   r   r   r   r   r(   r   r~   r   r   r   rZ   rx   r?  s           rD   %test_onnxt_runtime_random_normal_likez<TestReferenceEvaluator.test_onnxt_runtime_random_normal_like  s    "3(9D6BB"3(9D6BB,secUEEEE7C!qc22&&
J!*--hhtc28F"*#E#E#EFGGJF+++BJ/////rK   c                     t          j        d          }|                     |j        d           t	          j        ddgddggt          j                  }t          j        |d          }t          |d          }t          ||           d S )Nr  r  r   rv   r   rn   rw   )
r/   creater   r  r~   r   r   evalr1   r   )r   instr   r   r   s        rD   test_eval_celuz%TestReferenceEvaluator.test_eval_celu  s    {%%%S)))Hq!fr1g&bj999Ias###1C(((!$$$$$rK   c                     t          j        ddgddggt           j                  }t          j        |t
          j                  }t          j        |t
          j                  }|}t          ||           d S )Nr   rv   r   rn   rw   to)	r~   r   r   r.   rQ  r   FLOAT8E4M3FNr   r   )r   r   r   dyr   s        rD   test_eval_castz%TestReferenceEvaluator.test_eval_cast  sn    Hq!fr1g&bj999L{7888\! 1222"%%%%%rK   c                 z   t          dd          }|                     |j        d           |                    d          }|                     |j        d           t          j        ddgddggt
          j        	          }|                    |d          }t          |d          }t          ||           d S )
Nr^   r/   r  r  r   rv   r   rn   rw   )r+   r   r  rP  r  r~   r   r   rQ  r1   r   )r   celurR  r   r   r   s         rD   test_eval_celu_load_opz-TestReferenceEvaluator.test_eval_celu_load_op  s    r6"",,,{{{%%S)))Hq!fr1g&bj999IIasI##1C(((!$$$$$rK   c                 f    t          j        d          }|                     |j        d           d S )Nr  r  )r0   rP  r   r  )r   rR  s     rD   test_create_adamz'TestReferenceEvaluator.test_create_adam  s2    {%%%S)))))rK   c           	      B   t          dt          j        g d          }t          dt          j        g d          }t          dt          j        g d          }t          dt          j        g d          }t          dg ddgg dd	d	gd
d
g          }t	          |gd|||g|g          }t          |t          dd          g          }t          |          }|d S t          |d          }	| 	                    |	j
        d         t                     t          |t          gd          }
| 	                    |
j
        d         t                     t          |d          }| 	                    |j
        d         t                     d\  }}t          |          D ]}t          |          D ]l}t          j        d	d	||ft          j                  }d|dd||f<   t          j        dt          j                  }t          j        d
t          j        d                              d          z  d          |ddd d d d f<   t          j        dggggt          j                  }|                    d |||d          d         }|	                    d |||d          d         }t-          ||           |
                    d |||d          d         }t-          ||           |                    d |||d          d         }t-          ||           nd S )Nr   NNNNr   r   Wr4   r   ra  r   rv   rv   rv   rv   rv   rn   )rt   r   r   r\  r^      r   F)	optimizedr   )r  re  T)r   r   rw   r   rv   rv   r   r   	   r   r      )r#   r   r   r   r   r   r   rk   r(   assertIsInstancer  r4   ConvOptimizedr   r~   r   r   minimumr)  r   r   r   r   )r   r   r   r   ra  rF  r   rg   sess1sess2sess3sess4sHsWrr   r   r   r	  got3got4s                       rD   	test_convz TestReferenceEvaluator.test_conv  s.   "3(9;S;S;STT"3(9;S;S;STT"3(9;S;S;STT"3(9;S;S;STTOOE!fF
 
 
 D63Aq	A377+E,rSUBVBVAWXXX
!*--=F":???eoa0$777":RWXXXeoa0-@@@":>>>eoa0-@@@Br 	0 	0A2YY 0 0HaB^2:>>> #!Q1*H\<<< "
1	!0D0DW0M0M+Ms S S!Q111*HugYbj999 99T+C+CDDQGiiAAA&>&>??B#...yyQQQ'?'?@@C$///yyQQQ'?'?@@C$////0	0 	0rK   c                    t          dt          j        g d          }t          dt          j        g d          }t          dt          j        g d          }t          dt          j        d g          }t          dt          j        d g          }t          dt          j        d g          }t          dt          j        d g          }t          d	t          j        d g          }t          d
t          j        d g          }	t	          dg ddg          }
t          |
gd||||||||	g|g          }t          |t          dd          g          }t          |          }|d S t          |          }d\  }}t          |          D ]}t          |          D ]}t          j        dd||ft          j                  }d|dd||f<   |                     d||          5  t          j        dt          j                  }d|ddd d d d f<   |t          j        dgt          j                  t          j        dgt          j                  |t          j        dgt          j                  t          j        dgt          j                  t          j        dgt          j                  t          j        dgt          j                  d}|                    d |          d         }|                    d |          d         }	 t%          ||           n# t&          $ r}|d }~ww xY w	 d d d            n# 1 swxY w Y   |                     d||          5  t          j        dt          j                  }t          j        dt          j        d                              d          z  d          |ddd d d d f<   |t          j        dgt          j                  t          j        dgt          j                  |t          j        dgt          j                  t          j        dgt          j                  t          j        dgt          j                  t          j        dgt          j                  d}|                    d |          d         }|                    d |          d         }t%          ||           d d d            n# 1 swxY w Y   |                     d||          5  t          j        dt          j                  }d|ddd d d d f<   |t          j        dgt          j                  t          j        d gt          j                  |t          j        d!gt          j                  t          j        d"gt          j                  t          j        d#gt          j                  t          j        d gt          j                  d}|                    d |          d         }|                    d |          d         }t%          ||           d d d            n# 1 swxY w Y   t          j        g d$g d%g d&g d'g d(g d)g d*gt          j                                      d+          }t          j        dgt          j                  }t          j        d gt          j                  }t          j        dgt          j                                      d          }t          j        d,gt          j                  }t          j        d"gt          j                  }t          j        d#gt          j                  }t          j        d-gt          j                  }	||||||||	d}|                    d |          d         }|                    d |          d         }t%          ||           d S ).Nr   r`  wr   x_scalew_scaley_scalex_zero_pointw_zero_pointy_zero_pointQLinearConv)r   rx  r{  rw  ry  r|  rz  r}  r\  r^   rd  r   r   r   rv   rw   r   r   1x1)rw  rr   r   rc  3x3rf  rn   rg  rh     g칟>n?   gO Y@   g{XZ?)r                 :   )r   ;      _      r   @   )8            r        )            r  r  r  )   '   |   M   P   f   +   )         S   )   (      )r     \      *         rv   rv   r   r   gO\?{   )r#   r   UINT8r   r   r   r   r   rk   r(   r   r~   r   r  r  r   r   r   r   r   rl  r)  r   )r   r   rw  r   rx  ry  rz  r{  r|  r}  rF  r   rg   rm  rn  rq  rr  rr   r   feedsr   r	  r   s                          rD   test_qlinearconvz'TestReferenceEvaluator.test_qlinearconv  s4   "3(9;S;S;STT"3(9;S;S;STT"3(9;S;S;STT(K4EvNN(K4EvNN(K4EvNN-nk>ORVQWXX-nk>ORVQWXX-nk>ORVQWXX	 	 	 E
 
 Fq'<,WC	
 
 ,E,rSUBVBVAWXXX
!*--=F":..Br 6	3 6	3A2YY 53 53HaB^28<<< #!Q1*\\EQ!\44    RX>>>A$%AaAAAqqqjM#%8QCrz#B#B#B(*!BH(E(E(E#%8QCrz#B#B#B(*!BH(E(E(E#%8QCrz#B#B#B(*!bh(?(?	 	E  %yyu55a8H))D%003C '#6666)        7!                             & \\EQ!\44 3 3RX>>>A$&JqBIaLL4H4H4Q4Q/QSV$W$WAaAAAqqqjM#%8QCrz#B#B#B(*!BH(E(E(E#%8QCrz#B#B#B(*!BH(E(E(E#%8QCrz#B#B#B(*!bh(?(?	 	E  %yyu55a8H))D%003C#Hc2223 3 3 3 3 3 3 3 3 3 3 3 3 3 3  \\EQ!\44 3 3RX>>>A$%AaAAAqqqjM#%8]O2:#N#N#N(*#bh(G(G(G#%8-=,>bj#Q#Q#Q(*#bh(G(G(G#%8]O2:#N#N#N(*#(A(A	 	E  %yyu55a8H))D%003C#Hc2223 3 3 3 3 3 3 3 3 3 3 3 3 3 3M53n H111---111333//////111 (
 
 
 ',

 	
 (M?"*===xRX666HaS)))11,??(M?"*===xRX666(M?"*===xRX666 (((	
 	
 99T5))!,iie$$Q'#&&&&&s]    D*L=LL=
L-	&L(	(L-	-L==MM E5S!!S%(S%D:Y

YYc                    t          dt          j        g d          }t          dt          j        g d          }t          dt          j        g d          }t          dt          j        g d          }t          dddgdg|||          }	t          ddgd	g          }
t          d
dd	gdg|||d          }t          ddgdg          }t          dddgdg          }t	          |	|
|||gd||g||g          }t          |t          dd          t          dd          g          }t	          |	gd||g|g          }t          |t          dd          g          }t          |          }	 t          |          }|d S n# t          $ r d }Y nw xY wd\  }}t          j        |          }t          |          D ]}t          |          D ]}t          j        dd||ft          j                  }d|dd||f<   t          j        ddg|R t          j                  }t          j        dt          j        |                              |d         df          z  d          |ddd d d d f<   |                    d ||d          }|Y|                    d ||d          d         }t)          |d                                         |                                           	 t)          |d                                         |d                                                    \# t,          $ r3}t-          d| d| d | d!| d"|d          d#|d                    |d }~ww xY wd S )$Nr   r`  r  Y2ra  r4   rt   r   r   ShaperZ   Im2Colximexperimental)rt   r   r   rb   Flattenwflatr   r\  r^   rd  rv   r   )r   r   rw   r   r   rn   r   ri  )r   ra  zDiscrepancies: pads=z, dilations=z
, strides=z, kernel_shape=r   
!=
)r#   r   r   r   r   r   r   r   r(   rk   r>   r~   r   r   r   r   rl  r)  r   r   r   ravelr   )r   r   rt   r   r   r   r  r  ra  rF  
node_shapenode_im	node_flatnode_gemr   rg   
graph_convonnx_model_convr   	sess_convrq  rr  nkerrr   r   r	  ort_resr   s                               rD   common_test_im2colz)TestReferenceEvaluator.common_test_im2col  s(   "3(9;S;S;STT#D+*;=U=U=UVV#D+*;=U=U=UVV"3(9;S;S;STTS#JT7i
 
 
 wy99
'NG!
 
 
 i#	::	X'7$@@:w	8<FH	
 
  ,r2"6"6^UV8W8W!X
 
 

  aVbT::
0|B';';&<
 
 
 "*--	)/::I  ! 	 	 	III	 Bw|$$r 	 	A2YY  HaB^2:>>> #!Q1*H)L))*   !#
400,q/21FGGG! !!Q111* hht11%5%566('mmD2B2BCCAFG#CFLLNNGMMOODDD#CFLLNNCFLLNNCCCC%   (4t 4 4 4 4V] 4 4(44 4 V4 4+.q64 4  	#	 	s+   0F FF*A L,,
M)6.M$$M)c                 D    |                      dg dddgddg           d S )Nrv   rv   rv   rv   rv   rn   rv   r  r  r   s    rD   test_im2col_1x1z&TestReferenceEvaluator.test_im2col_1x1  >    1v!Q 	  	
 	
 	
 	
 	
rK   c                 D    |                      dg dddgddg           d S )Nr]  r  rv   r  r  r  s    rD   test_im2col_2x2z&TestReferenceEvaluator.test_im2col_2x2  r  rK   c                 D    |                      dg dddgddg           d S )Nr  r  rv   r  r  r  s    rD   test_im2col_3x3z&TestReferenceEvaluator.test_im2col_3x3  r  rK   c                 D    |                      dg dddgddg           d S )Nr  )r   rv   rn   r   rv   r  r  r  s    rD   test_im2col_3x3_padsz+TestReferenceEvaluator.test_im2col_3x3_pads  r  rK   c                 D    |                      dg dddgddg           d S )Nr  )r   rv   rv   rv   rv   rn   r  r  r  s    rD   test_im2col_3x3_stridesz.TestReferenceEvaluator.test_im2col_3x3_strides  r  rK   c                 D    |                      dg dddgddg           d S )Nr   r   r  rv   r  r  r  s    rD   test_im2col_5x5z&TestReferenceEvaluator.test_im2col_5x5  r  rK   c           	         dd l }t          dt          j        g d          }t          dt          j        g d          }t          dt          j        d g          }t          dt          j        d g          }t          dg ddgg d	d
d
gd
d
g          }t          |gd|||g|g          }t          |t          dd          g          }t          |          }	t          j        g dg dg dg dg dgg                              t          j                  }t          j        ddg                              t          j                  }
t          j        d
dg                              t          j                  }|j                            t#          |
          |          }|	                    d |||
d          } ||                    |                                                    }t+          ||d                    d S )Nr   r   NNNr   Ir   Col2Imr   r  r   r   r   r   r   rv   r  r\  r^   rd  r   )r         @      &@      0@      5@)r#        @      (@      1@      6@)r$         @      *@g      2@      7@)r%        "@      ,@      3@      8@)r&  r8        .@g      4@g      9@r   )output_sizer   r   r   r  )rN   r#   r   r   r6  r   r   r   r   r(   r~   r   r*  r   r7  nnFoldry   r   
from_numpynumpyr   )r   rN   r   r   ISBSrF  r   rg   r   image_shapeblock_shapefoldr	  r  s                  rD   test_col2imz"TestReferenceEvaluator.test_col2im  s   "3(9;M;M;MNN"3(9;M;M;MNN#C):TFCC#C):TFCCOOEF!f
 
 
 D63BaS99l2r6J6J5KLLL
!*--H 100000000000000

 

 &

 	
 h1v&&--bh77h1v&&--bh77x}}{););}UUhht1;[IIJJe&&q))**0022A'''''rK   c           	      t   dd l }t          dt          j        g d          }t          dt          j        g d          }	t          dt          j        d g          }
t          dt          j        d g          }t          dg ddg|||	          }t          |gd
||
|g|	g          }t          |t          dd          g          }t          |          }|j
                            t          |          t          |          t          |          t          |          t          |                    }t          j        |          }t!          |          D ]}t!          |          D ]}t          j        d||ft          j                  }d|d||f<   t          j        |t          j                  }t          j        |t          j                  } ||                    |                                                    }|                    d |||d          }t1          ||d                    Όd S )Nr   r   r  r   r  r   r  r  r  r\  r^   rd  r   )r  r   dilationpaddingstriderv   rw   r   r  )rN   r#   r   r   r6  r   r   r   r   r(   r  r  ry   r   r~   r   r   r   r   r   r7  r  r  r   r   )r   sizer  r  rt   r   r   rN   r   r   r  r  rF  r   rg   r   r  r  rr   r   i_shapeb_shaper  r	  s                           rD   common_test_col2imz)TestReferenceEvaluator.common_test_col2im  s3    	"3(9;M;M;MNN"3(9;M;M;MNN#C):TFCC#C):TFCCOOE
 
 
 D63BaS99l2r6J6J5KLLL
!*--x}}k**k**9%%II>>  
 
 w{##t 	0 	0A4[[ 
0 
0Hat_BJ??? !Q'
(;bh???(;bh???e..q112288::hht17%I%IJJ  A////
0	0 	0rK   c           	      H    |                      dddg dddgddg           d S )Nr   r   r   rn   r   r  rv   r  r  r  s    rD   test_col2im_2x3z&TestReferenceEvaluator.test_col2im_2x3G  C    \\\Aq6aQRV 	  	
 	
 	
 	
 	
rK   c           	      H    |                      dddg dddgddg           d S )N   r  r  rc  rv   r  r  r  s    rD   test_col2im_2x3_padsz+TestReferenceEvaluator.test_col2im_2x3_padsM  r	  rK   c                    t          j        ddgt           j                  }d|d         d<   t          j        ddg          dt          j        ddg          t          j        g d	          t          j        ddg          f\  }}}}}t	          ||||||          }t          ||||||          }t          ||           d S )
Nr   r  rw   r   r   r   r  rv   rc  )r~   r   r   r   r2   r3   r   )	r   r   r  r   r   rt   r  r1r2s	            rD   test_col2im_2dz%TestReferenceEvaluator.test_col2im_2dS  s    xBrz222Q
HaVHaVH\\\""HaV>
:\9dF -+|Yf
 
 )+|Yf
 
 	BrK   c                 B   t          dt          j        g d          }t          dt          j        g d          }t          dt          j        dg          }t          dt          j        g d          }t          dg d	dgdd
d
gddgg dd
d
g          }t	          |gd|||g|g          }t          |t          dd          g          }t          j        d          	                    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                  t          j        g d t          j                  d	}d!|d         d d <   |d         }|d         }|d         }t          j        d|j                  }t          |j        d!                   D ]}	t          d          D ]v}
||	|	d
z   |
|
d
z   f         }||
         }t#          |d"d
d
gg dd
d
g          }t          j        ||                                          }|||
         z   }|||	|
d d d d f<   wt)          |          }|                    d |          }t-          ||d!         d#$           d S )%Nr   )rn   r   r   r   ra  )r   rv   r   r   r   r   r   r4   rb  rv   r   rc  groupr   r   rt   r   r\  r^   rd  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   `Ζrw   )g   @[¿g   &g   (g   `䠾r   r  h㈵>atol)r#   r   r   r   r   r   r   r~   r)  r   r*  r   r   r   rx   r   rZ   r   matmulr'  r(   r   r   )r   r   ra  r   r   rF  r   rg   r  r   r\  r   rw  c2mulref1got1s                    rD   test_conv_im2col_group4z.TestReferenceEvaluator.test_conv_im2col_group4e  s   "3(9<<<HH"3(9<<<HH"3(9A3??"3(9<<<HHOOE!fQF	
 	
 	
 D63Aq	A377l2r6J6J5KLLL
 =))11,??FFrzRR  
  
  *  
  
  *  
  
  *  
  
  uM\ j_P P Pb    j  g\
 \
z c
111 #J#J#JH\111qwqz"" 	$ 	$A1XX $ $a!a%iQU*+aDAv1v|||aVDDiAIIKK00AaDj #!Q111*$ "*--xxe$$47......rK   c                    t          dt          j        g d          }t          dt          j        g d          }t          dt          j        dg          }t          dt          j        g d          }t          d	g d
dgdddgddgg dddg          }t	          |gd|||g|g          }t          |t          dd          g          }t          j        d          	                    d          
                    t          j                  dz   t          j        dt          j                  t          j        dt          j                  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                  }t!          ||
d                    d S )Nr   rv   r   r   r   ra  rn   r   r   r   r   rn   r   r`  r4   rb  rv   r   rc  r  r\  r^   rd  r   l   rw   rn   )r   r   r   rv   )r8  r8  r8  )r  r  r  )r  r  r  r   )r#   r   r   r   r   r   r   r~   r)  r   r*  r   r   r(   r   r   r   r   r   ra  r   r   rF  r   rg   r  r  r  r   s               rD   test_conv_stridesz(TestReferenceEvaluator.test_conv_strides  s   "3(9<<<HH"3(9<<<HH"3(9A3??"3(9;S;S;STTOOE!fQF	
 	
 	
 D63Aq	A377l2r6J6J5KLLL
 =))11,??FFrzRRUVV,bj999$bj111
 

 "#c
:!*--xxe$$8 %__&6&6&68J8J8JK$__oooG *
 
 
 	$q'*****rK   c           	         t          dt          j        g d          }t          dt          j        g d          }t          ddgdgddgg dddg          }t	          |gd	|g|g          }t          |t          d
d          g          }dt          j        d          d d d         	                    d          
                    t          j                  i}t          j        g dg dg dg dgggt          j                  }t          |          }|                    d |          }	t          ||	d                    d S )Nr   r`  r   MaxPoolr   rc  rn   r   rt   r   r\  r^   rd  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  rw   r   r#   r   r   r   r   r   r   r~   r)  r   r*  r   r   r(   r   r   
r   r   r   rF  r   rg   r  r   r  r  s
             rD   test_max_pool_2d_1z)TestReferenceEvaluator.test_max_pool_2d_1  sq   "3(9;S;S;STT"3(9;S;S;STTEEQF
 
 
 D63aS11l2r6J6J5KLLL
bimmDDbD)11,??FFrzRRS8 100000000///		 *
 
 
 "*--xxe$$$q'*****rK   c                 b   t          dt          j        g d          }t          dt          j        g d          }t          ddgdgddgg dddg          }t	          |gd	|g|g          }t          |t          d
d          g          }dt          j        g dg dg dg dg dg dg dgggt          j	                  i}t          j        g dg dg dg dgggt          j	                  }t          |          }|                    d |          }	t          ||	d                    d S )Nr   r`  r   r%  r   rc  rn   r&  r\  r^   rd  r   )i  if  i  iB  i  i     )i  i  i  r      r  iF  )iB  B   i  ix  iT  i  i  )o   i  is  iL  i  iJ  i  )i  4   i  Q   i'  i;  ih  )  i>  r2  i  i  i  i  )i|  i  K   iA  r3  i  i  rw   )g     X@g     @     @r5  )g     8@g     x@g     @     P@)     `@g     @r6  r6  )r7  g     @r7  g      @r   )r#   r   r   r   r   r   r   r~   r   r   r(   r   r   r*  s
             rD   test_max_pool_2d_2z)TestReferenceEvaluator.test_max_pool_2d_24  s   "3(9;S;S;STT"3(9;S;S;STTEEQF
 
 
 D63aS11l2r6J6J5KLLL
  @??===>>>???===>>>>>>
 j  
$ 8 544444444444		 *
 
 
 "*--xxe$$$q'*****rK   c                     t          dt          j        d d g          }t          dt          j        d d g          }t          dt          j        d d g          }t          dt          j        d d g          }t	          dg ddgdd	          }t          |gd
|||g|g          }t          |t          dd          g          }t          j	        g dgt          j
                  t          j	        ddgg          t          j	        ddggt          j
                  d}t          |          }	|	                    d |          }
t          j	        g dgt          j
                  }t          ||
d                    d S )Nr   r  Ur   ScatterElementsr   r  r:  rv   r   )r'  	reductionr\  r^   rd  r   )r   r#  r$  r%  r&  rw   皙?g @)r   r>  r$  r%  r&  r   r#   r   r   r6  r   r   r   r   r~   r   r   r(   r   r   r   r   Indr:  r   rF  r   rg   r  r  r  r   s               rD   test_scatter_elementsz,TestReferenceEvaluator.test_scatter_elementsf  s|   "3(9D$<HH$S+*;dD\JJ"3(9D$<HH"3(9D$<HHOOE
 
 
 D63CaS99l2r6J6J5KLLL
4445RZHHHAq6(##C:,bj999
 
 "*--xxe$$86667rzJJJ$q'*****rK   c                    t          dt          j        d d g          }t          dt          j        d d g          }t          dt          j        d g          }t          dt          j        d d g          }t	          dg ddg          }t          |gd|||g|g          }t          |t          dd	          g
          }t          j	        ddggt          j
                  t          j	        ddgg          t          j	        dgt          j
                  d}t          |          }	|	                    d |          }
t          j	        ddggt          j
                  }t          ||
d                    d S )Nr   r  r:  r   	ScatterNDr<  r\  r^   rd  r   r   r#  rw   r   r$  r?  r@  s               rD   test_scatterndz%TestReferenceEvaluator.test_scatternd  sc   "3(9D$<HH$S+*;dD\JJ"3(9D6BB"3(9D$<HHOOE
 

 D63CaS99l2r6J6J5KLLL
C:,bj999Aq6(##3%rz222
 
 "*--xxe$$8c3ZL
;;;$q'*****rK   c                 (   	 dd	 dfd	}t          dt          j        g d          }t          dt          j        d g          }t          dt          j        d g          }t          d	t          j        g d
          }t	          dg dd	gg d          }t          |gd|||g|g          }t          |t          dd          g          }t          j	        d          
                    t          j                                      d          t          j        ddg          t          j        ddg          d}	t          |          }
|
                    d |	          } ||	d         dddg d          }t!          ||d                    d S )Nrv   c                    | \  }}}}~||d         z   |d         z   |z
  |z  dk    sJ ||d         z   |d         z   |z
  |z  dk    sJ ||d         z   |d         z   |z
  |z  dz   }	||d         z   |d         z   |z
  |z  dz   }
t          j        t          j        |          |          }t          j        ||          }|t          j        t          j        |	          |
          z  }t          j        t          j        |          ||z            }|t          j        t          j        |
          |	          z  }|                    dd          |                    dd          z   }|                    dd          |                    dd          z   }t          j        t          j        |          ||z                                dd          }|||fS )Nr   rn   rv   r   r   )r~   repeatr)  tiler   )x_shapefield_heightfield_widthr  r  Nrh  Hra  
out_height	out_widthi0i1j0j1rr   r   ks                     rD   get_im2col_indiceszCTestReferenceEvaluator.test_col2im_impl.<locals>.get_im2col_indices  s    !JAq!Q
NWQZ/,>&HAMMMM
NWQZ/,>&HAMMMMgaj.71:5DORSSJWQZ'!*4{BvMPQQI29\22K@@BQB")BIj$9$99EEEB;//1ABBB"'")I"6"6
CCCB

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

2q!!BJJq"$5$55A	")A,,{(BCCKKBPQRRAq!9rK   r   c                 &   |\  }}}}	||d         z   |d         z   |	|d         z   |d         z   }}
t          j        |||
|f| j                  } |||||          \  }}}|                     ||z  |z  d|          }|                    ddd          }t           j                            |t          d           |||f|           |                                }|d         dk    r|dxx         |j	        d         z  cc<   n|d         dk    r|dxx         dz  cc<   |d         dk    r|dxx         |j	        d         z  cc<   n|d         dk    r|dxx         dz  cc<   |d d d d |d         |d         |d         |d         f         }|S )Nr   rn   rv   r   rw   r   )
r~   r   rx   r   	transposeaddatslicecopyrZ   )colsrJ  rK  rL  r  r  rM  rh  rN  ra  H_paddedW_paddedx_paddedrU  rr   r   cols_reshapedr   rV  s                     rD   col2im_indicesz?TestReferenceEvaluator.test_col2im_impl.<locals>.col2im_indices  s    !JAq!QGAJ+GAJ+ H xAx :$*MMMH(({GV GAq! !LL\)9K)GQOOM)33Aq!<<MFIIhtaA 6FFFllnnGqzQ


hnQ//



a


b 


qzQ


hnQ//



a


b 


111aaagaj!8'!*wqz:QQRCJrK   r   r  r  r  r   r`  r  )r   r  r  )r   rv   r   rv   )rt   r\  r^   rd  r   r4  )rv   r   r   r   rv   rv   r   r   )rK  rL  r  r   r  )r   r   Nrv   )r#   r   r   r6  r   r   r   r   r~   r)  r*  r   r   r   r(   r   r   )r   rb  r   r  r  r   rF  r   rg   r  r  r  r   rV  s                @rD   test_col2im_implz'TestReferenceEvaluator.test_col2im_impl  s   EF	 	 	 	0 PQ	 	 	 	 	 	8 #3(9;M;M;MNN#D+*;dVDD#D+*;dVDD"3(9;S;S;STT#4#4#4se,,,OOOD63BaS99l2r6J6J5KLLL
6""))"*55==jII(Aq6""(Aq6""
 
 "*--xxe$$!>#J LL
 
 
 	$q'*****rK   c                    t          dt          j        g d          }t          dt          j        g d          }t          dt          j        d g          }t          dt          j        g d          }t          dg ddgddgd	d	gd
d
gg dddg          }t	          |gd|||g|g          }t          |t          dd          g          }t          j        d          	                    d          
                    t          j                  t          j        d          	                    d          
                    t          j                  t          j        g dt          j                  d}t          |          }	|	                    d |          }
t          j        g dg dg dg dg dgggt          j                  }t          ||
d
                    |dxx         d
z  cc<   d|d         d<   t          |          }	|	                    d |          }
t          j        g dg dg dg dg dgggt          j                  }t          ||
d
                    d S )Nr   r`  ra  r   r   ConvTransposerb  rv   r   r   rc  )r   r   output_paddingrt   r   r\  r^   rd  r   r$  )rv   r   r   r      )r   rv   r   r   r  rw   )i  i  i  iA  )id  i.  id/  i!  )i   i3  i4  i$  )il$  i8  i\:  i(  )i  i+  i,  i#  )r   r   r   r   )r      r   r   r)  r"  s               rD   test_conv_transpose_2dz-TestReferenceEvaluator.test_conv_transpose_2d  s   "3(9;S;S;STT"3(9;S;S;STT"3(9D6BB"3(9;S;S;STTOOE!fQq6F	
 	
 	
 D63Aq	A377l2r6J6J5KLLL
=))11,??FFrzRR=))11,??FFrzRR,,,bj999
 
 "*--xxe$$8 100222222333222
 *
 
 
 	$q'***c


a


!"c
:!*--xxe$$8 %$$$$
 *
 
 
 	$q'*****rK   c           
         t          dt          j        g d          }t          dt          j        g d          }t          dt          j        d g          }t          dt          j        g d          }t          dg ddgdd	d	g
          }t	          |gd|||g|g          }t          |t          dd          g          }t          j        d          	                    d          
                    t          j                  t          j        d          	                    d          
                    t          j                  t          j        g dt          j                  d}t          j        g dg dg dg dg dg dgg dg dg dg dg dg d gggt          j                  }	t          |          }
|
                    d |          }t          |	|d!                    d S )"Nr   r`  ra  r   r   rf  rb  
SAME_UPPERrn   )auto_padr   r\  r^   rd  r   rg  rf  rK  )rv   rn   r   r   r  rw   )r   r   r   rv   rn   rn   )r   r   r   r   r   ri  )r   r   r  r   r     )rg  r  rh  rd  #      )rK  rh  r$  ro  L   r  )rK     3   r  r      )r   r   rg  r      rp  )r   r   r  r3  &      )rh     T   r     R   )$   r  Z   r1  t   A   )c   r   r.  r  i$     )H   N   r  [      h   r   r)  )r   r   ra  r   r   rF  r   rg   r  r   r  r  s               rD   test_conv_transpose_2d_upperz3TestReferenceEvaluator.test_conv_transpose_2d_upper*	  s-   "3(9;S;S;STT"3(9;S;S;STT"3(9D6BB"3(9;S;S;STTOOE!F
 
 
 D63Aq	A377l2r6J6J5KLLL
=))11,??FFrzRR=))11,??FFrzRR,,,bj999
 
 8 +**+++...///000000 .--...111111555333( *+
 
 
8 "*--xxe$$$q'*****rK   z1.21.5z+op_dft and op_stft requires numpy >= 1.21.5c                    t          dt          j        g d          }t          dt          j        d g          }t          dt          j        d g          }t          dt          j        g d          }t	          dg ddg          }t          |gd	|||g|g          }t          |t          d
d          g          }t          j	        d          
                    d                              t          j                  t          j        dt          j                  t          j        dt          j                  d}|d         }t          |d                   }t          |d                   }|dz  dz   }	|d         j        d         |z
  |z  dz   }
t          j        d|
|	dgt          j                  }t%          |
          D ]j}||z  }||z  |z   }t          j                            |d||df                   }|d|	         }t          j        |j        |j        fd          |d|f<   kt/          |          }|                    d |          }t3          ||d                    d S )Nsignalr  
frame_stepframe_lengthr   r`  STFT)r  r  r^   r  r\  r^      r   r  rv   r  rv   ri  rw   rd  )r  r  r  rn   rv   r   r'  )r#   r   r   r6  r   r   r   r   r~   r)  r   r*  r   r   r7  rW   rZ   r   r   fftstackrealimagr(   r   r   )r   r  r  r  r   rF  r   rg   r  onesided_lengthnstftsr   rr   startstopcomplex_outc_outr  r  s                      rD   	test_stftz TestReferenceEvaluator.test_stft`	  sd   
 (+2CEWEWEWXX+L+:KdVTT
-nk>ORVQWXX"3(9;S;S;STT888E
 

 D63\(JQCPPl2r6J6J5KLLL
inn,,[99@@LL(1BH555HRrx888
 
 x5011|,--
'1,1?(+l:zIQN8Q;2:NNNv 	H 	HA
NEz>L0D&**VAuTz1,<%=>>K/ 12EXuz5:&>QGGGHQTNN "*--xxe$$$q'*****rK   c                    t          dt          j        g d          }t          dt          j        d g          }t          dt          j        d g          }t          dt          j        d g          }t          dt          j        g d          }t	          dg d	dg          }t          |gd
||||g|g          }t          |t          dd          g          }t          j	        d          
                    d                              t          j                  t          j        dt          j                  ddt          j        dt          j        z  t          j	        dddt          j                  z  dz            z  z   t          j        dt          j                  d	}	|	d         }t#          |	d                   }|	d         }t#          |	d                   }|dz  dz   }
d|j        d         |j        d         z
  dz  z   }t          j        d||
dgt          j                  }t)          |          D ]u}||z  }||z  |z   }t          j                            |d||df         |z            d|
         }|d|
         }t          j        |j        |j        fd          |d|f<   vt3          |          }|                    d |	          }t7          ||d                    d S )Nr  r  r  windowr  r   r`  r  )r  r  r  r  r\  r^   r  r   r  r  ri  rw   r  rn   r   rd  rv   r  )r#   r   r   r6  r   r   r   r   r~   r)  r   r*  r   r   r7  cospirW   rZ   r   r   r  r  r  r  r(   r   r   )r   r  r  r  r  r   rF  r   rg   r  r  r  r   rr   r  r  r  r  r  r  s                       rD   test_stft_with_windowz,TestReferenceEvaluator.test_stft_with_window	  s   
 (+2CEWEWEWXX+L+:KdVTT
'+2CdVLL-nk>ORVQWXX"3(9;S;S;STT>>>E
 

 D63V\(RUVTWXXl2r6J6J5KLLL
inn,,[99@@LL(1BH555BF1ru9ryB'L'L'LLrQRRRSHRrx888
 
 x5011x|,--
'1,1fl1oQ7A==8Q;2:NNNv 	H 	HA
NEz>L0D&**VAuTz1,<%=%FGG/!K  / 12EXuz5:&>QGGGHQTNN "*--xxe$$$q'*****rK   c                    t          dt          j        g d          }t          dt          j        d d g          }t          dt          j        g d          }t          dt          j        d g          }t	          dg ddgddd	d
d|	  	        }t          |gd|||g|g          }t          |t          dd          g          S )Nr   r`  roisr   r  RoiAlignr   r  r  r   rn   r   output_half_pixel)output_heightoutput_widthsampling_ratiospatial_scalecoordinate_transformation_modemoder\  r^   r  r   )r#   r   r   r6  r   r   r   r   )r   r  r   r  r   r  rF  r   s           rD   get_roi_align_modelz*TestReferenceEvaluator.get_roi_align_model	  s    "3(9;S;S;STT%fk.?$NN"3(9;S;S;STT#C):TFCCE+>

 

 

 D63D"s;;%eLR<P<P;QRRRRrK   c                 8   |                      |          }t                      \  }}}|||d}t          |          }|d S |                    d |          }t	          |          }	|	                    d |          }
t          |d         |
d         d           d S )Nr  r   r  r  )r  r   rk   r   r(   r   )r   r  rg   r   batch_indicesr  r  r   r   r  r	  s              rD   common_test_roi_alignz,TestReferenceEvaluator.common_test_roi_align	  s    --d33
!;!=!==$M:: ,,<F88D%(( ,,ggdE""SV$777777rK   c                    |                      d          5  |                     d           d d d            n# 1 swxY w Y   |                      d          5  |                     d           d d d            d S # 1 swxY w Y   d S )Navgr  r   )r  r  r  s    rD   test_roi_alignz%TestReferenceEvaluator.test_roi_align	  s   \\u\%% 	. 	.&&u---	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. \\u\%% 	. 	.&&u---	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.s   9= =A==BBc                 l   dd l }ddlm} |                     |          }t	          |          }t                      \  }}}|                    d |||d          }	 |ddd          }
 |
|                    |          |                    |          g          }t          ||	d         d	           d S )
Nr   )RoIAlignr  r  r   rn   )r  r  r  r  )	rN   torchvision.opsr  r  r(   r   r   r  r   )r   r  rN   r  rg   r   r   r  r  r	  r   r   s               rD   common_test_roi_align_torchz2TestReferenceEvaluator.common_test_roi_align_torch	  s    ,,,,,,--d33
!*--!;!=!==$hht1dGGHHHV3qAAA1U%%a((5+;+;D+A+A*BCC#a&t444444rK   c                     |                      d          5  |                     d           d d d            d S # 1 swxY w Y   d S )Nr  r  )r  r  r  s    rD   test_roi_align_torchz+TestReferenceEvaluator.test_roi_align_torch
  s     \\u\%% 	4 	4,,U333	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4s   :>>c           	         t          dt          j        d g          }t          dt          j        d g          }t          dt          j        d g          }t          dt          j        d g          }t          dt          j        d g          }t          ddgg dd	          }t	          |gd
|g||||g          }t          |t          dd          g          }dt          j        d          	                    t          j
                  i}	t          j        g dt          j
                  t          j        g dt          j
                  t          j        g dt          j
                  t          j        dgt          j
                  g}
t          |          }|                    d |	          }t          d          D ]}t          |
|         ||                    d S Nr   r  r  Y3Y4Splitr  r  r  r  r   )num_outputsr\  r^   rK  r   r   r   rv   rn   rw   r%  )r   r   ri  rg  r#   r   r   r   r   r   r   r~   r)  r*  r   r   r(   r   r   r   r   r   r  r  r  r  rF  r   rg   r  r   r  r  rr   s                 rD   
test_splitz!TestReferenceEvaluator.test_split
  s   "3(9D6BB#D+*;dVDD#D+*;dVDD#D+*;dVDD#D+*;dVDD3%)A)A)AqQQQD63b"b"-=>>l2r6J6J5KLLL
bimm**2:667 HYYYbj111HYYYbj111HYYYbj111HaS
+++	
 "*--xxe$$q 	2 	2AHQKa1111	2 	2rK   c           	         t          dt          j        d g          }t          dt          j        d g          }t          dt          j        d g          }t          dt          j        d g          }t          dt          j        d g          }t          dddgg d          }t	          |gd	|g||||g          }t          |t          d
d          g          }t          j        d          	                    t          j
                  t          j        g dt          j                  d}	t          j        g dt          j
                  t          j        g dt          j
                  t          j        ddgt          j
                  t          j        ddgt          j
                  g}
t          |          }|                    d |	          }t          d          D ]}t!          |
|         ||                    d S )Nr   r  r  r  r  r  splitr  r\  r^   rK  r   r   )r   r   rn   rn   rw   )r   r  r  r%  r   r   ri  rg  r   )r#   r   r   r   r   r   r   r~   r)  r*  r   r   r7  r(   r   r   r   r  s                 rD   test_split_2z#TestReferenceEvaluator.test_split_2#
  s   "3(9D6BB#D+*;dVDD#D+*;dVDD#D+*;dVDD#D+*;dVDD3.2J2J2JKKD63b"b"-=>>l2r6J6J5KLLL
2%%bj11Xlll"(;;;
 
 HYYYbj111HYYYbj111HaV2:...HaV2:...	
 "*--xxe$$q 	2 	2AHQKa1111	2 	2rK   c           	         t          dt          j        d g          }t          dt          j        d g          }t          dt          j        d g          }t          dt          j        d g          }t          dt          j        d g          }t          ddgg dd	          }t	          |gd
|g||||g          }t          |t          dd          g          }dt          j        d          	                    t          j
                  i}	t          j        g dt          j
                  t          j        g dt          j
                  t          j        g dt          j
                  t          j        dgt          j
                  g}
t          |          }|                    d |	          }t          d          D ]}t          |
|         ||                    dt          j        d          	                    t          j
                  i}	t          j        g dt          j
                  t          j        g dt          j
                  t          j        g dt          j
                  t          j        g t          j
                  g}
t          |          }|                    d |	          }t          d          D ]}t          |
|         ||                    d S r  r  r  s                 rD   test_split_num_outputs_4z/TestReferenceEvaluator.test_split_num_outputs_4>
  s   "3(9D6BB#D+*;dVDD#D+*;dVDD#D+*;dVDD#D+*;dVDD3%)A)A)AqQQQD63b"b"-=>>l2r6J6J5KLLL
 bimm**2:667HYYYbj111HYYYbj111HYYYbj111HaS
+++	
 "*--xxe$$q 	2 	2AHQKa1111 bill))"*556HYYYbj111HYYYbj111HYYYbj111HRrz***	
 "*--xxe$$q 	2 	2AHQKa1111	2 	2rK   c                    t          dt          j        d d g          }t          dt          j        d g          }t	          ddgdgd          }t          |gd|g|g          }t          |t          dd          g	          }dt          j	        d
          
                    d                              t          j                  i}t          |          }|                    d |          }t          j        g dt          j                  
                    d          }	|                     |	                                |d                                                    d S )Nr   r   ArgMinrv   r  r\  r^   rK  r   r  r   r   )r   r   r   rw   r   rv   r   r#   r   r   r6  r   r   r   r   r~   r)  r   r*  r   r(   r   r   r7  r   tolist
r   r   r   rF  r   rg   r  r  r  r   s
             rD   test_argminz"TestReferenceEvaluator.test_argmine
  .   "3(9D$<HH"3(9D6BBC53%a888D63aS11l2r6J6J5KLLL
bimm++F33::2:FFG!*--xxe$$8IIIRX666>>wGG**DGNN,<,<=====rK   c                    t          dt          j        d d g          }t          dt          j        d g          }t	          ddgdgd          }t          |gd|g|g          }t          |t          dd          g	          }dt          j	        d
          
                    d                              t          j                  i}t          |          }|                    d |          }t          j        g dt          j                  
                    d          }	|                     |	                                |d                                                    d S )Nr   r   ArgMaxrv   r  r\  r^   rK  r   r  r  r   r   r   rw   r  r   r  r  s
             rD   test_argmaxz"TestReferenceEvaluator.test_argmaxq
  r  rK   c                    t          dt          j        d d g          }t          dt          j        d g          }t          dt          j        d g          }t          dt          j        d g          }t          dt          j        d g          }t	          dg ddg          t	          d	ddgdg          g}t          |d
||||g|g          }t          |t          dd          g          }t          j	        dggt          j
                  t          j	        dgt          j
                  t          j	        dgt          j
                  t          j	        dgt          j
                  d}	t          |          }
|
                    d |	          }t          j	        dgt          j
                  }|                     |                                |d                                                    d S )Nr   startsendsr!  r   r  )r   r  r  r!  TSqueezer\  r^   rK  r   r   rw   rv   r#   r   r   r6  r   r   r   r   r~   r   r7  r(   r   r   r  )r   r   r  r  r!  r   r  r   rg   r  r  r  r   s                rD   test_slice_squeezez)TestReferenceEvaluator.test_slice_squeeze}
  s   "3(9D$<HH'+2CdVLL%fk.?$HH%fk.?$HH"3(9D6BBg>>>FFi#v66
 5#64'>DDl2r6J6J5KLLL
A3%rx000hs"(333HaS111HaS111	
 
 "*--xxe$$8QCrx000**DGNN,<,<=====rK   c                    t          dt          j        d d g          }t          dt          j        d g          }t	          ddgdgdgdgdg          t	          ddgdgdg	          g}t          |d
|g|g          }t          |t          dd          g          }dt          j	        dggt          j
                  i}t          |          }|                    d |          }t          j	        dgt          j
                  }	|                     |	                                |d                                                    d S )Nr   r   r  r  r   rv   )r!  r  r  r  )r!  r\  r^   r   r   rw   r  )
r   r   r   r  r   rg   r  r  r  r   s
             rD   test_slice_squeeze_6z+TestReferenceEvaluator.test_slice_squeeze_6
  s6   "3(9D$<HH"3(9D6BBguse1#qcLLLi#QC888
 5#sQC00l2q6I6I5JKKK
bhuBH5556!*--xxe$$8QCrx000**DGNN,<,<=====rK   c                 B   t          dt          j        d d g          }t          dt          j        d d g          }t          ddgdg          }t	          |gd|g|g          }t          |t          dd          g          }t          |           t          |          }|j	        d         }| 
                    |j        j        d	           |                    d dt          j        d
t          j                  i          d         }| 
                    |j        d           | 
                    |d         d           t          |t          dd          g          }t          |           t          |          }|j	        d         }| 
                    |j        j        d           |                    d dt          j        d
t          j                  i          d         }| 
                    |j        d           | 
                    |d         d           d S )Nr   r   
ReduceMeanr\  r^   r  r   r   ReduceMean_1r;  rw   r  r   r   rv   rK  ReduceMean_18)r#   r   r   r   r   r   r   r   r(   r  r   r  r  r   r~   onesr   rZ   )	r   r   r   r   r   rg   r   clsr	  s	            rD   test_onnxrt_reduce_meanz.TestReferenceEvaluator.test_onnxrt_reduce_mean
  s   "3(9D$<HH"3(9D$<HH,u55E7C!qc22l2r6J6J5KLLL
J!*--nQ/@@@hhtc276#D#D#DEFFqIF+++TA&&&l2r6J6J5KLLL
J!*--nQ/AAAhhtc276#D#D#DEFFqIF+++TA&&&&&rK   r/  c                    g }t          dt          j        d dg          t          dt          j        d g          g}t          dt          j        d d g          t          dt          j        d g          g}| dk    r[|                    t	          t          j        dgt
          j                  d	
                     t          |dd	gdgdd          }nt          |dgdgddgd          }t          ddgdgd
          t          dddgdgd
          |t          ddgdgd
          g}t          |d|||          }g }g d}|                    t	          t          j        |t
          j
                                      d          d
                     |                    t	          t          j        dgt
          j                  d
                     t          dt          j        d dg          g}t          dt          j        d dg          t          dt          j        d dg          g}t          dddgd d!gd"|d#          t          d$d!gd%gd&ddg'          t          d(d%gd)gd*
          t          d+d)dgddgd,dd-          g}t          |d.|||          }t          |t          d/|           g0          }	|	S )1Nnext_inr   nextnext_outscan_outrK  rv   rw   axis_redr   cdistdf_17_C0cdistdf_17_reduced0cdistdf_17_ReduceSumSquarer   )rX   r"  )rX   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ֿ)rp  r   
Sc_Scancstrn   
To_TopKcstr  valuesindicesScanUU032UUUU033UUSc_Scan)rX   r  num_scan_inputs	TransposeTr_transposed0Tr_Transpose)rX   permSqrtSq_Y0Sq_SqrtTopKTo_TopK)rX   largestsorteddummyr^   r   )r#   r   r   rD  r'   r~   r   r7  r   r   r   r   r6  r   r   )
rj   	reduce_opinitializersr   r  node_reducer  r   
list_valuerg   s
             rD   _cdist_modelz#TestReferenceEvaluator._cdist_model
  s~     #9k.?$KK"6;+<tfEE
 #:{/@4,OO":{/@4&II

 B;;28QCrx888zJJJ   $ *-&'1  KK $ !&'1S  K j9+
|BVWWW	6*_,=DT   &'*	  
 5.&'<PP Q
 Q
 Q

d 	2:666>>wGG!  	
 	
 	
 	rx28444<HHH	
 	
 	
 )+2CdAYOOP"8[->q	JJ"9k.?$KK
 ,'I& !   !"#V   f/07))LLL,'9%  #
6 5'67LII  l2u6M6M5NOOO
rK   r  g]l,@g.s,&2@rw   rn   r   r   r   ReduceL1gQ@gK-J3@g%s}N@gZOc10@rK  r   r3  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  rj   c                    |\  }t          j        d                              d                              t           j                  }i }|                     |          }t          |          }|                    d d|i          }||d|f<   fd|j        d         j	        j        D             }	|	d         j
        }
t          |	d         j        fd|
i          }t          ||g          }|                    d d|i          }||d	|f<   d
}|                                D ]\  }}t          t          |          t          |                    D ]\  }}|j        |j        k    r)t#          dd| d|j         d| d|j         d          t          j        ||z
                                            }|dk    r!t#          d| dd| d| d| d|           d S )Nri  )r   r   r  r  c                 R    g | ]#}|j         j                                      !|$S rp   )r  r  r  )rq   r   r
  s     rD   ru   z9TestReferenceEvaluator.test_op_reduce.<locals>.<listcomp>  sB     
 
 
{#..y99

 
 
rK   r   	op_schemar  ref_clconstantzShape mismatch for z, :z != rm   gư>zDiscrepancies (max=z) for r   r  )r~   r)  r   r*  r   r  r(   r   r  r  _schemar{   r  itemszipreversedrZ   r   r  r   )r   reduce_op_expectedrj   r   r   resultsmodelr   r	  clschemanew_clbaselinerU  vr   r   diffr
  s                     @rD   test_op_reducez%TestReferenceEvaluator.test_op_reducev  sF   @ 1	8IaLL  ))00<<!!%33!%((hhtgq\** #u
 
 
 
^A&+5
 
 

 Ai"Q%/!3k65JKK!%&:::hhtgq\**#&% MMOO 
	 
	DAqHX..<< 	 	17ag%%(ciccXccccUVccYZY`ccc   va!e}}((**$;;(hdhh)hhhhWXhh\]hhefhh   	
	 
	rK   )r3  )r  )rK  	ref_opsetc                    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	          }t          |          }	|	                    d d|i          d
         }
t          |t          d|          g	          }t          |          }|                    d d|i          d
         }|                     |j        |
j                   t!          ||
           d S )Nr   r`  r   MeanVarianceNormalizationr\  r   rv   r^   r   r   )r#   r   r   r   r   r~   randomrandr*  r   r   r   r(   r   r   rZ   r   )r   rj   r*  r   r   r  r   r   rg   r  r	  ref_onnx_modelref_expectedr   s                 rD   test_mvnzTestReferenceEvaluator.test_mvn  sY    #3(9;S;S;STT"3(9;S;S;STT1C53%@@
 5#sQC00INN1aA&&--bj99l2u6M6M5NOOO
 ,,ggdS!H%%a(#E,r9:U:U9VWWW).99##D3(33A6333#&&&&&rK   c                    d } |            }t          j        ddgddggt           j                  }t          j        ddggt           j                  }t          j        d	d
ggt           j                  }t          j        |||g          }t	          |          }|||d}|                    d |          }	t          ||	d                    d S )Nc                     g } g }g }g }t                      dd}g }t          dddgdg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	          }|                     |           t          dddgdgdd	          }|                     |           d |                                D             }	t          | d||          }
t          |
|	|          }|S )Nrv   )r^   custom_domainConcatzx:0zx:1r__0r   r^   )r'  rb   c                 <    g | ]\  }}t          ||dn|          S r  r   rq   rb   rc   s      rD   ru   zZTestReferenceEvaluator.test_concat_in_a_function.<locals>.create_model.<locals>.<listcomp>  s>     ! ! !#FG V'/QQwGG! ! !rK   r4  concat_2I__0I__1I__2r__4r__3c                 <    g | ]\  }}t          ||dn|          S r  r8  r9  s      rD   ru   zZTestReferenceEvaluator.test_concat_in_a_function.<locals>.create_model.<locals>.<listcomp>:  s>       #FG V'/QQwGG  rK   numpyxr>  )
r   r   rD  r  r   r#   r   DOUBLEr   r   )r  r   r  r?  r   	nodes_fctrF  opset_imports_fctr  r   r   rg   s               rD   create_modelzFTestReferenceEvaluator.test_concat_in_a_function.<locals>.create_model  s!   EFGI,..CCFIXu~xaPRSSSDT"""! !'-||~~! ! !  ! C S!!!MM09KRPPQQQMM09KRPPQQQMM09KRPPQQQNN1&+:LbQQRRRVV,vhQ  D LLVV,vhQ  D LL '-||~~  M
 uh@@E#]i  J rK   r   r   r   r   rw   rv   rn   r   )r=  r;  r<  r   )r~   r   float64vstackr(   r   r   )
r   rE  rg   x1x2x3r   r  r  r	  s
             rD   test_concat_in_a_functionz0TestReferenceEvaluator.test_concat_in_a_function  s    0	 0	 0	d "\^^
XAwQ(
;;;X1vhbj111XBxj
333Ir2rl## ,,R44ggdE""3q6"""""rK   c           
      b   t          dt          j        d g          }t          dt          j        d g          }t	          t          t          ddgdgt          j                  gd|g|g                    }t          |          }t          j	        dddt          j
        g          }|                    d d|i          d	         }|                     |t          j	        dddt          j
        g                              t          j                  k                                               d S )
Nr   r   CastrU  r\  Clp?Q}>ʈÿr8  r   )r#   r   r   STRINGr   r   r   r(   r~   r   nanr   
assertTruer*  str_allr   r   r   r!  r  r   r	  s          rD   test_cast_float_to_stringz0TestReferenceEvaluator.test_cast_float_to_stringP  s   "3(9D6BB"3(:TFCCfsecU{7IJJJ  	
 	
 !''x9c26:;;ggdS$K((+BHh	3?@@GGPPPUUWW	
 	
 	
 	
 	
rK   c                 .   t          dt          j        d g          }t          dt          j        d g          }t          t	          t          ddgdgt          j                  t          ddgdgt          j                  gd|g|g                    }t          |          }t          j	        ddd	t          j
        g          }|                    d d|i          d
         }t          |t          j	        ddd	t          j
        g                     d S )Nr   r   rN  rZ  rU  r\  rO  rP  r8  r   )r#   r   r   r   r   r   rQ  r(   r~   r   rR  r   r   rV  s          rD   "test_cast_float_to_string_and_backz9TestReferenceEvaluator.test_cast_float_to_string_and_backd  s   "3(9D6BB"3(9D6BBfsecU{7IJJJfsecU{7HIII  

 

 !''x9c26:;;ggdS$K((+RXxC&HIIJJJJJrK   c                 
   t          dt          j        d           }t          dt          j        d           }t          dt          j        d           }t          dddgdgd          g}t          t          |d||g|g                    }t          |          }t          j
        d                              d	                              t          j                  }t          j        dt          j        
          }|                    d ||d          }	t          j        ddgddgddgggt          j        
          t          j        ddgddgddgggt          j        
          t          j        ddgddgddgggt          j        
          gg}
|                     t%          |
d                   t%          |	d                              t'          |
d         |	d                   D ]\  }}t)          ||           d S )Nr   r   rZ  SplitToSequencern   r  r\  rK  rv   r   r   rw   r^  r8  r   r  r  r  r  r#  r$  r  r  r  r  r%  r&  r(  r  r  r  r   r#   r   r   r6  	UNDEFINEDr   r   r   r(   r~   r)  r   r*  r   r   r7  r   r   r|   r  r   r   r   r   rZ  r  r!  r  r   r  r	  r   r   r   s                rD   test_split_to_sequencez-TestReferenceEvaluator.test_split_to_sequencew  s   "3(94@@"3(94@@"3(=tDD,sCj3%aHHHI:eS1a&1#>>?? ''y}}$$Y//66rzBB(1BH---ggd$W5566 C:SzD$<@ATTTC:SzD$<@ATTTC:d|dD\BC2:VVV
 	Xa[))3s1v;;777SV,, 	" 	"DAqAq!!!!	" 	"rK   c                    t          dt          j        d           }t          dt          j        d           }t          dt          j        d           }t          dddgdgd          g}t          t          |d||g|g                    }t          |          }t          j
        d                              d	                              t          j                  }t          j        g d
t          j                  }|                    d ||d          }	t          j        ddgddgddgggt          j                  t          j        ddgddgddgggt          j                  t          j        ddgddgddgggt          j                  gg}
|                     t%          |
d                   t%          |	d                              t'          |
d         |	d                   D ]\  }}t)          ||           d S ) Nr   r   rZ  r[  rn   r  r\  rK  r\  rn   rn   rn   rw   r^  r8  r   r  r  r  r  r#  r$  r  r  r  r  r%  r&  r(  r  r  r  r   r]  r_  s                rD   test_split_to_sequence_1dz0TestReferenceEvaluator.test_split_to_sequence_1d  s   "3(94@@"3(94@@"3(=tDD,sCj3%aHHHI:eS1a&1#>>?? ''y}}$$Y//66rzBB(999BH555ggd$W5566 C:SzD$<@ATTTC:SzD$<@ATTTC:d|dD\BC2:VVV
 	Xa[))3s1v;;777SV,, 	" 	"DAqAq!!!!	" 	"rK   c                   
 t          dt          j        d           }t          dt          j        d           }t	          ddgdgdd          g}t          t          |d|g|g                    }t          |          }t          j	        d          
                    d	                              t          j                  
|                    d d
i          }
fd
t          
j        d                   D             g}|                     t#          |d                   t#          |d                              t%          |d         |d                   D ]\  }}	t'          ||	           d S )Nr   rZ  r[  rn   r   r&  r\  rK  r\  c                 .    g | ]}d d d d |f         S rU   rp   )rq   rr   r   s     rD   ru   zTTestReferenceEvaluator.test_split_to_sequence_nokeepdims_noinput.<locals>.<listcomp>  s+    AAAqT!!!QQQ']AAArK   )r#   r   r   r^  r   r   r   r(   r~   r)  r   r*  r   r   r   rZ   r   r|   r  r   )r   r   rZ  r  r!  r  r	  r   r   r   r   s             @rD   )test_split_to_sequence_nokeepdims_noinputz@TestReferenceEvaluator.test_split_to_sequence_nokeepdims_noinput  sQ   "3(94@@"3(=tDD,secUQOOOP:eS1#s;;<< ''y}}$$Y//66rzBBggdS$K((AAAAE$*Q-,@,@AAABXa[))3s1v;;777SV,, 	" 	"DAqAq!!!!	" 	"rK   c                 H   t          dt          j        d g          }t          dt          j        d g          }t          dt          j        d g          }t          dt          j        d g          }t          dt          j        d g          }t          t	          t          ddgdgt          j                  t          ddgd	gt          j                  t          d
g dgt          dt          j        dgg d                    t          d
g dgt          dt          j        dgg d                    t          ddgdgt          j                  t          dd	gdgt          j                  t          ddgdgt          j                  t          ddgdgt          j                  gd|g||||g                    }t          |          }t          j        g dt          j                  }t          j        d |D                       }	t          j        d |D                       }
|                    d d|i          }t          |d         |	           t          |d         |
           t          |d         |	           t          |d         |
           d S )Nr   F1F2F3F4rN  f81rU  f82ri  C1r   r   rv   rn   g?r-  r  C2r\  rw   c                 F    g | ]}t          t          |                    S rp   r%   r   rq   r   s     rD   ru   z;TestReferenceEvaluator.test_cast_float8.<locals>.<listcomp>  *    KKK"#8#;#;<<KKKrK   c                 F    g | ]}t          t          |                    S rp   )r&   r   rt  s     rD   ru   z;TestReferenceEvaluator.test_cast_float8.<locals>.<listcomp>  ru  rK   r   rv   rn   r   )r#   r   r   r   r   r   rW  
FLOAT8E5M2r!   r(   r~   r   r   r   r   )r   r   rh  ri  rj  rk  r!  r  r   	expected1	expected2r	  s               rD   test_cast_float8z'TestReferenceEvaluator.test_cast_float8  s   "3(9D6BB#D+*;dVDD#D+*;dVDD#D+*;dVDD#D+*;dVDDfseeW9QRRRfseeW9OPPP") +":QCAUAUAU 	   ") +"81#?S?S?S 	   fugv+:KLLLfugv+:KLLLftftf9JKKKftftf9JKKK-0 RR 7 
 
> !''x,,,BJ???HKKdKKK
 
	 HKKdKKK
 
	 ggdS$K((A	***A	***A	***A	*****rK   c                    t          dt          j        d g          }t          dt          j        d g          }t          t	          t          ddgdgt          j                  t          dddgdgd	          t          ddgdgt          j                  gd
|g|g                    }t          j        ddgt          j	                  }t          j        d |D                       }t          |          }|                    d d|i          }t          |d         |            G d dt                    }t          ||g          }|                    d d|i          }t          |d         |           d S )Nr   r   rN  f8rU  CastLikef32r   )saturater\  g    cArw   c           	      P    g | ]#}t          t          |d d          d           $S )TF)uzr  )r  rs  rt  s     rD   ru   z@TestReferenceEvaluator.test_cast_like_float8.<locals>.<listcomp>  sM         &)!uEEE$    rK   c                       e Zd ZdZdS )>TestReferenceEvaluator.test_cast_like_float8.<locals>.CastLiker^   N)r  r  r  r  rp   rK   rD   r}  r     s        IIIrK   r  )r#   r   r   r   r   r   FLOAT8E4M3FNUZr~   r   r   r(   r   r   r*   )	r   r   r   r!  r   r   r  r	  r}  s	            rD   test_cast_like_float8z,TestReferenceEvaluator.test_cast_like_float8  s   "3(9D6BB"3(9D6BBfsedV8RSSSj3+wKKKfugu9JKKK
 	 	
 
 xC
3338  	  
 
 !''ggdS$K((A)))	 	 	 	 	{ 	 	 	 !
;;;ggdS$K((A)))))rK   c                 t   t          dt          j        d g          }t          dt          j        d g          }t          dt          j        d g          }t          t          t          ddgdgt          j                  t          ddgdgt          j                  gd|g||g                    }t          |          }t          j
        g dt          j                  }t          j
        d	 |D                       }t          j
        d
 |D                       }|                    d d|i          }	|                     |                                |	d                                                    |                     |                                |	d                                                    d S )Nr   rh  ri  rN  rU  r\  ro  rw   c                 ,    g | ]}t          |          S rp   )r   rt  s     rD   ru   zBTestReferenceEvaluator.test_cast_float8_output.<locals>.<listcomp>  !    EEE13A66EEErK   c                 ,    g | ]}t          |          S rp   )r   rt  s     rD   ru   zBTestReferenceEvaluator.test_cast_float8_output.<locals>.<listcomp>  r  rK   r   rv   )r#   r   r   rW  rw  r   r   r   r(   r~   r   r   r   r   r  )
r   r   rh  ri  r!  r  r   rx  ry  r	  s
             rD   test_cast_float8_outputz.TestReferenceEvaluator.test_cast_float8_output  s   "3(9D6BB#D+*BTFKK#D+*@4&IIfsedV8PQQQfsedV8NOOO R 

 

 !''x,,,BJ???HEEEEEFF	HEEEEEFF	ggdS$K(())++SV]]__===))++SV]]__=====rK   c                 n   t          j        ddddddddd	d
dddt           j        t           j         t           j        gt           j                  }t
          j        t          j        dddddddddddddddt           j        gt           j                  t
          j        t          j        dddddddddddddddt           j        gt           j                  t
          j        t          j        dddddddddddddddt           j        gt           j                  t
          j	        t          j        ddddddddd ddddddt           j        gt           j                  i}d! }|
                                D ]\  }}|                     |"          5   ||          }t          |          }|                    d d#|i          d$         }t          ||           |                     |j        |j                   |                     |j        |j                   d d d            n# 1 swxY w Y   d S )%Ng	?i`  i  iP  i0  i  iig-C6?g{Gz?i       j@rw   g      ?g      v@g      z@g      t@g      p@g      pg      Xr8  g      ?g      |@g      |g      n@g      ng      ?g      x@g      ?g      @g      g?c                 F   t          dt          j        d g          }t          dt          j        d g          }t          ddgdg|           }t          ddgdgt          j                  }t	          ||gd|g|g          }t          |          }t          |           |S )Nr   r   rN  r  rU  r   )r#   r   r   r   r   r   r   )rV  r   r   r   r   r   rg   s          rD   model_cast_castzCTestReferenceEvaluator.test_float8_4_types.<locals>.model_cast_cast  s    &sK,=vFFA&sK,=vFFAfsecUr:::EfsecU{7HIIIEu~taS1#>>E#E**J
###rK   rU  r   r   )r~   r   infrR  r   r   rW  r  rw  FLOAT8E5M2FNUZr  r  r(   r   r   r   rZ   rx   )	r   r   r   r  rV  expectrg   r  r   s	            rD   test_float8_4_typesz*TestReferenceEvaluator.test_float8_4_types  s   H!$ *'
 
 
, $bhF!$ j'' ' '* &F!$ j') ) )* "BH&F!$ j'% % %* &!     !!!!    !F!$ j') ) )AU
n	 	 	 #..** 	8 	8JB$$ 8 8,_R00
(44GGD3(++A.***  qw777  qw7778 8 8 8 8 8 8 8 8 8 8 8 8 8 8	8 	8s   B	H))H-	0H-	c           
      B   t          dt          j        d g          }t          dt          j        d g          }t	          t          t          ddgdgt          j                  gd|g|g                    }t          |          }t          j	        g dt          j
                  }t          j	        d |D                       }|                    d d|i          }|                     |                                |d	                                                    d S )
Nr   r   rN  rU  r\  r   rv   rn   r  r-  rw   c                 ,    g | ]}t          |          S rp   )r   rt  s     rD   ru   zDTestReferenceEvaluator.test_cast_bfloat16_output.<locals>.<listcomp>  s!    CCC1!44CCCrK   r   )r#   r   r   BFLOAT16r   r   r   r(   r~   r   r   r   r   r  )r   r   r   r!  r  r   rx  r	  s           rD   test_cast_bfloat16_outputz0TestReferenceEvaluator.test_cast_bfloat16_output  s   "3(9D6BB"3(<tfEEfsecU{7KLLL  	
 	
 !''x+++2:>>>HCCdCCCDD	ggdS$K(())++SV]]__=====rK   c                    t          dt          j        d g          }t          dt          j        d g          }t          t	          t          dg dgt          dt          j        dgdg                    t          dg dgt          dt          j        dgd	g                    t          d
g ddg          t          dddgdgd          gd|g|g                    }t          |          }t          j
        g dt          j                  }t          j
        g dt          j                  }|                    d d|i          }t          ||d                    d S )Nr   r   ri  scalerv   r#  rp  rm  r8  QuantizeLinearr   r  rm  r  DequantizeLinearr   r  r\  r  rw   r   rv   rn   i     r#   r   r   r   r   r   r!   rW  r(   r~   r   r   r   r   r   r   r   r!  r  r   r   r	  s           rD   test_quantize_linear_e4m3z0TestReferenceEvaluator.test_quantize_linear_e4m3  s|   "3(9D6BB"3(9D6BB" 	)';3DqcC5QQ	   ")&+2JQCRUQVWW	   .0F0F0FNN03.3%aPPP  ' 
 
. !''x+++2:>>>8///rzBBBggdS$K((#a&)))))rK   c                    t          dt          j        d g          }t          dt          j        d g          }t          t	          t          dg ddg          t          dddgdgd	          gd
|g|gt          dt          j        dgdg          t          dt          j        dgdg          g                    }t          |          }t          j
        g dt          j                  }t          j
        g dt          j                  }|                    d d|i          }t          ||d                    d S )Nr   r   r  r  r  r  r  r   r  r\  rv   r#  rm  r8  r  rw   r  r  r  s           rD   %test_quantize_linear_e4m3_initializerz<TestReferenceEvaluator.test_quantize_linear_e4m3_initializer  sA   "3(9D6BB"3(9D6BB.0F0F0FNN03.3%aPPP ):QC#GG(@1#uMM 
 
 !''x+++2:>>>8///rzBBBggdS$K((#a&)))))rK   c                    t          dt          j        d g          }t          dt          j        d g          }t          t	          t          dg dgt          dt          j        dgdg                    t          dg dgt          dt          j        dgd	g                    t          d
g ddg          t          dddgdgd          gd|g|g                    }t          |          }t          j
        g dt          j                  }t          j
        g dt          j                  }|                    d d|i          }t          ||d                    d S )Nr   r   ri  r  rv   r#  rp  rm  r8  r  r  r  r  r   r  r\  r  rw   )r   rv   rn   i  r  )r#   r   r   r   r   r   r!   rw  r(   r~   r   r   r   r   r  s           rD   test_quantize_linear_e5m2z0TestReferenceEvaluator.test_quantize_linear_e5m2  s{   "3(9D6BB"3(9D6BB" 	)';3DqcC5QQ	   ")&+2H1#PSuUU	   .0F0F0FNN03.3%aPPP  ' 
 
. !''x+++2:>>>8111DDDggdS$K((#a&)))))rK   c                 V   t          dt          j        d g          }t          dt          j        d g          }t	          t          t          dg ddg          gd|g|gt          dt          j        dgdg          t          d	t          j        dgd
g          g                    }t          |          }t          j
        g dt          j                  }t          j
        g dt          j                  }|                    d d|i          }t          ||d                    d S )Nr   r   r  r  r\  r  rv   r#  rm    )r8  g      `r$        333333@333333@g      @g         @     rw   )r  i         i  r  r    r   r  r   r   )r#   r   r   UINT16r   r   r   r!   r(   r~   r   r   uint16r   r   r  s           rD   test_quantize_linear_uint16z2TestReferenceEvaluator.test_quantize_linear_uint16	  sH   "3(9D6BB"3(:TFCC.0F0F0FNN ):QC#GG(:QC%II 
 
 !''x  & *)
 
 
, 8   )
 
 
" ggdS$K((#a&)))))rK   c                 V   t          dt          j        d g          }t          dt          j        d g          }t	          t          t          dg ddg          gd|g|gt          dt          j        dgdg          t          d	t          j        dgd
g          g                    }t          |          }t          j
        g dt          j                  }t          j
        g dt          j                  }|                    d d|i          }t          ||d                    d S )Nr   r   r  r  r\  r  rv   r#  rm  ri  )r8  g     r$  r  r  r  r  r  g    @g    g    @g    g     @g      r  r  rw   )ri  r        i  r  r  r  r  ir   r  r  r  r  r   )r#   r   r   INT16r   r   r   r!   r(   r~   r   r   int16r   r   r  s           rD   test_quantize_linear_int16z1TestReferenceEvaluator.test_quantize_linear_int16E  sH   "3(9D6BB"3(9D6BB.0F0F0FNN ):QC#GG(9A3FF 
 
 !''x  . *1
 
 
4 8  $ ('
 
 
* ggdS$K((#a&)))))rK   c                 Z   t          dt          j        d g          }t          dt          j        d g          }t	          t          t          dg ddgd          gd|g|gt          dt          j        d	gd
g          t          dt          j        d	gdg          g                    }t          |          }t          j
        g dt          j                  }t          j
        g dt          j                  }|                    d d|i          }t          ||d                    d S )Nr   r   r  r  r   r  r\  r  rv   r#  rm  r  )i0u  iy  r  i  rw   )g     g     r#  g      }@)r#   r   r  r   r   r   r   r!   r(   r~   r   r  r   r   r   r  s           rD   test_dequantize_linear_uint16z4TestReferenceEvaluator.test_dequantize_linear_uint16  s2   "3(:TFCC"3(9D6BB*,B,B,BSEPQ  
 ):QC#GG(:QC%II 
 
  !''x444BIFFF8:::"*MMMggdS$K((#a&)))))rK   c                 Z   t          dt          j        d g          }t          dt          j        d g          }t	          t          t          dg ddgd          gd|g|gt          dt          j        d	gd
g          t          dt          j        d	gdg          g                    }t          |          }t          j
        g dt          j                  }t          j
        g dt          j                  }|                    d d|i          }t          ||d                    d S )Nr   r   r  r  r   r  r\  r  rv   r#  rm  i )iiii  rw   )g     @g     @g       g     @)r#   r   r  r   r   r   r   r!   r(   r~   r   r  r   r   r   r  s           rD   test_dequantize_linear_int16z3TestReferenceEvaluator.test_dequantize_linear_int16  s2   "3(9D6BB"3(9D6BB*,B,B,BSEPQ  
 ):QC#GG(9A3HH 
 
  !''x000AAA8:::"*MMMggdS$K((#a&)))))rK   r  r   rv   r   r@  )r   r   r   r   )r   r   r   r   )r   r   r   r   )rv   r   r   r   )r   ri  r   ri  )r   ri  ri  ri  rr  ri  )      ?r  rv   r  )r   r   ri  r   ri  r   r   r   )rt  r|  r     rr  rw     r   )r  D   r  rv  r  r  r     r  r  r   rF  r   )r   r   r   r   r   ri  )rg  r  r  )r   r   r   r   c                 ~   t          dt          j        d g          }t          dt          j        d g          }t	          j        |t          j                  }	t	          j        |t          j                  }
t          t          t          dg ddg||          gd|g|gt          dt          j        |	j        |	          t          d	t          j        |	j        |
          g                    }t          |          }t	          j        |t          j                  }|Pt	          j        |t          j                  }|                    d d|i          }t          ||d
                    d S |                     t"                    5  |                    d d|i           d d d            d S # 1 swxY w Y   d S )Nr   r   rw   r  r  r'  
block_sizer\  r  rm  r   )r#   r   r   INT8r~   r   r   int8r   r   r   r!   rZ   r(   r   r   r   r}   r   r   r  
zero_pointr'  r  r   r   r   
scale_datazp_datar!  r  r   r	  s                  rD   test_blocked_quantize_linearz3TestReferenceEvaluator.test_blocked_quantize_linear  s   v #3(9D6BB"3(84&AAXe2:666
(:RW555(...!#-   !2J4Dj   (8*:JGTT	 
 
, !''x,,,x888H''$d,,CHc!f-----"":.. + +sDk***+ + + + + + + + + + + + + + + + + +   F22F69F6)r   rv   r   r   )r  r   rr  r  )r  -   r$  r/  )r   r   rn   r   )rg  r  rp  rr  )ro  r  6   r$  r   rb  r  rc  )r   r   r  r  )rg  rg  r  r  )rn   rv   r   )r   rn   r   r   r   r   rK  r  )rd  rK  rp  r   r  r3  r  r  )rt  "   r|  rn  rp  r  r/  E   )rF  r   rn   r   r   rg  c                 ~   t          dt          j        d g          }t          dt          j        d g          }t	          j        |t          j                  }	t	          j        |t          j                  }
t          t          t          dg ddg||          gd|g|gt          dt          j        |	j        |	          t          d	t          j        |	j        |
          g                    }t          |          }t	          j        |t          j                  }|Pt	          j        |t          j                  }|                    d d|i          }t          ||d
                    d S |                     t"                    5  |                    d d|i           d d d            d S # 1 swxY w Y   d S )Nr   r   rw   r  r  r  r\  r  rm  r   )r#   r   r  r   r~   r   r   r  r   r   r   r!   rZ   r(   r   r   r   r}   r  s                  rD   test_blocked_dequantize_linearz5TestReferenceEvaluator.test_blocked_dequantize_linear  s   J #3(84&AA"3(9D6BBXe2:666
(:RW555*...!#-   !2J4Dj   (8*:JGTT	 
 
, !''x)))x
;;;H''$d,,CHc!f-----"":.. + +sDk***+ + + + + + + + + + + + + + + + + +r  c           	      V   d }d}d}d}d}t          dt          j        g d          }t          dt          j        d           }t	          d	dgdg||||
          g}t          t          |d|g|g                    }	t          |	          }
t          j	        
                    dddd                              t          j                  }|
                    d d|i          } ||||||          }|                     t          |          t          |d                              d S )Nc                    t          j        d                              t           j                  }t          j        | j                  D ]\  }}}}	t          | |t          d|t          t          j
        |dz
  dz                      z
            t          d|t          t          j        |dz
  dz                      z   dz             ||	f         dz            |||||	f<   | |||z  |z  z   |z  z  }
|
S )N)r   r   r   r   r   rv   rn   r   )r~   r   r*  r   ndindexrZ   r+  r   rW   mathfloorr   ceil)r   r  betar  r   
square_sumr   r   hrw  r   s              rD   	_expectedz2TestReferenceEvaluator.test_lrn.<locals>._expected  s   ,//66rzBBJ j11  
1a),Aq3tz4!8q.'A'A#B#BBCCcq3ty$(a'@'@#A#AAAEG G   
* 
*
1aA:&& dedlj88TABAHrK   g-C6*?r  r#  r   r   )r   r   2   r  rZ  LRN)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   rZ  r  r!  r  r   r	  r   s                 rD   test_lrnzTestReferenceEvaluator.test_lrn  s*   	 	 	$ "3(9>>>JJ"3(=tDDecUSETSWXXX
 :eS1#s;;<< ''y~~aAq))00<<ggdS$K((9T5$d;;XCF44444rK   c                    t          j        d                              d                              t           j                  dz   t          j        d                              d                              t           j                  t          j        dt           j                  d}t          ddgdgddgdgd	
          }t          di ||}t          di ||}t          ||           d S )Nr   )rv   rv   r   rv   r   r  r  rw   rb  NOTSETr  r   r   rt   r   rm  rp   
r~   r)  r   r*  r   r   dictr5   r6   r   r   r  rB   r   r	  s        rD   test_conv_im2col_1dz*TestReferenceEvaluator.test_conv_im2col_1d  s    :&&..z::AA"*MMPQQ1%%i0077
CC$bj111
 

 cQC
 
 
 (::%:6::)<<E<V<<#&&&&&rK   c                    t          j        d                              d                              t           j                  dz   t          j        d                              d                              t           j                  t          j        dt           j                  d}t          ddgdgd	d	gdgd
          }t          di ||}t          di ||}t          ||           d S )Nrr  )rn   r   r   rv   )r   r   r   r  rw   rb  r   r   r  r  rp   r  r  s        rD   test_conv_im2col_1d_pad0z/TestReferenceEvaluator.test_conv_im2col_1d_pad0  s    9%%--j99@@LLqP9%%--j99@@LL$bj111
 

 cQC
 
 
 (::%:6::)<<E<V<<#&&&&&rK   c                    t          j        d                              d                              t           j                  dz   t          j        d                              d                              t           j                  t          j        dt           j                  d}t          dddgd	d	gg d
ddgd          }t          di ||}t          di ||}t          ||           d S )N   )rv   rv   r   r  rv   rg  rf  r  rw   rb  r   rc  r  r  rp   r  r  s        rD   test_conv_im2col_2dz*TestReferenceEvaluator.test_conv_im2col_2d  s    ?++33NCCJJ2:VV1%%l33::2:FF$bj111	
 
 !fQF
 
 
 (::%:6::)<<E<V<<#&&&&&rK   c                    t          j        d                              d                              t           j                  dz   dt          j        d                              d                              t           j                  z  t          j        dt           j                  d	}t          dddgddgg d
ddgd          }t          di ||}t          di ||}t          ||           d S )Nr$  )rn   r   r   r   rv   rn   rK  )r   r   rv   rn   r  rw   rb  r  r  r  rp   r  r  s        rD   test_conv_im2col_2d_pad0z/TestReferenceEvaluator.test_conv_im2col_2d_pad0  s   =))11-@@GG
SSVWWy''//>>EEbjQQR$bj111	
 
 !fQF
 
 
 (::%:6::)<<E<V<<#&&&&&rK   c                    t          j        d                              d                              t           j                  dz   dt          j        d                              d                              t           j                  z  t          j        dt           j                  d	}t          dddgd
d
gddgd d          }t          di ||}t          di ||}t          ||           d S )Nr  )rv   rv   r   r   rv   rn   rg  rf  r  rw   rb  r   
SAME_LOWER)r  r   r   r   rt   rm  rp   r  r  s        rD   test_conv_im2col_2d_autopadz2TestReferenceEvaluator.test_conv_im2col_2d_autopad  s    5!!))-88??
KKaObi&&..|<<CCBJOOO$bj111
 

 !fQF!
 
 
 (::%:6::)<<E<V<<#&&&&&rK   c                    t          j        d                              d                              t           j                  dz   t          j        d                              d                              t           j                  t          j        dt           j                  d}t          dg d	g d
g dg d	d          }t          di ||}t          di ||}t          ||           d S )Ni  )rv   rv   r   r   r3  rv   rh  )rv   rv   r   r   r   r  rw   rb  )rv   rv   rv   r  )rv   rv   rv   rv   rv   rv   r  r  rp   r  r  s        rD   test_conv_im2col_3dz*TestReferenceEvaluator.test_conv_im2col_3d  s   .//W&''VBJ 2&&77>>rzJJ$bj111
 
 ii"###II
 
 
 (::%:6::)<<E<V<<#&&&&&rK   c                    t          j        d                              d                              t           j                  dz   t          j        d                              d                              t           j                  t          j        dt           j                  d}t          dddgd	d	gg d
ddgd          }t          di ||}t          di ||}t          ||           d S )Nr   r  rv   r  r  r!  rw   rb  r   rc  rn   r  r  rp   r  r  s        rD   test_conv_im2col_2d_stridesz2TestReferenceEvaluator.test_conv_im2col_2d_strides      =))11,??FFrzRRUVV=))11,??FFrzRR$bj111
 

 !fQF
 
 
 (::%:6::)<<E<V<<#&&&&&rK   c                    t          j        d                              d                              t           j                  dz   t          j        d                              d                              t           j                  t          j        dt           j                  d}t          dd	dgd
d
gg dd	d	gd          }t          di ||}t          di ||}t          ||           d S )Nr   r  rv   r  r  r!  rw   rb  rn   r   rc  r  r  rp   r  r  s        rD   test_conv_im2col_2d_dilationsz4TestReferenceEvaluator.test_conv_im2col_2d_dilations.  r  rK   ))r  )r  )r  )r  )r  )r  r/  c                 <   t          dt          j        d           }t          dt          j        d           }t          j        d                              d                              t          j                  }t          |dgdgd          g}t          t          |d|g|g                    }t          |          }|                    d d|i          }|d         }	|                     |	t          j                   |                     |	j        d           d S )	Nr   r   r   )rv   r   rn   r   r2  r\  rp   )r#   r   r   r~   r)  r   r*  r   r   r   r   r(   r   rj  ndarrayr   rZ   )
r   opr   r   r   r  r!  r  r	  rs
             rD   test_reduce_op_no_axisz-TestReferenceEvaluator.test_reduce_op_no_axis@  s     #3(94@@"3(94@@y||##I..55bjAA2usea8889:eS1#s;;<< ''ggdS$K((Fa,,,"%%%%%rK   )r  r!  r   r   )r   )r   c           	      ^   t          dt          j        d           }t          dt          j        d           }t          dt          j        d           }t          dt          j        d           }t	          j        dgt          j                  }t          dg ddgd	
          }t          t          |gd|||g|g                    }t          |          }	t	          j        dgt          j                                      d|z            }
t	          j        ddg|z  t          j                  }|	                    d |
||d          d         }|                     |j        d|z             |                     |j        t          j                   t	          j        ddg|                              t          j                  }|	                    d |
||d          d         }|                     |j        d|z             |                     |j        t          j                   d S )Nr   PVr   r   rw   Pad)r   r  r  r  )r   r  r  r\  rv   r  r   r  r   r   )r   )r#   r   r   r6  r~   r   r   r   r   r   r(   r   r7  r   r   rZ   rx   rH  r*  )r   dimr   r  r  r   r  rF  r!  r  r   pr	  s                rD   test_padzTestReferenceEvaluator.test_padW  s   "3(94@@"3(94@@"3(94@@"3(94@@"RZ000JWWW:tfcAq!9qcBBCC ''HaS
+++33D3J??HaVc\222ggd!!%8899!<D3J///BJ///Iq!fc""))"(33ggd!!%8899!<ECK000BJ/////rK   c                    t          dt          j        d           }t          dt          j        d           }t          ddgdg          t          ddgdgt	          dt          j        dgdg          	          g}t          t          |d
|g|g                    }t          |          }t          j
        dt          j                  }|                    d d|i          d         }|                     |j        t                                 |                     |j        t          j                   t%          t          j
        dt          j                  |           d S )Nr   r   r  rZ   r  ConstantOfShaper  rv   r  r\  rw   r   )r#   r   r   r   r!   r  r   r   r(   r~   r   r   r   r   rZ   ry   rx   r  r   r   r   r   r  r!  r  r   r	  s           rD   test_constant_of_shapez-TestReferenceEvaluator.test_constant_of_shapen  s=   "3(94@@"3(94@@ gsegY???!y!';+=sQCHH	  
 :eS1#s;;<< ''HQbj)))ggdS!H%%a(EGG,,,BI...")444c:::::rK   c                 P   t          dt          j        d           }t          dt          j        d           }t          dg dgt	          dt          j        dgdg                    t          d	dgd
g          t          dd
gdgt	          dt          j        dgdg                    t          dddgdg          g}t          t          |d|g|g                    }t          |          }t          j        dt          j                  }|                    d d|i          d         }|                     |j        t!                                 |                     |j        t          j                   t'          t          j        dt          j                  |           d S )Nr   r   ri  liker   rv   rn   rp  r  rZ   r  r  r  r  r  r}  r\  rw   r   )r#   r   r   r   r!   r  r6  r   r   r(   r~   r   r   r   r   rZ   ry   rx   r  r   r  s           rD   test_constant_of_shape_castlikez6TestReferenceEvaluator.test_constant_of_shape_castlike  s   "3(94@@"3(94@@ !#{'9A3DD	   gsegY???!y!';+<qcA3GG	   j5&/C599
  :eS1#s;;<< ''HQbj)))ggdS!H%%a(EGG,,,BI...")444c:::::rK   c           
         dt          j        g dg dg dg dg dgt           j                  i}t          j        g dg d	g d
g dg dgt           j                  t          j        dt           j                  t          j        dt           j                  g}t	          dt
          j        d           }t	          dt
          j        d           }t	          dt
          j        d           }t	          dt
          j        d           }t          ddgg d          g}t          t          |d|g|||g          t          dt                      dz
            g          }t          |          }	|	                    d |          }
|                     t!          |
          d           t#          ddd          D ]}t%          ||         |
|                    d 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`Rrw   )dr  r  r  r     r     r  r     r  i   r           r           w         z            r  y   r  r        r         r  r  ]      a   r!  r'  r  r  r+     rz     J   U         s   r  r        r2  r  k         q   r     r}        r0  ^      r  r  r  r$     r#  X      r  r     r*        r      r'  rK     rA  r     r&  r  r+  F   r  r  )db   rq  r  x   r  r:  r@  r#        r0  r     r     r     r  r  r  g   r  r"  r     r0  rK  r  rz  }   r6     r;  r  rK  r!     rL  j   r'  p   r  rN  r1  r   r  r  r     r  r  r  r  r8  r5        r  r!  rM  r  rI  rL  r  r      n   r  r  rU  rU  r  r'  r  rz  r  r  r  ry  r  r  rK  r>  r     r\  u   r,  r(  rs  r  r  rN  r  rK     r  r0  r0  r  )dr>  r  r  r   rA  r  r  r  rK  rZ  r!  Y   r  r  r1  r  rK  r>  r8  rS  r  r     r  r     r     r$  r  r        rU  rF  r`  r^  r7  rz  r^  W   r(        rY     r&  r0     r  r)  r  r`  rU  ~   rL  r  rD  r  r*  ry  r0  rA  r  r  ra  r]  r<  r  r~  r>  r(     rN  r  rh  r  r"  r   r  rB  r  r#  rN  r  rZ  r[  r6  r*  r  rF  rR  r  r&  rd  rk  r   r(  r  rd  )drz  V   r  r0  rh  r  r^  r=  r  r"  r'  r/  r  r  rf  rh  r  r^  r0  rD  rI  rk  r9  r#  r:  r#  r`     r     rn  rF  rd  >   r  rL  r:  r`  r8  r  r2  r  r  rE  r  r~  rR  r  r,  r?  r  rJ  r'  r(  r  rR     r1  r   r3  m   r  rn  rQ  r8     rI  r  rn  v   rT  r  rP  r  rA  r`  rN  r  r  r  rd  r  r  r  r1  rJ  r$  r  r  rx  rZ  r  r*  r*  rd  r%  r]  r  rW  r  )dr=  r_  r!  r:  r  r*  r  r2  r  r9  rP  r  rz  r  r1  `   r^  r  r  r  C   rk  rF  r{     r  r^  rD  r[  r!  rZ  r1     r|  r  r!  r     r>  r  r  re  ra     r  r+  rS  r[  r.  9   r?  rW  r3  r  r  r  rr  r1  r6  r-  r  rj  r  rs  rO  r%  r  r<  r  rY  G   r0  r`  r!  r  r$  r:  rz  r  r>     rJ  rv  r  r.  rb  rI  r  r  r'  r;  r*  r  r&  rz  r'  rY  rj  rL  r  g    v?r=  r   r  zpDynamicQuantizeLinear)r   r  r}  r\  r^   rv   r   r   rn   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   ScaleZpr  r!  r  r	  rr   s               rD   test_dynamic_quantize_linearz3TestReferenceEvaluator.test_dynamic_quantize_linear  s   e e eLe e eLe e eLe e eLe e es@ jCB B BD
N He e eLe e eLe e eLe e eLe e es@ hCB B BF H)<<<HS)))KF
P #3(94@@"3(94@@&w0A4HH#D+*;TBB '$$$ 
 ucA3E277',>,@,@1,DEEF
 
 
 !''ggdE""S1%%%q"b!! 	1 	1AHQKQ0000	1 	1rK   abcdefz.comz.netzabc.comzdef.netr!  )catdogsnakes)catsdogssnakesr  )r  r  r  rp   )r      ßr   )aau   ßßyyc                 j   t          dt          j        d           }t          dt          j        d           }t          dt          j        d           }t          dddgdg          }t	          t          |gd||g|g                    }	t          |	          }
|
                    d t          j	        |          t          j	        |          d          ^}}t          j
                            ||           |                     |j        j        d           |                     |j        |           d S )	Nr   r   r   StringConcatr  r\  )r   r   O)r#   r   rQ  r   r   r   r(   r   r~   r   testingassert_array_equalr   rx   kindrZ   )r   r   r   r   expected_shaper   r   r   rF  r!  r  r  r   s                rD   test_string_concatz)TestReferenceEvaluator.test_string_concat  s
    #3(:DAA"3(:DAA"3(:DAAc
SEJJJ:tfcAq6A3??@@ ''WWT!28A;;#G#GHH


%%fh777*C000~66666rK   z1,2,34,5,6,)123)456)1,4,6r^   r  r^   r  r  )rn   rn   rv   )r  r  r  z5,6)rv   rn   rn   )r  r  r  )r  r^   r^   )r  r  r^   )rn   rn   r   )zhello world !z  hello   world !z hello world   ! )helloworld!r  z	o-n-n--x-z	o-n----nx-)or   r   r^   r   r^   )r  r   r^   r^   r^   nx r  c           	         t          dt          j        d           }t          dt          j        d           }t          dt          j        d           }t	          ddgddg||          }	t          t          |	gd|g||g                    }
t          |
          }t          j	        |t                    }|                    d d|i          ^}}}t          j                            |t          j	        |t                               t          j                            |t          j	        |t          j                             d S )Nr   Splits	MaxSplitsStringSplit)r   r  	delimitermaxsplitr\  rw   )r#   r   rQ  INT32r   r   r   r(   r~   r   objectr   r  r  r7  )r   r   r  r  expected_splitexpected_num_splitsr   r  r  rF  r!  r  r  
num_splitsr   s                  rD   test_string_splitz(TestReferenceEvaluator.test_string_split  s2   ^ #3(:TCC'+2DtMM*;8IDRR	5{+
 
 
 :tfcA38KLLMM ''HQf%%%!$Qx!8!8
Q

%%fbh~V.T.T.TUUU

%%!4BHEEE	
 	
 	
 	
 	
rK   c                    t          dg ddg          }t          |gdt          dt          j        d d g          t          dt          j        dg          t          d	t          j        dg          t          d
t          j        d d g          t          dt          j        dg          t          dt          j        dg          t          dt          j        dg          t          dt          j        dg          gt          dt          j        d d g          g          }t          |t          dd          gd          }t          |          }t          j
        g dg dg          }|dz  }|                    t          j                  }t          j
        dgt          j                  }t          j
        dgt          j                  }t          j
        g dg dg dg dg          }|dz  }|                    t          j                  }t          j
        dgt          j                  }	t          j
        dgt          j                  }
t          j
        dgt          j                  }t          j
        d gt          j                  }|                    d t          |||||	|
||                    }t          j                            t          j
        g d!g d"gt          j                  |d#                    d S )$NQLinearMatMul)r   a_scalea_zero_pointr   b_scaleb_zero_pointrz  r}  r   r  r\  r   r  rv   r  r   r  r  rz  r}  r^   rp  rg  )r   rd   )r|  r4  r      )r   rX  r  ru  r  gF%u{?rw   )rv  rs     )r$  rw  r  )r   r     )r  r  r  g!u|?ig'?)r  ir  )rv   irp  r   )r   r   r#   r   r   r  r   r   r(   r~   r   r*  r  r   r   r  r  r  )r   rF  r   rg   r   r   r  r  r   r  r  rz  r}  r	  s                 rD   test_qlinearconv_int8z,TestReferenceEvaluator.test_qlinearconv_int8:  s   	 	 	 E
 
 
 F&sK,=d|LL&y+2CaSII&~{7G!MM&sK,=d|LL&y+2CaSII&~{7G!MM&y+2CaSII&~{7G!MM	 $C):T4LIIJ
 
  ,r2"6"6!7A
 
 

 "*--H(((*;*;*;<==	SHHRW(F82:666x27;;;Hnnnmmm]]]OOOTUU	SHHRW(G9BJ777x27;;;(F82:666x27;;;hh)))	 	 	
 
 	
%%Hmmm\\\2"'BBBCF	
 	
 	
 	
 	
rK   )zwww.google.comzwww.facebook.comzwww.bbc.co.ukzwww\.[\w.-]+\.\bcom\b)TTF)Onnx
tensorflowNumpy)PytorchCythonnumbaz^[A-Z][a-z]*$)TFTr  )zaccount@gmail.comzaccount@hotmail.comz	not emailzaccount2@yahoo.comz,(\W|^)[\w.\-]{0,25}@(yahoo|gmail)\.com(\W|$))TFFTr  win32z)google-re2 package is not built for win32c                    t          dt          j        d           }t          dt          j        d           }t	          ddgdg|          }t          t          |gd|g|g                    }t          |          }	|	                    d dt          j
        |          i          ^}
}t          j                            |
|           |                     |
j        j        d           |                     |
j        |           d S )Nr   r   RegexFullMatchr   r  patternr\  r   )r#   r   rQ  r  r   r   r   r(   r   r~   r   r  r  r   rx   r  rZ   )r   r   r  r   r  r   r   rF  r!  r  r  r   s               rD   test_regex_full_matchz,TestReferenceEvaluator.test_regex_full_match  s    > #3(:DAA"3(8$??)3%#PWXXX:tfcA3<<== ''WWTC!#566


%%fh777*C000~66666rK   c                    t          dt          j        d           }t          dt          j        d           }t	          ddgdgd          }t          t          |gd|g|g                    }t          |          }|                     t                    5  |
                    d dt          j        dg          i           d d d            d S # 1 swxY w Y   d S )Nr   r   r  zx)r  r\  r   )r#   r   rQ  r  r   r   r   r(   r   r}   r   r~   r   )r   r   r   rF  r!  r  s         rD   test_regex_invalid_patternz1TestReferenceEvaluator.test_regex_invalid_pattern  s    #3(:DAA"3(8$??)3%#PTUUU:tfcA3<<== ''z** 	2 	2GGD3#0111	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2s   ,CCC)r   r         ?rn   ffffff
@r   rp  r  )r   r   rn   rn   r   r   rp  rx  )r   r   r  rn   r  r   r  )r   r   rn   rn   r   r   rx  )      -r   r  rn   r  r   rp  )r  r   rn   rn   r   r   r  )r  r  r   r  rn   r  r   )r  r  r   rn   rn   r   r   z1.22.0z'The test requires numpy 1.22.0 or laterc                 N   t          dt          j        d g          }t          dt          j        d g          }t          t	          t          dg dgt          dt          j        dgdg                    t          dg dgt          d|dgd	g                    t          d
g ddg          t          dddgdgd	          gd|g|g                    }t          |          }|                    d dt          j
        |          i          }t          ||d	                    d S )Nr   r   ri  r  rv   r#  rp  rm  r   r  r  r  r  r  r\  )r#   r   r   r   r   r   r!   r(   r   r~   asarrayr   )	r   qtyper   r   r   r   r!  r  r	  s	            rD   test_quantize_linear_int4z0TestReferenceEvaluator.test_quantize_linear_int4  sJ   6 #3(9D6BB"3(9D6BB" 	)';3DqcC5QQ	   ")&%!qcBB	   .0F0F0FNN03.3%aPPP  ' 
 
. !''ggdS"*T"2"2344#a&)))))rK   c           
      ,  
 t          d|d g          }t          d|d g          }t          t          t          ddgdg|          gd|g|g                    }t	          |          }t          j        g dt
          j                  }|t          j	        k    
t          j        
fd|D                       }|
                    d d|i          }	|                     |                                |	d	                                                    d S )
Nr   r   rN  rU  r\  )r   rv   g333333@g@r   r   rw   c                 <    g | ]}t          j        |           S ))signedr   float32_to_4bit_unpacked)rq   r   r  s     rD   ru   z@TestReferenceEvaluator.test_cast_int4_output.<locals>.<listcomp>  s)    NNNAW-a???NNNrK   r   )r#   r   r   r   r(   r~   r   r   r   INT4r   r   r  )r   	cast_fromcast_tor   r   r!  r  r   rx  r	  r  s             @rD   test_cast_int4_outputz,TestReferenceEvaluator.test_cast_int4_output  s!    #3	D6::"3$88fsecUw???  	
 	
 !''x///rzBBBK,,HNNNNNNN
 
	 ggdS$K(())++SV]]__=====rK   c           
        
 t          d|d g          }t          d|d g          }t          t          t          ddgdgt          j                  gd|g|g                    }t          |          }t          j        t          dd          t          j
                  }|t          j        k    rt          j        nt          j        
|                    
          }t          j        
fd	|D                       }|                    d d|i          }	|                     |                                |	d                                                    d S )
Nr   r   rN  rU  r\  r   r   rw   c                 :    g | ]}t          j        |          S rp   r  )rq   r   cast_from_nps     rD   ru   z?TestReferenceEvaluator.test_cast_int4_input.<locals>.<listcomp>!  s&    MMM1W-a>>MMMrK   )r#   r   r   r   r   r   r(   r~   r   r   r   UINT4r;  uint4int4r*  r   r   r  )r   r  r  r   r   r!  r  r   rx  r	  r  s             @rD   test_cast_int4_inputz+TestReferenceEvaluator.test_cast_int4_input	  sC    #3	D6::"3$88fsecU{7HIII  	
 	
 !''xa2:666'0K4E'E'Ev||6;{{<((HMMMMMMM
 
	 ggdS$K(())++SV]]__=====rK   c                    t          dt          j        dg          }t          dt          j        dg          }t          dt          j        dg          }t          dddgdgt	          dg dgd	gd
          t	          dddgdgd          gt          dd          g          }t          dddgdgt	          dg dgd	gd          t	          dddgdg          t	          ddgdgt          t	          ddgdgd          gdg |g          t          t	          dddgdgd          gdg |g          d          gt          dd          t          dd          g          }t          t          t	          ddgdgd          gd|g|g          dt          dd          t          dd          g||g           }dt          j	        d!gt          j
        "          i}t          |          }|                    d |          }	|                     |	d#         t          j	        d$gt          j
        "                     d S )%Nr   rM  r  thisfctaddinput2ri  r  r   CC0rj  rX   r   A1r   r^   r   r   r  r  CCr[  r  ro  rb   rk  rl  :IFrp  rq  rX   rv   r  r   rd   r   r?  r   rw   r   r   r#   r   r   r   r   r   r   r   r~   r   r   r(   r   r   
r   r   r  rZ  func_def_addfunc_defry  r  r4  r   s
             rD   'test_a_function_calling_a_function_oncez>TestReferenceEvaluator.test_a_function_calling_a_function_once&  s   "3(9C5AA'+2CcUKK"8[->FF$JJ*b5'ERRR%(E!2XJTJJJ .b"556

 

 

 !IJ*b5'DQQQ)gu%5x@@HJ *"8gY
6RRRS	! ! !+"57E*:XJrRRRS	! ! !  . #2r**"61--7
 
 
B ecUXJvFFF   "2r**"61-- $X.
 
 
	" bht2:6667!),,88D%(( 	!bht2:&F&F&FGGGGGrK   c                    t          dt          j        dg          }t          dt          j        dg          }t          dt          j        dg          }t          dddgdgt	          dg dgd	gd
          t	          dddgdgd          gt          dd          g          }t          dddgdgt	          dg dgd	gd          t	          dddgdg          t	          ddgdgt          t	          ddgdgd          gdg |g          t          t	          dddgdgd          gdg |g          d          gt          dd          t          dd          g          }t          t          t	          ddgdgd          t	          ddgdgd          gd|g|g          d t          dd          t          dd          g||g!          }dt          j	        d"gt          j
        #          i}t          |          }|                    d |          }	|                     |	d$         t          j	        d%gt          j
        #                     d S )&Nr   rM  r  r  r  r  ri  r  r   r  r  r   r  r   r^   r   r   r  r  r  r[  r  ro  r  rk  rl  r  r  rv   ztmpr  r   r  r   rw   r   r  r  s
             rD   )test_a_function_calling_a_function_doublez@TestReferenceEvaluator.test_a_function_calling_a_function_doublet  s   "3(9C5AA'+2CcUKK"8[->FF$JJ*b5'ERRR%(E!2XJTJJJ .b"556

 

 

 !IJ*b5'DQQQ)gu%5x@@HJ *"8gY
6RRRS	! ! !+"57E*:XJrRRRS	! ! !  . #2r**"61--7
 
 
B ecUVHVDDDefXz&III   "2r**"61-- $X.
 
 
	$ bht2:6667!),,88D%(( 	!bht2:&F&F&FGGGGGrK   c                 D   t          dt          j        dg          }t          dt          j        dg          }t          dt          j        dg          }t          dddgdgt	          dg dgd	gd
          t	          dddgdgd          gt          dd          g          }t          dddgdgt	          dg dgd	gd          t	          dddgdg          t	          ddgdgt          t	          ddgdgd          gdg |g          t          t	          dddgdgd          gdg |g          d          gt          dd          t          dd          g          }t          t          t	          ddgdgd          t	          ddgdgd          gd|g|g          d t          dd          t          dd          g||g!          } G d" d#t                    } ||          }|j	        
                                D ]}	|                     |	|           d S )$Nr   rM  r  r  r  r  ri  r  r   r  r  r   r  r   r^   r   r   r  r  r  r[  r  ro  r  rk  rl  r  r  rv   r  r  r   r  c                       e Zd ZdS )[TestReferenceEvaluator.test_overload_reference_implementation.<locals>.MyReferenceEvaluatorNr  rp   rK   rD   MyReferenceEvaluatorr    r  rK   r  )r#   r   r   r   r   r   r   r   r(   
functions_r  rj  )
r   r   r  rZ  r  r  ry  r  r4  r&  s
             rD   &test_overload_reference_implementationz=TestReferenceEvaluator.test_overload_reference_implementation  s   "3(9C5AA'+2CcUKK"8[->FF$JJ*b5'ERRR%(E!2XJTJJJ .b"556

 

 

 !IJ*b5'DQQQ)gu%5x@@HJ *"8gY
6RRRS	! ! !+"57E*:XJrRRRS	! ! !  . #2r**"61--7
 
 
B ecUVHVDDDefXz&III   "2r**"61-- $X.
 
 
	$	 	 	 	 	#5 	 	 	 $#I..'')) 	; 	;A!!!%9::::	; 	;rK   )FNr   r   r  r)  )r  r  r  r   staticmethodrr  r   r   r   r   r   r   r  r
  r  r  r  r-  r0  r9  rI  rL  rN  rP  rV  rX  ra  rc  rf  rz  r  r  r  r  r  r  r  r  r  r5  r@  rE  rH  rK  rN  rS  rY  r\  r^  rI   ru  r  r  r  r  r  r  r  r  rO   r  r  r  r  r  r  r#  r+  r8  rB  rE  rd  rj  r  r?   skipIfversion_utilsnumpy_older_thanr  r  r  r  r  r  rS   r  r  r  r  r  r  r  r  r  r  parameterizedexpand	itertoolsproductr~   r   rR  r   r7  rW   r(  r1  rL  rW  rY  r`  rc  rf  rz  r  r  r  r  r  r  r  r  r  r  r  r)  r   r   r  r  dstackr  r  r  r  r  r  r  r  r  r  r  r
  r  r  r  r  r  r  sysplatformr  r  r   r  r  r  r   FLOAT16r  r  r  r  r   rp   rK   rD   r   r      s       F 3 :    \ 3 3 3 \3j" " "
' ' '' ' 'R' R' R'h' ' '#+ #+ #+J-+ -+ -+^2* 2* 2*h' ' '' ' '' ' '1* 1* 1*f' ' '' ' '' ' '
  
  
 $ $ $' ' '' ' '' ' '*> *> *>X1- 1- 1-f5* 5* 5*nl* l* l*\{* {* {*z1' 1' 1'f$ $ $$$ $ $"$ $ $*$ $ $.G* G* G*R- - -& & && & &	0 	0 	0
0 
0 
0% % %& & &% % %* * * (0 (0 (0T ' ' 'BC C CJ
 
 


 
 


 
 


 
 


 
 


 
 

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

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

     $D/ D/ D/L&+ &+ &+P+ + +B0+ 0+ 0+d+ + +4+ + +0K+ K+ K+ZC+ C+ C+J4+ 4+ 4+l X_&&x005 /+ /+	 /+b X_&&x005 3+ 3+	 3+jS S S&
8 
8 
8 . . .5 5 5 4 4  42 2 202 2 26%2 %2 %2N
> 
> 
>
> 
> 
>> > >.> > >' ' '0 x x x \xt  ''	    fbf-	8/DERZ   !1b'B7!328DDD	  '3h	5JK"$*   !2q'B7!328DDD	  %y1Iy3IJ"$*   !2r(RG!4BHEEE	 # '3i5IJ"$*   !1b'B7!328DDD	 & '3i5KL"$*   !2q'B7!328DDD	   '3h	5JK"$*   !2r(RH!5RXFFF	 ! (*5)7LM"$*   !2q'B7!328DDD	 & '3h	5JK"$*   !2r(RG!4BHEEE	 !  fbf-	8/DERZ   !1b'B7!328DDD	aYt Hw\	
 \	
^ ^~! ! ! !^ ^~!F  ''	
 	
 	
 ' 'c 'c ' ' ' '(;# ;# ;#z
 
 
(K K K&" " "*" " "*" " "1+ 1+ 1+f#* #* #*J> > >.~8 ~8 ~8@> > >&* * *@* * *0* * *@:* :* :*xB* B* B*H* * *2* * *2  '' IBIbMM))!Q///	!Q''1--  |||\\\: IBIbMM))!Q///	!Q''1--|||\\\: 	"%%a++@  ---444444 	!sR###      %%  [5	
7 7p(+ (+q7 7p(+T  '' 	"%%a++	!Q''1--  ///1A1A1AB 	"%%a++	!Q''1--1A1A1AB 	929Q<<//1556:;;	828aVaV$455xrx!Q!Q@P7Q7QRSS##,,-/OP 	"%%a++IIIyyy1  ...444444 	  AA###	      %%  o?	
A AD'+ '+EA AD'+R!5 !5 !5F' ' '$' ' '$' ' '&' ' '&' ' '$' ' '*' ' '$' ' '$  ''	
 	
 	

 

& 
&
 

&  ''(L(L(LMM0 0 NM0,; ; ;*; ; ;8c1 c1 c1J!  ''U^ff-	9/EtL$$$se-G-G-GN$///1E1E1EtL		
 
7 
7 
7  '' '" ///2A "!!rS#JR1		 &%%rS#Je5		 ('')?)?)?@"]]NNNOOOD"]]NNNOOOD III&	 LKK+++++++++
 		
 LKK+++++++++
 		
 k*---/K/K/KLA $$V,,{D	
F FN
 
OF FN
6D
 D
 D
L  '' HGG(###	 1002P2P2PQ $$$&9&9&9:	   @***
	
 6 X_!L 	7 	7 7 <	7 X_!L 2 2 2  '' !000+++
  < < <>U>U>UVaS) 444...  000***
 sQC(%	
 , X_&&x001 * *	 - 4*<  ''	 34 01	
 	
 > > >,  ''	 01 34	
 	
 > > >.LH LH LH\MH MH MH^I; I; I; I; I;rK   r   __main__rn   )	verbosity)h__doc__r  r  r
  r?   
contextlibr   	functoolsr   ior   osr   textwrapr   typingr	   r
   r  r~   r  r  numpy.testingr   #onnx.reference.custom_element_types	referencecustom_element_typesr;  onnxr   r   r   r   r   r   r   $onnx.backend.test.case.node.roialignr   onnx.checkerr   	onnx.defsr   onnx.helperr   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   onnx.numpy_helperr%   r&   r'   onnx.referencer(   onnx.reference.op_runr)   r*   onnx.reference.opsr+   %onnx.reference.ops._op_common_indicesr,   r-   onnx.reference.ops._op_listr.   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_optimizedrk  .onnx.reference.ops_optimized.op_conv_optimizedr6   rW   r7   r9   rI   rO   rS   r\   rk   r   r  r   TestCaser   r  mainrp   rK   rD   <module>r-     s         



  & & & & & &                         " " " " " " " "             ) ) ) ) ) ) 4 4 4 4 4 4 4 4 4                  L K K K K K $ $ $ $ $ $ ( ( ( ( ( (                                 " W V V V V V V V V V - - - - - - 4 4 4 4 4 4 4 4 & & & & & & G G G G G G G G 5 5 5 5 5 5 5 5 D D D D D D . . . . . .        B A A A A A A A > > > > > > V V V V V V  #s66*H##N#NOO '*s
F1488( ( $
      0 0 0  (- - -`"	"S/" }" 3-	"
 c]" Z" " " "*oX; oX; oX; oX; oX;X. oX; oX; oX;dq zHMA rK   