@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,72 @@
1
+ /**
2
+ * The freeze pipeline of design section 6.3, exactly: the pre-checks that throw without touching the
3
+ * builder (self-loop "error", arc-count bound), compaction of tombstones and dropped loops (steps 1-2,
4
+ * into a fresh staging the builder commits only on success), the two counting-sort passes into the
5
+ * arena (steps 3-6, counting-sort.ts), the duplicate-policy walk with its one repeat after a merge
6
+ * (step 7), the weight flags and the f64 / explicit-weight shadow column (step 8), the id map (step
7
+ * 9), the attribute tables (step 10), the arena and prepared views (step 11) and the snapshot itself
8
+ * with its FreezeReport (step 12).
9
+ *
10
+ * Nothing here mutates the builder: `runFreeze` returns the staging the builder must adopt (the
11
+ * source staging when nothing was renumbered, a compacted one otherwise) so that a throw anywhere in
12
+ * the pipeline leaves the builder as it was (design section 11.1).
13
+ */
14
+ import { type GraphSnapshot } from "../snapshot/graph-snapshot.js";
15
+ import { type ColumnDeclPatch, type ColumnDomain, type Dtype, type FreezeOptions, type FreezeReport, type GraphMeta, type ResolvedBuilderOptions } from "../types/index.js";
16
+ import { type Staging } from "./compact.js";
17
+ /** One graph-level attribute the builder holds until freeze (design section 5.9). */
18
+ export interface GraphValue {
19
+ /** The declaration patch given to setGraphValue, or undefined. */
20
+ readonly decl: ColumnDeclPatch | undefined;
21
+ /** The value; undefined = unset. */
22
+ readonly value: unknown;
23
+ }
24
+ /** A widening recorded by the builder since the previous freeze (design section 5.1). */
25
+ export interface Widening {
26
+ /** The column name. */
27
+ readonly column: string;
28
+ /** The column's table. */
29
+ readonly domain: ColumnDomain;
30
+ /** The dtype before. */
31
+ readonly from: Dtype;
32
+ /** The dtype after. */
33
+ readonly to: Dtype;
34
+ }
35
+ /** Everything the pipeline reads from the builder. */
36
+ export interface FreezeContext {
37
+ /** The staging to freeze; never modified. */
38
+ readonly staging: Staging;
39
+ /** The builder's current direction. */
40
+ readonly directed: boolean;
41
+ /** The resolved builder options (policies, precision). */
42
+ readonly options: ResolvedBuilderOptions;
43
+ /** The graph-level attributes in declaration order. */
44
+ readonly graphValues: ReadonlyMap<string, GraphValue>;
45
+ /** The graph metadata. */
46
+ readonly meta: GraphMeta;
47
+ /** The widenings since the previous freeze. */
48
+ readonly widened: readonly Widening[];
49
+ }
50
+ /** What a freeze produces: the snapshot, its report, and the staging the builder must adopt. */
51
+ interface FreezeOutcome {
52
+ /** The frozen snapshot. */
53
+ readonly snapshot: GraphSnapshot;
54
+ /** The report. */
55
+ readonly report: FreezeReport;
56
+ /** The staging the builder holds afterwards: the source staging, or the compacted one. */
57
+ readonly staging: Staging;
58
+ }
59
+ /** The name of the shadow weight column the freeze writes (design sections 3.7 and 5.6). */
60
+ export declare const WEIGHT_COLUMN_NAME = "graphty.weight";
61
+ /**
62
+ * Run the freeze pipeline of design section 6.3 over a builder's state and produce the snapshot, the
63
+ * FreezeReport and the staging the builder should hold afterwards. The context is never mutated: a
64
+ * throw (E_SELF_LOOP, E_DUPLICATE_EDGE, E_DUPLICATE_EDGE_ID, E_TOO_LARGE, E_INVALID_WEIGHT,
65
+ * E_COLUMN_TYPE) leaves the builder exactly as it was.
66
+ * @param ctx - the builder's state
67
+ * @param options - the freeze options
68
+ * @returns the snapshot, the report and the staging to adopt
69
+ */
70
+ export declare function runFreeze(ctx: FreezeContext, options: FreezeOptions): FreezeOutcome;
71
+ export {};
72
+ //# sourceMappingURL=freeze.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"freeze.d.ts","sourceRoot":"","sources":["../../../src/builder/freeze.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAQH,OAAO,EAAkB,KAAK,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAEnF,OAAO,EAEH,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,KAAK,KAAK,EAIV,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,SAAS,EAEd,KAAK,sBAAsB,EAE9B,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAKH,KAAK,OAAO,EAEf,MAAM,cAAc,CAAC;AAMtB,qFAAqF;AACrF,MAAM,WAAW,UAAU;IACvB,kEAAkE;IAClE,QAAQ,CAAC,IAAI,EAAE,eAAe,GAAG,SAAS,CAAC;IAC3C,oCAAoC;IACpC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;CAC3B;AAED,yFAAyF;AACzF,MAAM,WAAW,QAAQ;IACrB,uBAAuB;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,0BAA0B;IAC1B,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,wBAAwB;IACxB,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;IACrB,uBAAuB;IACvB,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;CACtB;AAED,sDAAsD;AACtD,MAAM,WAAW,aAAa;IAC1B,6CAA6C;IAC7C,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,uCAAuC;IACvC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,0DAA0D;IAC1D,QAAQ,CAAC,OAAO,EAAE,sBAAsB,CAAC;IACzC,uDAAuD;IACvD,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACtD,0BAA0B;IAC1B,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,+CAA+C;IAC/C,QAAQ,CAAC,OAAO,EAAE,SAAS,QAAQ,EAAE,CAAC;CACzC;AAED,gGAAgG;AAChG,UAAU,aAAa;IACnB,2BAA2B;IAC3B,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;IACjC,kBAAkB;IAClB,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,0FAA0F;IAC1F,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC7B;AAED,4FAA4F;AAC5F,eAAO,MAAM,kBAAkB,mBAAmB,CAAC;AAkZnD;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,aAAa,EAAE,OAAO,EAAE,aAAa,GAAG,aAAa,CAkLnF"}
@@ -0,0 +1,548 @@
1
+ /**
2
+ * The freeze pipeline of design section 6.3, exactly: the pre-checks that throw without touching the
3
+ * builder (self-loop "error", arc-count bound), compaction of tombstones and dropped loops (steps 1-2,
4
+ * into a fresh staging the builder commits only on success), the two counting-sort passes into the
5
+ * arena (steps 3-6, counting-sort.ts), the duplicate-policy walk with its one repeat after a merge
6
+ * (step 7), the weight flags and the f64 / explicit-weight shadow column (step 8), the id map (step
7
+ * 9), the attribute tables (step 10), the arena and prepared views (step 11) and the snapshot itself
8
+ * with its FreezeReport (step 12).
9
+ *
10
+ * Nothing here mutates the builder: `runFreeze` returns the staging the builder must adopt (the
11
+ * source staging when nothing was renumbered, a compacted one otherwise) so that a throw anywhere in
12
+ * the pipeline leaves the builder as it was (design section 11.1).
13
+ */
14
+ import { bitmapClear, bitmapGet, bitmapSet, bitmapWordCount } from "../columns/bitmap.js";
15
+ import { columnFromValues, createColumn, emptyParts, resolveColumnMeta } from "../columns/column.js";
16
+ import { AttributeTable, verifyUniqueColumns } from "../columns/table.js";
17
+ import { INVALID_INDEX, MAX_COUNT } from "../constants.js";
18
+ import { GraphFormatError } from "../errors.js";
19
+ import { identityNodeIdMap, nodeIdMapFromIds } from "../ids/node-id-map.js";
20
+ import { createSnapshot } from "../snapshot/graph-snapshot.js";
21
+ import { isIdentity } from "../snapshot/validate.js";
22
+ import { copyCoreIntoArena } from "./arena.js";
23
+ import { compactStaging, remapKeepingBits, remapSurvivors, } from "./compact.js";
24
+ import { sortIntoCore } from "./counting-sort.js";
25
+ import { assertDuplicatePolicy } from "./options.js";
26
+ /** The name of the shadow weight column the freeze writes (design sections 3.7 and 5.6). */
27
+ export const WEIGHT_COLUMN_NAME = "graphty.weight";
28
+ /**
29
+ * A millisecond clock for the profile timings.
30
+ * @returns the current time in milliseconds
31
+ */
32
+ function now() {
33
+ return performance.now();
34
+ }
35
+ // ============================================================ steps
36
+ /**
37
+ * The E_SELF_LOOP pre-check of design section 6.3 step 2 (policy "error"): the first live loop is
38
+ * named. Runs before anything is renumbered so the builder is untouched.
39
+ * @param staging - the source staging
40
+ */
41
+ function checkSelfLoops(staging) {
42
+ if (staging.selfLoopCount === 0) {
43
+ return;
44
+ }
45
+ const bound = staging.edgeBound;
46
+ for (let e = 0; e < bound; e++) {
47
+ if (staging.edgeAlive.get(e) && staging.src.get(e) === staging.dst.get(e)) {
48
+ const node = staging.src.get(e);
49
+ throw new GraphFormatError("E_SELF_LOOP", `edge ${e} is a self-loop at node ${node}`, { edge: e, node });
50
+ }
51
+ }
52
+ }
53
+ /**
54
+ * The live edges that are not self-loops, as a bitmap over the edge index space (the edges a
55
+ * `selfLoops: "drop"` freeze keeps, design section 6.3 step 2).
56
+ * @param staging - the source staging
57
+ * @returns a fresh bitmap: bit e set = edge e is live and src !== dst
58
+ */
59
+ function liveNonLoopBits(staging) {
60
+ const keep = staging.edgeAlive.view().slice();
61
+ const src = staging.src.view();
62
+ const dst = staging.dst.view();
63
+ const bound = staging.edgeBound;
64
+ for (let e = 0; e < bound; e++) {
65
+ if (src[e] === dst[e] && bitmapGet(keep, e)) {
66
+ bitmapClear(keep, e);
67
+ }
68
+ }
69
+ return keep;
70
+ }
71
+ /**
72
+ * The sort input over a staging's live (compacted) edges.
73
+ * @param staging - a staging without tombstones
74
+ * @param directed - the direction
75
+ * @returns the per-edge views
76
+ */
77
+ function sortInputOf(staging, directed) {
78
+ const edgeCount = staging.edgeBound;
79
+ return {
80
+ directed,
81
+ nodeCount: staging.nodeBound,
82
+ edgeCount,
83
+ src: staging.src.view(),
84
+ dst: staging.dst.view(),
85
+ weights: staging.weight === null ? null : staging.weight.view(),
86
+ };
87
+ }
88
+ /**
89
+ * The duplicate-policy walk of design section 6.3 step 7 over sorted rows: adjacent arcs with equal
90
+ * colIdx form a group; "error" throws E_DUPLICATE_EDGE; the merge policies choose a survivor (the
91
+ * lowest edge index, or the highest for "last"), reduce the weights over the group from the staging
92
+ * values (f64 precision), and fold every other member into the survivor. A reducer that produces NaN
93
+ * (a "sum" over +Infinity and -Infinity) is the E_INVALID_WEIGHT re-check of step 8 and throws before
94
+ * anything is renumbered. A reduced value makes the survivor's weight explicit (the merge stored it,
95
+ * design section 6.5), as does an explicit weight anywhere in the group. For an undirected graph the
96
+ * `(u, v)` and `(v, u)` groups are one group, walked once from the row of the lower endpoint.
97
+ * @param sorted - the sorted core
98
+ * @param staging - the (compacted) staging the core was built from
99
+ * @param directed - the direction
100
+ * @param policy - a policy other than "keep"
101
+ * @param countMultiplicity - whether "sum" on an unweighted staging materialises multiplicities (false on a `weighted: false` builder, which never gains a weight array)
102
+ * @param builderIndex - compacted edge index -> the builder's own index, for error details
103
+ * @returns the walk, or null when no group had more than one member
104
+ */
105
+ function walkDuplicates(sorted, staging, directed, policy, countMultiplicity, builderIndex) {
106
+ const { rowPtr, colIdx, arcToEdge } = sorted.core;
107
+ const nodeCount = staging.nodeBound;
108
+ const edgeCount = staging.edgeBound;
109
+ const weights = staging.weight === null ? null : staging.weight.view();
110
+ const survivorOf = new Uint32Array(edgeCount);
111
+ for (let e = 0; e < edgeCount; e++) {
112
+ survivorOf[e] = e;
113
+ }
114
+ let reduced = null;
115
+ let stored = null;
116
+ let explicit = null;
117
+ let merged = 0;
118
+ const group = [];
119
+ for (let u = 0; u < nodeCount; u++) {
120
+ const end = rowPtr[u + 1];
121
+ let a = rowPtr[u];
122
+ while (a < end) {
123
+ const v = colIdx[a];
124
+ let b = a + 1;
125
+ while (b < end && colIdx[b] === v) {
126
+ b++;
127
+ }
128
+ if (b - a > 1 && (directed || v >= u)) {
129
+ group.length = 0;
130
+ for (let k = a; k < b; k++) {
131
+ group.push(arcToEdge === null ? k : arcToEdge[k]);
132
+ }
133
+ if (policy === "error") {
134
+ const edges = [builderIndex(group[0]), builderIndex(group[1])];
135
+ throw new GraphFormatError("E_DUPLICATE_EDGE", `edges ${edges[0]} and ${edges[1]} both connect ${u} -> ${v}`, { source: u, target: v, edges });
136
+ }
137
+ const survivor = policy === "last" ? group[group.length - 1] : group[0];
138
+ let value = null;
139
+ if (policy === "sum" || policy === "min" || policy === "max") {
140
+ value = reduceGroup(weights, group, policy, countMultiplicity);
141
+ if (value !== null && Number.isNaN(value)) {
142
+ const edges = group.map(builderIndex);
143
+ throw new GraphFormatError("E_INVALID_WEIGHT", `duplicateEdges "${policy}" over edges ${edges.join(", ")} (${u} -> ${v}) yields NaN`, { source: u, target: v, edges, policy, reason: "reducer" });
144
+ }
145
+ }
146
+ if (value !== null) {
147
+ reduced ?? (reduced = new Float64Array(edgeCount));
148
+ stored ?? (stored = new Uint32Array(bitmapWordCount(edgeCount)));
149
+ reduced[survivor] = value;
150
+ bitmapSet(stored, survivor);
151
+ }
152
+ let anyExplicit = value !== null;
153
+ for (let i = 0; i < group.length && !anyExplicit; i++) {
154
+ anyExplicit = staging.weightExplicit(group[i]);
155
+ }
156
+ if (anyExplicit && !staging.weightExplicit(survivor)) {
157
+ explicit ?? (explicit = new Uint32Array(bitmapWordCount(edgeCount)));
158
+ bitmapSet(explicit, survivor);
159
+ }
160
+ for (const e of group) {
161
+ if (e !== survivor) {
162
+ survivorOf[e] = survivor;
163
+ merged++;
164
+ }
165
+ }
166
+ }
167
+ a = b;
168
+ }
169
+ }
170
+ return merged === 0 ? null : { survivorOf, reduced, stored, explicit, merged };
171
+ }
172
+ /**
173
+ * Reduce the weights of a parallel group (design section 6.5): sum / min / max over the staging
174
+ * values; on an unweighted staging every weight is 1, so "sum" yields the group size (the
175
+ * multiplicity, when the builder may gain a weight array) and min / max leave 1 (nothing to store).
176
+ * @param weights - the staging weights, or null
177
+ * @param group - the edge indices of the group
178
+ * @param policy - the reducer
179
+ * @param countMultiplicity - whether "sum" on an unweighted staging yields the group size
180
+ * @returns the reduced weight (NaN when the operands cancel), or null when the survivor's own value already holds it
181
+ */
182
+ function reduceGroup(weights, group, policy, countMultiplicity) {
183
+ if (weights === null) {
184
+ return policy === "sum" && countMultiplicity ? group.length : null;
185
+ }
186
+ let value = weights[group[0]];
187
+ for (let i = 1; i < group.length; i++) {
188
+ const w = weights[group[i]];
189
+ switch (policy) {
190
+ case "sum":
191
+ value += w;
192
+ break;
193
+ case "min":
194
+ value = Math.min(value, w);
195
+ break;
196
+ case "max":
197
+ value = Math.max(value, w);
198
+ break;
199
+ default: {
200
+ const name = policy;
201
+ throw new GraphFormatError("E_UNSUPPORTED", `unknown reducer ${name}`, { policy: name });
202
+ }
203
+ }
204
+ }
205
+ return value;
206
+ }
207
+ /**
208
+ * The role-"weight" edge column of design section 3.7, when one is needed: the f64 shadow when the
209
+ * staging precision is f64 and some value is not f32-exact, and / or the explicit-weight record (the
210
+ * `weightSet` bitmap as validity) when some edge omitted its weight while another supplied it, or when
211
+ * a `weighted: true` builder's edges all omitted it.
212
+ * @param staging - the final staging
213
+ * @param edgeCount - the logical edge count
214
+ * @param weightDtype - the staging precision
215
+ * @returns the column, or null when the arc array already says everything
216
+ */
217
+ function weightShadowColumn(staging, edgeCount, weightDtype) {
218
+ const { weight } = staging;
219
+ if (weight === null || edgeCount === 0) {
220
+ return null;
221
+ }
222
+ const values = weight.view();
223
+ let inexact = false;
224
+ if (weightDtype === "f64") {
225
+ for (let e = 0; e < edgeCount; e++) {
226
+ const w = values[e];
227
+ if (Math.fround(w) !== w) {
228
+ inexact = true;
229
+ break;
230
+ }
231
+ }
232
+ }
233
+ const needValidity = staging.weightSet !== null || staging.weightMode === "omitted";
234
+ if (!inexact && !needValidity) {
235
+ return null;
236
+ }
237
+ const dtype = inexact ? "f64" : "f32";
238
+ const meta = resolveColumnMeta(WEIGHT_COLUMN_NAME, "edge", { dtype, role: "weight", nullable: needValidity });
239
+ const data = dtype === "f64" ? new Float64Array(edgeCount) : new Float32Array(edgeCount);
240
+ data.set(values.subarray(0, edgeCount));
241
+ let validity = null;
242
+ if (needValidity) {
243
+ validity = new Uint32Array(bitmapWordCount(edgeCount));
244
+ for (let e = 0; e < edgeCount; e++) {
245
+ if (staging.weightExplicit(e)) {
246
+ bitmapSet(validity, e);
247
+ }
248
+ }
249
+ }
250
+ return createColumn({ ...emptyParts(meta, edgeCount, validity), data });
251
+ }
252
+ /**
253
+ * The id map of design section 6.3 step 9: identity with no storage while every node is anonymous,
254
+ * otherwise the kind detected from the ids with the builder's `Map` and `ids` array shared by reference
255
+ * (decision C17).
256
+ * @param staging - the final staging
257
+ * @param nodeCount - the node count
258
+ * @returns the id map
259
+ */
260
+ function idMapOf(staging, nodeCount) {
261
+ if (staging.ids === null || staging.idToIndex === null) {
262
+ return identityNodeIdMap(nodeCount);
263
+ }
264
+ return nodeIdMapFromIds(staging.ids, nodeCount, { map: staging.idToIndex });
265
+ }
266
+ /**
267
+ * Freeze a list of staging columns into a table (design section 6.3 step 10) and enforce its unique
268
+ * columns.
269
+ * @param domain - the table domain
270
+ * @param rowCount - the row count
271
+ * @param columns - the staging columns
272
+ * @param extra - columns to append (the weight shadow)
273
+ * @returns the table
274
+ */
275
+ function tableOf(domain, rowCount, columns, extra = []) {
276
+ const frozen = columns.map((column) => column.toColumn(rowCount));
277
+ const table = new AttributeTable({ domain, rowCount, columns: [...frozen, ...extra] });
278
+ verifyUniqueColumns(table);
279
+ return table;
280
+ }
281
+ /**
282
+ * The graph table (one row) from the builder's graph values.
283
+ * @param values - the graph values in declaration order
284
+ * @returns the table
285
+ */
286
+ function graphTableOf(values) {
287
+ const columns = [];
288
+ for (const [name, entry] of values) {
289
+ columns.push(columnFromValues("graph", 1, name, [entry.value], entry.decl ?? {}));
290
+ }
291
+ return new AttributeTable({ domain: "graph", rowCount: 1, columns });
292
+ }
293
+ /**
294
+ * Compose the report's edge remap out of the compaction remap (old -> compacted) and the merge walk
295
+ * (compacted -> survivor -> final): every old edge maps to its final index, or to INVALID_INDEX when
296
+ * tombstoned or dropped; a merged edge maps to its survivor (design section 6.5).
297
+ * @param oldBound - the old edge index space
298
+ * @param first - the compaction remap, or null when none ran
299
+ * @param walk - the merge walk, or null
300
+ * @param second - the post-merge remap, or null
301
+ * @returns the composed remap, or null when it is the identity
302
+ */
303
+ function composeEdgeRemap(oldBound, first, walk, second) {
304
+ if (first === null && walk === null) {
305
+ return null;
306
+ }
307
+ const out = new Uint32Array(oldBound);
308
+ for (let e = 0; e < oldBound; e++) {
309
+ let index = first === null ? e : first.remap[e];
310
+ if (index !== INVALID_INDEX && walk !== null && second !== null) {
311
+ index = second.remap[walk.survivorOf[index]];
312
+ }
313
+ out[e] = index;
314
+ }
315
+ return isIdentity(out) ? null : out;
316
+ }
317
+ /**
318
+ * The identity remap of a space of `count` indices (a compaction that only renumbers edges).
319
+ * @param count - the space size
320
+ * @returns the identity
321
+ */
322
+ function identityRemap(count) {
323
+ const remap = new Uint32Array(count);
324
+ for (let i = 0; i < count; i++) {
325
+ remap[i] = i;
326
+ }
327
+ return { remap, origin: remap, count };
328
+ }
329
+ /**
330
+ * The E_UNSUPPORTED error for a freeze option outside its documented set (design section 12.2
331
+ * FreezeOptions), thrown before any staging work so the builder is untouched.
332
+ * @param field - the option name
333
+ * @param found - the value
334
+ * @returns the error
335
+ */
336
+ function freezeOptionError(field, found) {
337
+ return new GraphFormatError("E_UNSUPPORTED", `freeze option ${field} has an unsupported value ${String(found)}`, {
338
+ field,
339
+ found,
340
+ reason: "unsupported option",
341
+ });
342
+ }
343
+ /**
344
+ * Validate every FreezeOptions field (design section 12.2): the per-freeze duplicateEdges override
345
+ * against the DuplicatePolicy set (a merge policy rewrites the builder, so an unknown value must
346
+ * never act as one), the booleans, the label and the prepare list's shape. View names are checked
347
+ * by `prepare()` itself.
348
+ * @param options - the freeze options
349
+ */
350
+ function checkFreezeOptions(options) {
351
+ if (options.duplicateEdges !== undefined) {
352
+ assertDuplicatePolicy("duplicateEdges", options.duplicateEdges, freezeOptionError);
353
+ }
354
+ for (const field of ["arena", "release", "profile", "checksum"]) {
355
+ const value = options[field];
356
+ if (value !== undefined && typeof value !== "boolean") {
357
+ throw freezeOptionError(field, value);
358
+ }
359
+ }
360
+ if (options.label !== undefined && typeof options.label !== "string") {
361
+ throw freezeOptionError("label", options.label);
362
+ }
363
+ if (options.prepare !== undefined && !Array.isArray(options.prepare)) {
364
+ throw freezeOptionError("prepare", options.prepare);
365
+ }
366
+ }
367
+ // ============================================================ the pipeline
368
+ /**
369
+ * Run the freeze pipeline of design section 6.3 over a builder's state and produce the snapshot, the
370
+ * FreezeReport and the staging the builder should hold afterwards. The context is never mutated: a
371
+ * throw (E_SELF_LOOP, E_DUPLICATE_EDGE, E_DUPLICATE_EDGE_ID, E_TOO_LARGE, E_INVALID_WEIGHT,
372
+ * E_COLUMN_TYPE) leaves the builder exactly as it was.
373
+ * @param ctx - the builder's state
374
+ * @param options - the freeze options
375
+ * @returns the snapshot, the report and the staging to adopt
376
+ */
377
+ export function runFreeze(ctx, options) {
378
+ const profile = options.profile === true;
379
+ const timings = {};
380
+ const start = profile ? now() : 0;
381
+ let mark = start;
382
+ const lap = (phase) => {
383
+ if (profile) {
384
+ const t = now();
385
+ timings[phase] = (timings[phase] ?? 0) + (t - mark);
386
+ mark = t;
387
+ }
388
+ };
389
+ const { directed } = ctx;
390
+ const source = ctx.staging;
391
+ checkFreezeOptions(options);
392
+ const useArena = options.arena !== false;
393
+ const policy = options.duplicateEdges ?? ctx.options.duplicateEdges;
394
+ const loopPolicy = ctx.options.selfLoops;
395
+ const oldNodeBound = source.nodeBound;
396
+ const oldEdgeBound = source.edgeBound;
397
+ const tombstonedEdges = oldEdgeBound - source.liveEdgeCount;
398
+ // pre-checks that must not leave a half-applied freeze behind
399
+ if (loopPolicy === "error") {
400
+ checkSelfLoops(source);
401
+ }
402
+ const liveArcs = directed ? source.liveEdgeCount : 2 * source.liveEdgeCount - source.selfLoopCount;
403
+ if (liveArcs > MAX_COUNT) {
404
+ throw new GraphFormatError("E_TOO_LARGE", `arc count ${liveArcs} exceeds MAX_COUNT`, {
405
+ count: liveArcs,
406
+ max: MAX_COUNT,
407
+ });
408
+ }
409
+ // steps 1-2: compaction of tombstones and dropped loops into a fresh staging
410
+ let staging = source;
411
+ let nodeRemap = null;
412
+ let edgeRemap = null;
413
+ let droppedSelfLoops = 0;
414
+ const dropLoops = loopPolicy === "drop" && source.selfLoopCount > 0;
415
+ if (source.hasTombstones || dropLoops) {
416
+ const nodes = remapKeepingBits(oldNodeBound, source.nodeAlive.view());
417
+ const edges = remapKeepingBits(oldEdgeBound, dropLoops ? liveNonLoopBits(source) : source.edgeAlive.view());
418
+ droppedSelfLoops = dropLoops ? source.selfLoopCount : 0;
419
+ staging = compactStaging(source, {
420
+ nodes,
421
+ edges,
422
+ edgeValues: null,
423
+ mergedWeights: null,
424
+ mergedWeightStored: null,
425
+ mergedWeightSet: null,
426
+ });
427
+ nodeRemap = nodes;
428
+ edgeRemap = edges;
429
+ }
430
+ lap("compact");
431
+ // steps 3-6: arcs and the two counting sorts
432
+ const nodeCount = staging.nodeBound;
433
+ let sorted = sortIntoCore(sortInputOf(staging, directed), useArena && policy === "keep");
434
+ lap("sort");
435
+ // step 7: duplicate policy
436
+ let walk = null;
437
+ let mergeRemap = null;
438
+ if (policy !== "keep") {
439
+ const compaction = edgeRemap;
440
+ walk = walkDuplicates(sorted, staging, directed, policy, ctx.options.weighted !== false, (e) => compaction === null ? e : compaction.origin[e]);
441
+ if (walk !== null) {
442
+ const { survivorOf } = walk;
443
+ const edges = remapSurvivors(survivorOf);
444
+ let mergedWeights = null;
445
+ let mergedWeightStored = null;
446
+ if (walk.reduced !== null && walk.stored !== null) {
447
+ mergedWeights = new Float64Array(edges.count);
448
+ mergedWeightStored = new Uint32Array(bitmapWordCount(edges.count));
449
+ for (let e = 0; e < survivorOf.length; e++) {
450
+ if (survivorOf[e] === e && bitmapGet(walk.stored, e)) {
451
+ mergedWeights[edges.remap[e]] = walk.reduced[e];
452
+ bitmapSet(mergedWeightStored, edges.remap[e]);
453
+ }
454
+ }
455
+ }
456
+ let mergedWeightSet = null;
457
+ if (walk.explicit !== null) {
458
+ mergedWeightSet = new Uint32Array(bitmapWordCount(edges.count));
459
+ for (let e = 0; e < survivorOf.length; e++) {
460
+ if (survivorOf[e] === e && bitmapGet(walk.explicit, e)) {
461
+ bitmapSet(mergedWeightSet, edges.remap[e]);
462
+ }
463
+ }
464
+ }
465
+ // refersTo edge values follow the survivor (design sections 5.11 and 7.3), not the row remap
466
+ const edgeValues = new Uint32Array(survivorOf.length);
467
+ for (let e = 0; e < survivorOf.length; e++) {
468
+ edgeValues[e] = edges.remap[survivorOf[e]];
469
+ }
470
+ staging = compactStaging(staging, {
471
+ nodes: identityRemap(nodeCount),
472
+ edges,
473
+ edgeValues,
474
+ mergedWeights,
475
+ mergedWeightStored,
476
+ mergedWeightSet,
477
+ });
478
+ mergeRemap = edges;
479
+ sorted = sortIntoCore(sortInputOf(staging, directed), useArena);
480
+ }
481
+ else if (useArena) {
482
+ sorted = { ...sorted, core: copyCoreIntoArena(sorted.core) };
483
+ }
484
+ lap("duplicates");
485
+ }
486
+ const edgeCount = staging.edgeBound;
487
+ const { core, arcCount, selfLoopCount, flags } = sorted;
488
+ // steps 8-10: weights, id map, columns
489
+ const shadow = weightShadowColumn(staging, edgeCount, ctx.options.weightDtype);
490
+ lap("weights");
491
+ const ids = idMapOf(staging, nodeCount);
492
+ lap("ids");
493
+ const nodes = tableOf("node", nodeCount, staging.nodeColumns);
494
+ const edges = tableOf("edge", edgeCount, staging.edgeColumns, shadow === null ? [] : [shadow]);
495
+ const graph = graphTableOf(ctx.graphValues);
496
+ const extensions = new Map();
497
+ for (const table of staging.extensions) {
498
+ extensions.set(table.name, tableOf("extension", table.rowCount, table.columns));
499
+ }
500
+ lap("columns");
501
+ // step 12: the snapshot
502
+ const parts = {
503
+ label: options.label ?? null,
504
+ serial: null,
505
+ directed,
506
+ nodeCount,
507
+ edgeCount,
508
+ arcCount,
509
+ selfLoopCount,
510
+ rowPtr: core.rowPtr,
511
+ colIdx: core.colIdx,
512
+ weights: core.weights,
513
+ arcToEdge: core.arcToEdge,
514
+ edgeToArc: core.edgeToArc,
515
+ flags,
516
+ ids,
517
+ nodes,
518
+ edges,
519
+ graph,
520
+ extensions,
521
+ meta: ctx.meta,
522
+ arena: core.arena,
523
+ checksum: options.checksum === true,
524
+ };
525
+ const snapshot = createSnapshot(parts);
526
+ if (options.prepare !== undefined && options.prepare.length > 0) {
527
+ snapshot.prepare(options.prepare);
528
+ }
529
+ lap("snapshot");
530
+ if (profile) {
531
+ timings.total = now() - start;
532
+ }
533
+ const nodeRemapOut = nodeRemap !== null && !isIdentity(nodeRemap.remap) ? nodeRemap.remap : null;
534
+ const edgeRemapOut = composeEdgeRemap(oldEdgeBound, edgeRemap, walk, mergeRemap);
535
+ const mergedEdges = walk === null ? 0 : walk.merged;
536
+ const report = Object.freeze({
537
+ nodeRemap: nodeRemapOut,
538
+ edgeRemap: edgeRemapOut,
539
+ compacted: nodeRemapOut !== null || edgeRemapOut !== null,
540
+ droppedSelfLoops,
541
+ mergedEdges,
542
+ droppedEdges: tombstonedEdges + droppedSelfLoops + mergedEdges,
543
+ widened: Object.freeze(ctx.widened.map((w) => Object.freeze({ ...w }))),
544
+ timings: Object.freeze({ ...timings }),
545
+ });
546
+ return { snapshot, report, staging };
547
+ }
548
+ //# sourceMappingURL=freeze.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"freeze.js","sourceRoot":"","sources":["../../../src/builder/freeze.ts"],"names":[],"mappings":"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"}