Download build/webgpu/test.json from webgpu-kernels/ai.onnx.ReduceL1: direct link, hf CLI and curl.
- Browser
- Download file 58.7 kB
-
https://huggingface.co/kernels/webgpu-kernels/ai.onnx.ReduceL1/resolve/v1/build/webgpu/test.json
- Command line
-
hf download hf://webgpu-kernels/ai.onnx.ReduceL1@v1/build/webgpu/test.json
-
curl -L -o test.json https://huggingface.co/kernels/webgpu-kernels/ai.onnx.ReduceL1/resolve/v1/build/webgpu/test.json
58.7 kB
| { | |
| "fixtureArrays": { | |
| "rank3_axis0_no_keepdims_input_x": [-1, 2, -3, 4, 5, -6, 0, -8, 0.5, -0.25, 1.5, -2.5, 7, -8, 9, -10, -0.75, 1.25, -1.75, 2.25, 3, -4, 5, -6], | |
| "rank4_axis0_no_keepdims_input_x": [1, -2, 3, -4, 5, -6, 7, -8, 9, -10, 11, -12, -1.5, 2.5, -3.5, 4.5, -5.5, 6.5, -7.5, 8.5, -9.5, 10.5, -11.5, 12.5] | |
| }, | |
| "cases": [ | |
| { | |
| "name": "int32_axis0_splitk_8192x2", | |
| "attrs": { "axes": [0], "keepdims": 0 }, | |
| "inputs": { "x": { "dtype": "int32", "shape": [8192, 2], "data": { "kind": "cycle", "values": [1, -1, 2, -3] } } }, | |
| "outputs": { "y": { "dtype": "int32", "shape": [2], "tolerance": 0 } } | |
| }, | |
| { | |
| "name": "int32_axis0_splitk_8192x2_distinct_columns", | |
| "attrs": { "axes": [0], "keepdims": 0 }, | |
| "inputs": { | |
| "x": { "dtype": "int32", "shape": [8192, 2], "data": { "kind": "cycle", "values": [1, -5, -2, 6, 3, -7] } } | |
| }, | |
| "outputs": { "y": { "dtype": "int32", "shape": [2], "tolerance": 0 } } | |
| }, | |
| { | |
| "name": "all_axes_flat_rank1_boundary_8192", | |
| "provenance": { | |
| "notes": "Exactly 8,192 rank-1 elements exercise the inclusive lower boundary of the parallel full reduction." | |
| }, | |
| "attrs": { "axes": [0], "keepdims": 0 }, | |
| "inputs": { "x": { "dtype": "float32", "shape": [8192], "data": { "kind": "constant", "value": 1.0 } } }, | |
| "outputs": { "y": { "dtype": "float32", "shape": [], "tolerance": 0 } } | |
| }, | |
| { | |
| "name": "all_axes_flat_fullreduce_32x32x32_keepdims", | |
| "attrs": { "keepdims": 1 }, | |
| "inputs": { | |
| "x": { | |
| "dtype": "float32", | |
| "shape": [32, 32, 32], | |
| "data": { "kind": "fillFloat32", "sinStep": 0.013, "cosStep": 0.027, "scale": 0.5 } | |
| } | |
| }, | |
| "outputs": { "y": { "dtype": "float32", "shape": [1, 1, 1], "tolerance": 0.05, "relTolerance": 0.0001 } } | |
| }, | |
| { | |
| "name": "dispatch_cliff_noop_abs_16M", | |
| "attrs": { "noop_with_empty_axes": 1 }, | |
| "inputs": { | |
| "x": { "dtype": "float32", "shape": [16777216], "data": { "kind": "linspace", "start": -1.0, "end": 1.0 } } | |
| }, | |
| "outputs": { "y": { "dtype": "float32", "shape": [16777216], "tolerance": 0 } } | |
| }, | |
| { | |
| "name": "axis0", | |
| "attrs": { "axes": [0], "keepdims": 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": [3], "tolerance": 0.000001 } } | |
| }, | |
| { | |
| "name": "axis0_tiled_64x32", | |
| "attrs": { "axes": [0], "keepdims": 0 }, | |
| "inputs": { | |
| "x": { | |
| "dtype": "float32", | |
| "shape": [64, 32], | |
| "data": { "kind": "fillFloat32", "sinStep": 0.17, "cosStep": 0.07, "scale": 0.2 } | |
| } | |
| }, | |
| "outputs": { "y": { "dtype": "float32", "shape": [32], "tolerance": 0.00002 } } | |
| }, | |
| { | |
| "name": "f32_subnormal_axis0_tilecols_l1_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/reduction/reduction_ops_test.cc", | |
| "test": "ReductionOpTest.ReduceL1", | |
| "notes": "An axis-0 L1 reduction over 64 finite subnormal magnitudes should produce a finite subnormal total in each column." | |
| }, | |
| "attrs": { "axes": [0], "keepdims": 0 }, | |
| "inputs": { "x": { "dtype": "float32", "shape": [64, 16], "data": { "kind": "constant", "value": -1e-40 } } }, | |
| "outputs": { | |
| "y": { "dtype": "float32", "shape": [16], "tolerance": 5e-44, "data": { "kind": "constant", "value": 6.4e-39 } } | |
| } | |
| }, | |
| { | |
| "name": "axis1", | |
| "attrs": { "axes": [1], "keepdims": 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], "tolerance": 0.000001 } } | |
| }, | |
| { | |
| "name": "f32_subnormal_axis1_l1_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/reduction/reduction_ops_test.cc", | |
| "test": "ReductionOpTest.ReduceL1", | |
| "notes": "L1 reduction must preserve the sum of finite subnormal magnitudes instead of flushing each absolute value to zero." | |
| }, | |
| "attrs": { "axes": [1], "keepdims": 0 }, | |
| "inputs": { | |
| "x": { | |
| "dtype": "float32", | |
| "shape": [2, 3], | |
| "data": { "kind": "values", "values": [1e-40, -1e-40, 0.0, -1e-40, -1e-40, -1e-40] } | |
| } | |
| }, | |
| "outputs": { | |
| "y": { | |
| "dtype": "float32", | |
| "shape": [2], | |
| "tolerance": 2e-45, | |
| "data": { "kind": "values", "values": [2e-40, 3e-40] } | |
| } | |
| } | |
| }, | |
| { | |
| "name": "f32_subnormal_axis0_l1_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/reduction/reduction_ops_test.cc", | |
| "test": "ReductionOpTest.ReduceL1", | |
| "notes": "An axis-0 L1 reduction over finite subnormal magnitudes must not return the zero identity." | |
| }, | |
| "attrs": { "axes": [0], "keepdims": 0 }, | |
| "inputs": { | |
| "x": { | |
| "dtype": "float32", | |
| "shape": [3, 2], | |
| "data": { "kind": "values", "values": [1e-40, -1e-40, 0.0, -1e-40, -1e-40, 1e-40] } | |
| } | |
| }, | |
| "outputs": { | |
| "y": { | |
| "dtype": "float32", | |
| "shape": [2], | |
| "tolerance": 2e-45, | |
| "data": { "kind": "values", "values": [2e-40, 3e-40] } | |
| } | |
| } | |
| }, | |
| { | |
| "name": "f32_subnormal_last_axis_vec4_l1_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/reduction/reduction_ops_test.cc", | |
| "test": "ReductionOpTest.ReduceL1", | |
| "notes": "A vectorized last-axis L1 reduction must not collapse finite subnormal magnitudes to zero." | |
| }, | |
| "attrs": { "axes": [-1], "keepdims": 0 }, | |
| "inputs": { | |
| "x": { | |
| "dtype": "float32", | |
| "shape": [2, 4], | |
| "data": { "kind": "values", "values": [1e-40, -1e-40, 0.0, 1e-40, -1e-40, -1e-40, -1e-40, -1e-40] } | |
| } | |
| }, | |
| "outputs": { | |
| "y": { | |
| "dtype": "float32", | |
| "shape": [2], | |
| "tolerance": 3e-45, | |
| "data": { "kind": "values", "values": [3e-40, 4e-40] } | |
| } | |
| } | |
| }, | |
| { | |
| "name": "f32_subnormal_last_axis_odd_l1_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/reduction/reduction_ops_test.cc", | |
| "test": "ReductionOpTest.ReduceL1", | |
| "notes": "An odd-width last-axis L1 reduction must not collapse finite subnormal magnitudes to zero." | |
| }, | |
| "attrs": { "axes": [-1], "keepdims": 0 }, | |
| "inputs": { | |
| "x": { | |
| "dtype": "float32", | |
| "shape": [2, 3], | |
| "data": { "kind": "values", "values": [1e-40, -1e-40, 0.0, -1e-40, -1e-40, -1e-40] } | |
| } | |
| }, | |
| "outputs": { | |
| "y": { | |
| "dtype": "float32", | |
| "shape": [2], | |
| "tolerance": 2e-45, | |
| "data": { "kind": "values", "values": [2e-40, 3e-40] } | |
| } | |
| } | |
| }, | |
| { | |
| "name": "f32_subnormal_rank3_axis1_l1_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/reduction/reduction_ops_test.cc", | |
| "test": "ReductionOpTest.ReduceL1", | |
| "notes": "Diverges from the upstream test's inputs (inputs.x values [1e-40, -1e-40, -1e-40, 1e-40, 1e-40, -1e-40, -1e-40, -1e-40, … 12 values] -> values [1e-40, -1e-40, -1e-40, 1e-40, 1e-40, 2e-40, 1e-40, -2e-40, … 12 values]); the expected output is recomputed by the CPU reference for the new inputs. A rank-3 axis-1 L1 reduction over finite subnormal magnitudes should keep finite subnormal totals." | |
| }, | |
| "attrs": { "axes": [1], "keepdims": 0 }, | |
| "inputs": { | |
| "x": { | |
| "dtype": "float32", | |
| "shape": [2, 3, 2], | |
| "data": { | |
| "kind": "values", | |
| "values": [1e-40, -1e-40, -1e-40, 1e-40, 1e-40, 2e-40, 1e-40, -2e-40, 2e-40, 2e-40, -2e-40, 2e-40] | |
| } | |
| } | |
| }, | |
| "outputs": { | |
| "y": { | |
| "dtype": "float32", | |
| "shape": [2, 2], | |
| "tolerance": 2e-45, | |
| "data": { "kind": "values", "values": [3e-40, 4e-40, 5e-40, 6e-40] } | |
| } | |
| } | |
| }, | |
| { | |
| "name": "f32_subnormal_rank3_all_axes_l1_scalar_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/reduction/reduction_ops_test.cc", | |
| "test": "ReductionOpTest.ReduceL1", | |
| "notes": "A rank-3 default-axes L1 reduction over finite subnormal magnitudes should preserve a finite scalar total." | |
| }, | |
| "attrs": { "keepdims": 0 }, | |
| "inputs": { "x": { "dtype": "float32", "shape": [2, 3, 2], "data": { "kind": "constant", "value": -1e-40 } } }, | |
| "outputs": { | |
| "y": { "dtype": "float32", "shape": [], "tolerance": 1e-44, "data": { "kind": "values", "values": [1.2e-39] } } | |
| } | |
| }, | |
| { | |
| "name": "f32_subnormal_rank3_all_axes_keepdims_l1_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/reduction/reduction_ops_test.cc", | |
| "test": "ReductionOpTest.ReduceL1", | |
| "notes": "A rank-3 default-axes L1 reduction with keepdims should preserve a finite subnormal total in shape [1,1,1]." | |
| }, | |
| "attrs": { "keepdims": 1 }, | |
| "inputs": { "x": { "dtype": "float32", "shape": [2, 3, 2], "data": { "kind": "constant", "value": -1e-40 } } }, | |
| "outputs": { | |
| "y": { | |
| "dtype": "float32", | |
| "shape": [1, 1, 1], | |
| "tolerance": 1e-44, | |
| "data": { "kind": "values", "values": [1.2e-39] } | |
| } | |
| } | |
| }, | |
| { | |
| "name": "axis1_empty_cols_identity_zero", | |
| "attrs": { "axes": [1], "keepdims": 0 }, | |
| "inputs": { "x": { "dtype": "float32", "shape": [2, 0], "data": { "kind": "values", "values": [] } } }, | |
| "outputs": { "y": { "dtype": "float32", "shape": [2], "tolerance": 0 } } | |
| }, | |
| { | |
| "name": "axis0_empty_rows_identity_zero", | |
| "attrs": { "axes": [0], "keepdims": 0 }, | |
| "inputs": { "x": { "dtype": "float32", "shape": [0, 3], "data": { "kind": "values", "values": [] } } }, | |
| "outputs": { "y": { "dtype": "float32", "shape": [3], "tolerance": 0 } } | |
| }, | |
| { | |
| "name": "axis1_zero_rows_noop", | |
| "attrs": { "axes": [1], "keepdims": 0 }, | |
| "inputs": { "x": { "dtype": "float32", "shape": [0, 3], "data": { "kind": "values", "values": [] } } }, | |
| "outputs": { "y": { "dtype": "float32", "shape": [0], "tolerance": 0 } } | |
| }, | |
| { | |
| "name": "axis1_keepdims", | |
| "attrs": { "axes": [1], "keepdims": 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, 1], "tolerance": 0.000001 } } | |
| }, | |
| { | |
| "name": "rank3_axis0_no_keepdims", | |
| "attrs": { "axes": [0], "keepdims": 0 }, | |
| "inputs": { | |
| "x": { | |
| "dtype": "float32", | |
| "shape": [2, 3, 4], | |
| "data": { "kind": "values", "values": { "$ref": "#/fixtureArrays/rank3_axis0_no_keepdims_input_x" } } | |
| } | |
| }, | |
| "outputs": { "y": { "dtype": "float32", "shape": [3, 4], "tolerance": 0.000001 } } | |
| }, | |
| { | |
| "name": "ort_empty_rank3_axis0_keepdims", | |
| "provenance": { | |
| "source": "onnxruntime/test/providers/cpu/reduction/reduction_ops_test.cc", | |
| "test": "ReductionOpTest.empty_set_ReduceL1_13", | |
| "notes": "Reducing an empty axis 0 returns the L1 empty-set identity." | |
| }, | |
| "attrs": { "axes": [0], "keepdims": 1 }, | |
| "inputs": { "x": { "dtype": "float32", "shape": [0, 3, 4], "data": { "kind": "values", "values": [] } } }, | |
| "outputs": { "y": { "dtype": "float32", "shape": [1, 3, 4], "tolerance": 0 } } | |
| }, | |
| { | |
| "name": "rank4_axis1_channel_no_keepdims", | |
| "attrs": { "axes": [1], "keepdims": 0 }, | |
| "inputs": { | |
| "x": { | |
| "dtype": "float32", | |
| "shape": [2, 4, 3, 2], | |
| "data": { | |
| "kind": "values", | |
| "values": [1.0, -2.0, 3.0, -4.0, 5.0, -6.0, -1.0, 2.0, -3.0, 4.0, -5.0, 6.0, 0.5, -1.5, 2.5, -3.5, 4.5, -5.5, -0.5, 1.5, -2.5, 3.5, -4.5, 5.5, 6.0, -7.0, 8.0, -9.0, 10.0, -11.0, -6.0, 7.0, -8.0, 9.0, -10.0, 11.0, 1.25, -2.25, 3.25, -4.25, 5.25, -6.25, -1.25, 2.25, -3.25, 4.25, -5.25, 6.25] | |
| } | |
| } | |
| }, | |
| "outputs": { "y": { "dtype": "float32", "shape": [2, 3, 2], "tolerance": 0.000001 } } | |
| }, | |
| { | |
| "name": "rank1_axis0_keepdims", | |
| "attrs": { "axes": [-1], "keepdims": 1 }, | |
| "inputs": { | |
| "x": { "dtype": "float32", "shape": [5], "data": { "kind": "values", "values": [-1.25, 2.5, -3.75, 0.0, 4.5] } } | |
| }, | |
| "outputs": { "y": { "dtype": "float32", "shape": [1], "tolerance": 0.000001 } } | |
| }, | |
| { | |
| "name": "ort_axis2_rank3_no_keepdims", | |
| "provenance": { | |
| "source": "onnxruntime/test/providers/cpu/reduction/reduction_ops_test.cc", | |
| "test": "ReductionOpTest.ReduceL1_do_not_keep_dims" | |
| }, | |
| "attrs": { "axes": [2], "keepdims": 0 }, | |
| "inputs": { | |
| "x": { | |
| "dtype": "float32", | |
| "shape": [3, 2, 2], | |
| "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] } | |
| } | |
| }, | |
| "outputs": { "y": { "dtype": "float32", "shape": [3, 2], "tolerance": 0.000001 } } | |
| }, | |
| { | |
| "name": "ort_axis2_rank3_keepdims", | |
| "provenance": { | |
| "source": "onnxruntime/test/providers/cpu/reduction/reduction_ops_test.cc", | |
| "test": "ReductionOpTest.ReduceL1_keepdims" | |
| }, | |
| "attrs": { "axes": [2], "keepdims": 1 }, | |
| "inputs": { | |
| "x": { | |
| "dtype": "float32", | |
| "shape": [3, 2, 2], | |
| "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] } | |
| } | |
| }, | |
| "outputs": { "y": { "dtype": "float32", "shape": [3, 2, 1], "tolerance": 0.000001 } } | |
| }, | |
| { | |
| "name": "ort_axis0_rank1_scalar", | |
| "provenance": { | |
| "source": "onnxruntime/test/providers/cpu/reduction/reduction_ops_test.cc", | |
| "test": "ReductionOpTest.ReduceL1_do_not_keep_dims_2" | |
| }, | |
| "attrs": { "axes": [0], "keepdims": 0 }, | |
| "inputs": { "x": { "dtype": "float32", "shape": [3], "data": { "kind": "values", "values": [1.0, 2.0, 3.0] } } }, | |
| "outputs": { "y": { "dtype": "float32", "shape": [], "tolerance": 0.000001 } } | |
| }, | |
| { | |
| "name": "ort_axis0_all_negative", | |
| "provenance": { | |
| "source": "onnxruntime/test/providers/cpu/reduction/reduction_ops_test.cc", | |
| "test": "ReductionOpTest.ReduceL1_float_multi_element_all_negative" | |
| }, | |
| "attrs": { "axes": [0], "keepdims": 0 }, | |
| "inputs": { | |
| "x": { | |
| "dtype": "float32", | |
| "shape": [3, 2], | |
| "data": { "kind": "values", "values": [-1.0, -2.0, -3.0, -4.0, -5.0, -6.0] } | |
| } | |
| }, | |
| "outputs": { "y": { "dtype": "float32", "shape": [2], "tolerance": 0.000001 } } | |
| }, | |
| { | |
| "name": "ort_axis0_singleton_negative_no_keepdims", | |
| "provenance": { | |
| "source": "onnxruntime/test/providers/cpu/reduction/reduction_ops_test.cc", | |
| "test": "ReductionOpTest.ReduceL1_float_singleton_axis_negative_input" | |
| }, | |
| "attrs": { "axes": [0], "keepdims": 0 }, | |
| "inputs": { "x": { "dtype": "float32", "shape": [1, 1], "data": { "kind": "values", "values": [-4.0] } } }, | |
| "outputs": { "y": { "dtype": "float32", "shape": [1], "tolerance": 0 } } | |
| }, | |
| { | |
| "name": "ort_axis0_singleton_negative_keepdims", | |
| "provenance": { | |
| "source": "onnxruntime/test/providers/cpu/reduction/reduction_ops_test.cc", | |
| "test": "ReductionOpTest.ReduceL1_int32_keepdims_singleton_axis_negative_input", | |
| "notes": "Float32 projection of ORT's singleton keepdims absolute-value edge." | |
| }, | |
| "attrs": { "axes": [0], "keepdims": 1 }, | |
| "inputs": { "x": { "dtype": "float32", "shape": [1, 2], "data": { "kind": "values", "values": [-3.0, -7.0] } } }, | |
| "outputs": { "y": { "dtype": "float32", "shape": [1, 2], "tolerance": 0 } } | |
| }, | |
| { | |
| "name": "ort_rank0_negative_scalar", | |
| "provenance": { | |
| "source": "onnxruntime/test/providers/cpu/reduction/reduction_ops_test.cc", | |
| "test": "ReductionOpTest.ReduceL1_0DTensor_negative_input" | |
| }, | |
| "inputs": { "x": { "dtype": "float32", "shape": [], "data": { "kind": "values", "values": [-3.0] } } }, | |
| "outputs": { "y": { "dtype": "float32", "shape": [], "tolerance": 0 } } | |
| }, | |
| { | |
| "name": "onnx_backend_reduce_l1_do_not_keepdims_example", | |
| "attrs": { "keepdims": 0, "axes": [2] }, | |
| "inputs": { | |
| "x": { | |
| "dtype": "float32", | |
| "shape": [3, 2, 2], | |
| "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] } | |
| } | |
| }, | |
| "outputs": { "y": { "dtype": "float32", "shape": [3, 2] } }, | |
| "provenance": { | |
| "source": "cmake/external/onnx/onnx/backend/test/data/node/test_reduce_l1_do_not_keepdims_example", | |
| "notes": "The ONNX int64 axes input is materialized as this compile-time axes list." | |
| } | |
| }, | |
| { | |
| "name": "onnx_backend_reduce_l1_do_not_keepdims_random", | |
| "attrs": { "keepdims": 0, "axes": [2] }, | |
| "inputs": { | |
| "x": { | |
| "dtype": "float32", | |
| "shape": [3, 2, 2], | |
| "data": { | |
| "kind": "values", | |
| "values": [0.9762700796127319, 4.3037872314453125, 2.055267572402954, 0.8976636528968811, -1.5269039869308472, 2.917882204055786, -1.248255729675293, 7.835460186004639, 9.273255348205566, -2.331169605255127, 5.834500789642334, 0.577898383140564] | |
| } | |
| } | |
| }, | |
| "outputs": { "y": { "dtype": "float32", "shape": [3, 2] } }, | |
| "provenance": { | |
| "source": "cmake/external/onnx/onnx/backend/test/data/node/test_reduce_l1_do_not_keepdims_random", | |
| "notes": "The ONNX int64 axes input is materialized as this compile-time axes list." | |
| } | |
| }, | |
| { | |
| "name": "onnx_backend_reduce_l1_empty_set", | |
| "attrs": { "keepdims": 1, "axes": [1] }, | |
| "inputs": { "x": { "dtype": "float32", "shape": [2, 0, 4], "data": { "kind": "values", "values": [] } } }, | |
| "outputs": { "y": { "dtype": "float32", "shape": [2, 1, 4] } }, | |
| "provenance": { | |
| "source": "cmake/external/onnx/onnx/backend/test/data/node/test_reduce_l1_empty_set", | |
| "notes": "The ONNX int64 axes input is materialized as this compile-time axes list." | |
| } | |
| }, | |
| { | |
| "name": "onnx_backend_reduce_l1_keep_dims_example", | |
| "attrs": { "keepdims": 1, "axes": [2] }, | |
| "inputs": { | |
| "x": { | |
| "dtype": "float32", | |
| "shape": [3, 2, 2], | |
| "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] } | |
| } | |
| }, | |
| "outputs": { "y": { "dtype": "float32", "shape": [3, 2, 1] } }, | |
| "provenance": { | |
| "source": "cmake/external/onnx/onnx/backend/test/data/node/test_reduce_l1_keep_dims_example", | |
| "notes": "The ONNX int64 axes input is materialized as this compile-time axes list." | |
| } | |
| }, | |
| { | |
| "name": "onnx_backend_reduce_l1_keep_dims_random", | |
| "attrs": { "keepdims": 1, "axes": [2] }, | |
| "inputs": { | |
| "x": { | |
| "dtype": "float32", | |
| "shape": [3, 2, 2], | |
| "data": { | |
| "kind": "values", | |
| "values": [0.9762700796127319, 4.3037872314453125, 2.055267572402954, 0.8976636528968811, -1.5269039869308472, 2.917882204055786, -1.248255729675293, 7.835460186004639, 9.273255348205566, -2.331169605255127, 5.834500789642334, 0.577898383140564] | |
| } | |
| } | |
| }, | |
| "outputs": { "y": { "dtype": "float32", "shape": [3, 2, 1] } }, | |
| "provenance": { | |
| "source": "cmake/external/onnx/onnx/backend/test/data/node/test_reduce_l1_keep_dims_random", | |
| "notes": "The ONNX int64 axes input is materialized as this compile-time axes list." | |
| } | |
| }, | |
| { | |
| "name": "onnx_backend_reduce_l1_negative_axes_keep_dims_example", | |
| "attrs": { "keepdims": 1, "axes": [-1] }, | |
| "inputs": { | |
| "x": { | |
| "dtype": "float32", | |
| "shape": [3, 2, 2], | |
| "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] } | |
| } | |
| }, | |
| "outputs": { "y": { "dtype": "float32", "shape": [3, 2, 1] } }, | |
| "provenance": { | |
| "source": "cmake/external/onnx/onnx/backend/test/data/node/test_reduce_l1_negative_axes_keep_dims_example", | |
| "notes": "The ONNX int64 axes input is materialized as this compile-time axes list." | |
| } | |
| }, | |
| { | |
| "name": "onnx_backend_reduce_l1_negative_axes_keep_dims_random", | |
| "attrs": { "keepdims": 1, "axes": [-1] }, | |
| "inputs": { | |
| "x": { | |
| "dtype": "float32", | |
| "shape": [3, 2, 2], | |
| "data": { | |
| "kind": "values", | |
| "values": [0.9762700796127319, 4.3037872314453125, 2.055267572402954, 0.8976636528968811, -1.5269039869308472, 2.917882204055786, -1.248255729675293, 7.835460186004639, 9.273255348205566, -2.331169605255127, 5.834500789642334, 0.577898383140564] | |
| } | |
| } | |
| }, | |
| "outputs": { "y": { "dtype": "float32", "shape": [3, 2, 1] } }, | |
| "provenance": { | |
| "source": "cmake/external/onnx/onnx/backend/test/data/node/test_reduce_l1_negative_axes_keep_dims_random", | |
| "notes": "The ONNX int64 axes input is materialized as this compile-time axes list." | |
| } | |
| }, | |
| { | |
| "name": "default_axes_rank3_no_keepdims_scalar", | |
| "attrs": { "keepdims": 0 }, | |
| "inputs": { | |
| "x": { | |
| "dtype": "float32", | |
| "shape": [3, 2, 2], | |
| "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] } | |
| } | |
| }, | |
| "outputs": { | |
| "y": { "dtype": "float32", "shape": [], "tolerance": 0, "data": { "kind": "values", "values": [78.0] } } | |
| } | |
| }, | |
| { | |
| "name": "onnx_backend_reduce_l1_default_axes_keepdims_example", | |
| "provenance": { | |
| "source": "cmake/external/onnx/onnx/backend/test/data/node/test_reduce_l1_default_axes_keepdims_example" | |
| }, | |
| "attrs": { "keepdims": 1 }, | |
| "inputs": { | |
| "x": { | |
| "dtype": "float32", | |
| "shape": [3, 2, 2], | |
| "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] } | |
| } | |
| }, | |
| "outputs": { "y": { "dtype": "float32", "shape": [1, 1, 1] } } | |
| }, | |
| { | |
| "name": "onnx_backend_reduce_l1_default_axes_keepdims_random", | |
| "provenance": { | |
| "source": "cmake/external/onnx/onnx/backend/test/data/node/test_reduce_l1_default_axes_keepdims_random" | |
| }, | |
| "attrs": { "keepdims": 1 }, | |
| "inputs": { | |
| "x": { | |
| "dtype": "float32", | |
| "shape": [3, 2, 2], | |
| "data": { | |
| "kind": "values", | |
| "values": [0.9762700796127319, 4.3037872314453125, 2.055267572402954, 0.8976636528968811, -1.5269039869308472, 2.917882204055786, -1.248255729675293, 7.835460186004639, 9.273255348205566, -2.331169605255127, 5.834500789642334, 0.577898383140564] | |
| } | |
| } | |
| }, | |
| "outputs": { "y": { "dtype": "float32", "shape": [1, 1, 1] } } | |
| }, | |
| { | |
| "name": "subgroup_vec4_last_axis_2x256", | |
| "attrs": { "axes": [-1], "keepdims": 0 }, | |
| "inputs": { | |
| "x": { | |
| "dtype": "float32", | |
| "shape": [2, 256], | |
| "data": { "kind": "fillFloat32", "sinStep": 0.13, "cosStep": 0.29 } | |
| } | |
| }, | |
| "outputs": { "y": { "dtype": "float32", "shape": [2], "tolerance": 0.0002, "relTolerance": 0.0001 } } | |
| }, | |
| { | |
| "name": "subgroup_scalar_last_axis_2x65", | |
| "attrs": { "axes": [1], "keepdims": 0 }, | |
| "inputs": { | |
| "x": { | |
| "dtype": "float32", | |
| "shape": [2, 65], | |
| "data": { "kind": "fillFloat32", "sinStep": 0.23, "cosStep": 0.11 } | |
| } | |
| }, | |
| "outputs": { "y": { "dtype": "float32", "shape": [2], "tolerance": 0.0002, "relTolerance": 0.0001 } } | |
| }, | |
| { | |
| "name": "ort_noop_empty_axes_2d_elementwise_abs", | |
| "provenance": { | |
| "source": "onnxruntime/test/providers/cpu/reduction/reduction_ops_test.cc", | |
| "test": "ReductionOpTest.ReduceL1_NoopWithEmptyAxes_2D_ElementwiseAbs" | |
| }, | |
| "attrs": { "noop_with_empty_axes": 1 }, | |
| "inputs": { | |
| "x": { "dtype": "float32", "shape": [2, 2], "data": { "kind": "values", "values": [-2.0, 0.0, 3.5, -4.0] } } | |
| }, | |
| "outputs": { "y": { "dtype": "float32", "shape": [2, 2], "tolerance": 0 } } | |
| }, | |
| { | |
| "name": "ort_noop_empty_axes_scalar_abs", | |
| "provenance": { | |
| "source": "onnxruntime/test/providers/cpu/reduction/reduction_ops_test.cc", | |
| "test": "ReductionOpTest.ReduceL1_NoopWithEmptyAxes_Scalar" | |
| }, | |
| "attrs": { "noop_with_empty_axes": 1 }, | |
| "inputs": { "x": { "dtype": "float32", "shape": [], "data": { "kind": "values", "values": [-3.0] } } }, | |
| "outputs": { "y": { "dtype": "float32", "shape": [], "tolerance": 0 } } | |
| }, | |
| { | |
| "name": "ort_noop_empty_axes_3d_elementwise_abs", | |
| "provenance": { | |
| "source": "onnxruntime/test/providers/cpu/reduction/reduction_ops_test.cc", | |
| "test": "ReductionOpTest.ReduceL1_NoopWithEmptyAxes_3D_ElementwiseAbs" | |
| }, | |
| "attrs": { "noop_with_empty_axes": 1 }, | |
| "inputs": { | |
| "x": { "dtype": "float32", "shape": [1, 2, 2], "data": { "kind": "values", "values": [-2.0, 0.0, 3.5, -4.0] } } | |
| }, | |
| "outputs": { "y": { "dtype": "float32", "shape": [1, 2, 2], "tolerance": 0 } } | |
| }, | |
| { | |
| "name": "ort_int32_singleton_axis_negative", | |
| "provenance": { | |
| "source": "onnxruntime/test/providers/cpu/reduction/reduction_ops_test.cc", | |
| "test": "ReductionOpTest.ReduceL1_int32_singleton_axis_negative_input" | |
| }, | |
| "attrs": { "axes": [0], "keepdims": 0 }, | |
| "inputs": { "x": { "dtype": "int32", "shape": [1, 1], "data": { "kind": "values", "values": [-4] } } }, | |
| "outputs": { | |
| "y": { "dtype": "int32", "shape": [1], "data": { "kind": "values", "values": [4] }, "tolerance": 0 } | |
| } | |
| }, | |
| { | |
| "name": "ort_int32_keepdims_singleton_axis_negative", | |
| "provenance": { | |
| "source": "onnxruntime/test/providers/cpu/reduction/reduction_ops_test.cc", | |
| "test": "ReductionOpTest.ReduceL1_int32_keepdims_singleton_axis_negative_input" | |
| }, | |
| "attrs": { "axes": [0], "keepdims": 1 }, | |
| "inputs": { "x": { "dtype": "int32", "shape": [1, 2], "data": { "kind": "values", "values": [-3, -7] } } }, | |
| "outputs": { | |
| "y": { "dtype": "int32", "shape": [1, 2], "data": { "kind": "values", "values": [3, 7] }, "tolerance": 0 } | |
| } | |
| }, | |
| { | |
| "name": "ort_int32_multi_axis_keepdims", | |
| "provenance": { | |
| "source": "onnxruntime/test/providers/cpu/reduction/reduction_ops_test.cc", | |
| "test": "ReductionOpTest.ReduceL1_int32" | |
| }, | |
| "attrs": { "axes": [0, 2], "keepdims": 1 }, | |
| "inputs": { | |
| "x": { | |
| "dtype": "int32", | |
| "shape": [3, 2, 2], | |
| "data": { "kind": "values", "values": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] } | |
| } | |
| }, | |
| "outputs": { | |
| "y": { "dtype": "int32", "shape": [1, 2, 1], "data": { "kind": "values", "values": [33, 45] }, "tolerance": 0 } | |
| } | |
| }, | |
| { | |
| "name": "ort_int32_abs_int_min_saturates_gpu_gap", | |
| "skipGpu": { | |
| "category": "todo", | |
| "reason": "The current integer reduction route uses an i32 accumulator, so it cannot reproduce the fixture's widened intermediate arithmetic and final int32 saturation. A portable multiword accumulator can implement this behavior." | |
| }, | |
| "provenance": { | |
| "source": "onnxruntime/test/providers/cpu/reduction/reduction_ops_test.cc", | |
| "test": "ReductionOpTest.ReduceL1_int32_INT_MIN" | |
| }, | |
| "attrs": { "axes": [0], "keepdims": 0 }, | |
| "inputs": { "x": { "dtype": "int32", "shape": [1], "data": { "kind": "values", "values": [-2147483648] } } }, | |
| "outputs": { | |
| "y": { "dtype": "int32", "shape": [], "data": { "kind": "values", "values": [2147483647] }, "tolerance": 0 } | |
| } | |
| }, | |
| { | |
| "name": "ort_int32_summation_overflow_saturates_gpu_gap", | |
| "skipGpu": { | |
| "category": "todo", | |
| "reason": "The current integer reduction route uses an i32 accumulator, so it cannot reproduce the fixture's widened intermediate arithmetic and final int32 saturation. A portable multiword accumulator can implement this behavior." | |
| }, | |
| "provenance": { | |
| "source": "onnxruntime/test/providers/cpu/reduction/reduction_ops_test.cc", | |
| "test": "ReductionOpTest.ReduceL1_int32_summation_overflow" | |
| }, | |
| "attrs": { "axes": [0], "keepdims": 0 }, | |
| "inputs": { | |
| "x": { | |
| "dtype": "int32", | |
| "shape": [3], | |
| "data": { "kind": "values", "values": [1000000000, 1000000000, 1000000000] } | |
| } | |
| }, | |
| "outputs": { | |
| "y": { "dtype": "int32", "shape": [], "data": { "kind": "values", "values": [2147483647] }, "tolerance": 0 } | |
| } | |
| }, | |
| { | |
| "name": "ort_float_multi_axis_keepdims", | |
| "provenance": { | |
| "source": "onnxruntime/test/providers/cpu/reduction/reduction_ops_test.cc", | |
| "test": "ReductionOpTest.ReduceL1" | |
| }, | |
| "attrs": { "axes": [0, 2], "keepdims": 1 }, | |
| "inputs": { | |
| "x": { | |
| "dtype": "float32", | |
| "shape": [3, 2, 2], | |
| "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] } | |
| } | |
| }, | |
| "outputs": { "y": { "dtype": "float32", "shape": [1, 2, 1], "tolerance": 0.000001 } } | |
| }, | |
| { | |
| "name": "rank3_lastaxis_cols1024_tree_nosubgroup", | |
| "attrs": { "axes": [2], "keepdims": 0 }, | |
| "inputs": { | |
| "x": { | |
| "dtype": "float32", | |
| "shape": [2, 2, 1024], | |
| "data": { | |
| "kind": "cycle", | |
| "values": [1.0, -2.0, 0.5, 3.25, -1.5, 2.0, -0.75, 4.0, -3.5, 1.25, 0.0, -2.25, 5.0, -4.0, 2.75, -1.0, 6.5] | |
| } | |
| } | |
| }, | |
| "outputs": { "y": { "dtype": "float32", "shape": [2, 2], "tolerance": 0.00001 } } | |
| }, | |
| { | |
| "name": "axis0_splitk_8192x32", | |
| "attrs": { "axes": [0], "keepdims": 0 }, | |
| "inputs": { | |
| "x": { | |
| "dtype": "float32", | |
| "shape": [8192, 32], | |
| "data": { "kind": "fillFloat32", "sinStep": 0.17, "cosStep": 0.07, "scale": 0.2 } | |
| } | |
| }, | |
| "outputs": { "y": { "dtype": "float32", "shape": [32], "tolerance": 0.001 } } | |
| }, | |
| { | |
| "name": "axis0_splitk_8192x48_keepdims", | |
| "attrs": { "axes": [0], "keepdims": 1 }, | |
| "inputs": { | |
| "x": { | |
| "dtype": "float32", | |
| "shape": [8192, 48], | |
| "data": { "kind": "fillFloat32", "sinStep": 0.17, "cosStep": 0.07, "scale": 0.2 } | |
| } | |
| }, | |
| "outputs": { "y": { "dtype": "float32", "shape": [1, 48], "tolerance": 0.001 } } | |
| }, | |
| { | |
| "name": "rank4_axis0_no_keepdims", | |
| "provenance": { | |
| "source": "onnxruntime/test/providers/cpu/reduction/reduction_ops_test.cc", | |
| "test": "ReductionOpTest.ReduceL1 (rank4 single-axis projection)", | |
| "notes": "Single-axis ReduceL1 over axis 0 of a rank-4 tensor. Valid ONNX float32 reduction; ORT computes the elementwise L1 over the leading axis." | |
| }, | |
| "attrs": { "axes": [0], "keepdims": 0 }, | |
| "inputs": { | |
| "x": { | |
| "dtype": "float32", | |
| "shape": [2, 2, 3, 2], | |
| "data": { "kind": "values", "values": { "$ref": "#/fixtureArrays/rank4_axis0_no_keepdims_input_x" } } | |
| } | |
| }, | |
| "outputs": { "y": { "dtype": "float32", "shape": [2, 3, 2], "tolerance": 0.000001 } } | |
| }, | |
| { | |
| "name": "rank4_axis2_keepdims", | |
| "provenance": { | |
| "source": "onnxruntime/test/providers/cpu/reduction/reduction_ops_test.cc", | |
| "test": "ReductionOpTest.ReduceL1_keepdims (rank4 middle-axis projection)", | |
| "notes": "Single-axis ReduceL1 over middle axis 2 of a rank-4 NCHW-like tensor with keepdims. Valid ONNX float32; ORT computes per-element L1 over axis 2." | |
| }, | |
| "attrs": { "axes": [2], "keepdims": 1 }, | |
| "inputs": { | |
| "x": { | |
| "dtype": "float32", | |
| "shape": [2, 3, 2, 2], | |
| "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, -1.25, 2.25, -3.25, 4.25, -5.25, 6.25, -7.25, 8.25, -9.25, 10.25, -11.25, 12.25] | |
| } | |
| } | |
| }, | |
| "outputs": { "y": { "dtype": "float32", "shape": [2, 3, 1, 2], "tolerance": 0.000001 } } | |
| }, | |
| { | |
| "name": "rank4_multi_axes_0_2_keepdims", | |
| "provenance": { | |
| "source": "onnxruntime/test/providers/cpu/reduction/reduction_ops_test.cc", | |
| "test": "ReductionOpTest.ReduceL1 (rank4 multi-axis projection)", | |
| "notes": "Multi-axis ReduceL1 over axes [0,2] of a rank-4 tensor with keepdims. Valid ONNX float32 multi-axis reduction; ORT computes L1 over the union of axes." | |
| }, | |
| "attrs": { "axes": [0, 2], "keepdims": 1 }, | |
| "inputs": { | |
| "x": { | |
| "dtype": "float32", | |
| "shape": [2, 2, 2, 2], | |
| "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, -1.5, 2.5, -3.5, 4.5] | |
| } | |
| } | |
| }, | |
| "outputs": { "y": { "dtype": "float32", "shape": [1, 2, 1, 2], "tolerance": 0.000001 } } | |
| }, | |
| { | |
| "name": "rank3_multi_axes_1_2_keepdims", | |
| "provenance": { | |
| "source": "onnxruntime/test/providers/cpu/reduction/reduction_ops_test.cc", | |
| "test": "ReductionOpTest.ReduceL1 (rank3 multi-axis [1,2] subset)", | |
| "notes": "A rank-3 float32 reduction over axes [1,2] exercises the corresponding multi-axis mask with keepdims enabled." | |
| }, | |
| "attrs": { "axes": [1, 2], "keepdims": 1 }, | |
| "inputs": { | |
| "x": { | |
| "dtype": "float32", | |
| "shape": [2, 3, 4], | |
| "data": { "kind": "values", "values": { "$ref": "#/fixtureArrays/rank3_axis0_no_keepdims_input_x" } } | |
| } | |
| }, | |
| "outputs": { "y": { "dtype": "float32", "shape": [2, 1, 1], "tolerance": 0.000001 } } | |
| }, | |
| { | |
| "name": "rank3_axis1_middle_4x128x256", | |
| "provenance": { | |
| "notes": "A rank-3 axis-1 reduction with a wide trailing dimension exercises middle-axis address arithmetic." | |
| }, | |
| "attrs": { "axes": [1], "keepdims": 0 }, | |
| "inputs": { | |
| "x": { | |
| "dtype": "float32", | |
| "shape": [4, 128, 256], | |
| "data": { "kind": "cycle", "values": [1.0, -2.0, 0.5, -0.25, 3.0, -4.0, 1.5, -0.75] } | |
| } | |
| }, | |
| "outputs": { "y": { "dtype": "float32", "shape": [4, 256], "tolerance": 0.0002, "relTolerance": 0.0002 } } | |
| }, | |
| { | |
| "name": "rank4_lastaxis_scalar_2x2x2x3", | |
| "provenance": { | |
| "source": "onnxruntime/test/providers/cpu/reduction/reduction_ops_test.cc", | |
| "test": "ReductionOpTest.ReduceL1_do_not_keep_dims (rank4 last-axis odd-width)", | |
| "notes": "A rank-4 float32 reduction over axis 3 with three columns exercises the scalar subgroup last-axis reducer for an unaligned row width." | |
| }, | |
| "attrs": { "axes": [-1], "keepdims": 0 }, | |
| "inputs": { | |
| "x": { | |
| "dtype": "float32", | |
| "shape": [2, 2, 2, 3], | |
| "data": { "kind": "values", "values": { "$ref": "#/fixtureArrays/rank4_axis0_no_keepdims_input_x" } } | |
| } | |
| }, | |
| "outputs": { "y": { "dtype": "float32", "shape": [2, 2, 2], "tolerance": 0.00001 } } | |
| }, | |
| { | |
| "name": "lastaxis_unaligned_256x513_scalar", | |
| "provenance": { | |
| "notes": "A 513-column last axis is unaligned and exercises scalar row reduction across 256 rows." | |
| }, | |
| "attrs": { "axes": [-1], "keepdims": 0 }, | |
| "inputs": { | |
| "x": { | |
| "dtype": "float32", | |
| "shape": [256, 513], | |
| "data": { "kind": "cycle", "values": [1.0, -2.0, 0.5, -0.25, 3.0, -4.0, 1.5, -0.75] } | |
| } | |
| }, | |
| "outputs": { "y": { "dtype": "float32", "shape": [256], "tolerance": 0.0002, "relTolerance": 0.0002 } } | |
| }, | |
| { | |
| "name": "reduce_size1_axis_returns_abs_value", | |
| "attrs": { "axes": [1], "keepdims": 0 }, | |
| "inputs": { | |
| "x": { | |
| "dtype": "float32", | |
| "shape": [3, 1, 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] } | |
| } | |
| }, | |
| "outputs": { "y": { "dtype": "float32", "shape": [3, 4] } } | |
| }, | |
| { | |
| "name": "int32_large_values_l1_no_overflow", | |
| "attrs": { "axes": [0], "keepdims": 0 }, | |
| "inputs": { | |
| "x": { | |
| "dtype": "int32", | |
| "shape": [3, 1], | |
| "data": { "kind": "values", "values": [-710000000, 710000000, -710000000] } | |
| } | |
| }, | |
| "outputs": { | |
| "y": { "dtype": "int32", "shape": [1], "data": { "kind": "values", "values": [2130000000] }, "tolerance": 0 } | |
| } | |
| }, | |
| { | |
| "name": "negative_axis_rank3_minus2", | |
| "attrs": { "axes": [-2], "keepdims": 1 }, | |
| "inputs": { | |
| "x": { | |
| "dtype": "float32", | |
| "shape": [2, 4, 3], | |
| "data": { "kind": "fillFloat32", "sinStep": 0.19, "cosStep": 0.11, "scale": 1.5 } | |
| } | |
| }, | |
| "outputs": { "y": { "dtype": "float32", "shape": [2, 1, 3] } } | |
| }, | |
| { | |
| "name": "multi_axis_rank3_axes_0_1_keepdims", | |
| "attrs": { "axes": [0, 1], "keepdims": 1 }, | |
| "inputs": { | |
| "x": { | |
| "dtype": "float32", | |
| "shape": [3, 4, 5], | |
| "data": { "kind": "fillFloat32", "sinStep": 0.07, "cosStep": 0.13, "scale": 2.0 } | |
| } | |
| }, | |
| "outputs": { "y": { "dtype": "float32", "shape": [1, 1, 5] } } | |
| }, | |
| { | |
| "name": "axis0_narrow_f32_8192x3_splitk", | |
| "provenance": { | |
| "notes": "An 8,192-by-3 axis-0 reduction exercises split-K with a narrow output. Negative ones make the absolute-value sum exact." | |
| }, | |
| "attrs": { "axes": [0], "keepdims": 0 }, | |
| "inputs": { "x": { "dtype": "float32", "shape": [8192, 3], "data": { "kind": "constant", "value": -1.0 } } }, | |
| "outputs": { "y": { "dtype": "float32", "shape": [3], "tolerance": 0 } } | |
| }, | |
| { | |
| "name": "contiguous_suffix_axes12_parallel", | |
| "provenance": { | |
| "notes": "Contiguous axes {1,2} exercise the shared cooperative suffix reduction instead of one serial lane per output." | |
| }, | |
| "attrs": { "axes": [1, 2], "keepdims": 1 }, | |
| "inputs": { | |
| "x": { | |
| "dtype": "float32", | |
| "shape": [3, 16, 16], | |
| "data": { "kind": "fillFloat32", "sinStep": 0.13, "cosStep": 0.07, "scale": 0.2 } | |
| } | |
| }, | |
| "outputs": { "y": { "dtype": "float32", "shape": [3, 1, 1], "tolerance": 0.00001 } } | |
| }, | |
| { | |
| "name": "axis_split_rank3_axis1_2x8192x4", | |
| "attrs": { "axes": [1], "keepdims": 0 }, | |
| "inputs": { | |
| "x": { | |
| "dtype": "float32", | |
| "shape": [2, 8192, 4], | |
| "data": { "kind": "fillFloat32", "sinStep": 0.17, "cosStep": 0.07, "scale": 0.2 } | |
| } | |
| }, | |
| "outputs": { "y": { "dtype": "float32", "shape": [2, 4], "tolerance": 0.001 } } | |
| }, | |
| { | |
| "name": "f16_axis_split_tiled_narrow_2x8192x4", | |
| "attrs": { "axes": [1], "keepdims": 0 }, | |
| "inputs": { | |
| "x": { | |
| "dtype": "float16", | |
| "shape": [2, 8192, 4], | |
| "data": { "kind": "fillFloat32", "sinStep": 0.17, "cosStep": 0.07, "scale": 0.2 } | |
| } | |
| }, | |
| "outputs": { "y": { "dtype": "float16", "shape": [2, 4], "tolerance": 0.05, "relTolerance": 0.01 } } | |
| }, | |
| { | |
| "name": "axis_split_rank3_axis1_wide_2x8192x32", | |
| "attrs": { "axes": [1], "keepdims": 0 }, | |
| "inputs": { | |
| "x": { | |
| "dtype": "float32", | |
| "shape": [2, 8192, 32], | |
| "data": { "kind": "fillFloat32", "sinStep": 0.17, "cosStep": 0.07, "scale": 0.2 } | |
| } | |
| }, | |
| "outputs": { "y": { "dtype": "float32", "shape": [2, 32], "tolerance": 0.001 } } | |
| }, | |
| { | |
| "name": "f16_axis_split_wide_2x8192x32", | |
| "attrs": { "axes": [1], "keepdims": 0 }, | |
| "inputs": { | |
| "x": { | |
| "dtype": "float16", | |
| "shape": [2, 8192, 32], | |
| "data": { "kind": "fillFloat32", "sinStep": 0.17, "cosStep": 0.07, "scale": 0.2 } | |
| } | |
| }, | |
| "outputs": { "y": { "dtype": "float16", "shape": [2, 32], "tolerance": 0.05, "relTolerance": 0.01 } } | |
| }, | |
| { | |
| "name": "f16_rank3_axis1_serial", | |
| "attrs": { "axes": [1], "keepdims": 0 }, | |
| "inputs": { | |
| "x": { | |
| "dtype": "float16", | |
| "shape": [4, 128, 256], | |
| "data": { "kind": "cycle", "values": [1.0, -2.0, 0.5, -0.25, 3.0, -4.0, 1.5, -0.75] } | |
| } | |
| }, | |
| "outputs": { "y": { "dtype": "float16", "shape": [4, 256], "tolerance": 0.05, "relTolerance": 0.0002 } } | |
| }, | |
| { | |
| "name": "f16_last_axis_serial_fallback", | |
| "attrs": { "axes": [1], "keepdims": 0 }, | |
| "inputs": { | |
| "x": { | |
| "dtype": "float16", | |
| "shape": [2, 65], | |
| "data": { "kind": "fillFloat32", "sinStep": 0.23, "cosStep": 0.11 } | |
| } | |
| }, | |
| "outputs": { "y": { "dtype": "float16", "shape": [2], "tolerance": 0.05, "relTolerance": 0.0001 } } | |
| }, | |
| { | |
| "name": "f16_all_axes", | |
| "attrs": { "axes": [0], "keepdims": 0 }, | |
| "inputs": { "x": { "dtype": "float16", "shape": [8192], "data": { "kind": "constant", "value": 1.0 } } }, | |
| "outputs": { "y": { "dtype": "float16", "shape": [], "tolerance": 0.05 } } | |
| }, | |
| { | |
| "name": "f16_axis0_splitk_8192x8", | |
| "attrs": { "axes": [0], "keepdims": 0 }, | |
| "inputs": { | |
| "x": { | |
| "dtype": "float16", | |
| "shape": [8192, 8], | |
| "data": { "kind": "fillFloat32", "sinStep": 0.17, "cosStep": 0.07, "scale": 0.2 } | |
| } | |
| }, | |
| "outputs": { "y": { "dtype": "float16", "shape": [8], "tolerance": 0.05, "relTolerance": 0.002 } } | |
| }, | |
| { | |
| "name": "f16_last_axis_vec4_8x1024", | |
| "attrs": { "axes": [1], "keepdims": 0 }, | |
| "inputs": { | |
| "x": { | |
| "dtype": "float16", | |
| "shape": [8, 1024], | |
| "data": { "kind": "fillFloat32", "sinStep": 0.17, "cosStep": 0.07, "scale": 0.2 } | |
| } | |
| }, | |
| "outputs": { "y": { "dtype": "float16", "shape": [8], "tolerance": 0.05, "relTolerance": 0.002 } } | |
| }, | |
| { | |
| "name": "f16_last_axis_scalar_8x1023", | |
| "attrs": { "axes": [1], "keepdims": 0 }, | |
| "inputs": { | |
| "x": { | |
| "dtype": "float16", | |
| "shape": [8, 1023], | |
| "data": { "kind": "fillFloat32", "sinStep": 0.17, "cosStep": 0.07, "scale": 0.2 } | |
| } | |
| }, | |
| "outputs": { "y": { "dtype": "float16", "shape": [8], "tolerance": 0.05, "relTolerance": 0.002 } } | |
| }, | |
| { | |
| "name": "f16_all_axes_flat_65543", | |
| "attrs": { "keepdims": 0 }, | |
| "inputs": { | |
| "x": { | |
| "dtype": "float16", | |
| "shape": [65543], | |
| "data": { "kind": "fillFloat32", "sinStep": 0.17, "cosStep": 0.07, "scale": 0.2 } | |
| } | |
| }, | |
| "outputs": { "y": { "dtype": "float16", "shape": [], "tolerance": 0.05, "relTolerance": 0.002 } } | |
| }, | |
| { | |
| "name": "f16_suffix_vec4_4x8x128", | |
| "attrs": { "axes": [1, 2], "keepdims": 0 }, | |
| "inputs": { | |
| "x": { | |
| "dtype": "float16", | |
| "shape": [4, 8, 128], | |
| "data": { "kind": "fillFloat32", "sinStep": 0.17, "cosStep": 0.07, "scale": 0.2 } | |
| } | |
| }, | |
| "outputs": { "y": { "dtype": "float16", "shape": [4], "tolerance": 0.05, "relTolerance": 0.002 } } | |
| }, | |
| { | |
| "name": "f16_suffix_scalar_4x7x37", | |
| "attrs": { "axes": [1, 2], "keepdims": 0 }, | |
| "inputs": { | |
| "x": { | |
| "dtype": "float16", | |
| "shape": [4, 7, 37], | |
| "data": { "kind": "fillFloat32", "sinStep": 0.17, "cosStep": 0.07, "scale": 0.2 } | |
| } | |
| }, | |
| "outputs": { "y": { "dtype": "float16", "shape": [4], "tolerance": 0.05, "relTolerance": 0.002 } } | |
| }, | |
| { | |
| "name": "f16_axis0_tilecols_4096x64", | |
| "attrs": { "axes": [0], "keepdims": 0 }, | |
| "inputs": { | |
| "x": { | |
| "dtype": "float16", | |
| "shape": [4096, 64], | |
| "data": { "kind": "fillFloat32", "sinStep": 0.17, "cosStep": 0.07, "scale": 0.2 } | |
| } | |
| }, | |
| "outputs": { "y": { "dtype": "float16", "shape": [64], "tolerance": 0.05, "relTolerance": 0.002 } } | |
| }, | |
| { | |
| "name": "int32_axis0_tiled_64x32", | |
| "attrs": { "axes": [0], "keepdims": 0 }, | |
| "inputs": { | |
| "x": { | |
| "dtype": "int32", | |
| "shape": [64, 32], | |
| "data": { "kind": "cycle", "values": [-16777217, 3, 5, -16777219, 7, 11, -2] } | |
| } | |
| }, | |
| "outputs": { "y": { "dtype": "int32", "shape": [32], "tolerance": 0 } } | |
| }, | |
| { | |
| "name": "subgroup_rows_last_axis_f32_96x256", | |
| "attrs": { "axes": [-1], "keepdims": 0 }, | |
| "inputs": { | |
| "x": { | |
| "dtype": "float32", | |
| "shape": [96, 256], | |
| "data": { "kind": "fillFloat32", "sinStep": 0.13, "cosStep": 0.29 } | |
| } | |
| }, | |
| "outputs": { "y": { "dtype": "float32", "shape": [96], "tolerance": 0.0002, "relTolerance": 0.0001 } } | |
| }, | |
| { | |
| "name": "subgroup_rows_last_axis_f16_80x1024", | |
| "attrs": { "axes": [1], "keepdims": 0 }, | |
| "inputs": { | |
| "x": { | |
| "dtype": "float16", | |
| "shape": [80, 1024], | |
| "data": { "kind": "fillFloat32", "sinStep": 0.17, "cosStep": 0.07, "scale": 0.2 } | |
| } | |
| }, | |
| "outputs": { "y": { "dtype": "float16", "shape": [80], "tolerance": 0.05, "relTolerance": 0.002 } } | |
| }, | |
| { | |
| "name": "int32_lastaxis_subgroup_rows_64x1024", | |
| "provenance": { | |
| "notes": "Sixty-four rows of 1,024 int32 values exercise subgroup-per-row reduction in the output type. A five-value cycle shifts phase every row so outputs differ while matching tree accumulation exactly." | |
| }, | |
| "attrs": { "axes": [1], "keepdims": 0 }, | |
| "inputs": { | |
| "x": { "dtype": "int32", "shape": [64, 1024], "data": { "kind": "cycle", "values": [3, 4, 0, -2, 1] } } | |
| }, | |
| "outputs": { "y": { "dtype": "int32", "shape": [64], "tolerance": 0 } } | |
| }, | |
| { | |
| "name": "multi_axis_rank4_coop_channel_reduce_axes023", | |
| "provenance": { | |
| "notes": "A rank-4 reduction over axes {0,2,3} leaves few channel outputs and many reduced elements per output, exercising cooperative accumulation." | |
| }, | |
| "attrs": { "axes": [0, 2, 3], "keepdims": 0 }, | |
| "inputs": { | |
| "x": { | |
| "dtype": "float32", | |
| "shape": [2, 8, 16, 16], | |
| "data": { "kind": "fillFloat32", "sinStep": 0.017, "cosStep": 0.029, "scale": 0.5 } | |
| } | |
| }, | |
| "outputs": { "y": { "dtype": "float32", "shape": [8], "tolerance": 0.00001, "relTolerance": 0.00001 } } | |
| }, | |
| { | |
| "name": "multi_axis_rank3_coop_axes02", | |
| "provenance": { | |
| "notes": "A rank-3 reduction over axes {0,2} leaves few channel outputs and many reduced elements per output, exercising cooperative accumulation." | |
| }, | |
| "attrs": { "axes": [0, 2], "keepdims": 0 }, | |
| "inputs": { | |
| "x": { | |
| "dtype": "float32", | |
| "shape": [8, 6, 64], | |
| "data": { "kind": "fillFloat32", "sinStep": 0.017, "cosStep": 0.029, "scale": 0.5 } | |
| } | |
| }, | |
| "outputs": { "y": { "dtype": "float32", "shape": [6], "tolerance": 0.00001, "relTolerance": 0.00001 } } | |
| }, | |
| { | |
| "name": "strided_geometry_float32_rank3_odd_axis_odd_inner", | |
| "provenance": { | |
| "notes": "Single-axis flattened addressing across outer and inner dimensions, with signed inputs and distinct outputs. Float16 storage accumulates in float32 and rounds only on the final store." | |
| }, | |
| "attrs": { "axes": [-2], "keepdims": 1 }, | |
| "inputs": { | |
| "x": { | |
| "dtype": "float32", | |
| "shape": [3, 127, 259], | |
| "data": { "kind": "fillFloat32", "sinStep": 0.013, "cosStep": 0.029, "scale": 0.2 } | |
| } | |
| }, | |
| "outputs": { "y": { "dtype": "float32", "shape": [3, 1, 259], "tolerance": 0.00001, "relTolerance": 0.00001 } } | |
| }, | |
| { | |
| "name": "strided_geometry_float32_rank3_even_inner", | |
| "provenance": { | |
| "notes": "Single-axis flattened addressing across outer and inner dimensions, with signed inputs and distinct outputs. Float16 storage accumulates in float32 and rounds only on the final store." | |
| }, | |
| "attrs": { "axes": [1], "keepdims": 0 }, | |
| "inputs": { | |
| "x": { | |
| "dtype": "float32", | |
| "shape": [7, 129, 260], | |
| "data": { "kind": "fillFloat32", "sinStep": 0.013, "cosStep": 0.029, "scale": 0.2 } | |
| } | |
| }, | |
| "outputs": { "y": { "dtype": "float32", "shape": [7, 260], "tolerance": 0.00001, "relTolerance": 0.00001 } } | |
| }, | |
| { | |
| "name": "strided_geometry_float32_rank5_middle", | |
| "provenance": { | |
| "notes": "Single-axis flattened addressing across outer and inner dimensions, with signed inputs and distinct outputs. Float16 storage accumulates in float32 and rounds only on the final store." | |
| }, | |
| "attrs": { "axes": [3], "keepdims": 1 }, | |
| "inputs": { | |
| "x": { | |
| "dtype": "float32", | |
| "shape": [2, 3, 5, 17, 7], | |
| "data": { "kind": "fillFloat32", "sinStep": 0.013, "cosStep": 0.029, "scale": 0.2 } | |
| } | |
| }, | |
| "outputs": { | |
| "y": { "dtype": "float32", "shape": [2, 3, 5, 1, 7], "tolerance": 0.00001, "relTolerance": 0.00001 } | |
| } | |
| }, | |
| { | |
| "name": "strided_geometry_float32_rank3_axis0", | |
| "provenance": { | |
| "notes": "Single-axis flattened addressing across outer and inner dimensions, with signed inputs and distinct outputs. Float16 storage accumulates in float32 and rounds only on the final store." | |
| }, | |
| "attrs": { "axes": [0], "keepdims": 0 }, | |
| "inputs": { | |
| "x": { | |
| "dtype": "float32", | |
| "shape": [17, 5, 13], | |
| "data": { "kind": "fillFloat32", "sinStep": 0.013, "cosStep": 0.029, "scale": 0.2 } | |
| } | |
| }, | |
| "outputs": { "y": { "dtype": "float32", "shape": [5, 13], "tolerance": 0.00001, "relTolerance": 0.00001 } } | |
| }, | |
| { | |
| "name": "strided_geometry_float32_rank4_middle", | |
| "provenance": { | |
| "notes": "Single-axis flattened addressing across outer and inner dimensions, with signed inputs and distinct outputs. Float16 storage accumulates in float32 and rounds only on the final store." | |
| }, | |
| "attrs": { "axes": [2], "keepdims": 0 }, | |
| "inputs": { | |
| "x": { | |
| "dtype": "float32", | |
| "shape": [3, 5, 17, 4], | |
| "data": { "kind": "fillFloat32", "sinStep": 0.013, "cosStep": 0.029, "scale": 0.2 } | |
| } | |
| }, | |
| "outputs": { "y": { "dtype": "float32", "shape": [3, 5, 4], "tolerance": 0.00001, "relTolerance": 0.00001 } } | |
| }, | |
| { | |
| "name": "strided_geometry_float32_rank4_channel", | |
| "provenance": { | |
| "notes": "Single-axis flattened addressing across outer and inner dimensions, with signed inputs and distinct outputs. Float16 storage accumulates in float32 and rounds only on the final store." | |
| }, | |
| "attrs": { "axes": [1], "keepdims": 1 }, | |
| "inputs": { | |
| "x": { | |
| "dtype": "float32", | |
| "shape": [2, 63, 7, 8], | |
| "data": { "kind": "fillFloat32", "sinStep": 0.013, "cosStep": 0.029, "scale": 0.2 } | |
| } | |
| }, | |
| "outputs": { "y": { "dtype": "float32", "shape": [2, 1, 7, 8], "tolerance": 0.00001, "relTolerance": 0.00001 } } | |
| }, | |
| { | |
| "name": "strided_geometry_float16_rank3_odd_axis_odd_inner", | |
| "provenance": { | |
| "notes": "Single-axis flattened addressing across outer and inner dimensions, with signed inputs and distinct outputs. Float16 storage accumulates in float32 and rounds only on the final store." | |
| }, | |
| "attrs": { "axes": [-2], "keepdims": 1 }, | |
| "inputs": { | |
| "x": { | |
| "dtype": "float16", | |
| "shape": [3, 127, 259], | |
| "data": { "kind": "fillFloat32", "sinStep": 0.013, "cosStep": 0.029, "scale": 0.2 } | |
| } | |
| }, | |
| "outputs": { "y": { "dtype": "float16", "shape": [3, 1, 259], "tolerance": 0.000002, "relTolerance": 0.001 } } | |
| }, | |
| { | |
| "name": "strided_geometry_float16_rank3_even_inner", | |
| "provenance": { | |
| "notes": "Single-axis flattened addressing across outer and inner dimensions, with signed inputs and distinct outputs. Float16 storage accumulates in float32 and rounds only on the final store." | |
| }, | |
| "attrs": { "axes": [1], "keepdims": 0 }, | |
| "inputs": { | |
| "x": { | |
| "dtype": "float16", | |
| "shape": [7, 129, 260], | |
| "data": { "kind": "fillFloat32", "sinStep": 0.013, "cosStep": 0.029, "scale": 0.2 } | |
| } | |
| }, | |
| "outputs": { "y": { "dtype": "float16", "shape": [7, 260], "tolerance": 0.000002, "relTolerance": 0.001 } } | |
| }, | |
| { | |
| "name": "strided_geometry_float16_rank5_middle", | |
| "provenance": { | |
| "notes": "Single-axis flattened addressing across outer and inner dimensions, with signed inputs and distinct outputs. Float16 storage accumulates in float32 and rounds only on the final store." | |
| }, | |
| "attrs": { "axes": [3], "keepdims": 1 }, | |
| "inputs": { | |
| "x": { | |
| "dtype": "float16", | |
| "shape": [2, 3, 5, 17, 7], | |
| "data": { "kind": "fillFloat32", "sinStep": 0.013, "cosStep": 0.029, "scale": 0.2 } | |
| } | |
| }, | |
| "outputs": { "y": { "dtype": "float16", "shape": [2, 3, 5, 1, 7], "tolerance": 0.000002, "relTolerance": 0.001 } } | |
| }, | |
| { | |
| "name": "strided_geometry_float16_rank3_axis0", | |
| "provenance": { | |
| "notes": "Single-axis flattened addressing across outer and inner dimensions, with signed inputs and distinct outputs. Float16 storage accumulates in float32 and rounds only on the final store." | |
| }, | |
| "attrs": { "axes": [0], "keepdims": 0 }, | |
| "inputs": { | |
| "x": { | |
| "dtype": "float16", | |
| "shape": [17, 5, 13], | |
| "data": { "kind": "fillFloat32", "sinStep": 0.013, "cosStep": 0.029, "scale": 0.2 } | |
| } | |
| }, | |
| "outputs": { "y": { "dtype": "float16", "shape": [5, 13], "tolerance": 0.000002, "relTolerance": 0.001 } } | |
| }, | |
| { | |
| "name": "strided_geometry_float16_rank4_middle", | |
| "provenance": { | |
| "notes": "Single-axis flattened addressing across outer and inner dimensions, with signed inputs and distinct outputs. Float16 storage accumulates in float32 and rounds only on the final store." | |
| }, | |
| "attrs": { "axes": [2], "keepdims": 0 }, | |
| "inputs": { | |
| "x": { | |
| "dtype": "float16", | |
| "shape": [3, 5, 17, 4], | |
| "data": { "kind": "fillFloat32", "sinStep": 0.013, "cosStep": 0.029, "scale": 0.2 } | |
| } | |
| }, | |
| "outputs": { "y": { "dtype": "float16", "shape": [3, 5, 4], "tolerance": 0.000002, "relTolerance": 0.001 } } | |
| }, | |
| { | |
| "name": "strided_geometry_float16_rank4_channel", | |
| "provenance": { | |
| "notes": "Single-axis flattened addressing across outer and inner dimensions, with signed inputs and distinct outputs. Float16 storage accumulates in float32 and rounds only on the final store." | |
| }, | |
| "attrs": { "axes": [1], "keepdims": 1 }, | |
| "inputs": { | |
| "x": { | |
| "dtype": "float16", | |
| "shape": [2, 63, 7, 8], | |
| "data": { "kind": "fillFloat32", "sinStep": 0.013, "cosStep": 0.029, "scale": 0.2 } | |
| } | |
| }, | |
| "outputs": { "y": { "dtype": "float16", "shape": [2, 1, 7, 8], "tolerance": 0.000002, "relTolerance": 0.001 } } | |
| } | |
| ] | |
| } | |