@graphty/graph-format 0.0.0 → 0.2.0
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/LICENSE +21 -0
- package/README.md +216 -43
- package/dist/graph-format.d.ts +1 -0
- package/dist/graph-format.d.ts.map +1 -0
- package/dist/graph-format.js +15798 -0
- package/dist/graph-format.js.map +1 -0
- package/dist/src/builder/arena.d.ts +85 -0
- package/dist/src/builder/arena.d.ts.map +1 -0
- package/dist/src/builder/arena.js +154 -0
- package/dist/src/builder/arena.js.map +1 -0
- package/dist/src/builder/compact.d.ts +515 -0
- package/dist/src/builder/compact.d.ts.map +1 -0
- package/dist/src/builder/compact.js +1553 -0
- package/dist/src/builder/compact.js.map +1 -0
- package/dist/src/builder/counting-sort.d.ts +96 -0
- package/dist/src/builder/counting-sort.d.ts.map +1 -0
- package/dist/src/builder/counting-sort.js +430 -0
- package/dist/src/builder/counting-sort.js.map +1 -0
- package/dist/src/builder/freeze.d.ts +72 -0
- package/dist/src/builder/freeze.d.ts.map +1 -0
- package/dist/src/builder/freeze.js +548 -0
- package/dist/src/builder/freeze.js.map +1 -0
- package/dist/src/builder/graph-builder.d.ts +602 -0
- package/dist/src/builder/graph-builder.d.ts.map +1 -0
- package/dist/src/builder/graph-builder.js +1940 -0
- package/dist/src/builder/graph-builder.js.map +1 -0
- package/dist/src/builder/options.d.ts +16 -0
- package/dist/src/builder/options.d.ts.map +1 -0
- package/dist/src/builder/options.js +21 -0
- package/dist/src/builder/options.js.map +1 -0
- package/dist/src/columns/bitmap.d.ts +96 -0
- package/dist/src/columns/bitmap.d.ts.map +1 -0
- package/dist/src/columns/bitmap.js +184 -0
- package/dist/src/columns/bitmap.js.map +1 -0
- package/dist/src/columns/column.d.ts +220 -0
- package/dist/src/columns/column.d.ts.map +1 -0
- package/dist/src/columns/column.js +2109 -0
- package/dist/src/columns/column.js.map +1 -0
- package/dist/src/columns/dictionary.d.ts +60 -0
- package/dist/src/columns/dictionary.d.ts.map +1 -0
- package/dist/src/columns/dictionary.js +102 -0
- package/dist/src/columns/dictionary.js.map +1 -0
- package/dist/src/columns/growable.d.ts +198 -0
- package/dist/src/columns/growable.d.ts.map +1 -0
- package/dist/src/columns/growable.js +296 -0
- package/dist/src/columns/growable.js.map +1 -0
- package/dist/src/columns/infer.d.ts +121 -0
- package/dist/src/columns/infer.d.ts.map +1 -0
- package/dist/src/columns/infer.js +268 -0
- package/dist/src/columns/infer.js.map +1 -0
- package/dist/src/columns/remap.d.ts +143 -0
- package/dist/src/columns/remap.d.ts.map +1 -0
- package/dist/src/columns/remap.js +588 -0
- package/dist/src/columns/remap.js.map +1 -0
- package/dist/src/columns/table.d.ts +184 -0
- package/dist/src/columns/table.d.ts.map +1 -0
- package/dist/src/columns/table.js +485 -0
- package/dist/src/columns/table.js.map +1 -0
- package/dist/src/constants.d.ts +34 -0
- package/dist/src/constants.d.ts.map +1 -0
- package/dist/src/constants.js +79 -0
- package/dist/src/constants.js.map +1 -0
- package/dist/src/errors.d.ts +76 -0
- package/dist/src/errors.d.ts.map +1 -0
- package/dist/src/errors.js +32 -0
- package/dist/src/errors.js.map +1 -0
- package/dist/src/ids/edge-id-index.d.ts +77 -0
- package/dist/src/ids/edge-id-index.d.ts.map +1 -0
- package/dist/src/ids/edge-id-index.js +155 -0
- package/dist/src/ids/edge-id-index.js.map +1 -0
- package/dist/src/ids/node-id-map.d.ts +280 -0
- package/dist/src/ids/node-id-map.d.ts.map +1 -0
- package/dist/src/ids/node-id-map.js +1139 -0
- package/dist/src/ids/node-id-map.js.map +1 -0
- package/dist/src/ids/string-store.d.ts +219 -0
- package/dist/src/ids/string-store.d.ts.map +1 -0
- package/dist/src/ids/string-store.js +526 -0
- package/dist/src/ids/string-store.js.map +1 -0
- package/dist/src/index.d.ts +30 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +29 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/populate/from-csr.d.ts +61 -0
- package/dist/src/populate/from-csr.d.ts.map +1 -0
- package/dist/src/populate/from-csr.js +706 -0
- package/dist/src/populate/from-csr.js.map +1 -0
- package/dist/src/populate/from-edge-arrays.d.ts +51 -0
- package/dist/src/populate/from-edge-arrays.d.ts.map +1 -0
- package/dist/src/populate/from-edge-arrays.js +217 -0
- package/dist/src/populate/from-edge-arrays.js.map +1 -0
- package/dist/src/populate/from-records.d.ts +51 -0
- package/dist/src/populate/from-records.d.ts.map +1 -0
- package/dist/src/populate/from-records.js +447 -0
- package/dist/src/populate/from-records.js.map +1 -0
- package/dist/src/snapshot/derived.d.ts +211 -0
- package/dist/src/snapshot/derived.d.ts.map +1 -0
- package/dist/src/snapshot/derived.js +1254 -0
- package/dist/src/snapshot/derived.js.map +1 -0
- package/dist/src/snapshot/graph-meta.d.ts +23 -0
- package/dist/src/snapshot/graph-meta.d.ts.map +1 -0
- package/dist/src/snapshot/graph-meta.js +159 -0
- package/dist/src/snapshot/graph-meta.js.map +1 -0
- package/dist/src/snapshot/graph-snapshot.d.ts +509 -0
- package/dist/src/snapshot/graph-snapshot.d.ts.map +1 -0
- package/dist/src/snapshot/graph-snapshot.js +1247 -0
- package/dist/src/snapshot/graph-snapshot.js.map +1 -0
- package/dist/src/snapshot/hash.d.ts +90 -0
- package/dist/src/snapshot/hash.d.ts.map +1 -0
- package/dist/src/snapshot/hash.js +228 -0
- package/dist/src/snapshot/hash.js.map +1 -0
- package/dist/src/snapshot/queries.d.ts +74 -0
- package/dist/src/snapshot/queries.d.ts.map +1 -0
- package/dist/src/snapshot/queries.js +131 -0
- package/dist/src/snapshot/queries.js.map +1 -0
- package/dist/src/snapshot/validate.d.ts +192 -0
- package/dist/src/snapshot/validate.d.ts.map +1 -0
- package/dist/src/snapshot/validate.js +990 -0
- package/dist/src/snapshot/validate.js.map +1 -0
- package/dist/src/snapshot/views.d.ts +274 -0
- package/dist/src/snapshot/views.d.ts.map +1 -0
- package/dist/src/snapshot/views.js +856 -0
- package/dist/src/snapshot/views.js.map +1 -0
- package/dist/src/types/builder.d.ts +456 -0
- package/dist/src/types/builder.d.ts.map +1 -0
- package/dist/src/types/builder.js +11 -0
- package/dist/src/types/builder.js.map +1 -0
- package/dist/src/types/columns.d.ts +615 -0
- package/dist/src/types/columns.d.ts.map +1 -0
- package/dist/src/types/columns.js +14 -0
- package/dist/src/types/columns.js.map +1 -0
- package/dist/src/types/index.d.ts +14 -0
- package/dist/src/types/index.d.ts.map +1 -0
- package/dist/src/types/index.js +11 -0
- package/dist/src/types/index.js.map +1 -0
- package/dist/src/types/internal.d.ts +172 -0
- package/dist/src/types/internal.d.ts.map +1 -0
- package/dist/src/types/internal.js +13 -0
- package/dist/src/types/internal.js.map +1 -0
- package/dist/src/types/snapshot.d.ts +801 -0
- package/dist/src/types/snapshot.d.ts.map +1 -0
- package/dist/src/types/snapshot.js +14 -0
- package/dist/src/types/snapshot.js.map +1 -0
- package/dist/src/types/wire.d.ts +196 -0
- package/dist/src/types/wire.d.ts.map +1 -0
- package/dist/src/types/wire.js +8 -0
- package/dist/src/types/wire.js.map +1 -0
- package/dist/src/util/mask.d.ts +55 -0
- package/dist/src/util/mask.d.ts.map +1 -0
- package/dist/src/util/mask.js +71 -0
- package/dist/src/util/mask.js.map +1 -0
- package/dist/src/util/options.d.ts +22 -0
- package/dist/src/util/options.d.ts.map +1 -0
- package/dist/src/util/options.js +49 -0
- package/dist/src/util/options.js.map +1 -0
- package/dist/src/util/shared-buffers.d.ts +42 -0
- package/dist/src/util/shared-buffers.d.ts.map +1 -0
- package/dist/src/util/shared-buffers.js +52 -0
- package/dist/src/util/shared-buffers.js.map +1 -0
- package/dist/src/util/typed-array.d.ts +205 -0
- package/dist/src/util/typed-array.d.ts.map +1 -0
- package/dist/src/util/typed-array.js +289 -0
- package/dist/src/util/typed-array.js.map +1 -0
- package/dist/src/wire/bytes.d.ts +69 -0
- package/dist/src/wire/bytes.d.ts.map +1 -0
- package/dist/src/wire/bytes.js +361 -0
- package/dist/src/wire/bytes.js.map +1 -0
- package/dist/src/wire/carried-views.d.ts +111 -0
- package/dist/src/wire/carried-views.d.ts.map +1 -0
- package/dist/src/wire/carried-views.js +286 -0
- package/dist/src/wire/carried-views.js.map +1 -0
- package/dist/src/wire/from-wire.d.ts +144 -0
- package/dist/src/wire/from-wire.d.ts.map +1 -0
- package/dist/src/wire/from-wire.js +1425 -0
- package/dist/src/wire/from-wire.js.map +1 -0
- package/dist/src/wire/to-wire.d.ts +171 -0
- package/dist/src/wire/to-wire.d.ts.map +1 -0
- package/dist/src/wire/to-wire.js +652 -0
- package/dist/src/wire/to-wire.js.map +1 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -0
- package/package.json +72 -7
- package/src/builder/arena.ts +192 -0
- package/src/builder/compact.ts +1811 -0
- package/src/builder/counting-sort.ts +506 -0
- package/src/builder/freeze.ts +689 -0
- package/src/builder/graph-builder.ts +2264 -0
- package/src/builder/options.ts +29 -0
- package/src/columns/bitmap.ts +196 -0
- package/src/columns/column.ts +2574 -0
- package/src/columns/dictionary.ts +114 -0
- package/src/columns/growable.ts +350 -0
- package/src/columns/infer.ts +285 -0
- package/src/columns/remap.ts +663 -0
- package/src/columns/table.ts +568 -0
- package/src/constants.ts +89 -0
- package/src/errors.ts +115 -0
- package/src/ids/edge-id-index.ts +179 -0
- package/src/ids/node-id-map.ts +1340 -0
- package/src/ids/string-store.ts +589 -0
- package/src/index.ts +139 -0
- package/src/lib-resizable-array-buffer.d.ts +34 -0
- package/src/populate/from-csr.ts +802 -0
- package/src/populate/from-edge-arrays.ts +257 -0
- package/src/populate/from-records.ts +536 -0
- package/src/snapshot/derived.ts +1486 -0
- package/src/snapshot/graph-meta.ts +167 -0
- package/src/snapshot/graph-snapshot.ts +1503 -0
- package/src/snapshot/hash.ts +241 -0
- package/src/snapshot/queries.ts +136 -0
- package/src/snapshot/validate.ts +1108 -0
- package/src/snapshot/views.ts +943 -0
- package/src/types/builder.ts +480 -0
- package/src/types/columns.ts +727 -0
- package/src/types/index.ts +14 -0
- package/src/types/internal.ts +195 -0
- package/src/types/snapshot.ts +886 -0
- package/src/types/wire.ts +207 -0
- package/src/util/mask.ts +89 -0
- package/src/util/options.ts +57 -0
- package/src/util/shared-buffers.ts +56 -0
- package/src/util/typed-array.ts +371 -0
- package/src/wire/bytes.ts +440 -0
- package/src/wire/carried-views.ts +327 -0
- package/src/wire/from-wire.ts +1690 -0
- package/src/wire/to-wire.ts +755 -0
|
@@ -0,0 +1,588 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Remap and gather helpers for raw typed arrays, columns and whole tables (design section 5.11):
|
|
3
|
+
* the propagation of attribute data through compaction (freeze step 10), derived graphs (section
|
|
4
|
+
* 7.3) and consumer re-attachment after a builder mutation. One name per shape:
|
|
5
|
+
*
|
|
6
|
+
* - `remapArray(data, remap, newLength, fill, components)` and `remapColumn(column, remap,
|
|
7
|
+
* newLength)` take an OLD -> NEW map (`INVALID_INDEX` drops the row);
|
|
8
|
+
* - `gatherArray(data, indexMap, components)` and `gatherColumn(column, indexMap)` take a NEW ->
|
|
9
|
+
* OLD map (`out[i] = source[indexMap[i]]`);
|
|
10
|
+
* - `scatterArray(out, values, indexMap, components)` writes results computed on a derived graph
|
|
11
|
+
* back into the parent's index space (`out[indexMap[i]] = values[i]`).
|
|
12
|
+
*
|
|
13
|
+
* Index-valued columns (`meta.refersTo`, a u32 column or a list of u32) have their VALUES rewritten
|
|
14
|
+
* through the remap of the space they reference: an in-range value maps to its new index, a
|
|
15
|
+
* dangling reference becomes `INVALID_INDEX` with the row unset (invariant I12; for a list, the
|
|
16
|
+
* dangling items are dropped and a row whose every item dangled becomes unset and empty).
|
|
17
|
+
*/
|
|
18
|
+
import { INVALID_INDEX } from "../constants.js";
|
|
19
|
+
import { GraphFormatError } from "../errors.js";
|
|
20
|
+
import { bitmapClear, bitmapGet, bitmapSet, bitmapWordCount, makeBitmap } from "./bitmap.js";
|
|
21
|
+
import { allocU8, columnOfValues, createColumn, partsOf } from "./column.js";
|
|
22
|
+
import { AttributeTable } from "./table.js";
|
|
23
|
+
// ============================================================ raw arrays
|
|
24
|
+
/**
|
|
25
|
+
* A zeroed array of the same class as `like` (a padded store for u8).
|
|
26
|
+
* @param like - the array whose class to match
|
|
27
|
+
* @param length - the element count
|
|
28
|
+
* @returns the new array
|
|
29
|
+
*/
|
|
30
|
+
function allocLike(like, length) {
|
|
31
|
+
if (like instanceof Uint8Array) {
|
|
32
|
+
return allocU8(length);
|
|
33
|
+
}
|
|
34
|
+
if (like instanceof Uint32Array) {
|
|
35
|
+
return new Uint32Array(length);
|
|
36
|
+
}
|
|
37
|
+
if (like instanceof Int32Array) {
|
|
38
|
+
return new Int32Array(length);
|
|
39
|
+
}
|
|
40
|
+
if (like instanceof Float32Array) {
|
|
41
|
+
return new Float32Array(length);
|
|
42
|
+
}
|
|
43
|
+
return new Float64Array(length);
|
|
44
|
+
}
|
|
45
|
+
function checkComponents(components, data) {
|
|
46
|
+
if (!(Number.isInteger(components) && components >= 1)) {
|
|
47
|
+
throw new GraphFormatError("E_COLUMN_TYPE", `components must be a positive integer, found ${components}`, {
|
|
48
|
+
field: "components",
|
|
49
|
+
found: components,
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
if (data.length % components !== 0) {
|
|
53
|
+
throw new GraphFormatError("E_COLUMN_LENGTH", `array length ${data.length} is not a multiple of ${components}`, {
|
|
54
|
+
expected: components,
|
|
55
|
+
found: data.length,
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Move rows of an index-aligned array from an old index space to a new one through an OLD -> NEW
|
|
61
|
+
* remap (`FreezeReport.nodeRemap` / `edgeRemap`, `DerivedGraph.nodeRemap` / `edgeRemap`): row `i`
|
|
62
|
+
* lands at `remap[i]`, rows mapped to `INVALID_INDEX` are dropped, and rows of the new space no old
|
|
63
|
+
* row maps to hold `fill`.
|
|
64
|
+
* @param data - the old array, `oldRows * components` long
|
|
65
|
+
* @param remap - old index -> new index or INVALID_INDEX; rows beyond `remap.length` are dropped
|
|
66
|
+
* @param newLength - the row count of the new space
|
|
67
|
+
* @param fill - the value of rows no old row maps to
|
|
68
|
+
* @param components - values per row (default 1)
|
|
69
|
+
* @returns a new array of `newLength * components` values
|
|
70
|
+
*/
|
|
71
|
+
export function remapArray(data, remap, newLength, fill, components = 1) {
|
|
72
|
+
checkComponents(components, data);
|
|
73
|
+
const out = allocLike(data, newLength * components);
|
|
74
|
+
if (fill !== 0) {
|
|
75
|
+
out.fill(fill);
|
|
76
|
+
}
|
|
77
|
+
const rows = Math.min(remap.length, data.length / components);
|
|
78
|
+
for (let i = 0; i < rows; i++) {
|
|
79
|
+
const target = remap[i];
|
|
80
|
+
if (target === INVALID_INDEX) {
|
|
81
|
+
continue;
|
|
82
|
+
}
|
|
83
|
+
if (target >= newLength) {
|
|
84
|
+
throw new GraphFormatError("E_INDEX_RANGE", `remap[${i}] = ${target} is outside the new space of ${newLength} rows`, {
|
|
85
|
+
index: i,
|
|
86
|
+
found: target,
|
|
87
|
+
length: newLength,
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
if (components === 1) {
|
|
91
|
+
out[target] = data[i];
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
for (let k = 0; k < components; k++) {
|
|
95
|
+
out[target * components + k] = data[i * components + k];
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
return out;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Gather rows through a NEW -> OLD index map: `out[i] = data[indexMap[i]]` (`DerivedGraph.nodeOrigin`
|
|
103
|
+
* / `edgeOrigin`).
|
|
104
|
+
* @param data - the source array, `oldRows * components` long
|
|
105
|
+
* @param indexMap - new index -> old index, every entry in range
|
|
106
|
+
* @param components - values per row (default 1)
|
|
107
|
+
* @returns a new array of `indexMap.length * components` values
|
|
108
|
+
*/
|
|
109
|
+
export function gatherArray(data, indexMap, components = 1) {
|
|
110
|
+
checkComponents(components, data);
|
|
111
|
+
const out = allocLike(data, indexMap.length * components);
|
|
112
|
+
const rows = data.length / components;
|
|
113
|
+
for (let i = 0; i < indexMap.length; i++) {
|
|
114
|
+
const source = indexMap[i];
|
|
115
|
+
if (source >= rows) {
|
|
116
|
+
throw new GraphFormatError("E_INDEX_RANGE", `indexMap[${i}] = ${source} is outside the source of ${rows} rows`, {
|
|
117
|
+
index: i,
|
|
118
|
+
found: source,
|
|
119
|
+
length: rows,
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
if (components === 1) {
|
|
123
|
+
out[i] = data[source];
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
for (let k = 0; k < components; k++) {
|
|
127
|
+
out[i * components + k] = data[source * components + k];
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
return out;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Scatter values computed on a derived graph back into the parent's index space: `out[indexMap[i]]
|
|
135
|
+
* = values[i]` (through `nodeOrigin` / `edgeOrigin`). Rows of `out` no value maps to are untouched.
|
|
136
|
+
* @param out - the destination in the parent's index space
|
|
137
|
+
* @param values - the values in the derived index space, `indexMap.length * components` long
|
|
138
|
+
* @param indexMap - derived index -> parent index, every entry in range
|
|
139
|
+
* @param components - values per row (default 1)
|
|
140
|
+
* @returns `out`
|
|
141
|
+
*/
|
|
142
|
+
export function scatterArray(out, values, indexMap, components = 1) {
|
|
143
|
+
checkComponents(components, values);
|
|
144
|
+
if (values.length !== indexMap.length * components) {
|
|
145
|
+
throw new GraphFormatError("E_COLUMN_LENGTH", `values has ${values.length} entries, expected ${indexMap.length * components}`, {
|
|
146
|
+
expected: indexMap.length * components,
|
|
147
|
+
found: values.length,
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
const rows = out.length / components;
|
|
151
|
+
for (let i = 0; i < indexMap.length; i++) {
|
|
152
|
+
const target = indexMap[i];
|
|
153
|
+
if (target >= rows) {
|
|
154
|
+
throw new GraphFormatError("E_INDEX_RANGE", `indexMap[${i}] = ${target} is outside the destination of ${rows} rows`, {
|
|
155
|
+
index: i,
|
|
156
|
+
found: target,
|
|
157
|
+
length: rows,
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
if (components === 1) {
|
|
161
|
+
out[target] = values[i];
|
|
162
|
+
}
|
|
163
|
+
else {
|
|
164
|
+
for (let k = 0; k < components; k++) {
|
|
165
|
+
out[target * components + k] = values[i * components + k];
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
return out;
|
|
170
|
+
}
|
|
171
|
+
// ============================================================ columns
|
|
172
|
+
/**
|
|
173
|
+
* Gather the validity bits of a column through a NEW -> OLD index map; entries equal to
|
|
174
|
+
* INVALID_INDEX are unset rows of the result.
|
|
175
|
+
* @param column - the source column
|
|
176
|
+
* @param indexMap - new index -> old index or INVALID_INDEX
|
|
177
|
+
* @returns the validity bitmap of the result (null when every row is set) and its null count
|
|
178
|
+
*/
|
|
179
|
+
function gatherValidity(column, indexMap) {
|
|
180
|
+
const source = column.validity;
|
|
181
|
+
let validity = null;
|
|
182
|
+
let nullCount = 0;
|
|
183
|
+
for (let i = 0; i < indexMap.length; i++) {
|
|
184
|
+
const from = indexMap[i];
|
|
185
|
+
const set = from !== INVALID_INDEX && (source === null || bitmapGet(source, from));
|
|
186
|
+
if (!set) {
|
|
187
|
+
validity ?? (validity = makeBitmap(indexMap.length, true));
|
|
188
|
+
bitmapClear(validity, i);
|
|
189
|
+
nullCount++;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
return { validity, nullCount };
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* The metadata of a gathered column: the source metadata, made nullable when the gather produced
|
|
196
|
+
* unset rows that the source could not have had.
|
|
197
|
+
* @param meta - the source metadata
|
|
198
|
+
* @param nullCount - the result's null count
|
|
199
|
+
* @returns the metadata to use
|
|
200
|
+
*/
|
|
201
|
+
function gatheredMeta(meta, nullCount) {
|
|
202
|
+
if (meta.nullable || nullCount === 0) {
|
|
203
|
+
return meta;
|
|
204
|
+
}
|
|
205
|
+
return Object.freeze({ ...meta, nullable: true });
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Gather the rows of a column through a NEW -> OLD index map: `out[i] = column[indexMap[i]]`
|
|
209
|
+
* (design section 5.11, `DerivedGraph.nodeOrigin` / `edgeOrigin`). An INVALID_INDEX entry yields an
|
|
210
|
+
* unset row holding the fill (the column becomes nullable if it was not). Values of a refersTo
|
|
211
|
+
* column are NOT rewritten here; compose with remapReferences() when the referenced space changed.
|
|
212
|
+
* @param column - the source column
|
|
213
|
+
* @param indexMap - new index -> old index (or INVALID_INDEX for a row with no source)
|
|
214
|
+
* @returns a new column of `indexMap.length` rows
|
|
215
|
+
*/
|
|
216
|
+
export function gatherColumn(column, indexMap) {
|
|
217
|
+
const { length } = indexMap;
|
|
218
|
+
for (let i = 0; i < length; i++) {
|
|
219
|
+
const from = indexMap[i];
|
|
220
|
+
if (from !== INVALID_INDEX && from >= column.length) {
|
|
221
|
+
throw new GraphFormatError("E_INDEX_RANGE", `indexMap[${i}] = ${from} is outside the column of ${column.length} rows`, {
|
|
222
|
+
index: i,
|
|
223
|
+
found: from,
|
|
224
|
+
length: column.length,
|
|
225
|
+
column: column.meta.name,
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
const { validity, nullCount } = gatherValidity(column, indexMap);
|
|
230
|
+
const meta = gatheredMeta(column.meta, nullCount);
|
|
231
|
+
const parts = {
|
|
232
|
+
...partsOf(column),
|
|
233
|
+
meta,
|
|
234
|
+
length,
|
|
235
|
+
validity,
|
|
236
|
+
nullCount,
|
|
237
|
+
};
|
|
238
|
+
const { dtype } = column;
|
|
239
|
+
switch (dtype) {
|
|
240
|
+
case "f32":
|
|
241
|
+
case "f64":
|
|
242
|
+
case "i32":
|
|
243
|
+
case "u32":
|
|
244
|
+
case "u8": {
|
|
245
|
+
const { components, fill } = meta;
|
|
246
|
+
const out = allocLike(column.data, length * components);
|
|
247
|
+
if (typeof fill === "number" && fill !== 0) {
|
|
248
|
+
out.fill(fill);
|
|
249
|
+
}
|
|
250
|
+
for (let i = 0; i < length; i++) {
|
|
251
|
+
const from = indexMap[i];
|
|
252
|
+
if (from === INVALID_INDEX) {
|
|
253
|
+
continue;
|
|
254
|
+
}
|
|
255
|
+
for (let k = 0; k < components; k++) {
|
|
256
|
+
out[i * components + k] = column.data[from * components + k];
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
parts.data = out;
|
|
260
|
+
break;
|
|
261
|
+
}
|
|
262
|
+
case "bool": {
|
|
263
|
+
const out = new Uint32Array(bitmapWordCount(length)).fill(meta.fill === true ? 0xffffffff : 0);
|
|
264
|
+
for (let i = 0; i < length; i++) {
|
|
265
|
+
const from = indexMap[i];
|
|
266
|
+
if (from === INVALID_INDEX) {
|
|
267
|
+
continue;
|
|
268
|
+
}
|
|
269
|
+
if (bitmapGet(column.data, from)) {
|
|
270
|
+
bitmapSet(out, i);
|
|
271
|
+
}
|
|
272
|
+
else {
|
|
273
|
+
bitmapClear(out, i);
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
parts.data = out;
|
|
277
|
+
break;
|
|
278
|
+
}
|
|
279
|
+
case "dict": {
|
|
280
|
+
const code = typeof meta.fill === "string" ? column.codeOf(meta.fill) : INVALID_INDEX;
|
|
281
|
+
const fillCode = code === INVALID_INDEX ? 0 : code;
|
|
282
|
+
const out = new Uint32Array(length);
|
|
283
|
+
for (let i = 0; i < length; i++) {
|
|
284
|
+
const from = indexMap[i];
|
|
285
|
+
out[i] = from === INVALID_INDEX ? fillCode : column.codes[from];
|
|
286
|
+
}
|
|
287
|
+
parts.data = out;
|
|
288
|
+
break;
|
|
289
|
+
}
|
|
290
|
+
case "string": {
|
|
291
|
+
const fillText = typeof meta.fill === "string" ? meta.fill : "";
|
|
292
|
+
const strings = new Array(length);
|
|
293
|
+
for (let i = 0; i < length; i++) {
|
|
294
|
+
const from = indexMap[i];
|
|
295
|
+
strings[i] = from === INVALID_INDEX ? fillText : column.valueAt(from);
|
|
296
|
+
}
|
|
297
|
+
parts.offsets = null;
|
|
298
|
+
parts.utf8 = null;
|
|
299
|
+
parts.strings = strings;
|
|
300
|
+
break;
|
|
301
|
+
}
|
|
302
|
+
case "list": {
|
|
303
|
+
const { offsets, child } = column;
|
|
304
|
+
const newOffsets = new Uint32Array(length + 1);
|
|
305
|
+
let total = 0;
|
|
306
|
+
for (let i = 0; i < length; i++) {
|
|
307
|
+
const from = indexMap[i];
|
|
308
|
+
if (from !== INVALID_INDEX) {
|
|
309
|
+
total += offsets[from + 1] - offsets[from];
|
|
310
|
+
}
|
|
311
|
+
newOffsets[i + 1] = total;
|
|
312
|
+
}
|
|
313
|
+
const itemMap = new Uint32Array(total);
|
|
314
|
+
let at = 0;
|
|
315
|
+
for (let i = 0; i < length; i++) {
|
|
316
|
+
const from = indexMap[i];
|
|
317
|
+
if (from === INVALID_INDEX) {
|
|
318
|
+
continue;
|
|
319
|
+
}
|
|
320
|
+
for (let j = offsets[from]; j < offsets[from + 1]; j++) {
|
|
321
|
+
itemMap[at++] = j;
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
parts.offsets = newOffsets;
|
|
325
|
+
parts.child = gatherColumn(child, itemMap);
|
|
326
|
+
break;
|
|
327
|
+
}
|
|
328
|
+
case "json": {
|
|
329
|
+
const out = new Array(length);
|
|
330
|
+
for (let i = 0; i < length; i++) {
|
|
331
|
+
const from = indexMap[i];
|
|
332
|
+
out[i] = from === INVALID_INDEX ? undefined : column.values[from];
|
|
333
|
+
}
|
|
334
|
+
parts.values = out;
|
|
335
|
+
break;
|
|
336
|
+
}
|
|
337
|
+
default: {
|
|
338
|
+
const name = dtype;
|
|
339
|
+
throw new GraphFormatError("E_COLUMN_TYPE", `unknown dtype ${name}`, { dtype: name });
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
return createColumn(parts);
|
|
343
|
+
}
|
|
344
|
+
/**
|
|
345
|
+
* The NEW -> OLD index map equivalent to an OLD -> NEW remap: entries of the new space no old row
|
|
346
|
+
* maps to are INVALID_INDEX.
|
|
347
|
+
* @param remap - old index -> new index or INVALID_INDEX
|
|
348
|
+
* @param oldLength - the number of old rows to consider (entries beyond are ignored)
|
|
349
|
+
* @param newLength - the row count of the new space
|
|
350
|
+
* @returns the inverse map
|
|
351
|
+
*/
|
|
352
|
+
function invertRemap(remap, oldLength, newLength) {
|
|
353
|
+
const indexMap = new Uint32Array(newLength).fill(INVALID_INDEX);
|
|
354
|
+
const rows = Math.min(remap.length, oldLength);
|
|
355
|
+
for (let i = 0; i < rows; i++) {
|
|
356
|
+
const target = remap[i];
|
|
357
|
+
if (target === INVALID_INDEX) {
|
|
358
|
+
continue;
|
|
359
|
+
}
|
|
360
|
+
if (target >= newLength) {
|
|
361
|
+
throw new GraphFormatError("E_INDEX_RANGE", `remap[${i}] = ${target} is outside the new space of ${newLength} rows`, {
|
|
362
|
+
index: i,
|
|
363
|
+
found: target,
|
|
364
|
+
length: newLength,
|
|
365
|
+
});
|
|
366
|
+
}
|
|
367
|
+
indexMap[target] = i;
|
|
368
|
+
}
|
|
369
|
+
return indexMap;
|
|
370
|
+
}
|
|
371
|
+
/**
|
|
372
|
+
* Rewrite the values of an index-valued column through the remap of the space it references
|
|
373
|
+
* (design section 5.11): an in-range value maps to its new index; a dangling reference (mapped to
|
|
374
|
+
* INVALID_INDEX or out of range) becomes INVALID_INDEX with the row unset. For a list of u32 the
|
|
375
|
+
* dangling items are dropped and a row whose every item dangled becomes unset and empty. A column
|
|
376
|
+
* without refersTo is returned as it is.
|
|
377
|
+
* @param column - the column
|
|
378
|
+
* @param valueRemap - old index -> new index or INVALID_INDEX, over the referenced space
|
|
379
|
+
* @returns a new column when anything was rewritten; the same object otherwise
|
|
380
|
+
*/
|
|
381
|
+
export function remapReferences(column, valueRemap) {
|
|
382
|
+
if (column.meta.refersTo === null) {
|
|
383
|
+
return column;
|
|
384
|
+
}
|
|
385
|
+
const mapValue = (value) => {
|
|
386
|
+
if (value === INVALID_INDEX || value >= valueRemap.length) {
|
|
387
|
+
return INVALID_INDEX;
|
|
388
|
+
}
|
|
389
|
+
return valueRemap[value];
|
|
390
|
+
};
|
|
391
|
+
if (column.dtype === "u32") {
|
|
392
|
+
const { length } = column;
|
|
393
|
+
const data = new Uint32Array(length);
|
|
394
|
+
let validity = column.validity === null ? null : column.validity.slice();
|
|
395
|
+
let { nullCount } = column;
|
|
396
|
+
for (let row = 0; row < length; row++) {
|
|
397
|
+
const mapped = mapValue(column.data[row]);
|
|
398
|
+
data[row] = mapped;
|
|
399
|
+
if (mapped === INVALID_INDEX && (validity === null || bitmapGet(validity, row))) {
|
|
400
|
+
validity ?? (validity = makeBitmap(length, true));
|
|
401
|
+
bitmapClear(validity, row);
|
|
402
|
+
nullCount++;
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
const parts = {
|
|
406
|
+
...partsOf(column),
|
|
407
|
+
meta: gatheredMeta(column.meta, nullCount),
|
|
408
|
+
data,
|
|
409
|
+
validity,
|
|
410
|
+
nullCount,
|
|
411
|
+
};
|
|
412
|
+
return createColumn(parts);
|
|
413
|
+
}
|
|
414
|
+
if (column.dtype === "list" && column.child.dtype === "u32") {
|
|
415
|
+
const { length, offsets, child } = column;
|
|
416
|
+
const rows = new Array(length);
|
|
417
|
+
let validity = column.validity === null ? null : column.validity.slice();
|
|
418
|
+
let { nullCount } = column;
|
|
419
|
+
for (let row = 0; row < length; row++) {
|
|
420
|
+
const items = [];
|
|
421
|
+
const start = offsets[row];
|
|
422
|
+
const end = offsets[row + 1];
|
|
423
|
+
for (let j = start; j < end; j++) {
|
|
424
|
+
const mapped = mapValue(child.data[j]);
|
|
425
|
+
if (mapped !== INVALID_INDEX) {
|
|
426
|
+
items.push(mapped);
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
rows[row] = items;
|
|
430
|
+
if (end > start && items.length === 0 && (validity === null || bitmapGet(validity, row))) {
|
|
431
|
+
validity ?? (validity = makeBitmap(length, true));
|
|
432
|
+
bitmapClear(validity, row);
|
|
433
|
+
nullCount++;
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
const meta = gatheredMeta(column.meta, nullCount);
|
|
437
|
+
const rebuilt = columnOfValues(Object.freeze({ ...meta, nullable: true }), rows);
|
|
438
|
+
const parts = {
|
|
439
|
+
...partsOf(rebuilt),
|
|
440
|
+
meta,
|
|
441
|
+
validity,
|
|
442
|
+
nullCount,
|
|
443
|
+
};
|
|
444
|
+
return createColumn(parts);
|
|
445
|
+
}
|
|
446
|
+
throw new GraphFormatError("E_COLUMN_TYPE", `column "${column.meta.name}" has refersTo but is not u32 or a list of u32`, {
|
|
447
|
+
column: column.meta.name,
|
|
448
|
+
field: "refersTo",
|
|
449
|
+
});
|
|
450
|
+
}
|
|
451
|
+
/**
|
|
452
|
+
* Move a column's rows from an old index space to a new one through an OLD -> NEW remap, rewriting
|
|
453
|
+
* its values through `valueRemap` when it is an index-valued column (design section 5.11): rows
|
|
454
|
+
* mapped to INVALID_INDEX are dropped, rows of the new space no old row maps to are unset and hold
|
|
455
|
+
* the fill (the column becomes nullable if it was not), and dangling references become
|
|
456
|
+
* INVALID_INDEX with the row unset.
|
|
457
|
+
* @param column - the source column
|
|
458
|
+
* @param remap - old row -> new row or INVALID_INDEX
|
|
459
|
+
* @param newLength - the row count of the new space
|
|
460
|
+
* @param valueRemap - the remap of the space the column's values reference, or null to leave values alone
|
|
461
|
+
* @returns a new column of `newLength` rows
|
|
462
|
+
*/
|
|
463
|
+
export function remapColumnWith(column, remap, newLength, valueRemap) {
|
|
464
|
+
if (remap.length !== column.length) {
|
|
465
|
+
throw new GraphFormatError("E_COLUMN_LENGTH", `remap has ${remap.length} entries for a column of ${column.length} rows`, { column: column.meta.name, expected: column.length, found: remap.length });
|
|
466
|
+
}
|
|
467
|
+
const gathered = gatherColumn(column, invertRemap(remap, column.length, newLength));
|
|
468
|
+
return valueRemap === null ? gathered : remapReferences(gathered, valueRemap);
|
|
469
|
+
}
|
|
470
|
+
/**
|
|
471
|
+
* Move a column's rows through an OLD -> NEW remap and, when the column refers to its OWN index
|
|
472
|
+
* space (a node column with `refersTo: "node"` such as `parent`, an edge column with `refersTo:
|
|
473
|
+
* "edge"` such as `pair`), rewrite its values through the SAME remap (design sections 5.11 and
|
|
474
|
+
* 12.2). A column whose values reference the OTHER space (a node column referring to edges) has its
|
|
475
|
+
* rows moved and its values left untouched, because `remap` says nothing about that space; the
|
|
476
|
+
* internal remapColumnWith() / remapTable() take a second remap for it.
|
|
477
|
+
* @param column - the source column
|
|
478
|
+
* @param remap - old row -> new row or INVALID_INDEX
|
|
479
|
+
* @param newLength - the row count of the new space
|
|
480
|
+
* @returns a new column of `newLength` rows
|
|
481
|
+
*/
|
|
482
|
+
export function remapColumn(column, remap, newLength) {
|
|
483
|
+
const { refersTo, domain } = column.meta;
|
|
484
|
+
const ownSpace = refersTo !== null && refersTo === domain;
|
|
485
|
+
return remapColumnWith(column, remap, newLength, ownSpace ? remap : null);
|
|
486
|
+
}
|
|
487
|
+
/**
|
|
488
|
+
* Change the stride of an interleaved f32 array (design section 5.2, the generic stride helper):
|
|
489
|
+
* every row of `from` values becomes a row of `to` values, extra lanes filled with `fill` and
|
|
490
|
+
* surplus lanes dropped. A 2D layout result expands to the 3-component position column with
|
|
491
|
+
* `withComponents(xy, 2, 3, 0)`; the inverse drops `z`. Returns `data` itself when `from === to`.
|
|
492
|
+
* @param data - the interleaved values, `rows * from` long
|
|
493
|
+
* @param from - values per row of `data`, 1..16
|
|
494
|
+
* @param to - values per row of the result, 1..16
|
|
495
|
+
* @param fill - the value of the lanes `to` adds beyond `from`
|
|
496
|
+
* @returns a new array of `rows * to` values (the input when the stride is unchanged)
|
|
497
|
+
*/
|
|
498
|
+
export function withComponents(data, from, to, fill) {
|
|
499
|
+
for (const [field, value] of [
|
|
500
|
+
["from", from],
|
|
501
|
+
["to", to],
|
|
502
|
+
]) {
|
|
503
|
+
if (!Number.isInteger(value) || value < 1 || value > 16) {
|
|
504
|
+
throw new GraphFormatError("E_COLUMN_TYPE", `${field} must be an integer in 1..16, found ${value}`, {
|
|
505
|
+
field,
|
|
506
|
+
found: value,
|
|
507
|
+
});
|
|
508
|
+
}
|
|
509
|
+
}
|
|
510
|
+
checkComponents(from, data);
|
|
511
|
+
if (from === to) {
|
|
512
|
+
return data;
|
|
513
|
+
}
|
|
514
|
+
const rows = data.length / from;
|
|
515
|
+
const out = new Float32Array(rows * to);
|
|
516
|
+
const keep = Math.min(from, to);
|
|
517
|
+
if (to > from && fill !== 0) {
|
|
518
|
+
out.fill(fill);
|
|
519
|
+
}
|
|
520
|
+
for (let row = 0; row < rows; row++) {
|
|
521
|
+
const src = row * from;
|
|
522
|
+
const dst = row * to;
|
|
523
|
+
for (let k = 0; k < keep; k++) {
|
|
524
|
+
out[dst + k] = data[src + k];
|
|
525
|
+
}
|
|
526
|
+
}
|
|
527
|
+
return out;
|
|
528
|
+
}
|
|
529
|
+
/**
|
|
530
|
+
* The value remap that applies to a column, if any.
|
|
531
|
+
* @param meta - the column metadata
|
|
532
|
+
* @param refs - the reference remaps
|
|
533
|
+
* @returns the remap of the referenced space, or null
|
|
534
|
+
*/
|
|
535
|
+
function valueRemapFor(meta, refs) {
|
|
536
|
+
if (meta.refersTo === "node") {
|
|
537
|
+
return refs.node;
|
|
538
|
+
}
|
|
539
|
+
if (meta.refersTo === "edge") {
|
|
540
|
+
return refs.edge;
|
|
541
|
+
}
|
|
542
|
+
return null;
|
|
543
|
+
}
|
|
544
|
+
/**
|
|
545
|
+
* Remap every column of a table (freeze step 10, the compaction case; extension tables with
|
|
546
|
+
* `rowRemap` null): rows move through `rowRemap` when given, and every refersTo column's values are
|
|
547
|
+
* rewritten through the remap of the space it references. The result is a new table; the source is
|
|
548
|
+
* untouched.
|
|
549
|
+
* @param table - the source table
|
|
550
|
+
* @param rowRemap - old row -> new row or INVALID_INDEX; null when the table's rows are unchanged
|
|
551
|
+
* @param newLength - the row count of the new table (ignored, and equal to table.rowCount, when rowRemap is null)
|
|
552
|
+
* @param refs - the node and edge remaps for index-valued columns
|
|
553
|
+
* @returns the remapped table
|
|
554
|
+
*/
|
|
555
|
+
export function remapTable(table, rowRemap, newLength, refs) {
|
|
556
|
+
const rowCount = rowRemap === null ? table.rowCount : newLength;
|
|
557
|
+
const columns = [];
|
|
558
|
+
for (const column of table) {
|
|
559
|
+
const valueRemap = valueRemapFor(column.meta, refs);
|
|
560
|
+
let out = column;
|
|
561
|
+
if (rowRemap !== null) {
|
|
562
|
+
out = remapColumnWith(column, rowRemap, newLength, valueRemap);
|
|
563
|
+
}
|
|
564
|
+
else if (valueRemap !== null) {
|
|
565
|
+
out = remapReferences(column, valueRemap);
|
|
566
|
+
}
|
|
567
|
+
columns.push(out);
|
|
568
|
+
}
|
|
569
|
+
return new AttributeTable({ domain: table.domain, rowCount, columns });
|
|
570
|
+
}
|
|
571
|
+
/**
|
|
572
|
+
* Gather every column of a table through a NEW -> OLD index map (derived graphs: `nodeOrigin` /
|
|
573
|
+
* `edgeOrigin`), rewriting refersTo values through the remaps of the spaces they reference.
|
|
574
|
+
* @param table - the source table
|
|
575
|
+
* @param indexMap - new row -> old row
|
|
576
|
+
* @param refs - the node and edge remaps for index-valued columns
|
|
577
|
+
* @returns the gathered table of `indexMap.length` rows
|
|
578
|
+
*/
|
|
579
|
+
export function gatherTable(table, indexMap, refs) {
|
|
580
|
+
const columns = [];
|
|
581
|
+
for (const column of table) {
|
|
582
|
+
const gathered = gatherColumn(column, indexMap);
|
|
583
|
+
const valueRemap = valueRemapFor(column.meta, refs);
|
|
584
|
+
columns.push(valueRemap === null ? gathered : remapReferences(gathered, valueRemap));
|
|
585
|
+
}
|
|
586
|
+
return new AttributeTable({ domain: table.domain, rowCount: indexMap.length, columns });
|
|
587
|
+
}
|
|
588
|
+
//# sourceMappingURL=remap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remap.js","sourceRoot":"","sources":["../../../src/columns/remap.ts"],"names":[],"mappings":"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"}
|