{ "op": "ai.onnx.TensorScatter", "fixtureArrays": { "ort_linear_4d_spec_example_input_past": [1, 2, 3, 4, 5, 5, 6, 7, 8, 9, 8, 7, 6, 5, 4, 4, 3, 2, 1, 0, 1, 2, 3, 4, 5, 5, 6, 7, 8, 9, 8, 7, 6, 5, 4, 4, 3, 2, 1, 0], "ort_linear_3d_default_axis_input_past": [1, 2, 3, 4, 5, 5, 6, 7, 8, 9, 8, 7, 6, 5, 4, 5, 4, 3, 2, 1, 1, 2, 3, 4, 5, 5, 6, 7, 8, 9, 8, 7, 6, 5, 4, 5, 4, 3, 2, 1, 1, 2, 3, 4, 5, 5, 6, 7, 8, 9, 8, 7, 6, 5, 4, 5, 4, 3, 2, 1], "ort_linear_3d_default_axis_input_update": [4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3], "ort_circular_4d_wrap_second_batch_input_update": [5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2] }, "cases": [ { "name": "dispatch_cliff_no_write_indices", "attrs": { "mode": "linear" }, "inputs": { "past": { "dtype": "float32", "shape": [1, 1, 65537, 256], "data": { "kind": "constant", "value": 0.0 } }, "update": { "dtype": "float32", "shape": [1, 1, 65537, 256], "data": { "kind": "cycle", "values": [1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0] } } }, "outputs": { "present": { "dtype": "float32", "shape": [1, 1, 65537, 256], "tolerance": 0 } } }, { "name": "ort_linear_4d_spec_example", "provenance": { "source": "onnxruntime/test/providers/cpu/llm/tensorscatter_op_test.cc", "test": "TensorScatterTest.Linear_4D" }, "attrs": { "mode": "linear" }, "inputs": { "past": { "dtype": "float32", "shape": [2, 1, 4, 5], "data": { "kind": "values", "values": { "$ref": "#/fixtureArrays/ort_linear_4d_spec_example_input_past" } } }, "update": { "dtype": "float32", "shape": [2, 1, 1, 5], "data": { "kind": "values", "values": [5.0, 5.0, 5.0, 5.0, 5.0, 1.0, 1.0, 1.0, 1.0, 1.0] } }, "writeIndices": { "dtype": "uint32", "shape": [2], "data": { "kind": "values", "values": [1, 2] } } }, "outputs": { "present": { "dtype": "float32", "shape": [2, 1, 4, 5], "tolerance": 0.000001 } } }, { "name": "decode_kv_update_f32_axis_minus2_compact", "provenance": { "notes": "Compact sibling for the decode-style TensorScatter benchmark; preserves axis=-2, per-batch write indices, full-cache copy, and one-token update rows." }, "attrs": { "mode": "linear", "axis": -2 }, "inputs": { "past": { "dtype": "float32", "shape": [4, 2, 128, 64], "data": { "kind": "fillFloat32", "sinStep": 0.011, "cosStep": 0.017, "scale": 0.5 } }, "update": { "dtype": "float32", "shape": [4, 2, 1, 64], "data": { "kind": "fillFloat32", "sinStep": 0.019, "cosStep": 0.029, "scale": 0.5 } }, "writeIndices": { "dtype": "uint32", "shape": [4], "data": { "kind": "values", "values": [3, 17, 64, 127] } } }, "outputs": { "present": { "dtype": "float32", "shape": [4, 2, 128, 64], "tolerance": 0.000001 } } }, { "name": "ort_linear_3d_default_axis", "provenance": { "source": "onnxruntime/test/providers/cpu/llm/tensorscatter_op_test.cc", "test": "TensorScatterTest.Linear_3D" }, "inputs": { "past": { "dtype": "float32", "shape": [3, 4, 5], "data": { "kind": "values", "values": { "$ref": "#/fixtureArrays/ort_linear_3d_default_axis_input_past" } } }, "update": { "dtype": "float32", "shape": [3, 2, 5], "data": { "kind": "values", "values": { "$ref": "#/fixtureArrays/ort_linear_3d_default_axis_input_update" } } }, "writeIndices": { "dtype": "uint32", "shape": [3], "data": { "kind": "values", "values": [1, 2, 0] } } }, "outputs": { "present": { "dtype": "float32", "shape": [3, 4, 5], "tolerance": 0.000001 } } }, { "name": "ort_circular_4d_wrap_second_batch", "provenance": { "source": "onnxruntime/test/providers/cpu/llm/tensorscatter_op_test.cc", "test": "TensorScatterTest.Circular_4D" }, "attrs": { "mode": "circular" }, "inputs": { "past": { "dtype": "float32", "shape": [2, 1, 4, 5], "data": { "kind": "values", "values": { "$ref": "#/fixtureArrays/ort_linear_4d_spec_example_input_past" } } }, "update": { "dtype": "float32", "shape": [2, 1, 2, 5], "data": { "kind": "values", "values": { "$ref": "#/fixtureArrays/ort_circular_4d_wrap_second_batch_input_update" } } }, "writeIndices": { "dtype": "uint32", "shape": [2], "data": { "kind": "values", "values": [1, 3] } } }, "outputs": { "present": { "dtype": "float32", "shape": [2, 1, 4, 5], "tolerance": 0.000001 } } }, { "name": "ort_linear_no_write_indices_defaults_zero", "provenance": { "source": "onnxruntime/test/providers/cpu/llm/tensorscatter_op_test.cc", "test": "TensorScatterTest.Linear_NoWriteIndices" }, "attrs": { "mode": "linear" }, "inputs": { "past": { "dtype": "float32", "shape": [1, 1, 4, 3], "data": { "kind": "constant", "value": 0.0 } }, "update": { "dtype": "float32", "shape": [1, 1, 2, 3], "data": { "kind": "values", "values": [1.0, 2.0, 3.0, 4.0, 5.0, 6.0] } } }, "outputs": { "present": { "dtype": "float32", "shape": [1, 1, 4, 3], "tolerance": 0.000001 } } }, { "name": "linear_zero_length_update_is_copy", "provenance": { "source": "onnxruntime/test/providers/cpu/llm/tensorscatter_op_test.cc", "test": "TensorScatterTest.Linear_NoWriteIndices", "notes": "Valid zero-length update along the cache axis: scatter has no elements and the output should be an exact copy of past_cache." }, "attrs": { "mode": "linear" }, "inputs": { "past": { "dtype": "float32", "shape": [1, 4, 2], "data": { "kind": "values", "values": [10.0, 11.0, 20.0, 21.0, 30.0, 31.0, 40.0, 41.0] } }, "update": { "dtype": "float32", "shape": [1, 0, 2], "data": { "kind": "values", "values": [] } } }, "outputs": { "present": { "dtype": "float32", "shape": [1, 4, 2], "tolerance": 0, "data": { "kind": "values", "values": [10.0, 11.0, 20.0, 21.0, 30.0, 31.0, 40.0, 41.0] } } } }, { "name": "ort_linear_float16_default_axis", "provenance": { "source": "onnxruntime/test/providers/cpu/llm/tensorscatter_op_test.cc", "test": "TensorScatterTest.Linear_Float16" }, "attrs": { "mode": "linear" }, "inputs": { "past": { "dtype": "float16", "shape": [1, 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] } }, "update": { "dtype": "float16", "shape": [1, 1, 3], "data": { "kind": "values", "values": [99.0, 98.0, 97.0] } }, "writeIndices": { "dtype": "uint32", "shape": [1], "data": { "kind": "values", "values": [1] } } }, "outputs": { "present": { "dtype": "float16", "shape": [1, 4, 3], "tolerance": 0.001 } } }, { "name": "ort_linear_explicit_axis1_batch_indices", "provenance": { "source": "onnxruntime/test/providers/cpu/llm/tensorscatter_op_test.cc", "test": "TensorScatterTest.Linear_ExplicitAxis" }, "attrs": { "mode": "linear", "axis": 1 }, "inputs": { "past": { "dtype": "float32", "shape": [2, 3, 2], "data": { "kind": "constant", "value": 0.0 } }, "update": { "dtype": "float32", "shape": [2, 1, 2], "data": { "kind": "values", "values": [1.0, 2.0, 3.0, 4.0] } }, "writeIndices": { "dtype": "uint32", "shape": [2], "data": { "kind": "values", "values": [0, 2] } } }, "outputs": { "present": { "dtype": "float32", "shape": [2, 3, 2], "tolerance": 0.000001 } } }, { "name": "ort_circular_wraparound_rank3", "provenance": { "source": "onnxruntime/test/providers/cpu/llm/tensorscatter_op_test.cc", "test": "TensorScatterTest.Circular_WrapAround" }, "attrs": { "mode": "circular" }, "inputs": { "past": { "dtype": "float32", "shape": [1, 4, 2], "data": { "kind": "values", "values": [10.0, 11.0, 20.0, 21.0, 30.0, 31.0, 40.0, 41.0] } }, "update": { "dtype": "float32", "shape": [1, 3, 2], "data": { "kind": "values", "values": [1.0, 2.0, 3.0, 4.0, 5.0, 6.0] } }, "writeIndices": { "dtype": "uint32", "shape": [1], "data": { "kind": "values", "values": [2] } } }, "outputs": { "present": { "dtype": "float32", "shape": [1, 4, 2], "tolerance": 0.000001 } } }, { "name": "onnx_backend_tensorscatter", "provenance": { "source": "cmake/external/onnx/onnx/backend/test/data/node/test_tensorscatter" }, "attrs": { "mode": "linear" }, "inputs": { "past": { "dtype": "float32", "shape": [2, 1, 4, 5], "data": { "kind": "values", "values": { "$ref": "#/fixtureArrays/ort_linear_4d_spec_example_input_past" } } }, "update": { "dtype": "float32", "shape": [2, 1, 1, 5], "data": { "kind": "values", "values": [5.0, 5.0, 5.0, 5.0, 5.0, 1.0, 1.0, 1.0, 1.0, 1.0] } }, "writeIndices": { "dtype": "uint32", "shape": [2], "data": { "kind": "values", "values": [1, 2] } } }, "outputs": { "present": { "dtype": "float32", "shape": [2, 1, 4, 5], "tolerance": 0.000001, "data": { "kind": "values", "values": [1.0, 2.0, 3.0, 4.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 8.0, 7.0, 6.0, 5.0, 4.0, 4.0, 3.0, 2.0, 1.0, 0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 5.0, 6.0, 7.0, 8.0, 9.0, 1.0, 1.0, 1.0, 1.0, 1.0, 4.0, 3.0, 2.0, 1.0, 0.0] } } } }, { "name": "onnx_backend_tensorscatter_3d", "provenance": { "source": "cmake/external/onnx/onnx/backend/test/data/node/test_tensorscatter_3d" }, "inputs": { "past": { "dtype": "float32", "shape": [3, 4, 5], "data": { "kind": "values", "values": { "$ref": "#/fixtureArrays/ort_linear_3d_default_axis_input_past" } } }, "update": { "dtype": "float32", "shape": [3, 2, 5], "data": { "kind": "values", "values": { "$ref": "#/fixtureArrays/ort_linear_3d_default_axis_input_update" } } }, "writeIndices": { "dtype": "uint32", "shape": [3], "data": { "kind": "values", "values": [1, 2, 0] } } }, "outputs": { "present": { "dtype": "float32", "shape": [3, 4, 5], "tolerance": 0.000001, "data": { "kind": "values", "values": [1.0, 2.0, 3.0, 4.0, 5.0, 4.0, 4.0, 4.0, 4.0, 4.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 4.0, 3.0, 2.0, 1.0, 1.0, 2.0, 3.0, 4.0, 5.0, 5.0, 6.0, 7.0, 8.0, 9.0, 6.0, 6.0, 6.0, 6.0, 6.0, 7.0, 7.0, 7.0, 7.0, 7.0, 2.0, 2.0, 2.0, 2.0, 2.0, 3.0, 3.0, 3.0, 3.0, 3.0, 8.0, 7.0, 6.0, 5.0, 4.0, 5.0, 4.0, 3.0, 2.0, 1.0] } } } }, { "name": "onnx_backend_tensorscatter_circular", "provenance": { "source": "cmake/external/onnx/onnx/backend/test/data/node/test_tensorscatter_circular" }, "attrs": { "mode": "circular" }, "inputs": { "past": { "dtype": "float32", "shape": [2, 1, 4, 5], "data": { "kind": "values", "values": { "$ref": "#/fixtureArrays/ort_linear_4d_spec_example_input_past" } } }, "update": { "dtype": "float32", "shape": [2, 1, 2, 5], "data": { "kind": "values", "values": { "$ref": "#/fixtureArrays/ort_circular_4d_wrap_second_batch_input_update" } } }, "writeIndices": { "dtype": "uint32", "shape": [2], "data": { "kind": "values", "values": [1, 3] } } }, "outputs": { "present": { "dtype": "float32", "shape": [2, 1, 4, 5], "tolerance": 0.000001, "data": { "kind": "values", "values": [1.0, 2.0, 3.0, 4.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 6.0, 6.0, 6.0, 6.0, 6.0, 4.0, 3.0, 2.0, 1.0, 0.0, 2.0, 2.0, 2.0, 2.0, 2.0, 5.0, 6.0, 7.0, 8.0, 9.0, 8.0, 7.0, 6.0, 5.0, 4.0, 1.0, 1.0, 1.0, 1.0, 1.0] } } } }, { "name": "empty_input_zero_dim", "attrs": { "mode": "linear" }, "inputs": { "past": { "dtype": "float32", "shape": [0, 1, 4, 5], "data": { "kind": "values", "values": [] } }, "update": { "dtype": "float32", "shape": [0, 1, 1, 5], "data": { "kind": "values", "values": [] } }, "writeIndices": { "dtype": "uint32", "shape": [0], "data": { "kind": "values", "values": [] } } }, "outputs": { "present": { "dtype": "float32", "shape": [0, 1, 4, 5], "tolerance": 0 } } }, { "name": "scalar_copy_path_odd_numel_with_write_indices_f32", "attrs": { "mode": "linear", "axis": -2 }, "inputs": { "past": { "dtype": "float32", "shape": [2, 1, 5, 7], "data": { "kind": "fillFloat32", "sinStep": 0.7, "scale": 3.0, "offset": 1.0 } }, "update": { "dtype": "float32", "shape": [2, 1, 1, 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] } }, "writeIndices": { "dtype": "uint32", "shape": [2], "data": { "kind": "values", "values": [2, 4] } } }, "outputs": { "present": { "dtype": "float32", "shape": [2, 1, 5, 7], "tolerance": 0 } } }, { "name": "circular_wrap_multi_position_split_across_boundary_f32", "attrs": { "mode": "circular", "axis": -2 }, "inputs": { "past": { "dtype": "float32", "shape": [1, 5, 3], "data": { "kind": "values", "values": [10.0, 11.0, 12.0, 20.0, 21.0, 22.0, 30.0, 31.0, 32.0, 40.0, 41.0, 42.0, 50.0, 51.0, 52.0] } }, "update": { "dtype": "float32", "shape": [1, 4, 3], "data": { "kind": "values", "values": [1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 13.0, 14.0, 15.0] } }, "writeIndices": { "dtype": "uint32", "shape": [1], "data": { "kind": "values", "values": [3] } } }, "outputs": { "present": { "dtype": "float32", "shape": [1, 5, 3], "tolerance": 0 } } }, { "name": "linear_write_offset_overflows_max_seq_guard_drops_tail_f32", "attrs": { "mode": "linear", "axis": -2 }, "inputs": { "past": { "dtype": "float32", "shape": [1, 4, 2], "data": { "kind": "values", "values": [10.0, 11.0, 20.0, 21.0, 30.0, 31.0, 40.0, 41.0] } }, "update": { "dtype": "float32", "shape": [1, 3, 2], "data": { "kind": "values", "values": [1.0, 2.0, 3.0, 4.0, 5.0, 6.0] } }, "writeIndices": { "dtype": "uint32", "shape": [1], "data": { "kind": "values", "values": [3] } } }, "outputs": { "present": { "dtype": "float32", "shape": [1, 4, 2], "tolerance": 0 } } }, { "name": "explicit_axis1_rank4_nonaxis_stride_tail_mapping_f16", "attrs": { "mode": "linear", "axis": 1 }, "inputs": { "past": { "dtype": "float16", "shape": [1, 5, 1, 3], "data": { "kind": "fillFloat32", "sinStep": 0.37, "scale": 4.0, "offset": 2.0 } }, "update": { "dtype": "float16", "shape": [1, 2, 1, 3], "data": { "kind": "cycle", "values": [70.0, 71.0, 72.0, 80.0, 81.0, 82.0] } }, "writeIndices": { "dtype": "uint32", "shape": [1], "data": { "kind": "values", "values": [2] } } }, "outputs": { "present": { "dtype": "float16", "shape": [1, 5, 1, 3], "tolerance": 0.001 } } }, { "name": "rank8_linear_cache_axis_write", "attrs": { "mode": "linear", "axis": 6 }, "inputs": { "past": { "dtype": "float32", "shape": [1, 2, 1, 2, 1, 2, 4, 2], "data": { "kind": "linspace", "start": 1.0, "end": 64.0 } }, "update": { "dtype": "float32", "shape": [1, 2, 1, 2, 1, 2, 2, 2], "data": { "kind": "fillFloat32", "sinStep": 0.17, "cosStep": 0.29 } } }, "outputs": { "present": { "dtype": "float32", "shape": [1, 2, 1, 2, 1, 2, 4, 2], "tolerance": 0 } } }, { "name": "ort_standard_int32_linear_extremes", "provenance": { "source": "onnxruntime/core/providers/cpu/llm/tensorscatter.cc", "notes": "The opset-24 CPU kernel copies fixed-size payload bytes; int32 extrema and values beyond f32 exactness lock that same storage-preserving contract." }, "attrs": { "axis": 2, "mode": "linear" }, "inputs": { "past": { "dtype": "int32", "shape": [1, 1, 4], "data": { "kind": "values", "values": [-2147483648, 17, 2147483647, -17] } }, "update": { "dtype": "int32", "shape": [1, 1, 2], "data": { "kind": "values", "values": [16777217, -16777217] } }, "writeIndices": { "dtype": "uint32", "shape": [1], "data": { "kind": "values", "values": [1] } } }, "outputs": { "present": { "dtype": "int32", "shape": [1, 1, 4], "tolerance": 0, "data": { "kind": "values", "values": [-2147483648, 16777217, -16777217, -17] } } } }, { "name": "ort_standard_int16_linear_extremes", "provenance": { "source": "onnxruntime/core/providers/cpu/llm/tensorscatter.cc", "notes": "ONNX TensorScatter-24 permits int16; both signed extrema guard the runtime's widened i32 copy-and-overwrite route." }, "attrs": { "axis": 2, "mode": "linear" }, "inputs": { "past": { "dtype": "int16", "shape": [1, 1, 4], "data": { "kind": "values", "values": [-32768, -1, 32767, 42] } }, "update": { "dtype": "int16", "shape": [1, 1, 2], "data": { "kind": "values", "values": [12345, -12345] } }, "writeIndices": { "dtype": "uint32", "shape": [1], "data": { "kind": "values", "values": [1] } } }, "outputs": { "present": { "dtype": "int16", "shape": [1, 1, 4], "tolerance": 0 } } }, { "name": "ort_standard_int8_linear_extremes", "provenance": { "source": "onnxruntime/core/providers/cpu/llm/tensorscatter.cc", "notes": "ONNX TensorScatter-24 permits int8; signed extrema distinguish the widened i32 storage route from a lossy conversion." }, "attrs": { "axis": 2, "mode": "linear" }, "inputs": { "past": { "dtype": "int8", "shape": [1, 1, 4], "data": { "kind": "values", "values": [-128, -1, 127, 42] } }, "update": { "dtype": "int8", "shape": [1, 1, 2], "data": { "kind": "values", "values": [64, -64] } }, "writeIndices": { "dtype": "uint32", "shape": [1], "data": { "kind": "values", "values": [1] } } }, "outputs": { "present": { "dtype": "int8", "shape": [1, 1, 4], "tolerance": 0 } } }, { "name": "ort_standard_uint32_linear_extremes", "provenance": { "source": "onnxruntime/core/providers/cpu/llm/tensorscatter.cc", "notes": "ONNX TensorScatter-24 permits uint32; UINT32_MAX and values across the signed boundary lock exact u32 payload movement." }, "attrs": { "axis": 2, "mode": "linear" }, "inputs": { "past": { "dtype": "uint32", "shape": [1, 1, 4], "data": { "kind": "values", "values": [0, 17, 4294967295, 2147483648] } }, "update": { "dtype": "uint32", "shape": [1, 1, 2], "data": { "kind": "values", "values": [16777217, 4000000000] } }, "writeIndices": { "dtype": "uint32", "shape": [1], "data": { "kind": "values", "values": [1] } } }, "outputs": { "present": { "dtype": "uint32", "shape": [1, 1, 4], "tolerance": 0, "data": { "kind": "values", "values": [0, 16777217, 4000000000, 2147483648] } } } }, { "name": "ort_standard_uint8_linear_extremes", "provenance": { "source": "onnxruntime/core/providers/cpu/llm/tensorscatter.cc", "notes": "ONNX TensorScatter-24 permits uint8; UINT8_MAX and the signed boundary guard widened u32 storage." }, "attrs": { "axis": 2, "mode": "linear" }, "inputs": { "past": { "dtype": "uint8", "shape": [1, 1, 4], "data": { "kind": "values", "values": [0, 127, 255, 128] } }, "update": { "dtype": "uint8", "shape": [1, 1, 2], "data": { "kind": "values", "values": [254, 1] } }, "writeIndices": { "dtype": "uint32", "shape": [1], "data": { "kind": "values", "values": [1] } } }, "outputs": { "present": { "dtype": "uint8", "shape": [1, 1, 4], "tolerance": 0 } } }, { "name": "ort_standard_bool_linear_pattern", "provenance": { "source": "onnxruntime/core/providers/cpu/llm/tensorscatter.cc", "notes": "ONNX TensorScatter-24 permits bool; an asymmetric overwrite checks the widened u32 boolean payload route." }, "attrs": { "axis": 2, "mode": "linear" }, "inputs": { "past": { "dtype": "bool", "shape": [1, 1, 4], "data": { "kind": "values", "values": [0, 0, 1, 1] } }, "update": { "dtype": "bool", "shape": [1, 1, 2], "data": { "kind": "values", "values": [1, 0] } }, "writeIndices": { "dtype": "uint32", "shape": [1], "data": { "kind": "values", "values": [1] } } }, "outputs": { "present": { "dtype": "bool", "shape": [1, 1, 4], "tolerance": 0 } } } ] }