zarr-metadata 0.3.0 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/semantics.d.ts +17 -3
- package/dist/semantics.d.ts.map +1 -1
- package/dist/semantics.js +144 -24
- package/dist/semantics.js.map +1 -1
- package/package.json +1 -1
- package/src/semantics.ts +143 -24
package/dist/semantics.d.ts
CHANGED
|
@@ -8,17 +8,31 @@
|
|
|
8
8
|
*
|
|
9
9
|
* - the `regular` chunk grid's `chunk_shape` has one length per dimension
|
|
10
10
|
* of `shape`;
|
|
11
|
+
* - the `rectilinear` chunk grid's `chunk_shapes` has one entry per
|
|
12
|
+
* dimension, and each explicit chunk list (integers and `[size, count]`
|
|
13
|
+
* run-length pairs) sums exactly to that dimension's length (the
|
|
14
|
+
* bare-integer uniform shorthand carries no sum constraint, like the
|
|
15
|
+
* regular grid);
|
|
11
16
|
* - a `transpose` codec's `order` is a permutation of `0..n-1`, with one
|
|
12
17
|
* entry per array dimension;
|
|
13
18
|
* - a `sharding_indexed` codec's inner `chunk_shape` matches the array's
|
|
14
|
-
* dimensionality and evenly divides
|
|
15
|
-
*
|
|
16
|
-
* chunk when sharding
|
|
19
|
+
* dimensionality and evenly divides every chunk it shards — the grid's
|
|
20
|
+
* chunk at the top level (each distinct per-dimension size, for
|
|
21
|
+
* rectilinear grids), the parent shard's inner chunk when sharding
|
|
22
|
+
* nests;
|
|
17
23
|
* - `fill_value` has a JSON shape permitted for the named core data type
|
|
18
24
|
* (booleans for `bool`, ranged integers for the int types, numbers /
|
|
19
25
|
* the "NaN"-family sentinels / width-checked "0x…" strings for the
|
|
20
26
|
* float types, two-element arrays for the complex types).
|
|
21
27
|
*
|
|
28
|
+
* Dimensional context is THREADED through codec pipelines rather than
|
|
29
|
+
* assumed constant (mirroring zarr-python's chunk-spec threading): a valid
|
|
30
|
+
* `transpose` permutes the per-dimension chunk sizes for the codecs after
|
|
31
|
+
* it, and any codec this layer cannot reason about — `reshape` may change
|
|
32
|
+
* a chunk's rank, and unknown codecs may do anything — invalidates the
|
|
33
|
+
* dimensional context for the rest of the pipeline instead of letting
|
|
34
|
+
* stale array-level facts produce false verdicts.
|
|
35
|
+
*
|
|
22
36
|
* Unrecognized names are skipped everywhere — the extension name space is
|
|
23
37
|
* open, and a rule that guessed would lie. This layer has no counterpart
|
|
24
38
|
* in the Python reference implementation (which stops at structure), so it
|
package/dist/semantics.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"semantics.d.ts","sourceRoot":"","sources":["../src/semantics.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"semantics.d.ts","sourceRoot":"","sources":["../src/semantics.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AAEH,OAAO,EAAU,KAAK,SAAS,EAAoB,MAAM,aAAa,CAAC;AA6OvE;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,OAAO,GAAG,SAAS,CAqFlE"}
|
package/dist/semantics.js
CHANGED
|
@@ -8,17 +8,31 @@
|
|
|
8
8
|
*
|
|
9
9
|
* - the `regular` chunk grid's `chunk_shape` has one length per dimension
|
|
10
10
|
* of `shape`;
|
|
11
|
+
* - the `rectilinear` chunk grid's `chunk_shapes` has one entry per
|
|
12
|
+
* dimension, and each explicit chunk list (integers and `[size, count]`
|
|
13
|
+
* run-length pairs) sums exactly to that dimension's length (the
|
|
14
|
+
* bare-integer uniform shorthand carries no sum constraint, like the
|
|
15
|
+
* regular grid);
|
|
11
16
|
* - a `transpose` codec's `order` is a permutation of `0..n-1`, with one
|
|
12
17
|
* entry per array dimension;
|
|
13
18
|
* - a `sharding_indexed` codec's inner `chunk_shape` matches the array's
|
|
14
|
-
* dimensionality and evenly divides
|
|
15
|
-
*
|
|
16
|
-
* chunk when sharding
|
|
19
|
+
* dimensionality and evenly divides every chunk it shards — the grid's
|
|
20
|
+
* chunk at the top level (each distinct per-dimension size, for
|
|
21
|
+
* rectilinear grids), the parent shard's inner chunk when sharding
|
|
22
|
+
* nests;
|
|
17
23
|
* - `fill_value` has a JSON shape permitted for the named core data type
|
|
18
24
|
* (booleans for `bool`, ranged integers for the int types, numbers /
|
|
19
25
|
* the "NaN"-family sentinels / width-checked "0x…" strings for the
|
|
20
26
|
* float types, two-element arrays for the complex types).
|
|
21
27
|
*
|
|
28
|
+
* Dimensional context is THREADED through codec pipelines rather than
|
|
29
|
+
* assumed constant (mirroring zarr-python's chunk-spec threading): a valid
|
|
30
|
+
* `transpose` permutes the per-dimension chunk sizes for the codecs after
|
|
31
|
+
* it, and any codec this layer cannot reason about — `reshape` may change
|
|
32
|
+
* a chunk's rank, and unknown codecs may do anything — invalidates the
|
|
33
|
+
* dimensional context for the rest of the pipeline instead of letting
|
|
34
|
+
* stale array-level facts produce false verdicts.
|
|
35
|
+
*
|
|
22
36
|
* Unrecognized names are skipped everywhere — the extension name space is
|
|
23
37
|
* open, and a rule that guessed would lie. This layer has no counterpart
|
|
24
38
|
* in the Python reference implementation (which stops at structure), so it
|
|
@@ -122,22 +136,39 @@ function isPermutation(order) {
|
|
|
122
136
|
}
|
|
123
137
|
/**
|
|
124
138
|
* Walk one codec pipeline. `dims` is the array dimensionality at this point
|
|
125
|
-
* (undefined when unknowable); `
|
|
126
|
-
* this pipeline
|
|
139
|
+
* (undefined when unknowable); `outerChunkSizes` holds the distinct chunk
|
|
140
|
+
* lengths per dimension this pipeline may encode — what a sharding codec's
|
|
141
|
+
* inner chunks must divide. A regular grid contributes one size per
|
|
142
|
+
* dimension; a rectilinear grid may contribute several.
|
|
127
143
|
*/
|
|
128
|
-
function pipelineIssues(pipeline, path,
|
|
144
|
+
function pipelineIssues(pipeline, path, initialDims, initialChunkSizes) {
|
|
129
145
|
const issues = [];
|
|
146
|
+
// The dimensional context THREADS through the pipeline: transpose permutes
|
|
147
|
+
// it, and anything this layer cannot reason about invalidates it for the
|
|
148
|
+
// remaining codecs.
|
|
149
|
+
let dims = initialDims;
|
|
150
|
+
let chunkSizes = initialChunkSizes;
|
|
151
|
+
const dropContext = () => {
|
|
152
|
+
dims = undefined;
|
|
153
|
+
chunkSizes = undefined;
|
|
154
|
+
};
|
|
130
155
|
pipeline.forEach((entry, index) => {
|
|
131
156
|
const parts = fieldParts(entry);
|
|
132
|
-
if (parts === undefined)
|
|
157
|
+
if (parts === undefined) {
|
|
158
|
+
dropContext(); // structurally invalid entry: no further reasoning
|
|
133
159
|
return;
|
|
160
|
+
}
|
|
134
161
|
const { name, configuration } = parts;
|
|
135
162
|
if (name === "transpose") {
|
|
136
163
|
const order = configuration?.["order"];
|
|
137
|
-
if (!isIntArray(order))
|
|
138
|
-
|
|
164
|
+
if (!isIntArray(order)) {
|
|
165
|
+
dropContext(); // shape errors are the schema layer's
|
|
166
|
+
return;
|
|
167
|
+
}
|
|
139
168
|
const orderPath = [...path, index, "configuration", "order"];
|
|
169
|
+
let sound = true;
|
|
140
170
|
if (!isPermutation(order)) {
|
|
171
|
+
sound = false;
|
|
141
172
|
issues.push({
|
|
142
173
|
path: orderPath,
|
|
143
174
|
message: `expected a permutation of the integers 0..${order.length - 1}`,
|
|
@@ -145,17 +176,30 @@ function pipelineIssues(pipeline, path, dims, outerChunkShape) {
|
|
|
145
176
|
});
|
|
146
177
|
}
|
|
147
178
|
if (dims !== undefined && order.length !== dims) {
|
|
179
|
+
sound = false;
|
|
148
180
|
issues.push({
|
|
149
181
|
path: orderPath,
|
|
150
182
|
message: `expected one entry per array dimension (${dims})`,
|
|
151
183
|
kind: "invalid_value",
|
|
152
184
|
});
|
|
153
185
|
}
|
|
186
|
+
if (!sound) {
|
|
187
|
+
dropContext();
|
|
188
|
+
}
|
|
189
|
+
else if (chunkSizes !== undefined) {
|
|
190
|
+
const sizes = chunkSizes;
|
|
191
|
+
chunkSizes =
|
|
192
|
+
order.length === sizes.length
|
|
193
|
+
? order.map((axis) => sizes[axis])
|
|
194
|
+
: undefined;
|
|
195
|
+
}
|
|
154
196
|
}
|
|
155
197
|
else if (name === "sharding_indexed") {
|
|
156
198
|
const chunkShape = configuration?.["chunk_shape"];
|
|
157
|
-
if (!isIntArray(chunkShape))
|
|
199
|
+
if (!isIntArray(chunkShape)) {
|
|
200
|
+
dropContext();
|
|
158
201
|
return;
|
|
202
|
+
}
|
|
159
203
|
const chunkShapePath = [...path, index, "configuration", "chunk_shape"];
|
|
160
204
|
if (dims !== undefined && chunkShape.length !== dims) {
|
|
161
205
|
issues.push({
|
|
@@ -164,22 +208,44 @@ function pipelineIssues(pipeline, path, dims, outerChunkShape) {
|
|
|
164
208
|
kind: "invalid_value",
|
|
165
209
|
});
|
|
166
210
|
}
|
|
167
|
-
else if (
|
|
168
|
-
chunkShape.length ===
|
|
169
|
-
chunkShape.every((length) => length > 0)
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
211
|
+
else if (chunkSizes !== undefined &&
|
|
212
|
+
chunkShape.length === chunkSizes.length &&
|
|
213
|
+
chunkShape.every((length) => length > 0)) {
|
|
214
|
+
let violation;
|
|
215
|
+
chunkSizes.forEach((sizes, axis) => {
|
|
216
|
+
if (violation !== undefined)
|
|
217
|
+
return;
|
|
218
|
+
const bad = sizes.find((size) => size % chunkShape[axis] !== 0);
|
|
219
|
+
if (bad !== undefined)
|
|
220
|
+
violation = { axis, size: bad };
|
|
175
221
|
});
|
|
222
|
+
if (violation !== undefined) {
|
|
223
|
+
const { axis, size } = violation;
|
|
224
|
+
const sizesNow = chunkSizes;
|
|
225
|
+
const uniform = sizesNow.every((sizes) => sizes.length === 1);
|
|
226
|
+
issues.push({
|
|
227
|
+
path: chunkShapePath,
|
|
228
|
+
message: uniform
|
|
229
|
+
? `expected ${JSON.stringify(chunkShape)} to evenly divide the outer chunk shape ${JSON.stringify(sizesNow.map((sizes) => sizes[0]))}`
|
|
230
|
+
: `expected ${JSON.stringify(chunkShape)} to evenly divide every chunk size of the grid (dimension ${axis} has chunk size ${size})`,
|
|
231
|
+
kind: "invalid_value",
|
|
232
|
+
});
|
|
233
|
+
}
|
|
176
234
|
}
|
|
177
235
|
const inner = configuration?.["codecs"];
|
|
178
236
|
if (Array.isArray(inner)) {
|
|
179
|
-
issues.push(...pipelineIssues(inner, [...path, index, "configuration", "codecs"],
|
|
237
|
+
issues.push(...pipelineIssues(inner, [...path, index, "configuration", "codecs"], chunkShape.length, chunkShape.map((length) => [length])));
|
|
180
238
|
}
|
|
181
239
|
// index_codecs encode the shard index, whose shape differs from the
|
|
182
|
-
// array's — no dimensional context applies there.
|
|
240
|
+
// array's — no dimensional context applies there. After the
|
|
241
|
+
// array -> bytes boundary the dimensional context is spent.
|
|
242
|
+
dropContext();
|
|
243
|
+
}
|
|
244
|
+
else {
|
|
245
|
+
// A codec this layer cannot reason about (reshape may change a
|
|
246
|
+
// chunk's rank; unknown codecs may do anything): stale array-level
|
|
247
|
+
// facts must not judge the codecs after it.
|
|
248
|
+
dropContext();
|
|
183
249
|
}
|
|
184
250
|
});
|
|
185
251
|
return issues;
|
|
@@ -197,18 +263,72 @@ export function validateArraySemanticsV3(value) {
|
|
|
197
263
|
const shape = isIntArray(value["shape"]) ? value["shape"] : undefined;
|
|
198
264
|
const dims = shape?.length;
|
|
199
265
|
const grid = fieldParts(value["chunk_grid"]);
|
|
200
|
-
let
|
|
266
|
+
let chunkSizes;
|
|
201
267
|
if (grid?.name === "regular") {
|
|
202
268
|
const configured = grid.configuration?.["chunk_shape"];
|
|
203
269
|
if (isIntArray(configured)) {
|
|
204
|
-
chunkShape = configured;
|
|
205
270
|
if (dims !== undefined && configured.length !== dims) {
|
|
206
271
|
issues.push({
|
|
207
272
|
path: ["chunk_grid", "configuration", "chunk_shape"],
|
|
208
273
|
message: `expected one length per dimension of shape (${dims})`,
|
|
209
274
|
kind: "invalid_value",
|
|
210
275
|
});
|
|
211
|
-
|
|
276
|
+
// wrong arity: unusable as division context
|
|
277
|
+
}
|
|
278
|
+
else {
|
|
279
|
+
chunkSizes = configured.map((length) => [length]);
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
else if (grid?.name === "rectilinear") {
|
|
284
|
+
const specs = grid.configuration?.["chunk_shapes"];
|
|
285
|
+
if (Array.isArray(specs)) {
|
|
286
|
+
if (dims !== undefined && specs.length !== dims) {
|
|
287
|
+
issues.push({
|
|
288
|
+
path: ["chunk_grid", "configuration", "chunk_shapes"],
|
|
289
|
+
message: `expected one entry per dimension of shape (${dims})`,
|
|
290
|
+
kind: "invalid_value",
|
|
291
|
+
});
|
|
292
|
+
}
|
|
293
|
+
else {
|
|
294
|
+
const perDim = specs.map((spec, dim) => {
|
|
295
|
+
// Bare integer: uniform shorthand, no sum constraint (edge chunks
|
|
296
|
+
// are permitted, as with the regular grid).
|
|
297
|
+
if (Number.isInteger(spec))
|
|
298
|
+
return spec > 0 ? [spec] : undefined;
|
|
299
|
+
if (!Array.isArray(spec))
|
|
300
|
+
return undefined; // registry schema's problem
|
|
301
|
+
const sizes = new Set();
|
|
302
|
+
let total = 0;
|
|
303
|
+
for (const entry of spec) {
|
|
304
|
+
if (Number.isInteger(entry)) {
|
|
305
|
+
sizes.add(entry);
|
|
306
|
+
total += entry;
|
|
307
|
+
}
|
|
308
|
+
else if (Array.isArray(entry) &&
|
|
309
|
+
entry.length === 2 &&
|
|
310
|
+
Number.isInteger(entry[0]) &&
|
|
311
|
+
Number.isInteger(entry[1])) {
|
|
312
|
+
sizes.add(entry[0]);
|
|
313
|
+
total += entry[0] * entry[1];
|
|
314
|
+
}
|
|
315
|
+
else {
|
|
316
|
+
return undefined; // malformed entry: registry schema's problem
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
const extent = shape?.[dim];
|
|
320
|
+
if (extent !== undefined && total !== extent) {
|
|
321
|
+
issues.push({
|
|
322
|
+
path: ["chunk_grid", "configuration", "chunk_shapes", dim],
|
|
323
|
+
message: `expected chunk sizes summing to ${extent} along dimension ${dim}, got ${total}`,
|
|
324
|
+
kind: "invalid_value",
|
|
325
|
+
});
|
|
326
|
+
}
|
|
327
|
+
return [...sizes];
|
|
328
|
+
});
|
|
329
|
+
if (perDim.every((sizes) => sizes !== undefined)) {
|
|
330
|
+
chunkSizes = perDim;
|
|
331
|
+
}
|
|
212
332
|
}
|
|
213
333
|
}
|
|
214
334
|
}
|
|
@@ -221,7 +341,7 @@ export function validateArraySemanticsV3(value) {
|
|
|
221
341
|
}
|
|
222
342
|
const codecs = value["codecs"];
|
|
223
343
|
if (Array.isArray(codecs)) {
|
|
224
|
-
issues.push(...pipelineIssues(codecs, ["codecs"], dims,
|
|
344
|
+
issues.push(...pipelineIssues(codecs, ["codecs"], dims, chunkSizes));
|
|
225
345
|
}
|
|
226
346
|
return treeOf(issues);
|
|
227
347
|
}
|
package/dist/semantics.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"semantics.js","sourceRoot":"","sources":["../src/semantics.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"semantics.js","sourceRoot":"","sources":["../src/semantics.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/semantics.ts
CHANGED
|
@@ -8,17 +8,31 @@
|
|
|
8
8
|
*
|
|
9
9
|
* - the `regular` chunk grid's `chunk_shape` has one length per dimension
|
|
10
10
|
* of `shape`;
|
|
11
|
+
* - the `rectilinear` chunk grid's `chunk_shapes` has one entry per
|
|
12
|
+
* dimension, and each explicit chunk list (integers and `[size, count]`
|
|
13
|
+
* run-length pairs) sums exactly to that dimension's length (the
|
|
14
|
+
* bare-integer uniform shorthand carries no sum constraint, like the
|
|
15
|
+
* regular grid);
|
|
11
16
|
* - a `transpose` codec's `order` is a permutation of `0..n-1`, with one
|
|
12
17
|
* entry per array dimension;
|
|
13
18
|
* - a `sharding_indexed` codec's inner `chunk_shape` matches the array's
|
|
14
|
-
* dimensionality and evenly divides
|
|
15
|
-
*
|
|
16
|
-
* chunk when sharding
|
|
19
|
+
* dimensionality and evenly divides every chunk it shards — the grid's
|
|
20
|
+
* chunk at the top level (each distinct per-dimension size, for
|
|
21
|
+
* rectilinear grids), the parent shard's inner chunk when sharding
|
|
22
|
+
* nests;
|
|
17
23
|
* - `fill_value` has a JSON shape permitted for the named core data type
|
|
18
24
|
* (booleans for `bool`, ranged integers for the int types, numbers /
|
|
19
25
|
* the "NaN"-family sentinels / width-checked "0x…" strings for the
|
|
20
26
|
* float types, two-element arrays for the complex types).
|
|
21
27
|
*
|
|
28
|
+
* Dimensional context is THREADED through codec pipelines rather than
|
|
29
|
+
* assumed constant (mirroring zarr-python's chunk-spec threading): a valid
|
|
30
|
+
* `transpose` permutes the per-dimension chunk sizes for the codecs after
|
|
31
|
+
* it, and any codec this layer cannot reason about — `reshape` may change
|
|
32
|
+
* a chunk's rank, and unknown codecs may do anything — invalidates the
|
|
33
|
+
* dimensional context for the rest of the pipeline instead of letting
|
|
34
|
+
* stale array-level facts produce false verdicts.
|
|
35
|
+
*
|
|
22
36
|
* Unrecognized names are skipped everywhere — the extension name space is
|
|
23
37
|
* open, and a rule that guessed would lie. This layer has no counterpart
|
|
24
38
|
* in the Python reference implementation (which stops at structure), so it
|
|
@@ -140,25 +154,44 @@ function isPermutation(order: number[]): boolean {
|
|
|
140
154
|
|
|
141
155
|
/**
|
|
142
156
|
* Walk one codec pipeline. `dims` is the array dimensionality at this point
|
|
143
|
-
* (undefined when unknowable); `
|
|
144
|
-
* this pipeline
|
|
157
|
+
* (undefined when unknowable); `outerChunkSizes` holds the distinct chunk
|
|
158
|
+
* lengths per dimension this pipeline may encode — what a sharding codec's
|
|
159
|
+
* inner chunks must divide. A regular grid contributes one size per
|
|
160
|
+
* dimension; a rectilinear grid may contribute several.
|
|
145
161
|
*/
|
|
146
162
|
function pipelineIssues(
|
|
147
163
|
pipeline: unknown[],
|
|
148
164
|
path: Path,
|
|
149
|
-
|
|
150
|
-
|
|
165
|
+
initialDims: number | undefined,
|
|
166
|
+
initialChunkSizes: number[][] | undefined,
|
|
151
167
|
): PathedIssue[] {
|
|
152
168
|
const issues: PathedIssue[] = [];
|
|
169
|
+
// The dimensional context THREADS through the pipeline: transpose permutes
|
|
170
|
+
// it, and anything this layer cannot reason about invalidates it for the
|
|
171
|
+
// remaining codecs.
|
|
172
|
+
let dims = initialDims;
|
|
173
|
+
let chunkSizes = initialChunkSizes;
|
|
174
|
+
const dropContext = (): void => {
|
|
175
|
+
dims = undefined;
|
|
176
|
+
chunkSizes = undefined;
|
|
177
|
+
};
|
|
153
178
|
pipeline.forEach((entry, index) => {
|
|
154
179
|
const parts = fieldParts(entry);
|
|
155
|
-
if (parts === undefined)
|
|
180
|
+
if (parts === undefined) {
|
|
181
|
+
dropContext(); // structurally invalid entry: no further reasoning
|
|
182
|
+
return;
|
|
183
|
+
}
|
|
156
184
|
const { name, configuration } = parts;
|
|
157
185
|
if (name === "transpose") {
|
|
158
186
|
const order = configuration?.["order"];
|
|
159
|
-
if (!isIntArray(order))
|
|
187
|
+
if (!isIntArray(order)) {
|
|
188
|
+
dropContext(); // shape errors are the schema layer's
|
|
189
|
+
return;
|
|
190
|
+
}
|
|
160
191
|
const orderPath = [...path, index, "configuration", "order"];
|
|
192
|
+
let sound = true;
|
|
161
193
|
if (!isPermutation(order)) {
|
|
194
|
+
sound = false;
|
|
162
195
|
issues.push({
|
|
163
196
|
path: orderPath,
|
|
164
197
|
message: `expected a permutation of the integers 0..${order.length - 1}`,
|
|
@@ -166,15 +199,28 @@ function pipelineIssues(
|
|
|
166
199
|
});
|
|
167
200
|
}
|
|
168
201
|
if (dims !== undefined && order.length !== dims) {
|
|
202
|
+
sound = false;
|
|
169
203
|
issues.push({
|
|
170
204
|
path: orderPath,
|
|
171
205
|
message: `expected one entry per array dimension (${dims})`,
|
|
172
206
|
kind: "invalid_value",
|
|
173
207
|
});
|
|
174
208
|
}
|
|
209
|
+
if (!sound) {
|
|
210
|
+
dropContext();
|
|
211
|
+
} else if (chunkSizes !== undefined) {
|
|
212
|
+
const sizes = chunkSizes;
|
|
213
|
+
chunkSizes =
|
|
214
|
+
order.length === sizes.length
|
|
215
|
+
? order.map((axis) => sizes[axis] as number[])
|
|
216
|
+
: undefined;
|
|
217
|
+
}
|
|
175
218
|
} else if (name === "sharding_indexed") {
|
|
176
219
|
const chunkShape = configuration?.["chunk_shape"];
|
|
177
|
-
if (!isIntArray(chunkShape))
|
|
220
|
+
if (!isIntArray(chunkShape)) {
|
|
221
|
+
dropContext();
|
|
222
|
+
return;
|
|
223
|
+
}
|
|
178
224
|
const chunkShapePath = [...path, index, "configuration", "chunk_shape"];
|
|
179
225
|
if (dims !== undefined && chunkShape.length !== dims) {
|
|
180
226
|
issues.push({
|
|
@@ -183,25 +229,49 @@ function pipelineIssues(
|
|
|
183
229
|
kind: "invalid_value",
|
|
184
230
|
});
|
|
185
231
|
} else if (
|
|
186
|
-
|
|
187
|
-
chunkShape.length ===
|
|
188
|
-
chunkShape.every((length) => length > 0)
|
|
189
|
-
outerChunkShape.some((outer, axis) => outer % (chunkShape[axis] as number) !== 0)
|
|
232
|
+
chunkSizes !== undefined &&
|
|
233
|
+
chunkShape.length === chunkSizes.length &&
|
|
234
|
+
chunkShape.every((length) => length > 0)
|
|
190
235
|
) {
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
236
|
+
let violation: { axis: number; size: number } | undefined;
|
|
237
|
+
chunkSizes.forEach((sizes, axis) => {
|
|
238
|
+
if (violation !== undefined) return;
|
|
239
|
+
const bad = sizes.find((size) => size % (chunkShape[axis] as number) !== 0);
|
|
240
|
+
if (bad !== undefined) violation = { axis, size: bad };
|
|
195
241
|
});
|
|
242
|
+
if (violation !== undefined) {
|
|
243
|
+
const { axis, size } = violation;
|
|
244
|
+
const sizesNow = chunkSizes;
|
|
245
|
+
const uniform = sizesNow.every((sizes) => sizes.length === 1);
|
|
246
|
+
issues.push({
|
|
247
|
+
path: chunkShapePath,
|
|
248
|
+
message: uniform
|
|
249
|
+
? `expected ${JSON.stringify(chunkShape)} to evenly divide the outer chunk shape ${JSON.stringify(sizesNow.map((sizes) => sizes[0]))}`
|
|
250
|
+
: `expected ${JSON.stringify(chunkShape)} to evenly divide every chunk size of the grid (dimension ${axis} has chunk size ${size})`,
|
|
251
|
+
kind: "invalid_value",
|
|
252
|
+
});
|
|
253
|
+
}
|
|
196
254
|
}
|
|
197
255
|
const inner = configuration?.["codecs"];
|
|
198
256
|
if (Array.isArray(inner)) {
|
|
199
257
|
issues.push(
|
|
200
|
-
...pipelineIssues(
|
|
258
|
+
...pipelineIssues(
|
|
259
|
+
inner,
|
|
260
|
+
[...path, index, "configuration", "codecs"],
|
|
261
|
+
chunkShape.length,
|
|
262
|
+
chunkShape.map((length) => [length]),
|
|
263
|
+
),
|
|
201
264
|
);
|
|
202
265
|
}
|
|
203
266
|
// index_codecs encode the shard index, whose shape differs from the
|
|
204
|
-
// array's — no dimensional context applies there.
|
|
267
|
+
// array's — no dimensional context applies there. After the
|
|
268
|
+
// array -> bytes boundary the dimensional context is spent.
|
|
269
|
+
dropContext();
|
|
270
|
+
} else {
|
|
271
|
+
// A codec this layer cannot reason about (reshape may change a
|
|
272
|
+
// chunk's rank; unknown codecs may do anything): stale array-level
|
|
273
|
+
// facts must not judge the codecs after it.
|
|
274
|
+
dropContext();
|
|
205
275
|
}
|
|
206
276
|
});
|
|
207
277
|
return issues;
|
|
@@ -220,18 +290,67 @@ export function validateArraySemanticsV3(value: unknown): ErrorTree {
|
|
|
220
290
|
const dims = shape?.length;
|
|
221
291
|
|
|
222
292
|
const grid = fieldParts(value["chunk_grid"]);
|
|
223
|
-
let
|
|
293
|
+
let chunkSizes: number[][] | undefined;
|
|
224
294
|
if (grid?.name === "regular") {
|
|
225
295
|
const configured = grid.configuration?.["chunk_shape"];
|
|
226
296
|
if (isIntArray(configured)) {
|
|
227
|
-
chunkShape = configured;
|
|
228
297
|
if (dims !== undefined && configured.length !== dims) {
|
|
229
298
|
issues.push({
|
|
230
299
|
path: ["chunk_grid", "configuration", "chunk_shape"],
|
|
231
300
|
message: `expected one length per dimension of shape (${dims})`,
|
|
232
301
|
kind: "invalid_value",
|
|
233
302
|
});
|
|
234
|
-
|
|
303
|
+
// wrong arity: unusable as division context
|
|
304
|
+
} else {
|
|
305
|
+
chunkSizes = configured.map((length) => [length]);
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
} else if (grid?.name === "rectilinear") {
|
|
309
|
+
const specs = grid.configuration?.["chunk_shapes"];
|
|
310
|
+
if (Array.isArray(specs)) {
|
|
311
|
+
if (dims !== undefined && specs.length !== dims) {
|
|
312
|
+
issues.push({
|
|
313
|
+
path: ["chunk_grid", "configuration", "chunk_shapes"],
|
|
314
|
+
message: `expected one entry per dimension of shape (${dims})`,
|
|
315
|
+
kind: "invalid_value",
|
|
316
|
+
});
|
|
317
|
+
} else {
|
|
318
|
+
const perDim: (number[] | undefined)[] = specs.map((spec, dim) => {
|
|
319
|
+
// Bare integer: uniform shorthand, no sum constraint (edge chunks
|
|
320
|
+
// are permitted, as with the regular grid).
|
|
321
|
+
if (Number.isInteger(spec)) return spec as number > 0 ? [spec as number] : undefined;
|
|
322
|
+
if (!Array.isArray(spec)) return undefined; // registry schema's problem
|
|
323
|
+
const sizes = new Set<number>();
|
|
324
|
+
let total = 0;
|
|
325
|
+
for (const entry of spec) {
|
|
326
|
+
if (Number.isInteger(entry)) {
|
|
327
|
+
sizes.add(entry as number);
|
|
328
|
+
total += entry as number;
|
|
329
|
+
} else if (
|
|
330
|
+
Array.isArray(entry) &&
|
|
331
|
+
entry.length === 2 &&
|
|
332
|
+
Number.isInteger(entry[0]) &&
|
|
333
|
+
Number.isInteger(entry[1])
|
|
334
|
+
) {
|
|
335
|
+
sizes.add(entry[0] as number);
|
|
336
|
+
total += (entry[0] as number) * (entry[1] as number);
|
|
337
|
+
} else {
|
|
338
|
+
return undefined; // malformed entry: registry schema's problem
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
const extent = shape?.[dim];
|
|
342
|
+
if (extent !== undefined && total !== extent) {
|
|
343
|
+
issues.push({
|
|
344
|
+
path: ["chunk_grid", "configuration", "chunk_shapes", dim],
|
|
345
|
+
message: `expected chunk sizes summing to ${extent} along dimension ${dim}, got ${total}`,
|
|
346
|
+
kind: "invalid_value",
|
|
347
|
+
});
|
|
348
|
+
}
|
|
349
|
+
return [...sizes];
|
|
350
|
+
});
|
|
351
|
+
if (perDim.every((sizes) => sizes !== undefined)) {
|
|
352
|
+
chunkSizes = perDim as number[][];
|
|
353
|
+
}
|
|
235
354
|
}
|
|
236
355
|
}
|
|
237
356
|
}
|
|
@@ -246,7 +365,7 @@ export function validateArraySemanticsV3(value: unknown): ErrorTree {
|
|
|
246
365
|
|
|
247
366
|
const codecs = value["codecs"];
|
|
248
367
|
if (Array.isArray(codecs)) {
|
|
249
|
-
issues.push(...pipelineIssues(codecs, ["codecs"], dims,
|
|
368
|
+
issues.push(...pipelineIssues(codecs, ["codecs"], dims, chunkSizes));
|
|
250
369
|
}
|
|
251
370
|
return treeOf(issues);
|
|
252
371
|
}
|