@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,286 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Content checks of the views a wire manifest carries (`includeViews`, design sections 9.1 and 9.5),
|
|
3
|
+
* run at the "structure" level before a carried view is installed on the receiver. Every view is a
|
|
4
|
+
* pure function of the core (design section 7.2), so each check is exact: the index views are
|
|
5
|
+
* compared with what the core says arc by arc in O(n + m) without allocating a second copy, and the
|
|
6
|
+
* four f64 views are compared with the snapshot's own computation. A view that disagrees is
|
|
7
|
+
* E_INVALID_SNAPSHOT with `details.invariant` "I2" (a corrupt index array) or "I17" (a corrupt
|
|
8
|
+
* value array) and `details.view` naming it. At "none" nothing is checked (the manifest is trusted,
|
|
9
|
+
* design section 9.5); at "full" carried views are never installed.
|
|
10
|
+
*/
|
|
11
|
+
import { invariantViolation } from "../snapshot/validate.js";
|
|
12
|
+
import { DEGREE_TIER_HIGH, DEGREE_TIER_MID, rowLengths } from "../snapshot/views.js";
|
|
13
|
+
/** The per-arc facts every index-view check reads, computed once per manifest. */
|
|
14
|
+
export class CoreFacts {
|
|
15
|
+
/**
|
|
16
|
+
* Expand the core once.
|
|
17
|
+
* @param snapshot - the snapshot
|
|
18
|
+
*/
|
|
19
|
+
constructor(snapshot) {
|
|
20
|
+
const { nodeCount, arcCount, rowPtr, colIdx, directed } = snapshot;
|
|
21
|
+
const arcRow = new Uint32Array(arcCount);
|
|
22
|
+
const loops = new Uint32Array(nodeCount);
|
|
23
|
+
const inDegree = directed ? new Uint32Array(nodeCount) : rowLengths(rowPtr, nodeCount);
|
|
24
|
+
for (let u = 0; u < nodeCount; u++) {
|
|
25
|
+
const end = rowPtr[u + 1];
|
|
26
|
+
for (let a = rowPtr[u]; a < end; a++) {
|
|
27
|
+
arcRow[a] = u;
|
|
28
|
+
const v = colIdx[a];
|
|
29
|
+
if (v === u) {
|
|
30
|
+
loops[u]++;
|
|
31
|
+
}
|
|
32
|
+
if (directed) {
|
|
33
|
+
inDegree[v]++;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
this.arcRow = arcRow;
|
|
38
|
+
this.loops = loops;
|
|
39
|
+
this.inDegree = inDegree;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* The exclusive prefix sum of the in-degrees (the reverse rowPtr).
|
|
43
|
+
* @returns nodeCount + 1 offsets
|
|
44
|
+
*/
|
|
45
|
+
inDegreePrefix() {
|
|
46
|
+
const n = this.inDegree.length;
|
|
47
|
+
const out = new Uint32Array(n + 1);
|
|
48
|
+
for (let u = 0; u < n; u++) {
|
|
49
|
+
out[u + 1] = out[u] + this.inDegree[u];
|
|
50
|
+
}
|
|
51
|
+
return out;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* The error for a carried view that disagrees with the core.
|
|
56
|
+
* @param view - the view name
|
|
57
|
+
* @param member - the member array
|
|
58
|
+
* @param index - the offending index
|
|
59
|
+
* @param invariant - "I2" for an index array, "I17" for a value array
|
|
60
|
+
* @returns the error
|
|
61
|
+
*/
|
|
62
|
+
function viewError(view, member, index, invariant) {
|
|
63
|
+
return invariantViolation(invariant, `carried view ${view}.${member} disagrees with the core at ${index}`, {
|
|
64
|
+
view,
|
|
65
|
+
member,
|
|
66
|
+
index,
|
|
67
|
+
reason: "view",
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Compare two arrays element by element (NaN equal to NaN).
|
|
72
|
+
* @param view - the view name
|
|
73
|
+
* @param member - the member name
|
|
74
|
+
* @param found - the carried array
|
|
75
|
+
* @param expected - the truth
|
|
76
|
+
* @param invariant - the invariant to report
|
|
77
|
+
*/
|
|
78
|
+
function expectSame(view, member, found, expected, invariant) {
|
|
79
|
+
for (let i = 0; i < expected.length; i++) {
|
|
80
|
+
if (!Object.is(found[i], expected[i]) && found[i] !== expected[i]) {
|
|
81
|
+
throw viewError(view, member, i, invariant);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Check that an array is a permutation of 0..length-1.
|
|
87
|
+
* @param view - the view name
|
|
88
|
+
* @param member - the member name
|
|
89
|
+
* @param perm - the array
|
|
90
|
+
*/
|
|
91
|
+
function expectPermutation(view, member, perm) {
|
|
92
|
+
const seen = new Uint8Array(perm.length);
|
|
93
|
+
for (let i = 0; i < perm.length; i++) {
|
|
94
|
+
const p = perm[i];
|
|
95
|
+
if (p >= perm.length || seen[p] === 1) {
|
|
96
|
+
throw viewError(view, member, i, "I2");
|
|
97
|
+
}
|
|
98
|
+
seen[p] = 1;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* outDegree: the row lengths.
|
|
103
|
+
* @param snapshot - the snapshot
|
|
104
|
+
* @param data - the carried array
|
|
105
|
+
*/
|
|
106
|
+
export function checkOutDegree(snapshot, data) {
|
|
107
|
+
expectSame("outDegree", "data", data, rowLengths(snapshot.rowPtr, snapshot.nodeCount), "I2");
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* inDegree (directed): the in-arc counts.
|
|
111
|
+
* @param facts - the core facts
|
|
112
|
+
* @param data - the carried array
|
|
113
|
+
*/
|
|
114
|
+
export function checkInDegree(facts, data) {
|
|
115
|
+
expectSame("inDegree", "data", data, facts.inDegree, "I2");
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* degree: outDegree + inDegree (directed) or outDegree + loops (undirected), design section 3.4.
|
|
119
|
+
* @param snapshot - the snapshot
|
|
120
|
+
* @param facts - the core facts
|
|
121
|
+
* @param data - the carried array
|
|
122
|
+
*/
|
|
123
|
+
export function checkDegree(snapshot, facts, data) {
|
|
124
|
+
const out = rowLengths(snapshot.rowPtr, snapshot.nodeCount);
|
|
125
|
+
const add = snapshot.directed ? facts.inDegree : facts.loops;
|
|
126
|
+
for (let u = 0; u < out.length; u++) {
|
|
127
|
+
if (data[u] !== out[u] + add[u]) {
|
|
128
|
+
throw viewError("degree", "data", u, "I2");
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* selfLoopsPerNode: the loop arcs per row.
|
|
134
|
+
* @param facts - the core facts
|
|
135
|
+
* @param data - the carried array
|
|
136
|
+
*/
|
|
137
|
+
export function checkSelfLoopsPerNode(facts, data) {
|
|
138
|
+
expectSame("selfLoopsPerNode", "data", data, facts.loops, "I2");
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* selfLoopArcs: ascending arcs, each a loop; with the length fixed to selfLoopCount that is exact.
|
|
142
|
+
* @param snapshot - the snapshot
|
|
143
|
+
* @param facts - the core facts
|
|
144
|
+
* @param data - the carried array
|
|
145
|
+
*/
|
|
146
|
+
export function checkSelfLoopArcs(snapshot, facts, data) {
|
|
147
|
+
const { colIdx, arcCount } = snapshot;
|
|
148
|
+
for (let i = 0; i < data.length; i++) {
|
|
149
|
+
const a = data[i];
|
|
150
|
+
if (a >= arcCount || colIdx[a] !== facts.arcRow[a] || (i > 0 && a <= data[i - 1])) {
|
|
151
|
+
throw viewError("selfLoopArcs", "data", i, "I2");
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* coo.src: the row of every arc.
|
|
157
|
+
* @param facts - the core facts
|
|
158
|
+
* @param src - the carried array
|
|
159
|
+
*/
|
|
160
|
+
export function checkCooSrc(facts, src) {
|
|
161
|
+
expectSame("coo", "src", src, facts.arcRow, "I2");
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* edgeList: `src[e]` is the row of `edgeToArc[e]`, `dst[e]` its target, `weights[e]` its weight.
|
|
165
|
+
* @param snapshot - the snapshot
|
|
166
|
+
* @param facts - the core facts
|
|
167
|
+
* @param src - the carried sources
|
|
168
|
+
* @param dst - the carried targets, or null when colIdx is aliased
|
|
169
|
+
* @param weights - the carried weights, or null when aliased or unweighted
|
|
170
|
+
*/
|
|
171
|
+
export function checkEdgeList(snapshot, facts, src, dst, weights) {
|
|
172
|
+
const { edgeCount, edgeToArc, colIdx, arcCount } = snapshot;
|
|
173
|
+
const forward = snapshot.weights;
|
|
174
|
+
for (let e = 0; e < edgeCount; e++) {
|
|
175
|
+
const a = edgeToArc[e];
|
|
176
|
+
if (a >= arcCount || src[e] !== facts.arcRow[a]) {
|
|
177
|
+
throw viewError("edgeList", "src", e, "I2");
|
|
178
|
+
}
|
|
179
|
+
if (dst !== null && dst[e] !== colIdx[a]) {
|
|
180
|
+
throw viewError("edgeList", "dst", e, "I2");
|
|
181
|
+
}
|
|
182
|
+
if (weights !== null && forward !== null && !Object.is(weights[e], forward[a])) {
|
|
183
|
+
throw viewError("edgeList", "weights", e, "I17");
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* mate (undirected): an involution pairing the two arcs of every non-loop edge (invariant I7) and
|
|
189
|
+
* fixing every loop arc.
|
|
190
|
+
* @param snapshot - the snapshot
|
|
191
|
+
* @param facts - the core facts
|
|
192
|
+
* @param mate - the carried array
|
|
193
|
+
*/
|
|
194
|
+
export function checkMate(snapshot, facts, mate) {
|
|
195
|
+
const { arcCount, arcToEdge, colIdx } = snapshot;
|
|
196
|
+
for (let a = 0; a < arcCount; a++) {
|
|
197
|
+
const m = mate[a];
|
|
198
|
+
const loop = colIdx[a] === facts.arcRow[a];
|
|
199
|
+
if (m >= arcCount || mate[m] !== a || arcToEdge[m] !== arcToEdge[a] || (m === a) !== loop) {
|
|
200
|
+
throw viewError("mate", "data", a, "I2");
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* degreeOrder / reverseDegreeOrder: a permutation ordered by non-increasing degree with ties in
|
|
206
|
+
* ascending node index, and the cuGraph tier offsets of design section 7.2.
|
|
207
|
+
* @param name - the view name
|
|
208
|
+
* @param degree - the degree of every node the order sorts by
|
|
209
|
+
* @param perm - the carried permutation
|
|
210
|
+
* @param segmentOffsets - the carried tier offsets
|
|
211
|
+
*/
|
|
212
|
+
export function checkDegreeOrder(name, degree, perm, segmentOffsets) {
|
|
213
|
+
expectPermutation(name, "perm", perm);
|
|
214
|
+
let hi = 0;
|
|
215
|
+
let mid = 0;
|
|
216
|
+
let low = 0;
|
|
217
|
+
for (let i = 0; i < perm.length; i++) {
|
|
218
|
+
const d = degree[perm[i]];
|
|
219
|
+
if (i > 0) {
|
|
220
|
+
const previous = degree[perm[i - 1]];
|
|
221
|
+
if (d > previous || (d === previous && perm[i] < perm[i - 1])) {
|
|
222
|
+
throw viewError(name, "perm", i, "I2");
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
if (d >= DEGREE_TIER_HIGH) {
|
|
226
|
+
hi++;
|
|
227
|
+
}
|
|
228
|
+
else if (d >= DEGREE_TIER_MID) {
|
|
229
|
+
mid++;
|
|
230
|
+
}
|
|
231
|
+
else if (d >= 1) {
|
|
232
|
+
low++;
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
const expected = [0, hi, hi + mid, hi + mid + low, perm.length];
|
|
236
|
+
expectSame(name, "segmentOffsets", segmentOffsets, expected, "I2");
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* reverse (directed): the in-adjacency with rows sorted by source and ties by forward arc, `fwdArc`
|
|
240
|
+
* a permutation of the arcs, `colIdx` the sources, `weights` the forward weights gathered.
|
|
241
|
+
* @param snapshot - the snapshot
|
|
242
|
+
* @param facts - the core facts
|
|
243
|
+
* @param reverse - the carried view
|
|
244
|
+
*/
|
|
245
|
+
export function checkReverse(snapshot, facts, reverse) {
|
|
246
|
+
const { nodeCount, arcCount, colIdx } = snapshot;
|
|
247
|
+
const forward = snapshot.weights;
|
|
248
|
+
const { rowPtr, fwdArc } = reverse;
|
|
249
|
+
const revIdx = reverse.colIdx;
|
|
250
|
+
const revWeights = reverse.weights;
|
|
251
|
+
if (rowPtr[0] !== 0 || rowPtr[nodeCount] !== arcCount) {
|
|
252
|
+
throw viewError("reverse", "rowPtr", 0, "I2");
|
|
253
|
+
}
|
|
254
|
+
expectSame("reverse", "rowPtr", rowPtr, facts.inDegreePrefix(), "I2");
|
|
255
|
+
expectPermutation("reverse", "fwdArc", fwdArc);
|
|
256
|
+
for (let v = 0; v < nodeCount; v++) {
|
|
257
|
+
const end = rowPtr[v + 1];
|
|
258
|
+
for (let k = rowPtr[v]; k < end; k++) {
|
|
259
|
+
const a = fwdArc[k];
|
|
260
|
+
const source = facts.arcRow[a];
|
|
261
|
+
if (colIdx[a] !== v || revIdx[k] !== source) {
|
|
262
|
+
throw viewError("reverse", "colIdx", k, "I2");
|
|
263
|
+
}
|
|
264
|
+
if (k > rowPtr[v]) {
|
|
265
|
+
const previous = fwdArc[k - 1];
|
|
266
|
+
const previousSource = facts.arcRow[previous];
|
|
267
|
+
if (source < previousSource || (source === previousSource && a <= previous)) {
|
|
268
|
+
throw viewError("reverse", "fwdArc", k, "I2");
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
if (revWeights !== null && forward !== null && !Object.is(revWeights[k], forward[a])) {
|
|
272
|
+
throw viewError("reverse", "weights", k, "I17");
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
/**
|
|
278
|
+
* An f64 view: compared with the snapshot's own computation.
|
|
279
|
+
* @param name - the view name
|
|
280
|
+
* @param found - the carried array
|
|
281
|
+
* @param expected - the computed truth
|
|
282
|
+
*/
|
|
283
|
+
export function checkF64View(name, found, expected) {
|
|
284
|
+
expectSame(name, "data", found, expected, "I17");
|
|
285
|
+
}
|
|
286
|
+
//# sourceMappingURL=carried-views.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"carried-views.js","sourceRoot":"","sources":["../../../src/wire/carried-views.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The wire decoder (design sections 4.5, 5.9, 9.1, 9.5 and 11.3): `fromWire()` rebuilds a snapshot
|
|
3
|
+
* from a WireSnapshot, and `decodeManifest()` is the shared reader the GSNP container functions of
|
|
4
|
+
* bytes.ts drive with their own buffer regions.
|
|
5
|
+
*
|
|
6
|
+
* Rules (design section 9.1): a manifest whose `formatVersion` is not the reader's or whose wire
|
|
7
|
+
* major is unknown is refused with E_UNSUPPORTED_VERSION; a newer wire minor is read by ignoring
|
|
8
|
+
* unknown manifest fields; an unknown column dtype is E_UNSUPPORTED unless `unknownColumns: "skip"`
|
|
9
|
+
* drops the column and names it in `meta.extra["graphty.skippedColumns"]`; an unknown id-map kind
|
|
10
|
+
* is always E_UNSUPPORTED; unknown view entries are ignored and recomputed. Every WireBufferRef is
|
|
11
|
+
* checked against its buffer before a typed array is built over it (E_BAD_SERIALIZATION with
|
|
12
|
+
* details.ref), whatever the validation level, because a RangeError from a typed-array constructor
|
|
13
|
+
* is never an acceptable failure mode; the "structure" and "full" levels add the checks of design
|
|
14
|
+
* section 9.5 and then run the snapshot's own validate().
|
|
15
|
+
*
|
|
16
|
+
* Buffers are adopted by reference by default: the arrays are views into the caller's buffers and
|
|
17
|
+
* the arena descriptor is honoured. A SharedArrayBuffer is copied (decision D-SAB), and `copy: true`
|
|
18
|
+
* copies every buffer before adoption.
|
|
19
|
+
*/
|
|
20
|
+
import { GraphFormatError } from "../errors.js";
|
|
21
|
+
import { type GraphSnapshot } from "../snapshot/graph-snapshot.js";
|
|
22
|
+
import { type FromWireOptions, type U8, type ValidationLevel, type WireSnapshot } from "../types/index.js";
|
|
23
|
+
/** The meta.extra key naming the columns dropped under unknownColumns: "skip" (design section 9.1). */
|
|
24
|
+
export declare const SKIPPED_COLUMNS_KEY = "graphty.skippedColumns";
|
|
25
|
+
/**
|
|
26
|
+
* The E_BAD_SERIALIZATION error of a malformed manifest member or buffer reference.
|
|
27
|
+
* @param ref - the manifest path, e.g. "nodeColumns[2].data"
|
|
28
|
+
* @param reason - what is wrong
|
|
29
|
+
* @param details - extra context
|
|
30
|
+
* @returns the error
|
|
31
|
+
*/
|
|
32
|
+
export declare function badWire(ref: string, reason: string, details?: Readonly<Record<string, unknown>>): GraphFormatError;
|
|
33
|
+
/**
|
|
34
|
+
* Decode a manifest JSON value (design section 5.9): `{ "$num": "Infinity" | "-Infinity" | "NaN" |
|
|
35
|
+
* "-0" }` becomes the number, `{ "$esc": { ... } }` unwraps a user object whose only key collided
|
|
36
|
+
* with a tag (the writer's escape), arrays and plain objects are rebuilt recursively (a key named
|
|
37
|
+
* `__proto__`, `constructor` or `prototype` is refused), everything else is returned as is. Nesting
|
|
38
|
+
* deeper than MAX_JSON_DEPTH is E_BAD_SERIALIZATION rather than a stack overflow.
|
|
39
|
+
* @param value - the value from the manifest
|
|
40
|
+
* @param path - the manifest path for error messages
|
|
41
|
+
* @param depth - the current nesting depth
|
|
42
|
+
* @returns the decoded value
|
|
43
|
+
*/
|
|
44
|
+
export declare function decodeJsonValue(value: unknown, path: string, depth?: number): unknown;
|
|
45
|
+
/**
|
|
46
|
+
* Parse JSON text from a container (the manifest or one json column row) with the guarding
|
|
47
|
+
* reviver. A syntax error is E_BAD_SERIALIZATION.
|
|
48
|
+
* @param text - the JSON text
|
|
49
|
+
* @param path - the manifest path for error messages
|
|
50
|
+
* @returns the parsed value
|
|
51
|
+
*/
|
|
52
|
+
export declare function parseGuardedJson(text: string, path: string): unknown;
|
|
53
|
+
/** The options of fromWire / fromBytes after defaults were applied. */
|
|
54
|
+
interface ResolvedFromWireOptions {
|
|
55
|
+
/** The validation level. */
|
|
56
|
+
readonly level: ValidationLevel;
|
|
57
|
+
/** Whether buffers are copied before adoption. */
|
|
58
|
+
readonly copy: boolean;
|
|
59
|
+
/** What to do with an unknown column dtype. */
|
|
60
|
+
readonly unknownColumns: "error" | "skip";
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Apply defaults to FromWireOptions and reject values outside their documented sets (E_UNSUPPORTED).
|
|
64
|
+
* @param options - the caller's options
|
|
65
|
+
* @param defaultLevel - "structure" for fromWire, "full" for fromBytes
|
|
66
|
+
* @returns the resolved options
|
|
67
|
+
*/
|
|
68
|
+
export declare function resolveFromWireOptions(options: FromWireOptions | undefined, defaultLevel: ValidationLevel): ResolvedFromWireOptions;
|
|
69
|
+
/** Where a located byte range lives. */
|
|
70
|
+
export interface LocatedRange {
|
|
71
|
+
/** The plain ArrayBuffer holding the bytes. */
|
|
72
|
+
readonly buffer: ArrayBuffer;
|
|
73
|
+
/** The absolute byte offset of the range inside `buffer`. */
|
|
74
|
+
readonly byteOffset: number;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* One buffer index of a manifest as the decoder sees it: a byte length for range checks, a locator
|
|
78
|
+
* that finds a range contiguously in one plain buffer (null when it spans chunks or lives in a
|
|
79
|
+
* SharedArrayBuffer) and a reader that copies a range out.
|
|
80
|
+
*/
|
|
81
|
+
export interface WireRegion {
|
|
82
|
+
/** The byte length every reference is checked against. */
|
|
83
|
+
readonly byteLength: number;
|
|
84
|
+
/**
|
|
85
|
+
* Find a byte range in one plain buffer.
|
|
86
|
+
* @param byteOffset - region-relative start
|
|
87
|
+
* @param byteLength - length
|
|
88
|
+
* @returns the buffer and absolute offset, or null when the range cannot be adopted
|
|
89
|
+
*/
|
|
90
|
+
locate(byteOffset: number, byteLength: number): LocatedRange | null;
|
|
91
|
+
/**
|
|
92
|
+
* Copy a byte range into a fresh buffer.
|
|
93
|
+
* @param byteOffset - region-relative start
|
|
94
|
+
* @param byteLength - length
|
|
95
|
+
* @returns a Uint8Array at offset 0 of a fresh ArrayBuffer of at least byteLength bytes
|
|
96
|
+
*/
|
|
97
|
+
read(byteOffset: number, byteLength: number): U8;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* A region over one plain ArrayBuffer.
|
|
101
|
+
* @param buffer - the buffer
|
|
102
|
+
* @param base - the absolute byte offset of the region's start inside the buffer
|
|
103
|
+
* @param byteLength - the region's byte length
|
|
104
|
+
* @returns the region
|
|
105
|
+
*/
|
|
106
|
+
export declare function bufferRegion(buffer: ArrayBuffer, base: number, byteLength: number): WireRegion;
|
|
107
|
+
/**
|
|
108
|
+
* Whether a value is a SharedArrayBuffer (never adopted, decision D-SAB).
|
|
109
|
+
* @param value - the value
|
|
110
|
+
* @returns true for a SharedArrayBuffer
|
|
111
|
+
*/
|
|
112
|
+
export declare function isSharedArrayBuffer(value: unknown): value is SharedArrayBuffer;
|
|
113
|
+
/**
|
|
114
|
+
* Check the manifest's discriminator and versions (design sections 9.1 and 13.5): `format`, the
|
|
115
|
+
* wire major (E_UNSUPPORTED_VERSION kind "wire") and `formatVersion` (kind "format"). A newer wire
|
|
116
|
+
* minor is accepted.
|
|
117
|
+
* @param manifest - the manifest object
|
|
118
|
+
* @returns the wire version pair
|
|
119
|
+
*/
|
|
120
|
+
export declare function checkManifestVersions(manifest: Record<string, unknown>): readonly [number, number];
|
|
121
|
+
/**
|
|
122
|
+
* Rebuild a snapshot from a manifest and the regions its references index (design sections 9.1 and
|
|
123
|
+
* 9.5): versions checked, core arrays and arena adopted, id map and tables decoded, then the
|
|
124
|
+
* snapshot validated at the requested level.
|
|
125
|
+
* @param manifestRaw - the manifest (an object; already parsed for a container)
|
|
126
|
+
* @param regions - one region per buffer index
|
|
127
|
+
* @param options - the resolved options
|
|
128
|
+
* @param honourArena - whether the manifest's arena descriptor is adopted (false for chunked input)
|
|
129
|
+
* @returns the snapshot
|
|
130
|
+
*/
|
|
131
|
+
export declare function decodeManifest(manifestRaw: unknown, regions: readonly WireRegion[], options: ResolvedFromWireOptions, honourArena: boolean): GraphSnapshot;
|
|
132
|
+
/**
|
|
133
|
+
* Rebuild a snapshot from its wire form (design section 9.1). Defaults: `validate: "structure"`
|
|
134
|
+
* (the manifest is trusted to have come from this package; the cheap checks still run) and `copy:
|
|
135
|
+
* false` (the arrays are views into `wire.buffers`; a SharedArrayBuffer is copied). The reverse id
|
|
136
|
+
* Map and decoded strings are rebuilt lazily; carried views (`includeViews`) are installed on the
|
|
137
|
+
* receiver below "full" and recomputed under "full", where nothing carried is trusted.
|
|
138
|
+
* @param wire - the wire snapshot
|
|
139
|
+
* @param options - validation level, copy and unknown-column policy
|
|
140
|
+
* @returns the snapshot; E_UNSUPPORTED_VERSION, E_UNSUPPORTED, E_BAD_SERIALIZATION or E_INVALID_SNAPSHOT on bad input
|
|
141
|
+
*/
|
|
142
|
+
export declare function fromWire(wire: WireSnapshot, options?: FromWireOptions): GraphSnapshot;
|
|
143
|
+
export {};
|
|
144
|
+
//# sourceMappingURL=from-wire.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"from-wire.d.ts","sourceRoot":"","sources":["../../../src/wire/from-wire.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAMH,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAGhD,OAAO,EAAkB,KAAK,aAAa,EAAY,MAAM,+BAA+B,CAAC;AAE7F,OAAO,EAaH,KAAK,eAAe,EAMpB,KAAK,EAAE,EAEP,KAAK,eAAe,EAGpB,KAAK,YAAY,EACpB,MAAM,mBAAmB,CAAC;AAsE3B,uGAAuG;AACvG,eAAO,MAAM,mBAAmB,2BAA2B,CAAC;AAI5D;;;;;;GAMG;AACH,wBAAgB,OAAO,CACnB,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAM,GAChD,gBAAgB,CAElB;AAyED;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,SAAI,GAAG,OAAO,CAkChF;AAiCD;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CASpE;AAID,uEAAuE;AACvE,UAAU,uBAAuB;IAC7B,4BAA4B;IAC5B,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAC;IAChC,kDAAkD;IAClD,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,+CAA+C;IAC/C,QAAQ,CAAC,cAAc,EAAE,OAAO,GAAG,MAAM,CAAC;CAC7C;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAClC,OAAO,EAAE,eAAe,GAAG,SAAS,EACpC,YAAY,EAAE,eAAe,GAC9B,uBAAuB,CAoBzB;AAED,wCAAwC;AACxC,MAAM,WAAW,YAAY;IACzB,+CAA+C;IAC/C,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,6DAA6D;IAC7D,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC/B;AAED;;;;GAIG;AACH,MAAM,WAAW,UAAU;IACvB,0DAA0D;IAC1D,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B;;;;;OAKG;IACH,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAAC;IACpE;;;;;OAKG;IACH,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,EAAE,CAAC;CACpD;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,UAAU,CAY9F;AAaD;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,iBAAiB,CAE9E;AAukCD;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAoClG;AAID;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAC1B,WAAW,EAAE,OAAO,EACpB,OAAO,EAAE,SAAS,UAAU,EAAE,EAC9B,OAAO,EAAE,uBAAuB,EAChC,WAAW,EAAE,OAAO,GACrB,aAAa,CA6Ef;AAED;;;;;;;;;GASG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,aAAa,CAkBrF"}
|