blob: c1e61444a8157685ee2c4f024a557bb13c0a0b91 [file] [log] [blame]
Moritz Pflanzerf6ad98a2017-07-21 17:19:58 +01001/*
Viet-Hoa Dob3077fb2023-01-03 17:59:14 +00002 * Copyright (c) 2017-2023 Arm Limited.
Moritz Pflanzerf6ad98a2017-07-21 17:19:58 +01003 *
4 * SPDX-License-Identifier: MIT
5 *
6 * Permission is hereby granted, free of charge, to any person obtaining a copy
7 * of this software and associated documentation files (the "Software"), to
8 * deal in the Software without restriction, including without limitation the
9 * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
10 * sell copies of the Software, and to permit persons to whom the Software is
11 * furnished to do so, subject to the following conditions:
12 *
13 * The above copyright notice and this permission notice shall be included in all
14 * copies or substantial portions of the Software.
15 *
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22 * SOFTWARE.
23 */
Michalis Spyrouf4643372019-11-29 16:17:13 +000024#ifndef ARM_COMPUTE_TEST_SHAPE_DATASETS_H
25#define ARM_COMPUTE_TEST_SHAPE_DATASETS_H
Moritz Pflanzerf6ad98a2017-07-21 17:19:58 +010026
27#include "arm_compute/core/TensorShape.h"
Moritz Pflanzera09de0c2017-09-01 20:41:12 +010028#include "tests/framework/datasets/Datasets.h"
Moritz Pflanzerf6ad98a2017-07-21 17:19:58 +010029
30#include <type_traits>
31
32namespace arm_compute
33{
34namespace test
35{
36namespace datasets
37{
Gian Marco5420b282017-11-29 10:41:38 +000038/** Parent type for all for shape datasets. */
39using ShapeDataset = framework::dataset::ContainerDataset<std::vector<TensorShape>>;
40
Michele Di Giorgio5daeffd2018-11-26 10:01:15 +000041/** Data set containing tiny 1D tensor shapes. */
42class Tiny1DShapes final : public ShapeDataset
43{
44public:
45 Tiny1DShapes()
46 : ShapeDataset("Shape",
47 {
48 TensorShape{ 2U },
49 TensorShape{ 3U },
50 })
51 {
52 }
53};
54
Gian Marco5420b282017-11-29 10:41:38 +000055/** Data set containing small 1D tensor shapes. */
56class Small1DShapes final : public ShapeDataset
Moritz Pflanzerf6ad98a2017-07-21 17:19:58 +010057{
58public:
Gian Marco5420b282017-11-29 10:41:38 +000059 Small1DShapes()
60 : ShapeDataset("Shape",
61 {
Giorgio Arenae3d24ce2018-08-24 14:44:08 +010062 TensorShape{ 128U },
63 TensorShape{ 256U },
64 TensorShape{ 512U },
65 TensorShape{ 1024U }
Gian Marco5420b282017-11-29 10:41:38 +000066 })
Moritz Pflanzerf6ad98a2017-07-21 17:19:58 +010067 {
68 }
69};
70
Anthony Barbier1c0d0ff2018-01-31 13:05:09 +000071/** Data set containing tiny 2D tensor shapes. */
72class Tiny2DShapes final : public ShapeDataset
73{
74public:
75 Tiny2DShapes()
76 : ShapeDataset("Shape",
77 {
78 TensorShape{ 7U, 7U },
79 TensorShape{ 11U, 13U },
80 })
81 {
82 }
83};
Moritz Pflanzerb3d25792017-07-26 11:49:37 +010084/** Data set containing small 2D tensor shapes. */
Moritz Pflanzerf6ad98a2017-07-21 17:19:58 +010085class Small2DShapes final : public ShapeDataset
86{
87public:
88 Small2DShapes()
89 : ShapeDataset("Shape",
90 {
Giorgio Arenaed4b8a02021-05-12 12:28:58 +010091 TensorShape{ 1U, 7U },
92 TensorShape{ 5U, 13U },
93 TensorShape{ 32U, 64U }
Moritz Pflanzerf6ad98a2017-07-21 17:19:58 +010094 })
95 {
96 }
97};
98
Anthony Barbier1c0d0ff2018-01-31 13:05:09 +000099/** Data set containing tiny 3D tensor shapes. */
100class Tiny3DShapes final : public ShapeDataset
101{
102public:
103 Tiny3DShapes()
104 : ShapeDataset("Shape",
105 {
106 TensorShape{ 7U, 7U, 5U },
107 TensorShape{ 23U, 13U, 9U },
108 })
109 {
110 }
111};
112
Gian Marco Iodice06b184a2017-08-29 16:05:25 +0100113/** Data set containing small 3D tensor shapes. */
114class Small3DShapes final : public ShapeDataset
115{
116public:
117 Small3DShapes()
118 : ShapeDataset("Shape",
119 {
Georgios Pinitas02ee4292018-02-15 17:22:36 +0000120 TensorShape{ 1U, 7U, 7U },
Pablo Tello54303692018-11-22 16:14:36 +0000121 TensorShape{ 2U, 5U, 4U },
122
Georgios Pinitas02ee4292018-02-15 17:22:36 +0000123 TensorShape{ 7U, 7U, 5U },
Giorgio Arena53048842020-10-07 16:03:43 +0100124 TensorShape{ 16U, 16U, 5U },
Gian Marco Iodice06b184a2017-08-29 16:05:25 +0100125 TensorShape{ 27U, 13U, 37U },
Gian Marco Iodice06b184a2017-08-29 16:05:25 +0100126 })
127 {
128 }
129};
130
Anthony Barbier1c0d0ff2018-01-31 13:05:09 +0000131/** Data set containing tiny 4D tensor shapes. */
132class Tiny4DShapes final : public ShapeDataset
133{
134public:
135 Tiny4DShapes()
136 : ShapeDataset("Shape",
137 {
Gian Marco Iodice9dc558f2020-11-10 14:29:13 +0000138 TensorShape{ 2U, 7U, 5U, 3U },
Anthony Barbier1c0d0ff2018-01-31 13:05:09 +0000139 TensorShape{ 17U, 13U, 7U, 2U },
140 })
141 {
142 }
143};
Gian Marco Iodice06b184a2017-08-29 16:05:25 +0100144/** Data set containing small 4D tensor shapes. */
145class Small4DShapes final : public ShapeDataset
146{
147public:
148 Small4DShapes()
149 : ShapeDataset("Shape",
150 {
Manuel Bottini1d4f3852019-01-14 15:14:43 +0000151 TensorShape{ 2U, 7U, 1U, 3U },
Georgios Pinitas02ee4292018-02-15 17:22:36 +0000152 TensorShape{ 7U, 7U, 5U, 3U },
Gian Marco Iodice06b184a2017-08-29 16:05:25 +0100153 TensorShape{ 27U, 13U, 37U, 2U },
154 TensorShape{ 128U, 64U, 21U, 3U }
155 })
156 {
157 }
158};
159
Giorgio Arena8b2a7d32020-02-11 17:21:31 +0000160/** Data set containing tiny tensor shapes. */
Anthony Barbier1c0d0ff2018-01-31 13:05:09 +0000161class TinyShapes final : public ShapeDataset
162{
163public:
164 TinyShapes()
165 : ShapeDataset("Shape",
166 {
167 // Batch size 1
Giorgio Arenafd83bc82021-05-12 12:44:47 +0100168 TensorShape{ 1U, 9U },
Anthony Barbier1c0d0ff2018-01-31 13:05:09 +0000169 TensorShape{ 27U, 13U, 2U },
170 })
171 {
172 }
173};
Gian Marco Iodice9dc558f2020-11-10 14:29:13 +0000174/** Data set containing small tensor shapes with none of the dimensions equal to 1 (unit). */
175class SmallNoneUnitShapes final : public ShapeDataset
176{
177public:
178 SmallNoneUnitShapes()
179 : ShapeDataset("Shape",
180 {
181 // Batch size 1
182 TensorShape{ 13U, 11U },
183 TensorShape{ 16U, 16U },
184 TensorShape{ 24U, 26U, 5U },
185 TensorShape{ 7U, 7U, 17U, 2U },
186 // Batch size 4
187 TensorShape{ 27U, 13U, 2U, 4U },
188 // Arbitrary batch size
189 TensorShape{ 8U, 7U, 5U, 5U }
190 })
191 {
192 }
193};
Anthony Barbier1c0d0ff2018-01-31 13:05:09 +0000194/** Data set containing small tensor shapes. */
Moritz Pflanzerf6ad98a2017-07-21 17:19:58 +0100195class SmallShapes final : public ShapeDataset
196{
197public:
198 SmallShapes()
199 : ShapeDataset("Shape",
200 {
SiCong Licaf8c5e2017-08-21 13:12:52 +0100201 // Batch size 1
Gian Marco Iodice9dc558f2020-11-10 14:29:13 +0000202 TensorShape{ 3U, 11U },
203 TensorShape{ 1U, 16U },
Georgios Pinitas64f1a902018-09-18 13:42:51 +0100204 TensorShape{ 27U, 13U, 7U },
Michele Di Giorgiod556d7b2020-10-27 10:56:31 +0000205 TensorShape{ 7U, 7U, 17U, 2U },
Viet-Hoa Do622b8ad2022-09-13 10:20:06 +0100206 // Batch size 4 and 2 SIMD iterations
207 TensorShape{ 33U, 13U, 2U, 4U },
SiCong Licaf8c5e2017-08-21 13:12:52 +0100208 // Arbitrary batch size
Gian Marco Iodice215b4ea2018-06-28 16:29:29 +0100209 TensorShape{ 11U, 11U, 3U, 5U }
Moritz Pflanzerf6ad98a2017-07-21 17:19:58 +0100210 })
211 {
212 }
213};
214
Ramy Elgammal404462a2022-11-08 02:14:46 +0000215/** Data set containing small tensor shapes. */
216class SmallShapesNoBatches final : public ShapeDataset
217{
218public:
219 SmallShapesNoBatches()
220 : ShapeDataset("Shape",
221 {
222 // Batch size 1
223 TensorShape{ 3U, 11U },
224 TensorShape{ 1U, 16U },
225 TensorShape{ 27U, 13U, 7U },
226 TensorShape{ 7U, 7U, 17U },
227 TensorShape{ 33U, 13U, 2U },
228 TensorShape{ 11U, 11U, 3U }
229 })
230 {
231 }
232};
233
Giorgio Arena8b2a7d32020-02-11 17:21:31 +0000234/** Data set containing pairs of tiny tensor shapes that are broadcast compatible. */
235class TinyShapesBroadcast final : public framework::dataset::ZipDataset<ShapeDataset, ShapeDataset>
236{
237public:
238 TinyShapesBroadcast()
239 : ZipDataset<ShapeDataset, ShapeDataset>(
240 ShapeDataset("Shape0",
241 {
242 TensorShape{ 9U, 9U },
243 TensorShape{ 10U, 2U, 14U, 2U },
244 }),
245 ShapeDataset("Shape1",
246 {
247 TensorShape{ 9U, 1U, 9U },
248 TensorShape{ 10U },
249 }))
250 {
251 }
252};
Sheri Zhanga387e272021-06-29 17:34:06 +0100253/** Data set containing pairs of tiny tensor shapes that are broadcast compatible and can do in_place calculation. */
254class TinyShapesBroadcastInplace final : public framework::dataset::ZipDataset<ShapeDataset, ShapeDataset>
255{
256public:
257 TinyShapesBroadcastInplace()
258 : ZipDataset<ShapeDataset, ShapeDataset>(
259 ShapeDataset("Shape0",
260 {
261 TensorShape{ 9U },
262 TensorShape{ 10U, 2U, 14U, 2U },
263 }),
264 ShapeDataset("Shape1",
265 {
266 TensorShape{ 9U, 1U, 9U },
267 TensorShape{ 10U },
268 }))
269 {
270 }
271};
Diego Lopez Recas0021d752017-12-18 14:42:56 +0000272/** Data set containing pairs of small tensor shapes that are broadcast compatible. */
273class SmallShapesBroadcast final : public framework::dataset::ZipDataset<ShapeDataset, ShapeDataset>
274{
275public:
276 SmallShapesBroadcast()
277 : ZipDataset<ShapeDataset, ShapeDataset>(
278 ShapeDataset("Shape0",
279 {
280 TensorShape{ 9U, 9U },
281 TensorShape{ 27U, 13U, 2U },
282 TensorShape{ 128U, 1U, 5U, 3U },
283 TensorShape{ 9U, 9U, 3U, 4U },
284 TensorShape{ 27U, 13U, 2U, 4U },
Sang-Hoon Parkcecb0a72019-09-17 08:59:09 +0100285 TensorShape{ 1U, 1U, 1U, 5U },
286 TensorShape{ 1U, 16U, 10U, 2U, 128U },
287 TensorShape{ 1U, 16U, 10U, 2U, 128U }
Diego Lopez Recas0021d752017-12-18 14:42:56 +0000288 }),
289 ShapeDataset("Shape1",
290 {
291 TensorShape{ 9U, 1U, 2U },
292 TensorShape{ 1U, 13U, 2U },
293 TensorShape{ 128U, 64U, 1U, 3U },
294 TensorShape{ 9U, 1U, 3U },
295 TensorShape{ 1U },
Sang-Hoon Parkcecb0a72019-09-17 08:59:09 +0100296 TensorShape{ 9U, 9U, 3U, 5U },
297 TensorShape{ 1U, 1U, 1U, 1U, 128U },
298 TensorShape{ 128U }
Diego Lopez Recas0021d752017-12-18 14:42:56 +0000299 }))
300 {
301 }
302};
303
Ramy Elgammal404462a2022-11-08 02:14:46 +0000304class TemporaryLimitedSmallShapesBroadcast final : public framework::dataset::ZipDataset<ShapeDataset, ShapeDataset>
305{
306public:
307 TemporaryLimitedSmallShapesBroadcast()
308 : ZipDataset<ShapeDataset, ShapeDataset>(
309 ShapeDataset("Shape0",
310 {
Viet-Hoa Dob3077fb2023-01-03 17:59:14 +0000311 TensorShape{ 1U, 3U, 4U, 2U }, // LHS broadcast X
312 TensorShape{ 6U, 4U, 2U, 3U }, // RHS broadcast X
313 TensorShape{ 7U, 1U, 1U, 4U }, // LHS broadcast Y, Z
314 TensorShape{ 8U, 5U, 6U, 3U }, // RHS broadcast Y, Z
315 TensorShape{ 1U, 1U, 1U, 2U }, // LHS broadcast X, Y, Z
316 TensorShape{ 2U, 6U, 4U, 3U }, // RHS broadcast X, Y, Z
Ramy Elgammal404462a2022-11-08 02:14:46 +0000317 }),
318 ShapeDataset("Shape1",
319 {
Viet-Hoa Dob3077fb2023-01-03 17:59:14 +0000320 TensorShape{ 5U, 3U, 4U, 2U },
321 TensorShape{ 1U, 4U, 2U, 3U },
322 TensorShape{ 7U, 2U, 3U, 4U },
323 TensorShape{ 8U, 1U, 1U, 3U },
324 TensorShape{ 4U, 7U, 3U, 2U },
325 TensorShape{ 1U, 1U, 1U, 3U },
Ramy Elgammal404462a2022-11-08 02:14:46 +0000326 }))
327 {
328 }
329};
330
331class TemporaryLimitedLargeShapesBroadcast final : public framework::dataset::ZipDataset<ShapeDataset, ShapeDataset>
332{
333public:
334 TemporaryLimitedLargeShapesBroadcast()
335 : ZipDataset<ShapeDataset, ShapeDataset>(
336 ShapeDataset("Shape0",
337 {
338 TensorShape{ 127U, 25U, 5U },
339 TensorShape{ 485, 40U, 10U }
340 }),
341 ShapeDataset("Shape1",
342 {
343 TensorShape{ 1U, 1U, 1U }, // Broadcast in X, Y, Z
344 TensorShape{ 485U, 1U, 1U }, // Broadcast in Y, Z
345 }))
346 {
347 }
348};
349
steniu01f81652d2017-09-11 15:29:12 +0100350/** Data set containing medium tensor shapes. */
351class MediumShapes final : public ShapeDataset
352{
353public:
354 MediumShapes()
355 : ShapeDataset("Shape",
356 {
357 // Batch size 1
358 TensorShape{ 37U, 37U },
359 TensorShape{ 27U, 33U, 2U },
steniu01f81652d2017-09-11 15:29:12 +0100360 // Arbitrary batch size
361 TensorShape{ 37U, 37U, 3U, 5U }
362 })
363 {
364 }
365};
366
Gian Marco37908d92017-11-07 14:38:22 +0000367/** Data set containing medium 2D tensor shapes. */
368class Medium2DShapes final : public ShapeDataset
369{
370public:
371 Medium2DShapes()
372 : ShapeDataset("Shape",
373 {
374 TensorShape{ 42U, 37U },
375 TensorShape{ 57U, 60U },
376 TensorShape{ 128U, 64U },
Gian Marco Iodice2abb2162018-04-11 10:49:04 +0100377 TensorShape{ 83U, 72U },
378 TensorShape{ 40U, 40U }
Gian Marco37908d92017-11-07 14:38:22 +0000379 })
380 {
381 }
382};
383
Gian Marco Iodice7e4b2392018-02-22 16:17:20 +0000384/** Data set containing medium 3D tensor shapes. */
385class Medium3DShapes final : public ShapeDataset
386{
387public:
388 Medium3DShapes()
389 : ShapeDataset("Shape",
390 {
391 TensorShape{ 42U, 37U, 8U },
392 TensorShape{ 57U, 60U, 13U },
Gian Marco Iodice7e4b2392018-02-22 16:17:20 +0000393 TensorShape{ 83U, 72U, 14U }
394 })
395 {
396 }
397};
398
399/** Data set containing medium 4D tensor shapes. */
400class Medium4DShapes final : public ShapeDataset
401{
402public:
403 Medium4DShapes()
404 : ShapeDataset("Shape",
405 {
406 TensorShape{ 42U, 37U, 8U, 15U },
407 TensorShape{ 57U, 60U, 13U, 8U },
Gian Marco Iodice7e4b2392018-02-22 16:17:20 +0000408 TensorShape{ 83U, 72U, 14U, 5U }
409 })
410 {
411 }
412};
413
Moritz Pflanzerf6ad98a2017-07-21 17:19:58 +0100414/** Data set containing large tensor shapes. */
415class LargeShapes final : public ShapeDataset
416{
417public:
418 LargeShapes()
419 : ShapeDataset("Shape",
420 {
Michalis Spyrou97b2bb12019-05-28 16:59:27 +0100421 TensorShape{ 582U, 131U, 1U, 4U },
Moritz Pflanzerf6ad98a2017-07-21 17:19:58 +0100422 })
423 {
424 }
425};
426
Ramy Elgammal404462a2022-11-08 02:14:46 +0000427/** Data set containing large tensor shapes. */
428class LargeShapesNoBatches final : public ShapeDataset
429{
430public:
431 LargeShapesNoBatches()
432 : ShapeDataset("Shape",
433 {
434 TensorShape{ 582U, 131U, 2U },
435 })
436 {
437 }
438};
439
Diego Lopez Recas0021d752017-12-18 14:42:56 +0000440/** Data set containing pairs of large tensor shapes that are broadcast compatible. */
441class LargeShapesBroadcast final : public framework::dataset::ZipDataset<ShapeDataset, ShapeDataset>
442{
443public:
444 LargeShapesBroadcast()
445 : ZipDataset<ShapeDataset, ShapeDataset>(
446 ShapeDataset("Shape0",
447 {
448 TensorShape{ 1921U, 541U },
449 TensorShape{ 1U, 485U, 2U, 3U },
450 TensorShape{ 4159U, 1U },
451 TensorShape{ 799U }
452 }),
453 ShapeDataset("Shape1",
454 {
455 TensorShape{ 1921U, 1U, 2U },
456 TensorShape{ 641U, 1U, 2U, 3U },
457 TensorShape{ 1U, 127U, 25U },
458 TensorShape{ 799U, 595U, 1U, 4U }
459 }))
460 {
461 }
462};
463
Gian Marco5420b282017-11-29 10:41:38 +0000464/** Data set containing large 1D tensor shapes. */
465class Large1DShapes final : public ShapeDataset
466{
467public:
468 Large1DShapes()
469 : ShapeDataset("Shape",
470 {
Michalis Spyrou1d897772019-12-09 18:47:29 +0000471 TensorShape{ 1245U }
Gian Marco5420b282017-11-29 10:41:38 +0000472 })
473 {
474 }
475};
476
Moritz Pflanzerb3d25792017-07-26 11:49:37 +0100477/** Data set containing large 2D tensor shapes. */
Moritz Pflanzerf6ad98a2017-07-21 17:19:58 +0100478class Large2DShapes final : public ShapeDataset
479{
480public:
481 Large2DShapes()
482 : ShapeDataset("Shape",
483 {
Michalis Spyrou1d897772019-12-09 18:47:29 +0000484 TensorShape{ 1245U, 652U }
Moritz Pflanzerf6ad98a2017-07-21 17:19:58 +0100485 })
486 {
487 }
488};
Moritz Pflanzerb3d25792017-07-26 11:49:37 +0100489
Gian Marco Iodice06b184a2017-08-29 16:05:25 +0100490/** Data set containing large 3D tensor shapes. */
491class Large3DShapes final : public ShapeDataset
492{
493public:
494 Large3DShapes()
495 : ShapeDataset("Shape",
496 {
Michalis Spyrou1d897772019-12-09 18:47:29 +0000497 TensorShape{ 320U, 240U, 3U }
Gian Marco Iodice06b184a2017-08-29 16:05:25 +0100498 })
499 {
500 }
501};
502
503/** Data set containing large 4D tensor shapes. */
504class Large4DShapes final : public ShapeDataset
505{
506public:
507 Large4DShapes()
508 : ShapeDataset("Shape",
509 {
Michalis Spyrou1d897772019-12-09 18:47:29 +0000510 TensorShape{ 320U, 123U, 3U, 3U }
Gian Marco Iodice06b184a2017-08-29 16:05:25 +0100511 })
512 {
513 }
514};
515
Gian Marco Iodice247f52c2018-03-22 11:24:56 +0000516/** Data set containing small 3x3 tensor shapes. */
517class Small3x3Shapes final : public ShapeDataset
518{
519public:
520 Small3x3Shapes()
521 : ShapeDataset("Shape",
522 {
523 TensorShape{ 3U, 3U, 7U, 4U },
524 TensorShape{ 3U, 3U, 4U, 13U },
Gian Marco Iodice247f52c2018-03-22 11:24:56 +0000525 TensorShape{ 3U, 3U, 3U, 5U },
526 })
527 {
528 }
529};
530
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +0100531/** Data set containing small 3x1 tensor shapes. */
532class Small3x1Shapes final : public ShapeDataset
533{
534public:
535 Small3x1Shapes()
536 : ShapeDataset("Shape",
537 {
538 TensorShape{ 3U, 1U, 7U, 4U },
539 TensorShape{ 3U, 1U, 4U, 13U },
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +0100540 TensorShape{ 3U, 1U, 3U, 5U },
541 })
542 {
543 }
544};
545
546/** Data set containing small 1x3 tensor shapes. */
547class Small1x3Shapes final : public ShapeDataset
548{
549public:
550 Small1x3Shapes()
551 : ShapeDataset("Shape",
552 {
553 TensorShape{ 1U, 3U, 7U, 4U },
554 TensorShape{ 1U, 3U, 4U, 13U },
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +0100555 TensorShape{ 1U, 3U, 3U, 5U },
556 })
557 {
558 }
559};
560
Gian Marco Iodice247f52c2018-03-22 11:24:56 +0000561/** Data set containing large 3x3 tensor shapes. */
562class Large3x3Shapes final : public ShapeDataset
563{
564public:
565 Large3x3Shapes()
566 : ShapeDataset("Shape",
567 {
568 TensorShape{ 3U, 3U, 32U, 64U },
569 TensorShape{ 3U, 3U, 51U, 13U },
570 TensorShape{ 3U, 3U, 53U, 47U },
Gian Marco Iodice247f52c2018-03-22 11:24:56 +0000571 })
572 {
573 }
574};
575
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +0100576/** Data set containing large 3x1 tensor shapes. */
577class Large3x1Shapes final : public ShapeDataset
578{
579public:
580 Large3x1Shapes()
581 : ShapeDataset("Shape",
582 {
583 TensorShape{ 3U, 1U, 32U, 64U },
584 TensorShape{ 3U, 1U, 51U, 13U },
585 TensorShape{ 3U, 1U, 53U, 47U },
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +0100586 })
587 {
588 }
589};
590
591/** Data set containing large 1x3 tensor shapes. */
592class Large1x3Shapes final : public ShapeDataset
593{
594public:
595 Large1x3Shapes()
596 : ShapeDataset("Shape",
597 {
598 TensorShape{ 1U, 3U, 32U, 64U },
599 TensorShape{ 1U, 3U, 51U, 13U },
600 TensorShape{ 1U, 3U, 53U, 47U },
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +0100601 })
602 {
603 }
604};
605
Giorgio Arena9373c8b2018-04-11 19:07:17 +0100606/** Data set containing small 5x5 tensor shapes. */
607class Small5x5Shapes final : public ShapeDataset
608{
609public:
610 Small5x5Shapes()
611 : ShapeDataset("Shape",
612 {
613 TensorShape{ 5U, 5U, 7U, 4U },
614 TensorShape{ 5U, 5U, 4U, 13U },
Giorgio Arena9373c8b2018-04-11 19:07:17 +0100615 TensorShape{ 5U, 5U, 3U, 5U },
616 })
617 {
618 }
619};
620
ramelg0137515692022-02-26 22:06:20 +0000621/** Data set containing small 5D tensor shapes. */
622class Small5dShapes final : public ShapeDataset
623{
624public:
625 Small5dShapes()
626 : ShapeDataset("Shape",
627 {
628 TensorShape{ 5U, 5U, 7U, 4U, 3U },
629 TensorShape{ 5U, 5U, 4U, 13U, 2U },
Gunes Bayirec0113d2022-11-09 09:26:27 +0000630 TensorShape{ 5U, 5U, 3U, 5U, 2U },
ramelg0137515692022-02-26 22:06:20 +0000631 })
632 {
633 }
634};
635
Giorgio Arena9373c8b2018-04-11 19:07:17 +0100636/** Data set containing large 5x5 tensor shapes. */
637class Large5x5Shapes final : public ShapeDataset
638{
639public:
640 Large5x5Shapes()
641 : ShapeDataset("Shape",
642 {
Michalis Spyrou1d897772019-12-09 18:47:29 +0000643 TensorShape{ 5U, 5U, 32U, 64U }
Giorgio Arena9373c8b2018-04-11 19:07:17 +0100644 })
645 {
646 }
647};
648
ramelg0137515692022-02-26 22:06:20 +0000649/** Data set containing large 5D tensor shapes. */
650class Large5dShapes final : public ShapeDataset
651{
652public:
653 Large5dShapes()
654 : ShapeDataset("Shape",
655 {
656 TensorShape{ 30U, 40U, 30U, 32U, 3U }
657 })
658 {
659 }
660};
661
Gian Marco Iodice876be2a2018-07-03 12:22:09 +0100662/** Data set containing small 5x1 tensor shapes. */
663class Small5x1Shapes final : public ShapeDataset
664{
665public:
666 Small5x1Shapes()
667 : ShapeDataset("Shape",
668 {
Michalis Spyrou1d897772019-12-09 18:47:29 +0000669 TensorShape{ 5U, 1U, 7U, 4U }
Gian Marco Iodice876be2a2018-07-03 12:22:09 +0100670 })
671 {
672 }
673};
674
675/** Data set containing large 5x1 tensor shapes. */
676class Large5x1Shapes final : public ShapeDataset
677{
678public:
679 Large5x1Shapes()
680 : ShapeDataset("Shape",
681 {
Michalis Spyrou1d897772019-12-09 18:47:29 +0000682 TensorShape{ 5U, 1U, 32U, 64U }
Gian Marco Iodice876be2a2018-07-03 12:22:09 +0100683 })
684 {
685 }
686};
687
688/** Data set containing small 1x5 tensor shapes. */
689class Small1x5Shapes final : public ShapeDataset
690{
691public:
692 Small1x5Shapes()
693 : ShapeDataset("Shape",
694 {
Michalis Spyrou1d897772019-12-09 18:47:29 +0000695 TensorShape{ 1U, 5U, 7U, 4U }
Gian Marco Iodice876be2a2018-07-03 12:22:09 +0100696 })
697 {
698 }
699};
700
701/** Data set containing large 1x5 tensor shapes. */
702class Large1x5Shapes final : public ShapeDataset
703{
704public:
705 Large1x5Shapes()
706 : ShapeDataset("Shape",
707 {
Michalis Spyrou1d897772019-12-09 18:47:29 +0000708 TensorShape{ 1U, 5U, 32U, 64U }
Gian Marco Iodice876be2a2018-07-03 12:22:09 +0100709 })
710 {
711 }
712};
713
Michele Di Giorgio881c6842019-02-27 14:26:51 +0000714/** Data set containing small 1x7 tensor shapes. */
715class Small1x7Shapes final : public ShapeDataset
716{
717public:
718 Small1x7Shapes()
719 : ShapeDataset("Shape",
720 {
Michalis Spyrou1d897772019-12-09 18:47:29 +0000721 TensorShape{ 1U, 7U, 7U, 4U }
Michele Di Giorgio881c6842019-02-27 14:26:51 +0000722 })
723 {
724 }
725};
726
727/** Data set containing large 1x7 tensor shapes. */
728class Large1x7Shapes final : public ShapeDataset
729{
730public:
731 Large1x7Shapes()
732 : ShapeDataset("Shape",
733 {
Michalis Spyrou1d897772019-12-09 18:47:29 +0000734 TensorShape{ 1U, 7U, 32U, 64U }
Michele Di Giorgio881c6842019-02-27 14:26:51 +0000735 })
736 {
737 }
738};
739
740/** Data set containing small 7x7 tensor shapes. */
741class Small7x7Shapes final : public ShapeDataset
742{
743public:
744 Small7x7Shapes()
745 : ShapeDataset("Shape",
746 {
Michalis Spyrou1d897772019-12-09 18:47:29 +0000747 TensorShape{ 7U, 7U, 7U, 4U }
Michele Di Giorgio881c6842019-02-27 14:26:51 +0000748 })
749 {
750 }
751};
752
753/** Data set containing large 7x7 tensor shapes. */
754class Large7x7Shapes final : public ShapeDataset
755{
756public:
757 Large7x7Shapes()
758 : ShapeDataset("Shape",
759 {
Michalis Spyrou1d897772019-12-09 18:47:29 +0000760 TensorShape{ 7U, 7U, 32U, 64U }
Michele Di Giorgio881c6842019-02-27 14:26:51 +0000761 })
762 {
763 }
764};
765
766/** Data set containing small 7x1 tensor shapes. */
767class Small7x1Shapes final : public ShapeDataset
768{
769public:
770 Small7x1Shapes()
771 : ShapeDataset("Shape",
772 {
Michalis Spyrou1d897772019-12-09 18:47:29 +0000773 TensorShape{ 7U, 1U, 7U, 4U }
Michele Di Giorgio881c6842019-02-27 14:26:51 +0000774 })
775 {
776 }
777};
778
779/** Data set containing large 7x1 tensor shapes. */
780class Large7x1Shapes final : public ShapeDataset
781{
782public:
783 Large7x1Shapes()
784 : ShapeDataset("Shape",
785 {
Michalis Spyrou1d897772019-12-09 18:47:29 +0000786 TensorShape{ 7U, 1U, 32U, 64U }
Michele Di Giorgio881c6842019-02-27 14:26:51 +0000787 })
788 {
789 }
790};
791
Pablo Tellof5f34bb2017-08-22 13:34:13 +0100792/** Data set containing small tensor shapes for deconvolution. */
793class SmallDeconvolutionShapes final : public ShapeDataset
794{
795public:
796 SmallDeconvolutionShapes()
797 : ShapeDataset("InputShape",
798 {
Gunes Bayirec0113d2022-11-09 09:26:27 +0000799 // Multiple Vector Loops for FP32
Georgios Pinitasced7a8d2018-02-01 16:31:33 +0000800 TensorShape{ 5U, 4U, 3U, 2U },
Pablo Tellof5f34bb2017-08-22 13:34:13 +0100801 TensorShape{ 5U, 5U, 3U },
802 TensorShape{ 11U, 13U, 4U, 3U }
803 })
804 {
805 }
806};
807
Gunes Bayirec0113d2022-11-09 09:26:27 +0000808class SmallDeconvolutionShapesWithLargerChannels final : public ShapeDataset
809{
810public:
811 SmallDeconvolutionShapesWithLargerChannels()
812 : ShapeDataset("InputShape",
813 {
814 // Multiple Vector Loops for all data types
815 TensorShape{ 5U, 5U, 35U }
816 })
817 {
818 }
819};
820
Anthony Barbier1c0d0ff2018-01-31 13:05:09 +0000821/** Data set containing tiny tensor shapes for direct convolution. */
822class TinyDirectConvolutionShapes final : public ShapeDataset
823{
824public:
825 TinyDirectConvolutionShapes()
826 : ShapeDataset("InputShape",
827 {
828 // Batch size 1
829 TensorShape{ 11U, 13U, 3U },
830 TensorShape{ 7U, 27U, 3U }
831 })
832 {
833 }
834};
Moritz Pflanzerb3d25792017-07-26 11:49:37 +0100835/** Data set containing small tensor shapes for direct convolution. */
836class SmallDirectConvolutionShapes final : public ShapeDataset
837{
838public:
839 SmallDirectConvolutionShapes()
840 : ShapeDataset("InputShape",
841 {
SiCong Licaf8c5e2017-08-21 13:12:52 +0100842 // Batch size 1
Sang-Hoon Parkcecb0a72019-09-17 08:59:09 +0100843 TensorShape{ 32U, 37U, 3U },
SiCong Licaf8c5e2017-08-21 13:12:52 +0100844 // Batch size 4
Gian Marco Iodice0841ca02021-02-01 14:37:02 +0000845 TensorShape{ 6U, 9U, 5U, 4U },
Moritz Pflanzerb3d25792017-07-26 11:49:37 +0100846 })
847 {
848 }
849};
Gian Marco Iodiceb2833b82017-09-13 16:23:18 +0100850
Sheri Zhang6d9c9822021-09-24 16:02:57 +0100851class SmallDirectConv3DShapes final : public ShapeDataset
852{
853public:
854 SmallDirectConv3DShapes()
855 : ShapeDataset("InputShape",
856 {
857 // Batch size 2
858 TensorShape{ 1U, 3U, 4U, 5U, 2U },
859 // Batch size 3
860 TensorShape{ 7U, 27U, 3U, 6U, 3U },
861 // Batch size 1
862 TensorShape{ 32U, 37U, 13U, 1U, 1U },
863 })
864 {
865 }
866};
867
Xinghang Zhou33ff9ef2018-01-17 11:23:39 +0800868/** Data set containing small tensor shapes for direct convolution. */
869class SmallDirectConvolutionTensorShiftShapes final : public ShapeDataset
870{
871public:
872 SmallDirectConvolutionTensorShiftShapes()
873 : ShapeDataset("InputShape",
874 {
875 // Batch size 1
Sang-Hoon Parkcecb0a72019-09-17 08:59:09 +0100876 TensorShape{ 32U, 37U, 3U },
Xinghang Zhou33ff9ef2018-01-17 11:23:39 +0800877 // Batch size 4
878 TensorShape{ 32U, 37U, 3U, 4U },
Xinghang Zhou33ff9ef2018-01-17 11:23:39 +0800879 // Arbitrary batch size
880 TensorShape{ 32U, 37U, 3U, 8U }
881 })
882 {
883 }
884};
885
Giorgio Arena0f170392018-07-18 16:13:12 +0100886/** Data set containing small grouped im2col tensor shapes. */
887class GroupedIm2ColSmallShapes final : public ShapeDataset
888{
889public:
890 GroupedIm2ColSmallShapes()
891 : ShapeDataset("Shape",
892 {
893 TensorShape{ 11U, 11U, 48U },
894 TensorShape{ 27U, 13U, 24U },
895 TensorShape{ 128U, 64U, 12U, 3U },
896 TensorShape{ 11U, 11U, 48U, 4U },
897 TensorShape{ 27U, 13U, 24U, 4U },
898 TensorShape{ 11U, 11U, 48U, 5U }
899 })
900 {
901 }
902};
903
904/** Data set containing large grouped im2col tensor shapes. */
905class GroupedIm2ColLargeShapes final : public ShapeDataset
906{
907public:
908 GroupedIm2ColLargeShapes()
909 : ShapeDataset("Shape",
910 {
Georgios Pinitas2a518182018-08-13 15:53:31 +0100911 TensorShape{ 153U, 231U, 12U },
912 TensorShape{ 123U, 191U, 12U, 2U },
Giorgio Arena0f170392018-07-18 16:13:12 +0100913 })
914 {
915 }
916};
917
Giorgio Arenac6aa49b2018-08-07 11:53:30 +0100918/** Data set containing small grouped weights tensor shapes. */
919class GroupedWeightsSmallShapes final : public ShapeDataset
920{
921public:
922 GroupedWeightsSmallShapes()
923 : ShapeDataset("Shape",
924 {
925 TensorShape{ 3U, 3U, 48U, 120U },
926 TensorShape{ 1U, 3U, 24U, 240U },
927 TensorShape{ 3U, 1U, 12U, 480U },
Michalis Spyrou1d897772019-12-09 18:47:29 +0000928 TensorShape{ 5U, 5U, 48U, 120U }
Giorgio Arenac6aa49b2018-08-07 11:53:30 +0100929 })
930 {
931 }
932};
933
934/** Data set containing large grouped weights tensor shapes. */
935class GroupedWeightsLargeShapes final : public ShapeDataset
936{
937public:
938 GroupedWeightsLargeShapes()
939 : ShapeDataset("Shape",
940 {
941 TensorShape{ 9U, 9U, 96U, 240U },
Michalis Spyrou1d897772019-12-09 18:47:29 +0000942 TensorShape{ 13U, 13U, 96U, 240U }
Giorgio Arenac6aa49b2018-08-07 11:53:30 +0100943 })
944 {
945 }
946};
947
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000948/** Data set containing 2D tensor shapes for DepthConcatenateLayer. */
949class DepthConcatenateLayerShapes final : public ShapeDataset
Gian Marco Iodiceb2833b82017-09-13 16:23:18 +0100950{
951public:
Giorgio Arena04a8f8c2017-11-23 11:45:24 +0000952 DepthConcatenateLayerShapes()
Gian Marco Iodiceb2833b82017-09-13 16:23:18 +0100953 : ShapeDataset("Shape",
954 {
955 TensorShape{ 322U, 243U },
956 TensorShape{ 463U, 879U },
957 TensorShape{ 416U, 651U }
958 })
959 {
960 }
961};
962
Pablo Tello3dd5b682019-03-04 14:14:02 +0000963/** Data set containing tensor shapes for ConcatenateLayer. */
964class ConcatenateLayerShapes final : public ShapeDataset
Michalis Spyrou55b3d122018-05-09 09:59:23 +0100965{
966public:
Pablo Tello3dd5b682019-03-04 14:14:02 +0000967 ConcatenateLayerShapes()
Michalis Spyrou55b3d122018-05-09 09:59:23 +0100968 : ShapeDataset("Shape",
969 {
970 TensorShape{ 232U, 65U, 3U },
971 TensorShape{ 432U, 65U, 3U },
Michele Di Giorgioe6dbde02018-10-19 15:46:19 +0100972 TensorShape{ 124U, 65U, 3U },
973 TensorShape{ 124U, 65U, 3U, 4U }
Michalis Spyrou55b3d122018-05-09 09:59:23 +0100974 })
975 {
976 }
977};
978
Gian Marco Iodicebf179552017-09-05 13:51:21 +0100979/** Data set containing global pooling tensor shapes. */
980class GlobalPoolingShapes final : public ShapeDataset
981{
982public:
983 GlobalPoolingShapes()
984 : ShapeDataset("Shape",
985 {
986 // Batch size 1
987 TensorShape{ 9U, 9U },
988 TensorShape{ 13U, 13U, 2U },
989 TensorShape{ 27U, 27U, 1U, 3U },
990 // Batch size 4
991 TensorShape{ 31U, 31U, 3U, 4U },
992 TensorShape{ 34U, 34U, 2U, 4U }
993 })
994 {
995 }
996};
Anthony Barbier1c0d0ff2018-01-31 13:05:09 +0000997/** Data set containing tiny softmax layer shapes. */
998class SoftmaxLayerTinyShapes final : public ShapeDataset
999{
1000public:
1001 SoftmaxLayerTinyShapes()
1002 : ShapeDataset("Shape",
1003 {
1004 TensorShape{ 9U, 9U },
Georgios Pinitas17d6d3c2018-07-02 17:52:40 +01001005 TensorShape{ 128U, 10U },
Anthony Barbier1c0d0ff2018-01-31 13:05:09 +00001006 })
1007 {
1008 }
1009};
Gian Marco Iodicebf179552017-09-05 13:51:21 +01001010
Chunosovd6afedc2017-11-06 22:09:45 +07001011/** Data set containing small softmax layer shapes. */
1012class SoftmaxLayerSmallShapes final : public ShapeDataset
1013{
1014public:
1015 SoftmaxLayerSmallShapes()
1016 : ShapeDataset("Shape",
1017 {
SiCong Li37d65e42020-11-06 09:55:04 +00001018 TensorShape{ 1U, 9U },
Georgios Pinitas17d6d3c2018-07-02 17:52:40 +01001019 TensorShape{ 256U, 10U },
1020 TensorShape{ 353U, 8U },
1021 TensorShape{ 781U, 5U },
Chunosovd6afedc2017-11-06 22:09:45 +07001022 })
1023 {
1024 }
1025};
1026
1027/** Data set containing large softmax layer shapes. */
1028class SoftmaxLayerLargeShapes final : public ShapeDataset
1029{
1030public:
1031 SoftmaxLayerLargeShapes()
1032 : ShapeDataset("Shape",
1033 {
Michalis Spyrou1d897772019-12-09 18:47:29 +00001034 TensorShape{ 1000U, 10U }
Giuseppe Rossini87e896a2018-08-24 10:24:12 +01001035
1036 })
1037 {
1038 }
1039};
1040
1041/** Data set containing large and small softmax layer 4D shapes. */
1042class SoftmaxLayer4DShapes final : public ShapeDataset
1043{
1044public:
1045 SoftmaxLayer4DShapes()
1046 : ShapeDataset("Shape",
1047 {
1048 TensorShape{ 9U, 9U, 9U, 9U },
Michalis Spyrou1d897772019-12-09 18:47:29 +00001049 TensorShape{ 31U, 10U, 1U, 9U },
Chunosovd6afedc2017-11-06 22:09:45 +07001050 })
1051 {
1052 }
1053};
1054
Ioan-Cristian Szabo2c350182017-12-20 16:27:37 +00001055/** Data set containing 2D tensor shapes relative to an image size. */
1056class SmallImageShapes final : public ShapeDataset
1057{
1058public:
1059 SmallImageShapes()
1060 : ShapeDataset("Shape",
1061 {
1062 TensorShape{ 640U, 480U },
1063 TensorShape{ 800U, 600U },
Ioan-Cristian Szabo2c350182017-12-20 16:27:37 +00001064 })
1065 {
1066 }
1067};
1068
1069/** Data set containing 2D tensor shapes relative to an image size. */
1070class LargeImageShapes final : public ShapeDataset
1071{
1072public:
1073 LargeImageShapes()
1074 : ShapeDataset("Shape",
1075 {
1076 TensorShape{ 1920U, 1080U },
1077 TensorShape{ 2560U, 1536U },
1078 TensorShape{ 3584U, 2048U }
1079 })
1080 {
1081 }
1082};
Giorgio Arena73023022018-09-04 14:55:55 +01001083
1084/** Data set containing small YOLO tensor shapes. */
1085class SmallYOLOShapes final : public ShapeDataset
1086{
1087public:
1088 SmallYOLOShapes()
1089 : ShapeDataset("Shape",
1090 {
1091 // Batch size 1
1092 TensorShape{ 11U, 11U, 270U },
1093 TensorShape{ 27U, 13U, 90U },
Gian Marco Iodice8e1f3c02018-09-13 15:56:47 +01001094 TensorShape{ 13U, 12U, 45U, 2U },
Giorgio Arena73023022018-09-04 14:55:55 +01001095 })
1096 {
1097 }
1098};
1099
1100/** Data set containing large YOLO tensor shapes. */
1101class LargeYOLOShapes final : public ShapeDataset
1102{
1103public:
1104 LargeYOLOShapes()
1105 : ShapeDataset("Shape",
1106 {
1107 TensorShape{ 24U, 23U, 270U },
1108 TensorShape{ 51U, 63U, 90U, 2U },
1109 TensorShape{ 76U, 91U, 45U, 3U }
1110 })
1111 {
1112 }
1113};
Gian Marco Iodice5ba5e092018-12-06 17:13:09 +00001114
1115/** Data set containing small tensor shapes to be used with the GEMM reshaping kernel */
1116class SmallGEMMReshape2DShapes final : public ShapeDataset
1117{
1118public:
1119 SmallGEMMReshape2DShapes()
1120 : ShapeDataset("Shape",
1121 {
1122 TensorShape{ 63U, 72U },
1123 })
1124 {
1125 }
1126};
1127
1128/** Data set containing small tensor shapes to be used with the GEMM reshaping kernel when the input has to be reinterpreted as 3D */
1129class SmallGEMMReshape3DShapes final : public ShapeDataset
1130{
1131public:
1132 SmallGEMMReshape3DShapes()
1133 : ShapeDataset("Shape",
1134 {
1135 TensorShape{ 63U, 9U, 8U },
1136 })
1137 {
1138 }
1139};
1140
1141/** Data set containing large tensor shapes to be used with the GEMM reshaping kernel */
1142class LargeGEMMReshape2DShapes final : public ShapeDataset
1143{
1144public:
1145 LargeGEMMReshape2DShapes()
1146 : ShapeDataset("Shape",
1147 {
1148 TensorShape{ 16U, 27U },
Michalis Spyrou1d897772019-12-09 18:47:29 +00001149 TensorShape{ 345U, 171U }
Gian Marco Iodice5ba5e092018-12-06 17:13:09 +00001150 })
1151 {
1152 }
1153};
1154
1155/** Data set containing large tensor shapes to be used with the GEMM reshaping kernel when the input has to be reinterpreted as 3D */
1156class LargeGEMMReshape3DShapes final : public ShapeDataset
1157{
1158public:
1159 LargeGEMMReshape3DShapes()
1160 : ShapeDataset("Shape",
1161 {
1162 TensorShape{ 16U, 3U, 9U },
Gian Marco Iodice5ba5e092018-12-06 17:13:09 +00001163 TensorShape{ 345U, 34U, 18U }
1164 })
1165 {
1166 }
1167};
Pablo Telloe96e4f02018-12-21 16:47:23 +00001168
1169/** Data set containing small 2D tensor shapes. */
1170class Small2DNonMaxSuppressionShapes final : public ShapeDataset
1171{
1172public:
1173 Small2DNonMaxSuppressionShapes()
1174 : ShapeDataset("Shape",
1175 {
1176 TensorShape{ 4U, 7U },
1177 TensorShape{ 4U, 13U },
1178 TensorShape{ 4U, 64U }
1179 })
1180 {
1181 }
1182};
1183
1184/** Data set containing large 2D tensor shapes. */
1185class Large2DNonMaxSuppressionShapes final : public ShapeDataset
1186{
1187public:
1188 Large2DNonMaxSuppressionShapes()
1189 : ShapeDataset("Shape",
1190 {
Michalis Spyrou1d897772019-12-09 18:47:29 +00001191 TensorShape{ 4U, 113U }
Pablo Telloe96e4f02018-12-21 16:47:23 +00001192 })
1193 {
1194 }
1195};
1196
Moritz Pflanzerf6ad98a2017-07-21 17:19:58 +01001197} // namespace datasets
1198} // namespace test
1199} // namespace arm_compute
Michalis Spyrouf4643372019-11-29 16:17:13 +00001200#endif /* ARM_COMPUTE_TEST_SHAPE_DATASETS_H */