@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.
Files changed (224) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +216 -43
  3. package/dist/graph-format.d.ts +1 -0
  4. package/dist/graph-format.d.ts.map +1 -0
  5. package/dist/graph-format.js +15798 -0
  6. package/dist/graph-format.js.map +1 -0
  7. package/dist/src/builder/arena.d.ts +85 -0
  8. package/dist/src/builder/arena.d.ts.map +1 -0
  9. package/dist/src/builder/arena.js +154 -0
  10. package/dist/src/builder/arena.js.map +1 -0
  11. package/dist/src/builder/compact.d.ts +515 -0
  12. package/dist/src/builder/compact.d.ts.map +1 -0
  13. package/dist/src/builder/compact.js +1553 -0
  14. package/dist/src/builder/compact.js.map +1 -0
  15. package/dist/src/builder/counting-sort.d.ts +96 -0
  16. package/dist/src/builder/counting-sort.d.ts.map +1 -0
  17. package/dist/src/builder/counting-sort.js +430 -0
  18. package/dist/src/builder/counting-sort.js.map +1 -0
  19. package/dist/src/builder/freeze.d.ts +72 -0
  20. package/dist/src/builder/freeze.d.ts.map +1 -0
  21. package/dist/src/builder/freeze.js +548 -0
  22. package/dist/src/builder/freeze.js.map +1 -0
  23. package/dist/src/builder/graph-builder.d.ts +602 -0
  24. package/dist/src/builder/graph-builder.d.ts.map +1 -0
  25. package/dist/src/builder/graph-builder.js +1940 -0
  26. package/dist/src/builder/graph-builder.js.map +1 -0
  27. package/dist/src/builder/options.d.ts +16 -0
  28. package/dist/src/builder/options.d.ts.map +1 -0
  29. package/dist/src/builder/options.js +21 -0
  30. package/dist/src/builder/options.js.map +1 -0
  31. package/dist/src/columns/bitmap.d.ts +96 -0
  32. package/dist/src/columns/bitmap.d.ts.map +1 -0
  33. package/dist/src/columns/bitmap.js +184 -0
  34. package/dist/src/columns/bitmap.js.map +1 -0
  35. package/dist/src/columns/column.d.ts +220 -0
  36. package/dist/src/columns/column.d.ts.map +1 -0
  37. package/dist/src/columns/column.js +2109 -0
  38. package/dist/src/columns/column.js.map +1 -0
  39. package/dist/src/columns/dictionary.d.ts +60 -0
  40. package/dist/src/columns/dictionary.d.ts.map +1 -0
  41. package/dist/src/columns/dictionary.js +102 -0
  42. package/dist/src/columns/dictionary.js.map +1 -0
  43. package/dist/src/columns/growable.d.ts +198 -0
  44. package/dist/src/columns/growable.d.ts.map +1 -0
  45. package/dist/src/columns/growable.js +296 -0
  46. package/dist/src/columns/growable.js.map +1 -0
  47. package/dist/src/columns/infer.d.ts +121 -0
  48. package/dist/src/columns/infer.d.ts.map +1 -0
  49. package/dist/src/columns/infer.js +268 -0
  50. package/dist/src/columns/infer.js.map +1 -0
  51. package/dist/src/columns/remap.d.ts +143 -0
  52. package/dist/src/columns/remap.d.ts.map +1 -0
  53. package/dist/src/columns/remap.js +588 -0
  54. package/dist/src/columns/remap.js.map +1 -0
  55. package/dist/src/columns/table.d.ts +184 -0
  56. package/dist/src/columns/table.d.ts.map +1 -0
  57. package/dist/src/columns/table.js +485 -0
  58. package/dist/src/columns/table.js.map +1 -0
  59. package/dist/src/constants.d.ts +34 -0
  60. package/dist/src/constants.d.ts.map +1 -0
  61. package/dist/src/constants.js +79 -0
  62. package/dist/src/constants.js.map +1 -0
  63. package/dist/src/errors.d.ts +76 -0
  64. package/dist/src/errors.d.ts.map +1 -0
  65. package/dist/src/errors.js +32 -0
  66. package/dist/src/errors.js.map +1 -0
  67. package/dist/src/ids/edge-id-index.d.ts +77 -0
  68. package/dist/src/ids/edge-id-index.d.ts.map +1 -0
  69. package/dist/src/ids/edge-id-index.js +155 -0
  70. package/dist/src/ids/edge-id-index.js.map +1 -0
  71. package/dist/src/ids/node-id-map.d.ts +280 -0
  72. package/dist/src/ids/node-id-map.d.ts.map +1 -0
  73. package/dist/src/ids/node-id-map.js +1139 -0
  74. package/dist/src/ids/node-id-map.js.map +1 -0
  75. package/dist/src/ids/string-store.d.ts +219 -0
  76. package/dist/src/ids/string-store.d.ts.map +1 -0
  77. package/dist/src/ids/string-store.js +526 -0
  78. package/dist/src/ids/string-store.js.map +1 -0
  79. package/dist/src/index.d.ts +30 -0
  80. package/dist/src/index.d.ts.map +1 -0
  81. package/dist/src/index.js +29 -0
  82. package/dist/src/index.js.map +1 -0
  83. package/dist/src/populate/from-csr.d.ts +61 -0
  84. package/dist/src/populate/from-csr.d.ts.map +1 -0
  85. package/dist/src/populate/from-csr.js +706 -0
  86. package/dist/src/populate/from-csr.js.map +1 -0
  87. package/dist/src/populate/from-edge-arrays.d.ts +51 -0
  88. package/dist/src/populate/from-edge-arrays.d.ts.map +1 -0
  89. package/dist/src/populate/from-edge-arrays.js +217 -0
  90. package/dist/src/populate/from-edge-arrays.js.map +1 -0
  91. package/dist/src/populate/from-records.d.ts +51 -0
  92. package/dist/src/populate/from-records.d.ts.map +1 -0
  93. package/dist/src/populate/from-records.js +447 -0
  94. package/dist/src/populate/from-records.js.map +1 -0
  95. package/dist/src/snapshot/derived.d.ts +211 -0
  96. package/dist/src/snapshot/derived.d.ts.map +1 -0
  97. package/dist/src/snapshot/derived.js +1254 -0
  98. package/dist/src/snapshot/derived.js.map +1 -0
  99. package/dist/src/snapshot/graph-meta.d.ts +23 -0
  100. package/dist/src/snapshot/graph-meta.d.ts.map +1 -0
  101. package/dist/src/snapshot/graph-meta.js +159 -0
  102. package/dist/src/snapshot/graph-meta.js.map +1 -0
  103. package/dist/src/snapshot/graph-snapshot.d.ts +509 -0
  104. package/dist/src/snapshot/graph-snapshot.d.ts.map +1 -0
  105. package/dist/src/snapshot/graph-snapshot.js +1247 -0
  106. package/dist/src/snapshot/graph-snapshot.js.map +1 -0
  107. package/dist/src/snapshot/hash.d.ts +90 -0
  108. package/dist/src/snapshot/hash.d.ts.map +1 -0
  109. package/dist/src/snapshot/hash.js +228 -0
  110. package/dist/src/snapshot/hash.js.map +1 -0
  111. package/dist/src/snapshot/queries.d.ts +74 -0
  112. package/dist/src/snapshot/queries.d.ts.map +1 -0
  113. package/dist/src/snapshot/queries.js +131 -0
  114. package/dist/src/snapshot/queries.js.map +1 -0
  115. package/dist/src/snapshot/validate.d.ts +192 -0
  116. package/dist/src/snapshot/validate.d.ts.map +1 -0
  117. package/dist/src/snapshot/validate.js +990 -0
  118. package/dist/src/snapshot/validate.js.map +1 -0
  119. package/dist/src/snapshot/views.d.ts +274 -0
  120. package/dist/src/snapshot/views.d.ts.map +1 -0
  121. package/dist/src/snapshot/views.js +856 -0
  122. package/dist/src/snapshot/views.js.map +1 -0
  123. package/dist/src/types/builder.d.ts +456 -0
  124. package/dist/src/types/builder.d.ts.map +1 -0
  125. package/dist/src/types/builder.js +11 -0
  126. package/dist/src/types/builder.js.map +1 -0
  127. package/dist/src/types/columns.d.ts +615 -0
  128. package/dist/src/types/columns.d.ts.map +1 -0
  129. package/dist/src/types/columns.js +14 -0
  130. package/dist/src/types/columns.js.map +1 -0
  131. package/dist/src/types/index.d.ts +14 -0
  132. package/dist/src/types/index.d.ts.map +1 -0
  133. package/dist/src/types/index.js +11 -0
  134. package/dist/src/types/index.js.map +1 -0
  135. package/dist/src/types/internal.d.ts +172 -0
  136. package/dist/src/types/internal.d.ts.map +1 -0
  137. package/dist/src/types/internal.js +13 -0
  138. package/dist/src/types/internal.js.map +1 -0
  139. package/dist/src/types/snapshot.d.ts +801 -0
  140. package/dist/src/types/snapshot.d.ts.map +1 -0
  141. package/dist/src/types/snapshot.js +14 -0
  142. package/dist/src/types/snapshot.js.map +1 -0
  143. package/dist/src/types/wire.d.ts +196 -0
  144. package/dist/src/types/wire.d.ts.map +1 -0
  145. package/dist/src/types/wire.js +8 -0
  146. package/dist/src/types/wire.js.map +1 -0
  147. package/dist/src/util/mask.d.ts +55 -0
  148. package/dist/src/util/mask.d.ts.map +1 -0
  149. package/dist/src/util/mask.js +71 -0
  150. package/dist/src/util/mask.js.map +1 -0
  151. package/dist/src/util/options.d.ts +22 -0
  152. package/dist/src/util/options.d.ts.map +1 -0
  153. package/dist/src/util/options.js +49 -0
  154. package/dist/src/util/options.js.map +1 -0
  155. package/dist/src/util/shared-buffers.d.ts +42 -0
  156. package/dist/src/util/shared-buffers.d.ts.map +1 -0
  157. package/dist/src/util/shared-buffers.js +52 -0
  158. package/dist/src/util/shared-buffers.js.map +1 -0
  159. package/dist/src/util/typed-array.d.ts +205 -0
  160. package/dist/src/util/typed-array.d.ts.map +1 -0
  161. package/dist/src/util/typed-array.js +289 -0
  162. package/dist/src/util/typed-array.js.map +1 -0
  163. package/dist/src/wire/bytes.d.ts +69 -0
  164. package/dist/src/wire/bytes.d.ts.map +1 -0
  165. package/dist/src/wire/bytes.js +361 -0
  166. package/dist/src/wire/bytes.js.map +1 -0
  167. package/dist/src/wire/carried-views.d.ts +111 -0
  168. package/dist/src/wire/carried-views.d.ts.map +1 -0
  169. package/dist/src/wire/carried-views.js +286 -0
  170. package/dist/src/wire/carried-views.js.map +1 -0
  171. package/dist/src/wire/from-wire.d.ts +144 -0
  172. package/dist/src/wire/from-wire.d.ts.map +1 -0
  173. package/dist/src/wire/from-wire.js +1425 -0
  174. package/dist/src/wire/from-wire.js.map +1 -0
  175. package/dist/src/wire/to-wire.d.ts +171 -0
  176. package/dist/src/wire/to-wire.d.ts.map +1 -0
  177. package/dist/src/wire/to-wire.js +652 -0
  178. package/dist/src/wire/to-wire.js.map +1 -0
  179. package/dist/tsconfig.build.tsbuildinfo +1 -0
  180. package/package.json +72 -7
  181. package/src/builder/arena.ts +192 -0
  182. package/src/builder/compact.ts +1811 -0
  183. package/src/builder/counting-sort.ts +506 -0
  184. package/src/builder/freeze.ts +689 -0
  185. package/src/builder/graph-builder.ts +2264 -0
  186. package/src/builder/options.ts +29 -0
  187. package/src/columns/bitmap.ts +196 -0
  188. package/src/columns/column.ts +2574 -0
  189. package/src/columns/dictionary.ts +114 -0
  190. package/src/columns/growable.ts +350 -0
  191. package/src/columns/infer.ts +285 -0
  192. package/src/columns/remap.ts +663 -0
  193. package/src/columns/table.ts +568 -0
  194. package/src/constants.ts +89 -0
  195. package/src/errors.ts +115 -0
  196. package/src/ids/edge-id-index.ts +179 -0
  197. package/src/ids/node-id-map.ts +1340 -0
  198. package/src/ids/string-store.ts +589 -0
  199. package/src/index.ts +139 -0
  200. package/src/lib-resizable-array-buffer.d.ts +34 -0
  201. package/src/populate/from-csr.ts +802 -0
  202. package/src/populate/from-edge-arrays.ts +257 -0
  203. package/src/populate/from-records.ts +536 -0
  204. package/src/snapshot/derived.ts +1486 -0
  205. package/src/snapshot/graph-meta.ts +167 -0
  206. package/src/snapshot/graph-snapshot.ts +1503 -0
  207. package/src/snapshot/hash.ts +241 -0
  208. package/src/snapshot/queries.ts +136 -0
  209. package/src/snapshot/validate.ts +1108 -0
  210. package/src/snapshot/views.ts +943 -0
  211. package/src/types/builder.ts +480 -0
  212. package/src/types/columns.ts +727 -0
  213. package/src/types/index.ts +14 -0
  214. package/src/types/internal.ts +195 -0
  215. package/src/types/snapshot.ts +886 -0
  216. package/src/types/wire.ts +207 -0
  217. package/src/util/mask.ts +89 -0
  218. package/src/util/options.ts +57 -0
  219. package/src/util/shared-buffers.ts +56 -0
  220. package/src/util/typed-array.ts +371 -0
  221. package/src/wire/bytes.ts +440 -0
  222. package/src/wire/carried-views.ts +327 -0
  223. package/src/wire/from-wire.ts +1690 -0
  224. 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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"}