@@ -127,7 +127,10 @@ def test_transpose_with_split(self, input_shape, perm, inner_perm):
127
127
output_shape = [output_before_trans [i ] for i in perm ]
128
128
for axis in range (len (input_shape )):
129
129
node1 = helper .make_node ("Transpose" , ["X" ], ["Y" ], perm = inner_perm , name = "trans1" )
130
- node2 = helper .make_node ("Split" , ["Y" ], ["Z" ], axis = axis , name = "split" )
130
+ if self .config .opset < 18 :
131
+ node2 = helper .make_node ("Split" , ["Y" ], ["Z" ], axis = axis , name = "split" )
132
+ else :
133
+ node2 = helper .make_node ("Split" , ["Y" ], ["Z" ], axis = axis , name = "split" , num_outputs = 1 )
131
134
node3 = helper .make_node ("Transpose" , ["Z" ], ["res" ], perm = perm , name = "trans2" )
132
135
133
136
graph = helper .make_graph (
@@ -148,7 +151,10 @@ def test_transpose_with_split(self, input_shape, perm, inner_perm):
148
151
@check_opset_max_version (12 , "split attribute changed to input since opset 13" )
149
152
def test_transpose_with_split_dynamic_shape (self , input_shape , specific_input , output_shape , perm ):
150
153
node1 = helper .make_node ("Transpose" , ["X" ], ["Y" ], perm = perm , name = "trans" )
151
- node2 = helper .make_node ("Split" , ["Y" ], ["Z" ], axis = 1 , split = [1 ], name = "split" )
154
+ if self .config .opset < 18 :
155
+ node2 = helper .make_node ("Split" , ["Y" ], ["Z" ], axis = 1 , split = [1 ], name = "split" )
156
+ else :
157
+ node2 = helper .make_node ("Split" , ["Y" ], ["Z" ], axis = 1 , split = [1 ], name = "split" , num_outputs = 1 )
152
158
node3 = helper .make_node ("Squeeze" , ["Z" ], ["B" ], name = "squeeze" )
153
159
154
160
graph = helper .make_graph (
@@ -1305,6 +1311,7 @@ def test_transpose_reciprocal(self, shape, perm_input, perm_output):
1305
1311
((1 , 3 , 4 , 5 ), (1 , 3 , 1 , 1 ), [0 , 2 , 3 , 1 ], [0 , 3 , 1 , 2 ]),
1306
1312
((1 , 3 , 4 , 5 , 6 ), (1 , 3 , 1 , 1 , 1 ), [0 , 2 , 3 , 4 , 1 ], [0 , 4 , 1 , 2 , 3 ]),
1307
1313
])
1314
+ @check_opset_max_version (17 , "ReduceMean from opset <= 17 has axes as an attribute" )
1308
1315
def test_transpose_reducemean (self , input_shape , output_shape , perm_input , perm_output ):
1309
1316
node0 = helper .make_node ("Transpose" , ["X" ], ["Y" ], perm = perm_input , name = "trans_1" )
1310
1317
node1 = helper .make_node ("ReduceMean" , ["Y" ], ["Z" ], axes = list (range (1 , len (input_shape ) - 1 )),
@@ -1322,6 +1329,29 @@ def test_transpose_reducemean(self, input_shape, output_shape, perm_input, perm_
1322
1329
self .run_transpose_compare (["res" ], {"X" : np .random .randn (* input_shape ).astype (np .float32 )},
1323
1330
model_proto , remaining_transpose_num = 0 )
1324
1331
1332
+ @parameterized .expand ([
1333
+ ((3 , 4 , 5 ), (3 , 4 , 1 ), [1 ], [0 , 2 , 1 ], [0 , 2 , 1 ]),
1334
+ ((1 , 3 , 4 , 5 ), (1 , 3 , 1 , 1 ), [1 , 2 ], [0 , 2 , 3 , 1 ], [0 , 3 , 1 , 2 ]),
1335
+ ((1 , 3 , 4 , 5 , 6 ), (1 , 3 , 1 , 1 , 1 ), [1 , 2 , 3 ], [0 , 2 , 3 , 4 , 1 ], [0 , 4 , 1 , 2 , 3 ]),
1336
+ ])
1337
+ @check_opset_min_version (18 , "ReduceMean from opset > 17 has axes as an input" )
1338
+ def test_transpose_reducemean_18 (self , input_shape , output_shape , axes , perm_input , perm_output ):
1339
+ node0 = helper .make_node ("Transpose" , ["X" ], ["Y" ], perm = perm_input , name = "trans_1" )
1340
+ node1 = helper .make_node ("ReduceMean" , ["Y" , "axes" ], ["Z" ], keepdims = 1 , name = "reducemean" )
1341
+ node2 = helper .make_node ("Transpose" , ["Z" ], ["res" ], perm = perm_output , name = "trans_2" )
1342
+ graph = helper .make_graph (
1343
+ [node0 , node1 , node2 ],
1344
+ "transpose-reducemean-test-18" ,
1345
+ [helper .make_tensor_value_info ("X" , TensorProto .FLOAT , input_shape )],
1346
+ [helper .make_tensor_value_info ("res" , TensorProto .FLOAT , output_shape )],
1347
+ [helper .make_tensor ("axes" , data_type = TensorProto .INT64 ,
1348
+ dims = [len (axes )], vals = axes )],
1349
+ )
1350
+
1351
+ model_proto = self .make_model (graph , producer_name = "onnx-tests" )
1352
+ self .run_transpose_compare (["res" ], {"X" : np .random .randn (* input_shape ).astype (np .float32 )},
1353
+ model_proto , remaining_transpose_num = 0 )
1354
+
1325
1355
@parameterized .expand ([
1326
1356
((3 , 4 , 5 ), (3 , 4 , 1 ), [1 ], [0 , 2 , 1 ], [0 , 2 , 1 ]),
1327
1357
((1 , 3 , 4 , 5 ), (1 , 3 , 4 , 1 ), [2 ], [0 , 2 , 3 , 1 ], [0 , 3 , 1 , 2 ]),
@@ -1357,6 +1387,7 @@ def test_transpose_reducesum(self, input_shape, output_shape, axes, perm_input,
1357
1387
((1 , 3 , 4 , 5 , 6 ), (1 , 3 ), [1 , 2 , 3 ], [0 , 2 , 3 , 4 , 1 ], [0 , 1 ]),
1358
1388
((1 , 3 , 4 , 5 , 6 ), (), [0 , 1 , 2 , 3 , 4 ], [0 , 2 , 3 , 4 , 1 ], []),
1359
1389
])
1390
+ @check_opset_max_version (17 , "ReduceMax from opset <= 17 has axes as an attribute" )
1360
1391
def test_transpose_reducemax (self , input_shape , output_shape , axes , perm_input , perm_output ):
1361
1392
node0 = helper .make_node ("Transpose" , ["X" ], ["Y" ], perm = perm_input , name = "trans_1" )
1362
1393
node1 = helper .make_node ("ReduceMax" , ["Y" ], ["Z" ], axes = axes ,
@@ -1377,6 +1408,30 @@ def test_transpose_reducemax(self, input_shape, output_shape, axes, perm_input,
1377
1408
self .run_transpose_compare (["res" ], {"X" : np .random .randn (* input_shape ).astype (np .float32 )},
1378
1409
model_proto , remaining_transpose_num = 0 )
1379
1410
1411
+ @parameterized .expand ([
1412
+ ((3 , 4 , 5 ), (3 , 4 , 1 ), [1 ], [0 , 2 , 1 ], [0 , 2 , 1 ]),
1413
+ ((1 , 3 , 4 , 5 ), (1 , 3 , 1 , 1 ), [1 , 2 ], [0 , 2 , 3 , 1 ], [0 , 3 , 1 , 2 ]),
1414
+ ((1 , 3 , 4 , 5 , 6 ), (1 , 3 , 1 , 1 , 1 ), [1 , 2 , 3 ], [0 , 2 , 3 , 4 , 1 ], [0 , 4 , 1 , 2 , 3 ]),
1415
+ ])
1416
+ @check_opset_min_version (18 , "ReduceMax from opset > 17 has axes as an input" )
1417
+ def test_transpose_reducemax_18 (self , input_shape , output_shape , axes , perm_input , perm_output ):
1418
+ node0 = helper .make_node ("Transpose" , ["X" ], ["Y" ], perm = perm_input , name = "trans_1" )
1419
+ node1 = helper .make_node ("ReduceMax" , ["Y" , "axes" ], ["Z" ], keepdims = 1 , name = "reducemax" )
1420
+ node2 = helper .make_node ("Transpose" , ["Z" ], ["res" ], perm = perm_output , name = "trans_2" )
1421
+
1422
+ graph = helper .make_graph (
1423
+ [node0 , node1 , node2 ],
1424
+ "transpose-reducemax-test-18" ,
1425
+ [helper .make_tensor_value_info ("X" , TensorProto .FLOAT , input_shape )],
1426
+ [helper .make_tensor_value_info ("res" , TensorProto .FLOAT , output_shape )],
1427
+ [helper .make_tensor ("axes" , data_type = TensorProto .INT64 ,
1428
+ dims = [len (axes )], vals = axes )],
1429
+ )
1430
+
1431
+ model_proto = self .make_model (graph , producer_name = "onnx-tests" )
1432
+ self .run_transpose_compare (["res" ], {"X" : np .random .randn (* input_shape ).astype (np .float32 )},
1433
+ model_proto , remaining_transpose_num = 0 )
1434
+
1380
1435
def test_transpose_argmax (self ):
1381
1436
input_shape = [1 , 2 , 3 , 4 ]
1382
1437
node0 = helper .make_node ("Transpose" , ["X" ], ["Y" ], perm = [0 , 2 , 3 , 1 ], name = "trans_1" )
@@ -1858,6 +1913,7 @@ def test_duplicated_duplicated_input(self):
1858
1913
self .run_merge_duplicated_nodes_compare (["OUT" ], {"X" : np .random .randn (5 , 5 ).astype (np .float32 )}, model_proto ,
1859
1914
op_type = "Add" , remaining_op_num = 2 )
1860
1915
1916
+ @check_opset_max_version (17 , "ReduceMin from opset <= 17 has axes as an attribute" )
1861
1917
def test_duplicated_duplicated_attributes (self ):
1862
1918
# same attr or not
1863
1919
node0 = helper .make_node ('ReduceMin' , inputs = ["X" ], outputs = ["value0" ], axes = [0 ], keepdims = 0 )
@@ -1877,6 +1933,31 @@ def test_duplicated_duplicated_attributes(self):
1877
1933
self .run_merge_duplicated_nodes_compare (["OUT" ], {"X" : np .random .randn (5 , 5 ).astype (np .float32 )}, model_proto ,
1878
1934
op_type = "ReduceMin" , remaining_op_num = 2 )
1879
1935
1936
+ @check_opset_min_version (18 , "ReduceMin from opset > 17 has axes as an input" )
1937
+ def test_duplicated_duplicated_attributes_18 (self ):
1938
+ # same attr or not
1939
+ node0 = helper .make_node ('ReduceMin' , inputs = ["X" , "axes0" ], outputs = ["value0" ], keepdims = 0 )
1940
+ node1 = helper .make_node ('ReduceMin' , inputs = ["X" , "axes1" ], outputs = ["value1" ], keepdims = 0 )
1941
+ node2 = helper .make_node ('ReduceMin' , inputs = ["X" , "axes2" ], outputs = ["value2" ], keepdims = 0 )
1942
+ node3 = helper .make_node ('Add' , inputs = ["value0" , "value1" ], outputs = ["value3" ])
1943
+ node4 = helper .make_node ("Mul" , ["value2" , "value3" ], ["OUT" ])
1944
+
1945
+ graph = helper .make_graph (
1946
+ [node0 , node1 , node2 , node3 , node4 ],
1947
+ "test_duplicated_duplicated_attributes_18" ,
1948
+ [helper .make_tensor_value_info ("X" , TensorProto .FLOAT , (5 , 5 ))],
1949
+ [helper .make_tensor_value_info ("OUT" , TensorProto .FLOAT , (5 ,))],
1950
+ [
1951
+ helper .make_tensor ("axes0" , data_type = TensorProto .INT64 , dims = [1 ], vals = [0 ]),
1952
+ helper .make_tensor ("axes1" , data_type = TensorProto .INT64 , dims = [1 ], vals = [0 ]),
1953
+ helper .make_tensor ("axes2" , data_type = TensorProto .INT64 , dims = [1 ], vals = [1 ]),
1954
+ ]
1955
+ )
1956
+
1957
+ model_proto = self .make_model (graph , producer_name = "onnx-tests" )
1958
+ self .run_merge_duplicated_nodes_compare (["OUT" ], {"X" : np .random .randn (5 , 5 ).astype (np .float32 )}, model_proto ,
1959
+ op_type = "ReduceMin" , remaining_op_num = 2 )
1960
+
1880
1961
def _check_initializer_num (self , graph_proto , num ):
1881
1962
return num == len (graph_proto .initializer )
1882
1963
@@ -2062,7 +2143,10 @@ def test_reshape_opt_with_mul(self):
2062
2143
node55 = helper .make_node ("Constant" , [], ["six" ], value = six_tensor )
2063
2144
2064
2145
node6 = helper .make_node ("Gather" , ["S" , "g_indices" ], ["dims12" ])
2065
- node7 = helper .make_node ("ReduceProd" , ["dims12" ], ["dims12_prod" ], axes = [0 ])
2146
+ if self .config .opset >= 18 :
2147
+ node7 = helper .make_node ("ReduceProd" , ["dims12" , "axes" ], ["dims12_prod" ])
2148
+ else :
2149
+ node7 = helper .make_node ("ReduceProd" , ["dims12" ], ["dims12_prod" ], axes = [0 ])
2066
2150
if self .config .opset >= 10 :
2067
2151
node8 = helper .make_node ("Slice" , ["S" , "starts" , "ends" , "" ], ["dim0" ])
2068
2152
else :
@@ -2312,7 +2396,10 @@ def test_const_fold_split(self):
2312
2396
const_tensor = helper .make_tensor (name = 'const_tensor' , data_type = TensorProto .FLOAT , dims = shape ,
2313
2397
vals = np .random .randn (2 , 6 , 1 ).flatten ().astype (np .float32 ))
2314
2398
node0 = helper .make_node ("Constant" , [], ["const" ], value = const_tensor )
2315
- node1 = helper .make_node ("Split" , ["const" ], ["out1" , "out2" , "out3" ], axis = 1 )
2399
+ if self .config .opset < 18 :
2400
+ node1 = helper .make_node ("Split" , ["const" ], ["out1" , "out2" , "out3" ], axis = 1 )
2401
+ else :
2402
+ node1 = helper .make_node ("Split" , ["const" ], ["out1" , "out2" , "out3" ], axis = 1 , num_outputs = 3 )
2316
2403
node2 = helper .make_node ("Sum" , ["inp" , "out1" , "out2" , "out3" ], ["out4" ])
2317
2404
2318
2405
graph = helper .make_graph (
@@ -2331,7 +2418,10 @@ def test_const_fold_split_one(self):
2331
2418
const_tensor = helper .make_tensor (name = 'const_tensor' , data_type = TensorProto .FLOAT , dims = shape ,
2332
2419
vals = np .random .randn (2 , 6 , 1 ).flatten ().astype (np .float32 ))
2333
2420
node0 = helper .make_node ("Constant" , [], ["const" ], value = const_tensor )
2334
- node1 = helper .make_node ("Split" , ["const" ], ["out1" ], axis = 1 )
2421
+ if self .config .opset < 18 :
2422
+ node1 = helper .make_node ("Split" , ["const" ], ["out1" ], axis = 1 )
2423
+ else :
2424
+ node1 = helper .make_node ("Split" , ["const" ], ["out1" ], axis = 1 , num_outputs = 1 )
2335
2425
node2 = helper .make_node ("Sum" , ["inp" , "out1" ], ["out4" ])
2336
2426
2337
2427
graph = helper .make_graph (
@@ -2374,7 +2464,11 @@ def test_const_fold_split_const_splits(self):
2374
2464
const_tensor = helper .make_tensor (name = 'const_tensor' , data_type = TensorProto .FLOAT , dims = shape ,
2375
2465
vals = np .random .randn (2 , 6 , 1 ).flatten ().astype (np .float32 ))
2376
2466
node0 = helper .make_node ("Constant" , [], ["const" ], value = const_tensor )
2377
- node2 = helper .make_node ("Split" , ["const" ], ["out1" , "out2" , "out3" ], axis = 1 , split = [1 , 3 , 2 ])
2467
+ if self .config .opset < 18 :
2468
+ node2 = helper .make_node ("Split" , ["const" ], ["out1" , "out2" , "out3" ], axis = 1 , split = [1 , 3 , 2 ])
2469
+ else :
2470
+ node2 = helper .make_node ("Split" , ["const" ], ["out1" , "out2" , "out3" ], axis = 1 , split = [1 , 3 , 2 ],
2471
+ num_outputs = 3 )
2378
2472
node3 = helper .make_node ("Sum" , ["inp" , "out2" ], ["out4" ])
2379
2473
2380
2474
graph = helper .make_graph (
0 commit comments