Xenova HF Staff commited on
Commit
9c454f7
·
verified ·
1 Parent(s): 955a636

sync 91d990483a17

Browse files
README.md CHANGED
@@ -18,16 +18,16 @@ See the [ONNX `MaxPool` spec](https://onnx.ai/onnx/operators/onnx__MaxPool.html)
18
 
19
  ## Inputs
20
 
21
- | Name | Bind key | Logical dtype | Rank | Shape | Description | Presence |
22
  | --- | --- | --- | --- | --- | --- | --- |
23
- | `X` | `x` | `T` | — | — | Input tensor of shape `(N x C x D1 x ... x Dn)`; batch size `N`, channels `C`, followed by spatial dimensions. | required |
24
 
25
  ## Outputs
26
 
27
- | Name | Bind key | Logical dtype | WebGPU storage | Rank | Shape | Description | Presence |
28
  | --- | --- | --- | --- | --- | --- | --- | --- |
29
- | `Y` | `y` | `T` | runtime-selected; narrow integers and bool use 32-bit slots | same as `X` | derived; see description | Pooled output tensor with the same batch and channel dimensions as X but reduced spatial dimensions. | required |
30
- | `Indices` | `indices` | `I` | `uint32` | same as `X` | derived; see description | Optional logical int64 flat indices of the maximum values selected during pooling, with the same shape as Y; indices do not account for padding and use uint32 WebGPU storage. | optional |
31
 
32
  ## Attributes
33
 
@@ -36,12 +36,12 @@ Attributes and default values (overridable per request):
36
  | Attribute | Default | Description |
37
  | --- | --- | --- |
38
  | `auto_pad` | `"NOTSET"` | Deprecated auto-padding mode: `NOTSET` (use explicit pads), `SAME_UPPER`, `SAME_LOWER` (pad so output size is `ceil(input / stride)`), or `VALID` (no padding). It cannot be used together with `pads`. |
39
- | `storage_order` | `0` | Storage order of the Indices output tensor: 0 for row-major, 1 for column-major. |
40
  | `ceil_mode` | `0` | When non-zero, use ceiling instead of floor when computing output spatial dimensions. |
 
41
  | `kernel_shape` | — | Required kernel shape, with one positive value per spatial axis. |
42
- | `strides` | — | Stride along each spatial axis. When omitted, every stride is 1. |
43
  | `pads` | — | Padding at the beginning and end of each spatial axis, ordered as `[begin_0, ..., begin_n, end_0, ..., end_n]`. When omitted, every pad is 0. |
44
- | `dilations` | | Dilation along each spatial axis. When omitted, every dilation is 1. |
 
45
 
46
  ## Type constraints
47
 
@@ -52,7 +52,7 @@ Attributes and default values (overridable per request):
52
 
53
  ## Files
54
 
55
- - [`metadata.json`](build/webgpu/metadata.json) — kernel metadata (id, digests, provenance)
56
  - [`manifest.json`](build/webgpu/manifest.json) — the op contract (source of truth)
57
  - [`test.json`](build/webgpu/test.json) — correctness cases
58
  - [`bench.json`](build/webgpu/bench.json) — benchmark + tuning cases
@@ -68,10 +68,14 @@ Attributes and default values (overridable per request):
68
 
69
  ## Use with `@huggingface/kernels`
70
 
71
- The loader derives every required output's shape and logical dtype from the manifest contract and this call.
72
- It then allocates the result tensors automatically.
 
 
 
73
 
74
  The `version: 1` option selects the published kernel contract; it is independent of any operator opset, contrib `since_version`, or model version.
 
75
 
76
  Replace each `*Data` placeholder with a typed array containing the corresponding input data.
77
 
 
18
 
19
  ## Inputs
20
 
21
+ | Name | Upstream name | Logical dtype | Rank | Shape | Description | Presence |
22
  | --- | --- | --- | --- | --- | --- | --- |
23
+ | `x` | `X` | `T` | — | — | Input tensor of shape `(N x C x D1 x ... x Dn)`; batch size `N`, channels `C`, followed by spatial dimensions. | required |
24
 
25
  ## Outputs
26
 
27
+ | Name | Upstream name | Logical dtype | WebGPU storage | Rank | Shape | Description | Presence |
28
  | --- | --- | --- | --- | --- | --- | --- | --- |
29
+ | `y` | `Y` | `T` | runtime-selected; narrow integers and bool use 32-bit slots | same as `x` | derived | Pooled output tensor with the same batch and channel dimensions as X but reduced spatial dimensions. | required |
30
+ | `indices` | `Indices` | `I` | `uint32` | same as `x` | derived | Optional logical int64 flat indices of the maximum values selected during pooling, with the same shape as Y; indices do not account for padding and use uint32 WebGPU storage. | optional |
31
 
32
  ## Attributes
33
 
 
36
  | Attribute | Default | Description |
37
  | --- | --- | --- |
38
  | `auto_pad` | `"NOTSET"` | Deprecated auto-padding mode: `NOTSET` (use explicit pads), `SAME_UPPER`, `SAME_LOWER` (pad so output size is `ceil(input / stride)`), or `VALID` (no padding). It cannot be used together with `pads`. |
 
39
  | `ceil_mode` | `0` | When non-zero, use ceiling instead of floor when computing output spatial dimensions. |
40
+ | `dilations` | — | Dilation along each spatial axis. When omitted, every dilation is 1. |
41
  | `kernel_shape` | — | Required kernel shape, with one positive value per spatial axis. |
 
42
  | `pads` | — | Padding at the beginning and end of each spatial axis, ordered as `[begin_0, ..., begin_n, end_0, ..., end_n]`. When omitted, every pad is 0. |
43
+ | `storage_order` | `0` | Storage order of the Indices output tensor: 0 for row-major, 1 for column-major. |
44
+ | `strides` | — | Stride along each spatial axis. When omitted, every stride is 1. |
45
 
46
  ## Type constraints
47
 
 
52
 
53
  ## Files
54
 
55
+ - [`metadata.json`](build/webgpu/metadata.json) — kernel metadata (id, digests, per-variant templates, provenance)
56
  - [`manifest.json`](build/webgpu/manifest.json) — the op contract (source of truth)
57
  - [`test.json`](build/webgpu/test.json) — correctness cases
58
  - [`bench.json`](build/webgpu/bench.json) — benchmark + tuning cases
 
68
 
69
  ## Use with `@huggingface/kernels`
70
 
71
+ ```sh
72
+ npm install --save-exact @huggingface/kernels@0.0.1-preview.2
73
+ ```
74
+
75
+ Required output shapes and logical data types are inferred from the supplied inputs and attributes; result tensors are allocated automatically.
76
 
77
  The `version: 1` option selects the published kernel contract; it is independent of any operator opset, contrib `since_version`, or model version.
78
+ It follows the `v1` branch as fixes land. To pin exact artifact bytes, pass a 40-character commit `revision` instead of `version`.
79
 
80
  Replace each `*Data` placeholder with a typed array containing the corresponding input data.
81
 
build/webgpu/bench.json CHANGED
@@ -1,5 +1,4 @@
1
  {
2
- "op": "ai.onnx.MaxPool",
3
  "cases": [
4
  {
5
  "name": "nchw_1x64x112x112",
@@ -133,8 +132,8 @@
133
  "name": "global-maxpool-rank5-serial-reduction-pathology",
134
  "preset": "stress",
135
  "provenance": {
136
- "source": "authored for variant coverage",
137
- "notes": "Rank-5 global max pool over 131072 spatial values per plane verifies global_window_parallel coverage and its workgroup-tree feature-tier fallback."
138
  },
139
  "vars": { "batch": 1, "channels": 32, "inD": 32, "inH": 64, "inW": 64 },
140
  "attrs": { "kernel_shape": [32, 64, 64] },
@@ -163,6 +162,31 @@
163
  "inputs": { "x": { "dtype": "float32", "shape": [1, 128, 160, 160], "dist": "normal", "seed": 311, "scale": 2 } },
164
  "outputs": { "y": { "dtype": "float32", "shape": [1, 128, 80, 80], "dist": "empty" } },
165
  "bench": { "metrics": [{ "type": "bandwidth", "value": "args.batch * args.channels * args.inH * args.inW * 4" }] }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
166
  }
167
  ],
168
  "tunableSpace": { "WORKGROUP_SIZE": [64, 128, 256] }
 
1
  {
 
2
  "cases": [
3
  {
4
  "name": "nchw_1x64x112x112",
 
132
  "name": "global-maxpool-rank5-serial-reduction-pathology",
133
  "preset": "stress",
134
  "provenance": {
135
+ "source": "synthetic benchmark",
136
+ "notes": "Rank-5 global max pooling over 131,072 spatial values per plane measures the parallel global-window reduction and its workgroup-tree feature-tier alternative."
137
  },
138
  "vars": { "batch": 1, "channels": 32, "inD": 32, "inH": 64, "inW": 64 },
139
  "attrs": { "kernel_shape": [32, 64, 64] },
 
162
  "inputs": { "x": { "dtype": "float32", "shape": [1, 128, 160, 160], "dist": "normal", "seed": 311, "scale": 2 } },
163
  "outputs": { "y": { "dtype": "float32", "shape": [1, 128, 80, 80], "dist": "empty" } },
164
  "bench": { "metrics": [{ "type": "bandwidth", "value": "args.batch * args.channels * args.inH * args.inW * 4" }] }
165
+ },
166
+ {
167
+ "name": "maxpool-f32-b1c512-20x20-k5s1p2-separable-floor",
168
+ "provenance": {
169
+ "notes": "A YOLO-class detector shape with a 5x5 window exercises the minimum window size admitted by the separable route."
170
+ },
171
+ "attrs": { "kernel_shape": [5, 5], "strides": [1, 1], "pads": [2, 2, 2, 2] },
172
+ "inputs": { "x": { "dtype": "float32", "shape": [1, 512, 20, 20], "dist": "uniform" } },
173
+ "outputs": { "y": { "dtype": "float32", "shape": [1, 512, 20, 20], "dist": "empty" } }
174
+ },
175
+ {
176
+ "name": "maxpool-f32-b8c64-56x56-k7s1-valid-no-pad",
177
+ "preset": "edge",
178
+ "attrs": { "kernel_shape": [7, 7], "strides": [1, 1] },
179
+ "inputs": { "x": { "dtype": "float32", "shape": [8, 64, 56, 56] } },
180
+ "outputs": { "y": { "dtype": "float32", "shape": [8, 64, 50, 50] } },
181
+ "bench": { "metrics": [{ "type": "bandwidth", "value": "(numel(shapes.x) + numel(shapes.y)) * 4" }] }
182
+ },
183
+ {
184
+ "name": "maxpool-f32-b8c64-56x56-k7s7-valid-no-pad",
185
+ "preset": "edge",
186
+ "attrs": { "kernel_shape": [7, 7], "strides": [7, 7] },
187
+ "inputs": { "x": { "dtype": "float32", "shape": [8, 64, 56, 56] } },
188
+ "outputs": { "y": { "dtype": "float32", "shape": [8, 64, 8, 8] } },
189
+ "bench": { "metrics": [{ "type": "bandwidth", "value": "(numel(shapes.x) + numel(shapes.y)) * 4" }] }
190
  }
191
  ],
192
  "tunableSpace": { "WORKGROUP_SIZE": [64, 128, 256] }
build/webgpu/manifest.json CHANGED
@@ -2,40 +2,26 @@
2
  "domain": "ai.onnx",
3
  "name": "MaxPool",
4
  "sinceVersion": 12,
5
- "description": "Applies max pooling over a sliding kernel window on input tensor `X`, computing the maximum value within each window and writing it to output `Y`. Output spatial dimensions are determined by kernel size, strides, padding, and dilations; `ceil_mode` controls whether output size is rounded up or down.",
6
- "inputs": [
7
- {
8
- "role": "X",
9
- "dtype": "T",
10
- "description": "Input tensor of shape `(N x C x D1 x ... x Dn)`; batch size `N`, channels `C`, followed by spatial dimensions."
11
- }
12
- ],
13
- "outputs": [
14
- {
15
- "role": "Y",
16
- "dtype": "T",
17
- "description": "Pooled output tensor with the same batch and channel dimensions as X but reduced spatial dimensions.",
18
- "rank": "ranks.X",
19
- "shape": "poolOutputShape"
20
- },
21
- {
22
- "role": "Indices",
23
  "dtype": "I",
 
24
  "optional": true,
25
- "description": "Optional logical int64 flat indices of the maximum values selected during pooling, with the same shape as Y; indices do not account for padding and use uint32 WebGPU storage.",
26
- "rank": "ranks.X",
27
- "shape": "poolOutputShape"
28
  }
29
- ],
30
- "attributes": { "auto_pad": "NOTSET", "storage_order": 0, "ceil_mode": 0 },
31
- "attributeDescriptions": {
32
- "auto_pad": "Deprecated auto-padding mode: `NOTSET` (use explicit pads), `SAME_UPPER`, `SAME_LOWER` (pad so output size is `ceil(input / stride)`), or `VALID` (no padding). It cannot be used together with `pads`.",
33
- "storage_order": "Storage order of the Indices output tensor: 0 for row-major, 1 for column-major.",
34
- "kernel_shape": "Required kernel shape, with one positive value per spatial axis.",
35
- "strides": "Stride along each spatial axis. When omitted, every stride is 1.",
36
- "pads": "Padding at the beginning and end of each spatial axis, ordered as `[begin_0, ..., begin_n, end_0, ..., end_n]`. When omitted, every pad is 0.",
37
- "dilations": "Dilation along each spatial axis. When omitted, every dilation is 1.",
38
- "ceil_mode": "When non-zero, use ceiling instead of floor when computing output spatial dimensions."
39
  },
40
  "attributeConstraints": {
41
  "auto_pad": { "values": ["NOTSET", "SAME_UPPER", "SAME_LOWER", "VALID"] },
@@ -44,13 +30,16 @@
44
  "kernel_shape": { "required": true }
45
  },
46
  "typeConstraints": { "T": ["float32", "float16", "int8", "uint8"], "I": ["int64"] },
47
- "args": {
48
- "x": { "kind": "tensor", "semantic": "X", "role": "input" },
49
- "y": { "kind": "tensor", "semantic": "Y", "role": "output" },
50
- "indices": { "kind": "tensor", "semantic": "Indices", "role": "Indices", "dtype": "uint32", "required": false }
 
 
 
51
  },
52
  "derive": {
53
- "spatialRank": "ranks.X - 2",
54
  "kernelShapeLengthOk": "not has(attrs, \"kernel_shape\") or (attrs.kernel_shape | length) == spatialRank",
55
  "stridesLengthOk": "not has(attrs, \"strides\") or (attrs.strides | length) == spatialRank",
56
  "dilationsLengthOk": "not has(attrs, \"dilations\") or (attrs.dilations | length) == spatialRank",
@@ -70,457 +59,223 @@
70
  "padBack": "attrs.pads[spatialRank] if padsLengthOk and has(attrs, \"pads\") and spatialRank == 3 else 0",
71
  "padBottom": "attrs.pads[2 * spatialRank - 2] if padsLengthOk and has(attrs, \"pads\") and spatialRank >= 2 else 0",
72
  "padRight": "attrs.pads[2 * spatialRank - 1] if padsLengthOk and has(attrs, \"pads\") and spatialRank >= 1 else 0",
73
- "poolShapeOk": "ranks.X >= 3 and ranks.X <= 5 and ranks.Y == ranks.X and has(attrs, \"kernel_shape\") and kernelShapeLengthOk and stridesLengthOk and dilationsLengthOk and padsLengthOk and kernelD > 0 and kernelH > 0 and kernelW > 0 and strideD > 0 and strideH > 0 and strideW > 0 and dilationD > 0 and dilationH > 0 and dilationW > 0 and padFront >= 0 and padTop >= 0 and padLeft >= 0 and padBack >= 0 and padBottom >= 0 and padRight >= 0 and (attrs.auto_pad == \"NOTSET\" or not has(attrs, \"pads\")) and dim(shapes.Y, 0) == dim(shapes.X, 0) and dim(shapes.Y, 1) == dim(shapes.X, 1)",
74
- "explicitOutW": "min(ceil((dim(shapes.X, ranks.X - 1) + padLeft + padRight - ((kernelW - 1) * dilationW + 1)) / strideW) + 1, ceil((dim(shapes.X, ranks.X - 1) + padLeft) / strideW)) if attrs.ceil_mode != 0 else floor((dim(shapes.X, ranks.X - 1) + padLeft + padRight - ((kernelW - 1) * dilationW + 1)) / strideW) + 1",
75
- "explicitOutH": "min(ceil((dim(shapes.X, ranks.X - 2) + padTop + padBottom - ((kernelH - 1) * dilationH + 1)) / strideH) + 1, ceil((dim(shapes.X, ranks.X - 2) + padTop) / strideH)) if attrs.ceil_mode != 0 else floor((dim(shapes.X, ranks.X - 2) + padTop + padBottom - ((kernelH - 1) * dilationH + 1)) / strideH) + 1",
76
- "explicitOutD": "(min(ceil((dim(shapes.X, 2) + padFront + padBack - ((kernelD - 1) * dilationD + 1)) / strideD) + 1, ceil((dim(shapes.X, 2) + padFront) / strideD)) if attrs.ceil_mode != 0 else floor((dim(shapes.X, 2) + padFront + padBack - ((kernelD - 1) * dilationD + 1)) / strideD) + 1) if ranks.X == 5 else 0",
77
- "inferredOutW": "ceil(dim(shapes.X, ranks.X - 1) / strideW) if attrs.auto_pad == \"SAME_UPPER\" or attrs.auto_pad == \"SAME_LOWER\" else explicitOutW",
78
- "inferredOutH": "ceil(dim(shapes.X, ranks.X - 2) / strideH) if attrs.auto_pad == \"SAME_UPPER\" or attrs.auto_pad == \"SAME_LOWER\" else explicitOutH",
79
- "inferredOutD": "ceil(dim(shapes.X, 2) / strideD) if attrs.auto_pad == \"SAME_UPPER\" or attrs.auto_pad == \"SAME_LOWER\" else explicitOutD",
80
- "poolOutputShape": "[dim(shapes.X, 0), dim(shapes.X, 1), inferredOutW] if ranks.X == 3 else ([dim(shapes.X, 0), dim(shapes.X, 1), inferredOutH, inferredOutW] if ranks.X == 4 else [dim(shapes.X, 0), dim(shapes.X, 1), inferredOutD, inferredOutH, inferredOutW])",
81
- "pool2dOutputShapeOk": "(dim(shapes.Y, 2) == explicitOutH and dim(shapes.Y, 3) == explicitOutW) or ((attrs.auto_pad == \"SAME_UPPER\" or attrs.auto_pad == \"SAME_LOWER\") and dim(shapes.Y, 2) == ceil(dim(shapes.X, 2) / strideH) and dim(shapes.Y, 3) == ceil(dim(shapes.X, 3) / strideW))",
82
- "autoPadTotalH": "max(0, (dim(shapes.Y, 2) - 1) * strideH + ((kernelH - 1) * dilationH + 1) - dim(shapes.X, 2)) if ranks.X == 4 else 0",
83
- "autoPadTotalW": "max(0, (dim(shapes.Y, 3) - 1) * strideW + ((kernelW - 1) * dilationW + 1) - dim(shapes.X, 3)) if ranks.X == 4 else 0",
84
- "effectivePadH": "(floor(autoPadTotalH / 2) if attrs.auto_pad == \"SAME_UPPER\" else autoPadTotalH - floor(autoPadTotalH / 2)) if ranks.X == 4 and (attrs.auto_pad == \"SAME_UPPER\" or attrs.auto_pad == \"SAME_LOWER\") else padTop",
85
- "effectivePadW": "(floor(autoPadTotalW / 2) if attrs.auto_pad == \"SAME_UPPER\" else autoPadTotalW - floor(autoPadTotalW / 2)) if ranks.X == 4 and (attrs.auto_pad == \"SAME_UPPER\" or attrs.auto_pad == \"SAME_LOWER\") else padLeft",
86
  "floatDtypeOk": "(dtypes.T == \"f32\" or dtypes.T == \"f16\") and f16Ok(dtypes.T)",
87
- "globalWindowParallelCovered": "not present.indices and floatDtypeOk and poolShapeOk and numel(shapes.Y) == dim(shapes.X, 0) * dim(shapes.X, 1) and numel(shapes.Y) <= device.limits.maxComputeWorkgroupsPerDimension and attrs.auto_pad == \"NOTSET\" and strideD == 1 and strideH == 1 and strideW == 1 and dilationD == 1 and dilationH == 1 and dilationW == 1 and padFront == 0 and padTop == 0 and padLeft == 0 and padBack == 0 and padBottom == 0 and padRight == 0 and ((ranks.X == 3 and kernelW == dim(shapes.X, 2)) or (ranks.X == 4 and kernelH == dim(shapes.X, 2) and kernelW == dim(shapes.X, 3)) or (ranks.X == 5 and kernelD == dim(shapes.X, 2) and kernelH == dim(shapes.X, 3) and kernelW == dim(shapes.X, 4))) and inner(shapes.X, 1) >= 256",
88
  "tiledStorageBytes": "(tunables.TILED_D + kernelD - 1) * (tunables.TILED_H + kernelH - 1) * (tunables.TILED_W + kernelW - 1) * 4",
89
  "tiledDeviceOk": "tiledStorageBytes <= device.limits.maxComputeWorkgroupStorageSize and tunables.TILED_W * tunables.TILED_H * tunables.TILED_LANES_D <= device.limits.maxComputeInvocationsPerWorkgroup and tunables.TILED_W <= device.limits.maxComputeWorkgroupSizeX and tunables.TILED_H <= device.limits.maxComputeWorkgroupSizeY and tunables.TILED_LANES_D <= device.limits.maxComputeWorkgroupSizeZ",
90
- "tiledDispatchOk": "ceilDiv(dim(shapes.Y, 4), tunables.TILED_W) <= device.limits.maxComputeWorkgroupsPerDimension and ceilDiv(dim(shapes.Y, 3), tunables.TILED_H) <= device.limits.maxComputeWorkgroupsPerDimension and dim(shapes.X, 0) * dim(shapes.X, 1) * ceilDiv(dim(shapes.Y, 2), tunables.TILED_D) <= device.limits.maxComputeWorkgroupsPerDimension",
91
- "separableTmpElements": "dim(shapes.X, 0) * dim(shapes.X, 1) * dim(shapes.X, 2) * dim(shapes.Y, 3)",
92
- "separableFits": "separableTmpElements * 4 <= min(device.limits.maxStorageBufferBindingSize, device.limits.maxBufferSize) and ceilDiv(separableTmpElements, tunables.WORKGROUP_SIZE) <= device.limits.maxComputeWorkgroupsPerDimension * device.limits.maxComputeWorkgroupsPerDimension"
 
 
93
  },
94
- "tunables": {
95
- "WORKGROUP_SIZE": 128,
96
- "TILED_D": 24,
97
- "TILED_H": 8,
98
- "TILED_W": 8,
99
- "TILED_LANES_D": 4,
100
- "SEPARABLE_MIN_WINDOW": 36
101
- },
102
- "bindingSets": {
103
- "globalReduction": [
104
- { "name": "x", "arg": "x", "semantic": "X", "buffer": { "type": "read-only-storage" }, "elementType": "$xElem" },
105
- { "name": "y", "arg": "y", "semantic": "Y", "buffer": { "type": "storage" }, "elementType": "$scalar" },
106
- {
107
- "name": "params",
108
- "semantic": "kernel.params",
109
- "buffer": { "type": "uniform" },
110
- "struct": { "name": "Params", "fields": [{ "name": "spatial", "type": "u32", "value": "inner(shapes.X, 1)" }] }
111
- }
112
- ],
113
- "flatDirect": [
114
- { "name": "x", "arg": "x", "semantic": "X", "buffer": { "type": "read-only-storage" }, "elementType": "$T" },
115
- { "name": "y", "arg": "y", "semantic": "Y", "buffer": { "type": "storage" }, "elementType": "$T" },
116
- {
117
- "name": "params",
118
- "semantic": "kernel.params",
119
- "buffer": { "type": "uniform" },
120
- "struct": { "name": "Params", "fields": [{ "name": "count", "type": "u32", "value": "numel(shapes.Y)" }] }
121
- }
122
- ],
123
- "rank1X4": [
124
- { "name": "x", "arg": "x", "semantic": "X", "buffer": { "type": "read-only-storage" }, "elementType": "$xVec4" },
125
- { "name": "y", "arg": "y", "semantic": "Y", "buffer": { "type": "storage" }, "elementType": "$T" },
126
- {
127
- "name": "params",
128
- "semantic": "kernel.params",
129
- "buffer": { "type": "uniform" },
130
- "struct": {
131
- "name": "Params",
132
- "fields": [
133
- {
134
- "name": "blockCount",
135
- "type": "u32",
136
- "value": "dim(shapes.X, 0) * dim(shapes.X, 1) * ceilDiv(dim(shapes.Y, 2), 4)"
137
- }
138
- ]
139
- }
140
- }
141
- ],
142
- "rank1Direct": [
143
- { "name": "x", "arg": "x", "semantic": "X", "buffer": { "type": "read-only-storage" }, "elementType": "$T" },
144
- { "name": "y", "arg": "y", "semantic": "Y", "buffer": { "type": "storage" }, "elementType": "$T" },
145
- {
146
- "name": "params",
147
- "semantic": "kernel.params",
148
- "buffer": { "type": "uniform" },
149
- "struct": {
150
- "name": "Params",
151
- "fields": [
152
- { "name": "channels", "type": "u32", "value": "dim(shapes.X, 1)" },
153
- { "name": "inW", "type": "u32", "value": "dim(shapes.X, 2)" },
154
- { "name": "outW", "type": "u32", "value": "dim(shapes.Y, 2)" },
155
- { "name": "kernelW", "type": "u32", "value": "kernelW" },
156
- { "name": "strideW", "type": "u32", "value": "strideW" },
157
- { "name": "dilationW", "type": "u32", "value": "dilationW" },
158
- { "name": "padW", "type": "i32", "value": "padLeft" },
159
- { "name": "count", "type": "u32", "value": "numel(shapes.Y)" }
160
- ]
161
- }
162
- }
163
- ],
164
- "rank2Direct": [
165
- { "name": "x", "arg": "x", "semantic": "X", "buffer": { "type": "read-only-storage" }, "elementType": "$T" },
166
- { "name": "y", "arg": "y", "semantic": "Y", "buffer": { "type": "storage" }, "elementType": "$T" },
167
- {
168
- "name": "params",
169
- "semantic": "kernel.params",
170
- "buffer": { "type": "uniform" },
171
- "struct": {
172
- "name": "Params",
173
- "fields": [
174
- { "name": "channels", "type": "u32", "value": "dim(shapes.X, 1)" },
175
- { "name": "inH", "type": "u32", "value": "dim(shapes.X, 2)" },
176
- { "name": "inW", "type": "u32", "value": "dim(shapes.X, 3)" },
177
- { "name": "outH", "type": "u32", "value": "dim(shapes.Y, 2)" },
178
- { "name": "outW", "type": "u32", "value": "dim(shapes.Y, 3)" },
179
- { "name": "kernelH", "type": "u32", "value": "kernelH" },
180
- { "name": "kernelW", "type": "u32", "value": "kernelW" },
181
- { "name": "strideH", "type": "u32", "value": "strideH" },
182
- { "name": "strideW", "type": "u32", "value": "strideW" },
183
- { "name": "dilationH", "type": "u32", "value": "dilationH" },
184
- { "name": "dilationW", "type": "u32", "value": "dilationW" },
185
- { "name": "padH", "type": "i32", "value": "effectivePadH" },
186
- { "name": "padW", "type": "i32", "value": "effectivePadW" },
187
- { "name": "count", "type": "u32", "value": "numel(shapes.Y)" }
188
- ]
189
- }
190
- }
191
- ],
192
- "rank2Vec4": [
193
- { "name": "x", "arg": "x", "semantic": "X", "buffer": { "type": "read-only-storage" }, "elementType": "$xVec4" },
194
- { "name": "y", "arg": "y", "semantic": "Y", "buffer": { "type": "storage" }, "elementType": "$T" },
195
- {
196
- "name": "params",
197
- "semantic": "kernel.params",
198
- "buffer": { "type": "uniform" },
199
- "struct": {
200
- "name": "Params",
201
- "fields": [{ "name": "tileCount", "type": "u32", "value": "numel(shapes.Y) / 2" }]
202
- }
203
- }
204
- ],
205
- "nchwVec4IO": [
206
- { "name": "x", "arg": "x", "semantic": "X", "buffer": { "type": "read-only-storage" }, "elementType": "$xVec4" },
207
- { "name": "y", "arg": "y", "semantic": "Y", "buffer": { "type": "storage" }, "elementType": "$yVec4" },
208
- {
209
- "name": "params",
210
- "semantic": "kernel.params",
211
- "buffer": { "type": "uniform" },
212
- "struct": {
213
- "name": "Params",
214
- "fields": [{ "name": "tileCount", "type": "u32", "value": "numel(shapes.Y) / 4" }]
215
- }
216
- }
217
- ],
218
- "rank3Direct": [
219
- { "name": "x", "arg": "x", "semantic": "X", "buffer": { "type": "read-only-storage" }, "elementType": "$T" },
220
- { "name": "y", "arg": "y", "semantic": "Y", "buffer": { "type": "storage" }, "elementType": "$T" },
221
- {
222
- "name": "params",
223
- "semantic": "kernel.params",
224
- "buffer": { "type": "uniform" },
225
- "struct": {
226
- "name": "Params",
227
- "fields": [
228
- { "name": "channels", "type": "u32", "value": "dim(shapes.X, 1)" },
229
- { "name": "inD", "type": "u32", "value": "dim(shapes.X, 2)" },
230
- { "name": "inH", "type": "u32", "value": "dim(shapes.X, 3)" },
231
- { "name": "inW", "type": "u32", "value": "dim(shapes.X, 4)" },
232
- { "name": "outD", "type": "u32", "value": "dim(shapes.Y, 2)" },
233
- { "name": "outH", "type": "u32", "value": "dim(shapes.Y, 3)" },
234
- { "name": "outW", "type": "u32", "value": "dim(shapes.Y, 4)" },
235
- { "name": "kernelD", "type": "u32", "value": "kernelD" },
236
- { "name": "kernelH", "type": "u32", "value": "kernelH" },
237
- { "name": "kernelW", "type": "u32", "value": "kernelW" },
238
- { "name": "strideD", "type": "u32", "value": "strideD" },
239
- { "name": "strideH", "type": "u32", "value": "strideH" },
240
- { "name": "strideW", "type": "u32", "value": "strideW" },
241
- { "name": "dilationD", "type": "u32", "value": "dilationD" },
242
- { "name": "dilationH", "type": "u32", "value": "dilationH" },
243
- { "name": "dilationW", "type": "u32", "value": "dilationW" },
244
- { "name": "padD", "type": "i32", "value": "padFront" },
245
- { "name": "padH", "type": "i32", "value": "padTop" },
246
- { "name": "padW", "type": "i32", "value": "padLeft" },
247
- { "name": "count", "type": "u32", "value": "numel(shapes.Y)" }
248
- ]
249
- }
250
- }
251
- ],
252
- "rank3Tiled": [
253
- { "name": "x", "arg": "x", "semantic": "X", "buffer": { "type": "read-only-storage" }, "elementType": "f32" },
254
- { "name": "y", "arg": "y", "semantic": "Y", "buffer": { "type": "storage" }, "elementType": "f32" },
255
- {
256
- "name": "params",
257
- "semantic": "kernel.params",
258
- "buffer": { "type": "uniform" },
259
- "struct": {
260
- "name": "Params",
261
- "fields": [
262
- { "name": "inD", "type": "u32", "value": "dim(shapes.X, 2)" },
263
- { "name": "inH", "type": "u32", "value": "dim(shapes.X, 3)" },
264
- { "name": "inW", "type": "u32", "value": "dim(shapes.X, 4)" },
265
- { "name": "outD", "type": "u32", "value": "dim(shapes.Y, 2)" },
266
- { "name": "outH", "type": "u32", "value": "dim(shapes.Y, 3)" },
267
- { "name": "outW", "type": "u32", "value": "dim(shapes.Y, 4)" }
268
- ]
269
- }
270
- }
271
- ],
272
- "rank1WithIndices": [
273
- { "name": "x", "arg": "x", "semantic": "X", "buffer": { "type": "read-only-storage" }, "elementType": "$T" },
274
- { "name": "y", "arg": "y", "semantic": "Y", "buffer": { "type": "storage" }, "elementType": "$T" },
275
- {
276
- "name": "indices",
277
- "arg": "indices",
278
- "semantic": "Indices",
279
- "buffer": { "type": "storage" },
280
- "elementType": "u32"
281
- },
282
- {
283
- "name": "params",
284
- "semantic": "kernel.params",
285
- "buffer": { "type": "uniform" },
286
- "struct": {
287
- "name": "Params",
288
- "fields": [
289
- { "name": "channels", "type": "u32", "value": "dim(shapes.X, 1)" },
290
- { "name": "inW", "type": "u32", "value": "dim(shapes.X, 2)" },
291
- { "name": "outW", "type": "u32", "value": "dim(shapes.Y, 2)" },
292
- { "name": "kernelW", "type": "u32", "value": "kernelW" },
293
- { "name": "strideW", "type": "u32", "value": "strideW" },
294
- { "name": "dilationW", "type": "u32", "value": "dilationW" },
295
- { "name": "padW", "type": "i32", "value": "padLeft" },
296
- { "name": "count", "type": "u32", "value": "numel(shapes.Y)" }
297
- ]
298
- }
299
- }
300
- ],
301
- "rank2WithIndices": [
302
- { "name": "x", "arg": "x", "semantic": "X", "buffer": { "type": "read-only-storage" }, "elementType": "$T" },
303
- { "name": "y", "arg": "y", "semantic": "Y", "buffer": { "type": "storage" }, "elementType": "$T" },
304
- {
305
- "name": "indices",
306
- "arg": "indices",
307
- "semantic": "Indices",
308
- "buffer": { "type": "storage" },
309
- "elementType": "u32"
310
- },
311
- {
312
- "name": "params",
313
- "semantic": "kernel.params",
314
- "buffer": { "type": "uniform" },
315
- "struct": {
316
- "name": "Params",
317
- "fields": [
318
- { "name": "channels", "type": "u32", "value": "dim(shapes.X, 1)" },
319
- { "name": "inH", "type": "u32", "value": "dim(shapes.X, 2)" },
320
- { "name": "inW", "type": "u32", "value": "dim(shapes.X, 3)" },
321
- { "name": "outH", "type": "u32", "value": "dim(shapes.Y, 2)" },
322
- { "name": "outW", "type": "u32", "value": "dim(shapes.Y, 3)" },
323
- { "name": "kernelH", "type": "u32", "value": "kernelH" },
324
- { "name": "kernelW", "type": "u32", "value": "kernelW" },
325
- { "name": "strideH", "type": "u32", "value": "strideH" },
326
- { "name": "strideW", "type": "u32", "value": "strideW" },
327
- { "name": "dilationH", "type": "u32", "value": "dilationH" },
328
- { "name": "dilationW", "type": "u32", "value": "dilationW" },
329
- { "name": "padH", "type": "i32", "value": "effectivePadH" },
330
- { "name": "padW", "type": "i32", "value": "effectivePadW" },
331
- { "name": "count", "type": "u32", "value": "numel(shapes.Y)" }
332
- ]
333
- }
334
- }
335
- ],
336
- "rank2SeparableW": [
337
- { "name": "x", "arg": "x", "semantic": "X", "buffer": { "type": "read-only-storage" }, "elementType": "$T" },
338
- { "name": "tmp", "semantic": "tmp", "buffer": { "type": "storage" }, "elementType": "f32" },
339
- {
340
- "name": "params",
341
- "semantic": "kernel.params",
342
- "buffer": { "type": "uniform" },
343
- "struct": {
344
- "name": "Params",
345
- "fields": [
346
- { "name": "inH", "type": "u32", "value": "dim(shapes.X, 2)" },
347
- { "name": "inW", "type": "u32", "value": "dim(shapes.X, 3)" },
348
- { "name": "outW", "type": "u32", "value": "dim(shapes.Y, 3)" },
349
- { "name": "kernelW", "type": "u32", "value": "kernelW" },
350
- { "name": "strideW", "type": "u32", "value": "strideW" },
351
- { "name": "dilationW", "type": "u32", "value": "dilationW" },
352
- { "name": "padW", "type": "i32", "value": "effectivePadW" },
353
- {
354
- "name": "tmpCount",
355
- "type": "u32",
356
- "value": "dim(shapes.X, 0) * dim(shapes.X, 1) * dim(shapes.X, 2) * dim(shapes.Y, 3)"
357
- }
358
- ]
359
- }
360
- }
361
- ],
362
- "rank2SeparableH": [
363
- { "name": "tmp", "semantic": "tmp", "buffer": { "type": "read-only-storage" }, "elementType": "f32" },
364
- { "name": "y", "arg": "y", "semantic": "Y", "buffer": { "type": "storage" }, "elementType": "$T" },
365
- {
366
- "name": "params",
367
- "semantic": "kernel.params",
368
- "buffer": { "type": "uniform" },
369
- "struct": {
370
- "name": "Params",
371
- "fields": [
372
- { "name": "inH", "type": "u32", "value": "dim(shapes.X, 2)" },
373
- { "name": "inW", "type": "u32", "value": "dim(shapes.X, 3)" },
374
- { "name": "outH", "type": "u32", "value": "dim(shapes.Y, 2)" },
375
- { "name": "outW", "type": "u32", "value": "dim(shapes.Y, 3)" },
376
- { "name": "kernelH", "type": "u32", "value": "kernelH" },
377
- { "name": "kernelW", "type": "u32", "value": "kernelW" },
378
- { "name": "strideH", "type": "u32", "value": "strideH" },
379
- { "name": "strideW", "type": "u32", "value": "strideW" },
380
- { "name": "dilationH", "type": "u32", "value": "dilationH" },
381
- { "name": "dilationW", "type": "u32", "value": "dilationW" },
382
- { "name": "padH", "type": "i32", "value": "effectivePadH" },
383
- { "name": "padW", "type": "i32", "value": "effectivePadW" },
384
- { "name": "count", "type": "u32", "value": "numel(shapes.Y)" }
385
- ]
386
- }
387
- }
388
- ]
389
  },
390
  "variants": [
391
  {
392
  "id": "global_window_parallel",
393
  "priority": 50,
394
  "when": ["globalWindowParallelCovered"],
395
- "constants": {
396
- "usesF16": "dtypes.T == \"f16\"",
397
  "scalar": "dtypes.T",
398
- "xElem": "(\"vec4<f16>\" if dtypes.T == \"f16\" else \"vec4<f32>\") if inner(shapes.X, 1) % 4 == 0 else dtypes.T"
399
  },
400
  "passes": [
401
  {
402
  "id": "main",
403
  "name": "MaxPool.GlobalWindowParallel",
404
- "source": {
405
- "shader": "pool-global-reduction.wgsl.jinja",
406
- "inputs": {
407
- "op": "\"max\"",
408
- "vec4": "inner(shapes.X, 1) % 4 == 0",
409
- "workgroupSize": "tunables.WORKGROUP_SIZE",
410
- "useSubgroups": "device.features.has(\"subgroups\")"
411
- }
412
  },
413
- "bindings": "globalReduction",
414
- "dispatch": { "x": "numel(shapes.Y)" }
 
 
 
 
415
  }
416
  ]
417
  },
418
  {
419
  "id": "nchw2d_k3s2p1_vec4",
420
  "priority": 35,
421
- "when": ["not present.indices", "f16Ok(dtypes.T)", "dtypes.T == \"f16\"", "poolShapeOk", "ranks.X == 4", "ranks.Y == 4", "attrs.auto_pad == \"NOTSET\"", "kernelH == 3", "kernelW == 3", "strideH == 2", "strideW == 2", "dilationH == 1", "dilationW == 1", "padTop == 1", "padLeft == 1", "padBottom == 1", "padRight == 1", "attrs.ceil_mode == 0", "dim(shapes.X, 2) % 2 == 0", "dim(shapes.X, 3) % 8 == 0", "dim(shapes.Y, 0) == dim(shapes.X, 0)", "dim(shapes.Y, 1) == dim(shapes.X, 1)", "dim(shapes.Y, 2) == dim(shapes.X, 2) / 2", "dim(shapes.Y, 3) == dim(shapes.X, 3) / 2", "dim(shapes.Y, 2) > 0", "dim(shapes.Y, 3) >= 4"],
422
- "constants": { "scalar": "dtypes.T", "xVec4": "\"vec4<f16>\"", "yVec4": "\"vec4<f16>\"" },
423
  "passes": [
424
  {
425
  "id": "main",
426
  "name": "MaxPool.Nchw2dK3s2p1Vec4",
427
- "source": {
428
- "shader": "max-pool2d-nchw-k3s2p1-vec4.wgsl.jinja",
429
- "inputs": {
430
- "inH": "dim(shapes.X, 2)",
431
- "inWVec4": "dim(shapes.X, 3) / 4",
432
- "inPlaneVec4": "dim(shapes.X, 2) * dim(shapes.X, 3) / 4",
433
- "outH": "dim(shapes.Y, 2)",
434
- "outBlocks": "dim(shapes.Y, 3) / 4"
435
- }
436
  },
437
- "bindings": "nchwVec4IO",
438
- "dispatch": { "threads": "numel(shapes.Y) / 4", "workgroupSize": "tunables.WORKGROUP_SIZE" }
 
 
 
 
 
 
 
 
439
  }
440
  ]
441
  },
442
  {
443
  "id": "nchw2d_k2s2_vec4",
444
  "priority": 30,
445
- "when": ["not present.indices", "f16Ok(dtypes.T)", "poolShapeOk", "ranks.X == 4", "ranks.Y == 4", "kernelH == 2", "kernelW == 2", "strideH == 2", "strideW == 2", "dilationH == 1", "dilationW == 1", "padTop == 0", "padLeft == 0", "padBottom == 0", "padRight == 0", "attrs.ceil_mode == 0", "dim(shapes.X, 3) % 4 == 0", "dim(shapes.Y, 0) == dim(shapes.X, 0)", "dim(shapes.Y, 1) == dim(shapes.X, 1)", "dim(shapes.Y, 2) == floor(dim(shapes.X, 2) / 2)", "dim(shapes.Y, 3) == floor(dim(shapes.X, 3) / 2)", "dim(shapes.Y, 2) > 0", "dim(shapes.Y, 3) > 0"],
446
- "constants": {
447
- "scalar": "dtypes.T",
448
- "usesF16": "dtypes.T == \"f16\"",
449
- "xVec4": "\"vec4<f16>\" if dtypes.T == \"f16\" else \"vec4<f32>\""
450
- },
451
  "passes": [
452
  {
453
  "id": "main",
454
  "name": "MaxPool.Nchw2dK2s2Vec4",
455
- "source": {
456
- "shader": "pool2d-nchw-k2s2-vec4.wgsl.jinja",
457
- "inputs": {
458
- "op": "\"max\"",
459
- "outH": "dim(shapes.Y, 2)",
460
- "outW": "dim(shapes.Y, 3)",
461
- "outWHalf": "floor(dim(shapes.Y, 3) / 2)",
462
- "inWVec4": "floor(dim(shapes.X, 3) / 4)",
463
- "inPlaneVec4": "floor(dim(shapes.X, 2) * dim(shapes.X, 3) / 4)"
464
- }
465
  },
466
- "bindings": "rank2Vec4",
467
- "dispatch": { "threads": "numel(shapes.Y) / 2", "workgroupSize": "tunables.WORKGROUP_SIZE" }
 
 
 
 
 
 
 
 
468
  }
469
  ]
470
  },
471
  {
472
  "id": "nchw2d_unrolled",
473
  "priority": 25,
474
- "when": ["not present.indices", "floatDtypeOk", "poolShapeOk", "ranks.X == 4", "ranks.Y == 4", "dim(shapes.Y, 0) == dim(shapes.X, 0)", "dim(shapes.Y, 1) == dim(shapes.X, 1)", "dim(shapes.Y, 2) == explicitOutH", "dim(shapes.Y, 3) == explicitOutW", "kernelH >= 1", "kernelH <= 3", "kernelW >= 1", "kernelW <= 3", "strideH >= 1", "strideW >= 1", "dilationH >= 1", "dilationW >= 1", "dim(shapes.Y, 2) > 0", "dim(shapes.Y, 3) > 0"],
475
- "constants": { "scalar": "dtypes.T", "usesF16": "dtypes.T == \"f16\"" },
476
  "passes": [
477
  {
478
  "id": "main",
479
  "name": "MaxPool.Nchw2dUnrolled",
480
- "source": {
481
- "shader": "pool-window-unroll.wgsl.jinja",
482
- "inputs": {
483
- "op": "\"max\"",
484
- "kernelH": "kernelH",
485
- "kernelW": "kernelW",
486
- "strideH": "strideH",
487
- "strideW": "strideW",
488
- "dilationH": "dilationH",
489
- "dilationW": "dilationW",
490
- "padTop": "padTop",
491
- "padLeft": "padLeft",
492
- "inH": "dim(shapes.X, 2)",
493
- "inW": "dim(shapes.X, 3)",
494
- "outH": "dim(shapes.Y, 2)",
495
- "outW": "dim(shapes.Y, 3)"
496
- }
497
  },
498
- "bindings": "flatDirect",
499
- "dispatch": { "threads": "numel(shapes.Y)", "workgroupSize": "tunables.WORKGROUP_SIZE" }
 
 
 
 
 
 
 
 
500
  }
501
  ]
502
  },
503
  {
504
  "id": "ncl1d_k2s2_x4",
505
  "priority": 30,
506
- "when": ["not present.indices", "floatDtypeOk", "poolShapeOk", "ranks.X == 3", "attrs.auto_pad == \"NOTSET\"", "kernelW == 2", "strideW == 2", "dilationW == 1", "padLeft == 0", "padRight == 0", "attrs.ceil_mode == 0", "dim(shapes.X, 2) % 4 == 0", "dim(shapes.Y, 2) % 4 == 0", "dim(shapes.Y, 2) * 2 == dim(shapes.X, 2)"],
507
- "constants": {
508
- "usesF16": "dtypes.T == \"f16\"",
509
- "scalar": "dtypes.T",
510
- "xVec4": "\"vec4<f16>\" if dtypes.T == \"f16\" else \"vec4<f32>\""
511
- },
512
  "passes": [
513
  {
514
  "id": "main",
515
  "name": "MaxPool.Ncl1dK2s2X4",
516
- "source": {
517
- "shader": "pool-ncl1d-x4.wgsl.jinja",
518
- "inputs": { "op": "\"max\"", "inW": "dim(shapes.X, 2)", "outW": "dim(shapes.Y, 2)" }
519
- },
520
- "bindings": "rank1X4",
 
 
 
 
 
 
 
 
 
 
 
521
  "dispatch": {
522
- "threads": "dim(shapes.X, 0) * dim(shapes.X, 1) * ceilDiv(dim(shapes.Y, 2), 4)",
523
- "workgroupSize": "tunables.WORKGROUP_SIZE"
 
524
  }
525
  }
526
  ]
@@ -528,83 +283,162 @@
528
  {
529
  "id": "ncl1d",
530
  "priority": 10,
531
- "when": ["not present.indices", "f16Ok(dtypes.T)", "poolShapeOk", "ranks.X == 3", "dim(shapes.Y, 2) == explicitOutW"],
532
- "constants": { "scalar": "dtypes.T", "usesF16": "dtypes.T == \"f16\"", "hasIndices": false },
533
  "passes": [
534
  {
535
  "id": "main",
536
  "name": "MaxPool.Ncl1d",
537
- "source": { "shader": "pool-window-nd.wgsl.jinja", "inputs": { "op": "\"max\"", "spatialRank": 1 } },
538
- "bindings": "rank1Direct",
539
- "dispatch": { "threads": "numel(shapes.Y)", "workgroupSize": "tunables.WORKGROUP_SIZE" }
 
 
 
 
 
540
  }
541
  ]
542
  },
543
  {
544
  "id": "nchw2d_uint8",
545
  "priority": 20,
546
- "when": ["not present.indices", "tensorDtypes.X == \"uint8\"", "tensorDtypes.Y == \"uint8\"", "poolShapeOk", "ranks.X == 4", "dim(shapes.Y, 2) == explicitOutH", "dim(shapes.Y, 3) == explicitOutW"],
547
  "passes": [
548
  {
549
  "id": "main",
550
  "name": "nchw2d_uint8",
551
  "shader": "max-pool2d-nchw-u32.wgsl.jinja",
552
- "bindings": "rank2Direct",
553
- "dispatch": { "threads": "numel(shapes.Y)", "workgroupSize": "tunables.WORKGROUP_SIZE" }
 
 
 
 
554
  }
555
  ]
556
  },
557
  {
558
  "id": "nchw2d_separable",
559
  "priority": 22,
560
- "when": ["not present.indices", "f16Ok(dtypes.T) and dtypes.T != \"u32\"", "poolShapeOk", "ranks.X == 4", "ranks.Y == 4", "pool2dOutputShapeOk", "kernelH > 1", "kernelW > 1", "kernelH * kernelW >= tunables.SEPARABLE_MIN_WINDOW", "separableFits"],
561
- "constants": { "scalar": "dtypes.T", "usesF16": "dtypes.T == \"f16\"" },
562
  "intermediates": [{ "id": "tmp", "dtype": "float32", "shape": "[separableTmpElements]" }],
563
  "passes": [
564
  {
565
  "id": "reduce_w",
566
  "name": "MaxPool.SeparableW",
567
- "source": { "shader": "pool2d-nchw-separable.wgsl.jinja", "inputs": { "axis": "\"w\"", "op": "\"max\"" } },
568
- "bindings": "rank2SeparableW",
569
- "dispatch": { "threads": "separableTmpElements", "workgroupSize": "tunables.WORKGROUP_SIZE" }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
570
  },
571
  {
572
  "id": "reduce_h",
573
  "name": "MaxPool.SeparableH",
574
- "source": { "shader": "pool2d-nchw-separable.wgsl.jinja", "inputs": { "axis": "\"h\"", "op": "\"max\"" } },
575
- "bindings": "rank2SeparableH",
576
- "dispatch": { "threads": "numel(shapes.Y)", "workgroupSize": "tunables.WORKGROUP_SIZE" }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
577
  }
578
  ]
579
  },
580
  {
581
  "id": "nchw2d",
582
- "when": ["not present.indices", "f16Ok(dtypes.T) and dtypes.T != \"u32\"", "poolShapeOk", "ranks.X == 4", "pool2dOutputShapeOk"],
583
- "constants": { "scalar": "dtypes.T", "usesF16": "dtypes.T == \"f16\"", "hasIndices": false },
584
  "passes": [
585
  {
586
  "id": "main",
587
  "name": "nchw2d",
588
- "source": { "shader": "pool-window-nd.wgsl.jinja", "inputs": { "op": "\"max\"", "spatialRank": 2 } },
589
- "bindings": "rank2Direct",
590
- "dispatch": { "threads": "numel(shapes.Y)", "workgroupSize": "tunables.WORKGROUP_SIZE" }
 
 
 
 
 
591
  }
592
  ]
593
  },
594
  {
595
  "id": "ncdhw3d_k5s1_tiled",
596
  "priority": 20,
597
- "when": ["not present.indices", "dtypes.T == \"f32\"", "poolShapeOk", "ranks.X == 5", "attrs.auto_pad == \"NOTSET\"", "kernelD == 5 and kernelH == 5 and kernelW == 5", "strideD == 1 and strideH == 1 and strideW == 1", "dilationD == 1 and dilationH == 1 and dilationW == 1", "padFront == 2 and padTop == 2 and padLeft == 2 and padBack == 2 and padBottom == 2 and padRight == 2", "attrs.ceil_mode == 0", "dim(shapes.Y, 2) == dim(shapes.X, 2)", "dim(shapes.Y, 3) == dim(shapes.X, 3)", "dim(shapes.Y, 4) == dim(shapes.X, 4)", "dim(shapes.Y, 2) >= tunables.TILED_D", "dim(shapes.Y, 3) >= tunables.TILED_H", "dim(shapes.Y, 4) >= tunables.TILED_W", "tiledDeviceOk", "tiledDispatchOk"],
598
  "passes": [
599
  {
600
  "id": "main",
601
  "name": "MaxPool.Ncdhw3dK5s1Tiled",
602
  "shader": "max-pool3d-ncdhw-k5-tiled.wgsl.jinja",
603
- "bindings": "rank3Tiled",
 
 
 
 
 
 
 
 
 
 
 
 
 
 
604
  "dispatch": {
605
- "x": "ceilDiv(dim(shapes.Y, 4), tunables.TILED_W)",
606
- "y": "ceilDiv(dim(shapes.Y, 3), tunables.TILED_H)",
607
- "z": "dim(shapes.X, 0) * dim(shapes.X, 1) * ceilDiv(dim(shapes.Y, 2), tunables.TILED_D)"
608
  }
609
  }
610
  ]
@@ -612,68 +446,111 @@
612
  {
613
  "id": "ncdhw3d",
614
  "priority": 10,
 
615
  "supersededBy": ["global_window_parallel"],
616
- "when": ["not present.indices", "floatDtypeOk", "poolShapeOk", "ranks.X == 5", "dim(shapes.Y, 2) == explicitOutD", "dim(shapes.Y, 3) == explicitOutH", "dim(shapes.Y, 4) == explicitOutW"],
617
- "constants": { "usesF16": "dtypes.T == \"f16\"", "scalar": "dtypes.T" },
618
  "passes": [
619
  {
620
  "id": "main",
621
  "name": "MaxPool.Ncdhw3d",
622
- "source": { "shader": "pool-window-nd.wgsl.jinja", "inputs": { "op": "\"max\"", "spatialRank": 3 } },
623
- "bindings": "rank3Direct",
624
- "dispatch": { "threads": "numel(shapes.Y)", "workgroupSize": "tunables.WORKGROUP_SIZE" }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
625
  }
626
  ]
627
  },
628
  {
629
  "id": "ncl1d_indices",
630
  "priority": 15,
631
- "when": ["present.indices", "f16Ok(dtypes.T)", "poolShapeOk", "ranks.X == 3", "dim(shapes.Y, 2) == explicitOutW"],
632
- "constants": { "usesF16": "dtypes.T == \"f16\"", "scalar": "dtypes.T", "hasIndices": true },
633
  "passes": [
634
  {
635
  "id": "main",
636
  "name": "MaxPool.Ncl1dIndices",
637
- "source": { "shader": "pool-window-nd.wgsl.jinja", "inputs": { "op": "\"max\"", "spatialRank": 1 } },
638
- "bindings": "rank1WithIndices",
639
- "dispatch": { "threads": "numel(shapes.Y)", "workgroupSize": "tunables.WORKGROUP_SIZE" }
 
 
 
 
 
640
  }
641
  ]
642
  },
643
  {
644
  "id": "nchw2d_uint8_indices",
645
  "priority": 16,
646
- "when": ["present.indices", "tensorDtypes.X == \"uint8\"", "tensorDtypes.Y == \"uint8\"", "poolShapeOk", "ranks.X == 4", "dim(shapes.Y, 2) == explicitOutH", "dim(shapes.Y, 3) == explicitOutW"],
647
- "constants": { "usesF16": false, "scalar": "\"u32\"", "hasIndices": true, "storageOrder": "attrs.storage_order" },
648
  "passes": [
649
  {
650
  "id": "main",
651
  "name": "MaxPool.Nchw2dUint8Indices",
652
- "source": { "shader": "pool-window-nd.wgsl.jinja", "inputs": { "op": "\"max\"", "spatialRank": 2 } },
653
- "bindings": "rank2WithIndices",
654
- "dispatch": { "threads": "numel(shapes.Y)", "workgroupSize": "tunables.WORKGROUP_SIZE" }
 
 
 
 
 
655
  }
656
  ]
657
  },
658
  {
659
  "id": "nchw2d_indices",
660
- "when": ["present.indices", "f16Ok(dtypes.T) and dtypes.T != \"u32\"", "poolShapeOk", "ranks.X == 4", "pool2dOutputShapeOk"],
661
- "constants": {
662
- "scalar": "dtypes.T",
663
- "usesF16": "dtypes.T == \"f16\"",
664
- "hasIndices": true,
665
- "storageOrder": "attrs.storage_order"
666
- },
667
  "passes": [
668
  {
669
  "id": "main",
670
  "name": "MaxPool.Nchw2dIndices",
671
- "source": { "shader": "pool-window-nd.wgsl.jinja", "inputs": { "op": "\"max\"", "spatialRank": 2 } },
672
- "bindings": "rank2WithIndices",
673
- "dispatch": { "threads": "numel(shapes.Y)", "workgroupSize": "tunables.WORKGROUP_SIZE" }
 
 
 
 
 
674
  }
675
- ],
676
- "priority": 15
677
  }
678
  ]
679
  }
 
2
  "domain": "ai.onnx",
3
  "name": "MaxPool",
4
  "sinceVersion": 12,
5
+ "inputs": { "x": { "onnx": "X", "dtype": "T" } },
6
+ "outputs": {
7
+ "y": { "onnx": "Y", "dtype": "T", "rank": "ranks.x", "shape": "poolOutputShape" },
8
+ "indices": {
9
+ "onnx": "Indices",
 
 
 
 
 
 
 
 
 
 
 
 
 
10
  "dtype": "I",
11
+ "rank": "ranks.x",
12
  "optional": true,
13
+ "shape": "poolOutputShape",
14
+ "storage": "uint32"
 
15
  }
16
+ },
17
+ "attributes": {
18
+ "auto_pad": { "default": "NOTSET" },
19
+ "storage_order": { "default": 0 },
20
+ "ceil_mode": { "default": 0 },
21
+ "kernel_shape": {},
22
+ "strides": {},
23
+ "pads": {},
24
+ "dilations": {}
 
25
  },
26
  "attributeConstraints": {
27
  "auto_pad": { "values": ["NOTSET", "SAME_UPPER", "SAME_LOWER", "VALID"] },
 
30
  "kernel_shape": { "required": true }
31
  },
32
  "typeConstraints": { "T": ["float32", "float16", "int8", "uint8"], "I": ["int64"] },
33
+ "tunables": {
34
+ "WORKGROUP_SIZE": { "default": 128 },
35
+ "TILED_D": { "default": 24 },
36
+ "TILED_H": { "default": 8 },
37
+ "TILED_W": { "default": 8 },
38
+ "TILED_LANES_D": { "default": 4 },
39
+ "SEPARABLE_MIN_WINDOW": { "default": 25 }
40
  },
41
  "derive": {
42
+ "spatialRank": "ranks.x - 2",
43
  "kernelShapeLengthOk": "not has(attrs, \"kernel_shape\") or (attrs.kernel_shape | length) == spatialRank",
44
  "stridesLengthOk": "not has(attrs, \"strides\") or (attrs.strides | length) == spatialRank",
45
  "dilationsLengthOk": "not has(attrs, \"dilations\") or (attrs.dilations | length) == spatialRank",
 
59
  "padBack": "attrs.pads[spatialRank] if padsLengthOk and has(attrs, \"pads\") and spatialRank == 3 else 0",
60
  "padBottom": "attrs.pads[2 * spatialRank - 2] if padsLengthOk and has(attrs, \"pads\") and spatialRank >= 2 else 0",
61
  "padRight": "attrs.pads[2 * spatialRank - 1] if padsLengthOk and has(attrs, \"pads\") and spatialRank >= 1 else 0",
62
+ "poolShapeOk": "ranks.x >= 3 and ranks.x <= 5 and ranks.y == ranks.x and has(attrs, \"kernel_shape\") and kernelShapeLengthOk and stridesLengthOk and dilationsLengthOk and padsLengthOk and kernelD > 0 and kernelH > 0 and kernelW > 0 and strideD > 0 and strideH > 0 and strideW > 0 and dilationD > 0 and dilationH > 0 and dilationW > 0 and padFront >= 0 and padTop >= 0 and padLeft >= 0 and padBack >= 0 and padBottom >= 0 and padRight >= 0 and (attrs.auto_pad == \"NOTSET\" or not has(attrs, \"pads\")) and dim(shapes.y, 0) == dim(shapes.x, 0) and dim(shapes.y, 1) == dim(shapes.x, 1)",
63
+ "explicitOutW": "min(ceil((dim(shapes.x, ranks.x - 1) + padLeft + padRight - ((kernelW - 1) * dilationW + 1)) / strideW) + 1, ceil((dim(shapes.x, ranks.x - 1) + padLeft) / strideW)) if attrs.ceil_mode != 0 else floor((dim(shapes.x, ranks.x - 1) + padLeft + padRight - ((kernelW - 1) * dilationW + 1)) / strideW) + 1",
64
+ "explicitOutH": "min(ceil((dim(shapes.x, ranks.x - 2) + padTop + padBottom - ((kernelH - 1) * dilationH + 1)) / strideH) + 1, ceil((dim(shapes.x, ranks.x - 2) + padTop) / strideH)) if attrs.ceil_mode != 0 else floor((dim(shapes.x, ranks.x - 2) + padTop + padBottom - ((kernelH - 1) * dilationH + 1)) / strideH) + 1",
65
+ "explicitOutD": "(min(ceil((dim(shapes.x, 2) + padFront + padBack - ((kernelD - 1) * dilationD + 1)) / strideD) + 1, ceil((dim(shapes.x, 2) + padFront) / strideD)) if attrs.ceil_mode != 0 else floor((dim(shapes.x, 2) + padFront + padBack - ((kernelD - 1) * dilationD + 1)) / strideD) + 1) if ranks.x == 5 else 0",
66
+ "inferredOutW": "ceil(dim(shapes.x, ranks.x - 1) / strideW) if attrs.auto_pad == \"SAME_UPPER\" or attrs.auto_pad == \"SAME_LOWER\" else explicitOutW",
67
+ "inferredOutH": "ceil(dim(shapes.x, ranks.x - 2) / strideH) if attrs.auto_pad == \"SAME_UPPER\" or attrs.auto_pad == \"SAME_LOWER\" else explicitOutH",
68
+ "inferredOutD": "ceil(dim(shapes.x, 2) / strideD) if attrs.auto_pad == \"SAME_UPPER\" or attrs.auto_pad == \"SAME_LOWER\" else explicitOutD",
69
+ "poolOutputShape": "[dim(shapes.x, 0), dim(shapes.x, 1), inferredOutW] if ranks.x == 3 else ([dim(shapes.x, 0), dim(shapes.x, 1), inferredOutH, inferredOutW] if ranks.x == 4 else [dim(shapes.x, 0), dim(shapes.x, 1), inferredOutD, inferredOutH, inferredOutW])",
70
+ "pool2dOutputShapeOk": "(dim(shapes.y, 2) == explicitOutH and dim(shapes.y, 3) == explicitOutW) or ((attrs.auto_pad == \"SAME_UPPER\" or attrs.auto_pad == \"SAME_LOWER\") and dim(shapes.y, 2) == ceil(dim(shapes.x, 2) / strideH) and dim(shapes.y, 3) == ceil(dim(shapes.x, 3) / strideW))",
71
+ "autoPadTotalH": "max(0, (dim(shapes.y, ranks.x - 2) - 1) * strideH + ((kernelH - 1) * dilationH + 1) - dim(shapes.x, ranks.x - 2)) if ranks.x >= 4 else 0",
72
+ "autoPadTotalW": "max(0, (dim(shapes.y, ranks.x - 1) - 1) * strideW + ((kernelW - 1) * dilationW + 1) - dim(shapes.x, ranks.x - 1))",
73
+ "effectivePadH": "(floor(autoPadTotalH / 2) if attrs.auto_pad == \"SAME_UPPER\" else autoPadTotalH - floor(autoPadTotalH / 2)) if (attrs.auto_pad == \"SAME_UPPER\" or attrs.auto_pad == \"SAME_LOWER\") else padTop",
74
+ "effectivePadW": "(floor(autoPadTotalW / 2) if attrs.auto_pad == \"SAME_UPPER\" else autoPadTotalW - floor(autoPadTotalW / 2)) if (attrs.auto_pad == \"SAME_UPPER\" or attrs.auto_pad == \"SAME_LOWER\") else padLeft",
75
  "floatDtypeOk": "(dtypes.T == \"f32\" or dtypes.T == \"f16\") and f16Ok(dtypes.T)",
76
+ "globalWindowParallelCovered": "not present.indices and floatDtypeOk and poolShapeOk and numel(shapes.y) == dim(shapes.x, 0) * dim(shapes.x, 1) and numel(shapes.y) <= min(device.limits.maxComputeWorkgroupsPerDimension, 65535) and attrs.auto_pad == \"NOTSET\" and strideD == 1 and strideH == 1 and strideW == 1 and dilationD == 1 and dilationH == 1 and dilationW == 1 and padFront == 0 and padTop == 0 and padLeft == 0 and padBack == 0 and padBottom == 0 and padRight == 0 and ((ranks.x == 3 and kernelW == dim(shapes.x, 2)) or (ranks.x == 4 and kernelH == dim(shapes.x, 2) and kernelW == dim(shapes.x, 3)) or (ranks.x == 5 and kernelD == dim(shapes.x, 2) and kernelH == dim(shapes.x, 3) and kernelW == dim(shapes.x, 4))) and inner(shapes.x, 1) >= 256",
77
  "tiledStorageBytes": "(tunables.TILED_D + kernelD - 1) * (tunables.TILED_H + kernelH - 1) * (tunables.TILED_W + kernelW - 1) * 4",
78
  "tiledDeviceOk": "tiledStorageBytes <= device.limits.maxComputeWorkgroupStorageSize and tunables.TILED_W * tunables.TILED_H * tunables.TILED_LANES_D <= device.limits.maxComputeInvocationsPerWorkgroup and tunables.TILED_W <= device.limits.maxComputeWorkgroupSizeX and tunables.TILED_H <= device.limits.maxComputeWorkgroupSizeY and tunables.TILED_LANES_D <= device.limits.maxComputeWorkgroupSizeZ",
79
+ "tiledDispatchOk": "ceilDiv(dim(shapes.y, 4), tunables.TILED_W) <= min(device.limits.maxComputeWorkgroupsPerDimension, 65535) and ceilDiv(dim(shapes.y, 3), tunables.TILED_H) <= min(device.limits.maxComputeWorkgroupsPerDimension, 65535) and dim(shapes.x, 0) * dim(shapes.x, 1) * ceilDiv(dim(shapes.y, 2), tunables.TILED_D) <= min(device.limits.maxComputeWorkgroupsPerDimension, 65535)",
80
+ "separableTmpElements": "dim(shapes.x, 0) * dim(shapes.x, 1) * dim(shapes.x, 2) * dim(shapes.y, 3)",
81
+ "separableFits": "separableTmpElements * 4 <= min(device.limits.maxStorageBufferBindingSize, device.limits.maxBufferSize) and ceilDiv(separableTmpElements, tunables.WORKGROUP_SIZE) <= min(device.limits.maxComputeWorkgroupsPerDimension, 65535) * min(device.limits.maxComputeWorkgroupsPerDimension, 65535)",
82
+ "autoPadTotalD": "max(0, (dim(shapes.y, 2) - 1) * strideD + ((kernelD - 1) * dilationD + 1) - dim(shapes.x, 2)) if ranks.x == 5 else 0",
83
+ "effectivePadD": "(floor(autoPadTotalD / 2) if attrs.auto_pad == \"SAME_UPPER\" else autoPadTotalD - floor(autoPadTotalD / 2)) if (attrs.auto_pad == \"SAME_UPPER\" or attrs.auto_pad == \"SAME_LOWER\") else padFront"
84
  },
85
+ "bindings": {
86
+ "x_2": { "name": "x", "buffer": "read-only-storage", "elementType": "$xVec4" },
87
+ "params": {
88
+ "buffer": "uniform",
89
+ "struct": [
90
+ { "name": "channels", "type": "u32", "value": "dim(shapes.x, 1)" },
91
+ { "name": "inW", "type": "u32", "value": "dim(shapes.x, 2)" },
92
+ { "name": "outW", "type": "u32", "value": "dim(shapes.y, 2)" },
93
+ { "name": "kernelW", "type": "u32", "value": "kernelW" },
94
+ { "name": "strideW", "type": "u32", "value": "strideW" },
95
+ { "name": "dilationW", "type": "u32", "value": "dilationW" },
96
+ { "name": "padW", "type": "i32", "value": "effectivePadW" },
97
+ { "name": "count", "type": "u32", "value": "numel(shapes.y)" }
98
+ ]
99
+ },
100
+ "params_7": {
101
+ "name": "params",
102
+ "buffer": "uniform",
103
+ "struct": [
104
+ { "name": "channels", "type": "u32", "value": "dim(shapes.x, 1)" },
105
+ { "name": "inH", "type": "u32", "value": "dim(shapes.x, 2)" },
106
+ { "name": "inW", "type": "u32", "value": "dim(shapes.x, 3)" },
107
+ { "name": "outH", "type": "u32", "value": "dim(shapes.y, 2)" },
108
+ { "name": "outW", "type": "u32", "value": "dim(shapes.y, 3)" },
109
+ { "name": "kernelH", "type": "u32", "value": "kernelH" },
110
+ { "name": "kernelW", "type": "u32", "value": "kernelW" },
111
+ { "name": "strideH", "type": "u32", "value": "strideH" },
112
+ { "name": "strideW", "type": "u32", "value": "strideW" },
113
+ { "name": "dilationH", "type": "u32", "value": "dilationH" },
114
+ { "name": "dilationW", "type": "u32", "value": "dilationW" },
115
+ { "name": "padH", "type": "i32", "value": "effectivePadH" },
116
+ { "name": "padW", "type": "i32", "value": "effectivePadW" },
117
+ { "name": "count", "type": "u32", "value": "numel(shapes.y)" }
118
+ ]
119
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
120
  },
121
  "variants": [
122
  {
123
  "id": "global_window_parallel",
124
  "priority": 50,
125
  "when": ["globalWindowParallelCovered"],
126
+ "derive": {
 
127
  "scalar": "dtypes.T",
128
+ "xElem": "(\"vec4<f16>\" if dtypes.T == \"f16\" else \"vec4<f32>\") if inner(shapes.x, 1) % 4 == 0 else dtypes.T"
129
  },
130
  "passes": [
131
  {
132
  "id": "main",
133
  "name": "MaxPool.GlobalWindowParallel",
134
+ "shader": "pool-global-reduction.wgsl.jinja",
135
+ "subgroupCollectivesWidth": "portable",
136
+ "derive": {
137
+ "op": "\"max\"",
138
+ "vec4": "inner(shapes.x, 1) % 4 == 0",
139
+ "workgroupSizeSpec": "tunables.WORKGROUP_SIZE",
140
+ "useSubgroups": "device.features.has(\"subgroups\")"
 
141
  },
142
+ "bindings": [
143
+ { "arg": "x", "elementType": "$xElem" },
144
+ { "arg": "y", "elementType": "$scalar" },
145
+ { "name": "params", "struct": [{ "name": "spatial", "type": "u32", "value": "inner(shapes.x, 1)" }] }
146
+ ],
147
+ "dispatch": { "x": "numel(shapes.y)" }
148
  }
149
  ]
150
  },
151
  {
152
  "id": "nchw2d_k3s2p1_vec4",
153
  "priority": 35,
154
+ "when": ["not present.indices", "f16Ok(dtypes.T)", "dtypes.T == \"f16\"", "poolShapeOk", "ranks.x == 4", "ranks.y == 4", "attrs.auto_pad == \"NOTSET\"", "kernelH == 3", "kernelW == 3", "strideH == 2", "strideW == 2", "dilationH == 1", "dilationW == 1", "padTop == 1", "padLeft == 1", "padBottom == 1", "padRight == 1", "attrs.ceil_mode == 0", "dim(shapes.x, 2) % 2 == 0", "dim(shapes.x, 3) % 8 == 0", "dim(shapes.y, 0) == dim(shapes.x, 0)", "dim(shapes.y, 1) == dim(shapes.x, 1)", "dim(shapes.y, 2) == dim(shapes.x, 2) / 2", "dim(shapes.y, 3) == dim(shapes.x, 3) / 2", "dim(shapes.y, 2) > 0", "dim(shapes.y, 3) >= 4"],
155
+ "derive": { "scalar": "dtypes.T", "xVec4": "\"vec4<f16>\"", "yVec4": "\"vec4<f16>\"" },
156
  "passes": [
157
  {
158
  "id": "main",
159
  "name": "MaxPool.Nchw2dK3s2p1Vec4",
160
+ "shader": "max-pool2d-nchw-k3s2p1-vec4.wgsl.jinja",
161
+ "derive": {
162
+ "inH": "dim(shapes.x, 2)",
163
+ "inWVec4": "dim(shapes.x, 3) / 4",
164
+ "inPlaneVec4": "dim(shapes.x, 2) * dim(shapes.x, 3) / 4",
165
+ "outH": "dim(shapes.y, 2)",
166
+ "outBlocks": "dim(shapes.y, 3) / 4"
 
 
167
  },
168
+ "bindings": [
169
+ "x_2",
170
+ { "arg": "y", "elementType": "$yVec4" },
171
+ { "name": "params", "struct": [{ "name": "tileCount", "type": "u32", "value": "numel(shapes.y) / 4" }] }
172
+ ],
173
+ "dispatch": {
174
+ "x": "min(ceilDiv((numel(shapes.y) / 4), (tunables.WORKGROUP_SIZE)), 65535)",
175
+ "y": "ceilDiv(ceilDiv((numel(shapes.y) / 4), (tunables.WORKGROUP_SIZE)), 65535)",
176
+ "z": 1
177
+ }
178
  }
179
  ]
180
  },
181
  {
182
  "id": "nchw2d_k2s2_vec4",
183
  "priority": 30,
184
+ "when": ["not present.indices", "f16Ok(dtypes.T)", "poolShapeOk", "ranks.x == 4", "ranks.y == 4", "kernelH == 2", "kernelW == 2", "strideH == 2", "strideW == 2", "dilationH == 1", "dilationW == 1", "padTop == 0", "padLeft == 0", "padBottom == 0", "padRight == 0", "attrs.ceil_mode == 0", "dim(shapes.x, 3) % 4 == 0", "dim(shapes.y, 0) == dim(shapes.x, 0)", "dim(shapes.y, 1) == dim(shapes.x, 1)", "dim(shapes.y, 2) == floor(dim(shapes.x, 2) / 2)", "dim(shapes.y, 3) == floor(dim(shapes.x, 3) / 2)", "dim(shapes.y, 2) > 0", "dim(shapes.y, 3) > 0"],
185
+ "derive": { "scalar": "dtypes.T", "xVec4": "\"vec4<f16>\" if dtypes.T == \"f16\" else \"vec4<f32>\"" },
 
 
 
 
186
  "passes": [
187
  {
188
  "id": "main",
189
  "name": "MaxPool.Nchw2dK2s2Vec4",
190
+ "shader": "pool2d-nchw-k2s2-vec4.wgsl.jinja",
191
+ "derive": {
192
+ "op": "\"max\"",
193
+ "outH": "dim(shapes.y, 2)",
194
+ "outW": "dim(shapes.y, 3)",
195
+ "outWHalf": "floor(dim(shapes.y, 3) / 2)",
196
+ "inWVec4": "floor(dim(shapes.x, 3) / 4)",
197
+ "inPlaneVec4": "floor(dim(shapes.x, 2) * dim(shapes.x, 3) / 4)"
 
 
198
  },
199
+ "bindings": [
200
+ "x_2",
201
+ "y",
202
+ { "name": "params", "struct": [{ "name": "tileCount", "type": "u32", "value": "numel(shapes.y) / 2" }] }
203
+ ],
204
+ "dispatch": {
205
+ "x": "min(ceilDiv((numel(shapes.y) / 2), (tunables.WORKGROUP_SIZE)), 65535)",
206
+ "y": "ceilDiv(ceilDiv((numel(shapes.y) / 2), (tunables.WORKGROUP_SIZE)), 65535)",
207
+ "z": 1
208
+ }
209
  }
210
  ]
211
  },
212
  {
213
  "id": "nchw2d_unrolled",
214
  "priority": 25,
215
+ "when": ["not present.indices", "floatDtypeOk", "poolShapeOk", "ranks.x == 4", "ranks.y == 4", "dim(shapes.y, 0) == dim(shapes.x, 0)", "dim(shapes.y, 1) == dim(shapes.x, 1)", "dim(shapes.y, 2) == explicitOutH", "dim(shapes.y, 3) == explicitOutW", "kernelH >= 1", "kernelH <= 3", "kernelW >= 1", "kernelW <= 3", "strideH >= 1", "strideW >= 1", "dilationH >= 1", "dilationW >= 1", "dim(shapes.y, 2) > 0", "dim(shapes.y, 3) > 0"],
216
+ "derive": { "scalar": "dtypes.T" },
217
  "passes": [
218
  {
219
  "id": "main",
220
  "name": "MaxPool.Nchw2dUnrolled",
221
+ "shader": "pool-window-unroll.wgsl.jinja",
222
+ "derive": {
223
+ "op": "\"max\"",
224
+ "kernelHSpec": "kernelH",
225
+ "kernelWSpec": "kernelW",
226
+ "strideHSpec": "strideH",
227
+ "strideWSpec": "strideW",
228
+ "dilationHSpec": "dilationH",
229
+ "dilationWSpec": "dilationW",
230
+ "padTopSpec": "padTop",
231
+ "padLeftSpec": "padLeft",
232
+ "inH": "dim(shapes.x, 2)",
233
+ "inW": "dim(shapes.x, 3)",
234
+ "outH": "dim(shapes.y, 2)",
235
+ "outW": "dim(shapes.y, 3)"
 
 
236
  },
237
+ "bindings": [
238
+ "x",
239
+ "y",
240
+ { "name": "params", "struct": [{ "name": "count", "type": "u32", "value": "numel(shapes.y)" }] }
241
+ ],
242
+ "dispatch": {
243
+ "x": "min(ceilDiv((numel(shapes.y)), (tunables.WORKGROUP_SIZE)), 65535)",
244
+ "y": "ceilDiv(ceilDiv((numel(shapes.y)), (tunables.WORKGROUP_SIZE)), 65535)",
245
+ "z": 1
246
+ }
247
  }
248
  ]
249
  },
250
  {
251
  "id": "ncl1d_k2s2_x4",
252
  "priority": 30,
253
+ "when": ["not present.indices", "floatDtypeOk", "poolShapeOk", "ranks.x == 3", "attrs.auto_pad == \"NOTSET\"", "kernelW == 2", "strideW == 2", "dilationW == 1", "padLeft == 0", "padRight == 0", "attrs.ceil_mode == 0", "dim(shapes.x, 2) % 4 == 0", "dim(shapes.y, 2) % 4 == 0", "dim(shapes.y, 2) * 2 == dim(shapes.x, 2)"],
254
+ "derive": { "scalar": "dtypes.T", "xVec4": "\"vec4<f16>\" if dtypes.T == \"f16\" else \"vec4<f32>\"" },
 
 
 
 
255
  "passes": [
256
  {
257
  "id": "main",
258
  "name": "MaxPool.Ncl1dK2s2X4",
259
+ "shader": "pool-ncl1d-x4.wgsl.jinja",
260
+ "derive": { "op": "\"max\"", "inW": "dim(shapes.x, 2)", "outW": "dim(shapes.y, 2)" },
261
+ "bindings": [
262
+ "x_2",
263
+ "y",
264
+ {
265
+ "name": "params",
266
+ "struct": [
267
+ {
268
+ "name": "blockCount",
269
+ "type": "u32",
270
+ "value": "dim(shapes.x, 0) * dim(shapes.x, 1) * ceilDiv(dim(shapes.y, 2), 4)"
271
+ }
272
+ ]
273
+ }
274
+ ],
275
  "dispatch": {
276
+ "x": "min(ceilDiv((dim(shapes.x, 0) * dim(shapes.x, 1) * ceilDiv(dim(shapes.y, 2), 4)), (tunables.WORKGROUP_SIZE)), 65535)",
277
+ "y": "ceilDiv(ceilDiv((dim(shapes.x, 0) * dim(shapes.x, 1) * ceilDiv(dim(shapes.y, 2), 4)), (tunables.WORKGROUP_SIZE)), 65535)",
278
+ "z": 1
279
  }
280
  }
281
  ]
 
283
  {
284
  "id": "ncl1d",
285
  "priority": 10,
286
+ "when": ["not present.indices", "f16Ok(dtypes.T)", "poolShapeOk", "ranks.x == 3", "dim(shapes.y, 2) == inferredOutW"],
287
+ "derive": { "scalar": "dtypes.T", "hasIndices": false },
288
  "passes": [
289
  {
290
  "id": "main",
291
  "name": "MaxPool.Ncl1d",
292
+ "shader": "pool-window-nd.wgsl.jinja",
293
+ "derive": { "op": "\"max\"", "spatialRankSpec": 1 },
294
+ "bindings": ["x", "y", "params"],
295
+ "dispatch": {
296
+ "x": "min(ceilDiv((numel(shapes.y)), (tunables.WORKGROUP_SIZE)), 65535)",
297
+ "y": "ceilDiv(ceilDiv((numel(shapes.y)), (tunables.WORKGROUP_SIZE)), 65535)",
298
+ "z": 1
299
+ }
300
  }
301
  ]
302
  },
303
  {
304
  "id": "nchw2d_uint8",
305
  "priority": 20,
306
+ "when": ["not present.indices", "tensorDtypes.x == \"uint8\"", "tensorDtypes.y == \"uint8\"", "poolShapeOk", "ranks.x == 4", "dim(shapes.y, 2) == explicitOutH", "dim(shapes.y, 3) == explicitOutW"],
307
  "passes": [
308
  {
309
  "id": "main",
310
  "name": "nchw2d_uint8",
311
  "shader": "max-pool2d-nchw-u32.wgsl.jinja",
312
+ "bindings": ["x", "y", "params_7"],
313
+ "dispatch": {
314
+ "x": "min(ceilDiv((numel(shapes.y)), (tunables.WORKGROUP_SIZE)), 65535)",
315
+ "y": "ceilDiv(ceilDiv((numel(shapes.y)), (tunables.WORKGROUP_SIZE)), 65535)",
316
+ "z": 1
317
+ }
318
  }
319
  ]
320
  },
321
  {
322
  "id": "nchw2d_separable",
323
  "priority": 22,
324
+ "when": ["not present.indices", "f16Ok(dtypes.T) and dtypes.T != \"u32\"", "poolShapeOk", "ranks.x == 4", "ranks.y == 4", "pool2dOutputShapeOk", "kernelH > 1", "kernelW > 1", "kernelH * kernelW >= tunables.SEPARABLE_MIN_WINDOW", "strideH < kernelH", "separableFits"],
325
+ "derive": { "scalar": "dtypes.T", "pIs1": false, "pIs2": false },
326
  "intermediates": [{ "id": "tmp", "dtype": "float32", "shape": "[separableTmpElements]" }],
327
  "passes": [
328
  {
329
  "id": "reduce_w",
330
  "name": "MaxPool.SeparableW",
331
+ "shader": "pool2d-nchw-separable.wgsl.jinja",
332
+ "derive": { "axisSpec": "\"w\"", "op": "\"max\"", "windowArea": "kernelH * kernelW" },
333
+ "bindings": [
334
+ "x",
335
+ { "name": "tmp", "buffer": "storage", "elementType": "f32" },
336
+ {
337
+ "name": "params",
338
+ "struct": [
339
+ { "name": "inH", "type": "u32", "value": "dim(shapes.x, 2)" },
340
+ { "name": "inW", "type": "u32", "value": "dim(shapes.x, 3)" },
341
+ { "name": "outW", "type": "u32", "value": "dim(shapes.y, 3)" },
342
+ { "name": "kernelW", "type": "u32", "value": "kernelW" },
343
+ { "name": "strideW", "type": "u32", "value": "strideW" },
344
+ { "name": "dilationW", "type": "u32", "value": "dilationW" },
345
+ { "name": "padW", "type": "i32", "value": "effectivePadW" },
346
+ {
347
+ "name": "tmpCount",
348
+ "type": "u32",
349
+ "value": "dim(shapes.x, 0) * dim(shapes.x, 1) * dim(shapes.x, 2) * dim(shapes.y, 3)"
350
+ }
351
+ ]
352
+ }
353
+ ],
354
+ "dispatch": {
355
+ "x": "min(ceilDiv((separableTmpElements), (tunables.WORKGROUP_SIZE)), 65535)",
356
+ "y": "ceilDiv(ceilDiv((separableTmpElements), (tunables.WORKGROUP_SIZE)), 65535)",
357
+ "z": 1
358
+ }
359
  },
360
  {
361
  "id": "reduce_h",
362
  "name": "MaxPool.SeparableH",
363
+ "shader": "pool2d-nchw-separable.wgsl.jinja",
364
+ "derive": { "axisSpec": "\"h\"", "op": "\"max\"", "windowArea": "kernelH * kernelW" },
365
+ "bindings": [
366
+ { "name": "tmp", "buffer": "read-only-storage", "elementType": "f32" },
367
+ "y",
368
+ {
369
+ "name": "params",
370
+ "struct": [
371
+ { "name": "inH", "type": "u32", "value": "dim(shapes.x, 2)" },
372
+ { "name": "inW", "type": "u32", "value": "dim(shapes.x, 3)" },
373
+ { "name": "outH", "type": "u32", "value": "dim(shapes.y, 2)" },
374
+ { "name": "outW", "type": "u32", "value": "dim(shapes.y, 3)" },
375
+ { "name": "kernelH", "type": "u32", "value": "kernelH" },
376
+ { "name": "kernelW", "type": "u32", "value": "kernelW" },
377
+ { "name": "strideH", "type": "u32", "value": "strideH" },
378
+ { "name": "strideW", "type": "u32", "value": "strideW" },
379
+ { "name": "dilationH", "type": "u32", "value": "dilationH" },
380
+ { "name": "dilationW", "type": "u32", "value": "dilationW" },
381
+ { "name": "padH", "type": "i32", "value": "effectivePadH" },
382
+ { "name": "padW", "type": "i32", "value": "effectivePadW" },
383
+ { "name": "count", "type": "u32", "value": "numel(shapes.y)" }
384
+ ]
385
+ }
386
+ ],
387
+ "dispatch": {
388
+ "x": "min(ceilDiv((numel(shapes.y)), (tunables.WORKGROUP_SIZE)), 65535)",
389
+ "y": "ceilDiv(ceilDiv((numel(shapes.y)), (tunables.WORKGROUP_SIZE)), 65535)",
390
+ "z": 1
391
+ }
392
  }
393
  ]
394
  },
395
  {
396
  "id": "nchw2d",
397
+ "when": ["not present.indices", "f16Ok(dtypes.T) and dtypes.T != \"u32\"", "poolShapeOk", "ranks.x == 4", "pool2dOutputShapeOk"],
398
+ "derive": { "scalar": "dtypes.T", "hasIndices": false },
399
  "passes": [
400
  {
401
  "id": "main",
402
  "name": "nchw2d",
403
+ "shader": "pool-window-nd.wgsl.jinja",
404
+ "derive": { "op": "\"max\"", "spatialRankSpec": 2 },
405
+ "bindings": ["x", "y", "params_7"],
406
+ "dispatch": {
407
+ "x": "min(ceilDiv((numel(shapes.y)), (tunables.WORKGROUP_SIZE)), 65535)",
408
+ "y": "ceilDiv(ceilDiv((numel(shapes.y)), (tunables.WORKGROUP_SIZE)), 65535)",
409
+ "z": 1
410
+ }
411
  }
412
  ]
413
  },
414
  {
415
  "id": "ncdhw3d_k5s1_tiled",
416
  "priority": 20,
417
+ "when": ["not present.indices", "dtypes.T == \"f32\"", "poolShapeOk", "ranks.x == 5", "attrs.auto_pad == \"NOTSET\"", "kernelD == 5 and kernelH == 5 and kernelW == 5", "strideD == 1 and strideH == 1 and strideW == 1", "dilationD == 1 and dilationH == 1 and dilationW == 1", "padFront == 2 and padTop == 2 and padLeft == 2 and padBack == 2 and padBottom == 2 and padRight == 2", "attrs.ceil_mode == 0", "dim(shapes.y, 2) == dim(shapes.x, 2)", "dim(shapes.y, 3) == dim(shapes.x, 3)", "dim(shapes.y, 4) == dim(shapes.x, 4)", "dim(shapes.y, 2) >= tunables.TILED_D", "dim(shapes.y, 3) >= tunables.TILED_H", "dim(shapes.y, 4) >= tunables.TILED_W", "tiledDeviceOk", "tiledDispatchOk"],
418
  "passes": [
419
  {
420
  "id": "main",
421
  "name": "MaxPool.Ncdhw3dK5s1Tiled",
422
  "shader": "max-pool3d-ncdhw-k5-tiled.wgsl.jinja",
423
+ "bindings": [
424
+ { "arg": "x", "elementType": "f32" },
425
+ { "arg": "y", "elementType": "f32" },
426
+ {
427
+ "name": "params",
428
+ "struct": [
429
+ { "name": "inD", "type": "u32", "value": "dim(shapes.x, 2)" },
430
+ { "name": "inH", "type": "u32", "value": "dim(shapes.x, 3)" },
431
+ { "name": "inW", "type": "u32", "value": "dim(shapes.x, 4)" },
432
+ { "name": "outD", "type": "u32", "value": "dim(shapes.y, 2)" },
433
+ { "name": "outH", "type": "u32", "value": "dim(shapes.y, 3)" },
434
+ { "name": "outW", "type": "u32", "value": "dim(shapes.y, 4)" }
435
+ ]
436
+ }
437
+ ],
438
  "dispatch": {
439
+ "x": "ceilDiv(dim(shapes.y, 4), tunables.TILED_W)",
440
+ "y": "ceilDiv(dim(shapes.y, 3), tunables.TILED_H)",
441
+ "z": "dim(shapes.x, 0) * dim(shapes.x, 1) * ceilDiv(dim(shapes.y, 2), tunables.TILED_D)"
442
  }
443
  }
444
  ]
 
446
  {
447
  "id": "ncdhw3d",
448
  "priority": 10,
449
+ "when": ["not present.indices", "floatDtypeOk", "poolShapeOk", "ranks.x == 5", "dim(shapes.y, 2) == inferredOutD", "dim(shapes.y, 3) == inferredOutH", "dim(shapes.y, 4) == inferredOutW"],
450
  "supersededBy": ["global_window_parallel"],
451
+ "derive": { "scalar": "dtypes.T" },
 
452
  "passes": [
453
  {
454
  "id": "main",
455
  "name": "MaxPool.Ncdhw3d",
456
+ "shader": "pool-window-nd.wgsl.jinja",
457
+ "derive": { "op": "\"max\"", "spatialRankSpec": 3 },
458
+ "bindings": [
459
+ "x",
460
+ "y",
461
+ {
462
+ "name": "params",
463
+ "struct": [
464
+ { "name": "channels", "type": "u32", "value": "dim(shapes.x, 1)" },
465
+ { "name": "inD", "type": "u32", "value": "dim(shapes.x, 2)" },
466
+ { "name": "inH", "type": "u32", "value": "dim(shapes.x, 3)" },
467
+ { "name": "inW", "type": "u32", "value": "dim(shapes.x, 4)" },
468
+ { "name": "outD", "type": "u32", "value": "dim(shapes.y, 2)" },
469
+ { "name": "outH", "type": "u32", "value": "dim(shapes.y, 3)" },
470
+ { "name": "outW", "type": "u32", "value": "dim(shapes.y, 4)" },
471
+ { "name": "kernelD", "type": "u32", "value": "kernelD" },
472
+ { "name": "kernelH", "type": "u32", "value": "kernelH" },
473
+ { "name": "kernelW", "type": "u32", "value": "kernelW" },
474
+ { "name": "strideD", "type": "u32", "value": "strideD" },
475
+ { "name": "strideH", "type": "u32", "value": "strideH" },
476
+ { "name": "strideW", "type": "u32", "value": "strideW" },
477
+ { "name": "dilationD", "type": "u32", "value": "dilationD" },
478
+ { "name": "dilationH", "type": "u32", "value": "dilationH" },
479
+ { "name": "dilationW", "type": "u32", "value": "dilationW" },
480
+ { "name": "padD", "type": "i32", "value": "effectivePadD" },
481
+ { "name": "padH", "type": "i32", "value": "effectivePadH" },
482
+ { "name": "padW", "type": "i32", "value": "effectivePadW" },
483
+ { "name": "count", "type": "u32", "value": "numel(shapes.y)" }
484
+ ]
485
+ }
486
+ ],
487
+ "dispatch": {
488
+ "x": "min(ceilDiv((numel(shapes.y)), (tunables.WORKGROUP_SIZE)), 65535)",
489
+ "y": "ceilDiv(ceilDiv((numel(shapes.y)), (tunables.WORKGROUP_SIZE)), 65535)",
490
+ "z": 1
491
+ }
492
  }
493
  ]
494
  },
495
  {
496
  "id": "ncl1d_indices",
497
  "priority": 15,
498
+ "when": ["present.indices", "f16Ok(dtypes.T)", "poolShapeOk", "ranks.x == 3", "dim(shapes.y, 2) == inferredOutW"],
499
+ "derive": { "scalar": "dtypes.T", "hasIndices": true },
500
  "passes": [
501
  {
502
  "id": "main",
503
  "name": "MaxPool.Ncl1dIndices",
504
+ "shader": "pool-window-nd.wgsl.jinja",
505
+ "derive": { "op": "\"max\"", "spatialRankSpec": 1 },
506
+ "bindings": ["x", "y", "indices", "params"],
507
+ "dispatch": {
508
+ "x": "min(ceilDiv((numel(shapes.y)), (tunables.WORKGROUP_SIZE)), 65535)",
509
+ "y": "ceilDiv(ceilDiv((numel(shapes.y)), (tunables.WORKGROUP_SIZE)), 65535)",
510
+ "z": 1
511
+ }
512
  }
513
  ]
514
  },
515
  {
516
  "id": "nchw2d_uint8_indices",
517
  "priority": 16,
518
+ "when": ["present.indices", "tensorDtypes.x == \"uint8\"", "tensorDtypes.y == \"uint8\"", "poolShapeOk", "ranks.x == 4", "dim(shapes.y, 2) == explicitOutH", "dim(shapes.y, 3) == explicitOutW"],
519
+ "derive": { "scalar": "\"u32\"", "hasIndices": true, "storageOrder": "attrs.storage_order" },
520
  "passes": [
521
  {
522
  "id": "main",
523
  "name": "MaxPool.Nchw2dUint8Indices",
524
+ "shader": "pool-window-nd.wgsl.jinja",
525
+ "derive": { "op": "\"max\"", "spatialRankSpec": 2 },
526
+ "bindings": ["x", "y", "indices", "params_7"],
527
+ "dispatch": {
528
+ "x": "min(ceilDiv((numel(shapes.y)), (tunables.WORKGROUP_SIZE)), 65535)",
529
+ "y": "ceilDiv(ceilDiv((numel(shapes.y)), (tunables.WORKGROUP_SIZE)), 65535)",
530
+ "z": 1
531
+ }
532
  }
533
  ]
534
  },
535
  {
536
  "id": "nchw2d_indices",
537
+ "priority": 15,
538
+ "when": ["present.indices", "f16Ok(dtypes.T) and dtypes.T != \"u32\"", "poolShapeOk", "ranks.x == 4", "pool2dOutputShapeOk"],
539
+ "derive": { "scalar": "dtypes.T", "hasIndices": true, "storageOrder": "attrs.storage_order" },
 
 
 
 
540
  "passes": [
541
  {
542
  "id": "main",
543
  "name": "MaxPool.Nchw2dIndices",
544
+ "shader": "pool-window-nd.wgsl.jinja",
545
+ "derive": { "op": "\"max\"", "spatialRankSpec": 2 },
546
+ "bindings": ["x", "y", "indices", "params_7"],
547
+ "dispatch": {
548
+ "x": "min(ceilDiv((numel(shapes.y)), (tunables.WORKGROUP_SIZE)), 65535)",
549
+ "y": "ceilDiv(ceilDiv((numel(shapes.y)), (tunables.WORKGROUP_SIZE)), 65535)",
550
+ "z": 1
551
+ }
552
  }
553
+ ]
 
554
  }
555
  ]
556
  }
build/webgpu/max-pool2d-nchw-k3s2p1-vec4.wgsl.jinja CHANGED
@@ -4,16 +4,16 @@
4
  // row, and the output is committed with one vec4 store.
5
  //
6
  // The first loaded vector normally contributes only its final lane. At the left
7
- // edge that lane is padding, so the load is skipped. NaNs propagate exactly as
8
- // in the scalar or unrolled fallback.
9
  enable f16;
10
  {{ env.wgsl.resourceDeclarations }}
11
 
12
- const IN_H: i32 = {{ source.inH }};
13
- const IN_W_VEC4: u32 = {{ source.inWVec4 }}u;
14
- const IN_PLANE_VEC4: u32 = {{ source.inPlaneVec4 }}u;
15
- const OUT_H: u32 = {{ source.outH }}u;
16
- const OUT_BLOCKS: u32 = {{ source.outBlocks }}u;
17
 
18
  fn negative_infinity() -> f32 {
19
  var bits = 0xff800000u;
@@ -72,10 +72,9 @@ fn combine_rows(a: vec4<f32>, b: vec4<f32>) -> vec4<f32> {
72
 
73
  @compute @workgroup_size({{ tunables.WORKGROUP_SIZE }})
74
  fn main(
75
- @builtin(global_invocation_id) gid: vec3<u32>,
76
- @builtin(num_workgroups) nwg: vec3<u32>
77
  ) {
78
- let tile = gid.x + gid.y * nwg.x * {{ tunables.WORKGROUP_SIZE }}u;
79
  if (tile >= params.tileCount) {
80
  return;
81
  }
 
4
  // row, and the output is committed with one vec4 store.
5
  //
6
  // The first loaded vector normally contributes only its final lane. At the left
7
+ // edge that lane is padding, so the load is skipped. A NaN in any selected input
8
+ // propagates to the corresponding output lane.
9
  enable f16;
10
  {{ env.wgsl.resourceDeclarations }}
11
 
12
+ const IN_H: i32 = {{ inH }};
13
+ const IN_W_VEC4: u32 = {{ inWVec4 }}u;
14
+ const IN_PLANE_VEC4: u32 = {{ inPlaneVec4 }}u;
15
+ const OUT_H: u32 = {{ outH }}u;
16
+ const OUT_BLOCKS: u32 = {{ outBlocks }}u;
17
 
18
  fn negative_infinity() -> f32 {
19
  var bits = 0xff800000u;
 
72
 
73
  @compute @workgroup_size({{ tunables.WORKGROUP_SIZE }})
74
  fn main(
75
+ @builtin(global_invocation_id) gid: vec3<u32>
 
76
  ) {
77
+ let tile = gid.x + gid.y * {{ DISPATCH_FOLD_WIDTH }}u * {{ tunables.WORKGROUP_SIZE }}u;
78
  if (tile >= params.tileCount) {
79
  return;
80
  }
build/webgpu/max-pool2d-nchw-u32.wgsl.jinja CHANGED
@@ -1,10 +1,10 @@
1
  {{ env.wgsl.resourceDeclarations }}
2
 
3
  @compute @workgroup_size({{ tunables.WORKGROUP_SIZE }})
4
- fn main(@builtin(global_invocation_id) gid: vec3<u32>, @builtin(num_workgroups) nwg: vec3<u32>) {
5
  // 2D-folded flat index: gid.y carries the high bits past the
6
- // maxComputeWorkgroupsPerDimension dispatch limit (outputs > 16.7M elements).
7
- let index = gid.x + gid.y * nwg.x * {{ tunables.WORKGROUP_SIZE }}u;
8
  if (index >= params.count) {
9
  return;
10
  }
 
1
  {{ env.wgsl.resourceDeclarations }}
2
 
3
  @compute @workgroup_size({{ tunables.WORKGROUP_SIZE }})
4
+ fn main(@builtin(global_invocation_id) gid: vec3<u32>) {
5
  // 2D-folded flat index: gid.y carries the high bits past the
6
+ // per-axis dispatch fold width (outputs > 16.7M elements).
7
+ let index = gid.x + gid.y * {{ DISPATCH_FOLD_WIDTH }}u * {{ tunables.WORKGROUP_SIZE }}u;
8
  if (index >= params.count) {
9
  return;
10
  }
build/webgpu/metadata.json CHANGED
@@ -1,26 +1,44 @@
1
  {
2
  "name": "ai.onnx.MaxPool",
3
- "id": "_ai_onnx_maxpool_webgpu_a111274",
4
  "version": 1,
5
  "license": "Apache-2.0",
6
  "backend": { "type": "webgpu" },
7
  "digest": {
8
  "algorithm": "sha256",
9
  "files": {
10
- "bench.json": "2sbUWzJvOvWX0kBWFbwhzfdsUr1kCbQEiLP64hv0cV0=",
11
- "manifest.json": "nMEfLNJIE7Mzn/qTYA4MESYTaBSmxVFp5unzc5s+h78=",
12
- "max-pool2d-nchw-k3s2p1-vec4.wgsl.jinja": "q6O0Qt5ylL3nUZKkQ48jhpF07MznNeWw8x1lHavMu6M=",
13
- "max-pool2d-nchw-u32.wgsl.jinja": "cObiWXcZ/Ti7GnO5DFFGWbLmBELe1kXFxWgHiE9/ZSU=",
14
  "max-pool3d-ncdhw-k5-tiled.wgsl.jinja": "Zwv1VailOkU7xlslNrbnUz9zyTXUSPGefhG71ybRVIk=",
15
- "pool-global-reduction.wgsl.jinja": "pY5tVjS1U8d/Hbabf04MwlObnCibUKA2Bjr0b4W3prk=",
16
- "pool-ncl1d-x4.wgsl.jinja": "ceUnDwXRfMEu8d9g3/G6wwkl3oXSKWpJ/DuaroCtJ0M=",
17
- "pool-window-nd.wgsl.jinja": "dk1AMAcbQyOalUmHvhOOyDHHpWJnRVRvSU7VDIzPoPg=",
18
- "pool-window-unroll.wgsl.jinja": "xsdMLaZoYVEqgMGjAPzGtWN/Piba5IEYpbXcwVi5dFs=",
19
- "pool2d-nchw-k2s2-vec4.wgsl.jinja": "EGOeRg/mKwceJfY9KgFAvFyKBskuQHxCyZqTice8xJk=",
20
- "pool2d-nchw-separable.wgsl.jinja": "y2M5TZv0KuDE94ZAWzUxfHWw60kFLpClsUYXHDl+k1I=",
21
- "test.json": "hX5gAq6d1UKzdg/pihB2NXATv1Br9R4e8v5krQ9LWbQ="
22
  }
23
  },
24
- "provenance": { "kernel": { "sha": "2e7068faf55e7f43df740015f6d1ee49391a41c5", "dirty": false } },
25
- "webgpu": { "manifestSpec": "1.0", "specialized": true, "opPath": "ops/ai.onnx.MaxPool" }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
26
  }
 
1
  {
2
  "name": "ai.onnx.MaxPool",
3
+ "id": "_ai_onnx_maxpool_webgpu_0edff93",
4
  "version": 1,
5
  "license": "Apache-2.0",
6
  "backend": { "type": "webgpu" },
7
  "digest": {
8
  "algorithm": "sha256",
9
  "files": {
10
+ "bench.json": "AOgKxSadb2wkwmpf8SkHhMdwM1IpGC/TbJxTvDQZdNQ=",
11
+ "manifest.json": "5TTbqWe4MvoPE69DBi3YswL01bPFczoJuMndbfJkd2Q=",
12
+ "max-pool2d-nchw-k3s2p1-vec4.wgsl.jinja": "NhbuTmSlBus0wOCYKCGshztjvOa5Ql6fscn6l5+9plc=",
13
+ "max-pool2d-nchw-u32.wgsl.jinja": "iLeF9bnjdoEU7ZeANJl9SED9RLEjB3Uo1/0MR5ktRCI=",
14
  "max-pool3d-ncdhw-k5-tiled.wgsl.jinja": "Zwv1VailOkU7xlslNrbnUz9zyTXUSPGefhG71ybRVIk=",
15
+ "pool-global-reduction.wgsl.jinja": "d0Kc8mGbdDfI0PElsqLqjpnRqfyQeaS5LqSO/f8tfTM=",
16
+ "pool-ncl1d-x4.wgsl.jinja": "wADuoaBQjOxDwie14Tmpl/I5T6TzYIKKjepOAPZNwEE=",
17
+ "pool-window-nd.wgsl.jinja": "FtY2LWLhpfgAj3ye2GP+8uez3BF7qpIncbH7yX+bauo=",
18
+ "pool-window-unroll.wgsl.jinja": "/7wF7g88WmvgGS45Lg8NikpwzGdUoIX7VkTGRWjQy9w=",
19
+ "pool2d-nchw-k2s2-vec4.wgsl.jinja": "9LgEqP1IYbTszmUOHFYrIPpobfhunkVDsVITvSPdn58=",
20
+ "pool2d-nchw-separable.wgsl.jinja": "1v8HRM4mORp/jBxY1NUObJ3vjeV5fgR6PD3mBSmyIUM=",
21
+ "test.json": "1TZGbirb+TNnfoZRenB4AaQ1b5pqHnIrKUf9SGrs/Ac="
22
  }
23
  },
24
+ "provenance": { "kernel": { "sha": "91d990483a174128daf7673f3f37a7c890493ae1", "dirty": false } },
25
+ "webgpu": {
26
+ "manifestSpec": "2.0",
27
+ "variants": {
28
+ "global_window_parallel": ["pool-global-reduction.wgsl.jinja"],
29
+ "nchw2d_k3s2p1_vec4": ["max-pool2d-nchw-k3s2p1-vec4.wgsl.jinja"],
30
+ "nchw2d_k2s2_vec4": ["pool2d-nchw-k2s2-vec4.wgsl.jinja"],
31
+ "nchw2d_unrolled": ["pool-window-unroll.wgsl.jinja"],
32
+ "ncl1d_k2s2_x4": ["pool-ncl1d-x4.wgsl.jinja"],
33
+ "ncl1d": ["pool-window-nd.wgsl.jinja"],
34
+ "nchw2d_uint8": ["max-pool2d-nchw-u32.wgsl.jinja"],
35
+ "nchw2d_separable": ["pool2d-nchw-separable.wgsl.jinja"],
36
+ "nchw2d": ["pool-window-nd.wgsl.jinja"],
37
+ "ncdhw3d_k5s1_tiled": ["max-pool3d-ncdhw-k5-tiled.wgsl.jinja"],
38
+ "ncdhw3d": ["pool-window-nd.wgsl.jinja"],
39
+ "ncl1d_indices": ["pool-window-nd.wgsl.jinja"],
40
+ "nchw2d_uint8_indices": ["pool-window-nd.wgsl.jinja"],
41
+ "nchw2d_indices": ["pool-window-nd.wgsl.jinja"]
42
+ }
43
+ }
44
  }
build/webgpu/pool-global-reduction.wgsl.jinja CHANGED
@@ -1,7 +1,4 @@
1
- {% if usesF16 %}
2
- enable f16;
3
- {% endif %}
4
- {% if source.useSubgroups %}
5
  enable subgroups;
6
  {% endif %}
7
  {{ env.wgsl.resourceDeclarations }}
@@ -9,17 +6,17 @@ enable subgroups;
9
  // Workgroup-parallel global pooling: one workgroup reduces one contiguous
10
  // (n, c) spatial plane (NC[D]HW layout makes the plane contiguous).
11
  // Threads stride the plane (vec4 loads when the plane size is divisible by 4),
12
- // then combine the per-thread partials. With subgroups: a subgroup collective
13
- // + a shared-memory fold of the per-subgroup partials. Without subgroups, a
14
- // full workgroup tree keeps workgroup-per-plane parallelism
15
- // instead of falling to the one-thread-per-plane serial scalar kernel. The
16
- // epilogue finalizes average / max / Lp. Sum reassociates;
17
- // max is exact.
18
- const WG: u32 = {{ source.workgroupSize }}u;
19
- {% if source.useSubgroups %}
20
- // WebGPU subgroups are at least 4 wide, so a workgroup holds at most WG / 4 subgroups.
21
- const MAX_SUBGROUPS: u32 = WG / 4u;
22
- var<workgroup> wg_partials: array<f32, MAX_SUBGROUPS>;
23
  {% else %}
24
  var<workgroup> wg_tree: array<f32, WG>;
25
  {% endif %}
@@ -28,7 +25,7 @@ fn negative_infinity() -> f32 {
28
  var bits = 0xff800000u;
29
  return bitcast<f32>(bits);
30
  }
31
- {% if source.useSubgroups %}
32
 
33
  fn quiet_nan() -> f32 {
34
  var bits = 0x7fc00000u;
@@ -54,23 +51,13 @@ fn max_propagate_nan(a: f32, b: f32) -> f32 {
54
  @compute @workgroup_size(WG)
55
  fn main(@builtin(workgroup_id) wid: vec3<u32>,
56
  @builtin(local_invocation_id) lid: vec3<u32>
57
- {%- if source.useSubgroups %},
58
  @builtin(subgroup_size) sg_size: u32
59
  {%- endif %}) {
60
  let plane = wid.x;
61
  let tid = lid.x;
62
- {% if source.useSubgroups %}
63
-
64
- // Seed cross-subgroup slots with the reduction identity so unwritten slots
65
- // (when the workgroup has fewer than MAX_SUBGROUPS subgroups) are harmless.
66
- if (tid < MAX_SUBGROUPS) {
67
- wg_partials[tid] = negative_infinity();
68
- }
69
- workgroupBarrier();
70
-
71
- {% endif %}
72
  var partial = negative_infinity();
73
- {% if source.vec4 %}
74
  let spatialVec = params.spatial / 4u;
75
  let base = plane * spatialVec;
76
  for (var i = tid; i < spatialVec; i = i + WG) {
@@ -88,21 +75,38 @@ fn main(@builtin(workgroup_id) wid: vec3<u32>,
88
  }
89
  {% endif %}
90
 
91
- {% if source.useSubgroups %}
92
  // subgroupMax does not propagate NaN; carry an explicit NaN flag alongside.
93
  let lane_nan = is_nan_f32(partial);
94
  let sg_nan = subgroupAny(lane_nan);
95
  let sg_max = subgroupMax(select(partial, negative_infinity(), lane_nan));
96
- if (subgroupElect()) {
97
- wg_partials[tid / sg_size] = select(sg_max, quiet_nan(), sg_nan);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
98
  }
99
- workgroupBarrier();
100
  if (tid == 0u) {
101
- let nsg = min((WG + sg_size - 1u) / sg_size, MAX_SUBGROUPS);
102
- var total = negative_infinity();
103
- for (var i = 0u; i < nsg; i = i + 1u) {
104
- total = max_propagate_nan(total, wg_partials[i]);
105
- }
106
  y[plane] = {{ scalar }}(total);
107
  }
108
  {% else %}
 
1
+ {% if useSubgroups %}
 
 
 
2
  enable subgroups;
3
  {% endif %}
4
  {{ env.wgsl.resourceDeclarations }}
 
6
  // Workgroup-parallel global pooling: one workgroup reduces one contiguous
7
  // (n, c) spatial plane (NC[D]HW layout makes the plane contiguous).
8
  // Threads stride the plane (vec4 loads when the plane size is divisible by 4),
9
+ // then combine the per-thread partials. With subgroups: a subgroup collective,
10
+ // then one shared-memory slot per invocation (the subgroup partial from its
11
+ // elected lane, the identity from every other lane) that every subgroup folds.
12
+ // Without subgroups, a full workgroup tree combines the per-thread partials.
13
+ // The fold propagates NaNs while taking the maximum.
14
+ const WG: u32 = {{ workgroupSizeSpec }}u;
15
+ {% if useSubgroups %}
16
+ // One slot per invocation: the cross-subgroup fold below indexes by
17
+ // local_invocation_id, never by a subgroup ordinal, so no subgroup width or
18
+ // partition can overflow or alias it.
19
+ var<workgroup> wg_partials: array<f32, WG>;
20
  {% else %}
21
  var<workgroup> wg_tree: array<f32, WG>;
22
  {% endif %}
 
25
  var bits = 0xff800000u;
26
  return bitcast<f32>(bits);
27
  }
28
+ {% if useSubgroups %}
29
 
30
  fn quiet_nan() -> f32 {
31
  var bits = 0x7fc00000u;
 
51
  @compute @workgroup_size(WG)
52
  fn main(@builtin(workgroup_id) wid: vec3<u32>,
53
  @builtin(local_invocation_id) lid: vec3<u32>
54
+ {%- if useSubgroups %},
55
  @builtin(subgroup_size) sg_size: u32
56
  {%- endif %}) {
57
  let plane = wid.x;
58
  let tid = lid.x;
 
 
 
 
 
 
 
 
 
 
59
  var partial = negative_infinity();
60
+ {% if vec4 %}
61
  let spatialVec = params.spatial / 4u;
62
  let base = plane * spatialVec;
63
  for (var i = tid; i < spatialVec; i = i + WG) {
 
75
  }
76
  {% endif %}
77
 
78
+ {% if useSubgroups %}
79
  // subgroupMax does not propagate NaN; carry an explicit NaN flag alongside.
80
  let lane_nan = is_nan_f32(partial);
81
  let sg_nan = subgroupAny(lane_nan);
82
  let sg_max = subgroupMax(select(partial, negative_infinity(), lane_nan));
83
+ var total = select(sg_max, quiet_nan(), sg_nan);
84
+ // Cross-subgroup fold that assumes nothing about which invocations share a
85
+ // subgroup, how many subgroups there are, or which of a subgroup's lanes are
86
+ // active: every invocation owns the slot at its own index, the elected lane
87
+ // publishes its subgroup partial there and every other lane publishes the
88
+ // reduction identity. Each subgroup then folds all WG slots — lane `rank`,
89
+ // its dense position among the active lanes, walks slots rank, rank + count,
90
+ // ... — and one more collective merges the lane partials, so every slot is
91
+ // merged exactly once at any legal width and partition. A one-subgroup
92
+ // workgroup skips shared memory entirely; that test reads the `subgroup_size`
93
+ // builtin, which is uniform, because a collective's result is not uniform to
94
+ // WGSL's analysis and may not guard a barrier.
95
+ if (sg_size != WG) {
96
+ let rank = subgroupExclusiveAdd(1u);
97
+ let count = subgroupAdd(1u);
98
+ wg_partials[tid] = select(negative_infinity(), total, rank == 0u);
99
+ workgroupBarrier();
100
+ var acc = negative_infinity();
101
+ for (var i = rank; i < WG; i = i + count) {
102
+ acc = max_propagate_nan(acc, wg_partials[i]);
103
+ }
104
+ let acc_nan = is_nan_f32(acc);
105
+ let fold_nan = subgroupAny(acc_nan);
106
+ let fold_max = subgroupMax(select(acc, negative_infinity(), acc_nan));
107
+ total = select(fold_max, quiet_nan(), fold_nan);
108
  }
 
109
  if (tid == 0u) {
 
 
 
 
 
110
  y[plane] = {{ scalar }}(total);
111
  }
112
  {% else %}
build/webgpu/pool-ncl1d-x4.wgsl.jinja CHANGED
@@ -1,14 +1,9 @@
1
- {% if usesF16 %}
2
- enable f16;
3
- {% endif %}
4
  {{ env.wgsl.resourceDeclarations }}
5
 
6
- // Four adjacent NCL outputs per invocation for non-overlapping max k2/s2 and
7
- // overlapping L2 k4/s2 windows. Both layouts consume aligned vec4 input blocks.
8
- // The L2 route reuses shared middle samples instead of loading every window
9
- // independently.
10
- const IN_W: u32 = {{ source.inW }}u;
11
- const OUT_W: u32 = {{ source.outW }}u;
12
  const BLOCKS_PER_PLANE: u32 = (OUT_W + 3u) / 4u;
13
 
14
  fn is_nan_f32(value: f32) -> bool {
@@ -30,9 +25,8 @@ fn pair_max(a: f32, b: f32) -> f32 {
30
  @compute @workgroup_size({{ tunables.WORKGROUP_SIZE }})
31
  fn main(
32
  @builtin(global_invocation_id) gid: vec3<u32>,
33
- @builtin(num_workgroups) nwg: vec3<u32>,
34
  ) {
35
- let block = gid.x + gid.y * nwg.x * {{ tunables.WORKGROUP_SIZE }}u;
36
  if (block >= params.blockCount) { return; }
37
 
38
  let plane = block / BLOCKS_PER_PLANE;
 
 
 
 
1
  {{ env.wgsl.resourceDeclarations }}
2
 
3
+ // Four adjacent NCL max-pool outputs per invocation for non-overlapping k2/s2
4
+ // windows. Two aligned vec4 input words contain all four windows.
5
+ const IN_W: u32 = {{ inW }}u;
6
+ const OUT_W: u32 = {{ outW }}u;
 
 
7
  const BLOCKS_PER_PLANE: u32 = (OUT_W + 3u) / 4u;
8
 
9
  fn is_nan_f32(value: f32) -> bool {
 
25
  @compute @workgroup_size({{ tunables.WORKGROUP_SIZE }})
26
  fn main(
27
  @builtin(global_invocation_id) gid: vec3<u32>,
 
28
  ) {
29
+ let block = gid.x + gid.y * {{ DISPATCH_FOLD_WIDTH }}u * {{ tunables.WORKGROUP_SIZE }}u;
30
  if (block >= params.blockCount) { return; }
31
 
32
  let plane = block / BLOCKS_PER_PLANE;
build/webgpu/pool-window-nd.wgsl.jinja CHANGED
@@ -1,9 +1,8 @@
1
- {% if usesF16 %}
2
- enable f16;
3
- {% endif %}
4
  {{ env.wgsl.resourceDeclarations }}
5
 
6
- // Direct {{ source.spatialRank }}D {{ source.op }}-pool traversal for a channels-first tensor.
7
  fn negative_infinity() -> f32 {
8
  var bits = 0xff800000u;
9
  return bitcast<f32>(bits);
@@ -22,17 +21,17 @@ fn max_propagate_nan(a: f32, b: f32) -> f32 {
22
  }
23
 
24
  @compute @workgroup_size({{ tunables.WORKGROUP_SIZE }})
25
- fn main(@builtin(global_invocation_id) gid: vec3<u32>, @builtin(num_workgroups) nwg: vec3<u32>) {
26
- let index = gid.x + gid.y * nwg.x * {{ tunables.WORKGROUP_SIZE }}u;
27
  if (index >= params.count) { return; }
28
 
29
  let ow = index % params.outW;
30
  var t = index / params.outW;
31
- {% if source.spatialRank >= 2 %}
32
  let oh = t % params.outH;
33
  t /= params.outH;
34
  {% endif %}
35
- {% if source.spatialRank == 3 %}
36
  let od = t % params.outD;
37
  t /= params.outD;
38
  {% endif %}
@@ -42,18 +41,18 @@ fn main(@builtin(global_invocation_id) gid: vec3<u32>, @builtin(num_workgroups)
42
  var best = negative_infinity();
43
  var seen = false;
44
  {% if hasIndices %}
45
- {% if source.spatialRank >= 2 %}
46
  var bestIh = 0u;
47
  {% endif %}
48
  var bestIw = 0u;
49
  {% endif %}
50
 
51
- {% if source.spatialRank == 3 %}
52
  for (var kd = 0u; kd < params.kernelD; kd += 1u) {
53
  let id = i32(od * params.strideD + kd * params.dilationD) - params.padD;
54
  if (id < 0 || id >= i32(params.inD)) { continue; }
55
  {% endif %}
56
- {% if source.spatialRank >= 2 %}
57
  for (var kh = 0u; kh < params.kernelH; kh += 1u) {
58
  let ih = i32(oh * params.strideH + kh * params.dilationH) - params.padH;
59
  if (ih < 0 || ih >= i32(params.inH)) { continue; }
@@ -61,9 +60,9 @@ fn main(@builtin(global_invocation_id) gid: vec3<u32>, @builtin(num_workgroups)
61
  for (var kw = 0u; kw < params.kernelW; kw += 1u) {
62
  let iw = i32(ow * params.strideW + kw * params.dilationW) - params.padW;
63
  if (iw < 0 || iw >= i32(params.inW)) { continue; }
64
- {% if source.spatialRank == 1 %}
65
  let xIndex = (batch * params.channels + channel) * params.inW + u32(iw);
66
- {% elif source.spatialRank == 2 %}
67
  let xIndex = ((batch * params.channels + channel) * params.inH + u32(ih)) * params.inW + u32(iw);
68
  {% else %}
69
  let xIndex = (((batch * params.channels + channel) * params.inD + u32(id)) * params.inH + u32(ih)) * params.inW + u32(iw);
@@ -71,7 +70,7 @@ fn main(@builtin(global_invocation_id) gid: vec3<u32>, @builtin(num_workgroups)
71
  let value = f32(x[xIndex]);
72
  {% if hasIndices %}
73
  if (!seen || value > best) {
74
- {% if source.spatialRank >= 2 %}
75
  bestIh = u32(ih);
76
  {% endif %}
77
  bestIw = u32(iw);
@@ -80,17 +79,17 @@ fn main(@builtin(global_invocation_id) gid: vec3<u32>, @builtin(num_workgroups)
80
  best = max_propagate_nan(best, value);
81
  seen = true;
82
  }
83
- {% if source.spatialRank >= 2 %}
84
  }
85
  {% endif %}
86
- {% if source.spatialRank == 3 %}
87
  }
88
  {% endif %}
89
 
90
  y[index] = {{ scalar }}(select(0.0, best, seen));
91
  {% if hasIndices %}
92
  let nc = batch * params.channels + channel;
93
- {% if source.spatialRank == 1 %}
94
  indices[index] = nc * params.inW + bestIw;
95
  {% elif storageOrder == 1 %}
96
  indices[index] = (nc * params.inW + bestIw) * params.inH + bestIh;
 
1
+ {% set hasIndices = hasIndices is defined and hasIndices %}
2
+ {% set storageOrder = storageOrder | default(0) %}
 
3
  {{ env.wgsl.resourceDeclarations }}
4
 
5
+ // Direct spatial-pooling traversal for a channels-first tensor.
6
  fn negative_infinity() -> f32 {
7
  var bits = 0xff800000u;
8
  return bitcast<f32>(bits);
 
21
  }
22
 
23
  @compute @workgroup_size({{ tunables.WORKGROUP_SIZE }})
24
+ fn main(@builtin(global_invocation_id) gid: vec3<u32>) {
25
+ let index = gid.x + gid.y * {{ DISPATCH_FOLD_WIDTH }}u * {{ tunables.WORKGROUP_SIZE }}u;
26
  if (index >= params.count) { return; }
27
 
28
  let ow = index % params.outW;
29
  var t = index / params.outW;
30
+ {% if spatialRankSpec >= 2 %}
31
  let oh = t % params.outH;
32
  t /= params.outH;
33
  {% endif %}
34
+ {% if spatialRankSpec == 3 %}
35
  let od = t % params.outD;
36
  t /= params.outD;
37
  {% endif %}
 
41
  var best = negative_infinity();
42
  var seen = false;
43
  {% if hasIndices %}
44
+ {% if spatialRankSpec >= 2 %}
45
  var bestIh = 0u;
46
  {% endif %}
47
  var bestIw = 0u;
48
  {% endif %}
49
 
50
+ {% if spatialRankSpec == 3 %}
51
  for (var kd = 0u; kd < params.kernelD; kd += 1u) {
52
  let id = i32(od * params.strideD + kd * params.dilationD) - params.padD;
53
  if (id < 0 || id >= i32(params.inD)) { continue; }
54
  {% endif %}
55
+ {% if spatialRankSpec >= 2 %}
56
  for (var kh = 0u; kh < params.kernelH; kh += 1u) {
57
  let ih = i32(oh * params.strideH + kh * params.dilationH) - params.padH;
58
  if (ih < 0 || ih >= i32(params.inH)) { continue; }
 
60
  for (var kw = 0u; kw < params.kernelW; kw += 1u) {
61
  let iw = i32(ow * params.strideW + kw * params.dilationW) - params.padW;
62
  if (iw < 0 || iw >= i32(params.inW)) { continue; }
63
+ {% if spatialRankSpec == 1 %}
64
  let xIndex = (batch * params.channels + channel) * params.inW + u32(iw);
65
+ {% elif spatialRankSpec == 2 %}
66
  let xIndex = ((batch * params.channels + channel) * params.inH + u32(ih)) * params.inW + u32(iw);
67
  {% else %}
68
  let xIndex = (((batch * params.channels + channel) * params.inD + u32(id)) * params.inH + u32(ih)) * params.inW + u32(iw);
 
70
  let value = f32(x[xIndex]);
71
  {% if hasIndices %}
72
  if (!seen || value > best) {
73
+ {% if spatialRankSpec >= 2 %}
74
  bestIh = u32(ih);
75
  {% endif %}
76
  bestIw = u32(iw);
 
79
  best = max_propagate_nan(best, value);
80
  seen = true;
81
  }
82
+ {% if spatialRankSpec >= 2 %}
83
  }
84
  {% endif %}
85
+ {% if spatialRankSpec == 3 %}
86
  }
87
  {% endif %}
88
 
89
  y[index] = {{ scalar }}(select(0.0, best, seen));
90
  {% if hasIndices %}
91
  let nc = batch * params.channels + channel;
92
+ {% if spatialRankSpec == 1 %}
93
  indices[index] = nc * params.inW + bestIw;
94
  {% elif storageOrder == 1 %}
95
  indices[index] = (nc * params.inW + bestIw) * params.inH + bestIh;
build/webgpu/pool-window-unroll.wgsl.jinja CHANGED
@@ -1,20 +1,17 @@
1
  // Compile-time-unrolled 2D NCHW pooling for small windows. Accumulation remains
2
- // kh-major/kw-minor, matching the runtime-loop fallbacks.
3
- {% if usesF16 %}
4
- enable f16;
5
- {% endif %}
6
  {{ env.wgsl.resourceDeclarations }}
7
 
8
- const OUT_W: u32 = {{ source.outW }}u;
9
- const OUT_H: u32 = {{ source.outH }}u;
10
- const IN_H: i32 = {{ source.inH }};
11
- const IN_W: i32 = {{ source.inW }};
12
- const IN_W_U: u32 = {{ source.inW }}u;
13
- const IN_PLANE: u32 = {{ source.inH * source.inW }}u;
14
- const STRIDE_H: u32 = {{ source.strideH }}u;
15
- const STRIDE_W: u32 = {{ source.strideW }}u;
16
- const PAD_TOP: i32 = {{ source.padTop }};
17
- const PAD_LEFT: i32 = {{ source.padLeft }};
18
 
19
  fn negative_infinity() -> f32 {
20
  var bits = 0xff800000u;
@@ -39,11 +36,10 @@ fn max_propagate_nan(a: f32, b: f32) -> f32 {
39
 
40
  @compute @workgroup_size({{ tunables.WORKGROUP_SIZE }})
41
  fn main(
42
- @builtin(global_invocation_id) gid: vec3<u32>,
43
- @builtin(num_workgroups) nwg: vec3<u32>
44
  ) {
45
  // Fold very large flat outputs into the dispatch's second dimension.
46
- let index = gid.x + gid.y * nwg.x * {{ tunables.WORKGROUP_SIZE }}u;
47
  if (index >= params.count) {
48
  return;
49
  }
@@ -55,19 +51,19 @@ fn main(
55
  let planeBase = plane * IN_PLANE;
56
  let startH = i32(oh * STRIDE_H) - PAD_TOP;
57
  let startW = i32(ow * STRIDE_W) - PAD_LEFT;
58
- {% for kh in range(source.kernelH) %}
59
- let ih_{{ kh }} = startH + {{ kh * source.dilationH }};
60
  {% endfor %}
61
- {% for kw in range(source.kernelW) %}
62
- let iw_{{ kw }} = startW + {{ kw * source.dilationW }};
63
  {% endfor %}
64
 
65
  var result = negative_infinity();
66
  var seen = 0u;
67
- {% for kh in range(source.kernelH) %}
68
  if (ih_{{ kh }} >= 0 && ih_{{ kh }} < IN_H) {
69
  let rowBase{{ kh }} = planeBase + u32(ih_{{ kh }}) * IN_W_U;
70
- {% for kw in range(source.kernelW) %}
71
  if (iw_{{ kw }} >= 0 && iw_{{ kw }} < IN_W) {
72
  let value_{{ kh }}_{{ kw }} = f32(x[rowBase{{ kh }} + u32(iw_{{ kw }})]);
73
  result = max_propagate_nan(result, value_{{ kh }}_{{ kw }});
 
1
  // Compile-time-unrolled 2D NCHW pooling for small windows. Accumulation remains
2
+ // kh-major/kw-minor, matching the loop-based implementations.
 
 
 
3
  {{ env.wgsl.resourceDeclarations }}
4
 
5
+ const OUT_W: u32 = {{ outW }}u;
6
+ const OUT_H: u32 = {{ outH }}u;
7
+ const IN_H: i32 = {{ inH }};
8
+ const IN_W: i32 = {{ inW }};
9
+ const IN_W_U: u32 = {{ inW }}u;
10
+ const IN_PLANE: u32 = {{ inH * inW }}u;
11
+ const STRIDE_H: u32 = {{ strideHSpec }}u;
12
+ const STRIDE_W: u32 = {{ strideWSpec }}u;
13
+ const PAD_TOP: i32 = {{ padTopSpec }};
14
+ const PAD_LEFT: i32 = {{ padLeftSpec }};
15
 
16
  fn negative_infinity() -> f32 {
17
  var bits = 0xff800000u;
 
36
 
37
  @compute @workgroup_size({{ tunables.WORKGROUP_SIZE }})
38
  fn main(
39
+ @builtin(global_invocation_id) gid: vec3<u32>
 
40
  ) {
41
  // Fold very large flat outputs into the dispatch's second dimension.
42
+ let index = gid.x + gid.y * {{ DISPATCH_FOLD_WIDTH }}u * {{ tunables.WORKGROUP_SIZE }}u;
43
  if (index >= params.count) {
44
  return;
45
  }
 
51
  let planeBase = plane * IN_PLANE;
52
  let startH = i32(oh * STRIDE_H) - PAD_TOP;
53
  let startW = i32(ow * STRIDE_W) - PAD_LEFT;
54
+ {% for kh in range(kernelHSpec) %}
55
+ let ih_{{ kh }} = startH + {{ kh * dilationHSpec }};
56
  {% endfor %}
57
+ {% for kw in range(kernelWSpec) %}
58
+ let iw_{{ kw }} = startW + {{ kw * dilationWSpec }};
59
  {% endfor %}
60
 
61
  var result = negative_infinity();
62
  var seen = 0u;
63
+ {% for kh in range(kernelHSpec) %}
64
  if (ih_{{ kh }} >= 0 && ih_{{ kh }} < IN_H) {
65
  let rowBase{{ kh }} = planeBase + u32(ih_{{ kh }}) * IN_W_U;
66
+ {% for kw in range(kernelWSpec) %}
67
  if (iw_{{ kw }} >= 0 && iw_{{ kw }} < IN_W) {
68
  let value_{{ kh }}_{{ kw }} = f32(x[rowBase{{ kh }} + u32(iw_{{ kw }})]);
69
  result = max_propagate_nan(result, value_{{ kh }}_{{ kw }});
build/webgpu/pool2d-nchw-k2s2-vec4.wgsl.jinja CHANGED
@@ -1,19 +1,15 @@
1
- {% if usesF16 %}
2
- enable f16;
3
- {% endif %}
4
  {{ env.wgsl.resourceDeclarations }}
5
 
6
  // 2D NCHW MaxPool specialised for the dense 2x2 / stride-2 / no-pad /
7
  // dilation-1 window. Each thread produces two adjacent output columns from one
8
  // aligned vec4 load per input row. A vec4 over
9
  // input columns [4*tileCol .. 4*tileCol+3] holds the two side-by-side 2-wide
10
- // windows. NaN propagation matches the scalar fallback: any NaN in a window
11
- // forces a NaN result for that column.
12
- const OUT_W: u32 = {{ source.outW }}u; // == IN_W / 2 (no pad, stride 2)
13
- const OUT_H: u32 = {{ source.outH }}u;
14
- const OUT_W_HALF: u32 = {{ source.outWHalf }}u;
15
- const IN_W_VEC4: u32 = {{ source.inWVec4 }}u; // input row length in vec4 units
16
- const IN_PLANE_VEC4: u32 = {{ source.inPlaneVec4 }}u;
17
 
18
  fn is_nan_v(value: {{ scalar }}) -> bool {
19
  let bits = bitcast<u32>(f32(value));
@@ -27,9 +23,9 @@ fn max_nan(a: {{ scalar }}, b: {{ scalar }}) -> {{ scalar }} {
27
  }
28
 
29
  @compute @workgroup_size({{ tunables.WORKGROUP_SIZE }})
30
- fn main(@builtin(global_invocation_id) gid: vec3<u32>, @builtin(num_workgroups) nwg: vec3<u32>) {
31
  // 2D-folded flat tile index (one tile = two output columns).
32
- let tile = gid.x + gid.y * nwg.x * {{ tunables.WORKGROUP_SIZE }}u;
33
  if (tile >= params.tileCount) {
34
  return;
35
  }
 
 
 
 
1
  {{ env.wgsl.resourceDeclarations }}
2
 
3
  // 2D NCHW MaxPool specialised for the dense 2x2 / stride-2 / no-pad /
4
  // dilation-1 window. Each thread produces two adjacent output columns from one
5
  // aligned vec4 load per input row. A vec4 over
6
  // input columns [4*tileCol .. 4*tileCol+3] holds the two side-by-side 2-wide
7
+ // windows. Any NaN in a window produces a NaN result for that column.
8
+ const OUT_W: u32 = {{ outW }}u; // == IN_W / 2 (no pad, stride 2)
9
+ const OUT_H: u32 = {{ outH }}u;
10
+ const OUT_W_HALF: u32 = {{ outWHalf }}u;
11
+ const IN_W_VEC4: u32 = {{ inWVec4 }}u; // input row length in vec4 units
12
+ const IN_PLANE_VEC4: u32 = {{ inPlaneVec4 }}u;
 
13
 
14
  fn is_nan_v(value: {{ scalar }}) -> bool {
15
  let bits = bitcast<u32>(f32(value));
 
23
  }
24
 
25
  @compute @workgroup_size({{ tunables.WORKGROUP_SIZE }})
26
+ fn main(@builtin(global_invocation_id) gid: vec3<u32>) {
27
  // 2D-folded flat tile index (one tile = two output columns).
28
+ let tile = gid.x + gid.y * {{ DISPATCH_FOLD_WIDTH }}u * {{ tunables.WORKGROUP_SIZE }}u;
29
  if (tile >= params.tileCount) {
30
  return;
31
  }
build/webgpu/pool2d-nchw-separable.wgsl.jinja CHANGED
@@ -1,26 +1,13 @@
1
- {% if usesF16 %}
2
- enable f16;
3
- {% endif %}
4
  {{ env.wgsl.resourceDeclarations }}
5
 
6
  // Separable NCHW pooling: one spatial axis per pass.
7
  //
8
- // Both reductions here are associative, so a kernelH x kernelW window
9
- // factorizes into a reduction along W followed by one along H. The direct
10
- // kernel reads kernelH*kernelW inputs per output; separating them reads kernelW
11
- // into an intermediate cell that neighbouring outputs then share, plus kernelH
12
- // per output.
13
- //
14
- // The intermediate is f32 because the direct kernel also accumulates in f32
15
- // and casts once at the end, including for i32 input.
16
- //
17
- // Max pooling is bit-identical to the direct kernel because max is idempotent
18
- // as well as associative. Lp pooling is within tolerance but not bit-identical:
19
- // summing each row first regroups f32 additions relative to the direct kernel.
20
- //
21
- // `axis` selects the pass: "w" reduces x into tmp, and "h" reduces tmp into y.
22
- // AveragePool is not wired here because its denominator would require valid-tap
23
- // counts to travel alongside the sum.
24
  fn negative_infinity() -> f32 {
25
  var bits = 0xff800000u;
26
  return bitcast<f32>(bits);
@@ -39,9 +26,9 @@ fn max_propagate_nan(a: f32, b: f32) -> f32 {
39
  }
40
 
41
  @compute @workgroup_size({{ tunables.WORKGROUP_SIZE }})
42
- fn main(@builtin(global_invocation_id) gid: vec3<u32>, @builtin(num_workgroups) nwg: vec3<u32>) {
43
- let index = gid.x + gid.y * nwg.x * {{ tunables.WORKGROUP_SIZE }}u;
44
- {% if source.axis == "w" %}
45
  if (index >= params.tmpCount) { return; }
46
  // One cell per (batch, channel, input row, output column).
47
  let ow = index % params.outW;
 
 
 
 
1
  {{ env.wgsl.resourceDeclarations }}
2
 
3
  // Separable NCHW pooling: one spatial axis per pass.
4
  //
5
+ // A kernelH x kernelW window factorizes into a width reduction followed by a
6
+ // height reduction. The width pass writes one f32 intermediate per input row
7
+ // and output column; the height pass completes the selected pooling operation.
8
+ // `axis == "w"` writes `tmp`, and `axis == "h"` writes `y`.
9
+ // Each pass propagates NaNs while taking maxima. Because max is associative and
10
+ // idempotent, the two folds produce the same result as a two-dimensional fold.
 
 
 
 
 
 
 
 
 
 
11
  fn negative_infinity() -> f32 {
12
  var bits = 0xff800000u;
13
  return bitcast<f32>(bits);
 
26
  }
27
 
28
  @compute @workgroup_size({{ tunables.WORKGROUP_SIZE }})
29
+ fn main(@builtin(global_invocation_id) gid: vec3<u32>) {
30
+ let index = gid.x + gid.y * {{ DISPATCH_FOLD_WIDTH }}u * {{ tunables.WORKGROUP_SIZE }}u;
31
+ {% if axisSpec == "w" %}
32
  if (index >= params.tmpCount) { return; }
33
  // One cell per (batch, channel, input row, output column).
34
  let ow = index % params.outW;
build/webgpu/test.json CHANGED
@@ -1,5 +1,4 @@
1
  {
2
- "op": "ai.onnx.MaxPool",
3
  "fixtureArrays": {
4
  "onnx_backend_maxpool_2d_input_x": [1.764052391052246, 0.40015721321105957, 0.978738009929657, 2.2408931255340576, 1.8675580024719238, -0.9772778749465942, 0.9500884413719177, -0.15135720372200012, -0.10321885347366333, 0.4105985164642334, 0.14404356479644775, 1.4542734622955322, 0.7610377073287964, 0.12167501449584961, 0.44386324286460876, 0.3336743414402008, 1.4940791130065918, -0.2051582634449005, 0.3130677044391632, -0.8540957570075989, -2.5529897212982178, 0.653618574142456, 0.8644362092018127, -0.7421650290489197, 2.269754648208618, -1.4543657302856445, 0.04575851559638977, -0.18718385696411133, 1.5327792167663574, 1.4693588018417358, 0.154947429895401, 0.37816253304481506, -0.8877857327461243, -1.980796456336975, -0.34791216254234314, 0.15634897351264954, 1.2302906513214111, 1.202379822731018, -0.38732680678367615, -0.302302747964859, -1.0485529899597168, -1.420017957687378, -1.7062702178955078, 1.950775384902954, -0.5096521973609924, -0.4380742907524109, -1.2527953386306763, 0.7774903774261475, -1.6138978004455566, -0.21274028718471527, -0.8954665660858154, 0.38690251111984253, -0.5108051300048828, -1.18063223361969, -0.02818222902715206, 0.4283318817615509, 0.06651721894741058, 0.30247190594673157, -0.6343221068382263, -0.3627411723136902, -0.6724604368209839, -0.35955315828323364, -0.8131462931632996, -1.7262825965881348, 0.17742614448070526, -0.4017809331417084, -1.630198359489441, 0.46278226375579834, -0.9072983860969543, 0.05194539576768875, 0.7290905714035034, 0.12898291647434235, 1.1394007205963135, -1.234825849533081, 0.4023416340351105, -0.6848101019859314, -0.8707971572875977, -0.5788496732711792, -0.3115525245666504, 0.056165341287851334, -1.1651498079299927, 0.9008265137672424, 0.4656624495983124, -1.5362436771392822, 1.4882521629333496, 1.895889163017273, 1.1787796020507812, -0.1799248307943344, -1.0707526206970215, 1.0544517040252686, -0.4031769335269928, 1.222445011138916, 0.2082749754190445, 0.9766390323638916, 0.3563663959503174, 0.7065731883049011, 0.01050002034753561, 1.7858705520629883, 0.12691208720207214, 0.4019893705844879, 1.8831506967544556, -1.3477590084075928, -1.2704850435256958, 0.969396710395813, -1.1731233596801758, 1.9436211585998535, -0.4136189818382263, -0.747454822063446, 1.922942042350769, 1.4805147647857666, 1.8675589561462402, 0.9060446619987488, -0.8612256646156311, 1.910064935684204, -0.26800337433815, 0.8024563789367676, 0.9472519755363464, -0.15501008927822113, 0.6140793561935425, 0.922206699848175, 0.37642553448677063, -1.0994007587432861, 0.29823818802833557, 1.3263858556747437, -0.694567859172821, -0.14963454008102417, -0.4351535439491272, 1.8492637872695923, 0.6722947359085083, 0.40746182203292847, -0.7699160575866699, 0.5392491817474365, -0.6743326783180237, 0.0318305566906929, -0.6358460783958435, 0.676433265209198, 0.5765908360481262, -0.20829875767230988, 0.39600670337677, -1.0930615663528442, -1.4912575483322144, 0.43939170241355896, 0.16667349636554718, 0.6350314617156982, 2.3831448554992676, 0.9444794654846191, -0.9128222465515137, 1.117016315460205, -1.31590735912323, -0.46158459782600403, -0.06824160367250443, 1.7133426666259766, -0.7447548508644104, -0.8264385461807251, -0.09845252335071564, -0.6634783148765564, 1.1266359090805054, -1.0799314975738525, -1.1474686861038208, -0.43782004714012146, -0.49803245067596436, 1.9295320510864258, 0.9494208097457886, 0.08755124360322952, -1.225435495376587, 0.8443629741668701, -1.0002152919769287, -1.5447710752487183, 1.1880297660827637, 0.31694260239601135, 0.9208588004112244, 0.31872764229774475, 0.8568305969238281, -0.6510255932807922, -1.034242868423462, 0.6815944910049438, -0.8034096360206604, -0.6895498037338257, -0.4555324912071228, 0.01747915893793106, -0.3539939224720001, -1.3749512434005737, -0.6436184048652649, -2.223403215408325, 0.6252314448356628, -1.602057695388794, -1.1043833494186401, 0.05216507986187935, -0.73956298828125, 1.543014645576477, -1.2928569316864014, 0.2670508623123169, -0.039282817393541336, -1.1680934429168701, 0.523276686668396, -0.1715463250875473, 0.7717905640602112, 0.8235041499137878, 2.163235902786255, 1.336527943611145, -0.3691818416118622, -0.2393791824579239, 1.0996595621109009, 0.6552637219429016, 0.6401315331459045, -1.6169559955596924, -0.024326125159859657, -0.7380309104919434, 0.279924601316452, -0.09815038740634918, 0.9101788997650146, 0.31721821427345276, 0.7863279581069946, -0.4664191007614136, -0.9444462656974792, -0.410049706697464, -0.017020413652062416, 0.37915173172950745, 2.2593090534210205, -0.0422571524977684, -0.9559450149536133, -0.34598177671432495, -0.463595986366272, 0.4814814627170563, -1.5407969951629639, 0.06326199322938919, 0.15650653839111328, 0.23218104243278503, -0.5973160862922668, -0.23792172968387604, -1.4240609407424927, -0.49331986904144287, -0.5428614616394043, 0.4160500466823578, -1.1561824083328247, 0.7811980843544006, 1.494484543800354, -2.0699849128723145, 0.42625874280929565, 0.676908016204834, -0.6374370455741882, -0.3972718119621277, -0.1328805834054947, -0.29779088497161865, -0.3090129792690277, -1.6760038137435913, 1.1523315906524658, 1.0796185731887817, -0.8133642673492432, -1.4664243459701538, 0.5210648775100708, -0.5757879614830017, 0.14195317029953003, -0.3193284273147583, 0.6915387511253357, 0.694749116897583, -0.7255973815917969, -1.383363962173462, -1.5829384326934814, 0.6103793978691101, -1.188859224319458, -0.5068163275718689, -0.596314013004303, -0.05256729573011398, -1.9362797737121582, 0.1887785941362381, 0.523891031742096, 0.08842208981513977, -0.3108861744403839, 0.09740016609430313, 0.3990463316440582, -2.772592782974243, 1.9559123516082764, 0.3900933265686035, -0.6524085998535156, -0.3909533619880676, 0.4937417805194855, -0.11610393971204758, -2.030684471130371, 2.06449294090271, -0.11054065823554993, 1.0201727151870728, -0.6920498609542847, 1.5363770723342896, 0.28634369373321533, 0.6088438630104065, -1.0452533960342407, 1.211145281791687, 0.6898181438446045, 1.3018462657928467, -0.62808758020401, -0.48102712631225586, 2.3039166927337646, -1.0600157976150513, -0.13594970107078552, 1.1368913650512695, 0.09772496670484543, 0.582953691482544, -0.39944902062416077, 0.3700558841228485, -1.3065268993377686, 1.6581306457519531, -0.1181640475988388, -0.6801782250404358, 0.6663830876350403, -0.4607197940349579, -1.3342584371566772, -1.3467174768447876, 0.6937731504440308, -0.15957343578338623, -0.13370156288146973, 1.0777437686920166, -1.1268258094787598, -0.7306777238845825, -0.38487979769706726, 0.09435158967971802, -0.042171452194452286, -0.28688719868659973, -0.06162640079855919, -0.10730527341365814, -0.7196043729782104, -0.8129929900169373, 0.27451634407043457, -0.8909150958061218, -1.1573553085327148, -0.3122922480106354, -0.15766701102256775, 2.256723403930664, -0.7047002911567688, 0.9432607293128967, 0.7471883296966553, -1.188944935798645, 0.7732529640197754, -1.1838806867599487, -2.659172296524048, 0.6063195466995239, -1.7558906078338623, 0.4509344696998596, -0.684010922908783, 1.6595507860183716, 1.0685093402862549, -0.4533858001232147, -0.6878376007080078, -1.214077353477478, -0.4409226179122925, -0.2803554832935333, -0.3646935522556305, 0.1567038595676422, 0.5785214900970459, 0.3496544659137726, -0.7641439437866211, -1.4377914667129517, 1.3645318746566772, -0.6894491910934448, -0.6522936224937439, -0.5211893320083618, -1.8430695533752441, -0.477973997592926, -0.47965580224990845, 0.6203582882881165, 0.6984571218490601, 0.003770889015868306, 0.9318483471870422, 0.33996498584747314, -0.01568211242556572, 0.1609281748533249, -0.1906534880399704, -0.3948495090007782, -0.26773354411125183, -1.1280113458633423, 0.2804417014122009, -0.9931235909461975, 0.841631293296814, -0.24945858120918274, 0.04949498176574707, 0.49383679032325745, 0.6433144807815552, -1.5706233978271484, -0.20690368115901947, 0.8801789283752441, -1.698105812072754, 0.3872804641723633, -2.2555642127990723, -1.022506833076477, 0.03863055258989334, -1.6567151546478271, -0.9855107665061951, -1.4718350172042847, 1.6481349468231201, 0.16422775387763977, 0.5672903060913086, -0.22267509996891022, -0.353431761264801, -1.6164741516113281, -0.2918373644351959, -0.7614921927452087, 0.8579239249229431, 1.1411018371582031, 1.466578722000122, 0.8525519371032715, -0.5986539125442505, -1.1158969402313232, 0.7666631937026978, 0.35629281401634216, -1.768538475036621, 0.3554818034172058, 0.8145198225975037, 0.05892558768391609, -0.18505367636680603, -0.8076484799385071, -1.4465347528457642, 0.8002979755401611, -0.3091144561767578, -0.23346665501594543, 1.732721209526062, 0.6845011115074158, 0.37082499265670776, 0.14206179976463318, 1.519994854927063, 1.719589352607727, 0.9295051097869873, 0.5822246074676514, -2.0946030616760254, 0.12372191250324249, -0.13010695576667786, 0.09395322948694229, 0.9430460929870605, -2.7396771907806396, -0.5693120360374451, 0.26990434527397156, -0.4668455421924591, -1.4169061183929443, 0.8689634799957275, 0.276871919631958, -0.9711045622825623, 0.3148171901702881, 0.8215857148170471, 0.005292646121233702, 0.8005648255348206, 0.07826017588376999, -0.3952289819717407, -1.1594204902648926, -0.08593076467514038, 0.19429293274879456, 0.875832736492157, -0.1151074692606926, 0.4574156105518341, -0.9646120071411133, -0.782629132270813, -0.11038929969072342, -1.0546284914016724, 0.8202478289604187, 0.46313032507896423, 0.27909576892852783, 0.33890411257743835, 2.021043539047241, -0.46886420249938965, -2.2014412879943848, 0.19930019974708557, -0.05060354247689247, -0.5175190567970276, -0.9788298606872559, -0.43918952345848083, 0.18133842945098877, -0.5028166770935059, 2.4124536514282227, -0.9605043530464172, -0.793117344379425, -2.2886199951171875, 0.2514844238758087, -2.016406536102295, -0.5394546389579773, -0.27567052841186523, -0.709727942943573, 1.7388726472854614, 0.9943943619728088, 1.3191368579864502, -0.8824188113212585, 1.1285940408706665, 0.4960009455680847, 0.7714059352874756, 1.029438853263855, -0.9087632298469543, -0.4243176281452179, 0.8625960350036621, -2.6556191444396973, 1.5133280754089355, 0.5531320571899414, -0.045703962445259094, 0.2205076515674591, -1.0299352407455444, -0.3499433696269989, 1.1002843379974365, 1.2980220317840576, 2.6962239742279053, -0.07392466813325882, -0.6585529446601868, -0.5142339468002319, -1.0180418491363525, -0.07785475254058838, 0.38273242115974426, -0.03424227982759476, 1.0963468551635742, -0.23421579599380493, -0.3474506437778473, -0.5812684893608093, -1.6326345205307007, -1.5677677392959595, -1.1791579723358154, 1.3014280796051025, 0.8952602744102478, 1.3749641180038452, -1.3322116136550903, -1.9686247110366821, -0.6600562930107117, 0.17581894993782043, 0.49869027733802795, 1.0479722023010254, 0.2842796742916107, 1.7426687479019165, -0.22260567545890808, -0.9130792021751404, -1.6812182664871216, -0.8889713287353516, 0.2421179562807083, -0.8887202739715576, 0.9367424845695496, 1.4123276472091675, -2.369586944580078, 0.8640522956848145, -2.2396039962768555, 0.40149906277656555, 1.2248705625534058, 0.06485610455274582, -1.2796891927719116, -0.5854312181472778, -0.26164543628692627, -0.18224477767944336, -0.2028968334197998, -0.10988277941942215, 0.21348005533218384, -1.2085736989974976, -0.24201983213424683, 1.518261194229126, -0.3846454322338104, -0.4438360929489136, 1.0781973600387573, -2.5591845512390137, 1.1813786029815674, -0.6319037675857544, 0.1639285683631897, 0.09632135927677155, 0.9424681067466736, -0.26759475469589233, -0.6780257821083069, 1.2978458404541016, -2.3641738891601562, 0.020334182307124138, -1.3479254245758057, -0.7615733742713928, 2.011256694793701, -0.04459542781114578, 0.19506970047950745, -1.7815628051757812, -0.7290446758270264, 0.1965574026107788, 0.354757696390152, 0.616886556148529, 0.00862789899110794, 0.5270041823387146, 0.4537819027900696, -1.8297404050827026, 0.037005722522735596, 0.7679024338722229, 0.5898798108100891, -0.36385881900787354, -0.8056265115737915, -1.118311882019043, -0.13105401396751404, 1.1330798864364624, -1.9518041610717773, -0.6598917245864868, -1.1398024559020996, 0.7849575281143188, -0.554309606552124, -0.47063764929771423, -0.21694956719875336, 0.44539326429367065, -0.3923889994621277, -3.046143054962158, 0.5433118939399719, 0.43904295563697815, -0.2195410281419754, -1.0840365886688232, 0.35178011655807495, 0.37923553586006165, -0.47003287076950073, -0.2167314738035202, -0.9301565289497375, -0.1785890907049179, -1.550429344177246, 0.41731882095336914, -0.9443684816360474, 0.23810315132141113, -1.4059629440307617, -0.5900576710700989, -0.11048940569162369, -1.6606998443603516, 0.11514787375926971, -0.37914755940437317, -1.7423561811447144, -1.303242802619934, 0.605120062828064, 0.8955559730529785, -0.13190864026546478, 0.40476182103157043, 0.2238435596227646, 0.3296229839324951, 1.2859840393066406, -1.5069984197616577, 0.6764607429504395, -0.38200896978378296, -0.2242589294910431, -0.3022497296333313, -0.37514710426330566, -1.2261961698532104, 0.1833391934633255, 1.670943021774292, -0.05613302066922188, -0.0013850427931174636, -0.6872990131378174, -0.11747454851865768, 0.4661664366722107, -0.3702424466609955, -0.45380404591560364, 0.4032645523548126, -0.9180047512054443, 0.2524966299533844, 0.820321798324585, 1.3599485158920288, -0.09038200974464417, 1.367597222328186, 1.0344098806381226, -0.9962126612663269, -1.2179385423660278, -0.3049636483192444, 1.0289355516433716, -0.07228700816631317, -0.60065758228302, 1.5522432327270508, 0.2869044840335846, -2.320594310760498, 0.31716063618659973, 0.5200406312942505, 0.22560866177082062, 0.4497120976448059, -0.06727560609579086, -1.3183958530426025, -0.3707039952278137, -0.9456157684326172, -0.9327409267425537, -1.2630683183670044, 0.45248907804489136, 0.09789614379405975, -0.4481653571128845, -0.6493379473686218, -0.023423105478286743, 1.0791947841644287, -2.004215717315674, 0.3768765330314636, -0.5457119941711426, -1.8845858573913574, -1.9457030296325684, -0.9127835035324097, 0.219509556889534, 0.39306291937828064, -0.9389815926551819, 1.0170209407806396, 1.4229835271835327, 0.39608657360076904, -0.5914026498794556, 1.1244192123413086, 0.7553957104682922, 0.8674074411392212, -0.6564636826515198, -2.834554433822632, 2.116791009902954, -1.610878348350525, -0.03576807305216789, 2.3807454109191895, 0.33057674765586853, 0.9492464661598206, -1.502396583557129, -1.7776669263839722, -0.5327028036117554, 1.090749740600586, -0.34624946117401123, -0.7946363091468811, 0.1979672908782959, 1.081935167312622, -1.444940209388733, -1.2105430364608765, -0.788669228553772, 1.0946383476257324, 0.23482152819633484, 2.1321535110473633, 0.9364457130432129, -0.035095177590847015, 1.265077829360962, 0.2114970088005066, -0.7049213647842407, 0.6799748539924622, -0.6963266730308533, -0.29039710760116577, 1.3277827501296997, -0.10128148645162582, -0.8031414151191711, -0.46433767676353455, 1.021790623664856, -0.55254065990448, -0.3868708610534668, -0.5102927684783936, 0.18392549455165863, -0.3854897618293762, -1.601836085319519, -0.8871809244155884, -0.9327890276908875, 1.2433193922042847, 0.8126740455627441, 0.5872593522071838, -0.5053583383560181, -0.8157915472984314, -0.5075175762176514, -1.051880121231079, 2.4972004890441895, -2.245321750640869, 0.5640085339546204, -1.2845523357391357, -0.1043434888124466, -0.9880019426345825, -1.177628993988037, -1.1401963233947754, 1.7549861669540405, -0.13298842310905457, -0.7657021880149841, 0.5557869672775269, 0.010349314659833908, 0.7200337648391724, -1.8242566585540771, 0.3036039173603058, 0.7726948261260986, -1.6615983247756958, 0.44819527864456177, 1.6961815357208252, -0.014857703819870949, 0.8214059472084045, 0.670570433139801, -0.7075057029724121, 0.03976673632860184, -1.5669946670532227, -0.45130303502082825, 0.2656879723072052, 0.723100483417511, 0.024612125009298325, 0.7199837565422058, -1.1029062271118164, -0.10169727355241776, 0.01927938498556614, 1.8495912551879883, -0.21416665613651276, -0.4990166425704956, 0.021351223811507225, -0.9191134572029114, 0.1927538514137268, -0.3650552034378052, -1.7913275957107544, -0.05858655273914337, -0.317543089389801, -1.6324232816696167, -0.06713415682315826, 1.4893559217453003, 0.5213037729263306, 0.6119272112846375, -1.3414967060089111, 0.4768983721733093, 0.1484495848417282, 0.5290452241897583, 0.42262861132621765, -1.3597806692123413, -0.041400812566280365, -0.7578708529472351, -0.05008409544825554, -0.8974009156227112, 1.3124703168869019, -0.8589723706245422, -0.8989421725273132, 0.0745864063501358, -1.077099084854126, -0.4246633052825928, -0.8299645781517029, 1.4111720323562622, 0.7858038544654846, -0.05746951699256897, -0.39121705293655396, 0.9409176111221313, 0.40520408749580383, 0.4980524182319641, -0.026192236691713333, -1.688230037689209, -0.1124659851193428, -0.5324898958206177, 0.6450552940368652, 1.0118424892425537, -0.6579510569572449, 0.4683852195739746, 1.7358789443969727, -0.6677127480506897, 1.6819217205047607, -0.8525858521461487, 0.0229597557336092, -0.011145612224936485, 0.011498900130391121, -0.8376780152320862, -0.5911831259727478, -0.6677202582359314, 0.32696259021759033, 0.33003512024879456, 2.2259442806243896, 1.3709889650344849, -0.5098432302474976, 0.3248696029186249, 0.9971179962158203, 0.030601823702454567, -0.06964157521724701, 0.0515749417245388, 0.8672766089439392, -0.8483205437660217, -0.32566946744918823, 0.47043314576148987, 0.3114470839500427, 0.23958276212215424, -0.3698011636734009, 0.9725357890129089, 2.1338682174682617, 0.40641549229621887, -0.19317670166492462, 0.7557402849197388, -0.5391326546669006, -0.7496903538703918, 0.03280874714255333, -2.582796573638916, -1.1539503335952759, -0.3479618430137634, -1.3533889055252075, -1.0326430797576904, -0.43674832582473755, -1.642965316772461, -0.4060717821121216, -0.5352701544761658, 0.02540520764887333, 1.1541839838027954, 0.17250441014766693, 0.02106202207505703, 0.09945445507764816, 0.22739277780056, -1.0167386531829834, -0.11477532237768173, 0.30875125527381897, -1.3707599639892578, 0.8656529188156128, 1.081376075744629, -0.6313759684562683, -0.24133779108524323, -0.8781903386116028, 0.6993804574012756, -1.0612223148345947, -0.2224770039319992, -0.8589199185371399, 0.05095427855849266, -1.79422926902771, 1.326461672782898, -0.9646064043045044, 0.059894684702157974, -0.21252304315567017, -0.7621145248413086, -0.8877801299095154, 0.9363985657691956, -0.525640606880188, 0.2711701989173889, -0.8014968633651733, -0.6471814513206482, 0.4722471535205841, 0.9304084777832031, -0.17531640827655792, -1.421919822692871, 1.9979560375213623, -0.8565493226051331, -1.5415873527526855, 2.5944244861602783, -0.40403228998184204, -1.4617327451705933, -0.6834397912025452, 0.36754488945007324, 0.19031155109405518, -0.8517292141914368, 1.822723627090454, -0.5215796828269958, -1.184686541557312, 0.9606934189796448, 1.329062819480896, -0.8174930810928345, -1.401347279548645, 1.0304383039474487, -2.047323703765869, -1.2266216278076172, 0.9674461483955383, -0.05535254627466202, -0.2639373540878296, 0.3528166115283966, -0.15277442336082458, -1.2986867427825928, 1.2760753631591797, 1.3250139951705933, 0.20533256232738495, 0.04513401538133621, 2.3396248817443848, -0.2764328420162201, -0.2595769762992859, 0.36448124051094055, 1.471321940422058, 1.5927706956863403, -0.25857263803482056, 0.3083312511444092, -1.3780834674835205, -0.3119761049747467, -0.840290367603302, -1.0068317651748657, 1.6815767288208008, -0.7922866344451904, -0.5316058993339539, 0.3658487796783447, 1.2978252172470093, 0.4811151325702667, 2.759355068206787, -0.07466797530651093, 0.2587164342403412, 0.2756006717681885, 1.4350494146347046, 0.5072389245033264, -0.11622969806194305, -0.9474886059761047, 0.24444346129894257, 1.4013447761535645, -0.4103817939758301, 0.5289435982704163, 0.2461477816104889, 0.8635196685791016, -0.8047537207603455, 2.346647024154663, -1.2791610956192017, -0.36555108428001404, 0.9380925297737122, 0.29673317074775696, 0.8299861550331116, -0.49610233306884766, -0.07480498403310776, 0.012231983244419098, 1.5692596435546875, 0.6904290318489075, 0.7966721057891846, -0.657926082611084, 0.9688826203346252, 0.22558166086673737, 1.3891453742980957, 2.0140602588653564, -0.30676576495170593, -0.40630313754081726, -0.8640449643135071, -0.14357951283454895, -0.38202545046806335, 0.3595044016838074, -0.14456681907176971, -0.36159926652908325, 1.0645850896835327, -0.9378802180290222, 0.4331079423427582, -0.4059417247772217, 0.7243685126304626, 1.3852615356445312, -0.30309826135635376, 0.44103291630744934, 0.17879286408424377, -0.7994223833084106, 0.24078750610351562, 0.28912049531936646, 0.4128708243370056, -0.1983989030122757, 0.09419230371713638, -1.1476109027862549, -0.3581140637397766, 0.5559626817703247, 0.8924738764762878, -0.4223148226737976, 0.10471402853727341, 0.22805333137512207, 0.2014799416065216, 0.5407735705375671, -1.8180776834487915, -0.049324069172143936, 0.23903359472751617, -1.0003303289413452, 1.6739857196807861, 0.16155926883220673, 1.5634047985076904, -0.7905229926109314, -0.9073001146316528, 0.22425222396850586, -1.678688406944275, 0.2149655967950821, 0.09721922874450684, 1.0156652927398682, 0.7010413408279419, -0.4174773395061493, -1.0974966287612915, 1.7123051881790161, -0.7921150326728821, -1.0455245971679688, -1.0848560333251953, 1.1173052787780762, -0.5189002156257629, -0.7537044882774353, 0.13768982887268066, -0.20694470405578613, -0.6780954599380493, 0.7539914846420288, 1.0653154850006104, 0.9853175282478333, 0.7669196724891663, 0.40262553095817566, -1.7758879661560059, 1.6692508459091187, 0.30198919773101807, 0.6081564426422119, 1.1149623394012451, 1.4333524703979492, 0.41839802265167236, 0.4355461597442627, -0.5992242693901062, 0.03308974951505661, -0.854161262512207, -0.7199405431747437, -0.8935744166374207, -0.15602388978004456, 1.049093246459961, 3.1709747314453125, 0.189499631524086, -1.348413109779358, 1.2649832963943481, -0.3007838726043701, -0.6606085896492004, 0.20984947681427002, -1.2406245470046997, 0.22246316075325012, -0.088375523686409, 0.09837790578603745, 0.3814162611961365, 0.06749225407838821, 0.016338083893060684, 0.28431451320648193, 0.4154006242752075, -1.031482458114624, -1.4299912452697754, -0.06163805350661278, -1.4327354431152344, 0.08753146976232529, 0.9387468695640564, 0.6071116924285889, -1.0481704473495483, -0.8602624535560608, 0.3283012807369232, -0.40129780769348145, -0.31665530800819397, 0.5969064831733704, -0.9872866868972778, -0.4012347161769867, -0.8000825047492981, -1.0431294441223145, -0.8570781946182251, 0.6774621605873108, 0.05182038992643356, -0.8791606426239014, -0.2311016023159027, -1.6388072967529297, -0.7333127856254578, 2.1495745182037354, -0.09024384617805481, 0.731658935546875, -0.06548837572336197, 0.3481692373752594, 0.6632580757141113, -1.104616641998291, -0.030936257913708687, 1.5788651704788208, -0.7955005764961243, -0.5664398670196533, -0.3076912760734558, 0.2690240740776062, 0.5249178409576416, 1.267411708831787, 0.49949824810028076, -0.062053125351667404, 1.2591670751571655, 0.7041110396385193, -1.495679497718811, 2.5263681411743164, 1.7699214220046997, -0.16821421682834625, 0.3779101073741913, 1.3243587017059326, -0.17220079898834229, 0.7303518056869507, 1.1045784950256348, -1.0148259401321411, -0.6023318767547607, 0.9214084148406982, 0.4608144760131836, 0.923796534538269, -0.13256801664829254, -0.28900521993637085, -1.998639464378357, -1.1460003852844238, 0.0470660962164402, 0.8245572447776794, 0.53117835521698, -0.12824197113513947, -0.2717715799808502, 0.21717962622642517, 0.07821118086576462, 1.404545545578003, 0.1464407742023468, -1.481245994567871, -1.2725580930709839, 1.5187593698501587, -1.1711604595184326, 0.7644974589347839, -0.2683727443218231, -0.16975829005241394, -0.13413278758525848, 1.2213850021362305, -0.19284182786941528, -0.03331928327679634, -1.5308034420013428, 0.20669050514698029, 0.5310425162315369, 0.23914557695388794, 1.3978962898254395, 0.05517135560512543, 0.29897746443748474, 1.6485040187835693, -1.5500141382217407, -0.4558253586292267, 1.4261587858200073, 0.9361291527748108, 0.6783800721168518, 0.8326507210731506, 0.32706621289253235, 1.6315973997116089, 0.3777591586112976, 0.23986710608005524, 0.15895867347717285, 0.19286395609378815, -1.1570172309875488, 0.7706730365753174, -0.13043972849845886, 1.8219151496887207, -0.07565046846866608, 0.4209182858467102, 0.24660219252109528, -0.625557005405426, 0.9921368360519409, 1.9050636291503906, -0.014777219854295254, -0.3004787862300873, -0.3550287187099457, -1.8923618793487549, -0.17781314253807068, 0.2509981095790863, 1.0547579526901245, 0.960047721862793, -0.4164990782737732, -0.2768229842185974, 1.1239053010940552, -0.17346389591693878, -0.5100295543670654, 1.392518401145935, 1.0375856161117554, 0.018791791051626205, -0.5937774181365967, -2.011880397796631, 0.5897036194801331, -0.8963696956634521, -1.962731957435608, 1.5848205089569092, 0.6479678153991699, -1.1390081644058228, -1.214401364326477, 0.8709617853164673, -0.8779706358909607, 1.2961498498916626, 0.616459310054779, 0.5365965366363525, 0.40469545125961304, 0.19145087897777557, 0.8805112242698669, -0.45408037304878235, 0.08595197647809982, 0.7519465684890747, 0.5629897117614746, -1.1949868202209473, -0.5004096627235413, 0.2528035044670105, -0.408014714717865, 1.7746585607528687, -0.39315319061279297, -0.16221845149993896, 0.7694301605224609, 0.3305327296257019, -0.14527446031570435, -0.7564935088157654, 0.30151405930519104, 1.039096474647522, 0.4790952205657959, -0.7781835198402405, 1.7367749214172363, -1.4465779066085815, -1.5826855897903442, 0.960557222366333, 0.2258404791355133, -0.5494985580444336, -1.098570704460144, 2.3207998275756836, 0.1170908734202385, 0.5342011451721191, 0.3178851008415222, 0.4348079562187195, 0.5400944352149963, 0.7324240207672119, -0.37522241473197937, -0.2916419804096222, -1.7410228252410889, -0.7803044319152832, 0.2711127996444702, 1.0450233221054077, 0.5990395545959473, -0.34069234132766724, -1.2631728649139404, -2.7773592472076416, 1.1517339944839478, -0.5892289876937866, -0.4484650194644928, 0.13157397508621216, -1.40556001663208, -0.34978216886520386, 2.0234718322753906, 0.5053869485855103, 0.35924914479255676, -1.5824944972991943, 2.2436017990112305, -1.4227949380874634, 1.922324776649475, -2.115056037902832, 1.4053654670715332, 1.6180542707443237, -0.8244091272354126, 0.422580361366272, 0.547480583190918, -0.8137944936752319, -1.449117660522461, -1.3177173137664795, 0.5410082340240479, -0.08511560410261154, -0.5643010139465332, 0.9667680263519287, 0.5080679059028625, -0.7554627060890198, -1.2012015581130981, 0.5232617259025574, -0.5375833511352539, 0.09920486062765121, 1.5762989521026611, 0.5023282170295715, -0.862267017364502, 0.16066119074821472, -0.952644944190979, 1.6085221767425537, -0.5615787506103516, 0.20727074146270752, 0.30773258209228516, 0.15925046801567078, -1.958548903465271, -1.4464210271835327, -0.45235028862953186, 0.3194318413734436, -0.13777922093868256, -0.957147479057312, -1.3484243154525757, -0.4015575349330902, -0.4684760570526123, 0.5128364562988281, -0.3263184726238251, 0.6027076840400696, -0.5946497917175293, -0.2559576630592346, -0.3480463922023773, -0.7823669910430908, 0.6251186728477478, -0.8135960102081299, -0.5216414928436279, -0.0731196478009224, -1.2973796129226685, -0.3249349594116211, -0.7113063335418701, -0.38815417885780334, -0.05992800369858742, -0.7999136447906494, -0.220075786113739, 1.3086687326431274, -0.025798557326197624, 1.1452621221542358, 0.3464944362640381, 0.774160623550415, -0.7744589447975159, 0.10490716248750687, 0.13391292095184326, -0.6126257181167603, -0.8228283524513245, -1.4902653694152832, 1.496139645576477, -0.9724028706550598, 1.3462210893630981, -0.4674931764602661, -0.8624932765960693, 0.6225191354751587, -0.6311919689178467, 0.5684589147567749, -0.33281177282333374, 0.4804244935512543, -0.96818608045578, 0.8313510417938232, 0.4879726767539978, -0.919650673866272, 2.6429357528686523, 0.5401230454444885, 2.2904670238494873, 1.600267767906189, -0.1888347864151001, -0.41227176785469055, -0.40345919132232666, -1.8300285339355469, -0.6958351135253906, 0.24676603078842163, 1.5259575843811035, -0.7727718949317932, 0.8820565938949585, -1.2525933980941772, -0.5863200426101685, -0.4576405882835388, 0.3718110918998718, 0.45730963349342346, 0.9623417258262634, 0.7708369493484497, 0.24316821992397308, 0.39036494493484497, 1.5885306596755981, -0.5109261870384216, 0.7747282981872559, -1.808143973350525, 0.41133424639701843, -0.4832495450973511, 0.0025711823254823685, 1.040086269378662, 0.1646438091993332, 0.885187566280365, 1.4737647771835327, 0.38909396529197693, 1.1710410118103027, -0.32656097412109375, -0.00820988230407238, -0.5226194262504578, 1.0429775714874268, 0.4140913486480713, -0.5072344541549683, 0.15466883778572083, 1.041568398475647, -0.03926799073815346, -0.9489328265190125, 0.1319117546081543, -1.9805655479431152, 0.7687706351280212, -0.4213275909423828, -0.4693107306957245, 0.8756957054138184, -1.3651628494262695, 1.9470986127853394, -0.4802420437335968, -0.523250937461853, 1.0212247371673584, 0.7086952924728394, 2.4512298107147217, -0.21120598912239075, -0.1204066351056099, -1.479315996170044, -0.3321022689342499, -0.721431314945221, -0.4487670063972473, -1.7441877126693726, 1.6606075763702393, -1.416603446006775, -2.8022027015686035, -1.1884244680404663, -0.6038395762443542, -1.1495540142059326, 1.0983035564422607, -0.1378391832113266, 0.025385605171322823, 0.6103917360305786, 0.28601253032684326, 0.9785673022270203, -1.1094775199890137, -0.5475180745124817, 0.6659671664237976, -2.5345544815063477, -1.3751845359802246, 0.5009922385215759, -0.4802490472793579, 0.9361075758934021, 0.8091803193092346, -1.1980929374694824, 0.4066570997238159, 1.201697826385498, 0.14743439853191376, -0.9774648547172546, 0.8793899416923523, 0.6354245543479919, 0.542610764503479, 0.7159388661384583, -2.9946129322052, 0.8809375762939453, 1.8081318140029907, 0.4366384744644165, 0.19272899627685547, 0.6964386701583862, 0.33822548389434814, 0.6517812609672546, 0.0014710002578794956, -0.7667048573493958, -1.0043227672576904, -0.9981917142868042, -1.3730425834655762, -1.0677419900894165, 1.7612661123275757, 0.7540956735610962, -0.6250274181365967, -0.3903926908969879, 0.11255753040313721, -0.6555450558662415, 0.06751685589551926, 0.7776041626930237, -0.035742733627557755, 0.3360157310962677, 0.8864915370941162, -0.2721317708492279, 0.28479060530662537, -0.3093775808811188, -0.028528869152069092, -0.3247302770614624, -0.5288698673248291, 0.1737118512392044, 0.566545307636261, 0.1463044434785843, 0.4987269639968872, -0.7379317879676819, -1.2037352323532104, 0.4170435070991516, 0.6878814101219177, 0.04985726624727249, 1.3480358123779297, 0.9076988101005554, 2.6805708408355713, -0.20080851018428802, -0.9988487958908081, -0.7401368021965027, -0.5654978156089783, 0.4760313928127289, -2.1580686569213867, 1.3185510635375977, -0.2392965853214264, -0.24679355323314667, -1.0793431997299194, -0.11422555148601532, 0.013239767402410507, -0.12194492667913437, 0.3390592634677887, -0.5896320343017578, -0.8958157896995544, 0.5483281016349792, 0.0986674502491951, 0.19718106091022491, 1.0590271949768066, -1.02256441116333, -0.8552404642105103, 1.257219672203064, -1.482883334159851, -1.3094121217727661, 0.8178618550300598, 0.23820018768310547, 0.1052321344614029, -0.09165941178798676, 0.031267546117305756, -0.09211211651563644, 1.3554426431655884, -0.3981481194496155, -0.1613735407590866, 1.7944488525390625, 0.027509702369570732, 2.2320163249969482, -0.10497970134019852, 1.367414951324463, -1.655344009399414, 0.15364445745944977, -1.5844736099243164, 0.844454288482666, -1.2128678560256958, 0.28376954793930054, -0.2821958661079407, -1.1582032442092896, -1.6193599700927734, -0.511040449142456, 1.7406294345855713, -0.29348504543304443, 0.9172215461730957, -0.057042866945266724, 0.8767267465591431, -1.8269113302230835, -0.4031883180141449, 0.9494055509567261, -0.16325494647026062, -0.08645528554916382, -0.43046191334724426, 1.1493793725967407, 0.2975143492221832, 0.04402227699756622, 0.6430545449256897, 0.5882249474525452, 0.21258704364299774, 1.5470315217971802, -0.060287535190582275, 0.2780810594558716, -0.642952561378479, 0.1501152217388153, 1.5877615213394165, -0.6432576179504395, -1.1335928440093994, 0.9967596530914307, -0.1487661451101303, 0.09600420296192169, -0.045113302767276764, 0.07912172377109528, 0.8505306839942932, -0.8391242027282715, -1.0117740631103516, 0.08496813476085663, -1.6064397096633911, -1.3730535507202148, 1.8666831254959106, 0.7574683427810669, -0.010056471452116966, 1.2380069494247437, -1.0405992269515991, -0.3156031370162964, 0.6234536170959473, 0.8906716704368591, 0.5129168629646301, -2.541238784790039, -0.9680821299552917, 0.47706809639930725, -0.3559514880180359, 2.540231704711914, 0.9265583157539368, 0.558081865310669, -1.1169495582580566, -0.035296738147735596, 0.24120396375656128, 1.1277836561203003, 0.881131112575531, 1.0329891443252563, -0.923911988735199, 1.4121516942977905, -1.3804306983947754, -0.5359145402908325, 0.430771142244339, -0.14989158511161804, -1.0060368776321411, -0.8215498328208923, -1.548254370689392, 0.5319746136665344, 1.2605688571929932, -0.10039350390434265, -0.40034881234169006, -1.472322940826416, 0.9132019281387329, 2.2113044261932373, -1.7974557876586914, -1.0634329319000244, -0.679593026638031, -0.5643178820610046, 0.22734594345092773, 1.614249587059021, 1.0085972547531128, 0.5275973677635193, -0.723928689956665, -1.1196281909942627, -0.7967752814292908, 1.5480668544769287, -0.061743300408124924, -0.4468362629413605, -0.18375572562217712, 0.8246182203292847, -1.3128496408462524, 1.4148740768432617, 0.15647625923156738, -0.2163439840078354, 0.4428461194038391, 0.21839706599712372, -0.34419646859169006, -0.2527106702327728, -0.8688625693321228, 0.6563907265663147, -0.5319938063621521, -0.9562584161758423, 0.1658635288476944, 1.3291412591934204, -0.04834462329745293, -0.6081012487411499, 0.4038960337638855, 1.9367125034332275, -1.4519054889678955, 0.38220277428627014, 0.2050866186618805, 1.1615338325500488, 0.9909091591835022, -0.18670910596847534, -1.68451726436615, 0.8065637946128845, -0.8351926803588867, -0.9467403888702393, 1.1483505964279175, -0.9108504056930542, 1.402844786643982, 0.3358447253704071, 0.3191184103488922, 0.3072647750377655, -1.6384236812591553, -1.7763886451721191, 0.21555306017398834, 0.5680073499679565, 0.08261103183031082, -0.8215345144271851, 0.018922103568911552, -0.0820341557264328, -0.957158088684082, 1.0139721632003784, -1.730276107788086, 0.5887424349784851, 0.3843234181404114, 1.0097118616104126, -1.0053118467330933, 0.10140714794397354, 2.1711649894714355, 0.6620742678642273, 0.10058120638132095, 0.5391612648963928, 0.08617684245109558, 2.1908979415893555, 0.983636200428009, -0.08561495691537857, 0.2523314356803894, -0.39079800248146057, 1.2098500728607178, -1.4061048030853271, -1.604738473892212, 1.4587147235870361, 2.1531198024749756, 0.46830490231513977, 0.11273793876171112, 0.657267689704895, -0.6470535397529602, 0.1712435483932495, 0.0389087051153183, 0.6265642642974854, -1.557998538017273, -0.5070347785949707, 0.8449956178665161, -0.6755938529968262, -0.9933613538742065, 2.042072057723999, 0.03811800107359886, -0.5789181590080261, -1.6923704147338867, 0.7293463349342346, 0.6991361379623413, -0.2987596094608307, -1.102230191230774, -0.024549422785639763, -0.8358560800552368, -0.9420936107635498, -0.10321275144815445, -1.0513904094696045, 0.24664895236492157, 0.6079925298690796, -0.8396324515342712, -1.3682451248168945, 1.5612796545028687, -0.9402702450752258, -0.6599426865577698, 0.21301716566085815, 0.5993693470954895, -0.2563169002532959, 0.4607943296432495, -0.4009861648082733, -0.9711706638336182, 1.4263168573379517, 2.4884417057037354, 1.695969581604004, 0.14180663228034973, 1.8334354162216187, 0.3557035028934479, -0.47728627920150757, 0.4663795828819275, -0.09439250826835632, -0.9831181764602661, -0.8983219861984253, 0.8020517230033875, -1.8465319871902466, 0.6041367650032043, -1.6295835971832275, -2.1211764812469482, -1.8388465642929077, 1.966763973236084, -0.19623395800590515, 0.08658318221569061, 1.419255018234253, 0.9341797232627869, -1.391505241394043, 0.869006335735321, 0.18418125808238983, -0.34167808294296265, 0.024290913715958595, 1.279811978340149, -0.8859664797782898, 0.400885671377182, -0.009657236747443676, -1.7971645593643188, -0.8022531867027283, 0.193213552236557, 1.29734206199646, 1.0013309717178345, 0.5972124934196472, -0.8152756690979004, 1.8012139797210693, 0.2152404636144638, -1.0063655376434326, -0.18290497362613678, 0.8962484002113342, 0.007617498282343149, 0.8868646621704102, 1.103693962097168, 0.40053069591522217, -0.8577026128768921, 0.1354546695947647, 0.045165855437517166, 1.8593463897705078, -1.6263219118118286, -0.13482245802879333, -0.5840935707092285, 0.33510562777519226, -2.4375643730163574, 1.1149245500564575, 0.013748487457633018, -1.8447011709213257, -0.36111313104629517, 0.60896235704422, -1.5914478302001953, 0.003222216386348009, -1.0574736595153809, -0.5559850335121155, 0.026738382875919342, 0.18345025181770325, -0.47074249386787415, 0.2727963924407959, 0.8179776072502136, -0.27891427278518677, 1.4315677881240845, 1.4622141122817993, -0.42870205640792847, -0.6378405690193176, -1.6641730070114136, -0.12656933069229126, -0.3634377717971802, 0.7790512442588806, -1.5096615552902222, -0.2773914039134979, 0.9687443971633911, -0.7303571105003357, -0.7623615264892578, -1.446940302848816, 2.6205737590789795, -0.7474731802940369, -1.300346851348877, -0.8038504123687744, -0.7742950916290283, -0.2693897783756256, 0.8253722190856934, -0.2983231544494629, -0.9228233098983765, -1.451338529586792, 0.021857358515262604, 0.0425390750169754, 1.5309323072433472, 0.09244773536920547, -0.09900831431150436, -1.0506538152694702, -0.3059525787830353, -0.4384744465351105, -0.370164155960083, -0.9592553973197937, 0.5383296012878418, -0.1424454152584076, -0.2003534734249115, -1.7140461206436157, 0.4936440885066986, 0.48701533675193787, -0.8391293883323669, 0.9901213645935059, -1.3647582530975342, -0.021869909018278122, -0.271207332611084, -1.3171747922897339, 0.1897026151418686, 1.7025701999664307, 0.0676342323422432, -0.46302175521850586, 0.4470241665840149, 0.10571999847888947, 0.02776213176548481, -0.4255422055721283, 1.4219756126403809, 0.45636335015296936, -0.5286706686019897, -0.10800383985042572, -0.7408667206764221, -0.6082911491394043, -0.6407257318496704, -1.134311556816101, 0.7772769927978516, -0.29104146361351013, 0.55412757396698, -0.6701259016990662, -0.060362495481967926, -0.7110406160354614, 0.7196681499481201, -0.24841929972171783, -0.7308735847473145, -1.6417032480239868, 0.2756665349006653, -0.7083850502967834, -0.015779217705130577, -0.49173009395599365, 0.9541895985603333, 0.5441447496414185, 0.4472121000289917, -0.6161211133003235, 0.46629005670547485, 1.7148315906524658, -0.8321860432624817, 0.17233914136886597, -1.6492170095443726, 1.3985620737075806, -0.39791208505630493, 0.7825788855552673, -1.7232282161712646, 1.7975393533706665, -0.35687151551246643, 0.5456573367118835, 0.15081819891929626, -0.25547078251838684, 1.685792326927185, -1.6480462551116943, 0.29871365427970886, 0.9106456637382507, -0.02985612116754055, -0.11817078292369843, -0.14268770813941956, -1.227636456489563, 0.03812738507986069, 0.5127175450325012, 0.06859922409057617, -0.2722761034965515, -0.4897250235080719, -0.2792966663837433, 1.2577441930770874, -2.086634874343872, 0.040071457624435425, -0.3277549147605896, 1.4558079242706299, 0.05549222603440285, 1.484925627708435, -2.123889923095703, 0.45958489179611206, 0.2800578474998474, 1.3905339241027832, -1.6413486003875732, -0.1550358086824417, 0.06606025993824005, -0.49579548835754395, 1.2165777683258057, -0.3386821746826172, 2.0347626209259033, 1.0541778802871704, 0.9508336782455444, 0.5592989921569824, -1.0636955499649048, -0.4310963451862335, 0.5727513432502747, 0.6775570511817932, 1.307183861732483, -0.46744102239608765, -0.8601533770561218, 0.8591042160987854, -0.809626579284668, 0.8733118176460266, 1.1997361183166504, 0.4561530351638794, -0.3575790226459503, 0.0410822257399559, 0.5934659242630005, 0.01018551830202341, 2.198296308517456, -0.990670919418335, -1.0026686191558838, -0.9768953919410706, -0.5895799398422241, -2.178931474685669, -0.6296504139900208, -0.6532847285270691, 0.07851402461528778, 0.41780057549476624, -1.2402163743972778, 0.9000542163848877, 1.8022422790527344, -0.2082851082086563, 1.5743712186813354, 0.19898949563503265, 1.988731861114502, 1.1172834634780884, -1.5639046430587769, 0.01862736977636814, 1.054324984550476, 0.030546581372618675, -0.036883529275655746, 1.26976478099823, -0.7098541855812073, 0.01751561276614666, 0.323625773191452, -0.33379095792770386, -0.02012910321354866, 0.7750232815742493, 0.4328376352787018, -0.8087175488471985, -1.1041239500045776, -0.7891021966934204, 0.0012484558392316103, -0.15993978083133698, -0.8319575190544128, -0.5981504321098328, -1.5200393199920654, 0.4178537130355835, -0.040018726140260696, -1.2597873210906982, 0.028620503842830658, 1.3426220417022705, -0.7399358749389648, 1.3151376247406006, -0.3234574794769287, 0.19782817363739014, 0.09775080531835556, 1.401523470878601, 0.15843383967876434, -1.1419013738632202, -1.310970425605774, -1.5329210758209229, -1.7119702100753784, 0.046135060489177704, -0.9583745002746582, -0.08081161230802536, -0.7038590312004089, -0.770784318447113, -0.4808453321456909, 0.7035855650901794, 0.9291451573371887, 0.37117254734039307, -0.9898225665092468, 0.6436312794685364, 0.688896656036377, 0.27464720606803894, -0.6036204099655151, 0.7088595628738403, 0.4228185713291168, -3.116856575012207, 0.6444520354270935, -1.9137426614761353, 0.6635615825653076, -0.15407240390777588, 1.1936116218566895, -0.09816121309995651, -0.8866142630577087, -0.1473536640405655, 1.0598063468933105, 0.02624661847949028, -0.11433515697717667, 0.7435535192489624, 0.2103593647480011, -0.005927405785769224, 1.3660600185394287, 1.5551140308380127, 0.6133262515068054, -0.2859591543674469, 1.4969110488891602, 1.183119535446167, 0.7188971638679504, -1.2160766124725342, 0.14067190885543823, -0.7436721920967102, -0.15901225805282593, 0.24005693197250366, 0.1001594066619873, -0.4751751124858856, 1.272953748703003, -1.6961312294006348, 0.7301835417747498, -1.8574832677841187, 0.3825981318950653, -0.8869042992591858, 0.8783037662506104, 0.08645252138376236, 0.24770638346672058, -1.0182793140411377, -0.6545701622962952, 0.20721739530563354, 0.5835699439048767, 2.929096221923828, 0.22285832464694977, 0.9760375022888184, -1.556933879852295, -1.3298919200897217, -0.35549476742744446, -1.197427749633789, 1.4863992929458618, -0.4102186858654022, 1.3821818828582764, 1.486782431602478, 0.042779721319675446, 0.5017997622489929, -0.05609947443008423, 0.538437008857727, 0.48334184288978577, -0.12364962697029114, 0.5049699544906616, 1.723696231842041, 0.7130162119865417, 0.3257996141910553, 0.12476952373981476, -1.0126731395721436, -1.0272969007492065, 0.3233565390110016, -1.3693910837173462, -0.7663276195526123, 1.2815113067626953, 1.9142297506332397, -1.6659560203552246, 1.6266496181488037, -0.21143829822540283, -0.015005087479948997, -0.11341162770986557, 1.080544114112854, -1.60767662525177, 0.456163614988327, -0.9448701739311218, 0.5707885026931763, 1.5427963733673096, -0.0004173264023847878, 0.37415507435798645, 0.4095517694950104, -0.7995935082435608, 1.5116393566131592, 1.7064682245254517, 0.7017833590507507, 0.07328543066978455, -0.46189382672309875, -0.6264902353286743, 1.7108365297317505, 1.4144150018692017, -0.06366148591041565, -1.5799305438995361, -2.8320119380950928, -1.0834267139434814, -0.13062039017677307, 1.4006890058517456, -0.6516562104225159, 0.5048154592514038, 1.3031809329986572, 0.12853631377220154, -0.14244787395000458, -1.3087635040283203, -1.2024753093719482, 0.4160996377468109, -0.20090752840042114, 0.12253131717443466, -0.04727771505713463, 0.6641440391540527, -0.7846873998641968, -0.33558064699172974, 1.8961821794509888, -0.7997861504554749, -0.28157544136047363, -0.5893867015838623, 0.4447813630104065, 1.0223922729492188, -0.4982116222381592, -0.43141433596611023, -0.27898159623146057, 0.5298337936401367, -0.7393953204154968, -0.37595996260643005, -2.3721938133239746, -1.3817449808120728, -0.11244375258684158, 0.8978641629219055, 0.29507577419281006, -1.0987684726715088, -1.4002561569213867, 0.17468009889125824, -1.652803659439087, 1.0659267902374268, 0.06389619410037994, -1.6073201894760132, -0.9659538865089417, -0.7243112921714783, -0.7731925249099731, -1.4899330139160156, -0.8746625185012817, -0.6844015717506409, -0.7112857699394226, 1.1279566287994385, 0.10482780635356903, -0.9932572245597839, -0.3346216082572937, -0.8795570731163025, -0.3000066578388214, 0.8755091428756714, 0.25227078795433044, 2.2856011390686035, 0.3759274184703827, -0.9135944843292236, 0.8097407221794128, 1.0799312591552734, 1.0941669940948486, -1.0942409038543701, -0.14763741195201874, 1.1318119764328003, -1.684728980064392, -0.4994167685508728, -1.4269376993179321, -0.932570219039917, -1.0124571323394775, 1.2505698204040527, -0.2345380336046219, -0.8633555769920349, -1.035605788230896, 0.1416671723127365, -0.011135627515614033, 1.3440743684768677, 0.5000166893005371, -1.431797742843628, -0.6289806962013245, 1.0700725317001343, -0.6210827231407166, 1.734572172164917, -1.0982894897460938, 0.5726133584976196, -0.8612155318260193, -0.5095951557159424, 1.0985816717147827, -0.12706716358661652, 0.8134522438049316, 0.4732905924320221, 0.753865659236908, -0.8881881833076477, -0.22157439589500427, 0.42425262928009033, -0.8490728735923767, 1.6295000314712524, -0.777228057384491, -0.3000035881996155, -1.0065590143203735, -2.143308162689209, 1.796918511390686, -0.204338937997818, -0.44791483879089355, -0.19871506094932556, 1.4198639392852783, -0.9651066064834595, 0.6795678734779358, -0.42378824949264526, -0.5966708660125732, 0.5670582056045532, 0.9882405996322632, -0.5139029622077942, -0.7688491344451904, -1.169095754623413, 1.1035038232803345, -0.5752559900283813, -1.8491307497024536, 1.409952163696289, -1.3698594570159912, 0.7794605493545532, 0.18342864513397217, 0.28791543841362, -0.584375262260437, 0.36559146642684937, -1.6677799224853516, 0.5880377292633057, 1.5570100545883179, 0.8840271830558777, -2.0195400714874268, -0.9842090010643005, -0.18779492378234863, 0.4869373142719269, -0.10665267705917358, -0.4932143986225128, 0.5953003168106079, 1.1641517877578735, -0.2322940081357956, 0.728929877281189, -2.5790507793426514, -0.9375093579292297, -0.32125893235206604, -0.48856621980667114, 0.33279821276664734, 1.0137505531311035, 0.5066690444946289, -0.6222254633903503, -1.5227681398391724, 0.556964099407196, -1.8381767272949219, 0.6530373096466064, -0.18844908475875854, -1.1758350133895874, 0.2872573137283325, -0.00287610269151628, -0.03659729287028313, -0.08422330021858215, 0.41952410340309143, 0.9244340062141418, 0.4966152012348175, 1.012133240699768, -0.04413972049951553, 1.6184593439102173, 0.5711098313331604, -0.543694019317627, -1.0938950777053833, 0.20579680800437927, -1.3065215349197388, -0.9733759760856628, 0.2390870749950409, -0.6078874468803406, -0.9333162307739258, -0.03447504714131355, 0.07267789542675018, -0.2058340311050415, -0.37754690647125244, 0.8546427488327026, 0.3424273431301117, -0.22342611849308014, 2.4643218517303467, 0.19383174180984497, 1.1320050954818726, -0.5609809756278992, -1.3629409074783325, -0.7917565107345581, -0.2680097818374634, -0.4966081976890564, 1.3363862037658691, -0.120041124522686, 0.4614688754081726, -0.04648115485906601, -0.4335543215274811, 0.03799601271748543, 1.7140514850616455, -0.767948567867279, 0.7669904232025146, -1.0260072946548462, -0.4596264362335205, 0.0035832058638334274, 0.3263750970363617, 1.4831286668777466, -0.05008264258503914, -0.8436155915260315, 0.6500419974327087, -0.36416980624198914, 0.23868156969547272, -0.11622244119644165, -1.9434568881988525, 0.5082991719245911, 0.5833680033683777, 0.9266047477722168, 1.8004627227783203, -1.1951037645339966, 0.5165074467658997, 0.409294992685318, -0.41908198595046997, 0.39710623025894165, 0.49964696168899536, -1.2186838388442993, 0.24622276425361633, -0.9179843068122864, -0.6518564820289612, -1.7747448682785034, -0.47336092591285706, -0.2035706788301468, 0.5498568415641785, 0.0008999266428872943, -1.5422881841659546, 0.8621480464935303, -0.11858662217855453, 0.4883705973625183, 0.9659361243247986, 1.4226047992706299, 1.9612269401550293, -0.07223875820636749, 0.31112444400787354, -1.0783610343933105, 1.0616002082824707, -1.184887409210205, -1.8052517175674438, 0.8303859829902649, -0.5216965079307556, 0.777607262134552, 0.40807464718818665, -1.6300026178359985, -2.719679355621338, -1.0966017246246338, 0.016491487622261047, -1.2217763662338257, -0.6527614593505859, -1.4589407444000244, 0.16987796127796173, 0.09082593023777008, -0.48139262199401855, 1.397065281867981, 1.4977149963378906, 0.5652672052383423, -1.7997711896896362, -1.1046901941299438, 0.40713033080101013, -0.628557562828064, -0.48709142208099365, 0.8989673852920532, 0.5108748078346252, 1.3141543865203857, -0.42920929193496704, 1.3752254247665405, -0.554131269454956, 1.4994914531707764, 0.10583464056253433, -0.8605097532272339, -1.631219506263733, -0.3014723062515259, -0.25623270869255066, 0.8576619029045105, -0.11059050261974335, -0.4324319660663605, 1.0770374536514282, -0.22482655942440033, -0.5762417912483215, 0.5746089220046997, -0.4898282289505005, 0.6588021516799927, -0.5969170928001404, -0.22295917570590973, 0.15217697620391846, -0.3741263151168823, -0.013451469130814075, 0.8154719471931458, 0.41060179471969604, 0.4809698462486267, -0.6354304552078247, 0.8528297543525696, 0.6695623397827148, 1.004419207572937, -0.7263658046722412, -0.17245860397815704, 0.6335338950157166, -0.6088151335716248, -0.22612246870994568, 1.925805687904358, 1.95176100730896, 1.2399405241012573, 0.9385851621627808, -1.0192511081695557, 0.5125622153282166, -0.3591165840625763, -1.0585719347000122, -0.5090058445930481, 0.11566507071256638, -0.547355592250824, -0.5507994294166565, 0.7920414805412292, 0.14410649240016937, 0.23345808684825897, 0.11187239736318588, -0.6757031679153442, -1.3705719709396362, 0.31056469678878784, -0.5070366263389587, -2.010782241821289, -0.3925672471523285, -1.0922179222106934, 0.6986502408981323, 0.5216252207756042, 0.49689313769340515, -0.6650416254997253, 0.7315515875816345, 0.3196497857570648, -0.409854531288147, -0.4533374309539795, 0.8927081823348999, -0.4736040532588959, 0.3036564588546753, 1.0339570045471191, 1.909342646598816, 1.6638730764389038, 0.9008227586746216, -1.5059113502502441, -0.6890484094619751, -0.5480871796607971, 1.6531498432159424, -0.6993179321289062, 0.38616636395454407, 0.10086706280708313, -0.9351271986961365, 0.3818240165710449, 0.3982960879802704, -1.2557748556137085, 1.2228775024414062, -2.086509943008423, -0.5907571315765381, 0.9719703197479248, -1.1932578086853027, 0.3502659201622009, -1.2963603734970093, -0.09302414208650589, -2.3137731552124023, -0.8425716757774353, -1.5429214239120483, -0.4017637372016907, -0.4152314066886902, -0.6736641526222229, 0.7979131937026978, -0.8868796229362488, 0.6343866586685181, 1.6292757987976074, 0.13906414806842804, -0.8576701879501343, -1.2493385076522827, -0.7097851037979126, 0.7046427130699158, 0.1555907279253006, 0.9367952346801758, 0.7703309059143066, 0.14081065356731415, 0.4734882712364197, 1.8552461862564087, 1.4156562089920044, -0.3027460277080536, 0.9896794557571411, 0.5858508348464966, 1.1363880634307861, 0.6716165542602539, -0.9741674065589905, -1.6196845769882202, 0.5726270079612732, 1.902618169784546, -0.7756640911102295, -0.1880897432565689, -1.035747766494751, 1.1778295040130615, -2.3051669597625732, -2.263660192489624, 0.375019907951355, -0.08234364539384842, -0.479623019695282, -0.30109480023384094, 0.5369879007339478, -0.41380399465560913, -1.0969250202178955, -0.9273629188537598, 0.8883388638496399, -0.5247419476509094, -1.3852776288986206, 0.10217832773923874, 0.5049947500228882, 1.3289607763290405, 0.21790339052677155, -0.6597112417221069, 0.47400787472724915, 0.7271748781204224, -0.0389053076505661, -0.044599391520023346, 0.26013290882110596, -0.06985649466514587, 0.25011390447616577, -1.0219132900238037, -1.1504377126693726, -0.8361113667488098, 0.6422109603881836, 0.2587975561618805, 1.0402389764785767, -0.18669092655181885, -1.1436413526535034, 1.144553542137146, -0.01876705512404442, 1.2834550142288208, 0.5979464650154114, 2.1886186599731445, -0.21977297961711884, 0.900723934173584, 0.8913640975952148, -0.5551263689994812, -0.17248231172561646, -1.4617383480072021, -1.5487961769104004, 0.12656879425048828, 0.7930070757865906, 0.6380240321159363, 0.34002459049224854, 0.8630171418190002, -0.5896977782249451, -0.27253276109695435, 0.7375215291976929, 0.4331187307834625, -0.2101888209581375, 1.3207943439483643, -1.2920012474060059, -0.5186786651611328, -0.28339776396751404, 0.8165348768234253, 0.0023851979058235884, -1.2614917755126953, 0.5140041708946228, 1.0875463485717773, 0.7393045425415039, 0.6191549301147461, -1.874313473701477, -0.8998864889144897, 0.4820806086063385, -0.05488818511366844, 0.5225576162338257, -1.2663426399230957, -0.06149476394057274, -1.3897809982299805, -1.9536786079406738, 0.2957790791988373, 0.8425887823104858, 0.24561642110347748, -0.03299647942185402, -1.5620143413543701, 1.0061070919036865, -0.044044896960258484, 1.959562063217163, 0.9423143267631531, -2.0051255226135254, 0.7550497055053711, -1.3965352773666382, -0.7594954967498779, -0.2507566809654236, -0.0940624475479126, 0.39756521582603455, -1.0228550434112549, -1.1506919860839844, 0.6006051898002625, -0.013250268064439297, 0.17437304556369781, -2.193683385848999, -0.17713738977909088, -0.8907291889190674, -0.9206264019012451, 0.9219347834587097, -1.0956711769104004, -1.092896580696106, -0.3310106098651886, 0.4502888321876526, -0.8840147256851196, 1.2341440916061401, 1.4498475790023804, -0.8814470767974854, -0.24508175253868103, -0.7786754965782166, -1.6853821277618408, 0.30301105976104736, 0.7335948944091797, 2.011864185333252, -0.8974094986915588, 1.3362350463867188, 1.3423537015914917, 0.19785331189632416, 0.6021634936332703, 0.8732730746269226, 1.9740999937057495, 0.47780856490135193, -0.06013788655400276, -0.8661687970161438, 0.30532076954841614, 1.0241649150848389, 0.24461035430431366, -0.7799232602119446, 0.0890762060880661, -0.12915347516536713, 0.2647387683391571, -1.6618484258651733, 0.5507886409759521, 0.59542316198349, 0.44485342502593994, -0.003762817243114114, -1.8059362173080444, -0.019322792068123817, 1.0607149600982666, -0.8601288795471191, -1.989269495010376, -1.5405579805374146, 0.3140257000923157, 0.37287601828575134, 0.8862931728363037, -0.05525899678468704, -1.5003284215927124, -0.8185041546821594, 0.8188393712043762, 0.1404959112405777, 0.649829626083374, 0.4347887933254242, -0.20496055483818054, -0.17400683462619781, 1.8571022748947144, 0.4146742522716522, -0.128587543964386, 0.45541998744010925, 0.22290581464767456, -2.1573562622070312, 0.6500844955444336, 1.820939302444458, -0.7802798748016357, 1.454035758972168, -0.25686970353126526, 0.29347139596939087, 1.0703600645065308, -0.7200014591217041, 1.2424938678741455, -1.2142173051834106, -0.8751547336578369, -0.5935203433036804, 0.6620053648948669, -0.34087440371513367, -1.5199744701385498, -0.2165328711271286, -0.7842214107513428, 0.7312936186790466, -0.343235045671463, 0.07077407836914062, -0.40547245740890503, 0.43393898010253906, -0.18359076976776123, 0.3251987099647522, -2.593388557434082, 0.09725087881088257, 0.41391366720199585, -0.1992800533771515, 0.669392466545105, 0.7386070489883423, 1.3042138814926147, 0.10481160879135132, -1.9138007164001465, -2.285499334335327, -1.6018409729003906, -0.037907060235738754, -0.1573052853345871, 0.2762398421764374, -0.6252459287643433, -0.7364911437034607, 0.5550479292869568, 0.6559244394302368, -0.2566501498222351, -0.03847665712237358, 0.4043143391609192, 0.504343569278717, -1.1439807415008545, -0.7195738554000854, -1.230545997619629, -0.5069066286087036, 0.8123335838317871, 0.5462718605995178, -1.0980979204177856, 0.5122667551040649, 0.08584310859441757, -0.4939267039299011, -1.4064596891403198, -0.17482337355613708, 0.6799439787864685, -2.163097620010376, -0.3961232006549835, 2.2542836666107178, 0.6726367473602295, 0.259832501411438, -0.7371851801872253, -0.6783298254013062, -0.08328839391469955, 1.6028636693954468, 0.4655891954898834, -0.872158408164978, 1.17678701877594, -0.29259419441223145, 1.6973464488983154, -0.5666030049324036, -1.0032657384872437, 0.1746295839548111, 0.9823269844055176, 1.037444829940796, 0.1591917723417282, -0.9880967140197754, -0.5053406953811646, -2.018281936645508, -0.9131215214729309, -0.17845681309700012, 0.38900214433670044, -0.33945432305336, -0.05697905644774437, -0.3961854577064514, 0.7510253190994263, -0.8991129398345947, 0.8375478982925415, 1.9608807563781738, 0.4727896451950073, -0.5270916223526001, -0.5362701416015625, 1.2098371982574463, -1.1265894174575806, -0.9538044333457947, -1.1644484996795654, -1.278513789176941, -1.0448163747787476, 0.7899049520492554, 1.1022825241088867, -0.6970731019973755, 0.20733404159545898, 0.7591567039489746, 0.10056420415639877, -0.9549427628517151, -1.4704017639160156, 1.0104275941848755, 0.49617940187454224, 0.5769559144973755, -1.1076469421386719, 0.23497718572616577, 0.6289995908737183, 0.3140338361263275, -0.7450231909751892, 1.0122605562210083, -1.5276319980621338, 0.9287419319152832, 1.081055998802185, 1.572330355644226, -0.3424921929836273, -0.9994300007820129, 0.7938803434371948, -0.699215292930603, 0.043995510786771774, -0.3174622058868408, -0.9020719528198242, 0.32099947333335876, -1.3920159339904785, 0.5922057032585144, -0.9669311046600342, -1.7317312955856323, -0.05010746046900749, 0.431633859872818, 0.5769345760345459, 0.8183537125587463, -2.35364031791687, -1.005144476890564, 0.10665229707956314, 1.5190032720565796, 0.7837445139884949, 1.9013400077819824, -0.5249394178390503, 0.274416983127594, -1.099970817565918, -0.40435221791267395, -0.7352957129478455, -0.6339886784553528, -0.3934491276741028, 0.0027175399009138346, 0.022212663665413857, 0.5434534549713135, 0.1399884670972824, -0.34404563903808594, -0.5225785374641418, -0.30713170766830444, -0.4490371346473694, 0.49097105860710144, 0.8655251860618591, 1.2740445137023926, -0.7977027893066406, 0.4693722128868103, -1.3946796655654907, 0.3731747269630432, 1.0826722383499146, -0.14958950877189636, 1.0726360082626343, -1.1385679244995117, -0.8886452913284302, -0.13580983877182007, 1.0222103595733643, -0.41742944717407227, -0.45355311036109924, -0.9916283488273621, 0.20288103818893433, 1.2466951608657837, 0.700680136680603, 0.6966506838798523, -0.20697447657585144, -0.563309371471405, 0.6772459149360657, -0.03191107511520386, -0.1736082285642624, 0.8982406258583069, -0.19778744876384735, -0.837776243686676, 0.9091885089874268, 0.08071988821029663, -1.0370293855667114, -1.1129058599472046, 0.09541187435388565, 2.337409734725952, -0.3928205966949463, -0.33627384901046753, 1.5237711668014526, -0.05728119984269142, -1.4484668970108032, -1.5727964639663696, 1.2266639471054077, 0.6663545370101929, 0.8261256814002991, -0.05775655806064606, -0.7267120480537415, -0.2171631157398224, 0.13603121042251587, -0.8383111357688904, 0.5614498853683472, -1.2595961093902588, -0.33275875449180603, -0.20400787889957428, -0.6910198330879211, -2.20550537109375, 0.4478696584701538, -0.7557507753372192, 1.3257079124450684, -0.34198227524757385, -0.5413596034049988, 0.09152194857597351, 1.053439736366272, -0.5634076595306396, 1.0147377252578735, 1.4403036832809448, 0.9903228282928467, 1.6264314651489258, 1.292646050453186, 1.5148823261260986, 1.6043263673782349, 0.20806953310966492, -0.429223895072937, -2.2622437477111816, -1.3227331638336182, -0.44828280806541443, -0.38173508644104004, -0.1527944654226303, -1.0007604360580444, -1.5957776308059692, -0.13022316992282867, -0.18941792845726013, -0.8075540661811829, -0.7421521544456482, -0.9401565790176392, -0.39652374386787415, -0.856302797794342, 1.2598752975463867, 0.24099673330783844, -0.9723179340362549, -0.280447781085968, -1.1802855730056763, 1.012168288230896, 1.3841867446899414, 1.2520020008087158, -1.1446926593780518, -0.09126701951026917, -0.4015706777572632, 0.5620130896568298, -1.0079097747802734, -0.6758916974067688, -0.41321703791618347, 0.15328846871852875, 0.694128692150116, -0.32872769236564636, 0.6639650464057922, 0.8220763802528381, -0.21321523189544678, -1.2456581592559814, -1.1711903810501099, 0.5917269587516785, -0.476224422454834, -1.7126293182373047, 0.6129523515701294, 0.12955452501773834, -1.405967116355896, 1.179419994354248, 0.8366360068321228, 0.1387452483177185, -1.2743194103240967, -1.4023305177688599, -0.30706849694252014, -1.7139153480529785, 0.40508025884628296, -1.4108233451843262, 0.16491273045539856, -0.288131445646286, 0.7117852568626404, -0.9379475712776184, 0.27372944355010986, -1.3948402404785156, 0.7955495715141296, -0.11496176570653915, 0.49585068225860596, -1.3205252885818481, 0.4990842640399933, 0.3062033951282501, 0.36369788646698, 0.3126339614391327, -0.19346387684345245, 1.2412992715835571, -0.15589798986911774, -0.739169180393219, -0.05872619152069092, -0.9505179524421692, -0.46399641036987305, -0.17724661529064178, -0.3795541226863861, 0.19939707219600677, 1.9457614421844482, 0.5709498524665833, 1.072300672531128, -0.5037094354629517, -0.5870162844657898, -0.37817806005477905, 0.8528891205787659, -2.148118495941162, -1.0331647396087646, 0.1023358479142189, -0.22409236431121826, 1.9677296876907349, 0.4476832151412964, -0.6621914505958557, -1.5776070356369019, -0.34056004881858826, -1.3032200336456299, 0.4667506515979767, 0.16110631823539734, 0.32003194093704224, 2.079176664352417, -0.9074659943580627, -0.19240421056747437, -1.2125157117843628, -0.08059851825237274, 1.593273639678955, 0.5687224268913269, -0.11448704451322556, 0.2516302466392517, -1.2108556032180786, -0.3937337100505829, 0.08525257557630539, 0.09942198544740677, -1.530616283416748, 0.327623188495636, 0.27919650077819824, -0.3770512044429779, 0.004174998961389065, -1.4834915399551392, -1.4797955751419067, 0.13468725979328156, -0.6677231788635254, -0.011555519886314869, 0.8394906520843506, -0.17392992973327637, -2.8106679916381836, -0.1506536453962326, -0.4810440242290497, -0.23469436168670654, 0.8997308015823364, -1.578530192375183, 0.24395662546157837, 1.5703039169311523, -0.625943124294281, 0.4723278880119324, 0.9663057923316956, 0.21023143827915192, -0.6850969791412354, -0.7095209956169128, 0.743800163269043, 0.5921490788459778, -0.7864683866500854, -1.1764731407165527, -1.2808066606521606, 1.661651849746704, -0.06794512271881104, 2.3602285385131836, 0.5555456280708313, 0.43952232599258423, 0.3062724769115448, 0.9991498589515686, -0.9660632014274597, 2.160013198852539, -0.10030170530080795, -0.7034000754356384, 0.3025610148906708, 1.0923389196395874, -1.0075548887252808, 0.5668693780899048, -0.7164441347122192, -0.5062735080718994, -0.48948243260383606, 0.7635414600372314, -1.1090726852416992, 0.19261610507965088, -0.34341785311698914, -0.847210168838501, -1.2135236263275146, -1.2028883695602417, -1.633795976638794, 0.8961672186851501, -0.24165315926074982, 0.1586519330739975, 1.1781893968582153, -1.220117211341858, -0.9415456652641296, 0.25471553206443787],
5
  "ceil_mode_partial_windows_input_x": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16],
@@ -23,7 +22,7 @@
23
  {
24
  "name": "f32_positive_subnormal_beats_zero_2d_gpu_gap",
25
  "provenance": {
26
- "notes": "2D companion for subnormal ordering: the positive subnormal should survive the max comparison against zeros."
27
  },
28
  "attrs": { "kernel_shape": [2, 2] },
29
  "inputs": {
@@ -172,7 +171,7 @@
172
  "provenance": {
173
  "source": "onnxruntime/test/providers/cpu/nn/pool_op_test.cc",
174
  "test": "PoolTest.MaxPool1D_8_With_Index",
175
- "notes": "Uses the project uint32 index-output convention while ORT materializes MaxPool indices as int64."
176
  },
177
  "attrs": { "storage_order": 0, "kernel_shape": [2], "strides": [2] },
178
  "inputs": {
@@ -202,7 +201,7 @@
202
  "provenance": {
203
  "source": "onnxruntime/test/providers/cpu/nn/pool_op_test.cc",
204
  "test": "PoolTest.MaxPool1D_12_With_Index_8bits",
205
- "notes": "Int8 indexed MaxPool coverage from ORT; indices use the project uint32 convention."
206
  },
207
  "attrs": { "storage_order": 0, "kernel_shape": [2], "strides": [2] },
208
  "inputs": {
@@ -228,7 +227,7 @@
228
  "provenance": {
229
  "source": "onnxruntime/test/providers/cpu/nn/pool_op_test.cc",
230
  "test": "PoolTest.MaxPool1D_12_With_Index_8bits",
231
- "notes": "Uint8 indexed MaxPool coverage from ORT; indices use the project uint32 convention."
232
  },
233
  "attrs": { "storage_order": 0, "kernel_shape": [2], "strides": [2] },
234
  "inputs": {
@@ -254,7 +253,7 @@
254
  "provenance": {
255
  "source": "onnxruntime/test/providers/cpu/nn/pool_op_test.cc",
256
  "test": "PoolTest.MaxPool_8_With_Index",
257
- "notes": "Compact 2D projection of ORT's indexed MaxPool coverage; indices use row-major storage_order=0 and the project uint32 convention."
258
  },
259
  "attrs": { "storage_order": 0, "kernel_shape": [2, 2] },
260
  "inputs": {
@@ -284,7 +283,7 @@
284
  "provenance": {
285
  "source": "onnxruntime/test/providers/cpu/nn/pool_op_test.cc",
286
  "test": "PoolTest.MaxPool_8_With_Index",
287
- "notes": "Compact 2D projection of ORT's indexed MaxPool storage_order=1 coverage; indices use the project uint32 convention."
288
  },
289
  "attrs": { "storage_order": 1, "kernel_shape": [2, 2] },
290
  "inputs": {
@@ -1105,7 +1104,7 @@
1105
  {
1106
  "name": "f16_k2s2_vec4_2x8x16x16_gpu",
1107
  "provenance": {
1108
- "notes": "Dense f16 2x2/stride-2/no-pad downsample; selects the vec4<f16> coalesced-load variant (nchw2d_k2s2_vec4). Deterministic fill input, expected via the trusted TS MaxPool reference."
1109
  },
1110
  "attrs": { "kernel_shape": [2, 2], "strides": [2, 2] },
1111
  "inputs": {
@@ -1148,7 +1147,7 @@
1148
  {
1149
  "name": "f16_2d_indices_k2s2_multichannel",
1150
  "provenance": {
1151
- "notes": "f16 (production inference dtype) 2D MaxPool WITH the Indices argmax output at a CNN-like k2s2 downsample, 2 channels. The nchw2d_indices f16 kernel body (argmax + index formula) is never numerically GPU-validated: every existing Indices case is f32/int8/uint8, and every f16 case is the tiny [1,1,4,5] dilation shape with no Indices. Expected to select nchw2d_indices and pass; closes the f16+indices validation gap."
1152
  },
1153
  "attrs": { "storage_order": 0, "kernel_shape": [2, 2], "strides": [2, 2] },
1154
  "inputs": {
@@ -1179,7 +1178,7 @@
1179
  {
1180
  "name": "f16_nchw_realistic_k3s2_pad1",
1181
  "provenance": {
1182
- "notes": "f16 ResNet-stem-style MaxPool (k3 s2 pad1) over a realistic [1,64,56,56] feature map. The only existing f16 rank-4 cases are the tiny [1,1,4,5] dilation shapes - the generic f16 nchw2d kernel body has never run f16 over a realistic-size map with padding. k3>2 so it bypasses the vec4 path and exercises the generic loop in f16."
1183
  },
1184
  "attrs": { "kernel_shape": [3, 3], "strides": [2, 2], "pads": [1, 1, 1, 1] },
1185
  "inputs": {
@@ -1194,7 +1193,7 @@
1194
  {
1195
  "name": "int8_2d_k3s2_pad1_realistic",
1196
  "provenance": {
1197
- "notes": "Signed int8 rank-4 MaxPool (non-indices) - there is no non-gap signed-int8 rank-4 GPU case at all (only uint8 via onnx_backend_maxpool_2d_uint8). int8 maps to dtypes.T==i32, so it selects the generic nchw2d (NOT nchw2d_uint8, which is u32-only). Validates the i32-carried int8 path of the generic kernel."
1198
  },
1199
  "attrs": { "kernel_shape": [3, 3], "strides": [2, 2], "pads": [1, 1, 1, 1] },
1200
  "inputs": {
@@ -1224,7 +1223,7 @@
1224
  {
1225
  "name": "f16_nchw_3x3_s2_pad1_unrolled",
1226
  "provenance": {
1227
- "notes": "f16 general-window (3x3) MaxPool routes to nchw2d_unrolled after half-precision capability admission (the route was previously f32-only); cross-checked against the generic nchw2d kernel."
1228
  },
1229
  "attrs": { "kernel_shape": [3, 3], "strides": [2, 2], "pads": [1, 1, 1, 1] },
1230
  "inputs": {
@@ -1293,7 +1292,7 @@
1293
  {
1294
  "name": "uint8_2d_indices_col_major_storage_order1",
1295
  "provenance": {
1296
- "notes": "uint8 rank-4 MaxPool + Indices + storage_order=1 (col-major). Routes to nchw2d_uint8_indices (pri16); col-major index formula (nc*inW+iw)*inH+ih on the u32-scalar path is unvalidated (existing col-major is f32 only). Indices hand-computed."
1297
  },
1298
  "attrs": { "storage_order": 1, "kernel_shape": [2, 2] },
1299
  "inputs": {
@@ -1321,27 +1320,27 @@
1321
  {
1322
  "name": "nchw_f32_indices_duplicate_max_tie_first_window_pos",
1323
  "provenance": {
1324
- "notes": "Argmax tie-break: equal maxima must resolve to the FIRST/lowest window index (kernel uses strict >). Existing indices cases have unique maxima; a >= regression (last-index) is undetected. Row-major flat indices hand-computed."
1325
  },
1326
  "attrs": { "storage_order": 0, "kernel_shape": [2, 2] },
1327
  "inputs": {
1328
  "x": {
1329
  "dtype": "float32",
1330
  "shape": [1, 1, 2, 3],
1331
- "data": { "kind": "values", "values": [9.0, 9.0, 1.0, 2.0, 9.0, 3.0] }
1332
  }
1333
  },
1334
  "outputs": {
1335
  "y": {
1336
  "dtype": "float32",
1337
  "shape": [1, 1, 1, 2],
1338
- "data": { "kind": "values", "values": [9.0, 9.0] },
1339
  "tolerance": 0
1340
  },
1341
  "indices": {
1342
  "dtype": "uint32",
1343
  "shape": [1, 1, 1, 2],
1344
- "data": { "kind": "values", "values": [0, 1] },
1345
  "tolerance": 0
1346
  }
1347
  }
@@ -1349,7 +1348,7 @@
1349
  {
1350
  "name": "nchw_f16_k2s2_vec4_odd_outH_boundary",
1351
  "provenance": {
1352
- "notes": "f16 2x2/s2/no-pad selects nchw2d_k2s2_vec4 (vec4<f16>, 2 outputs/thread). inH=10 -> outH=5 (ODD); existing vec4 case has even outH. Probes odd-outH tile row mapping. Expected via TS MaxPool reference."
1353
  },
1354
  "attrs": { "kernel_shape": [2, 2], "strides": [2, 2] },
1355
  "inputs": {
@@ -1364,7 +1363,7 @@
1364
  {
1365
  "name": "nchw_f32_dispatch_fold_65537_rows_generic",
1366
  "provenance": {
1367
- "notes": "numel(Y)=16.78M>16.7M engages the 2D dispatch fold (index=gid.x+gid.y*nwg.x*WG). k=1 identity so Y==X, every element checkable. Probes fold-missing last-row guard on generic nchw2d. Expected via TS reference."
1368
  },
1369
  "attrs": { "kernel_shape": [1, 1] },
1370
  "inputs": {
@@ -1379,7 +1378,7 @@
1379
  {
1380
  "name": "ncl1d_k2s2_x4_two_planes",
1381
  "provenance": {
1382
- "notes": "Exercises the four-output aligned NCL path across a plane boundary. Expected values come from the TypeScript MaxPool reference."
1383
  },
1384
  "attrs": { "kernel_shape": [2], "strides": [2] },
1385
  "inputs": {
@@ -1430,7 +1429,7 @@
1430
  {
1431
  "name": "separable_k6_nopad_f16",
1432
  "provenance": {
1433
- "notes": "float16 on the separable 2D pooling route, whose window must reach SEPARABLE_MIN_WINDOW (36); a 6x6 kernel is the smallest square that does. Only f32 cases had ever reached it."
1434
  },
1435
  "attrs": { "kernel_shape": [6, 6] },
1436
  "inputs": {
@@ -1441,6 +1440,43 @@
1441
  }
1442
  },
1443
  "outputs": { "y": { "dtype": "float16", "shape": [1, 2, 11, 11], "tolerance": 0 } }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1444
  }
1445
  ]
1446
  }
 
1
  {
 
2
  "fixtureArrays": {
3
  "onnx_backend_maxpool_2d_input_x": [1.764052391052246, 0.40015721321105957, 0.978738009929657, 2.2408931255340576, 1.8675580024719238, -0.9772778749465942, 0.9500884413719177, -0.15135720372200012, -0.10321885347366333, 0.4105985164642334, 0.14404356479644775, 1.4542734622955322, 0.7610377073287964, 0.12167501449584961, 0.44386324286460876, 0.3336743414402008, 1.4940791130065918, -0.2051582634449005, 0.3130677044391632, -0.8540957570075989, -2.5529897212982178, 0.653618574142456, 0.8644362092018127, -0.7421650290489197, 2.269754648208618, -1.4543657302856445, 0.04575851559638977, -0.18718385696411133, 1.5327792167663574, 1.4693588018417358, 0.154947429895401, 0.37816253304481506, -0.8877857327461243, -1.980796456336975, -0.34791216254234314, 0.15634897351264954, 1.2302906513214111, 1.202379822731018, -0.38732680678367615, -0.302302747964859, -1.0485529899597168, -1.420017957687378, -1.7062702178955078, 1.950775384902954, -0.5096521973609924, -0.4380742907524109, -1.2527953386306763, 0.7774903774261475, -1.6138978004455566, -0.21274028718471527, -0.8954665660858154, 0.38690251111984253, -0.5108051300048828, -1.18063223361969, -0.02818222902715206, 0.4283318817615509, 0.06651721894741058, 0.30247190594673157, -0.6343221068382263, -0.3627411723136902, -0.6724604368209839, -0.35955315828323364, -0.8131462931632996, -1.7262825965881348, 0.17742614448070526, -0.4017809331417084, -1.630198359489441, 0.46278226375579834, -0.9072983860969543, 0.05194539576768875, 0.7290905714035034, 0.12898291647434235, 1.1394007205963135, -1.234825849533081, 0.4023416340351105, -0.6848101019859314, -0.8707971572875977, -0.5788496732711792, -0.3115525245666504, 0.056165341287851334, -1.1651498079299927, 0.9008265137672424, 0.4656624495983124, -1.5362436771392822, 1.4882521629333496, 1.895889163017273, 1.1787796020507812, -0.1799248307943344, -1.0707526206970215, 1.0544517040252686, -0.4031769335269928, 1.222445011138916, 0.2082749754190445, 0.9766390323638916, 0.3563663959503174, 0.7065731883049011, 0.01050002034753561, 1.7858705520629883, 0.12691208720207214, 0.4019893705844879, 1.8831506967544556, -1.3477590084075928, -1.2704850435256958, 0.969396710395813, -1.1731233596801758, 1.9436211585998535, -0.4136189818382263, -0.747454822063446, 1.922942042350769, 1.4805147647857666, 1.8675589561462402, 0.9060446619987488, -0.8612256646156311, 1.910064935684204, -0.26800337433815, 0.8024563789367676, 0.9472519755363464, -0.15501008927822113, 0.6140793561935425, 0.922206699848175, 0.37642553448677063, -1.0994007587432861, 0.29823818802833557, 1.3263858556747437, -0.694567859172821, -0.14963454008102417, -0.4351535439491272, 1.8492637872695923, 0.6722947359085083, 0.40746182203292847, -0.7699160575866699, 0.5392491817474365, -0.6743326783180237, 0.0318305566906929, -0.6358460783958435, 0.676433265209198, 0.5765908360481262, -0.20829875767230988, 0.39600670337677, -1.0930615663528442, -1.4912575483322144, 0.43939170241355896, 0.16667349636554718, 0.6350314617156982, 2.3831448554992676, 0.9444794654846191, -0.9128222465515137, 1.117016315460205, -1.31590735912323, -0.46158459782600403, -0.06824160367250443, 1.7133426666259766, -0.7447548508644104, -0.8264385461807251, -0.09845252335071564, -0.6634783148765564, 1.1266359090805054, -1.0799314975738525, -1.1474686861038208, -0.43782004714012146, -0.49803245067596436, 1.9295320510864258, 0.9494208097457886, 0.08755124360322952, -1.225435495376587, 0.8443629741668701, -1.0002152919769287, -1.5447710752487183, 1.1880297660827637, 0.31694260239601135, 0.9208588004112244, 0.31872764229774475, 0.8568305969238281, -0.6510255932807922, -1.034242868423462, 0.6815944910049438, -0.8034096360206604, -0.6895498037338257, -0.4555324912071228, 0.01747915893793106, -0.3539939224720001, -1.3749512434005737, -0.6436184048652649, -2.223403215408325, 0.6252314448356628, -1.602057695388794, -1.1043833494186401, 0.05216507986187935, -0.73956298828125, 1.543014645576477, -1.2928569316864014, 0.2670508623123169, -0.039282817393541336, -1.1680934429168701, 0.523276686668396, -0.1715463250875473, 0.7717905640602112, 0.8235041499137878, 2.163235902786255, 1.336527943611145, -0.3691818416118622, -0.2393791824579239, 1.0996595621109009, 0.6552637219429016, 0.6401315331459045, -1.6169559955596924, -0.024326125159859657, -0.7380309104919434, 0.279924601316452, -0.09815038740634918, 0.9101788997650146, 0.31721821427345276, 0.7863279581069946, -0.4664191007614136, -0.9444462656974792, -0.410049706697464, -0.017020413652062416, 0.37915173172950745, 2.2593090534210205, -0.0422571524977684, -0.9559450149536133, -0.34598177671432495, -0.463595986366272, 0.4814814627170563, -1.5407969951629639, 0.06326199322938919, 0.15650653839111328, 0.23218104243278503, -0.5973160862922668, -0.23792172968387604, -1.4240609407424927, -0.49331986904144287, -0.5428614616394043, 0.4160500466823578, -1.1561824083328247, 0.7811980843544006, 1.494484543800354, -2.0699849128723145, 0.42625874280929565, 0.676908016204834, -0.6374370455741882, -0.3972718119621277, -0.1328805834054947, -0.29779088497161865, -0.3090129792690277, -1.6760038137435913, 1.1523315906524658, 1.0796185731887817, -0.8133642673492432, -1.4664243459701538, 0.5210648775100708, -0.5757879614830017, 0.14195317029953003, -0.3193284273147583, 0.6915387511253357, 0.694749116897583, -0.7255973815917969, -1.383363962173462, -1.5829384326934814, 0.6103793978691101, -1.188859224319458, -0.5068163275718689, -0.596314013004303, -0.05256729573011398, -1.9362797737121582, 0.1887785941362381, 0.523891031742096, 0.08842208981513977, -0.3108861744403839, 0.09740016609430313, 0.3990463316440582, -2.772592782974243, 1.9559123516082764, 0.3900933265686035, -0.6524085998535156, -0.3909533619880676, 0.4937417805194855, -0.11610393971204758, -2.030684471130371, 2.06449294090271, -0.11054065823554993, 1.0201727151870728, -0.6920498609542847, 1.5363770723342896, 0.28634369373321533, 0.6088438630104065, -1.0452533960342407, 1.211145281791687, 0.6898181438446045, 1.3018462657928467, -0.62808758020401, -0.48102712631225586, 2.3039166927337646, -1.0600157976150513, -0.13594970107078552, 1.1368913650512695, 0.09772496670484543, 0.582953691482544, -0.39944902062416077, 0.3700558841228485, -1.3065268993377686, 1.6581306457519531, -0.1181640475988388, -0.6801782250404358, 0.6663830876350403, -0.4607197940349579, -1.3342584371566772, -1.3467174768447876, 0.6937731504440308, -0.15957343578338623, -0.13370156288146973, 1.0777437686920166, -1.1268258094787598, -0.7306777238845825, -0.38487979769706726, 0.09435158967971802, -0.042171452194452286, -0.28688719868659973, -0.06162640079855919, -0.10730527341365814, -0.7196043729782104, -0.8129929900169373, 0.27451634407043457, -0.8909150958061218, -1.1573553085327148, -0.3122922480106354, -0.15766701102256775, 2.256723403930664, -0.7047002911567688, 0.9432607293128967, 0.7471883296966553, -1.188944935798645, 0.7732529640197754, -1.1838806867599487, -2.659172296524048, 0.6063195466995239, -1.7558906078338623, 0.4509344696998596, -0.684010922908783, 1.6595507860183716, 1.0685093402862549, -0.4533858001232147, -0.6878376007080078, -1.214077353477478, -0.4409226179122925, -0.2803554832935333, -0.3646935522556305, 0.1567038595676422, 0.5785214900970459, 0.3496544659137726, -0.7641439437866211, -1.4377914667129517, 1.3645318746566772, -0.6894491910934448, -0.6522936224937439, -0.5211893320083618, -1.8430695533752441, -0.477973997592926, -0.47965580224990845, 0.6203582882881165, 0.6984571218490601, 0.003770889015868306, 0.9318483471870422, 0.33996498584747314, -0.01568211242556572, 0.1609281748533249, -0.1906534880399704, -0.3948495090007782, -0.26773354411125183, -1.1280113458633423, 0.2804417014122009, -0.9931235909461975, 0.841631293296814, -0.24945858120918274, 0.04949498176574707, 0.49383679032325745, 0.6433144807815552, -1.5706233978271484, -0.20690368115901947, 0.8801789283752441, -1.698105812072754, 0.3872804641723633, -2.2555642127990723, -1.022506833076477, 0.03863055258989334, -1.6567151546478271, -0.9855107665061951, -1.4718350172042847, 1.6481349468231201, 0.16422775387763977, 0.5672903060913086, -0.22267509996891022, -0.353431761264801, -1.6164741516113281, -0.2918373644351959, -0.7614921927452087, 0.8579239249229431, 1.1411018371582031, 1.466578722000122, 0.8525519371032715, -0.5986539125442505, -1.1158969402313232, 0.7666631937026978, 0.35629281401634216, -1.768538475036621, 0.3554818034172058, 0.8145198225975037, 0.05892558768391609, -0.18505367636680603, -0.8076484799385071, -1.4465347528457642, 0.8002979755401611, -0.3091144561767578, -0.23346665501594543, 1.732721209526062, 0.6845011115074158, 0.37082499265670776, 0.14206179976463318, 1.519994854927063, 1.719589352607727, 0.9295051097869873, 0.5822246074676514, -2.0946030616760254, 0.12372191250324249, -0.13010695576667786, 0.09395322948694229, 0.9430460929870605, -2.7396771907806396, -0.5693120360374451, 0.26990434527397156, -0.4668455421924591, -1.4169061183929443, 0.8689634799957275, 0.276871919631958, -0.9711045622825623, 0.3148171901702881, 0.8215857148170471, 0.005292646121233702, 0.8005648255348206, 0.07826017588376999, -0.3952289819717407, -1.1594204902648926, -0.08593076467514038, 0.19429293274879456, 0.875832736492157, -0.1151074692606926, 0.4574156105518341, -0.9646120071411133, -0.782629132270813, -0.11038929969072342, -1.0546284914016724, 0.8202478289604187, 0.46313032507896423, 0.27909576892852783, 0.33890411257743835, 2.021043539047241, -0.46886420249938965, -2.2014412879943848, 0.19930019974708557, -0.05060354247689247, -0.5175190567970276, -0.9788298606872559, -0.43918952345848083, 0.18133842945098877, -0.5028166770935059, 2.4124536514282227, -0.9605043530464172, -0.793117344379425, -2.2886199951171875, 0.2514844238758087, -2.016406536102295, -0.5394546389579773, -0.27567052841186523, -0.709727942943573, 1.7388726472854614, 0.9943943619728088, 1.3191368579864502, -0.8824188113212585, 1.1285940408706665, 0.4960009455680847, 0.7714059352874756, 1.029438853263855, -0.9087632298469543, -0.4243176281452179, 0.8625960350036621, -2.6556191444396973, 1.5133280754089355, 0.5531320571899414, -0.045703962445259094, 0.2205076515674591, -1.0299352407455444, -0.3499433696269989, 1.1002843379974365, 1.2980220317840576, 2.6962239742279053, -0.07392466813325882, -0.6585529446601868, -0.5142339468002319, -1.0180418491363525, -0.07785475254058838, 0.38273242115974426, -0.03424227982759476, 1.0963468551635742, -0.23421579599380493, -0.3474506437778473, -0.5812684893608093, -1.6326345205307007, -1.5677677392959595, -1.1791579723358154, 1.3014280796051025, 0.8952602744102478, 1.3749641180038452, -1.3322116136550903, -1.9686247110366821, -0.6600562930107117, 0.17581894993782043, 0.49869027733802795, 1.0479722023010254, 0.2842796742916107, 1.7426687479019165, -0.22260567545890808, -0.9130792021751404, -1.6812182664871216, -0.8889713287353516, 0.2421179562807083, -0.8887202739715576, 0.9367424845695496, 1.4123276472091675, -2.369586944580078, 0.8640522956848145, -2.2396039962768555, 0.40149906277656555, 1.2248705625534058, 0.06485610455274582, -1.2796891927719116, -0.5854312181472778, -0.26164543628692627, -0.18224477767944336, -0.2028968334197998, -0.10988277941942215, 0.21348005533218384, -1.2085736989974976, -0.24201983213424683, 1.518261194229126, -0.3846454322338104, -0.4438360929489136, 1.0781973600387573, -2.5591845512390137, 1.1813786029815674, -0.6319037675857544, 0.1639285683631897, 0.09632135927677155, 0.9424681067466736, -0.26759475469589233, -0.6780257821083069, 1.2978458404541016, -2.3641738891601562, 0.020334182307124138, -1.3479254245758057, -0.7615733742713928, 2.011256694793701, -0.04459542781114578, 0.19506970047950745, -1.7815628051757812, -0.7290446758270264, 0.1965574026107788, 0.354757696390152, 0.616886556148529, 0.00862789899110794, 0.5270041823387146, 0.4537819027900696, -1.8297404050827026, 0.037005722522735596, 0.7679024338722229, 0.5898798108100891, -0.36385881900787354, -0.8056265115737915, -1.118311882019043, -0.13105401396751404, 1.1330798864364624, -1.9518041610717773, -0.6598917245864868, -1.1398024559020996, 0.7849575281143188, -0.554309606552124, -0.47063764929771423, -0.21694956719875336, 0.44539326429367065, -0.3923889994621277, -3.046143054962158, 0.5433118939399719, 0.43904295563697815, -0.2195410281419754, -1.0840365886688232, 0.35178011655807495, 0.37923553586006165, -0.47003287076950073, -0.2167314738035202, -0.9301565289497375, -0.1785890907049179, -1.550429344177246, 0.41731882095336914, -0.9443684816360474, 0.23810315132141113, -1.4059629440307617, -0.5900576710700989, -0.11048940569162369, -1.6606998443603516, 0.11514787375926971, -0.37914755940437317, -1.7423561811447144, -1.303242802619934, 0.605120062828064, 0.8955559730529785, -0.13190864026546478, 0.40476182103157043, 0.2238435596227646, 0.3296229839324951, 1.2859840393066406, -1.5069984197616577, 0.6764607429504395, -0.38200896978378296, -0.2242589294910431, -0.3022497296333313, -0.37514710426330566, -1.2261961698532104, 0.1833391934633255, 1.670943021774292, -0.05613302066922188, -0.0013850427931174636, -0.6872990131378174, -0.11747454851865768, 0.4661664366722107, -0.3702424466609955, -0.45380404591560364, 0.4032645523548126, -0.9180047512054443, 0.2524966299533844, 0.820321798324585, 1.3599485158920288, -0.09038200974464417, 1.367597222328186, 1.0344098806381226, -0.9962126612663269, -1.2179385423660278, -0.3049636483192444, 1.0289355516433716, -0.07228700816631317, -0.60065758228302, 1.5522432327270508, 0.2869044840335846, -2.320594310760498, 0.31716063618659973, 0.5200406312942505, 0.22560866177082062, 0.4497120976448059, -0.06727560609579086, -1.3183958530426025, -0.3707039952278137, -0.9456157684326172, -0.9327409267425537, -1.2630683183670044, 0.45248907804489136, 0.09789614379405975, -0.4481653571128845, -0.6493379473686218, -0.023423105478286743, 1.0791947841644287, -2.004215717315674, 0.3768765330314636, -0.5457119941711426, -1.8845858573913574, -1.9457030296325684, -0.9127835035324097, 0.219509556889534, 0.39306291937828064, -0.9389815926551819, 1.0170209407806396, 1.4229835271835327, 0.39608657360076904, -0.5914026498794556, 1.1244192123413086, 0.7553957104682922, 0.8674074411392212, -0.6564636826515198, -2.834554433822632, 2.116791009902954, -1.610878348350525, -0.03576807305216789, 2.3807454109191895, 0.33057674765586853, 0.9492464661598206, -1.502396583557129, -1.7776669263839722, -0.5327028036117554, 1.090749740600586, -0.34624946117401123, -0.7946363091468811, 0.1979672908782959, 1.081935167312622, -1.444940209388733, -1.2105430364608765, -0.788669228553772, 1.0946383476257324, 0.23482152819633484, 2.1321535110473633, 0.9364457130432129, -0.035095177590847015, 1.265077829360962, 0.2114970088005066, -0.7049213647842407, 0.6799748539924622, -0.6963266730308533, -0.29039710760116577, 1.3277827501296997, -0.10128148645162582, -0.8031414151191711, -0.46433767676353455, 1.021790623664856, -0.55254065990448, -0.3868708610534668, -0.5102927684783936, 0.18392549455165863, -0.3854897618293762, -1.601836085319519, -0.8871809244155884, -0.9327890276908875, 1.2433193922042847, 0.8126740455627441, 0.5872593522071838, -0.5053583383560181, -0.8157915472984314, -0.5075175762176514, -1.051880121231079, 2.4972004890441895, -2.245321750640869, 0.5640085339546204, -1.2845523357391357, -0.1043434888124466, -0.9880019426345825, -1.177628993988037, -1.1401963233947754, 1.7549861669540405, -0.13298842310905457, -0.7657021880149841, 0.5557869672775269, 0.010349314659833908, 0.7200337648391724, -1.8242566585540771, 0.3036039173603058, 0.7726948261260986, -1.6615983247756958, 0.44819527864456177, 1.6961815357208252, -0.014857703819870949, 0.8214059472084045, 0.670570433139801, -0.7075057029724121, 0.03976673632860184, -1.5669946670532227, -0.45130303502082825, 0.2656879723072052, 0.723100483417511, 0.024612125009298325, 0.7199837565422058, -1.1029062271118164, -0.10169727355241776, 0.01927938498556614, 1.8495912551879883, -0.21416665613651276, -0.4990166425704956, 0.021351223811507225, -0.9191134572029114, 0.1927538514137268, -0.3650552034378052, -1.7913275957107544, -0.05858655273914337, -0.317543089389801, -1.6324232816696167, -0.06713415682315826, 1.4893559217453003, 0.5213037729263306, 0.6119272112846375, -1.3414967060089111, 0.4768983721733093, 0.1484495848417282, 0.5290452241897583, 0.42262861132621765, -1.3597806692123413, -0.041400812566280365, -0.7578708529472351, -0.05008409544825554, -0.8974009156227112, 1.3124703168869019, -0.8589723706245422, -0.8989421725273132, 0.0745864063501358, -1.077099084854126, -0.4246633052825928, -0.8299645781517029, 1.4111720323562622, 0.7858038544654846, -0.05746951699256897, -0.39121705293655396, 0.9409176111221313, 0.40520408749580383, 0.4980524182319641, -0.026192236691713333, -1.688230037689209, -0.1124659851193428, -0.5324898958206177, 0.6450552940368652, 1.0118424892425537, -0.6579510569572449, 0.4683852195739746, 1.7358789443969727, -0.6677127480506897, 1.6819217205047607, -0.8525858521461487, 0.0229597557336092, -0.011145612224936485, 0.011498900130391121, -0.8376780152320862, -0.5911831259727478, -0.6677202582359314, 0.32696259021759033, 0.33003512024879456, 2.2259442806243896, 1.3709889650344849, -0.5098432302474976, 0.3248696029186249, 0.9971179962158203, 0.030601823702454567, -0.06964157521724701, 0.0515749417245388, 0.8672766089439392, -0.8483205437660217, -0.32566946744918823, 0.47043314576148987, 0.3114470839500427, 0.23958276212215424, -0.3698011636734009, 0.9725357890129089, 2.1338682174682617, 0.40641549229621887, -0.19317670166492462, 0.7557402849197388, -0.5391326546669006, -0.7496903538703918, 0.03280874714255333, -2.582796573638916, -1.1539503335952759, -0.3479618430137634, -1.3533889055252075, -1.0326430797576904, -0.43674832582473755, -1.642965316772461, -0.4060717821121216, -0.5352701544761658, 0.02540520764887333, 1.1541839838027954, 0.17250441014766693, 0.02106202207505703, 0.09945445507764816, 0.22739277780056, -1.0167386531829834, -0.11477532237768173, 0.30875125527381897, -1.3707599639892578, 0.8656529188156128, 1.081376075744629, -0.6313759684562683, -0.24133779108524323, -0.8781903386116028, 0.6993804574012756, -1.0612223148345947, -0.2224770039319992, -0.8589199185371399, 0.05095427855849266, -1.79422926902771, 1.326461672782898, -0.9646064043045044, 0.059894684702157974, -0.21252304315567017, -0.7621145248413086, -0.8877801299095154, 0.9363985657691956, -0.525640606880188, 0.2711701989173889, -0.8014968633651733, -0.6471814513206482, 0.4722471535205841, 0.9304084777832031, -0.17531640827655792, -1.421919822692871, 1.9979560375213623, -0.8565493226051331, -1.5415873527526855, 2.5944244861602783, -0.40403228998184204, -1.4617327451705933, -0.6834397912025452, 0.36754488945007324, 0.19031155109405518, -0.8517292141914368, 1.822723627090454, -0.5215796828269958, -1.184686541557312, 0.9606934189796448, 1.329062819480896, -0.8174930810928345, -1.401347279548645, 1.0304383039474487, -2.047323703765869, -1.2266216278076172, 0.9674461483955383, -0.05535254627466202, -0.2639373540878296, 0.3528166115283966, -0.15277442336082458, -1.2986867427825928, 1.2760753631591797, 1.3250139951705933, 0.20533256232738495, 0.04513401538133621, 2.3396248817443848, -0.2764328420162201, -0.2595769762992859, 0.36448124051094055, 1.471321940422058, 1.5927706956863403, -0.25857263803482056, 0.3083312511444092, -1.3780834674835205, -0.3119761049747467, -0.840290367603302, -1.0068317651748657, 1.6815767288208008, -0.7922866344451904, -0.5316058993339539, 0.3658487796783447, 1.2978252172470093, 0.4811151325702667, 2.759355068206787, -0.07466797530651093, 0.2587164342403412, 0.2756006717681885, 1.4350494146347046, 0.5072389245033264, -0.11622969806194305, -0.9474886059761047, 0.24444346129894257, 1.4013447761535645, -0.4103817939758301, 0.5289435982704163, 0.2461477816104889, 0.8635196685791016, -0.8047537207603455, 2.346647024154663, -1.2791610956192017, -0.36555108428001404, 0.9380925297737122, 0.29673317074775696, 0.8299861550331116, -0.49610233306884766, -0.07480498403310776, 0.012231983244419098, 1.5692596435546875, 0.6904290318489075, 0.7966721057891846, -0.657926082611084, 0.9688826203346252, 0.22558166086673737, 1.3891453742980957, 2.0140602588653564, -0.30676576495170593, -0.40630313754081726, -0.8640449643135071, -0.14357951283454895, -0.38202545046806335, 0.3595044016838074, -0.14456681907176971, -0.36159926652908325, 1.0645850896835327, -0.9378802180290222, 0.4331079423427582, -0.4059417247772217, 0.7243685126304626, 1.3852615356445312, -0.30309826135635376, 0.44103291630744934, 0.17879286408424377, -0.7994223833084106, 0.24078750610351562, 0.28912049531936646, 0.4128708243370056, -0.1983989030122757, 0.09419230371713638, -1.1476109027862549, -0.3581140637397766, 0.5559626817703247, 0.8924738764762878, -0.4223148226737976, 0.10471402853727341, 0.22805333137512207, 0.2014799416065216, 0.5407735705375671, -1.8180776834487915, -0.049324069172143936, 0.23903359472751617, -1.0003303289413452, 1.6739857196807861, 0.16155926883220673, 1.5634047985076904, -0.7905229926109314, -0.9073001146316528, 0.22425222396850586, -1.678688406944275, 0.2149655967950821, 0.09721922874450684, 1.0156652927398682, 0.7010413408279419, -0.4174773395061493, -1.0974966287612915, 1.7123051881790161, -0.7921150326728821, -1.0455245971679688, -1.0848560333251953, 1.1173052787780762, -0.5189002156257629, -0.7537044882774353, 0.13768982887268066, -0.20694470405578613, -0.6780954599380493, 0.7539914846420288, 1.0653154850006104, 0.9853175282478333, 0.7669196724891663, 0.40262553095817566, -1.7758879661560059, 1.6692508459091187, 0.30198919773101807, 0.6081564426422119, 1.1149623394012451, 1.4333524703979492, 0.41839802265167236, 0.4355461597442627, -0.5992242693901062, 0.03308974951505661, -0.854161262512207, -0.7199405431747437, -0.8935744166374207, -0.15602388978004456, 1.049093246459961, 3.1709747314453125, 0.189499631524086, -1.348413109779358, 1.2649832963943481, -0.3007838726043701, -0.6606085896492004, 0.20984947681427002, -1.2406245470046997, 0.22246316075325012, -0.088375523686409, 0.09837790578603745, 0.3814162611961365, 0.06749225407838821, 0.016338083893060684, 0.28431451320648193, 0.4154006242752075, -1.031482458114624, -1.4299912452697754, -0.06163805350661278, -1.4327354431152344, 0.08753146976232529, 0.9387468695640564, 0.6071116924285889, -1.0481704473495483, -0.8602624535560608, 0.3283012807369232, -0.40129780769348145, -0.31665530800819397, 0.5969064831733704, -0.9872866868972778, -0.4012347161769867, -0.8000825047492981, -1.0431294441223145, -0.8570781946182251, 0.6774621605873108, 0.05182038992643356, -0.8791606426239014, -0.2311016023159027, -1.6388072967529297, -0.7333127856254578, 2.1495745182037354, -0.09024384617805481, 0.731658935546875, -0.06548837572336197, 0.3481692373752594, 0.6632580757141113, -1.104616641998291, -0.030936257913708687, 1.5788651704788208, -0.7955005764961243, -0.5664398670196533, -0.3076912760734558, 0.2690240740776062, 0.5249178409576416, 1.267411708831787, 0.49949824810028076, -0.062053125351667404, 1.2591670751571655, 0.7041110396385193, -1.495679497718811, 2.5263681411743164, 1.7699214220046997, -0.16821421682834625, 0.3779101073741913, 1.3243587017059326, -0.17220079898834229, 0.7303518056869507, 1.1045784950256348, -1.0148259401321411, -0.6023318767547607, 0.9214084148406982, 0.4608144760131836, 0.923796534538269, -0.13256801664829254, -0.28900521993637085, -1.998639464378357, -1.1460003852844238, 0.0470660962164402, 0.8245572447776794, 0.53117835521698, -0.12824197113513947, -0.2717715799808502, 0.21717962622642517, 0.07821118086576462, 1.404545545578003, 0.1464407742023468, -1.481245994567871, -1.2725580930709839, 1.5187593698501587, -1.1711604595184326, 0.7644974589347839, -0.2683727443218231, -0.16975829005241394, -0.13413278758525848, 1.2213850021362305, -0.19284182786941528, -0.03331928327679634, -1.5308034420013428, 0.20669050514698029, 0.5310425162315369, 0.23914557695388794, 1.3978962898254395, 0.05517135560512543, 0.29897746443748474, 1.6485040187835693, -1.5500141382217407, -0.4558253586292267, 1.4261587858200073, 0.9361291527748108, 0.6783800721168518, 0.8326507210731506, 0.32706621289253235, 1.6315973997116089, 0.3777591586112976, 0.23986710608005524, 0.15895867347717285, 0.19286395609378815, -1.1570172309875488, 0.7706730365753174, -0.13043972849845886, 1.8219151496887207, -0.07565046846866608, 0.4209182858467102, 0.24660219252109528, -0.625557005405426, 0.9921368360519409, 1.9050636291503906, -0.014777219854295254, -0.3004787862300873, -0.3550287187099457, -1.8923618793487549, -0.17781314253807068, 0.2509981095790863, 1.0547579526901245, 0.960047721862793, -0.4164990782737732, -0.2768229842185974, 1.1239053010940552, -0.17346389591693878, -0.5100295543670654, 1.392518401145935, 1.0375856161117554, 0.018791791051626205, -0.5937774181365967, -2.011880397796631, 0.5897036194801331, -0.8963696956634521, -1.962731957435608, 1.5848205089569092, 0.6479678153991699, -1.1390081644058228, -1.214401364326477, 0.8709617853164673, -0.8779706358909607, 1.2961498498916626, 0.616459310054779, 0.5365965366363525, 0.40469545125961304, 0.19145087897777557, 0.8805112242698669, -0.45408037304878235, 0.08595197647809982, 0.7519465684890747, 0.5629897117614746, -1.1949868202209473, -0.5004096627235413, 0.2528035044670105, -0.408014714717865, 1.7746585607528687, -0.39315319061279297, -0.16221845149993896, 0.7694301605224609, 0.3305327296257019, -0.14527446031570435, -0.7564935088157654, 0.30151405930519104, 1.039096474647522, 0.4790952205657959, -0.7781835198402405, 1.7367749214172363, -1.4465779066085815, -1.5826855897903442, 0.960557222366333, 0.2258404791355133, -0.5494985580444336, -1.098570704460144, 2.3207998275756836, 0.1170908734202385, 0.5342011451721191, 0.3178851008415222, 0.4348079562187195, 0.5400944352149963, 0.7324240207672119, -0.37522241473197937, -0.2916419804096222, -1.7410228252410889, -0.7803044319152832, 0.2711127996444702, 1.0450233221054077, 0.5990395545959473, -0.34069234132766724, -1.2631728649139404, -2.7773592472076416, 1.1517339944839478, -0.5892289876937866, -0.4484650194644928, 0.13157397508621216, -1.40556001663208, -0.34978216886520386, 2.0234718322753906, 0.5053869485855103, 0.35924914479255676, -1.5824944972991943, 2.2436017990112305, -1.4227949380874634, 1.922324776649475, -2.115056037902832, 1.4053654670715332, 1.6180542707443237, -0.8244091272354126, 0.422580361366272, 0.547480583190918, -0.8137944936752319, -1.449117660522461, -1.3177173137664795, 0.5410082340240479, -0.08511560410261154, -0.5643010139465332, 0.9667680263519287, 0.5080679059028625, -0.7554627060890198, -1.2012015581130981, 0.5232617259025574, -0.5375833511352539, 0.09920486062765121, 1.5762989521026611, 0.5023282170295715, -0.862267017364502, 0.16066119074821472, -0.952644944190979, 1.6085221767425537, -0.5615787506103516, 0.20727074146270752, 0.30773258209228516, 0.15925046801567078, -1.958548903465271, -1.4464210271835327, -0.45235028862953186, 0.3194318413734436, -0.13777922093868256, -0.957147479057312, -1.3484243154525757, -0.4015575349330902, -0.4684760570526123, 0.5128364562988281, -0.3263184726238251, 0.6027076840400696, -0.5946497917175293, -0.2559576630592346, -0.3480463922023773, -0.7823669910430908, 0.6251186728477478, -0.8135960102081299, -0.5216414928436279, -0.0731196478009224, -1.2973796129226685, -0.3249349594116211, -0.7113063335418701, -0.38815417885780334, -0.05992800369858742, -0.7999136447906494, -0.220075786113739, 1.3086687326431274, -0.025798557326197624, 1.1452621221542358, 0.3464944362640381, 0.774160623550415, -0.7744589447975159, 0.10490716248750687, 0.13391292095184326, -0.6126257181167603, -0.8228283524513245, -1.4902653694152832, 1.496139645576477, -0.9724028706550598, 1.3462210893630981, -0.4674931764602661, -0.8624932765960693, 0.6225191354751587, -0.6311919689178467, 0.5684589147567749, -0.33281177282333374, 0.4804244935512543, -0.96818608045578, 0.8313510417938232, 0.4879726767539978, -0.919650673866272, 2.6429357528686523, 0.5401230454444885, 2.2904670238494873, 1.600267767906189, -0.1888347864151001, -0.41227176785469055, -0.40345919132232666, -1.8300285339355469, -0.6958351135253906, 0.24676603078842163, 1.5259575843811035, -0.7727718949317932, 0.8820565938949585, -1.2525933980941772, -0.5863200426101685, -0.4576405882835388, 0.3718110918998718, 0.45730963349342346, 0.9623417258262634, 0.7708369493484497, 0.24316821992397308, 0.39036494493484497, 1.5885306596755981, -0.5109261870384216, 0.7747282981872559, -1.808143973350525, 0.41133424639701843, -0.4832495450973511, 0.0025711823254823685, 1.040086269378662, 0.1646438091993332, 0.885187566280365, 1.4737647771835327, 0.38909396529197693, 1.1710410118103027, -0.32656097412109375, -0.00820988230407238, -0.5226194262504578, 1.0429775714874268, 0.4140913486480713, -0.5072344541549683, 0.15466883778572083, 1.041568398475647, -0.03926799073815346, -0.9489328265190125, 0.1319117546081543, -1.9805655479431152, 0.7687706351280212, -0.4213275909423828, -0.4693107306957245, 0.8756957054138184, -1.3651628494262695, 1.9470986127853394, -0.4802420437335968, -0.523250937461853, 1.0212247371673584, 0.7086952924728394, 2.4512298107147217, -0.21120598912239075, -0.1204066351056099, -1.479315996170044, -0.3321022689342499, -0.721431314945221, -0.4487670063972473, -1.7441877126693726, 1.6606075763702393, -1.416603446006775, -2.8022027015686035, -1.1884244680404663, -0.6038395762443542, -1.1495540142059326, 1.0983035564422607, -0.1378391832113266, 0.025385605171322823, 0.6103917360305786, 0.28601253032684326, 0.9785673022270203, -1.1094775199890137, -0.5475180745124817, 0.6659671664237976, -2.5345544815063477, -1.3751845359802246, 0.5009922385215759, -0.4802490472793579, 0.9361075758934021, 0.8091803193092346, -1.1980929374694824, 0.4066570997238159, 1.201697826385498, 0.14743439853191376, -0.9774648547172546, 0.8793899416923523, 0.6354245543479919, 0.542610764503479, 0.7159388661384583, -2.9946129322052, 0.8809375762939453, 1.8081318140029907, 0.4366384744644165, 0.19272899627685547, 0.6964386701583862, 0.33822548389434814, 0.6517812609672546, 0.0014710002578794956, -0.7667048573493958, -1.0043227672576904, -0.9981917142868042, -1.3730425834655762, -1.0677419900894165, 1.7612661123275757, 0.7540956735610962, -0.6250274181365967, -0.3903926908969879, 0.11255753040313721, -0.6555450558662415, 0.06751685589551926, 0.7776041626930237, -0.035742733627557755, 0.3360157310962677, 0.8864915370941162, -0.2721317708492279, 0.28479060530662537, -0.3093775808811188, -0.028528869152069092, -0.3247302770614624, -0.5288698673248291, 0.1737118512392044, 0.566545307636261, 0.1463044434785843, 0.4987269639968872, -0.7379317879676819, -1.2037352323532104, 0.4170435070991516, 0.6878814101219177, 0.04985726624727249, 1.3480358123779297, 0.9076988101005554, 2.6805708408355713, -0.20080851018428802, -0.9988487958908081, -0.7401368021965027, -0.5654978156089783, 0.4760313928127289, -2.1580686569213867, 1.3185510635375977, -0.2392965853214264, -0.24679355323314667, -1.0793431997299194, -0.11422555148601532, 0.013239767402410507, -0.12194492667913437, 0.3390592634677887, -0.5896320343017578, -0.8958157896995544, 0.5483281016349792, 0.0986674502491951, 0.19718106091022491, 1.0590271949768066, -1.02256441116333, -0.8552404642105103, 1.257219672203064, -1.482883334159851, -1.3094121217727661, 0.8178618550300598, 0.23820018768310547, 0.1052321344614029, -0.09165941178798676, 0.031267546117305756, -0.09211211651563644, 1.3554426431655884, -0.3981481194496155, -0.1613735407590866, 1.7944488525390625, 0.027509702369570732, 2.2320163249969482, -0.10497970134019852, 1.367414951324463, -1.655344009399414, 0.15364445745944977, -1.5844736099243164, 0.844454288482666, -1.2128678560256958, 0.28376954793930054, -0.2821958661079407, -1.1582032442092896, -1.6193599700927734, -0.511040449142456, 1.7406294345855713, -0.29348504543304443, 0.9172215461730957, -0.057042866945266724, 0.8767267465591431, -1.8269113302230835, -0.4031883180141449, 0.9494055509567261, -0.16325494647026062, -0.08645528554916382, -0.43046191334724426, 1.1493793725967407, 0.2975143492221832, 0.04402227699756622, 0.6430545449256897, 0.5882249474525452, 0.21258704364299774, 1.5470315217971802, -0.060287535190582275, 0.2780810594558716, -0.642952561378479, 0.1501152217388153, 1.5877615213394165, -0.6432576179504395, -1.1335928440093994, 0.9967596530914307, -0.1487661451101303, 0.09600420296192169, -0.045113302767276764, 0.07912172377109528, 0.8505306839942932, -0.8391242027282715, -1.0117740631103516, 0.08496813476085663, -1.6064397096633911, -1.3730535507202148, 1.8666831254959106, 0.7574683427810669, -0.010056471452116966, 1.2380069494247437, -1.0405992269515991, -0.3156031370162964, 0.6234536170959473, 0.8906716704368591, 0.5129168629646301, -2.541238784790039, -0.9680821299552917, 0.47706809639930725, -0.3559514880180359, 2.540231704711914, 0.9265583157539368, 0.558081865310669, -1.1169495582580566, -0.035296738147735596, 0.24120396375656128, 1.1277836561203003, 0.881131112575531, 1.0329891443252563, -0.923911988735199, 1.4121516942977905, -1.3804306983947754, -0.5359145402908325, 0.430771142244339, -0.14989158511161804, -1.0060368776321411, -0.8215498328208923, -1.548254370689392, 0.5319746136665344, 1.2605688571929932, -0.10039350390434265, -0.40034881234169006, -1.472322940826416, 0.9132019281387329, 2.2113044261932373, -1.7974557876586914, -1.0634329319000244, -0.679593026638031, -0.5643178820610046, 0.22734594345092773, 1.614249587059021, 1.0085972547531128, 0.5275973677635193, -0.723928689956665, -1.1196281909942627, -0.7967752814292908, 1.5480668544769287, -0.061743300408124924, -0.4468362629413605, -0.18375572562217712, 0.8246182203292847, -1.3128496408462524, 1.4148740768432617, 0.15647625923156738, -0.2163439840078354, 0.4428461194038391, 0.21839706599712372, -0.34419646859169006, -0.2527106702327728, -0.8688625693321228, 0.6563907265663147, -0.5319938063621521, -0.9562584161758423, 0.1658635288476944, 1.3291412591934204, -0.04834462329745293, -0.6081012487411499, 0.4038960337638855, 1.9367125034332275, -1.4519054889678955, 0.38220277428627014, 0.2050866186618805, 1.1615338325500488, 0.9909091591835022, -0.18670910596847534, -1.68451726436615, 0.8065637946128845, -0.8351926803588867, -0.9467403888702393, 1.1483505964279175, -0.9108504056930542, 1.402844786643982, 0.3358447253704071, 0.3191184103488922, 0.3072647750377655, -1.6384236812591553, -1.7763886451721191, 0.21555306017398834, 0.5680073499679565, 0.08261103183031082, -0.8215345144271851, 0.018922103568911552, -0.0820341557264328, -0.957158088684082, 1.0139721632003784, -1.730276107788086, 0.5887424349784851, 0.3843234181404114, 1.0097118616104126, -1.0053118467330933, 0.10140714794397354, 2.1711649894714355, 0.6620742678642273, 0.10058120638132095, 0.5391612648963928, 0.08617684245109558, 2.1908979415893555, 0.983636200428009, -0.08561495691537857, 0.2523314356803894, -0.39079800248146057, 1.2098500728607178, -1.4061048030853271, -1.604738473892212, 1.4587147235870361, 2.1531198024749756, 0.46830490231513977, 0.11273793876171112, 0.657267689704895, -0.6470535397529602, 0.1712435483932495, 0.0389087051153183, 0.6265642642974854, -1.557998538017273, -0.5070347785949707, 0.8449956178665161, -0.6755938529968262, -0.9933613538742065, 2.042072057723999, 0.03811800107359886, -0.5789181590080261, -1.6923704147338867, 0.7293463349342346, 0.6991361379623413, -0.2987596094608307, -1.102230191230774, -0.024549422785639763, -0.8358560800552368, -0.9420936107635498, -0.10321275144815445, -1.0513904094696045, 0.24664895236492157, 0.6079925298690796, -0.8396324515342712, -1.3682451248168945, 1.5612796545028687, -0.9402702450752258, -0.6599426865577698, 0.21301716566085815, 0.5993693470954895, -0.2563169002532959, 0.4607943296432495, -0.4009861648082733, -0.9711706638336182, 1.4263168573379517, 2.4884417057037354, 1.695969581604004, 0.14180663228034973, 1.8334354162216187, 0.3557035028934479, -0.47728627920150757, 0.4663795828819275, -0.09439250826835632, -0.9831181764602661, -0.8983219861984253, 0.8020517230033875, -1.8465319871902466, 0.6041367650032043, -1.6295835971832275, -2.1211764812469482, -1.8388465642929077, 1.966763973236084, -0.19623395800590515, 0.08658318221569061, 1.419255018234253, 0.9341797232627869, -1.391505241394043, 0.869006335735321, 0.18418125808238983, -0.34167808294296265, 0.024290913715958595, 1.279811978340149, -0.8859664797782898, 0.400885671377182, -0.009657236747443676, -1.7971645593643188, -0.8022531867027283, 0.193213552236557, 1.29734206199646, 1.0013309717178345, 0.5972124934196472, -0.8152756690979004, 1.8012139797210693, 0.2152404636144638, -1.0063655376434326, -0.18290497362613678, 0.8962484002113342, 0.007617498282343149, 0.8868646621704102, 1.103693962097168, 0.40053069591522217, -0.8577026128768921, 0.1354546695947647, 0.045165855437517166, 1.8593463897705078, -1.6263219118118286, -0.13482245802879333, -0.5840935707092285, 0.33510562777519226, -2.4375643730163574, 1.1149245500564575, 0.013748487457633018, -1.8447011709213257, -0.36111313104629517, 0.60896235704422, -1.5914478302001953, 0.003222216386348009, -1.0574736595153809, -0.5559850335121155, 0.026738382875919342, 0.18345025181770325, -0.47074249386787415, 0.2727963924407959, 0.8179776072502136, -0.27891427278518677, 1.4315677881240845, 1.4622141122817993, -0.42870205640792847, -0.6378405690193176, -1.6641730070114136, -0.12656933069229126, -0.3634377717971802, 0.7790512442588806, -1.5096615552902222, -0.2773914039134979, 0.9687443971633911, -0.7303571105003357, -0.7623615264892578, -1.446940302848816, 2.6205737590789795, -0.7474731802940369, -1.300346851348877, -0.8038504123687744, -0.7742950916290283, -0.2693897783756256, 0.8253722190856934, -0.2983231544494629, -0.9228233098983765, -1.451338529586792, 0.021857358515262604, 0.0425390750169754, 1.5309323072433472, 0.09244773536920547, -0.09900831431150436, -1.0506538152694702, -0.3059525787830353, -0.4384744465351105, -0.370164155960083, -0.9592553973197937, 0.5383296012878418, -0.1424454152584076, -0.2003534734249115, -1.7140461206436157, 0.4936440885066986, 0.48701533675193787, -0.8391293883323669, 0.9901213645935059, -1.3647582530975342, -0.021869909018278122, -0.271207332611084, -1.3171747922897339, 0.1897026151418686, 1.7025701999664307, 0.0676342323422432, -0.46302175521850586, 0.4470241665840149, 0.10571999847888947, 0.02776213176548481, -0.4255422055721283, 1.4219756126403809, 0.45636335015296936, -0.5286706686019897, -0.10800383985042572, -0.7408667206764221, -0.6082911491394043, -0.6407257318496704, -1.134311556816101, 0.7772769927978516, -0.29104146361351013, 0.55412757396698, -0.6701259016990662, -0.060362495481967926, -0.7110406160354614, 0.7196681499481201, -0.24841929972171783, -0.7308735847473145, -1.6417032480239868, 0.2756665349006653, -0.7083850502967834, -0.015779217705130577, -0.49173009395599365, 0.9541895985603333, 0.5441447496414185, 0.4472121000289917, -0.6161211133003235, 0.46629005670547485, 1.7148315906524658, -0.8321860432624817, 0.17233914136886597, -1.6492170095443726, 1.3985620737075806, -0.39791208505630493, 0.7825788855552673, -1.7232282161712646, 1.7975393533706665, -0.35687151551246643, 0.5456573367118835, 0.15081819891929626, -0.25547078251838684, 1.685792326927185, -1.6480462551116943, 0.29871365427970886, 0.9106456637382507, -0.02985612116754055, -0.11817078292369843, -0.14268770813941956, -1.227636456489563, 0.03812738507986069, 0.5127175450325012, 0.06859922409057617, -0.2722761034965515, -0.4897250235080719, -0.2792966663837433, 1.2577441930770874, -2.086634874343872, 0.040071457624435425, -0.3277549147605896, 1.4558079242706299, 0.05549222603440285, 1.484925627708435, -2.123889923095703, 0.45958489179611206, 0.2800578474998474, 1.3905339241027832, -1.6413486003875732, -0.1550358086824417, 0.06606025993824005, -0.49579548835754395, 1.2165777683258057, -0.3386821746826172, 2.0347626209259033, 1.0541778802871704, 0.9508336782455444, 0.5592989921569824, -1.0636955499649048, -0.4310963451862335, 0.5727513432502747, 0.6775570511817932, 1.307183861732483, -0.46744102239608765, -0.8601533770561218, 0.8591042160987854, -0.809626579284668, 0.8733118176460266, 1.1997361183166504, 0.4561530351638794, -0.3575790226459503, 0.0410822257399559, 0.5934659242630005, 0.01018551830202341, 2.198296308517456, -0.990670919418335, -1.0026686191558838, -0.9768953919410706, -0.5895799398422241, -2.178931474685669, -0.6296504139900208, -0.6532847285270691, 0.07851402461528778, 0.41780057549476624, -1.2402163743972778, 0.9000542163848877, 1.8022422790527344, -0.2082851082086563, 1.5743712186813354, 0.19898949563503265, 1.988731861114502, 1.1172834634780884, -1.5639046430587769, 0.01862736977636814, 1.054324984550476, 0.030546581372618675, -0.036883529275655746, 1.26976478099823, -0.7098541855812073, 0.01751561276614666, 0.323625773191452, -0.33379095792770386, -0.02012910321354866, 0.7750232815742493, 0.4328376352787018, -0.8087175488471985, -1.1041239500045776, -0.7891021966934204, 0.0012484558392316103, -0.15993978083133698, -0.8319575190544128, -0.5981504321098328, -1.5200393199920654, 0.4178537130355835, -0.040018726140260696, -1.2597873210906982, 0.028620503842830658, 1.3426220417022705, -0.7399358749389648, 1.3151376247406006, -0.3234574794769287, 0.19782817363739014, 0.09775080531835556, 1.401523470878601, 0.15843383967876434, -1.1419013738632202, -1.310970425605774, -1.5329210758209229, -1.7119702100753784, 0.046135060489177704, -0.9583745002746582, -0.08081161230802536, -0.7038590312004089, -0.770784318447113, -0.4808453321456909, 0.7035855650901794, 0.9291451573371887, 0.37117254734039307, -0.9898225665092468, 0.6436312794685364, 0.688896656036377, 0.27464720606803894, -0.6036204099655151, 0.7088595628738403, 0.4228185713291168, -3.116856575012207, 0.6444520354270935, -1.9137426614761353, 0.6635615825653076, -0.15407240390777588, 1.1936116218566895, -0.09816121309995651, -0.8866142630577087, -0.1473536640405655, 1.0598063468933105, 0.02624661847949028, -0.11433515697717667, 0.7435535192489624, 0.2103593647480011, -0.005927405785769224, 1.3660600185394287, 1.5551140308380127, 0.6133262515068054, -0.2859591543674469, 1.4969110488891602, 1.183119535446167, 0.7188971638679504, -1.2160766124725342, 0.14067190885543823, -0.7436721920967102, -0.15901225805282593, 0.24005693197250366, 0.1001594066619873, -0.4751751124858856, 1.272953748703003, -1.6961312294006348, 0.7301835417747498, -1.8574832677841187, 0.3825981318950653, -0.8869042992591858, 0.8783037662506104, 0.08645252138376236, 0.24770638346672058, -1.0182793140411377, -0.6545701622962952, 0.20721739530563354, 0.5835699439048767, 2.929096221923828, 0.22285832464694977, 0.9760375022888184, -1.556933879852295, -1.3298919200897217, -0.35549476742744446, -1.197427749633789, 1.4863992929458618, -0.4102186858654022, 1.3821818828582764, 1.486782431602478, 0.042779721319675446, 0.5017997622489929, -0.05609947443008423, 0.538437008857727, 0.48334184288978577, -0.12364962697029114, 0.5049699544906616, 1.723696231842041, 0.7130162119865417, 0.3257996141910553, 0.12476952373981476, -1.0126731395721436, -1.0272969007492065, 0.3233565390110016, -1.3693910837173462, -0.7663276195526123, 1.2815113067626953, 1.9142297506332397, -1.6659560203552246, 1.6266496181488037, -0.21143829822540283, -0.015005087479948997, -0.11341162770986557, 1.080544114112854, -1.60767662525177, 0.456163614988327, -0.9448701739311218, 0.5707885026931763, 1.5427963733673096, -0.0004173264023847878, 0.37415507435798645, 0.4095517694950104, -0.7995935082435608, 1.5116393566131592, 1.7064682245254517, 0.7017833590507507, 0.07328543066978455, -0.46189382672309875, -0.6264902353286743, 1.7108365297317505, 1.4144150018692017, -0.06366148591041565, -1.5799305438995361, -2.8320119380950928, -1.0834267139434814, -0.13062039017677307, 1.4006890058517456, -0.6516562104225159, 0.5048154592514038, 1.3031809329986572, 0.12853631377220154, -0.14244787395000458, -1.3087635040283203, -1.2024753093719482, 0.4160996377468109, -0.20090752840042114, 0.12253131717443466, -0.04727771505713463, 0.6641440391540527, -0.7846873998641968, -0.33558064699172974, 1.8961821794509888, -0.7997861504554749, -0.28157544136047363, -0.5893867015838623, 0.4447813630104065, 1.0223922729492188, -0.4982116222381592, -0.43141433596611023, -0.27898159623146057, 0.5298337936401367, -0.7393953204154968, -0.37595996260643005, -2.3721938133239746, -1.3817449808120728, -0.11244375258684158, 0.8978641629219055, 0.29507577419281006, -1.0987684726715088, -1.4002561569213867, 0.17468009889125824, -1.652803659439087, 1.0659267902374268, 0.06389619410037994, -1.6073201894760132, -0.9659538865089417, -0.7243112921714783, -0.7731925249099731, -1.4899330139160156, -0.8746625185012817, -0.6844015717506409, -0.7112857699394226, 1.1279566287994385, 0.10482780635356903, -0.9932572245597839, -0.3346216082572937, -0.8795570731163025, -0.3000066578388214, 0.8755091428756714, 0.25227078795433044, 2.2856011390686035, 0.3759274184703827, -0.9135944843292236, 0.8097407221794128, 1.0799312591552734, 1.0941669940948486, -1.0942409038543701, -0.14763741195201874, 1.1318119764328003, -1.684728980064392, -0.4994167685508728, -1.4269376993179321, -0.932570219039917, -1.0124571323394775, 1.2505698204040527, -0.2345380336046219, -0.8633555769920349, -1.035605788230896, 0.1416671723127365, -0.011135627515614033, 1.3440743684768677, 0.5000166893005371, -1.431797742843628, -0.6289806962013245, 1.0700725317001343, -0.6210827231407166, 1.734572172164917, -1.0982894897460938, 0.5726133584976196, -0.8612155318260193, -0.5095951557159424, 1.0985816717147827, -0.12706716358661652, 0.8134522438049316, 0.4732905924320221, 0.753865659236908, -0.8881881833076477, -0.22157439589500427, 0.42425262928009033, -0.8490728735923767, 1.6295000314712524, -0.777228057384491, -0.3000035881996155, -1.0065590143203735, -2.143308162689209, 1.796918511390686, -0.204338937997818, -0.44791483879089355, -0.19871506094932556, 1.4198639392852783, -0.9651066064834595, 0.6795678734779358, -0.42378824949264526, -0.5966708660125732, 0.5670582056045532, 0.9882405996322632, -0.5139029622077942, -0.7688491344451904, -1.169095754623413, 1.1035038232803345, -0.5752559900283813, -1.8491307497024536, 1.409952163696289, -1.3698594570159912, 0.7794605493545532, 0.18342864513397217, 0.28791543841362, -0.584375262260437, 0.36559146642684937, -1.6677799224853516, 0.5880377292633057, 1.5570100545883179, 0.8840271830558777, -2.0195400714874268, -0.9842090010643005, -0.18779492378234863, 0.4869373142719269, -0.10665267705917358, -0.4932143986225128, 0.5953003168106079, 1.1641517877578735, -0.2322940081357956, 0.728929877281189, -2.5790507793426514, -0.9375093579292297, -0.32125893235206604, -0.48856621980667114, 0.33279821276664734, 1.0137505531311035, 0.5066690444946289, -0.6222254633903503, -1.5227681398391724, 0.556964099407196, -1.8381767272949219, 0.6530373096466064, -0.18844908475875854, -1.1758350133895874, 0.2872573137283325, -0.00287610269151628, -0.03659729287028313, -0.08422330021858215, 0.41952410340309143, 0.9244340062141418, 0.4966152012348175, 1.012133240699768, -0.04413972049951553, 1.6184593439102173, 0.5711098313331604, -0.543694019317627, -1.0938950777053833, 0.20579680800437927, -1.3065215349197388, -0.9733759760856628, 0.2390870749950409, -0.6078874468803406, -0.9333162307739258, -0.03447504714131355, 0.07267789542675018, -0.2058340311050415, -0.37754690647125244, 0.8546427488327026, 0.3424273431301117, -0.22342611849308014, 2.4643218517303467, 0.19383174180984497, 1.1320050954818726, -0.5609809756278992, -1.3629409074783325, -0.7917565107345581, -0.2680097818374634, -0.4966081976890564, 1.3363862037658691, -0.120041124522686, 0.4614688754081726, -0.04648115485906601, -0.4335543215274811, 0.03799601271748543, 1.7140514850616455, -0.767948567867279, 0.7669904232025146, -1.0260072946548462, -0.4596264362335205, 0.0035832058638334274, 0.3263750970363617, 1.4831286668777466, -0.05008264258503914, -0.8436155915260315, 0.6500419974327087, -0.36416980624198914, 0.23868156969547272, -0.11622244119644165, -1.9434568881988525, 0.5082991719245911, 0.5833680033683777, 0.9266047477722168, 1.8004627227783203, -1.1951037645339966, 0.5165074467658997, 0.409294992685318, -0.41908198595046997, 0.39710623025894165, 0.49964696168899536, -1.2186838388442993, 0.24622276425361633, -0.9179843068122864, -0.6518564820289612, -1.7747448682785034, -0.47336092591285706, -0.2035706788301468, 0.5498568415641785, 0.0008999266428872943, -1.5422881841659546, 0.8621480464935303, -0.11858662217855453, 0.4883705973625183, 0.9659361243247986, 1.4226047992706299, 1.9612269401550293, -0.07223875820636749, 0.31112444400787354, -1.0783610343933105, 1.0616002082824707, -1.184887409210205, -1.8052517175674438, 0.8303859829902649, -0.5216965079307556, 0.777607262134552, 0.40807464718818665, -1.6300026178359985, -2.719679355621338, -1.0966017246246338, 0.016491487622261047, -1.2217763662338257, -0.6527614593505859, -1.4589407444000244, 0.16987796127796173, 0.09082593023777008, -0.48139262199401855, 1.397065281867981, 1.4977149963378906, 0.5652672052383423, -1.7997711896896362, -1.1046901941299438, 0.40713033080101013, -0.628557562828064, -0.48709142208099365, 0.8989673852920532, 0.5108748078346252, 1.3141543865203857, -0.42920929193496704, 1.3752254247665405, -0.554131269454956, 1.4994914531707764, 0.10583464056253433, -0.8605097532272339, -1.631219506263733, -0.3014723062515259, -0.25623270869255066, 0.8576619029045105, -0.11059050261974335, -0.4324319660663605, 1.0770374536514282, -0.22482655942440033, -0.5762417912483215, 0.5746089220046997, -0.4898282289505005, 0.6588021516799927, -0.5969170928001404, -0.22295917570590973, 0.15217697620391846, -0.3741263151168823, -0.013451469130814075, 0.8154719471931458, 0.41060179471969604, 0.4809698462486267, -0.6354304552078247, 0.8528297543525696, 0.6695623397827148, 1.004419207572937, -0.7263658046722412, -0.17245860397815704, 0.6335338950157166, -0.6088151335716248, -0.22612246870994568, 1.925805687904358, 1.95176100730896, 1.2399405241012573, 0.9385851621627808, -1.0192511081695557, 0.5125622153282166, -0.3591165840625763, -1.0585719347000122, -0.5090058445930481, 0.11566507071256638, -0.547355592250824, -0.5507994294166565, 0.7920414805412292, 0.14410649240016937, 0.23345808684825897, 0.11187239736318588, -0.6757031679153442, -1.3705719709396362, 0.31056469678878784, -0.5070366263389587, -2.010782241821289, -0.3925672471523285, -1.0922179222106934, 0.6986502408981323, 0.5216252207756042, 0.49689313769340515, -0.6650416254997253, 0.7315515875816345, 0.3196497857570648, -0.409854531288147, -0.4533374309539795, 0.8927081823348999, -0.4736040532588959, 0.3036564588546753, 1.0339570045471191, 1.909342646598816, 1.6638730764389038, 0.9008227586746216, -1.5059113502502441, -0.6890484094619751, -0.5480871796607971, 1.6531498432159424, -0.6993179321289062, 0.38616636395454407, 0.10086706280708313, -0.9351271986961365, 0.3818240165710449, 0.3982960879802704, -1.2557748556137085, 1.2228775024414062, -2.086509943008423, -0.5907571315765381, 0.9719703197479248, -1.1932578086853027, 0.3502659201622009, -1.2963603734970093, -0.09302414208650589, -2.3137731552124023, -0.8425716757774353, -1.5429214239120483, -0.4017637372016907, -0.4152314066886902, -0.6736641526222229, 0.7979131937026978, -0.8868796229362488, 0.6343866586685181, 1.6292757987976074, 0.13906414806842804, -0.8576701879501343, -1.2493385076522827, -0.7097851037979126, 0.7046427130699158, 0.1555907279253006, 0.9367952346801758, 0.7703309059143066, 0.14081065356731415, 0.4734882712364197, 1.8552461862564087, 1.4156562089920044, -0.3027460277080536, 0.9896794557571411, 0.5858508348464966, 1.1363880634307861, 0.6716165542602539, -0.9741674065589905, -1.6196845769882202, 0.5726270079612732, 1.902618169784546, -0.7756640911102295, -0.1880897432565689, -1.035747766494751, 1.1778295040130615, -2.3051669597625732, -2.263660192489624, 0.375019907951355, -0.08234364539384842, -0.479623019695282, -0.30109480023384094, 0.5369879007339478, -0.41380399465560913, -1.0969250202178955, -0.9273629188537598, 0.8883388638496399, -0.5247419476509094, -1.3852776288986206, 0.10217832773923874, 0.5049947500228882, 1.3289607763290405, 0.21790339052677155, -0.6597112417221069, 0.47400787472724915, 0.7271748781204224, -0.0389053076505661, -0.044599391520023346, 0.26013290882110596, -0.06985649466514587, 0.25011390447616577, -1.0219132900238037, -1.1504377126693726, -0.8361113667488098, 0.6422109603881836, 0.2587975561618805, 1.0402389764785767, -0.18669092655181885, -1.1436413526535034, 1.144553542137146, -0.01876705512404442, 1.2834550142288208, 0.5979464650154114, 2.1886186599731445, -0.21977297961711884, 0.900723934173584, 0.8913640975952148, -0.5551263689994812, -0.17248231172561646, -1.4617383480072021, -1.5487961769104004, 0.12656879425048828, 0.7930070757865906, 0.6380240321159363, 0.34002459049224854, 0.8630171418190002, -0.5896977782249451, -0.27253276109695435, 0.7375215291976929, 0.4331187307834625, -0.2101888209581375, 1.3207943439483643, -1.2920012474060059, -0.5186786651611328, -0.28339776396751404, 0.8165348768234253, 0.0023851979058235884, -1.2614917755126953, 0.5140041708946228, 1.0875463485717773, 0.7393045425415039, 0.6191549301147461, -1.874313473701477, -0.8998864889144897, 0.4820806086063385, -0.05488818511366844, 0.5225576162338257, -1.2663426399230957, -0.06149476394057274, -1.3897809982299805, -1.9536786079406738, 0.2957790791988373, 0.8425887823104858, 0.24561642110347748, -0.03299647942185402, -1.5620143413543701, 1.0061070919036865, -0.044044896960258484, 1.959562063217163, 0.9423143267631531, -2.0051255226135254, 0.7550497055053711, -1.3965352773666382, -0.7594954967498779, -0.2507566809654236, -0.0940624475479126, 0.39756521582603455, -1.0228550434112549, -1.1506919860839844, 0.6006051898002625, -0.013250268064439297, 0.17437304556369781, -2.193683385848999, -0.17713738977909088, -0.8907291889190674, -0.9206264019012451, 0.9219347834587097, -1.0956711769104004, -1.092896580696106, -0.3310106098651886, 0.4502888321876526, -0.8840147256851196, 1.2341440916061401, 1.4498475790023804, -0.8814470767974854, -0.24508175253868103, -0.7786754965782166, -1.6853821277618408, 0.30301105976104736, 0.7335948944091797, 2.011864185333252, -0.8974094986915588, 1.3362350463867188, 1.3423537015914917, 0.19785331189632416, 0.6021634936332703, 0.8732730746269226, 1.9740999937057495, 0.47780856490135193, -0.06013788655400276, -0.8661687970161438, 0.30532076954841614, 1.0241649150848389, 0.24461035430431366, -0.7799232602119446, 0.0890762060880661, -0.12915347516536713, 0.2647387683391571, -1.6618484258651733, 0.5507886409759521, 0.59542316198349, 0.44485342502593994, -0.003762817243114114, -1.8059362173080444, -0.019322792068123817, 1.0607149600982666, -0.8601288795471191, -1.989269495010376, -1.5405579805374146, 0.3140257000923157, 0.37287601828575134, 0.8862931728363037, -0.05525899678468704, -1.5003284215927124, -0.8185041546821594, 0.8188393712043762, 0.1404959112405777, 0.649829626083374, 0.4347887933254242, -0.20496055483818054, -0.17400683462619781, 1.8571022748947144, 0.4146742522716522, -0.128587543964386, 0.45541998744010925, 0.22290581464767456, -2.1573562622070312, 0.6500844955444336, 1.820939302444458, -0.7802798748016357, 1.454035758972168, -0.25686970353126526, 0.29347139596939087, 1.0703600645065308, -0.7200014591217041, 1.2424938678741455, -1.2142173051834106, -0.8751547336578369, -0.5935203433036804, 0.6620053648948669, -0.34087440371513367, -1.5199744701385498, -0.2165328711271286, -0.7842214107513428, 0.7312936186790466, -0.343235045671463, 0.07077407836914062, -0.40547245740890503, 0.43393898010253906, -0.18359076976776123, 0.3251987099647522, -2.593388557434082, 0.09725087881088257, 0.41391366720199585, -0.1992800533771515, 0.669392466545105, 0.7386070489883423, 1.3042138814926147, 0.10481160879135132, -1.9138007164001465, -2.285499334335327, -1.6018409729003906, -0.037907060235738754, -0.1573052853345871, 0.2762398421764374, -0.6252459287643433, -0.7364911437034607, 0.5550479292869568, 0.6559244394302368, -0.2566501498222351, -0.03847665712237358, 0.4043143391609192, 0.504343569278717, -1.1439807415008545, -0.7195738554000854, -1.230545997619629, -0.5069066286087036, 0.8123335838317871, 0.5462718605995178, -1.0980979204177856, 0.5122667551040649, 0.08584310859441757, -0.4939267039299011, -1.4064596891403198, -0.17482337355613708, 0.6799439787864685, -2.163097620010376, -0.3961232006549835, 2.2542836666107178, 0.6726367473602295, 0.259832501411438, -0.7371851801872253, -0.6783298254013062, -0.08328839391469955, 1.6028636693954468, 0.4655891954898834, -0.872158408164978, 1.17678701877594, -0.29259419441223145, 1.6973464488983154, -0.5666030049324036, -1.0032657384872437, 0.1746295839548111, 0.9823269844055176, 1.037444829940796, 0.1591917723417282, -0.9880967140197754, -0.5053406953811646, -2.018281936645508, -0.9131215214729309, -0.17845681309700012, 0.38900214433670044, -0.33945432305336, -0.05697905644774437, -0.3961854577064514, 0.7510253190994263, -0.8991129398345947, 0.8375478982925415, 1.9608807563781738, 0.4727896451950073, -0.5270916223526001, -0.5362701416015625, 1.2098371982574463, -1.1265894174575806, -0.9538044333457947, -1.1644484996795654, -1.278513789176941, -1.0448163747787476, 0.7899049520492554, 1.1022825241088867, -0.6970731019973755, 0.20733404159545898, 0.7591567039489746, 0.10056420415639877, -0.9549427628517151, -1.4704017639160156, 1.0104275941848755, 0.49617940187454224, 0.5769559144973755, -1.1076469421386719, 0.23497718572616577, 0.6289995908737183, 0.3140338361263275, -0.7450231909751892, 1.0122605562210083, -1.5276319980621338, 0.9287419319152832, 1.081055998802185, 1.572330355644226, -0.3424921929836273, -0.9994300007820129, 0.7938803434371948, -0.699215292930603, 0.043995510786771774, -0.3174622058868408, -0.9020719528198242, 0.32099947333335876, -1.3920159339904785, 0.5922057032585144, -0.9669311046600342, -1.7317312955856323, -0.05010746046900749, 0.431633859872818, 0.5769345760345459, 0.8183537125587463, -2.35364031791687, -1.005144476890564, 0.10665229707956314, 1.5190032720565796, 0.7837445139884949, 1.9013400077819824, -0.5249394178390503, 0.274416983127594, -1.099970817565918, -0.40435221791267395, -0.7352957129478455, -0.6339886784553528, -0.3934491276741028, 0.0027175399009138346, 0.022212663665413857, 0.5434534549713135, 0.1399884670972824, -0.34404563903808594, -0.5225785374641418, -0.30713170766830444, -0.4490371346473694, 0.49097105860710144, 0.8655251860618591, 1.2740445137023926, -0.7977027893066406, 0.4693722128868103, -1.3946796655654907, 0.3731747269630432, 1.0826722383499146, -0.14958950877189636, 1.0726360082626343, -1.1385679244995117, -0.8886452913284302, -0.13580983877182007, 1.0222103595733643, -0.41742944717407227, -0.45355311036109924, -0.9916283488273621, 0.20288103818893433, 1.2466951608657837, 0.700680136680603, 0.6966506838798523, -0.20697447657585144, -0.563309371471405, 0.6772459149360657, -0.03191107511520386, -0.1736082285642624, 0.8982406258583069, -0.19778744876384735, -0.837776243686676, 0.9091885089874268, 0.08071988821029663, -1.0370293855667114, -1.1129058599472046, 0.09541187435388565, 2.337409734725952, -0.3928205966949463, -0.33627384901046753, 1.5237711668014526, -0.05728119984269142, -1.4484668970108032, -1.5727964639663696, 1.2266639471054077, 0.6663545370101929, 0.8261256814002991, -0.05775655806064606, -0.7267120480537415, -0.2171631157398224, 0.13603121042251587, -0.8383111357688904, 0.5614498853683472, -1.2595961093902588, -0.33275875449180603, -0.20400787889957428, -0.6910198330879211, -2.20550537109375, 0.4478696584701538, -0.7557507753372192, 1.3257079124450684, -0.34198227524757385, -0.5413596034049988, 0.09152194857597351, 1.053439736366272, -0.5634076595306396, 1.0147377252578735, 1.4403036832809448, 0.9903228282928467, 1.6264314651489258, 1.292646050453186, 1.5148823261260986, 1.6043263673782349, 0.20806953310966492, -0.429223895072937, -2.2622437477111816, -1.3227331638336182, -0.44828280806541443, -0.38173508644104004, -0.1527944654226303, -1.0007604360580444, -1.5957776308059692, -0.13022316992282867, -0.18941792845726013, -0.8075540661811829, -0.7421521544456482, -0.9401565790176392, -0.39652374386787415, -0.856302797794342, 1.2598752975463867, 0.24099673330783844, -0.9723179340362549, -0.280447781085968, -1.1802855730056763, 1.012168288230896, 1.3841867446899414, 1.2520020008087158, -1.1446926593780518, -0.09126701951026917, -0.4015706777572632, 0.5620130896568298, -1.0079097747802734, -0.6758916974067688, -0.41321703791618347, 0.15328846871852875, 0.694128692150116, -0.32872769236564636, 0.6639650464057922, 0.8220763802528381, -0.21321523189544678, -1.2456581592559814, -1.1711903810501099, 0.5917269587516785, -0.476224422454834, -1.7126293182373047, 0.6129523515701294, 0.12955452501773834, -1.405967116355896, 1.179419994354248, 0.8366360068321228, 0.1387452483177185, -1.2743194103240967, -1.4023305177688599, -0.30706849694252014, -1.7139153480529785, 0.40508025884628296, -1.4108233451843262, 0.16491273045539856, -0.288131445646286, 0.7117852568626404, -0.9379475712776184, 0.27372944355010986, -1.3948402404785156, 0.7955495715141296, -0.11496176570653915, 0.49585068225860596, -1.3205252885818481, 0.4990842640399933, 0.3062033951282501, 0.36369788646698, 0.3126339614391327, -0.19346387684345245, 1.2412992715835571, -0.15589798986911774, -0.739169180393219, -0.05872619152069092, -0.9505179524421692, -0.46399641036987305, -0.17724661529064178, -0.3795541226863861, 0.19939707219600677, 1.9457614421844482, 0.5709498524665833, 1.072300672531128, -0.5037094354629517, -0.5870162844657898, -0.37817806005477905, 0.8528891205787659, -2.148118495941162, -1.0331647396087646, 0.1023358479142189, -0.22409236431121826, 1.9677296876907349, 0.4476832151412964, -0.6621914505958557, -1.5776070356369019, -0.34056004881858826, -1.3032200336456299, 0.4667506515979767, 0.16110631823539734, 0.32003194093704224, 2.079176664352417, -0.9074659943580627, -0.19240421056747437, -1.2125157117843628, -0.08059851825237274, 1.593273639678955, 0.5687224268913269, -0.11448704451322556, 0.2516302466392517, -1.2108556032180786, -0.3937337100505829, 0.08525257557630539, 0.09942198544740677, -1.530616283416748, 0.327623188495636, 0.27919650077819824, -0.3770512044429779, 0.004174998961389065, -1.4834915399551392, -1.4797955751419067, 0.13468725979328156, -0.6677231788635254, -0.011555519886314869, 0.8394906520843506, -0.17392992973327637, -2.8106679916381836, -0.1506536453962326, -0.4810440242290497, -0.23469436168670654, 0.8997308015823364, -1.578530192375183, 0.24395662546157837, 1.5703039169311523, -0.625943124294281, 0.4723278880119324, 0.9663057923316956, 0.21023143827915192, -0.6850969791412354, -0.7095209956169128, 0.743800163269043, 0.5921490788459778, -0.7864683866500854, -1.1764731407165527, -1.2808066606521606, 1.661651849746704, -0.06794512271881104, 2.3602285385131836, 0.5555456280708313, 0.43952232599258423, 0.3062724769115448, 0.9991498589515686, -0.9660632014274597, 2.160013198852539, -0.10030170530080795, -0.7034000754356384, 0.3025610148906708, 1.0923389196395874, -1.0075548887252808, 0.5668693780899048, -0.7164441347122192, -0.5062735080718994, -0.48948243260383606, 0.7635414600372314, -1.1090726852416992, 0.19261610507965088, -0.34341785311698914, -0.847210168838501, -1.2135236263275146, -1.2028883695602417, -1.633795976638794, 0.8961672186851501, -0.24165315926074982, 0.1586519330739975, 1.1781893968582153, -1.220117211341858, -0.9415456652641296, 0.25471553206443787],
4
  "ceil_mode_partial_windows_input_x": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16],
 
22
  {
23
  "name": "f32_positive_subnormal_beats_zero_2d_gpu_gap",
24
  "provenance": {
25
+ "notes": "In two-dimensional pooling, a positive subnormal must remain greater than zero-valued neighbors."
26
  },
27
  "attrs": { "kernel_shape": [2, 2] },
28
  "inputs": {
 
171
  "provenance": {
172
  "source": "onnxruntime/test/providers/cpu/nn/pool_op_test.cc",
173
  "test": "PoolTest.MaxPool1D_8_With_Index",
174
+ "notes": "This WebGPU package stores the ONNX int64 MaxPool indices in uint32 output slots."
175
  },
176
  "attrs": { "storage_order": 0, "kernel_shape": [2], "strides": [2] },
177
  "inputs": {
 
201
  "provenance": {
202
  "source": "onnxruntime/test/providers/cpu/nn/pool_op_test.cc",
203
  "test": "PoolTest.MaxPool1D_12_With_Index_8bits",
204
+ "notes": "An int8 one-dimensional MaxPool emits representable logical int64 indices in uint32 storage."
205
  },
206
  "attrs": { "storage_order": 0, "kernel_shape": [2], "strides": [2] },
207
  "inputs": {
 
227
  "provenance": {
228
  "source": "onnxruntime/test/providers/cpu/nn/pool_op_test.cc",
229
  "test": "PoolTest.MaxPool1D_12_With_Index_8bits",
230
+ "notes": "A uint8 one-dimensional MaxPool emits representable logical int64 indices in uint32 storage."
231
  },
232
  "attrs": { "storage_order": 0, "kernel_shape": [2], "strides": [2] },
233
  "inputs": {
 
253
  "provenance": {
254
  "source": "onnxruntime/test/providers/cpu/nn/pool_op_test.cc",
255
  "test": "PoolTest.MaxPool_8_With_Index",
256
+ "notes": "A compact two-dimensional MaxPool emits row-major indices with storage_order=0, represented in uint32 storage."
257
  },
258
  "attrs": { "storage_order": 0, "kernel_shape": [2, 2] },
259
  "inputs": {
 
283
  "provenance": {
284
  "source": "onnxruntime/test/providers/cpu/nn/pool_op_test.cc",
285
  "test": "PoolTest.MaxPool_8_With_Index",
286
+ "notes": "A compact two-dimensional MaxPool emits column-major indices with storage_order=1, represented in uint32 storage."
287
  },
288
  "attrs": { "storage_order": 1, "kernel_shape": [2, 2] },
289
  "inputs": {
 
1104
  {
1105
  "name": "f16_k2s2_vec4_2x8x16x16_gpu",
1106
  "provenance": {
1107
+ "notes": "A dense float16 2x2/stride-2/no-pad downsample exercises coalesced vec4 loads. Deterministic values give each pooling window a distinct maximum."
1108
  },
1109
  "attrs": { "kernel_shape": [2, 2], "strides": [2, 2] },
1110
  "inputs": {
 
1147
  {
1148
  "name": "f16_2d_indices_k2s2_multichannel",
1149
  "provenance": {
1150
+ "notes": "A CNN-like float16 k2/s2 downsample over two channels exercises both pooled values and argmax indices on the NCHW two-dimensional indexed path."
1151
  },
1152
  "attrs": { "storage_order": 0, "kernel_shape": [2, 2], "strides": [2, 2] },
1153
  "inputs": {
 
1178
  {
1179
  "name": "f16_nchw_realistic_k3s2_pad1",
1180
  "provenance": {
1181
+ "notes": "A realistic float16 ResNet-stem shape [1,64,56,56] with k3/s2/pad1 bypasses the k2 vec4 specialization and exercises padded windows in the generic NCHW loop."
1182
  },
1183
  "attrs": { "kernel_shape": [3, 3], "strides": [2, 2], "pads": [1, 1, 1, 1] },
1184
  "inputs": {
 
1193
  {
1194
  "name": "int8_2d_k3s2_pad1_realistic",
1195
  "provenance": {
1196
+ "notes": "A signed int8 rank-4 k3/s2/pad1 MaxPool exercises logical int8 values carried through the generic NCHW int32 storage path."
1197
  },
1198
  "attrs": { "kernel_shape": [3, 3], "strides": [2, 2], "pads": [1, 1, 1, 1] },
1199
  "inputs": {
 
1223
  {
1224
  "name": "f16_nchw_3x3_s2_pad1_unrolled",
1225
  "provenance": {
1226
+ "notes": "A float16 3x3 window with stride 2 and one-cell padding exercises complete and boundary-clipped NCHW pooling windows."
1227
  },
1228
  "attrs": { "kernel_shape": [3, 3], "strides": [2, 2], "pads": [1, 1, 1, 1] },
1229
  "inputs": {
 
1292
  {
1293
  "name": "uint8_2d_indices_col_major_storage_order1",
1294
  "provenance": {
1295
+ "notes": "A rank-4 uint8 MaxPool emits column-major indices with storage_order=1. The expected indices use (nc*inputWidth+column)*inputHeight+row and are computed directly from each pooling window."
1296
  },
1297
  "attrs": { "storage_order": 1, "kernel_shape": [2, 2] },
1298
  "inputs": {
 
1320
  {
1321
  "name": "nchw_f32_indices_duplicate_max_tie_first_window_pos",
1322
  "provenance": {
1323
+ "notes": "Equal maxima must resolve to the first, lowest window index. The expected row-major flat indices are derived directly from the pooling windows."
1324
  },
1325
  "attrs": { "storage_order": 0, "kernel_shape": [2, 2] },
1326
  "inputs": {
1327
  "x": {
1328
  "dtype": "float32",
1329
  "shape": [1, 1, 2, 3],
1330
+ "data": { "kind": "values", "values": [9.0, 9.0, 12.0, 2.0, 3.0, 12.0] }
1331
  }
1332
  },
1333
  "outputs": {
1334
  "y": {
1335
  "dtype": "float32",
1336
  "shape": [1, 1, 1, 2],
1337
+ "data": { "kind": "values", "values": [9.0, 12.0] },
1338
  "tolerance": 0
1339
  },
1340
  "indices": {
1341
  "dtype": "uint32",
1342
  "shape": [1, 1, 1, 2],
1343
+ "data": { "kind": "values", "values": [0, 2] },
1344
  "tolerance": 0
1345
  }
1346
  }
 
1348
  {
1349
  "name": "nchw_f16_k2s2_vec4_odd_outH_boundary",
1350
  "provenance": {
1351
+ "notes": "A float16 2x2/s2/no-pad input with height 10 produces odd output height 5, exercising two-output-per-thread row mapping at the final tile."
1352
  },
1353
  "attrs": { "kernel_shape": [2, 2], "strides": [2, 2] },
1354
  "inputs": {
 
1363
  {
1364
  "name": "nchw_f32_dispatch_fold_65537_rows_generic",
1365
  "provenance": {
1366
+ "notes": "A 1x1 identity window produces more than 16.7 million outputs and crosses the two-dimensional dispatch-fold boundary. Every output must equal the corresponding input, including the final folded row."
1367
  },
1368
  "attrs": { "kernel_shape": [1, 1] },
1369
  "inputs": {
 
1378
  {
1379
  "name": "ncl1d_k2s2_x4_two_planes",
1380
  "provenance": {
1381
+ "notes": "Two planes exercise the four-output aligned NCL path across a plane boundary, with distinct maxima on each side."
1382
  },
1383
  "attrs": { "kernel_shape": [2], "strides": [2] },
1384
  "inputs": {
 
1429
  {
1430
  "name": "separable_k6_nopad_f16",
1431
  "provenance": {
1432
+ "notes": "A float16 6x6 window is the smallest square reaching SEPARABLE_MIN_WINDOW=36 and exercises the separable two-dimensional pooling path."
1433
  },
1434
  "attrs": { "kernel_shape": [6, 6] },
1435
  "inputs": {
 
1440
  }
1441
  },
1442
  "outputs": { "y": { "dtype": "float16", "shape": [1, 2, 11, 11], "tolerance": 0 } }
1443
+ },
1444
+ {
1445
+ "name": "autopad_same_upper_rank3_route",
1446
+ "provenance": {
1447
+ "notes": "A 1-D SAME_UPPER pool is a legal ONNX graph whose output extent the port itself infers, and the generic rank-3 selector compared that extent against the explicit-pad arithmetic, which SAME cannot satisfy. The pinned values are exact: padding contributes negative infinity, so the maxima over the three windows are 2, 4 and 5."
1448
+ },
1449
+ "attrs": { "auto_pad": "SAME_UPPER", "kernel_shape": [3], "strides": [2] },
1450
+ "inputs": {
1451
+ "x": {
1452
+ "dtype": "float32",
1453
+ "shape": [1, 1, 5],
1454
+ "data": { "kind": "values", "values": [1.0, 2.0, 3.0, 4.0, 5.0] }
1455
+ }
1456
+ },
1457
+ "outputs": {
1458
+ "y": {
1459
+ "dtype": "float32",
1460
+ "shape": [1, 1, 3],
1461
+ "data": { "kind": "values", "values": [2.0, 4.0, 5.0] },
1462
+ "tolerance": 0
1463
+ }
1464
+ }
1465
+ },
1466
+ {
1467
+ "name": "autopad_same_upper_rank5_route",
1468
+ "provenance": {
1469
+ "notes": "A rank-5 SAME_UPPER pool derives output extents from automatic padding on all three spatial axes; volumetric path eligibility must use those derived extents."
1470
+ },
1471
+ "attrs": { "auto_pad": "SAME_UPPER", "kernel_shape": [3, 3, 3], "strides": [2, 2, 2] },
1472
+ "inputs": {
1473
+ "x": {
1474
+ "dtype": "float32",
1475
+ "shape": [1, 1, 3, 3, 3],
1476
+ "data": { "kind": "fillFloat32", "sinStep": 0.31, "cosStep": 0.17, "scale": 2.0 }
1477
+ }
1478
+ },
1479
+ "outputs": { "y": { "dtype": "float32", "shape": [1, 1, 2, 2, 2], "tolerance": 0 } }
1480
  }
1481
  ]
1482
  }