Download build/webgpu/test.json from webgpu-kernels/ai.onnx.ScatterND: direct link, hf CLI and curl.
- Browser
- Download file 71.7 kB
-
https://huggingface.co/kernels/webgpu-kernels/ai.onnx.ScatterND/resolve/v1/build/webgpu/test.json
- Command line
-
hf download hf://webgpu-kernels/ai.onnx.ScatterND@v1/build/webgpu/test.json
-
curl -L -o test.json https://huggingface.co/kernels/webgpu-kernels/ai.onnx.ScatterND/resolve/v1/build/webgpu/test.json
71.7 kB
| { | |
| "fixtureArrays": { | |
| "scatter_nd_data_4x4x4": [1, 2, 3, 4, 5, 6, 7, 8, 8, 7, 6, 5, 4, 3, 2, 1, 1, 2, 3, 4, 5, 6, 7, 8, 8, 7, 6, 5, 4, 3, 2, 1, 8, 7, 6, 5, 4, 3, 2, 1, 1, 2, 3, 4, 5, 6, 7, 8, 8, 7, 6, 5, 4, 3, 2, 1, 1, 2, 3, 4, 5, 6, 7, 8], | |
| "backend_row_slice_updates_input_updates": [5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4], | |
| "ort_reduction_add_slice_duplicates_input_updates": [2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536, 131072, 262144], | |
| "f16_reduction_add_sparse_router_gradient_input_indices": [0, 17, 34, 51, 4, 21, 38, 55, 8, 25, 42, 59, 12, 29, 46, 63, 16, 33, 50, 3, 20, 37, 54, 7, 24, 41, 58, 11, 28, 45, 62, 15, 32, 49, 2, 19, 36, 53, 6, 23, 40, 57, 10, 27, 44, 61, 14, 31, 48, 1, 18, 35, 52, 5, 22, 39, 56, 9, 26, 43, 60, 13, 30, 47] | |
| }, | |
| "cases": [ | |
| { | |
| "name": "dispatch_cliff_batch0_row_update", | |
| "inputs": { | |
| "data": { "dtype": "float32", "shape": [1, 16777219], "data": { "kind": "constant", "value": 1.0 } }, | |
| "indices": { "dtype": "int32", "shape": [1, 1], "data": { "kind": "values", "values": [0] } }, | |
| "updates": { "dtype": "float32", "shape": [1, 16777219], "data": { "kind": "constant", "value": 7.0 } } | |
| }, | |
| "outputs": { "output": { "dtype": "float32", "shape": [1, 16777219], "tolerance": 0 } } | |
| }, | |
| { | |
| "name": "scalar_updates", | |
| "inputs": { | |
| "data": { | |
| "dtype": "float32", | |
| "shape": [3, 3], | |
| "data": { "kind": "values", "values": [0.0, 1.0, 2.0, 10.0, 11.0, 12.0, 20.0, 21.0, 22.0] } | |
| }, | |
| "indices": { "dtype": "int32", "shape": [2, 2], "data": { "kind": "values", "values": [0, 2, 2, 1] } }, | |
| "updates": { "dtype": "float32", "shape": [2], "data": { "kind": "values", "values": [99.0, 77.0] } } | |
| }, | |
| "outputs": { "output": { "dtype": "float32", "shape": [3, 3] } } | |
| }, | |
| { | |
| "name": "row_updates_f16", | |
| "inputs": { | |
| "data": { "dtype": "float16", "shape": [3, 4] }, | |
| "indices": { "dtype": "int32", "shape": [2, 1], "data": { "kind": "values", "values": [2, 0] } }, | |
| "updates": { | |
| "dtype": "float16", | |
| "shape": [2, 4], | |
| "data": { "kind": "values", "values": [9.0, 8.0, 7.0, 6.0, 5.0, 4.0, 3.0, 2.0] } | |
| } | |
| }, | |
| "outputs": { "output": { "dtype": "float16", "shape": [3, 4] } }, | |
| "tolerance": 0.001 | |
| }, | |
| { | |
| "name": "rank5_indices_scalar_updates", | |
| "inputs": { | |
| "data": { | |
| "dtype": "float32", | |
| "shape": [2, 3], | |
| "data": { "kind": "values", "values": [0.0, 1.0, 2.0, 10.0, 11.0, 12.0] } | |
| }, | |
| "indices": { "dtype": "int32", "shape": [1, 1, 1, 1, 2], "data": { "kind": "values", "values": [1, 2] } }, | |
| "updates": { "dtype": "float32", "shape": [1, 1, 1, 1], "data": { "kind": "values", "values": [99.0] } } | |
| }, | |
| "outputs": { "output": { "dtype": "float32", "shape": [2, 3], "tolerance": 0.000001 } } | |
| }, | |
| { | |
| "name": "rank6_indices_scalar_updates", | |
| "inputs": { | |
| "data": { | |
| "dtype": "float32", | |
| "shape": [3, 3], | |
| "data": { "kind": "values", "values": [0.0, 1.0, 2.0, 10.0, 11.0, 12.0, 20.0, 21.0, 22.0] } | |
| }, | |
| "indices": { | |
| "dtype": "int32", | |
| "shape": [1, 1, 1, 1, 2, 2], | |
| "data": { "kind": "values", "values": [0, 2, 2, 0] } | |
| }, | |
| "updates": { | |
| "dtype": "float32", | |
| "shape": [1, 1, 1, 1, 2], | |
| "data": { "kind": "values", "values": [99.0, 77.0] } | |
| } | |
| }, | |
| "outputs": { "output": { "dtype": "float32", "shape": [3, 3], "tolerance": 0.000001 } } | |
| }, | |
| { | |
| "name": "rank6_full_depth_scalar_updates", | |
| "inputs": { | |
| "data": { | |
| "dtype": "float32", | |
| "shape": [1, 2, 1, 2, 1, 3], | |
| "data": { | |
| "kind": "values", | |
| "values": [0.0, 1.0, 2.0, 10.0, 11.0, 12.0, 100.0, 101.0, 102.0, 110.0, 111.0, 112.0] | |
| } | |
| }, | |
| "indices": { | |
| "dtype": "int32", | |
| "shape": [2, 6], | |
| "data": { "kind": "values", "values": [0, 0, 0, 0, 0, 2, 0, 1, 0, 1, 0, 0] } | |
| }, | |
| "updates": { "dtype": "float32", "shape": [2], "data": { "kind": "values", "values": [900.0, 901.0] } } | |
| }, | |
| "outputs": { "output": { "dtype": "float32", "shape": [1, 2, 1, 2, 1, 3], "tolerance": 0.000001 } } | |
| }, | |
| { | |
| "name": "reduction_add_duplicate_indices", | |
| "attrs": { "reduction": "add" }, | |
| "inputs": { | |
| "data": { "dtype": "float32", "shape": [3], "data": { "kind": "values", "values": [10.0, 20.0, 30.0] } }, | |
| "indices": { "dtype": "int32", "shape": [3, 1], "data": { "kind": "values", "values": [1, 1, 2] } }, | |
| "updates": { "dtype": "float32", "shape": [3], "data": { "kind": "values", "values": [2.0, 3.0, 4.0] } } | |
| }, | |
| "outputs": { "output": { "dtype": "float32", "shape": [3], "tolerance": 0.000001 } } | |
| }, | |
| { | |
| "name": "reduction_add_subnormal_duplicate_indices_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: Metal flushes denormals to zero in the ALU, so this reduction's subnormal sum/product result is flushed on GPU; permanent FTZ limitation." | |
| }, | |
| "provenance": { | |
| "source": "onnxruntime/test/providers/cpu/tensor/scatter_nd_op_test.cc", | |
| "test": "ScatterNDOpTest.ScatterND_18_add", | |
| "notes": "Duplicate-index add reduction with finite subnormal scalar updates; valid tiny updates must accumulate to nonzero subnormal outputs." | |
| }, | |
| "attrs": { "reduction": "add" }, | |
| "inputs": { | |
| "data": { "dtype": "float32", "shape": [4], "data": { "kind": "values", "values": [0.0, 0.0, 0.0, 0.0] } }, | |
| "indices": { "dtype": "int32", "shape": [4, 1], "data": { "kind": "values", "values": [1, 1, 3, 3] } }, | |
| "updates": { | |
| "dtype": "float32", | |
| "shape": [4], | |
| "data": { "kind": "values", "values": [1e-40, 1e-40, -1e-40, -1e-40] } | |
| } | |
| }, | |
| "outputs": { "output": { "dtype": "float32", "shape": [4], "tolerance": 1e-44 } } | |
| }, | |
| { | |
| "name": "reduction_mul_normal_inputs_subnormal_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: Metal flushes denormals to zero in the ALU, so this reduction's subnormal sum/product result is flushed on GPU; permanent FTZ limitation." | |
| }, | |
| "provenance": { | |
| "source": "onnxruntime/test/providers/cpu/tensor/scatter_nd_op_test.cc", | |
| "test": "ScatterNDOpTest.ScatterND_18_mul", | |
| "notes": "Duplicate-index mul reduction where tiny normal updates produce a finite subnormal product." | |
| }, | |
| "attrs": { "reduction": "mul" }, | |
| "inputs": { | |
| "data": { "dtype": "float32", "shape": [4], "data": { "kind": "values", "values": [0.0, 1.0, 0.0, 0.0] } }, | |
| "indices": { "dtype": "int32", "shape": [2, 1], "data": { "kind": "values", "values": [1, 1] } }, | |
| "updates": { "dtype": "float32", "shape": [2], "data": { "kind": "values", "values": [1e-20, 1e-20] } } | |
| }, | |
| "outputs": { "output": { "dtype": "float32", "shape": [4], "tolerance": 1e-44 } } | |
| }, | |
| { | |
| "name": "rank6_indices_reduction_add_duplicate_indices", | |
| "attrs": { "reduction": "add" }, | |
| "inputs": { | |
| "data": { "dtype": "float32", "shape": [3], "data": { "kind": "values", "values": [10.0, 20.0, 30.0] } }, | |
| "indices": { "dtype": "int32", "shape": [1, 1, 1, 1, 3, 1], "data": { "kind": "values", "values": [1, 1, 2] } }, | |
| "updates": { | |
| "dtype": "float32", | |
| "shape": [1, 1, 1, 1, 3], | |
| "data": { "kind": "values", "values": [2.0, 3.0, 4.0] } | |
| } | |
| }, | |
| "outputs": { "output": { "dtype": "float32", "shape": [3], "tolerance": 0.000001 } } | |
| }, | |
| { | |
| "name": "rank6_reduction_add_duplicate_indices", | |
| "attrs": { "reduction": "add" }, | |
| "inputs": { | |
| "data": { | |
| "dtype": "float32", | |
| "shape": [1, 1, 1, 1, 1, 4], | |
| "data": { "kind": "values", "values": [0.0, 10.0, 20.0, 30.0] } | |
| }, | |
| "indices": { | |
| "dtype": "int32", | |
| "shape": [3, 6], | |
| "data": { "kind": "values", "values": [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 3] } | |
| }, | |
| "updates": { "dtype": "float32", "shape": [3], "data": { "kind": "values", "values": [2.0, 3.0, 4.0] } } | |
| }, | |
| "outputs": { "output": { "dtype": "float32", "shape": [1, 1, 1, 1, 1, 4], "tolerance": 0.000001 } } | |
| }, | |
| { | |
| "name": "backend_row_slice_updates", | |
| "inputs": { | |
| "data": { | |
| "dtype": "float32", | |
| "shape": [4, 4, 4], | |
| "data": { "kind": "values", "values": { "$ref": "#/fixtureArrays/scatter_nd_data_4x4x4" } } | |
| }, | |
| "indices": { "dtype": "int32", "shape": [2, 1], "data": { "kind": "values", "values": [0, 2] } }, | |
| "updates": { | |
| "dtype": "float32", | |
| "shape": [2, 4, 4], | |
| "data": { "kind": "values", "values": { "$ref": "#/fixtureArrays/backend_row_slice_updates_input_updates" } } | |
| } | |
| }, | |
| "outputs": { "output": { "dtype": "float32", "shape": [4, 4, 4], "tolerance": 0.000001 } } | |
| }, | |
| { | |
| "name": "backend_row_slice_reduction_add_duplicate", | |
| "attrs": { "reduction": "add" }, | |
| "inputs": { | |
| "data": { | |
| "dtype": "float32", | |
| "shape": [4, 4, 4], | |
| "data": { "kind": "values", "values": { "$ref": "#/fixtureArrays/scatter_nd_data_4x4x4" } } | |
| }, | |
| "indices": { "dtype": "int32", "shape": [2, 1], "data": { "kind": "values", "values": [0, 0] } }, | |
| "updates": { | |
| "dtype": "float32", | |
| "shape": [2, 4, 4], | |
| "data": { "kind": "values", "values": { "$ref": "#/fixtureArrays/backend_row_slice_updates_input_updates" } } | |
| } | |
| }, | |
| "outputs": { "output": { "dtype": "float32", "shape": [4, 4, 4], "tolerance": 0.000001 } } | |
| }, | |
| { | |
| "name": "ort_slice_float_rank2", | |
| "provenance": { | |
| "source": "onnxruntime/test/providers/cpu/tensor/scatter_nd_op_test.cc", | |
| "test": "ScatterNDOpTest.ScatterND_slice_float_int64_t" | |
| }, | |
| "inputs": { | |
| "data": { "dtype": "float32", "shape": [2, 2], "data": { "kind": "values", "values": [0.0, 0.1, 0.1, 0.1] } }, | |
| "indices": { "dtype": "int32", "shape": [2, 1], "data": { "kind": "values", "values": [1, 0] } }, | |
| "updates": { "dtype": "float32", "shape": [2, 2], "data": { "kind": "values", "values": [0.2, 0.3, 0.0, 0.1] } } | |
| }, | |
| "outputs": { "output": { "dtype": "float32", "shape": [2, 2], "tolerance": 0.000001 } } | |
| }, | |
| { | |
| "name": "ort_3tensor_int16_slice_update", | |
| "provenance": { | |
| "source": "onnxruntime/test/providers/cpu/tensor/scatter_nd_op_test.cc", | |
| "test": "ScatterNDOpTest.ScatterND_3tensor_int64" | |
| }, | |
| "inputs": { | |
| "data": { | |
| "dtype": "int16", | |
| "shape": [2, 2, 2], | |
| "data": { "kind": "values", "values": [0, 1, 2, 3, 0, 1, 2, 3] } | |
| }, | |
| "indices": { "dtype": "int32", "shape": [1, 1], "data": { "kind": "values", "values": [1] } }, | |
| "updates": { "dtype": "int16", "shape": [1, 2, 2], "data": { "kind": "values", "values": [4, 5, 6, 7] } } | |
| }, | |
| "outputs": { "output": { "dtype": "int16", "shape": [2, 2, 2], "tolerance": 0 } } | |
| }, | |
| { | |
| "name": "ort_batched_index_float_adapted", | |
| "provenance": { | |
| "source": "onnxruntime/test/providers/cpu/tensor/scatter_nd_op_test.cc", | |
| "test": "ScatterNDOpTest.ScatterND_batched_index_int64", | |
| "notes": "A float32 payload exercises the batched-index pattern." | |
| }, | |
| "inputs": { | |
| "data": { "dtype": "float32", "shape": [2, 2], "data": { "kind": "values", "values": [2.0, 3.0, 2.0, 3.0] } }, | |
| "indices": { "dtype": "int32", "shape": [2, 1, 2], "data": { "kind": "values", "values": [0, 0, 0, 1] } }, | |
| "updates": { "dtype": "float32", "shape": [2, 1], "data": { "kind": "values", "values": [0.0, 1.0] } } | |
| }, | |
| "outputs": { "output": { "dtype": "float32", "shape": [2, 2], "tolerance": 0.000001 } } | |
| }, | |
| { | |
| "name": "ort_batched_index_bool", | |
| "provenance": { | |
| "source": "onnxruntime/test/providers/cpu/tensor/scatter_nd_op_test.cc", | |
| "test": "ScatterNDOpTest.ScatterND_batched_index_bool_int64" | |
| }, | |
| "inputs": { | |
| "data": { "dtype": "bool", "shape": [2, 2], "data": { "kind": "values", "values": [0, 1, 0, 1] } }, | |
| "indices": { "dtype": "int32", "shape": [2, 1, 2], "data": { "kind": "values", "values": [0, 0, 0, 1] } }, | |
| "updates": { "dtype": "bool", "shape": [2, 1], "data": { "kind": "values", "values": [1, 0] } } | |
| }, | |
| "outputs": { | |
| "output": { | |
| "dtype": "bool", | |
| "shape": [2, 2], | |
| "data": { "kind": "values", "values": [1, 0, 0, 1] }, | |
| "tolerance": 0 | |
| } | |
| } | |
| }, | |
| { | |
| "name": "ort_sliced_index_float_adapted", | |
| "provenance": { | |
| "source": "onnxruntime/test/providers/cpu/tensor/scatter_nd_op_test.cc", | |
| "test": "ScatterNDOpTest.ScatterND_sliced_index_int64", | |
| "notes": "A float32 payload exercises the sliced-index update pattern." | |
| }, | |
| "inputs": { | |
| "data": { "dtype": "float32", "shape": [2, 2], "data": { "kind": "constant", "value": 0.0 } }, | |
| "indices": { "dtype": "int32", "shape": [2, 1, 1], "data": { "kind": "values", "values": [1, 0] } }, | |
| "updates": { | |
| "dtype": "float32", | |
| "shape": [2, 1, 2], | |
| "data": { "kind": "values", "values": [2.0, 3.0, 0.0, 1.0] } | |
| } | |
| }, | |
| "outputs": { "output": { "dtype": "float32", "shape": [2, 2], "tolerance": 0.000001 } } | |
| }, | |
| { | |
| "name": "ort_uint32_batched_index_depth2", | |
| "provenance": { | |
| "source": "onnxruntime/test/providers/cpu/tensor/scatter_nd_op_test.cc", | |
| "test": "ScatterNDOpTest.ScatterND_batched_3tensor_int64", | |
| "notes": "A compact uint32 ScatterND case uses batched depth-2 indices." | |
| }, | |
| "inputs": { | |
| "data": { | |
| "dtype": "uint32", | |
| "shape": [2, 2, 2], | |
| "data": { "kind": "values", "values": [0, 0, 0, 0, 0, 0, 0, 0] } | |
| }, | |
| "indices": { | |
| "dtype": "int32", | |
| "shape": [2, 2, 2], | |
| "data": { "kind": "values", "values": [0, 1, 1, 0, 0, 0, 1, 1] } | |
| }, | |
| "updates": { | |
| "dtype": "uint32", | |
| "shape": [2, 2, 2], | |
| "data": { "kind": "values", "values": [2, 3, 4, 5, 0, 1, 6, 7] } | |
| } | |
| }, | |
| "outputs": { "output": { "dtype": "uint32", "shape": [2, 2, 2], "tolerance": 0 } } | |
| }, | |
| { | |
| "name": "ort_int8_negative_indices_scalar_updates", | |
| "provenance": { | |
| "source": "onnxruntime/test/providers/cpu/tensor/scatter_nd_op_test.cc", | |
| "test": "ScatterNDOpTest.ScatterND_3tensor_int64", | |
| "notes": "Compact signed-byte scalar-update fixture with negative indices and edge payload values." | |
| }, | |
| "inputs": { | |
| "data": { | |
| "dtype": "int8", | |
| "shape": [2, 2, 2], | |
| "data": { "kind": "values", "values": [0, 0, 2, 3, 4, 0, 6, 7] } | |
| }, | |
| "indices": { "dtype": "int32", "shape": [2, 3], "data": { "kind": "values", "values": [0, 0, 1, -1, 0, -1] } }, | |
| "updates": { "dtype": "int8", "shape": [2], "data": { "kind": "values", "values": [-128, 127] } } | |
| }, | |
| "outputs": { "output": { "dtype": "int8", "shape": [2, 2, 2], "tolerance": 0 } } | |
| }, | |
| { | |
| "name": "empty_indices_zero_width_update_identity", | |
| "provenance": { | |
| "source": "onnxruntime/test/providers/cpu/tensor/scatter_nd_op_test.cc", | |
| "test": "ScatterNDOpTest.ScatterND_empty_indices", | |
| "notes": "Valid empty-index ScatterND identity where both the data suffix and update suffix have zero width." | |
| }, | |
| "inputs": { | |
| "data": { "dtype": "float32", "shape": [2, 0], "data": { "kind": "values", "values": [] } }, | |
| "indices": { "dtype": "int32", "shape": [0, 1], "data": { "kind": "values", "values": [] } }, | |
| "updates": { "dtype": "float32", "shape": [0, 0], "data": { "kind": "values", "values": [] } } | |
| }, | |
| "outputs": { | |
| "output": { "dtype": "float32", "shape": [2, 0], "tolerance": 0, "data": { "kind": "values", "values": [] } } | |
| } | |
| }, | |
| { | |
| "name": "empty_indices_zero_width_reduction_add_identity", | |
| "provenance": { | |
| "notes": "An empty index tensor with a zero-width data suffix leaves the input unchanged under add reduction. The slice path must return without dividing by the zero inner width." | |
| }, | |
| "attrs": { "reduction": "add" }, | |
| "inputs": { | |
| "data": { "dtype": "float32", "shape": [2, 0], "data": { "kind": "values", "values": [] } }, | |
| "indices": { "dtype": "int32", "shape": [0, 1], "data": { "kind": "values", "values": [] } }, | |
| "updates": { "dtype": "float32", "shape": [0, 0], "data": { "kind": "values", "values": [] } } | |
| }, | |
| "outputs": { | |
| "output": { "dtype": "float32", "shape": [2, 0], "tolerance": 0, "data": { "kind": "values", "values": [] } } | |
| } | |
| }, | |
| { | |
| "name": "ort_empty_indices_identity", | |
| "provenance": { | |
| "source": "onnxruntime/test/providers/cpu/tensor/scatter_nd_op_test.cc", | |
| "test": "ScatterNDOpTest.ScatterND_empty_indices" | |
| }, | |
| "inputs": { | |
| "data": { | |
| "dtype": "float32", | |
| "shape": [2, 3], | |
| "data": { "kind": "values", "values": [1.0, 2.0, 3.0, 4.0, 5.0, 6.0] } | |
| }, | |
| "indices": { "dtype": "int32", "shape": [0, 1], "data": { "kind": "values", "values": [] } }, | |
| "updates": { "dtype": "float32", "shape": [0, 3], "data": { "kind": "values", "values": [] } } | |
| }, | |
| "outputs": { "output": { "dtype": "float32", "shape": [2, 3], "tolerance": 0 } } | |
| }, | |
| { | |
| "name": "ort_reduction_add_slice_duplicates", | |
| "provenance": { | |
| "source": "onnxruntime/test/providers/cpu/tensor/scatter_nd_op_test.cc", | |
| "test": "ScatterNDOpTest.ScatterND_18_add" | |
| }, | |
| "attrs": { "reduction": "add" }, | |
| "inputs": { | |
| "data": { | |
| "dtype": "float32", | |
| "shape": [2, 2, 3], | |
| "data": { "kind": "values", "values": [0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1] } | |
| }, | |
| "indices": { "dtype": "int32", "shape": [3, 1], "data": { "kind": "values", "values": [0, 1, 0] } }, | |
| "updates": { | |
| "dtype": "float32", | |
| "shape": [3, 2, 3], | |
| "data": { | |
| "kind": "values", | |
| "values": { "$ref": "#/fixtureArrays/ort_reduction_add_slice_duplicates_input_updates" } | |
| } | |
| } | |
| }, | |
| "outputs": { "output": { "dtype": "float32", "shape": [2, 2, 3], "tolerance": 0.01 } } | |
| }, | |
| { | |
| "name": "ort_reduction_mul_slice_duplicates", | |
| "provenance": { | |
| "source": "onnxruntime/test/providers/cpu/tensor/scatter_nd_op_test.cc", | |
| "test": "ScatterNDOpTest.ScatterND_18_mul" | |
| }, | |
| "attrs": { "reduction": "mul" }, | |
| "inputs": { | |
| "data": { | |
| "dtype": "float32", | |
| "shape": [2, 2, 3], | |
| "data": { "kind": "values", "values": [0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1] } | |
| }, | |
| "indices": { "dtype": "int32", "shape": [3, 1], "data": { "kind": "values", "values": [0, 1, 0] } }, | |
| "updates": { | |
| "dtype": "float32", | |
| "shape": [3, 2, 3], | |
| "data": { | |
| "kind": "values", | |
| "values": { "$ref": "#/fixtureArrays/ort_reduction_add_slice_duplicates_input_updates" } | |
| } | |
| } | |
| }, | |
| "outputs": { "output": { "dtype": "float32", "shape": [2, 2, 3], "tolerance": 0.01 } } | |
| }, | |
| { | |
| "name": "ort_reduction_min_slice_duplicates", | |
| "provenance": { | |
| "source": "onnxruntime/test/providers/cpu/tensor/scatter_nd_op_test.cc", | |
| "test": "ScatterNDOpTest.ScatterND_18_min" | |
| }, | |
| "attrs": { "reduction": "min" }, | |
| "inputs": { | |
| "data": { | |
| "dtype": "float32", | |
| "shape": [2, 2, 3], | |
| "data": { "kind": "values", "values": [0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1] } | |
| }, | |
| "indices": { "dtype": "int32", "shape": [3, 1], "data": { "kind": "values", "values": [0, 1, 0] } }, | |
| "updates": { | |
| "dtype": "float32", | |
| "shape": [3, 2, 3], | |
| "data": { | |
| "kind": "values", | |
| "values": { "$ref": "#/fixtureArrays/ort_reduction_add_slice_duplicates_input_updates" } | |
| } | |
| } | |
| }, | |
| "outputs": { "output": { "dtype": "float32", "shape": [2, 2, 3], "tolerance": 0.000001 } } | |
| }, | |
| { | |
| "name": "ort_reduction_max_slice_duplicates", | |
| "provenance": { | |
| "source": "onnxruntime/test/providers/cpu/tensor/scatter_nd_op_test.cc", | |
| "test": "ScatterNDOpTest.ScatterND_18_max" | |
| }, | |
| "attrs": { "reduction": "max" }, | |
| "inputs": { | |
| "data": { | |
| "dtype": "float32", | |
| "shape": [2, 2, 3], | |
| "data": { "kind": "values", "values": [0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1] } | |
| }, | |
| "indices": { "dtype": "int32", "shape": [3, 1], "data": { "kind": "values", "values": [0, 1, 0] } }, | |
| "updates": { | |
| "dtype": "float32", | |
| "shape": [3, 2, 3], | |
| "data": { | |
| "kind": "values", | |
| "values": { "$ref": "#/fixtureArrays/ort_reduction_add_slice_duplicates_input_updates" } | |
| } | |
| } | |
| }, | |
| "outputs": { "output": { "dtype": "float32", "shape": [2, 2, 3], "tolerance": 0.000001 } } | |
| }, | |
| { | |
| "name": "ort_int32_negative_indices_matrix", | |
| "provenance": { | |
| "source": "onnxruntime/test/providers/cpu/tensor/scatter_nd_op_test.cc", | |
| "test": "ScatterNDOpTest.ScatterND_matrice_int64_int64_neg_indices", | |
| "notes": "A float32 payload and int32 indices exercise the negative-index pattern." | |
| }, | |
| "inputs": { | |
| "data": { "dtype": "float32", "shape": [2, 2], "data": { "kind": "values", "values": [1.0, 1.0, 2.0, 2.0] } }, | |
| "indices": { "dtype": "int32", "shape": [2, 2], "data": { "kind": "values", "values": [0, 0, -1, -1] } }, | |
| "updates": { "dtype": "float32", "shape": [2], "data": { "kind": "values", "values": [0.0, 3.0] } } | |
| }, | |
| "outputs": { "output": { "dtype": "float32", "shape": [2, 2], "tolerance": 0.000001 } } | |
| }, | |
| { | |
| "name": "ort_int32_negative_indices_slice_update_rank3", | |
| "provenance": { | |
| "source": "onnxruntime/test/providers/cpu/tensor/scatter_nd_op_test.cc", | |
| "test": "ScatterNDOpTest.ScatterND_3tensor_int64", | |
| "notes": "A float32 payload and int32 indices exercise a negative-index slice update." | |
| }, | |
| "inputs": { | |
| "data": { | |
| "dtype": "float32", | |
| "shape": [2, 2, 2], | |
| "data": { "kind": "values", "values": [0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0] } | |
| }, | |
| "indices": { "dtype": "int32", "shape": [2, 2], "data": { "kind": "values", "values": [0, -1, -1, 0] } }, | |
| "updates": { | |
| "dtype": "float32", | |
| "shape": [2, 2], | |
| "data": { "kind": "values", "values": [20.0, 21.0, 30.0, 31.0] } | |
| } | |
| }, | |
| "outputs": { "output": { "dtype": "float32", "shape": [2, 2, 2], "tolerance": 0.000001 } } | |
| }, | |
| { | |
| "name": "ort_reduction_mul_rank6_slice_duplicates", | |
| "provenance": { | |
| "source": "onnxruntime/test/providers/cpu/tensor/scatter_nd_op_test.cc", | |
| "test": "ScatterNDOpTest.ScatterND_18_mul_long_shape", | |
| "notes": "A rank-6 tensor with duplicate indices exercises multiply reduction over long slices." | |
| }, | |
| "attrs": { "reduction": "mul" }, | |
| "inputs": { | |
| "data": { | |
| "dtype": "float32", | |
| "shape": [2, 2, 3, 1, 1, 1], | |
| "data": { "kind": "values", "values": [0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1] } | |
| }, | |
| "indices": { "dtype": "int32", "shape": [3, 1], "data": { "kind": "values", "values": [0, 1, 0] } }, | |
| "updates": { | |
| "dtype": "float32", | |
| "shape": [3, 2, 3, 1, 1, 1], | |
| "data": { | |
| "kind": "values", | |
| "values": { "$ref": "#/fixtureArrays/ort_reduction_add_slice_duplicates_input_updates" } | |
| } | |
| } | |
| }, | |
| "outputs": { "output": { "dtype": "float32", "shape": [2, 2, 3, 1, 1, 1], "tolerance": 0.01 } } | |
| }, | |
| { | |
| "name": "ort_reduction_min_updates_win_duplicate_indices", | |
| "provenance": { | |
| "source": "onnxruntime/test/providers/cpu/tensor/scatter_nd_op_test.cc", | |
| "test": "ScatterNDOpTest.ScatterND_18_min", | |
| "notes": "Uses ORT's reduction=min semantics with values chosen so both data and duplicate updates affect the answer." | |
| }, | |
| "attrs": { "reduction": "min" }, | |
| "inputs": { | |
| "data": { "dtype": "float32", "shape": [3], "data": { "kind": "values", "values": [5.0, -1.0, 3.0] } }, | |
| "indices": { "dtype": "int32", "shape": [3, 1], "data": { "kind": "values", "values": [0, 0, 2] } }, | |
| "updates": { "dtype": "float32", "shape": [3], "data": { "kind": "values", "values": [2.0, -4.0, 10.0] } } | |
| }, | |
| "outputs": { "output": { "dtype": "float32", "shape": [3], "tolerance": 0.000001 } } | |
| }, | |
| { | |
| "name": "ort_reduction_max_updates_win_duplicate_indices", | |
| "provenance": { | |
| "source": "onnxruntime/test/providers/cpu/tensor/scatter_nd_op_test.cc", | |
| "test": "ScatterNDOpTest.ScatterND_18_max", | |
| "notes": "Uses ORT's reduction=max semantics with values chosen so both data and duplicate updates affect the answer." | |
| }, | |
| "attrs": { "reduction": "max" }, | |
| "inputs": { | |
| "data": { "dtype": "float32", "shape": [3], "data": { "kind": "values", "values": [-5.0, 1.0, 3.0] } }, | |
| "indices": { "dtype": "int32", "shape": [3, 1], "data": { "kind": "values", "values": [0, 0, 2] } }, | |
| "updates": { "dtype": "float32", "shape": [3], "data": { "kind": "values", "values": [-2.0, 4.0, 2.0] } } | |
| }, | |
| "outputs": { "output": { "dtype": "float32", "shape": [3], "tolerance": 0.000001 } } | |
| }, | |
| { | |
| "name": "onnx_backend_scatternd", | |
| "inputs": { | |
| "data": { | |
| "dtype": "float32", | |
| "shape": [4, 4, 4], | |
| "data": { "kind": "values", "values": { "$ref": "#/fixtureArrays/scatter_nd_data_4x4x4" } } | |
| }, | |
| "indices": { "dtype": "int32", "shape": [2, 1], "data": { "kind": "values", "values": [0, 2] } }, | |
| "updates": { | |
| "dtype": "float32", | |
| "shape": [2, 4, 4], | |
| "data": { "kind": "values", "values": { "$ref": "#/fixtureArrays/backend_row_slice_updates_input_updates" } } | |
| } | |
| }, | |
| "outputs": { "output": { "dtype": "float32", "shape": [4, 4, 4] } }, | |
| "provenance": { | |
| "source": "cmake/external/onnx/onnx/backend/test/data/node/test_scatternd", | |
| "notes": "This WebGPU package stores representable ONNX int64 indices in int32 or uint32 slots." | |
| } | |
| }, | |
| { | |
| "name": "onnx_backend_scatternd_add", | |
| "attrs": { "reduction": "add" }, | |
| "inputs": { | |
| "data": { | |
| "dtype": "float32", | |
| "shape": [4, 4, 4], | |
| "data": { "kind": "values", "values": { "$ref": "#/fixtureArrays/scatter_nd_data_4x4x4" } } | |
| }, | |
| "indices": { "dtype": "int32", "shape": [2, 1], "data": { "kind": "values", "values": [0, 0] } }, | |
| "updates": { | |
| "dtype": "float32", | |
| "shape": [2, 4, 4], | |
| "data": { "kind": "values", "values": { "$ref": "#/fixtureArrays/backend_row_slice_updates_input_updates" } } | |
| } | |
| }, | |
| "outputs": { "output": { "dtype": "float32", "shape": [4, 4, 4] } }, | |
| "provenance": { | |
| "source": "cmake/external/onnx/onnx/backend/test/data/node/test_scatternd_add", | |
| "notes": "This WebGPU package stores representable ONNX int64 indices in int32 or uint32 slots." | |
| } | |
| }, | |
| { | |
| "name": "onnx_backend_scatternd_max", | |
| "attrs": { "reduction": "max" }, | |
| "inputs": { | |
| "data": { | |
| "dtype": "float32", | |
| "shape": [4, 4, 4], | |
| "data": { "kind": "values", "values": { "$ref": "#/fixtureArrays/scatter_nd_data_4x4x4" } } | |
| }, | |
| "indices": { "dtype": "int32", "shape": [2, 1], "data": { "kind": "values", "values": [0, 0] } }, | |
| "updates": { | |
| "dtype": "float32", | |
| "shape": [2, 4, 4], | |
| "data": { "kind": "values", "values": { "$ref": "#/fixtureArrays/backend_row_slice_updates_input_updates" } } | |
| } | |
| }, | |
| "outputs": { "output": { "dtype": "float32", "shape": [4, 4, 4] } }, | |
| "provenance": { | |
| "source": "cmake/external/onnx/onnx/backend/test/data/node/test_scatternd_max", | |
| "notes": "This WebGPU package stores representable ONNX int64 indices in int32 or uint32 slots." | |
| } | |
| }, | |
| { | |
| "name": "onnx_backend_scatternd_min", | |
| "attrs": { "reduction": "min" }, | |
| "inputs": { | |
| "data": { | |
| "dtype": "float32", | |
| "shape": [4, 4, 4], | |
| "data": { "kind": "values", "values": { "$ref": "#/fixtureArrays/scatter_nd_data_4x4x4" } } | |
| }, | |
| "indices": { "dtype": "int32", "shape": [2, 1], "data": { "kind": "values", "values": [0, 0] } }, | |
| "updates": { | |
| "dtype": "float32", | |
| "shape": [2, 4, 4], | |
| "data": { "kind": "values", "values": { "$ref": "#/fixtureArrays/backend_row_slice_updates_input_updates" } } | |
| } | |
| }, | |
| "outputs": { "output": { "dtype": "float32", "shape": [4, 4, 4] } }, | |
| "provenance": { | |
| "source": "cmake/external/onnx/onnx/backend/test/data/node/test_scatternd_min", | |
| "notes": "This WebGPU package stores representable ONNX int64 indices in int32 or uint32 slots." | |
| } | |
| }, | |
| { | |
| "name": "onnx_backend_scatternd_multiply", | |
| "attrs": { "reduction": "mul" }, | |
| "inputs": { | |
| "data": { | |
| "dtype": "float32", | |
| "shape": [4, 4, 4], | |
| "data": { "kind": "values", "values": { "$ref": "#/fixtureArrays/scatter_nd_data_4x4x4" } } | |
| }, | |
| "indices": { "dtype": "int32", "shape": [2, 1], "data": { "kind": "values", "values": [0, 0] } }, | |
| "updates": { | |
| "dtype": "float32", | |
| "shape": [2, 4, 4], | |
| "data": { "kind": "values", "values": { "$ref": "#/fixtureArrays/backend_row_slice_updates_input_updates" } } | |
| } | |
| }, | |
| "outputs": { "output": { "dtype": "float32", "shape": [4, 4, 4] } }, | |
| "provenance": { | |
| "source": "cmake/external/onnx/onnx/backend/test/data/node/test_scatternd_multiply", | |
| "notes": "This WebGPU package stores representable ONNX int64 indices in int32 or uint32 slots." | |
| } | |
| }, | |
| { | |
| "name": "ort_int32_slice_updates_negative_indices_exact_above_float24", | |
| "provenance": { | |
| "source": "onnxruntime/test/providers/cpu/tensor/scatter_nd_op_test.cc", | |
| "test": "ScatterNDOpTest.ScatterND_3tensor_int64", | |
| "notes": "Native int32 projection of ORT's integer slice-update case with negative indices and values above f32's exact integer range." | |
| }, | |
| "inputs": { | |
| "data": { | |
| "dtype": "int32", | |
| "shape": [2, 2, 2], | |
| "data": { "kind": "values", "values": [16777217, 1, 2, 3, 4, 5, -16777217, 7] } | |
| }, | |
| "indices": { "dtype": "int32", "shape": [2, 2], "data": { "kind": "values", "values": [0, 1, -1, 0] } }, | |
| "updates": { | |
| "dtype": "int32", | |
| "shape": [2, 2], | |
| "data": { "kind": "values", "values": [20000001, -20000001, 30000003, -30000003] } | |
| } | |
| }, | |
| "outputs": { "output": { "dtype": "int32", "shape": [2, 2, 2] } } | |
| }, | |
| { | |
| "name": "int32_reduction_add_exact_above_float24", | |
| "provenance": { | |
| "source": "onnxruntime/test/providers/cpu/tensor/scatter_nd_op_test.cc", | |
| "test": "ScatterNDOpTest.ScatterND_18_add", | |
| "notes": "Integer projection of ORT's add-reduction coverage using values above f32's exact integer range." | |
| }, | |
| "attrs": { "reduction": "add" }, | |
| "inputs": { | |
| "data": { "dtype": "int32", "shape": [2], "data": { "kind": "values", "values": [0, 0] } }, | |
| "indices": { "dtype": "int32", "shape": [2, 1], "data": { "kind": "values", "values": [0, 0] } }, | |
| "updates": { "dtype": "int32", "shape": [2], "data": { "kind": "values", "values": [16777217, 1] } } | |
| }, | |
| "outputs": { "output": { "dtype": "int32", "shape": [2] } } | |
| }, | |
| { | |
| "name": "int32_reduction_min_duplicate_indices_negative", | |
| "attrs": { "reduction": "min" }, | |
| "inputs": { | |
| "data": { "dtype": "int32", "shape": [3], "data": { "kind": "values", "values": [5, -7, 3] } }, | |
| "indices": { "dtype": "int32", "shape": [3, 1], "data": { "kind": "values", "values": [0, 0, 2] } }, | |
| "updates": { "dtype": "int32", "shape": [3], "data": { "kind": "values", "values": [-2, 4, 10] } } | |
| }, | |
| "outputs": { "output": { "dtype": "int32", "shape": [3], "data": { "kind": "values", "values": [-2, -7, 3] } } } | |
| }, | |
| { | |
| "name": "int32_reduction_max_duplicate_indices", | |
| "attrs": { "reduction": "max" }, | |
| "inputs": { | |
| "data": { "dtype": "int32", "shape": [3], "data": { "kind": "values", "values": [-5, -7, 3] } }, | |
| "indices": { "dtype": "int32", "shape": [3, 1], "data": { "kind": "values", "values": [0, 0, 2] } }, | |
| "updates": { "dtype": "int32", "shape": [3], "data": { "kind": "values", "values": [-2, 4, 1] } } | |
| }, | |
| "outputs": { "output": { "dtype": "int32", "shape": [3], "data": { "kind": "values", "values": [4, -7, 3] } } } | |
| }, | |
| { | |
| "name": "int32_reduction_mul_duplicate_indices", | |
| "attrs": { "reduction": "mul" }, | |
| "inputs": { | |
| "data": { "dtype": "int32", "shape": [3], "data": { "kind": "values", "values": [2, 3, -1] } }, | |
| "indices": { "dtype": "int32", "shape": [3, 1], "data": { "kind": "values", "values": [0, 0, 2] } }, | |
| "updates": { "dtype": "int32", "shape": [3], "data": { "kind": "values", "values": [3, 5, -4] } } | |
| }, | |
| "outputs": { "output": { "dtype": "int32", "shape": [3], "data": { "kind": "values", "values": [30, 3, 4] } } } | |
| }, | |
| { | |
| "name": "uint32_reduction_add_duplicate_indices", | |
| "attrs": { "reduction": "add" }, | |
| "inputs": { | |
| "data": { "dtype": "uint32", "shape": [2], "data": { "kind": "values", "values": [1, 2] } }, | |
| "indices": { "dtype": "int32", "shape": [3, 1], "data": { "kind": "values", "values": [0, 0, 0] } }, | |
| "updates": { "dtype": "uint32", "shape": [3], "data": { "kind": "values", "values": [2, 3, 4] } } | |
| }, | |
| "outputs": { "output": { "dtype": "uint32", "shape": [2], "data": { "kind": "values", "values": [10, 2] } } } | |
| }, | |
| { | |
| "name": "uint32_reduction_min_duplicate_indices", | |
| "attrs": { "reduction": "min" }, | |
| "inputs": { | |
| "data": { "dtype": "uint32", "shape": [2], "data": { "kind": "values", "values": [8, 1] } }, | |
| "indices": { "dtype": "int32", "shape": [3, 1], "data": { "kind": "values", "values": [0, 0, 1] } }, | |
| "updates": { "dtype": "uint32", "shape": [3], "data": { "kind": "values", "values": [5, 3, 9] } } | |
| }, | |
| "outputs": { "output": { "dtype": "uint32", "shape": [2], "data": { "kind": "values", "values": [3, 1] } } } | |
| }, | |
| { | |
| "name": "uint32_reduction_max_duplicate_indices", | |
| "attrs": { "reduction": "max" }, | |
| "inputs": { | |
| "data": { "dtype": "uint32", "shape": [2], "data": { "kind": "values", "values": [1, 7] } }, | |
| "indices": { "dtype": "int32", "shape": [3, 1], "data": { "kind": "values", "values": [0, 0, 1] } }, | |
| "updates": { "dtype": "uint32", "shape": [3], "data": { "kind": "values", "values": [5, 9, 2] } } | |
| }, | |
| "outputs": { "output": { "dtype": "uint32", "shape": [2], "data": { "kind": "values", "values": [9, 7] } } } | |
| }, | |
| { | |
| "name": "uint32_reduction_mul_duplicate_indices", | |
| "attrs": { "reduction": "mul" }, | |
| "inputs": { | |
| "data": { "dtype": "uint32", "shape": [2], "data": { "kind": "values", "values": [3, 5] } }, | |
| "indices": { "dtype": "int32", "shape": [3, 1], "data": { "kind": "values", "values": [0, 0, 0] } }, | |
| "updates": { "dtype": "uint32", "shape": [3], "data": { "kind": "values", "values": [2, 3, 4] } } | |
| }, | |
| "outputs": { "output": { "dtype": "uint32", "shape": [2], "data": { "kind": "values", "values": [72, 5] } } } | |
| }, | |
| { | |
| "name": "reduction_add_f32_high_contention_4096", | |
| "attrs": { "reduction": "add" }, | |
| "inputs": { | |
| "data": { "dtype": "float32", "shape": [4], "data": { "kind": "values", "values": [0.5, 0.0, 0.0, 0.0] } }, | |
| "indices": { "dtype": "int32", "shape": [4096, 1], "data": { "kind": "constant", "value": 0 } }, | |
| "updates": { "dtype": "float32", "shape": [4096], "data": { "kind": "constant", "value": 0.25 } } | |
| }, | |
| "outputs": { | |
| "output": { | |
| "dtype": "float32", | |
| "shape": [4], | |
| "data": { "kind": "values", "values": [1024.5, 0.0, 0.0, 0.0] }, | |
| "tolerance": 0.000001 | |
| } | |
| } | |
| }, | |
| { | |
| "name": "reduction_min_f32_high_contention_2048", | |
| "attrs": { "reduction": "min" }, | |
| "inputs": { | |
| "data": { "dtype": "float32", "shape": [2], "data": { "kind": "values", "values": [1000.0, -3.0] } }, | |
| "indices": { "dtype": "int32", "shape": [2048, 1], "data": { "kind": "constant", "value": 0 } }, | |
| "updates": { | |
| "dtype": "float32", | |
| "shape": [2048], | |
| "data": { "kind": "cycle", "values": [9.0, 4.0, 7.0, 2.5, 8.0] } | |
| } | |
| }, | |
| "outputs": { | |
| "output": { | |
| "dtype": "float32", | |
| "shape": [2], | |
| "data": { "kind": "values", "values": [2.5, -3.0] }, | |
| "tolerance": 0.000001 | |
| } | |
| } | |
| }, | |
| { | |
| "name": "ort_reduction_add_slice_negative_indices", | |
| "provenance": { | |
| "source": "onnxruntime/test/providers/cpu/tensor/scatter_nd_op_test.cc", | |
| "test": "ScatterNDOpTest.ScatterND_18_add", | |
| "notes": "Duplicate signed negative indices normalize to rows 0, 1, and 0 before slice-add reduction." | |
| }, | |
| "attrs": { "reduction": "add" }, | |
| "inputs": { | |
| "data": { | |
| "dtype": "float32", | |
| "shape": [2, 2, 3], | |
| "data": { "kind": "values", "values": [0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1] } | |
| }, | |
| "indices": { "dtype": "int32", "shape": [3, 1], "data": { "kind": "values", "values": [-2, -1, -2] } }, | |
| "updates": { | |
| "dtype": "float32", | |
| "shape": [3, 2, 3], | |
| "data": { | |
| "kind": "values", | |
| "values": { "$ref": "#/fixtureArrays/ort_reduction_add_slice_duplicates_input_updates" } | |
| } | |
| } | |
| }, | |
| "outputs": { | |
| "output": { | |
| "dtype": "float32", | |
| "shape": [2, 2, 3], | |
| "tolerance": 0.01, | |
| "data": { | |
| "kind": "values", | |
| "values": [8194.1, 16388.1, 32776.1, 65552.1, 131104.1, 262208.1, 128.1, 256.1, 512.1, 1024.1, 2048.1, 4096.1] | |
| } | |
| } | |
| } | |
| }, | |
| { | |
| "name": "reduction_mul_f32_high_contention_1024", | |
| "attrs": { "reduction": "mul" }, | |
| "inputs": { | |
| "data": { "dtype": "float32", "shape": [2], "data": { "kind": "values", "values": [7.0, 2.0] } }, | |
| "indices": { "dtype": "int32", "shape": [1024, 1], "data": { "kind": "constant", "value": 0 } }, | |
| "updates": { "dtype": "float32", "shape": [1024], "data": { "kind": "constant", "value": 1.0 } } | |
| }, | |
| "outputs": { | |
| "output": { | |
| "dtype": "float32", | |
| "shape": [2], | |
| "data": { "kind": "values", "values": [7.0, 2.0] }, | |
| "tolerance": 0.000001 | |
| } | |
| } | |
| }, | |
| { | |
| "name": "f16_reduction_add_row_slice_duplicate_indices", | |
| "attrs": { "reduction": "add" }, | |
| "inputs": { | |
| "data": { | |
| "dtype": "float16", | |
| "shape": [4, 4], | |
| "data": { | |
| "kind": "values", | |
| "values": [1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] | |
| } | |
| }, | |
| "indices": { "dtype": "int32", "shape": [3, 1], "data": { "kind": "values", "values": [0, 0, 2] } }, | |
| "updates": { | |
| "dtype": "float16", | |
| "shape": [3, 4], | |
| "data": { | |
| "kind": "values", | |
| "values": [0.5, 1.5, 2.5, 3.5, 10.0, 20.0, 30.0, 40.0, 100.0, 200.0, 300.0, 400.0] | |
| } | |
| } | |
| }, | |
| "outputs": { "output": { "dtype": "float16", "shape": [4, 4], "tolerance": 0.01 } } | |
| }, | |
| { | |
| "name": "f16_reduction_mul_scalar_updates_duplicate_indices", | |
| "attrs": { "reduction": "mul" }, | |
| "inputs": { | |
| "data": { "dtype": "float16", "shape": [4], "data": { "kind": "values", "values": [2.0, 1.0, 3.0, 1.0] } }, | |
| "indices": { "dtype": "int32", "shape": [3, 1], "data": { "kind": "values", "values": [0, 0, 2] } }, | |
| "updates": { "dtype": "float16", "shape": [3], "data": { "kind": "values", "values": [1.5, 2.0, 4.0] } } | |
| }, | |
| "outputs": { "output": { "dtype": "float16", "shape": [4], "tolerance": 0.01 } } | |
| }, | |
| { | |
| "name": "f16_reduction_max_row_slice_duplicate_indices", | |
| "attrs": { "reduction": "max" }, | |
| "inputs": { | |
| "data": { | |
| "dtype": "float16", | |
| "shape": [3, 4], | |
| "data": { "kind": "values", "values": [1.0, -1.0, 0.5, 2.0, -3.0, -3.0, -3.0, -3.0, 0.0, 0.0, 0.0, 0.0] } | |
| }, | |
| "indices": { "dtype": "int32", "shape": [3, 1], "data": { "kind": "values", "values": [0, 0, 1] } }, | |
| "updates": { | |
| "dtype": "float16", | |
| "shape": [3, 4], | |
| "data": { "kind": "values", "values": [0.0, -2.0, 1.5, 1.0, -0.5, 4.0, -1.0, 3.0, -1.0, -2.0, -1.0, -2.0] } | |
| } | |
| }, | |
| "outputs": { "output": { "dtype": "float16", "shape": [3, 4], "tolerance": 0.001 } } | |
| }, | |
| { | |
| "name": "int8_reduction_add_scalar_updates_duplicate_indices_in_range", | |
| "provenance": { | |
| "source": "onnxruntime/test/providers/cpu/tensor/scatter_nd_op_test.cc", | |
| "test": "ScatterNDOpTest.ScatterND_18_add", | |
| "notes": "Duplicate int8 updates accumulate at indices 0 and 2, with every intermediate and final value remaining inside the int8 range." | |
| }, | |
| "attrs": { "reduction": "add" }, | |
| "inputs": { | |
| "data": { "dtype": "int8", "shape": [4], "data": { "kind": "values", "values": [10, 0, -20, 0] } }, | |
| "indices": { "dtype": "int32", "shape": [3, 1], "data": { "kind": "values", "values": [0, 0, 2] } }, | |
| "updates": { "dtype": "int8", "shape": [3], "data": { "kind": "values", "values": [5, 7, -30] } } | |
| }, | |
| "outputs": { "output": { "dtype": "int8", "shape": [4], "tolerance": 0 } } | |
| }, | |
| { | |
| "name": "batch0_non_vec4_aligned_inner_row", | |
| "inputs": { | |
| "data": { "dtype": "float32", "shape": [6, 7], "data": { "kind": "linspace", "start": 0.0, "end": 41.0 } }, | |
| "indices": { "dtype": "int32", "shape": [3, 1], "data": { "kind": "values", "values": [0, 4, 5] } }, | |
| "updates": { | |
| "dtype": "float32", | |
| "shape": [3, 7], | |
| "data": { | |
| "kind": "values", | |
| "values": [100.0, 101.0, 102.0, 103.0, 104.0, 105.0, 106.0, 200.0, 201.0, 202.0, 203.0, 204.0, 205.0, 206.0, 300.0, 301.0, 302.0, 303.0, 304.0, 305.0, 306.0] | |
| } | |
| } | |
| }, | |
| "outputs": { "output": { "dtype": "float32", "shape": [6, 7] } } | |
| }, | |
| { | |
| "name": "reduction_slice_f16_multi_outer_batch_duplicate_depth2", | |
| "attrs": { "reduction": "add" }, | |
| "inputs": { | |
| "data": { | |
| "dtype": "float16", | |
| "shape": [3, 4], | |
| "data": { "kind": "values", "values": [1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0] } | |
| }, | |
| "indices": { | |
| "dtype": "int32", | |
| "shape": [2, 2, 2], | |
| "data": { "kind": "values", "values": [0, 1, 0, 2, 1, 0, 1, 3] } | |
| }, | |
| "updates": { | |
| "dtype": "float16", | |
| "shape": [2, 2], | |
| "data": { "kind": "values", "values": [10.0, 20.0, 30.0, 40.0] } | |
| } | |
| }, | |
| "outputs": { "output": { "dtype": "float16", "shape": [3, 4], "tolerance": 0.1 } } | |
| }, | |
| { | |
| "name": "row_fast_vec4_last_row_edge_large_axis_dim", | |
| "inputs": { | |
| "data": { "dtype": "float32", "shape": [65537, 8], "data": { "kind": "constant", "value": 0.0 } }, | |
| "indices": { "dtype": "int32", "shape": [3, 1], "data": { "kind": "values", "values": [0, 65536, 32768] } }, | |
| "updates": { | |
| "dtype": "float32", | |
| "shape": [3, 8], | |
| "data": { "kind": "cycle", "values": [1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0] } | |
| } | |
| }, | |
| "outputs": { "output": { "dtype": "float32", "shape": [65537, 8] } } | |
| }, | |
| { | |
| "name": "reduction_add_single_hot_slot_many_updates", | |
| "provenance": { | |
| "notes": "Many duplicate scalar updates target one output slot and must produce their exact accumulated sum." | |
| }, | |
| "attrs": { "reduction": "add" }, | |
| "inputs": { | |
| "data": { | |
| "dtype": "float32", | |
| "shape": [8], | |
| "data": { "kind": "values", "values": [10.0, 20.0, 30.0, 40.0, 50.0, 60.0, 70.0, 80.0] } | |
| }, | |
| "indices": { | |
| "dtype": "int32", | |
| "shape": [16, 1], | |
| "data": { "kind": "values", "values": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] } | |
| }, | |
| "updates": { | |
| "dtype": "float32", | |
| "shape": [16], | |
| "data": { | |
| "kind": "values", | |
| "values": [1.0, -2.0, 3.0, -4.0, 5.0, -6.0, 7.0, -8.0, 9.0, -10.0, 11.0, -12.0, 13.0, -14.0, 15.0, -16.0] | |
| } | |
| } | |
| }, | |
| "outputs": { "output": { "dtype": "float32", "shape": [8], "tolerance": 0.000001 } } | |
| }, | |
| { | |
| "name": "scalar_output_add_many_updates_parallel_reduce", | |
| "provenance": { | |
| "notes": "Checks scalar accumulation with int32 indices, where every valid index targets the sole output element." | |
| }, | |
| "attrs": { "reduction": "add" }, | |
| "inputs": { | |
| "data": { "dtype": "float32", "shape": [1], "data": { "kind": "values", "values": [3.5] } }, | |
| "indices": { "dtype": "int32", "shape": [1024, 1], "data": { "kind": "constant", "value": 0 } }, | |
| "updates": { | |
| "dtype": "float32", | |
| "shape": [1024], | |
| "data": { "kind": "cycle", "values": [0.25, -0.5, 1.0, -0.125, 0.0625, 0.75, -0.25, 0.5] } | |
| } | |
| }, | |
| "outputs": { "output": { "dtype": "float32", "shape": [1], "tolerance": 0.001, "relTolerance": 0.0001 } } | |
| }, | |
| { | |
| "name": "scalar_output_add_many_updates_parallel_reduce_i32_negative", | |
| "provenance": { | |
| "notes": "ONNX normalizes -1 and 0 to the sole output element. Alternating both spellings makes an omitted negative or nonnegative update change the exact sum." | |
| }, | |
| "attrs": { "reduction": "add" }, | |
| "inputs": { | |
| "data": { "dtype": "float32", "shape": [1], "data": { "kind": "values", "values": [3.5] } }, | |
| "indices": { "dtype": "int32", "shape": [1024, 1], "data": { "kind": "cycle", "values": [0, -1] } }, | |
| "updates": { | |
| "dtype": "float32", | |
| "shape": [1024], | |
| "data": { "kind": "cycle", "values": [0.25, -0.5, 1.0, -0.125, 0.0625, 0.75, -0.25, 0.5] } | |
| } | |
| }, | |
| "outputs": { "output": { "dtype": "float32", "shape": [1], "tolerance": 0.001, "relTolerance": 0.0001 } } | |
| }, | |
| { | |
| "name": "reduction_add_padding_hotspot_many_updates", | |
| "provenance": { | |
| "notes": "Many updates target one hot key in a much larger output table, as in sparse routing or padding-token accumulation." | |
| }, | |
| "attrs": { "reduction": "add" }, | |
| "inputs": { | |
| "data": { "dtype": "float32", "shape": [128], "data": { "kind": "constant", "value": 0.0 } }, | |
| "indices": { "dtype": "int32", "shape": [2048, 1], "data": { "kind": "constant", "value": 0 } }, | |
| "updates": { "dtype": "float32", "shape": [2048], "data": { "kind": "constant", "value": 1.0 } } | |
| }, | |
| "outputs": { "output": { "dtype": "float32", "shape": [128], "tolerance": 0.001, "relTolerance": 0.0001 } } | |
| }, | |
| { | |
| "name": "f16_reduction_add_sparse_router_gradient", | |
| "provenance": { | |
| "notes": "Each of 64 slots receives 64 float16 updates offset around +0.02 through f32 atomic scratch. The nonzero mean makes lost or rescaled contributions observable; the tolerance allows one final f16 rounding after f32 accumulation." | |
| }, | |
| "attrs": { "reduction": "add" }, | |
| "inputs": { | |
| "data": { "dtype": "float16", "shape": [64], "data": { "kind": "constant", "value": 0.0 } }, | |
| "indices": { | |
| "dtype": "int32", | |
| "shape": [4096, 1], | |
| "data": { | |
| "kind": "cycle", | |
| "values": { "$ref": "#/fixtureArrays/f16_reduction_add_sparse_router_gradient_input_indices" } | |
| } | |
| }, | |
| "updates": { | |
| "dtype": "float16", | |
| "shape": [4096], | |
| "data": { "kind": "fillFloat32", "sinStep": 0.031, "cosStep": 0.047, "scale": 0.01, "offset": 0.02 } | |
| } | |
| }, | |
| "outputs": { "output": { "dtype": "float16", "shape": [64], "tolerance": 0.012, "relTolerance": 0.004 } } | |
| }, | |
| { | |
| "name": "f16_reduction_add_row_slice_packed_atomic_route", | |
| "provenance": { | |
| "notes": "Duplicate rows and adjacent float16 columns contend on both halves of each packed output word during CAS slice accumulation; each column carries its own update value, so a write that lands in the neighbouring half is visible." | |
| }, | |
| "requires": { "features": ["shader-f16"] }, | |
| "attrs": { "reduction": "add" }, | |
| "inputs": { | |
| "data": { "dtype": "float16", "shape": [16, 4], "data": { "kind": "constant", "value": 0.0 } }, | |
| "indices": { | |
| "dtype": "int32", | |
| "shape": [4096, 1], | |
| "data": { "kind": "cycle", "values": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15] } | |
| }, | |
| "updates": { | |
| "dtype": "float16", | |
| "shape": [4096, 4], | |
| "data": { "kind": "cycle", "values": [1.0, 2.0, 3.0, 4.0] } | |
| } | |
| }, | |
| "outputs": { "output": { "dtype": "float16", "shape": [16, 4], "tolerance": 0.01 } } | |
| }, | |
| { | |
| "name": "f16_reduction_add_rank3_batched_indices_packed_atomic", | |
| "provenance": { | |
| "notes": "Rank-3 batched indices through the direct packed-f16 CAS route, where indexDepth is less than rank(data). indices[2,8,1] pairs ascending rows in batch 0 with descending rows in batch 1, so dropping the interior index stride changes the update multiplicities. Data and updates are quarter-integers whose periods are coprime with both row and batch strides; every partial sum stays exactly representable in f16 regardless of atomic retirement order, allowing zero tolerance." | |
| }, | |
| "requires": { "features": ["shader-f16"] }, | |
| "attrs": { "reduction": "add" }, | |
| "inputs": { | |
| "data": { | |
| "dtype": "float16", | |
| "shape": [8, 256], | |
| "data": { "kind": "cycle", "values": [-1.0, 0.5, -0.25, 2.0, 0.0, -1.5, 1.25] } | |
| }, | |
| "indices": { | |
| "dtype": "int32", | |
| "shape": [2, 8, 1], | |
| "data": { "kind": "values", "values": [0, 1, 2, 3, 4, 5, 6, 7, 7, 6, 5, 4, 3, 2, 1, 0] } | |
| }, | |
| "updates": { | |
| "dtype": "float16", | |
| "shape": [2, 8, 256], | |
| "data": { "kind": "cycle", "values": [0.25, 1.5, 0.75, 2.0, 1.25] } | |
| } | |
| }, | |
| "outputs": { "output": { "dtype": "float16", "shape": [8, 256], "tolerance": 0 } } | |
| }, | |
| { | |
| "name": "f16_reduction_max_full_depth_atomic_f32_route", | |
| "provenance": { | |
| "notes": "Four thousand duplicate float16 scalar updates contend on one full-index-depth destination; maximum reduction remains exact regardless of atomic order." | |
| }, | |
| "attrs": { "reduction": "max" }, | |
| "inputs": { | |
| "data": { "dtype": "float16", "shape": [16384], "data": { "kind": "constant", "value": 0.0 } }, | |
| "indices": { "dtype": "int32", "shape": [4096, 1], "data": { "kind": "constant", "value": 7 } }, | |
| "updates": { "dtype": "float16", "shape": [4096], "data": { "kind": "cycle", "values": [-3.0, 2.0, 1.0, 4.0] } } | |
| }, | |
| "outputs": { "output": { "dtype": "float16", "shape": [16384], "tolerance": 0 } } | |
| }, | |
| { | |
| "name": "rank7_scalar_updates", | |
| "inputs": { | |
| "data": { "dtype": "float32", "shape": [1, 1, 1, 1, 1, 2, 3], "data": { "kind": "constant", "value": 0.0 } }, | |
| "indices": { | |
| "dtype": "int32", | |
| "shape": [2, 7], | |
| "data": { "kind": "values", "values": [0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 1, 0] } | |
| }, | |
| "updates": { "dtype": "float32", "shape": [2], "data": { "kind": "values", "values": [9.0, 7.0] } } | |
| }, | |
| "outputs": { "output": { "dtype": "float32", "shape": [1, 1, 1, 1, 1, 2, 3], "tolerance": 0 } } | |
| }, | |
| { | |
| "name": "rank8_scalar_updates", | |
| "inputs": { | |
| "data": { | |
| "dtype": "float32", | |
| "shape": [1, 1, 1, 1, 1, 1, 2, 3], | |
| "data": { "kind": "linspace", "start": 1.0, "end": 6.0 } | |
| }, | |
| "indices": { | |
| "dtype": "int32", | |
| "shape": [2, 8], | |
| "data": { "kind": "values", "values": [0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, 0, 0, 0, 0, 1] } | |
| }, | |
| "updates": { "dtype": "float32", "shape": [2], "data": { "kind": "values", "values": [9.0, 7.0] } } | |
| }, | |
| "outputs": { "output": { "dtype": "float32", "shape": [1, 1, 1, 1, 1, 1, 2, 3], "tolerance": 0 } } | |
| }, | |
| { | |
| "name": "ort_int8_reduction_mul_wrap8", | |
| "provenance": { | |
| "source": "ONNX Runtime's CPU provider", | |
| "notes": "An int8 reduction must narrow each product to the logical eight-bit range instead of retaining the physical int32 product." | |
| }, | |
| "attrs": { "reduction": "mul" }, | |
| "inputs": { | |
| "data": { "dtype": "int8", "shape": [2], "data": { "kind": "values", "values": [100, -7] } }, | |
| "indices": { "dtype": "int32", "shape": [2, 1], "data": { "kind": "values", "values": [0, 0] } }, | |
| "updates": { "dtype": "int8", "shape": [2], "data": { "kind": "values", "values": [20, 20] } } | |
| }, | |
| "outputs": { | |
| "output": { "dtype": "int8", "shape": [2], "tolerance": 0, "data": { "kind": "values", "values": [64, -7] } } | |
| } | |
| }, | |
| { | |
| "name": "ort_uint8_reduction_add_wrap8", | |
| "provenance": { | |
| "source": "ONNX Runtime's CPU provider", | |
| "notes": "Covers standard UINT8 payload support and modulo-256 add reduction." | |
| }, | |
| "attrs": { "reduction": "add" }, | |
| "inputs": { | |
| "data": { "dtype": "uint8", "shape": [2], "data": { "kind": "values", "values": [250, 7] } }, | |
| "indices": { "dtype": "int32", "shape": [2, 1], "data": { "kind": "values", "values": [0, 0] } }, | |
| "updates": { "dtype": "uint8", "shape": [2], "data": { "kind": "values", "values": [10, 10] } } | |
| }, | |
| "outputs": { | |
| "output": { "dtype": "uint8", "shape": [2], "tolerance": 0, "data": { "kind": "values", "values": [14, 7] } } | |
| } | |
| }, | |
| { | |
| "name": "ort_int16_reduction_mul_wrap16", | |
| "provenance": { | |
| "source": "ONNX Runtime's CPU provider", | |
| "notes": "Duplicate indices multiply the same int16 update (2) twice into 20,000, overflowing to 14,464 via 16-bit two's-complement wraparound; the untouched -7 element confirms only the targeted index changes." | |
| }, | |
| "attrs": { "reduction": "mul" }, | |
| "inputs": { | |
| "data": { "dtype": "int16", "shape": [2], "data": { "kind": "values", "values": [20000, -7] } }, | |
| "indices": { "dtype": "int32", "shape": [2, 1], "data": { "kind": "values", "values": [0, 0] } }, | |
| "updates": { "dtype": "int16", "shape": [2], "data": { "kind": "values", "values": [2, 2] } } | |
| }, | |
| "outputs": { | |
| "output": { | |
| "dtype": "int16", | |
| "shape": [2], | |
| "tolerance": 0, | |
| "data": { "kind": "values", "values": [14464, -7] } | |
| } | |
| } | |
| }, | |
| { | |
| "name": "int8_reduction_add_high_contention_wrap", | |
| "provenance": { | |
| "notes": "Three thousand int8 updates wrap repeatedly across four slots. Reduction uses raw two's-complement bits and narrows once at the end; synchronized index and update cycles give each slot a distinct total and expose mispaired lanes." | |
| }, | |
| "attrs": { "reduction": "add" }, | |
| "inputs": { | |
| "data": { "dtype": "int8", "shape": [4], "data": { "kind": "values", "values": [7, -100, 0, 3] } }, | |
| "indices": { "dtype": "int32", "shape": [3000, 1], "data": { "kind": "cycle", "values": [0, 1, 2, 3] } }, | |
| "updates": { "dtype": "int8", "shape": [3000], "data": { "kind": "cycle", "values": [5, -3, 1, 2] } } | |
| }, | |
| "outputs": { "output": { "dtype": "int8", "shape": [4], "tolerance": 0 } } | |
| }, | |
| { | |
| "name": "int8_reduction_min_duplicate_indices", | |
| "provenance": { | |
| "notes": "Signed narrow min reduces through a native atomicMin on the i32-widened output. The update cycle length shares a factor with the index cycle so each slot sees a disjoint half of the values and the two slots reduce to different results, which a mispaired index/update lane would not reproduce; one slot is left untouched by any update." | |
| }, | |
| "attrs": { "reduction": "min" }, | |
| "inputs": { | |
| "data": { "dtype": "int8", "shape": [3], "data": { "kind": "values", "values": [100, -5, 42] } }, | |
| "indices": { "dtype": "int32", "shape": [512, 1], "data": { "kind": "cycle", "values": [0, 1] } }, | |
| "updates": { "dtype": "int8", "shape": [512], "data": { "kind": "cycle", "values": [9, -128, 7, 3] } } | |
| }, | |
| "outputs": { "output": { "dtype": "int8", "shape": [3], "tolerance": 0 } } | |
| }, | |
| { | |
| "name": "uint8_reduction_max_duplicate_indices", | |
| "provenance": { | |
| "notes": "Unsigned narrow max reduces through a native atomicMax on the u32-widened output. Each slot sees a disjoint half of the update cycle, so the two slots reduce to different results and one of them is decided by the data rather than by an update." | |
| }, | |
| "attrs": { "reduction": "max" }, | |
| "inputs": { | |
| "data": { "dtype": "uint8", "shape": [3], "data": { "kind": "values", "values": [0, 200, 17] } }, | |
| "indices": { "dtype": "int32", "shape": [512, 1], "data": { "kind": "cycle", "values": [0, 1] } }, | |
| "updates": { "dtype": "uint8", "shape": [512], "data": { "kind": "cycle", "values": [3, 255, 9, 1] } } | |
| }, | |
| "outputs": { "output": { "dtype": "uint8", "shape": [3], "tolerance": 0 } } | |
| }, | |
| { | |
| "name": "int16_reduction_max_duplicate_indices", | |
| "provenance": { | |
| "notes": "Signed int16 maximum reduction uses i32-widened atomic storage at values outside the int8 range." | |
| }, | |
| "attrs": { "reduction": "max" }, | |
| "inputs": { | |
| "data": { "dtype": "int16", "shape": [3], "data": { "kind": "values", "values": [-30000, 1, -7] } }, | |
| "indices": { "dtype": "int32", "shape": [512, 1], "data": { "kind": "cycle", "values": [0, 1] } }, | |
| "updates": { "dtype": "int16", "shape": [512], "data": { "kind": "cycle", "values": [-20000, 32767, -1, 5] } } | |
| }, | |
| "outputs": { "output": { "dtype": "int16", "shape": [3], "tolerance": 0 } } | |
| }, | |
| { | |
| "name": "rank1_index_tuple_updates_one_slice", | |
| "provenance": { | |
| "source": "ONNX ScatterND-18 specification", | |
| "notes": "The minimal spelling of a single slice update: `indices` is rank 1, so the whole tensor is the one index tuple and `updates` carries just the slice. Row 2 is replaced and the other rows must be copied through unchanged." | |
| }, | |
| "attrs": {}, | |
| "inputs": { | |
| "data": { | |
| "dtype": "float32", | |
| "shape": [4, 3], | |
| "data": { "kind": "values", "values": [1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0] } | |
| }, | |
| "indices": { "dtype": "int32", "shape": [1], "data": { "kind": "values", "values": [2] } }, | |
| "updates": { "dtype": "float32", "shape": [3], "data": { "kind": "values", "values": [-1.0, -2.0, -3.0] } } | |
| }, | |
| "outputs": { | |
| "output": { | |
| "dtype": "float32", | |
| "shape": [4, 3], | |
| "data": { "kind": "values", "values": [1.0, 2.0, 3.0, 4.0, 5.0, 6.0, -1.0, -2.0, -3.0, 10.0, 11.0, 12.0] }, | |
| "tolerance": 0 | |
| } | |
| } | |
| }, | |
| { | |
| "name": "ort_zero_index_depth_updates_entire_tensor", | |
| "provenance": { | |
| "source": "onnxruntime/test/providers/cpu/tensor/scatter_nd_op_test.cc", | |
| "test": "ScatterNDOpTest.ScatterND_zero_index_depth_updates_entire_tensor", | |
| "notes": "An index tuple of depth 0 addresses the whole tensor, so a single update slice replaces all of data. ORT excludes its own WebGPU EP from this test." | |
| }, | |
| "inputs": { | |
| "data": { | |
| "dtype": "float32", | |
| "shape": [2, 3], | |
| "data": { "kind": "values", "values": [1.0, 2.0, 3.0, 4.0, 5.0, 6.0] } | |
| }, | |
| "indices": { "dtype": "int32", "shape": [1, 0], "data": { "kind": "values", "values": [] } }, | |
| "updates": { | |
| "dtype": "float32", | |
| "shape": [1, 2, 3], | |
| "data": { "kind": "values", "values": [10.0, 20.0, 30.0, 40.0, 50.0, 60.0] } | |
| } | |
| }, | |
| "outputs": { "output": { "dtype": "float32", "shape": [2, 3], "tolerance": 0 } } | |
| }, | |
| { | |
| "name": "ort_zero_index_depth_adds_multiple_updates", | |
| "provenance": { | |
| "source": "onnxruntime/test/providers/cpu/tensor/scatter_nd_op_test.cc", | |
| "test": "ScatterNDOpTest.ScatterND_zero_index_depth_adds_multiple_updates", | |
| "notes": "Two depth-0 index tuples each address the whole tensor, so reduction=add accumulates both update slices into every element." | |
| }, | |
| "attrs": { "reduction": "add" }, | |
| "inputs": { | |
| "data": { "dtype": "float32", "shape": [2], "data": { "kind": "values", "values": [1.0, 2.0] } }, | |
| "indices": { "dtype": "int32", "shape": [2, 0], "data": { "kind": "values", "values": [] } }, | |
| "updates": { | |
| "dtype": "float32", | |
| "shape": [2, 2], | |
| "data": { "kind": "values", "values": [10.0, 20.0, 100.0, 200.0] } | |
| } | |
| }, | |
| "outputs": { "output": { "dtype": "float32", "shape": [2], "tolerance": 0 } } | |
| }, | |
| { | |
| "name": "ort_zero_index_depth_empty_data", | |
| "provenance": { | |
| "source": "onnxruntime/test/providers/cpu/tensor/scatter_nd_op_test.cc", | |
| "test": "ScatterNDOpTest.ScatterND_zero_index_depth_empty_data", | |
| "notes": "Zero index depth over empty data must be a no-op; upstream added it with the depth-0 fix." | |
| }, | |
| "inputs": { | |
| "data": { "dtype": "float32", "shape": [0, 3], "data": { "kind": "values", "values": [] } }, | |
| "indices": { "dtype": "int32", "shape": [1, 0], "data": { "kind": "values", "values": [] } }, | |
| "updates": { "dtype": "float32", "shape": [1, 0, 3], "data": { "kind": "values", "values": [] } } | |
| }, | |
| "outputs": { "output": { "dtype": "float32", "shape": [0, 3], "tolerance": 0 } } | |
| }, | |
| { | |
| "name": "int64_full_range_scalar_updates", | |
| "inputs": { | |
| "data": { | |
| "dtype": "int64", | |
| "shape": [3, 3], | |
| "data": { | |
| "kind": "cycle", | |
| "values": ["0", "4294967296", "8589934593", "-4294967297", "9223372036854775807", "-9223372036854775808", "9223372036854775806", "-1"] | |
| } | |
| }, | |
| "indices": { "dtype": "int32", "shape": [2, 2], "data": { "kind": "values", "values": [0, 2, 2, 1] } }, | |
| "updates": { | |
| "dtype": "int64", | |
| "shape": [2], | |
| "data": { | |
| "kind": "cycle", | |
| "values": ["0", "4294967296", "8589934593", "-4294967297", "9223372036854775807", "-9223372036854775808", "9223372036854775806", "-1"] | |
| } | |
| } | |
| }, | |
| "outputs": { "output": { "dtype": "int64", "shape": [3, 3], "tolerance": 0, "relTolerance": 0 } }, | |
| "tolerance": 0, | |
| "relTolerance": 0 | |
| }, | |
| { | |
| "name": "int64_full_range_rank5_indices_scalar_updates", | |
| "inputs": { | |
| "data": { | |
| "dtype": "int64", | |
| "shape": [2, 3], | |
| "data": { | |
| "kind": "cycle", | |
| "values": ["4294967296", "8589934593", "-4294967297", "9223372036854775807", "-9223372036854775808", "9223372036854775806", "-1", "0"] | |
| } | |
| }, | |
| "indices": { "dtype": "int32", "shape": [1, 1, 1, 1, 2], "data": { "kind": "values", "values": [1, 2] } }, | |
| "updates": { | |
| "dtype": "int64", | |
| "shape": [1, 1, 1, 1], | |
| "data": { | |
| "kind": "cycle", | |
| "values": ["4294967296", "8589934593", "-4294967297", "9223372036854775807", "-9223372036854775808", "9223372036854775806", "-1", "0"] | |
| } | |
| } | |
| }, | |
| "outputs": { "output": { "dtype": "int64", "shape": [2, 3], "tolerance": 0, "relTolerance": 0 } }, | |
| "tolerance": 0, | |
| "relTolerance": 0 | |
| }, | |
| { | |
| "name": "int64_negative_slice_updates", | |
| "inputs": { | |
| "data": { | |
| "dtype": "int64", | |
| "shape": [2, 3], | |
| "data": { | |
| "kind": "values", | |
| "values": ["-9223372036854775808", "9223372036854775807", "4294967296", "-4294967297", "9223372036854775806", "-1"] | |
| } | |
| }, | |
| "indices": { "dtype": "int32", "shape": [1, 1], "data": { "kind": "values", "values": [-1] } }, | |
| "updates": { | |
| "dtype": "int64", | |
| "shape": [1, 3], | |
| "data": { "kind": "values", "values": ["4294967296", "9223372036854775807", "-9223372036854775808"] } | |
| } | |
| }, | |
| "outputs": { "output": { "dtype": "int64", "shape": [2, 3], "tolerance": 0, "relTolerance": 0 } } | |
| }, | |
| { | |
| "name": "zero_index_depth_adds_multiple_updates_float16", | |
| "attrs": { "reduction": "add" }, | |
| "inputs": { | |
| "data": { "dtype": "float16", "shape": [2], "data": { "kind": "values", "values": [1.0, 2.0] } }, | |
| "indices": { "dtype": "int32", "shape": [2, 0], "data": { "kind": "values", "values": [] } }, | |
| "updates": { | |
| "dtype": "float16", | |
| "shape": [2, 2], | |
| "data": { "kind": "values", "values": [10.0, 20.0, 100.0, 90.0] } | |
| } | |
| }, | |
| "outputs": { "output": { "dtype": "float16", "shape": [2], "tolerance": 0 } }, | |
| "tunables": { "F16_ATOMIC_MIN_UPDATES": 4 } | |
| }, | |
| { | |
| "name": "zero_index_depth_adds_multiple_updates_int8", | |
| "attrs": { "reduction": "add" }, | |
| "inputs": { | |
| "data": { "dtype": "int8", "shape": [2], "data": { "kind": "values", "values": [1, 2] } }, | |
| "indices": { "dtype": "int32", "shape": [2, 0], "data": { "kind": "values", "values": [] } }, | |
| "updates": { "dtype": "int8", "shape": [2, 2], "data": { "kind": "values", "values": [10, 20, 100, 90] } } | |
| }, | |
| "outputs": { "output": { "dtype": "int8", "shape": [2], "tolerance": 0 } }, | |
| "tunables": {} | |
| }, | |
| { | |
| "name": "bool_add_saturates", | |
| "attrs": { "reduction": "add" }, | |
| "inputs": { | |
| "data": { "dtype": "bool", "shape": [1, 2], "data": { "kind": "values", "values": [1, 0] } }, | |
| "indices": { "dtype": "int32", "shape": [2, 1], "data": { "kind": "values", "values": [0, 0] } }, | |
| "updates": { "dtype": "bool", "shape": [2, 2], "data": { "kind": "values", "values": [1, 0, 1, 0] } } | |
| }, | |
| "outputs": { "output": { "dtype": "bool", "shape": [1, 2], "tolerance": 0 } } | |
| }, | |
| { | |
| "name": "zero_index_depth_f16_odd_add", | |
| "attrs": { "reduction": "add" }, | |
| "inputs": { | |
| "data": { "dtype": "float16", "shape": [3], "data": { "kind": "values", "values": [1.0, 2.0, 3.0] } }, | |
| "indices": { "dtype": "int32", "shape": [2, 0], "data": { "kind": "values", "values": [] } }, | |
| "updates": { | |
| "dtype": "float16", | |
| "shape": [2, 3], | |
| "data": { "kind": "values", "values": [2.0, -1.0, 4.0, 3.0, 5.0, -2.0] } | |
| } | |
| }, | |
| "outputs": { "output": { "dtype": "float16", "shape": [3], "tolerance": 0 } } | |
| }, | |
| { | |
| "name": "zero_index_depth_f16_odd_mul", | |
| "attrs": { "reduction": "mul" }, | |
| "inputs": { | |
| "data": { "dtype": "float16", "shape": [3], "data": { "kind": "values", "values": [1.0, 2.0, 3.0] } }, | |
| "indices": { "dtype": "int32", "shape": [2, 0], "data": { "kind": "values", "values": [] } }, | |
| "updates": { | |
| "dtype": "float16", | |
| "shape": [2, 3], | |
| "data": { "kind": "values", "values": [2.0, -1.0, 4.0, 3.0, 5.0, -2.0] } | |
| } | |
| }, | |
| "outputs": { "output": { "dtype": "float16", "shape": [3], "tolerance": 0 } } | |
| }, | |
| { | |
| "name": "zero_index_depth_f16_odd_min", | |
| "attrs": { "reduction": "min" }, | |
| "inputs": { | |
| "data": { "dtype": "float16", "shape": [3], "data": { "kind": "values", "values": [1.0, 2.0, 3.0] } }, | |
| "indices": { "dtype": "int32", "shape": [2, 0], "data": { "kind": "values", "values": [] } }, | |
| "updates": { | |
| "dtype": "float16", | |
| "shape": [2, 3], | |
| "data": { "kind": "values", "values": [2.0, -1.0, 4.0, 3.0, 5.0, -2.0] } | |
| } | |
| }, | |
| "outputs": { "output": { "dtype": "float16", "shape": [3], "tolerance": 0 } } | |
| }, | |
| { | |
| "name": "zero_index_depth_f16_odd_max", | |
| "attrs": { "reduction": "max" }, | |
| "inputs": { | |
| "data": { "dtype": "float16", "shape": [3], "data": { "kind": "values", "values": [1.0, 2.0, 3.0] } }, | |
| "indices": { "dtype": "int32", "shape": [2, 0], "data": { "kind": "values", "values": [] } }, | |
| "updates": { | |
| "dtype": "float16", | |
| "shape": [2, 3], | |
| "data": { "kind": "values", "values": [2.0, -1.0, 4.0, 3.0, 5.0, -2.0] } | |
| } | |
| }, | |
| "outputs": { "output": { "dtype": "float16", "shape": [3], "tolerance": 0 } } | |
| }, | |
| { | |
| "name": "zero_index_depth_bool_add", | |
| "attrs": { "reduction": "add" }, | |
| "inputs": { | |
| "data": { "dtype": "bool", "shape": [3], "data": { "kind": "values", "values": [1, 0, 0] } }, | |
| "indices": { "dtype": "int32", "shape": [2, 0], "data": { "kind": "values", "values": [] } }, | |
| "updates": { "dtype": "bool", "shape": [2, 3], "data": { "kind": "values", "values": [0, 0, 1, 1, 0, 0] } } | |
| }, | |
| "outputs": { "output": { "dtype": "bool", "shape": [3], "tolerance": 0 } } | |
| }, | |
| { | |
| "name": "zero_index_depth_bool_mul", | |
| "attrs": { "reduction": "mul" }, | |
| "inputs": { | |
| "data": { "dtype": "bool", "shape": [3], "data": { "kind": "values", "values": [1, 1, 0] } }, | |
| "indices": { "dtype": "int32", "shape": [2, 0], "data": { "kind": "values", "values": [] } }, | |
| "updates": { "dtype": "bool", "shape": [2, 3], "data": { "kind": "values", "values": [1, 0, 1, 1, 1, 0] } } | |
| }, | |
| "outputs": { "output": { "dtype": "bool", "shape": [3], "tolerance": 0 } } | |
| } | |
| ] | |
| } | |