Xenova's picture
Xenova HF Staff
sync 2e7068faf55e
6cc5e33 verified
Raw
History Blame
40.6 kB
{
"op": "ai.onnx.CumProd",
"fixtureArrays": {
"axis2_3d_f32_input_x": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24]
},
"cases": [
{
"name": "dispatch_cliff_thread_row_scan_f32",
"args": { "axis": 1 },
"inputs": { "x": { "dtype": "float32", "shape": [16776961, 1], "data": { "kind": "constant", "value": 1.0 } } },
"outputs": { "y": { "dtype": "float32", "shape": [16776961, 1], "tolerance": 0 } }
},
{
"name": "many_short_rows_axis1_portable_tiled_f32",
"provenance": {
"notes": "A large supply of independent 64-element rows exercises the capability-selected short-row route with nontrivial signed products. Variable-width and synthetic minimum-limit tiers select the coalesced tiled kernel; fixed-width devices retain their faster native row scan."
},
"args": { "axis": 1 },
"inputs": {
"x": { "dtype": "float32", "shape": [4096, 64], "data": { "kind": "cycle", "values": [1.01, 0.99, -1.0, 0.5] } }
},
"outputs": { "y": { "dtype": "float32", "shape": [4096, 64], "tolerance": 0.000001 } }
},
{
"name": "tiled_short_rows_reverse_int32",
"provenance": {
"notes": "Reverse cumulative product on the short-row tiled path uses an int32 accumulator and the `1i` identity. A seven-value cycle over six-wide rows phase-shifts every row, exposing reverse indexing errors while keeping all partial products within int32."
},
"attrs": { "reverse": 1 },
"args": { "axis": 1 },
"inputs": {
"x": { "dtype": "int32", "shape": [4096, 6], "data": { "kind": "cycle", "values": [1, -1, 2, 3, -2, 1, 5] } }
},
"outputs": { "y": { "dtype": "int32", "shape": [4096, 6], "tolerance": 0 } }
},
{
"name": "tiled_short_rows_exclusive_uint32",
"provenance": {
"notes": "Exclusive cumulative product on the short-row tiled route with an unsigned accumulator. uint32 makes accType u32, the `1u` seed arm that neither f32/f16 nor i32 reaches, and exclusive = 1 renders the read-then-store half of the in-tile scan. Cycle length 7 over 6-wide rows keeps each row's phase distinct. The full cycle product is 120, so no row wraps 2^32 and the comparison stays exact."
},
"attrs": { "exclusive": 1 },
"args": { "axis": 1 },
"inputs": {
"x": { "dtype": "uint32", "shape": [4096, 6], "data": { "kind": "cycle", "values": [1, 2, 3, 1, 4, 1, 5] } }
},
"outputs": { "y": { "dtype": "uint32", "shape": [4096, 6], "tolerance": 0 } }
},
{
"name": "tiled_short_rows_reverse_exclusive_f16",
"provenance": {
"notes": "float16 on the short-row tiled path combines reverse and exclusive scanning. Signed powers of two keep every six-element product within 2^-4 .. 2^3, making both the f32 accumulator and float16 store exact; a seven-value cycle phase-shifts each row."
},
"attrs": { "exclusive": 1, "reverse": 1 },
"args": { "axis": 1 },
"inputs": {
"x": {
"dtype": "float16",
"shape": [4096, 6],
"data": { "kind": "cycle", "values": [1.0, 0.5, 2.0, -1.0, 0.25, 4.0, -0.5] }
}
},
"outputs": { "y": { "dtype": "float16", "shape": [4096, 6], "tolerance": 0 } }
},
{
"name": "axis0_1d_f32",
"provenance": { "source": "onnxruntime/test/providers/cpu/math/cumprod_test.cc", "test": "CumProdTest._1DTest" },
"args": { "axis": 0 },
"inputs": {
"x": { "dtype": "float32", "shape": [5], "data": { "kind": "values", "values": [1.0, 2.0, 3.0, 4.0, 5.0] } }
},
"outputs": { "y": { "dtype": "float32", "shape": [5] } }
},
{
"name": "negative_axis_1d_f32",
"provenance": {
"source": "onnxruntime/test/providers/cpu/math/cumprod_test.cc",
"test": "CumProdTest._1DTestNegAxis"
},
"args": { "axis": -1 },
"inputs": {
"x": { "dtype": "float32", "shape": [5], "data": { "kind": "values", "values": [1.0, 2.0, 3.0, 4.0, 5.0] } }
},
"outputs": { "y": { "dtype": "float32", "shape": [5] } }
},
{
"name": "exclusive_1d_f32",
"provenance": {
"source": "onnxruntime/test/providers/cpu/math/cumprod_test.cc",
"test": "CumProdTest._1DTestExclusive"
},
"attrs": { "exclusive": 1 },
"args": { "axis": 0 },
"inputs": {
"x": { "dtype": "float32", "shape": [5], "data": { "kind": "values", "values": [1.0, 2.0, 3.0, 4.0, 5.0] } }
},
"outputs": { "y": { "dtype": "float32", "shape": [5] } }
},
{
"name": "reverse_1d_f32",
"provenance": {
"source": "onnxruntime/test/providers/cpu/math/cumprod_test.cc",
"test": "CumProdTest._1DTestReverse"
},
"attrs": { "reverse": 1 },
"args": { "axis": 0 },
"inputs": {
"x": { "dtype": "float32", "shape": [5], "data": { "kind": "values", "values": [1.0, 2.0, 3.0, 4.0, 5.0] } }
},
"outputs": { "y": { "dtype": "float32", "shape": [5] } }
},
{
"name": "reverse_exclusive_1d_f32",
"provenance": {
"source": "onnxruntime/test/providers/cpu/math/cumprod_test.cc",
"test": "CumProdTest._1DTestReverseExclusive"
},
"attrs": { "exclusive": 1, "reverse": 1 },
"args": { "axis": 0 },
"inputs": {
"x": { "dtype": "float32", "shape": [5], "data": { "kind": "values", "values": [1.0, 2.0, 3.0, 4.0, 5.0] } }
},
"outputs": { "y": { "dtype": "float32", "shape": [5] } }
},
{
"name": "axis0_2d_f32",
"provenance": {
"source": "onnxruntime/test/providers/cpu/math/cumprod_test.cc",
"test": "CumProdTest._2DTestAxis0"
},
"args": { "axis": 0 },
"inputs": {
"x": {
"dtype": "float32",
"shape": [2, 3],
"data": { "kind": "values", "values": [1.0, 2.0, 3.0, 4.0, 5.0, 6.0] }
}
},
"outputs": { "y": { "dtype": "float32", "shape": [2, 3] } }
},
{
"name": "axis1_2d_f32",
"provenance": {
"source": "onnxruntime/test/providers/cpu/math/cumprod_test.cc",
"test": "CumProdTest._2DTestAxis1"
},
"args": { "axis": 1 },
"inputs": {
"x": {
"dtype": "float32",
"shape": [2, 3],
"data": { "kind": "values", "values": [1.0, 2.0, 3.0, 4.0, 5.0, 6.0] }
}
},
"outputs": { "y": { "dtype": "float32", "shape": [2, 3] } }
},
{
"name": "axis2_3d_f32",
"provenance": {
"source": "onnxruntime/test/providers/cpu/math/cumprod_test.cc",
"test": "CumProdTest._3DTestAxis2"
},
"args": { "axis": 2 },
"inputs": {
"x": {
"dtype": "float32",
"shape": [2, 3, 4],
"data": { "kind": "values", "values": { "$ref": "#/fixtureArrays/axis2_3d_f32_input_x" } }
}
},
"outputs": { "y": { "dtype": "float32", "shape": [2, 3, 4] } }
},
{
"name": "axis1_3d_reverse_exclusive_f32",
"provenance": {
"source": "onnxruntime/test/providers/cpu/math/cumprod_test.cc",
"test": "CumProdTest._3DTestAxis1ReverseExclusive"
},
"attrs": { "exclusive": 1, "reverse": 1 },
"args": { "axis": 1 },
"inputs": {
"x": {
"dtype": "float32",
"shape": [2, 3, 4],
"data": { "kind": "values", "values": { "$ref": "#/fixtureArrays/axis2_3d_f32_input_x" } }
}
},
"outputs": { "y": { "dtype": "float32", "shape": [2, 3, 4] } }
},
{
"name": "axis1_3d_reverse_f32",
"provenance": {
"source": "onnxruntime/test/providers/cpu/math/cumprod_test.cc",
"test": "CumProdTest._3DTestAxis1Reverse"
},
"attrs": { "reverse": 1 },
"args": { "axis": 1 },
"inputs": {
"x": {
"dtype": "float32",
"shape": [2, 3, 4],
"data": { "kind": "values", "values": { "$ref": "#/fixtureArrays/axis2_3d_f32_input_x" } }
}
},
"outputs": { "y": { "dtype": "float32", "shape": [2, 3, 4], "tolerance": 0.000001 } }
},
{
"name": "exclusive_single_axis_dim_f32",
"provenance": {
"source": "onnxruntime/test/providers/cpu/math/cumprod_test.cc",
"test": "CumProdTest._1DTestExclusiveAxisHasSingleValue"
},
"attrs": { "exclusive": 1 },
"args": { "axis": 0 },
"inputs": { "x": { "dtype": "float32", "shape": [1, 2], "data": { "kind": "values", "values": [3.0, 4.0] } } },
"outputs": { "y": { "dtype": "float32", "shape": [1, 2] } }
},
{
"name": "ort_exclusive_single_axis_dim_reverse_f32",
"provenance": {
"source": "onnxruntime/test/providers/cpu/math/cumprod_test.cc",
"test": "CumProdTest._1DTestExclusiveAxisHasSingleValue"
},
"attrs": { "exclusive": 1, "reverse": 1 },
"args": { "axis": 0 },
"inputs": { "x": { "dtype": "float32", "shape": [1, 2], "data": { "kind": "values", "values": [3.0, 4.0] } } },
"outputs": { "y": { "dtype": "float32", "shape": [1, 2], "tolerance": 0 } }
},
{
"name": "ort_axis2_3d_reverse_exclusive_f32",
"provenance": {
"source": "onnxruntime/test/providers/cpu/math/cumprod_test.cc",
"test": "CumProdTest._3DTestAxis2ReverseExclusive"
},
"attrs": { "exclusive": 1, "reverse": 1 },
"args": { "axis": 2 },
"inputs": {
"x": {
"dtype": "float32",
"shape": [2, 3, 4],
"data": { "kind": "values", "values": { "$ref": "#/fixtureArrays/axis2_3d_f32_input_x" } }
}
},
"outputs": { "y": { "dtype": "float32", "shape": [2, 3, 4], "tolerance": 0.000001 } }
},
{
"name": "int32_1d",
"provenance": {
"source": "onnxruntime/test/providers/cpu/math/cumprod_test.cc",
"test": "CumProdTest._1DTestInt32"
},
"args": { "axis": 0 },
"inputs": { "x": { "dtype": "int32", "shape": [5], "data": { "kind": "values", "values": [1, 2, 3, 4, 5] } } },
"outputs": { "y": { "dtype": "int32", "shape": [5] } }
},
{
"name": "uint32_1d",
"provenance": {
"source": "onnxruntime/test/providers/cpu/math/cumprod_test.cc",
"test": "CumProdTest._1DTestUint32"
},
"args": { "axis": 0 },
"inputs": { "x": { "dtype": "uint32", "shape": [5], "data": { "kind": "values", "values": [1, 2, 3, 4, 5] } } },
"outputs": { "y": { "dtype": "uint32", "shape": [5] } }
},
{
"name": "f16_axis1",
"provenance": {
"source": "onnxruntime/test/providers/cpu/math/cumprod_test.cc",
"test": "CumProdTest._2DTestAxis1"
},
"args": { "axis": 1 },
"inputs": {
"x": {
"dtype": "float16",
"shape": [2, 4],
"data": { "kind": "values", "values": [1.0, 0.5, -2.0, 3.0, -1.0, -2.0, 0.25, 4.0] }
}
},
"outputs": { "y": { "dtype": "float16", "shape": [2, 4] } },
"tolerance": 0.002
},
{
"name": "ort_spec_example_default",
"provenance": {
"source": "onnxruntime/test/providers/cpu/math/cumprod_test.cc",
"test": "CumProdTest._OnnxSpecExample"
},
"args": { "axis": 0 },
"inputs": { "x": { "dtype": "float32", "shape": [3], "data": { "kind": "values", "values": [1.0, 2.0, 3.0] } } },
"outputs": { "y": { "dtype": "float32", "shape": [3], "tolerance": 0.000001 } }
},
{
"name": "ort_spec_example_exclusive",
"provenance": {
"source": "onnxruntime/test/providers/cpu/math/cumprod_test.cc",
"test": "CumProdTest._OnnxSpecExampleExclusive"
},
"attrs": { "exclusive": 1 },
"args": { "axis": 0 },
"inputs": { "x": { "dtype": "float32", "shape": [3], "data": { "kind": "values", "values": [1.0, 2.0, 3.0] } } },
"outputs": { "y": { "dtype": "float32", "shape": [3], "tolerance": 0.000001 } }
},
{
"name": "ort_spec_example_reverse",
"provenance": {
"source": "onnxruntime/test/providers/cpu/math/cumprod_test.cc",
"test": "CumProdTest._OnnxSpecExampleReverse"
},
"attrs": { "reverse": 1 },
"args": { "axis": 0 },
"inputs": { "x": { "dtype": "float32", "shape": [3], "data": { "kind": "values", "values": [1.0, 2.0, 3.0] } } },
"outputs": { "y": { "dtype": "float32", "shape": [3], "tolerance": 0.000001 } }
},
{
"name": "ort_spec_example_reverse_exclusive",
"provenance": {
"source": "onnxruntime/test/providers/cpu/math/cumprod_test.cc",
"test": "CumProdTest._OnnxSpecExampleReverseExclusive"
},
"attrs": { "exclusive": 1, "reverse": 1 },
"args": { "axis": 0 },
"inputs": { "x": { "dtype": "float32", "shape": [3], "data": { "kind": "values", "values": [1.0, 2.0, 3.0] } } },
"outputs": { "y": { "dtype": "float32", "shape": [3], "tolerance": 0.000001 } }
},
{
"name": "ort_exclusive_axis_dim_one_forward",
"provenance": {
"source": "onnxruntime/test/providers/cpu/math/cumprod_test.cc",
"test": "CumProdTest._1DTestExclusiveAxisHasSingleValue"
},
"attrs": { "exclusive": 1 },
"args": { "axis": 0 },
"inputs": { "x": { "dtype": "float32", "shape": [1, 2], "data": { "kind": "values", "values": [3.0, 4.0] } } },
"outputs": { "y": { "dtype": "float32", "shape": [1, 2], "tolerance": 0.000001 } }
},
{
"name": "ort_exclusive_axis_dim_one_reverse",
"provenance": {
"source": "onnxruntime/test/providers/cpu/math/cumprod_test.cc",
"test": "CumProdTest._1DTestExclusiveAxisHasSingleValue"
},
"attrs": { "exclusive": 1, "reverse": 1 },
"args": { "axis": 0 },
"inputs": { "x": { "dtype": "float32", "shape": [1, 2], "data": { "kind": "values", "values": [3.0, 4.0] } } },
"outputs": { "y": { "dtype": "float32", "shape": [1, 2], "tolerance": 0.000001 } }
},
{
"name": "ort_1d_int32",
"provenance": {
"source": "onnxruntime/test/providers/cpu/math/cumprod_test.cc",
"test": "CumProdTest._1DTestInt32"
},
"args": { "axis": 0 },
"inputs": { "x": { "dtype": "int32", "shape": [5], "data": { "kind": "values", "values": [1, 2, 3, 4, 5] } } },
"outputs": { "y": { "dtype": "int32", "shape": [5], "tolerance": 0 } }
},
{
"name": "ort_1d_uint32",
"provenance": {
"source": "onnxruntime/test/providers/cpu/math/cumprod_test.cc",
"test": "CumProdTest._1DTestUint32"
},
"args": { "axis": 0 },
"inputs": { "x": { "dtype": "uint32", "shape": [5], "data": { "kind": "values", "values": [1, 2, 3, 4, 5] } } },
"outputs": { "y": { "dtype": "uint32", "shape": [5], "tolerance": 0 } }
},
{
"name": "ort_3d_axis0_f32",
"provenance": {
"source": "onnxruntime/test/providers/cpu/math/cumprod_test.cc",
"test": "CumProdTest._3DTestAxis0"
},
"args": { "axis": 0 },
"inputs": {
"x": { "dtype": "float32", "shape": [2, 3, 4], "data": { "kind": "linspace", "start": 1.0, "end": 24.0 } }
},
"outputs": { "y": { "dtype": "float32", "shape": [2, 3, 4], "tolerance": 0.000001 } }
},
{
"name": "ort_3d_axis1_f32",
"provenance": {
"source": "onnxruntime/test/providers/cpu/math/cumprod_test.cc",
"test": "CumProdTest._3DTestAxis1"
},
"args": { "axis": 1 },
"inputs": {
"x": { "dtype": "float32", "shape": [2, 3, 4], "data": { "kind": "linspace", "start": 1.0, "end": 24.0 } }
},
"outputs": { "y": { "dtype": "float32", "shape": [2, 3, 4], "tolerance": 0.000001 } }
},
{
"name": "ort_3d_axis0_exclusive_f32",
"provenance": {
"source": "onnxruntime/test/providers/cpu/math/cumprod_test.cc",
"test": "CumProdTest._3DTestAxis0Exclusive"
},
"attrs": { "exclusive": 1 },
"args": { "axis": 0 },
"inputs": {
"x": { "dtype": "float32", "shape": [2, 3, 4], "data": { "kind": "linspace", "start": 1.0, "end": 24.0 } }
},
"outputs": { "y": { "dtype": "float32", "shape": [2, 3, 4], "tolerance": 0.000001 } }
},
{
"name": "ort_3d_axis1_exclusive_f32",
"provenance": {
"source": "onnxruntime/test/providers/cpu/math/cumprod_test.cc",
"test": "CumProdTest._3DTestAxis1Exclusive"
},
"attrs": { "exclusive": 1 },
"args": { "axis": 1 },
"inputs": {
"x": { "dtype": "float32", "shape": [2, 3, 4], "data": { "kind": "linspace", "start": 1.0, "end": 24.0 } }
},
"outputs": { "y": { "dtype": "float32", "shape": [2, 3, 4], "tolerance": 0.000001 } }
},
{
"name": "ort_3d_axis0_reverse_f32",
"provenance": {
"source": "onnxruntime/test/providers/cpu/math/cumprod_test.cc",
"test": "CumProdTest._3DTestAxis0Reverse"
},
"attrs": { "reverse": 1 },
"args": { "axis": 0 },
"inputs": {
"x": { "dtype": "float32", "shape": [2, 3, 4], "data": { "kind": "linspace", "start": 1.0, "end": 24.0 } }
},
"outputs": { "y": { "dtype": "float32", "shape": [2, 3, 4], "tolerance": 0.000001 } }
},
{
"name": "ort_3d_axis2_reverse_f32",
"provenance": {
"source": "onnxruntime/test/providers/cpu/math/cumprod_test.cc",
"test": "CumProdTest._3DTestAxis2Reverse"
},
"attrs": { "reverse": 1 },
"args": { "axis": 2 },
"inputs": {
"x": { "dtype": "float32", "shape": [2, 3, 4], "data": { "kind": "linspace", "start": 1.0, "end": 24.0 } }
},
"outputs": { "y": { "dtype": "float32", "shape": [2, 3, 4], "tolerance": 0.000001 } }
},
{
"name": "ort_3d_axis0_reverse_exclusive_f32",
"provenance": {
"source": "onnxruntime/test/providers/cpu/math/cumprod_test.cc",
"test": "CumProdTest._3DTestAxis0ReverseExclusive"
},
"attrs": { "exclusive": 1, "reverse": 1 },
"args": { "axis": 0 },
"inputs": {
"x": { "dtype": "float32", "shape": [2, 3, 4], "data": { "kind": "linspace", "start": 1.0, "end": 24.0 } }
},
"outputs": { "y": { "dtype": "float32", "shape": [2, 3, 4], "tolerance": 0.000001 } }
},
{
"name": "ort_3d_axis1_reverse_exclusive_f32",
"provenance": {
"source": "onnxruntime/test/providers/cpu/math/cumprod_test.cc",
"test": "CumProdTest._3DTestAxis1ReverseExclusive"
},
"attrs": { "exclusive": 1, "reverse": 1 },
"args": { "axis": 1 },
"inputs": {
"x": { "dtype": "float32", "shape": [2, 3, 4], "data": { "kind": "linspace", "start": 1.0, "end": 24.0 } }
},
"outputs": { "y": { "dtype": "float32", "shape": [2, 3, 4], "tolerance": 0.000001 } }
},
{
"name": "onnx_backend_cumprod_1d_f32_projection",
"provenance": {
"source": "cmake/external/onnx/onnx/backend/test/data/node/test_cumprod_1d",
"notes": "Official ONNX backend tensor is float64; projected to float32 to match this framework dtype support."
},
"args": { "axis": 0 },
"inputs": {
"x": { "dtype": "float32", "shape": [5], "data": { "kind": "values", "values": [1.0, 2.0, 3.0, 4.0, 5.0] } }
},
"outputs": { "y": { "dtype": "float32", "shape": [5], "tolerance": 0.00001 } }
},
{
"name": "onnx_backend_cumprod_1d_exclusive_f32_projection",
"provenance": {
"source": "cmake/external/onnx/onnx/backend/test/data/node/test_cumprod_1d_exclusive",
"notes": "Official ONNX backend tensor is float64; projected to float32 to match this framework dtype support."
},
"args": { "axis": 0 },
"inputs": {
"x": { "dtype": "float32", "shape": [5], "data": { "kind": "values", "values": [1.0, 2.0, 3.0, 4.0, 5.0] } }
},
"outputs": { "y": { "dtype": "float32", "shape": [5], "tolerance": 0.00001 } },
"attrs": { "exclusive": 1 }
},
{
"name": "onnx_backend_cumprod_1d_int32_exclusive",
"provenance": { "source": "cmake/external/onnx/onnx/backend/test/data/node/test_cumprod_1d_int32_exclusive" },
"args": { "axis": 0 },
"inputs": { "x": { "dtype": "int32", "shape": [5], "data": { "kind": "values", "values": [1, 2, 3, 4, 5] } } },
"outputs": { "y": { "dtype": "int32", "shape": [5], "tolerance": 0 } },
"attrs": { "exclusive": 1 }
},
{
"name": "onnx_backend_cumprod_1d_reverse_f32_projection",
"provenance": {
"source": "cmake/external/onnx/onnx/backend/test/data/node/test_cumprod_1d_reverse",
"notes": "Official ONNX backend tensor is float64; projected to float32 to match this framework dtype support."
},
"args": { "axis": 0 },
"inputs": {
"x": { "dtype": "float32", "shape": [5], "data": { "kind": "values", "values": [1.0, 2.0, 3.0, 4.0, 5.0] } }
},
"outputs": { "y": { "dtype": "float32", "shape": [5], "tolerance": 0.00001 } },
"attrs": { "reverse": 1 }
},
{
"name": "onnx_backend_cumprod_1d_reverse_exclusive_f32_projection",
"provenance": {
"source": "cmake/external/onnx/onnx/backend/test/data/node/test_cumprod_1d_reverse_exclusive",
"notes": "Official ONNX backend tensor is float64; projected to float32 to match this framework dtype support."
},
"args": { "axis": 0 },
"inputs": {
"x": { "dtype": "float32", "shape": [5], "data": { "kind": "values", "values": [1.0, 2.0, 3.0, 4.0, 5.0] } }
},
"outputs": { "y": { "dtype": "float32", "shape": [5], "tolerance": 0.00001 } },
"attrs": { "exclusive": 1, "reverse": 1 }
},
{
"name": "onnx_backend_cumprod_2d_axis_0_f32_projection",
"provenance": {
"source": "cmake/external/onnx/onnx/backend/test/data/node/test_cumprod_2d_axis_0",
"notes": "Official ONNX backend tensor is float64; projected to float32 to match this framework dtype support."
},
"args": { "axis": 0 },
"inputs": {
"x": {
"dtype": "float32",
"shape": [2, 3],
"data": { "kind": "values", "values": [1.0, 2.0, 3.0, 4.0, 5.0, 6.0] }
}
},
"outputs": { "y": { "dtype": "float32", "shape": [2, 3], "tolerance": 0.00001 } }
},
{
"name": "onnx_backend_cumprod_2d_axis_1_f32_projection",
"provenance": {
"source": "cmake/external/onnx/onnx/backend/test/data/node/test_cumprod_2d_axis_1",
"notes": "Official ONNX backend tensor is float64; projected to float32 to match this framework dtype support."
},
"args": { "axis": 1 },
"inputs": {
"x": {
"dtype": "float32",
"shape": [2, 3],
"data": { "kind": "values", "values": [1.0, 2.0, 3.0, 4.0, 5.0, 6.0] }
}
},
"outputs": { "y": { "dtype": "float32", "shape": [2, 3], "tolerance": 0.00001 } }
},
{
"name": "onnx_backend_cumprod_2d_int32",
"provenance": { "source": "cmake/external/onnx/onnx/backend/test/data/node/test_cumprod_2d_int32" },
"args": { "axis": 0 },
"inputs": {
"x": { "dtype": "int32", "shape": [2, 3], "data": { "kind": "values", "values": [1, 2, 3, 4, 5, 6] } }
},
"outputs": { "y": { "dtype": "int32", "shape": [2, 3], "tolerance": 0 } }
},
{
"name": "onnx_backend_cumprod_2d_negative_axis_f32_projection",
"provenance": {
"source": "cmake/external/onnx/onnx/backend/test/data/node/test_cumprod_2d_negative_axis",
"notes": "Official ONNX backend tensor is float64; projected to float32 to match this framework dtype support."
},
"args": { "axis": -1 },
"inputs": {
"x": {
"dtype": "float32",
"shape": [2, 3],
"data": { "kind": "values", "values": [1.0, 2.0, 3.0, 4.0, 5.0, 6.0] }
}
},
"outputs": { "y": { "dtype": "float32", "shape": [2, 3], "tolerance": 0.00001 } }
},
{
"name": "ort_2d_axis0_exclusive_f32",
"provenance": {
"source": "onnxruntime/test/providers/cpu/math/cumprod_test.cc",
"test": "CumProdTest._2DTestExclusiveAxis0"
},
"attrs": { "exclusive": 1 },
"args": { "axis": 0 },
"inputs": {
"x": {
"dtype": "float32",
"shape": [2, 3],
"data": { "kind": "values", "values": [1.0, 2.0, 3.0, 4.0, 5.0, 6.0] }
}
},
"outputs": { "y": { "dtype": "float32", "shape": [2, 3], "tolerance": 0.000001 } }
},
{
"name": "ort_2d_axis1_exclusive_f32",
"provenance": {
"source": "onnxruntime/test/providers/cpu/math/cumprod_test.cc",
"test": "CumProdTest._2DTestExclusiveAxis1"
},
"attrs": { "exclusive": 1 },
"args": { "axis": 1 },
"inputs": {
"x": {
"dtype": "float32",
"shape": [2, 3],
"data": { "kind": "values", "values": [1.0, 2.0, 3.0, 4.0, 5.0, 6.0] }
}
},
"outputs": { "y": { "dtype": "float32", "shape": [2, 3], "tolerance": 0.000001 } }
},
{
"name": "ort_3d_axis2_exclusive_f32",
"provenance": {
"source": "onnxruntime/test/providers/cpu/math/cumprod_test.cc",
"test": "CumProdTest._3DTestAxis2Exclusive"
},
"attrs": { "exclusive": 1 },
"args": { "axis": 2 },
"inputs": {
"x": {
"dtype": "float32",
"shape": [2, 3, 4],
"data": { "kind": "values", "values": { "$ref": "#/fixtureArrays/axis2_3d_f32_input_x" } }
}
},
"outputs": { "y": { "dtype": "float32", "shape": [2, 3, 4], "tolerance": 0.000001 } }
},
{
"name": "zero_propagation_axis1_f32",
"provenance": {
"source": "onnxruntime/test/providers/cpu/math/cumprod_test.cc",
"notes": "Additional CumProd edge: zeros should only zero subsequent inclusive products along the selected axis."
},
"args": { "axis": 1 },
"inputs": {
"x": {
"dtype": "float32",
"shape": [2, 4],
"data": { "kind": "values", "values": [2.0, 0.0, 3.0, 4.0, -1.0, 2.0, 0.0, 5.0] }
}
},
"outputs": { "y": { "dtype": "float32", "shape": [2, 4], "tolerance": 0 } }
},
{
"name": "zero_reverse_exclusive_axis1_f32",
"provenance": {
"source": "onnxruntime/test/providers/cpu/math/cumprod_test.cc",
"notes": "Additional reverse/exclusive zero-propagation case not covered by ORT's positive-only examples."
},
"attrs": { "exclusive": 1, "reverse": 1 },
"args": { "axis": 1 },
"inputs": {
"x": {
"dtype": "float32",
"shape": [2, 4],
"data": { "kind": "values", "values": [2.0, 0.0, 3.0, 4.0, -1.0, 2.0, 0.0, 5.0] }
}
},
"outputs": { "y": { "dtype": "float32", "shape": [2, 4], "tolerance": 0 } }
},
{
"name": "wg_scan_axis1_pow2_f32",
"provenance": {
"notes": "Power-of-two values keep every partial product exact under any association; exercises the workgroup row-scan variant."
},
"args": { "axis": 1 },
"inputs": {
"x": { "dtype": "float32", "shape": [8, 64], "data": { "kind": "cycle", "values": [1.0, 2.0, 1.0, 0.5] } }
},
"outputs": { "y": { "dtype": "float32", "shape": [8, 64], "tolerance": 0 } }
},
{
"name": "wg_scan_zero_propagation_f32",
"provenance": {
"notes": "Zeros mid-row must zero all later (inclusive) products within the row but not cross row boundaries."
},
"args": { "axis": 1 },
"inputs": {
"x": {
"dtype": "float32",
"shape": [2, 80],
"data": { "kind": "cycle", "values": [2.0, 1.0, 0.5, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0] }
}
},
"outputs": { "y": { "dtype": "float32", "shape": [2, 80], "tolerance": 0 } }
},
{
"name": "wg_scan_zero_reverse_f32",
"provenance": {
"notes": "Reverse zero-propagation through the workgroup row-scan: zeros propagate toward lower indices."
},
"attrs": { "reverse": 1 },
"args": { "axis": 1 },
"inputs": {
"x": {
"dtype": "float32",
"shape": [2, 80],
"data": { "kind": "cycle", "values": [2.0, 1.0, 0.5, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0] }
}
},
"outputs": { "y": { "dtype": "float32", "shape": [2, 80], "tolerance": 0 } }
},
{
"name": "wg_scan_exclusive_pow2_f32",
"provenance": { "notes": "Exclusive workgroup row-scan; power-of-two data stays exact." },
"attrs": { "exclusive": 1 },
"args": { "axis": 1 },
"inputs": { "x": { "dtype": "float32", "shape": [4, 64], "data": { "kind": "cycle", "values": [0.5, 2.0] } } },
"outputs": { "y": { "dtype": "float32", "shape": [4, 64], "tolerance": 0 } }
},
{
"name": "wg_scan_multichunk_pow2_f32",
"provenance": {
"notes": "Axis length 600 forces the chunk-carry path (3 chunks of 256) in the workgroup row-scan."
},
"args": { "axis": 1 },
"inputs": { "x": { "dtype": "float32", "shape": [2, 600], "data": { "kind": "cycle", "values": [2.0, 0.5] } } },
"outputs": { "y": { "dtype": "float32", "shape": [2, 600], "tolerance": 0 } }
},
{
"name": "wg_scan_axis1_u32_cycle",
"provenance": { "notes": "uint32 workgroup row-scan; products stay within 2^16 so no wrap, exact." },
"args": { "axis": 1 },
"inputs": { "x": { "dtype": "uint32", "shape": [2, 64], "data": { "kind": "cycle", "values": [1, 1, 1, 2] } } },
"outputs": { "y": { "dtype": "uint32", "shape": [2, 64], "tolerance": 0 } }
},
{
"name": "wg_scan_axis1_int32_cycle_vec4",
"provenance": {
"notes": "An int32 workgroup row scan over a vec4-aligned axis checks the signed multiplicative identity. A five-value cycle over 64 columns leaves each row at a different phase, and products stay below 2^13."
},
"args": { "axis": 1 },
"inputs": { "x": { "dtype": "int32", "shape": [3, 64], "data": { "kind": "cycle", "values": [1, 2, -1, 1, 1] } } },
"outputs": { "y": { "dtype": "int32", "shape": [3, 64], "tolerance": 0 } }
},
{
"name": "wg_scan_reverse_exclusive_int32",
"provenance": {
"notes": "Reverse+exclusive int32 workgroup row-scan; products bounded by 2^12, sign flips via -1."
},
"attrs": { "exclusive": 1, "reverse": 1 },
"args": { "axis": 1 },
"inputs": { "x": { "dtype": "int32", "shape": [2, 48], "data": { "kind": "cycle", "values": [1, 2, -1, 1] } } },
"outputs": { "y": { "dtype": "int32", "shape": [2, 48], "tolerance": 0 } }
},
{
"name": "wg_scan_axis1_f16_pow2",
"provenance": { "notes": "f16 workgroup row-scan; power-of-two products within f16 range stay exact." },
"args": { "axis": 1 },
"inputs": {
"x": { "dtype": "float16", "shape": [2, 40], "data": { "kind": "cycle", "values": [1.0, 2.0, 1.0, 0.5] } }
},
"outputs": { "y": { "dtype": "float16", "shape": [2, 40], "tolerance": 0 } }
},
{
"name": "thread_rows_axis0_pow2_f32",
"provenance": {
"notes": "Wide-inner axis-0 cumprod exercising the thread-per-row serial variant (bit-identical accumulation order to the fallback)."
},
"args": { "axis": 0 },
"inputs": {
"x": {
"dtype": "float32",
"shape": [8, 2048],
"data": { "kind": "cycle", "values": [1.0, 2.0, 1.0, 0.5, 1.0, 1.0, 2.0, 1.0] }
}
},
"outputs": { "y": { "dtype": "float32", "shape": [8, 2048], "tolerance": 0 } }
},
{
"name": "thread_rows_axis1_3d_reverse_exclusive_f32",
"provenance": { "notes": "3-D middle-axis reverse+exclusive coverage for the thread-per-row cumprod variant." },
"attrs": { "exclusive": 1, "reverse": 1 },
"args": { "axis": 1 },
"inputs": {
"x": { "dtype": "float32", "shape": [4, 16, 512], "data": { "kind": "cycle", "values": [1.0, 0.5, 2.0, 1.0] } }
},
"outputs": { "y": { "dtype": "float32", "shape": [4, 16, 512], "tolerance": 0 } }
},
{
"name": "f32_normal_inputs_subnormal_cumulative_product_gpu_gap",
"skipGpu": {
"category": "permanent",
"reason": "Portable WGSL floating-point semantics do not guarantee preservation of the subnormal values required by this fixture. Backend evidence: WebGPU/Metal flushes subnormals to zero in f32; bit-exact subnormal preservation is unattainable on GPU."
},
"provenance": {
"source": "onnxruntime/test/providers/cpu/math/cumprod_test.cc",
"test": "CumProdTest._2DTestAxis1",
"notes": "Normal float32 inputs can produce valid subnormal cumulative products; flushing the intermediate product zeroes the rest of the row."
},
"args": { "axis": 1 },
"inputs": {
"x": {
"dtype": "float32",
"shape": [2, 3],
"data": { "kind": "values", "values": [1e-20, 1e-20, 2.0, -1e-20, 1e-20, 2.0] }
}
},
"outputs": {
"y": {
"dtype": "float32",
"shape": [2, 3],
"tolerance": 0,
"data": { "kind": "values", "values": [1e-20, 1e-40, 2e-40, -1e-20, -1e-40, -2e-40] }
}
}
},
{
"name": "f32_normal_inputs_subnormal_reverse_exclusive_product_gpu_gap",
"skipGpu": {
"category": "permanent",
"reason": "Portable WGSL floating-point semantics do not guarantee preservation of the subnormal values required by this fixture. Backend evidence: WebGPU/Metal flushes subnormals to zero in f32; bit-exact subnormal preservation is unattainable on GPU."
},
"provenance": {
"source": "onnxruntime/test/providers/cpu/math/cumprod_test.cc",
"test": "CumProdTest._1DTestReverseExclusive",
"notes": "Reverse-exclusive CumProd should also preserve subnormal cumulative products formed from normal inputs."
},
"attrs": { "exclusive": 1, "reverse": 1 },
"args": { "axis": 0 },
"inputs": {
"x": { "dtype": "float32", "shape": [4], "data": { "kind": "values", "values": [2.0, 1e-20, 1e-20, 1.0] } }
},
"outputs": {
"y": {
"dtype": "float32",
"shape": [4],
"tolerance": 0,
"data": { "kind": "values", "values": [1e-40, 1e-20, 1.0, 1.0] }
}
}
},
{
"name": "empty_input_zero_dim",
"args": { "axis": 0 },
"inputs": { "x": { "dtype": "float32", "shape": [0], "data": { "kind": "values", "values": [] } } },
"outputs": { "y": { "dtype": "float32", "shape": [0], "tolerance": 0 } }
},
{
"name": "clean_f16_last_axis_dim48_wg_scan",
"provenance": {
"notes": "f16 innermost-axis cumprod, dim=48 (>32, %4==0) selects wg_row_scan (no f16 vec4 path; accType=f32). Realistic f16 model doing a cumulative product over the last dim; near-1 pow2-friendly values keep the f32-accumulate-then-f16-store result within f16 tolerance of the f64 reference."
},
"args": { "axis": 1 },
"inputs": {
"x": {
"dtype": "float16",
"shape": [4, 48],
"data": { "kind": "cycle", "values": [1.0, 0.5, 2.0, 1.0, 1.0, 0.5, 2.0, 1.0] }
}
},
"outputs": { "y": { "dtype": "float16", "shape": [4, 48], "tolerance": 0.01 } }
},
{
"name": "clean_f32_last_axis_nonmult4_dim50_scalar",
"provenance": {
"notes": "f32 innermost-axis cumprod, dim=50 (>32 but NOT a multiple of 4) fails the wg_row_scan_vec4 dim%4==0 gate and demotes to the f32 scalar wg_row_scan subgroup path, which the existing tests never exercise for a long non-aligned f32 row."
},
"args": { "axis": 1 },
"inputs": {
"x": {
"dtype": "float32",
"shape": [8, 50],
"data": { "kind": "cycle", "values": [1.0, 2.0, 0.5, 1.0, 1.0, 0.5, 2.0, 1.0, 0.5, 2.0] }
}
},
"outputs": { "y": { "dtype": "float32", "shape": [8, 50], "tolerance": 0 } }
},
{
"name": "clean_rank4_middle_axis_reverse_f32",
"provenance": {
"notes": "Rank-4 cumprod over a NON-innermost (middle) axis with reverse=1 exercises the thread_row_scan outer/dim/inner index decomposition that the sweep flagged as untested for ranks 4-6. inner=8*4=32 != 1 so wg paths are skipped; bit-identical serial accumulation to the reference."
},
"attrs": { "reverse": 1 },
"args": { "axis": 1 },
"inputs": {
"x": {
"dtype": "float32",
"shape": [2, 3, 8, 4],
"data": { "kind": "cycle", "values": [1.0, 2.0, 0.5, 1.0, 1.0, 0.5, 2.0, 1.0] }
}
},
"outputs": { "y": { "dtype": "float32", "shape": [2, 3, 8, 4], "tolerance": 0 } }
},
{
"name": "clean_f16_axis0_thread_row_scan",
"provenance": {
"notes": "f16 cumprod over axis 0 (inner=32 != 1) routes through the thread_row_scan f16 branch (usesF16, accType=f32, scalar() store cast) that no existing f16 case covers — all prior f16 coverage is the innermost-axis wg path."
},
"args": { "axis": 0 },
"inputs": {
"x": {
"dtype": "float16",
"shape": [6, 32],
"data": { "kind": "cycle", "values": [1.0, 0.5, 2.0, 1.0, 1.0, 2.0, 0.5, 1.0] }
}
},
"outputs": { "y": { "dtype": "float16", "shape": [6, 32], "tolerance": 0.01 } }
},
{
"name": "empty_scan_axis_zero_dim",
"args": { "axis": 1 },
"inputs": { "x": { "dtype": "float32", "shape": [4, 0, 3], "data": { "kind": "values", "values": [] } } },
"outputs": { "y": { "dtype": "float32", "shape": [4, 0, 3], "tolerance": 0 } }
},
{
"name": "exclusive_nonmult4_dim_large_wg_row_scan",
"attrs": { "exclusive": 1 },
"args": { "axis": 1 },
"inputs": {
"x": {
"dtype": "float32",
"shape": [4, 4098],
"data": { "kind": "cycle", "values": [1.0, 2.0, 0.5, 1.0, 1.0, 0.5, 2.0, 1.0, 0.5, 2.0] }
}
},
"outputs": { "y": { "dtype": "float32", "shape": [4, 4098], "tolerance": 0.0001 } }
},
{
"name": "reverse_exclusive_nonmult4_dim_wg_row_scan",
"attrs": { "exclusive": 1, "reverse": 1 },
"args": { "axis": 1 },
"inputs": {
"x": {
"dtype": "float32",
"shape": [4, 4098],
"data": { "kind": "cycle", "values": [1.0, 2.0, 0.5, 1.0, 1.0, 0.5, 2.0, 1.0, 0.5, 2.0] }
}
},
"outputs": { "y": { "dtype": "float32", "shape": [4, 4098], "tolerance": 0.0001 } }
},
{
"name": "alignment_mismatch_dim4094_axis1_scalar",
"provenance": {
"notes": "Compact correctness sibling for the unaligned row-scan benchmark cliff: dim=4094 prevents vec4-aligned tails while still using the large-row workgroup scan path."
},
"args": { "axis": 1 },
"inputs": {
"x": { "dtype": "float32", "shape": [2, 4094], "data": { "kind": "cycle", "values": [1.0, 1.001, 0.999, 1.0] } }
},
"outputs": { "y": { "dtype": "float32", "shape": [2, 4094], "tolerance": 0.001 } }
},
{
"name": "thread_row_scan_f16_inner_nonunit_exclusive_reverse",
"attrs": { "exclusive": 1, "reverse": 1 },
"args": { "axis": 1 },
"inputs": {
"x": {
"dtype": "float16",
"shape": [3, 8, 4],
"data": { "kind": "cycle", "values": [1.0, 0.5, 2.0, 1.0, 1.0, 2.0, 0.5, 1.0] }
}
},
"outputs": { "y": { "dtype": "float16", "shape": [3, 8, 4], "tolerance": 0.01 } }
},
{
"name": "rank7_last_axis",
"args": { "axis": -1 },
"inputs": {
"x": {
"dtype": "float32",
"shape": [2, 1, 2, 1, 2, 1, 3],
"data": { "kind": "cycle", "values": [1.0, 0.5, 1.5, 0.75] }
}
},
"outputs": { "y": { "dtype": "float32", "shape": [2, 1, 2, 1, 2, 1, 3], "tolerance": 0.000001 } }
},
{
"name": "rank8_last_axis",
"args": { "axis": -1 },
"inputs": {
"x": {
"dtype": "float32",
"shape": [2, 1, 2, 1, 2, 1, 2, 3],
"data": { "kind": "cycle", "values": [1.0, -0.5, 2.0, 0.25] }
}
},
"outputs": { "y": { "dtype": "float32", "shape": [2, 1, 2, 1, 2, 1, 2, 3], "tolerance": 0.000001 } }
}
]
}