@graphty/algorithms 1.7.3 → 1.8.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/dist/algorithms.d.ts +2 -37
- package/dist/algorithms.js +736 -223
- package/dist/algorithms.js.map +1 -1
- package/dist/algorithms.standalone.js +24524 -0
- package/dist/algorithms.standalone.js.map +1 -0
- package/dist/src/algorithms/centrality/betweenness.d.ts +16 -11
- package/dist/src/algorithms/centrality/betweenness.d.ts.map +1 -1
- package/dist/src/algorithms/centrality/betweenness.js +17 -0
- package/dist/src/algorithms/centrality/betweenness.js.map +1 -1
- package/dist/src/core/graph.d.ts +10 -0
- package/dist/src/core/graph.d.ts.map +1 -1
- package/dist/src/core/graph.js +31 -2
- package/dist/src/core/graph.js.map +1 -1
- package/dist/src/index.d.ts +10 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +7 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/indexed/accelerator.d.ts +161 -0
- package/dist/src/indexed/accelerator.d.ts.map +1 -0
- package/dist/src/indexed/accelerator.js +60 -0
- package/dist/src/indexed/accelerator.js.map +1 -0
- package/dist/src/indexed/bfs.d.ts +28 -0
- package/dist/src/indexed/bfs.d.ts.map +1 -0
- package/dist/src/indexed/bfs.js +39 -0
- package/dist/src/indexed/bfs.js.map +1 -0
- package/dist/src/indexed/common-neighbors.d.ts +17 -0
- package/dist/src/indexed/common-neighbors.d.ts.map +1 -0
- package/dist/src/indexed/common-neighbors.js +41 -0
- package/dist/src/indexed/common-neighbors.js.map +1 -0
- package/dist/src/indexed/components.d.ts +28 -0
- package/dist/src/indexed/components.d.ts.map +1 -0
- package/dist/src/indexed/components.js +58 -0
- package/dist/src/indexed/components.js.map +1 -0
- package/dist/src/indexed/dijkstra.d.ts +63 -0
- package/dist/src/indexed/dijkstra.d.ts.map +1 -0
- package/dist/src/indexed/dijkstra.js +98 -0
- package/dist/src/indexed/dijkstra.js.map +1 -0
- package/dist/src/indexed/index.d.ts +22 -0
- package/dist/src/indexed/index.d.ts.map +1 -0
- package/dist/src/indexed/index.js +22 -0
- package/dist/src/indexed/index.js.map +1 -0
- package/dist/src/indexed/mst.d.ts +26 -0
- package/dist/src/indexed/mst.d.ts.map +1 -0
- package/dist/src/indexed/mst.js +48 -0
- package/dist/src/indexed/mst.js.map +1 -0
- package/dist/src/indexed/pagerank.d.ts +30 -0
- package/dist/src/indexed/pagerank.d.ts.map +1 -0
- package/dist/src/indexed/pagerank.js +50 -0
- package/dist/src/indexed/pagerank.js.map +1 -0
- package/dist/src/indexed/structures/arc-source.d.ts +13 -0
- package/dist/src/indexed/structures/arc-source.d.ts.map +1 -0
- package/dist/src/indexed/structures/arc-source.js +25 -0
- package/dist/src/indexed/structures/arc-source.js.map +1 -0
- package/dist/src/indexed/structures/index.d.ts +9 -0
- package/dist/src/indexed/structures/index.d.ts.map +1 -0
- package/dist/src/indexed/structures/index.js +9 -0
- package/dist/src/indexed/structures/index.js.map +1 -0
- package/dist/src/indexed/structures/min-heap.d.ts +44 -0
- package/dist/src/indexed/structures/min-heap.d.ts.map +1 -0
- package/dist/src/indexed/structures/min-heap.js +112 -0
- package/dist/src/indexed/structures/min-heap.js.map +1 -0
- package/dist/src/indexed/structures/union-find.d.ts +39 -0
- package/dist/src/indexed/structures/union-find.d.ts.map +1 -0
- package/dist/src/indexed/structures/union-find.js +70 -0
- package/dist/src/indexed/structures/union-find.js.map +1 -0
- package/dist/src/indexed/to-snapshot.d.ts +38 -0
- package/dist/src/indexed/to-snapshot.d.ts.map +1 -0
- package/dist/src/indexed/to-snapshot.js +58 -0
- package/dist/src/indexed/to-snapshot.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +7 -3
- package/src/algorithms/centrality/betweenness.ts +36 -11
- package/src/core/graph.ts +35 -2
- package/src/index.ts +46 -0
- package/src/indexed/accelerator.ts +225 -0
- package/src/indexed/bfs.ts +57 -0
- package/src/indexed/common-neighbors.ts +46 -0
- package/src/indexed/components.ts +78 -0
- package/src/indexed/dijkstra.ts +134 -0
- package/src/indexed/index.ts +28 -0
- package/src/indexed/mst.ts +62 -0
- package/src/indexed/pagerank.ts +73 -0
- package/src/indexed/structures/arc-source.ts +25 -0
- package/src/indexed/structures/index.ts +9 -0
- package/src/indexed/structures/min-heap.ts +122 -0
- package/src/indexed/structures/union-find.ts +74 -0
- package/src/indexed/to-snapshot.ts +78 -0
|
@@ -7,21 +7,26 @@ import type { NodeId } from "../../types/index.js";
|
|
|
7
7
|
* Uses the fast O(VE) algorithm by Ulrik Brandes.
|
|
8
8
|
*/
|
|
9
9
|
/**
|
|
10
|
-
* Betweenness centrality options
|
|
10
|
+
* Betweenness centrality options.
|
|
11
|
+
*
|
|
12
|
+
* Every member is `readonly` and carries `| undefined`: the GPU package compiles this declaration
|
|
13
|
+
* a second time under `exactOptionalPropertyTypes`, where `sources?: readonly number[]` and
|
|
14
|
+
* `sources?: readonly number[] | undefined` are different types (plan decision PD-6).
|
|
11
15
|
*/
|
|
12
16
|
export interface BetweennessCentralityOptions {
|
|
17
|
+
/** Whether to normalize the centrality values (default: false) */
|
|
18
|
+
readonly normalized?: boolean | undefined;
|
|
19
|
+
/** Whether to use endpoints in path counting (default: false) */
|
|
20
|
+
readonly endpoints?: boolean | undefined;
|
|
21
|
+
/** Whether to use optimized BFS implementation for large graphs */
|
|
22
|
+
readonly optimized?: boolean | undefined;
|
|
13
23
|
/**
|
|
14
|
-
*
|
|
15
|
-
|
|
16
|
-
normalized?: boolean;
|
|
17
|
-
/**
|
|
18
|
-
* Whether to use endpoints in path counting (default: false)
|
|
19
|
-
*/
|
|
20
|
-
endpoints?: boolean;
|
|
21
|
-
/**
|
|
22
|
-
* Whether to use optimized BFS implementation for large graphs
|
|
24
|
+
* Sampled betweenness: the source NODE INDICES to run from. Indices are meaningful only against
|
|
25
|
+
* a `GraphSnapshot`, so the legacy `Graph`-taking entry points below THROW when this is set.
|
|
23
26
|
*/
|
|
24
|
-
|
|
27
|
+
readonly sources?: readonly number[] | undefined;
|
|
28
|
+
/** Sampled betweenness: how many sources to draw when `sources` is not given. */
|
|
29
|
+
readonly k?: number | undefined;
|
|
25
30
|
}
|
|
26
31
|
/**
|
|
27
32
|
* Calculate betweenness centrality for all nodes using Brandes' algorithm
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"betweenness.d.ts","sourceRoot":"","sources":["../../../../src/algorithms/centrality/betweenness.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAGnD;;;;;GAKG;AAEH
|
|
1
|
+
{"version":3,"file":"betweenness.d.ts","sourceRoot":"","sources":["../../../../src/algorithms/centrality/betweenness.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAGnD;;;;;GAKG;AAEH;;;;;;GAMG;AACH,MAAM,WAAW,4BAA4B;IACzC,kEAAkE;IAClE,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC1C,iEAAiE;IACjE,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACzC,mEAAmE;IACnE,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACzC;;;OAGG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;IACjD,iFAAiF;IACjF,QAAQ,CAAC,CAAC,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACnC;AA2LD;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACjC,KAAK,EAAE,KAAK,EACZ,OAAO,GAAE,4BAAiC,GAC3C,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAiCxB;AAED;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CACrC,KAAK,EAAE,KAAK,EACZ,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,4BAAiC,GAC3C,MAAM,CAQR;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CACrC,KAAK,EAAE,KAAK,EACZ,OAAO,GAAE,4BAAiC,GAC3C,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAqCrB"}
|
|
@@ -1,4 +1,18 @@
|
|
|
1
1
|
import { bfsWithPathCounting } from "../traversal/bfs-variants.js";
|
|
2
|
+
/**
|
|
3
|
+
* Refuse the index-space options on a path that has no index space.
|
|
4
|
+
*
|
|
5
|
+
* Ignoring them would be the expensive silence: a caller asking for a 128-source sample would get
|
|
6
|
+
* an exact all-sources run, correct and a thousand times too slow, with no signal at all.
|
|
7
|
+
* @param options - The caller's options
|
|
8
|
+
* @param fn - The entry point's name, for the message
|
|
9
|
+
*/
|
|
10
|
+
function rejectIndexOptions(options, fn) {
|
|
11
|
+
if (options.sources !== undefined || options.k !== undefined) {
|
|
12
|
+
throw new Error(`${fn}: 'sources' and 'k' are node INDICES and are meaningful only against a GraphSnapshot; ` +
|
|
13
|
+
"call accelerated(accelerator).betweennessCentrality(snapshot, options) instead");
|
|
14
|
+
}
|
|
15
|
+
}
|
|
2
16
|
/**
|
|
3
17
|
* Run single-source shortest path computation using BFS
|
|
4
18
|
* @param graph - The input graph to analyze
|
|
@@ -132,6 +146,7 @@ function normalizeCentrality(centrality, nodeCount, isDirected) {
|
|
|
132
146
|
* @returns Centrality scores for each node keyed by node ID
|
|
133
147
|
*/
|
|
134
148
|
export function betweennessCentrality(graph, options = {}) {
|
|
149
|
+
rejectIndexOptions(options, "betweennessCentrality");
|
|
135
150
|
const nodes = Array.from(graph.nodes()).map((node) => node.id);
|
|
136
151
|
const centrality = {};
|
|
137
152
|
// Initialize centrality scores
|
|
@@ -167,6 +182,7 @@ export function betweennessCentrality(graph, options = {}) {
|
|
|
167
182
|
* @returns The betweenness centrality score for the target node
|
|
168
183
|
*/
|
|
169
184
|
export function nodeBetweennessCentrality(graph, targetNode, options = {}) {
|
|
185
|
+
rejectIndexOptions(options, "nodeBetweennessCentrality");
|
|
170
186
|
if (!graph.hasNode(targetNode)) {
|
|
171
187
|
throw new Error(`Node ${String(targetNode)} not found in graph`);
|
|
172
188
|
}
|
|
@@ -180,6 +196,7 @@ export function nodeBetweennessCentrality(graph, targetNode, options = {}) {
|
|
|
180
196
|
* @returns Edge centrality scores keyed by edge string representation
|
|
181
197
|
*/
|
|
182
198
|
export function edgeBetweennessCentrality(graph, options = {}) {
|
|
199
|
+
rejectIndexOptions(options, "edgeBetweennessCentrality");
|
|
183
200
|
const nodes = Array.from(graph.nodes()).map((node) => node.id);
|
|
184
201
|
const edgeCentrality = new Map();
|
|
185
202
|
// Initialize edge centrality scores
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"betweenness.js","sourceRoot":"","sources":["../../../../src/algorithms/centrality/betweenness.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"betweenness.js","sourceRoot":"","sources":["../../../../src/algorithms/centrality/betweenness.ts"],"names":[],"mappings":"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"}
|
package/dist/src/core/graph.d.ts
CHANGED
|
@@ -11,6 +11,7 @@ export declare class Graph {
|
|
|
11
11
|
private incomingEdges;
|
|
12
12
|
private config;
|
|
13
13
|
private edgeCount;
|
|
14
|
+
private mutations;
|
|
14
15
|
/**
|
|
15
16
|
* Creates a new Graph instance.
|
|
16
17
|
* @param config - Configuration options for the graph
|
|
@@ -74,6 +75,15 @@ export declare class Graph {
|
|
|
74
75
|
* @returns The total count of nodes
|
|
75
76
|
*/
|
|
76
77
|
get nodeCount(): number;
|
|
78
|
+
/**
|
|
79
|
+
* A counter that increases on every topology change (`addNode` of a new id, `removeNode`,
|
|
80
|
+
* `addEdge`, `removeEdge`, `clear`) and never on a read. Callers memoise derived structures on
|
|
81
|
+
* `(graph, mutationCount)`; graph-format design 14.1 rule 4 names this counter, and `toSnapshot`
|
|
82
|
+
* is its first consumer. It is monotone and is NOT reset by `clear()`: a reset could hand a
|
|
83
|
+
* stale cache entry a matching key.
|
|
84
|
+
* @returns The number of topology changes made to this graph
|
|
85
|
+
*/
|
|
86
|
+
get mutationCount(): number;
|
|
77
87
|
/**
|
|
78
88
|
* Get the number of edges in the graph
|
|
79
89
|
* @returns The total count of edges
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graph.d.ts","sourceRoot":"","sources":["../../../src/core/graph.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"graph.d.ts","sourceRoot":"","sources":["../../../src/core/graph.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAazE;;;;;GAKG;AACH,qBAAa,KAAK;IACd,OAAO,CAAC,OAAO,CAAoB;IACnC,OAAO,CAAC,aAAa,CAAiC;IACtD,OAAO,CAAC,aAAa,CAAiC;IACtD,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,SAAS,CAAS;IAE1B;;;OAGG;gBACS,MAAM,GAAE,OAAO,CAAC,WAAW,CAAM;IAc7C;;;;OAIG;IACH,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAazD;;;;OAIG;IACH,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAyC/B;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,SAAI,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IA+CzF;;;;;OAKG;IACH,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO;IA0BnD;;;;OAIG;IACH,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAI5B;;;;;OAKG;IACH,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO;IAKhD;;;;OAIG;IACH,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS;IAIrC;;;;;OAKG;IACH,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS;IAKzD;;;OAGG;IACH,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED;;;;;;;OAOG;IACH,IAAI,aAAa,IAAI,MAAM,CAE1B;IAED;;;OAGG;IACH,IAAI,cAAc,IAAI,MAAM,CAE3B;IAED;;;OAGG;IACH,IAAI,UAAU,IAAI,OAAO,CAExB;IAED;;;OAGG;IACH,KAAK,IAAI,gBAAgB,CAAC,IAAI,CAAC;IAI/B;;;OAGG;IACF,KAAK,IAAI,gBAAgB,CAAC,IAAI,CAAC;IAehC;;;;OAIG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,gBAAgB,CAAC,MAAM,CAAC;IAKnD;;;;OAIG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,gBAAgB,CAAC,MAAM,CAAC;IASrD;;;;OAIG;IACH,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,gBAAgB,CAAC,MAAM,CAAC;IAItD;;;;OAIG;IACH,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAS9B;;;;OAIG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAShC;;;;OAIG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAKjC;;;OAGG;IACH,KAAK,IAAI,KAAK;IAgBd;;;OAGG;IACH,SAAS,IAAI,WAAW;IAIxB;;OAEG;IACH,KAAK,IAAI,IAAI;IAQb;;;;OAIG;IACH,IAAI,eAAe,IAAI,MAAM,CAY5B;CACJ"}
|
package/dist/src/core/graph.js
CHANGED
|
@@ -1,3 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* True when an undirected edge seen from `source` is the mirror of one already yielded from
|
|
3
|
+
* `target`: ids of one type compare by value, ids of different types by their type name.
|
|
4
|
+
* @param source - The node the edge is read from
|
|
5
|
+
* @param target - The node the edge points to
|
|
6
|
+
* @returns True when this side of the edge is the duplicate
|
|
7
|
+
*/
|
|
8
|
+
function isMirror(source, target) {
|
|
9
|
+
return typeof source === typeof target ? source > target : typeof source > typeof target;
|
|
10
|
+
}
|
|
1
11
|
/**
|
|
2
12
|
* Core Graph data structure for the Graphty Algorithms library
|
|
3
13
|
*
|
|
@@ -20,6 +30,7 @@ export class Graph {
|
|
|
20
30
|
this.adjacencyList = new Map();
|
|
21
31
|
this.incomingEdges = new Map();
|
|
22
32
|
this.edgeCount = 0;
|
|
33
|
+
this.mutations = 0;
|
|
23
34
|
}
|
|
24
35
|
/**
|
|
25
36
|
* Add a node to the graph
|
|
@@ -33,6 +44,7 @@ export class Graph {
|
|
|
33
44
|
if (this.config.directed) {
|
|
34
45
|
this.incomingEdges.set(id, new Map());
|
|
35
46
|
}
|
|
47
|
+
this.mutations++;
|
|
36
48
|
}
|
|
37
49
|
}
|
|
38
50
|
/**
|
|
@@ -73,6 +85,7 @@ export class Graph {
|
|
|
73
85
|
if (this.config.directed) {
|
|
74
86
|
this.incomingEdges.delete(id);
|
|
75
87
|
}
|
|
88
|
+
this.mutations++;
|
|
76
89
|
return true;
|
|
77
90
|
}
|
|
78
91
|
/**
|
|
@@ -118,6 +131,7 @@ export class Graph {
|
|
|
118
131
|
}
|
|
119
132
|
}
|
|
120
133
|
this.edgeCount++;
|
|
134
|
+
this.mutations++;
|
|
121
135
|
}
|
|
122
136
|
/**
|
|
123
137
|
* Remove an edge from the graph
|
|
@@ -145,6 +159,7 @@ export class Graph {
|
|
|
145
159
|
}
|
|
146
160
|
}
|
|
147
161
|
this.edgeCount--;
|
|
162
|
+
this.mutations++;
|
|
148
163
|
return true;
|
|
149
164
|
}
|
|
150
165
|
/**
|
|
@@ -190,6 +205,17 @@ export class Graph {
|
|
|
190
205
|
get nodeCount() {
|
|
191
206
|
return this.nodeMap.size;
|
|
192
207
|
}
|
|
208
|
+
/**
|
|
209
|
+
* A counter that increases on every topology change (`addNode` of a new id, `removeNode`,
|
|
210
|
+
* `addEdge`, `removeEdge`, `clear`) and never on a read. Callers memoise derived structures on
|
|
211
|
+
* `(graph, mutationCount)`; graph-format design 14.1 rule 4 names this counter, and `toSnapshot`
|
|
212
|
+
* is its first consumer. It is monotone and is NOT reset by `clear()`: a reset could hand a
|
|
213
|
+
* stale cache entry a matching key.
|
|
214
|
+
* @returns The number of topology changes made to this graph
|
|
215
|
+
*/
|
|
216
|
+
get mutationCount() {
|
|
217
|
+
return this.mutations;
|
|
218
|
+
}
|
|
193
219
|
/**
|
|
194
220
|
* Get the number of edges in the graph
|
|
195
221
|
* @returns The total count of edges
|
|
@@ -218,8 +244,10 @@ export class Graph {
|
|
|
218
244
|
*edges() {
|
|
219
245
|
for (const [source, edges] of this.adjacencyList) {
|
|
220
246
|
for (const edge of edges.values()) {
|
|
221
|
-
// For undirected graphs, only yield each edge once
|
|
222
|
-
|
|
247
|
+
// For undirected graphs, only yield each edge once. A string never compares
|
|
248
|
+
// greater than a number (both `<` and `>` are false), so mixed-type ids are
|
|
249
|
+
// ordered by their type name first; the mirror is then skipped on exactly one side.
|
|
250
|
+
if (!this.config.directed && isMirror(source, edge.target)) {
|
|
223
251
|
continue;
|
|
224
252
|
}
|
|
225
253
|
yield edge;
|
|
@@ -319,6 +347,7 @@ export class Graph {
|
|
|
319
347
|
this.adjacencyList.clear();
|
|
320
348
|
this.incomingEdges.clear();
|
|
321
349
|
this.edgeCount = 0;
|
|
350
|
+
this.mutations++;
|
|
322
351
|
}
|
|
323
352
|
/**
|
|
324
353
|
* Get the number of unique edges in the graph
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graph.js","sourceRoot":"","sources":["../../../src/core/graph.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,MAAM,OAAO,KAAK;
|
|
1
|
+
{"version":3,"file":"graph.js","sourceRoot":"","sources":["../../../src/core/graph.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,SAAS,QAAQ,CAAC,MAAc,EAAE,MAAc;IAC5C,OAAO,OAAO,MAAM,KAAK,OAAO,MAAM,CAAC,CAAC,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,OAAO,MAAM,GAAG,OAAO,MAAM,CAAC;AAC7F,CAAC;AAED;;;;;GAKG;AACH,MAAM,OAAO,KAAK;IAQd;;;OAGG;IACH,YAAY,SAA+B,EAAE;QACzC,IAAI,CAAC,MAAM,GAAG;YACV,QAAQ,EAAE,KAAK;YACf,cAAc,EAAE,IAAI;YACpB,kBAAkB,EAAE,KAAK;YACzB,GAAG,MAAM;SACZ,CAAC;QACF,IAAI,CAAC,OAAO,GAAG,IAAI,GAAG,EAAE,CAAC;QACzB,IAAI,CAAC,aAAa,GAAG,IAAI,GAAG,EAAE,CAAC;QAC/B,IAAI,CAAC,aAAa,GAAG,IAAI,GAAG,EAAE,CAAC;QAC/B,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;QACnB,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;IACvB,CAAC;IAED;;;;OAIG;IACH,OAAO,CAAC,EAAU,EAAE,IAA8B;QAC9C,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YACxB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;YACnC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;YAEtC,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACvB,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;YAC1C,CAAC;YAED,IAAI,CAAC,SAAS,EAAE,CAAC;QACrB,CAAC;IACL,CAAC;IAED;;;;OAIG;IACH,UAAU,CAAC,EAAU;QACjB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YACxB,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,0CAA0C;QAC1C,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACjD,IAAI,aAAa,EAAE,CAAC;YAChB,KAAK,MAAM,QAAQ,IAAI,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;gBACtD,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;YAClC,CAAC;QACL,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YACvB,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACjD,IAAI,aAAa,EAAE,CAAC;gBAChB,KAAK,MAAM,QAAQ,IAAI,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;oBACtD,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;gBAClC,CAAC;YACL,CAAC;QACL,CAAC;aAAM,CAAC;YACJ,yEAAyE;YACzE,KAAK,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;gBAC3D,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;oBAChB,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;gBAChC,CAAC;YACL,CAAC;QACL,CAAC;QAED,yBAAyB;QACzB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACxB,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAE9B,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YACvB,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAClC,CAAC;QAED,IAAI,CAAC,SAAS,EAAE,CAAC;QACjB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;;;;OAMG;IACH,OAAO,CAAC,MAAc,EAAE,MAAc,EAAE,MAAM,GAAG,CAAC,EAAE,IAA8B;QAC9E,0BAA0B;QAC1B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACrB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAErB,mBAAmB;QACnB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;YACnD,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;QAChE,CAAC;QAED,uBAAuB;QACvB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,kBAAkB,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;YAClE,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;QACpE,CAAC;QAED,MAAM,IAAI,GAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;QAEpD,wBAAwB;QACxB,MAAM,eAAe,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAEvD,IAAI,eAAe,EAAE,CAAC;YAClB,eAAe,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACtC,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YACvB,kDAAkD;YAClD,MAAM,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAEtD,IAAI,cAAc,EAAE,CAAC;gBACjB,cAAc,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YACrC,CAAC;QACL,CAAC;aAAM,CAAC;YACJ,8CAA8C;YAC9C,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;gBACpB,MAAM,WAAW,GAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;gBAC3E,MAAM,eAAe,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;gBAEvD,IAAI,eAAe,EAAE,CAAC;oBAClB,eAAe,CAAC,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;gBAC7C,CAAC;YACL,CAAC;QACL,CAAC;QAED,IAAI,CAAC,SAAS,EAAE,CAAC;QACjB,IAAI,CAAC,SAAS,EAAE,CAAC;IACrB,CAAC;IAED;;;;;OAKG;IACH,UAAU,CAAC,MAAc,EAAE,MAAc;QACrC,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACnD,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YAC5B,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAE3B,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YACvB,MAAM,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACtD,IAAI,cAAc,EAAE,CAAC;gBACjB,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAClC,CAAC;QACL,CAAC;aAAM,CAAC;YACJ,iDAAiD;YACjD,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACnD,IAAI,WAAW,EAAE,CAAC;gBACd,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC/B,CAAC;QACL,CAAC;QAED,IAAI,CAAC,SAAS,EAAE,CAAC;QACjB,IAAI,CAAC,SAAS,EAAE,CAAC;QACjB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;;OAIG;IACH,OAAO,CAAC,EAAU;QACd,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChC,CAAC;IAED;;;;;OAKG;IACH,OAAO,CAAC,MAAc,EAAE,MAAc;QAClC,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACnD,OAAO,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IACzD,CAAC;IAED;;;;OAIG;IACH,OAAO,CAAC,EAAU;QACd,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChC,CAAC;IAED;;;;;OAKG;IACH,OAAO,CAAC,MAAc,EAAE,MAAc;QAClC,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACnD,OAAO,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC7D,CAAC;IAED;;;OAGG;IACH,IAAI,SAAS;QACT,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;IAC7B,CAAC;IAED;;;;;;;OAOG;IACH,IAAI,aAAa;QACb,OAAO,IAAI,CAAC,SAAS,CAAC;IAC1B,CAAC;IAED;;;OAGG;IACH,IAAI,cAAc;QACd,OAAO,IAAI,CAAC,SAAS,CAAC;IAC1B,CAAC;IAED;;;OAGG;IACH,IAAI,UAAU;QACV,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;IAChC,CAAC;IAED;;;OAGG;IACH,KAAK;QACD,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;IACjC,CAAC;IAED;;;OAGG;IACH,CAAC,KAAK;QACF,KAAK,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YAC/C,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;gBAChC,4EAA4E;gBAC5E,4EAA4E;gBAC5E,oFAAoF;gBACpF,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;oBACzD,SAAS;gBACb,CAAC;gBAED,MAAM,IAAI,CAAC;YACf,CAAC;QACL,CAAC;IACL,CAAC;IAED;;;;OAIG;IACH,SAAS,CAAC,MAAc;QACpB,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC7C,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC;IACnD,CAAC;IAED;;;;OAIG;IACH,WAAW,CAAC,MAAc;QACtB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAClC,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC7C,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC;IACnD,CAAC;IAED;;;;OAIG;IACH,YAAY,CAAC,MAAc;QACvB,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAClC,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,MAAc;QACjB,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YACvB,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAC1D,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC7C,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAClC,CAAC;IAED;;;;OAIG;IACH,QAAQ,CAAC,MAAc;QACnB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC/B,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC7C,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAClC,CAAC;IAED;;;;OAIG;IACH,SAAS,CAAC,MAAc;QACpB,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC7C,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAClC,CAAC;IAED;;;OAGG;IACH,KAAK;QACD,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAEtC,aAAa;QACb,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;YACvC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QACtE,CAAC;QAED,aAAa;QACb,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC;YAC9B,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QACpG,CAAC;QAED,OAAO,MAAM,CAAC;IAClB,CAAC;IAED;;;OAGG;IACH,SAAS;QACL,OAAO,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;IAC9B,CAAC;IAED;;OAEG;IACH,KAAK;QACD,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACrB,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;QAC3B,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;QAC3B,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;QACnB,IAAI,CAAC,SAAS,EAAE,CAAC;IACrB,CAAC;IAED;;;;OAIG;IACH,IAAI,eAAe;QACf,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YACvB,OAAO,IAAI,CAAC,SAAS,CAAC;QAC1B,CAAC;QAED,8DAA8D;QAC9D,IAAI,KAAK,GAAG,CAAC,CAAC;QAEd,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC;YAC/B,KAAK,EAAE,CAAC;QACZ,CAAC;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;CACJ"}
|
package/dist/src/index.d.ts
CHANGED
|
@@ -11,4 +11,14 @@ export * from "./algorithms/index.js";
|
|
|
11
11
|
export * from "./research/index.js";
|
|
12
12
|
export * from "./data-structures/index.js";
|
|
13
13
|
export * from "./optimized/index.js";
|
|
14
|
+
export * as indexed from "./indexed/index.js";
|
|
15
|
+
export { toSnapshot } from "./indexed/to-snapshot.js";
|
|
16
|
+
export type { AcceleratedAlgorithms, AlgorithmAccelerator, ApspResultLike, BellmanFordResultLike, BetweennessAcceleratorOptions, BfsResultLike, CommunityResultLike, CorenessResultLike, EdgeScoresResultLike, HitsOptionsLike, HitsResultLike, LabelResultLike, MstResultLike, PageRankResultLike, ScoresResultLike, SsspResultLike, } from "./indexed/accelerator.js";
|
|
17
|
+
export { accelerated } from "./indexed/accelerator.js";
|
|
18
|
+
export type { BfsOptions, BfsResult } from "./indexed/bfs.js";
|
|
19
|
+
export type { CommonNeighborsOptions } from "./indexed/common-neighbors.js";
|
|
20
|
+
export type { LabelResult } from "./indexed/components.js";
|
|
21
|
+
export type { SsspOptions, SsspResult } from "./indexed/dijkstra.js";
|
|
22
|
+
export type { MstOptions, MstResult } from "./indexed/mst.js";
|
|
23
|
+
export type { PageRankOptions as IndexedPageRankOptions, PageRankResult as IndexedPageRankResult, } from "./indexed/pagerank.js";
|
|
14
24
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAGxC,YAAY,EACR,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,eAAe,EACf,IAAI,EACJ,mBAAmB,EACnB,mBAAmB,EACnB,WAAW,EACX,cAAc,EACd,SAAS,EACT,IAAI,EACJ,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAGxC,YAAY,EACR,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,eAAe,EACf,IAAI,EACJ,mBAAmB,EACnB,mBAAmB,EACnB,WAAW,EACX,cAAc,EACd,SAAS,EACT,IAAI,EACJ,MAAM,EAON,eAAe,EACf,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,GAClB,MAAM,kBAAkB,CAAC;AAG1B,cAAc,uBAAuB,CAAC;AAGtC,cAAc,qBAAqB,CAAC;AAGpC,cAAc,4BAA4B,CAAC;AAG3C,cAAc,sBAAsB,CAAC;AAKrC,OAAO,KAAK,OAAO,MAAM,oBAAoB,CAAC;AAG9C,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAItD,YAAY,EACR,qBAAqB,EACrB,oBAAoB,EACpB,cAAc,EACd,qBAAqB,EACrB,6BAA6B,EAC7B,aAAa,EACb,mBAAmB,EACnB,kBAAkB,EAClB,oBAAoB,EACpB,eAAe,EACf,cAAc,EACd,eAAe,EACf,aAAa,EACb,kBAAkB,EAClB,gBAAgB,EAChB,cAAc,GACjB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC9D,YAAY,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAC5E,YAAY,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACrE,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE9D,YAAY,EACR,eAAe,IAAI,sBAAsB,EACzC,cAAc,IAAI,qBAAqB,GAC1C,MAAM,uBAAuB,CAAC"}
|
package/dist/src/index.js
CHANGED
|
@@ -15,6 +15,13 @@ export * from "./research/index.js";
|
|
|
15
15
|
export * from "./data-structures/index.js";
|
|
16
16
|
// Optimized algorithm exports
|
|
17
17
|
export * from "./optimized/index.js";
|
|
18
|
+
// Index-based implementations over @graphty/graph-format snapshots (graph-format design 14.1 rule 2).
|
|
19
|
+
// A NAMESPACE, not a flat re-export: indexed.pageRank, indexed.dijkstra, indexed.breadthFirstSearch,
|
|
20
|
+
// indexed.connectedComponents and indexed.kruskalMST all collide by name with the legacy functions above.
|
|
21
|
+
export * as indexed from "./indexed/index.js";
|
|
22
|
+
// The graph-format bridge (graph-format design 14.6 row A1).
|
|
23
|
+
export { toSnapshot } from "./indexed/to-snapshot.js";
|
|
24
|
+
export { accelerated } from "./indexed/accelerator.js";
|
|
18
25
|
// Note: Configuration exports have been removed.
|
|
19
26
|
// The library now automatically optimizes based on graph size.
|
|
20
27
|
//# sourceMappingURL=index.js.map
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,eAAe;AACf,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,eAAe;AACf,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AA8BxC,oBAAoB;AACpB,cAAc,uBAAuB,CAAC;AAEtC,2CAA2C;AAC3C,cAAc,qBAAqB,CAAC;AAEpC,yBAAyB;AACzB,cAAc,4BAA4B,CAAC;AAE3C,8BAA8B;AAC9B,cAAc,sBAAsB,CAAC;AAErC,sGAAsG;AACtG,qGAAqG;AACrG,0GAA0G;AAC1G,OAAO,KAAK,OAAO,MAAM,oBAAoB,CAAC;AAE9C,6DAA6D;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAsBtD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAYvD,iDAAiD;AACjD,+DAA+D"}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The accelerator seam of `@graphty/algorithms` (WebGPU design section 9.2). It contains NO
|
|
3
|
+
* WebGPU types: an accelerator is anything that satisfies `AlgorithmAccelerator` structurally,
|
|
4
|
+
* and this package never imports the GPU package (design section 9.1, the dependency direction).
|
|
5
|
+
*
|
|
6
|
+
* `accelerated(acc)` is the ONE dispatcher object (design section 9.2, the dispatcher rule); the
|
|
7
|
+
* spelling is `accelerated(acc).pageRank(s, options)`, never
|
|
8
|
+
* `runAlgorithm(snapshot, { accelerator })`. There is no try/catch anywhere below: an accelerator
|
|
9
|
+
* method that throws propagates its throw unchanged, because a silent CPU fallback would hide a
|
|
10
|
+
* broken device behind a slow answer.
|
|
11
|
+
* @module
|
|
12
|
+
*/
|
|
13
|
+
import type { F32, F64, GraphSnapshot, NumericVector, U32 } from "@graphty/graph-format";
|
|
14
|
+
import type { BfsOptions } from "./bfs.js";
|
|
15
|
+
import { type SsspOptions, type SsspResult } from "./dijkstra.js";
|
|
16
|
+
import type { MstOptions } from "./mst.js";
|
|
17
|
+
import type { PageRankOptions } from "./pagerank.js";
|
|
18
|
+
/** A score vector with its convergence report. @public */
|
|
19
|
+
export interface ScoresResultLike {
|
|
20
|
+
readonly scores: NumericVector;
|
|
21
|
+
readonly iterations: number;
|
|
22
|
+
readonly converged: boolean;
|
|
23
|
+
}
|
|
24
|
+
/** ScoresResultLike plus the mass held by dangling nodes. @public */
|
|
25
|
+
export interface PageRankResultLike extends ScoresResultLike {
|
|
26
|
+
readonly danglingMass?: number | undefined;
|
|
27
|
+
}
|
|
28
|
+
/** The two HITS vectors with their convergence report. @public */
|
|
29
|
+
export interface HitsResultLike {
|
|
30
|
+
readonly hubs: NumericVector;
|
|
31
|
+
readonly authorities: NumericVector;
|
|
32
|
+
readonly iterations: number;
|
|
33
|
+
readonly converged: boolean;
|
|
34
|
+
}
|
|
35
|
+
/** A partition: dense labels, a count, and the grouped node indices. @public */
|
|
36
|
+
export interface LabelResultLike {
|
|
37
|
+
readonly labels: U32;
|
|
38
|
+
readonly count: number;
|
|
39
|
+
groups(): U32[];
|
|
40
|
+
}
|
|
41
|
+
/** A breadth-first traversal. @public */
|
|
42
|
+
export interface BfsResultLike {
|
|
43
|
+
readonly depth: U32;
|
|
44
|
+
readonly parent: U32;
|
|
45
|
+
readonly order: U32;
|
|
46
|
+
readonly visitedCount: number;
|
|
47
|
+
}
|
|
48
|
+
/** Single-source distances plus the relaxing arc per node. @public */
|
|
49
|
+
export interface SsspResultLike {
|
|
50
|
+
readonly dist: NumericVector;
|
|
51
|
+
readonly predArc: U32;
|
|
52
|
+
}
|
|
53
|
+
/** SsspResultLike plus the negative-cycle flag. @public */
|
|
54
|
+
export interface BellmanFordResultLike extends SsspResultLike {
|
|
55
|
+
readonly hasNegativeCycle: boolean;
|
|
56
|
+
}
|
|
57
|
+
/** A per-logical-edge score vector. @public */
|
|
58
|
+
export interface EdgeScoresResultLike {
|
|
59
|
+
readonly scores: NumericVector;
|
|
60
|
+
}
|
|
61
|
+
/** An all-pairs distance matrix, row-major, n by n. @public */
|
|
62
|
+
export interface ApspResultLike {
|
|
63
|
+
readonly dist: NumericVector;
|
|
64
|
+
readonly n: number;
|
|
65
|
+
}
|
|
66
|
+
/** Per-node coreness. @public */
|
|
67
|
+
export interface CorenessResultLike {
|
|
68
|
+
readonly coreness: U32;
|
|
69
|
+
}
|
|
70
|
+
/** A spanning forest as logical edge indices. @public */
|
|
71
|
+
export interface MstResultLike {
|
|
72
|
+
readonly edges: U32;
|
|
73
|
+
readonly totalWeight: number;
|
|
74
|
+
}
|
|
75
|
+
/** A partition with its modularity. @public */
|
|
76
|
+
export interface CommunityResultLike extends LabelResultLike {
|
|
77
|
+
readonly modularity: number;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* The structural contract an injected accelerator satisfies. EVERY member except `kind` is
|
|
81
|
+
* optional: an accelerator declares only what it implements, and the dispatcher runs the CPU port
|
|
82
|
+
* for everything else. The list is the design's, in full, so that an accelerator written against
|
|
83
|
+
* it needs no change as the ports land.
|
|
84
|
+
* @public
|
|
85
|
+
*/
|
|
86
|
+
export interface AlgorithmAccelerator {
|
|
87
|
+
readonly kind: string;
|
|
88
|
+
pageRank?(s: GraphSnapshot, options?: PageRankOptions): Promise<PageRankResultLike>;
|
|
89
|
+
personalizedPageRank?(s: GraphSnapshot, personalization: F32 | F64, options?: PageRankOptions): Promise<PageRankResultLike>;
|
|
90
|
+
hits?(s: GraphSnapshot, options?: HitsOptionsLike): Promise<HitsResultLike>;
|
|
91
|
+
eigenvectorCentrality?(s: GraphSnapshot, options?: HitsOptionsLike): Promise<ScoresResultLike>;
|
|
92
|
+
katzCentrality?(s: GraphSnapshot, options?: HitsOptionsLike): Promise<ScoresResultLike>;
|
|
93
|
+
connectedComponents?(s: GraphSnapshot): Promise<LabelResultLike>;
|
|
94
|
+
weaklyConnectedComponents?(s: GraphSnapshot): Promise<LabelResultLike>;
|
|
95
|
+
breadthFirstSearch?(s: GraphSnapshot, source: number, options?: BfsOptions): Promise<BfsResultLike>;
|
|
96
|
+
sssp?(s: GraphSnapshot, source: number, options?: SsspOptions): Promise<SsspResultLike>;
|
|
97
|
+
bellmanFord?(s: GraphSnapshot, source: number, options?: SsspOptions): Promise<BellmanFordResultLike>;
|
|
98
|
+
closenessCentrality?(s: GraphSnapshot, options?: HitsOptionsLike): Promise<ScoresResultLike>;
|
|
99
|
+
betweennessCentrality?(s: GraphSnapshot, options?: BetweennessAcceleratorOptions): Promise<ScoresResultLike>;
|
|
100
|
+
edgeBetweennessCentrality?(s: GraphSnapshot, options?: BetweennessAcceleratorOptions): Promise<EdgeScoresResultLike>;
|
|
101
|
+
allPairsShortestPath?(s: GraphSnapshot, options?: SsspOptions): Promise<ApspResultLike>;
|
|
102
|
+
kCoreDecomposition?(s: GraphSnapshot): Promise<CorenessResultLike>;
|
|
103
|
+
triangleCount?(s: GraphSnapshot): Promise<{
|
|
104
|
+
readonly perNode: U32;
|
|
105
|
+
readonly total: number;
|
|
106
|
+
}>;
|
|
107
|
+
labelPropagation?(s: GraphSnapshot, options?: HitsOptionsLike): Promise<LabelResultLike>;
|
|
108
|
+
minimumSpanningTree?(s: GraphSnapshot, options?: MstOptions): Promise<MstResultLike>;
|
|
109
|
+
louvain?(s: GraphSnapshot, options?: HitsOptionsLike): Promise<CommunityResultLike>;
|
|
110
|
+
release?(s: GraphSnapshot): void;
|
|
111
|
+
dispose?(): void;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* The option shape of the power-iteration family until each one's `indexed.*` port lands and
|
|
115
|
+
* brings its real option type (plan decision PD-2's "NOT TOUCHED" rows). It is DELIBERATELY not
|
|
116
|
+
* `Record<string, unknown>`: these three are the members every one of those algorithms takes, so
|
|
117
|
+
* an accelerator can honour them today and the type narrows rather than widens as ports arrive.
|
|
118
|
+
* @public
|
|
119
|
+
*/
|
|
120
|
+
export interface HitsOptionsLike {
|
|
121
|
+
readonly maxIterations?: number | undefined;
|
|
122
|
+
readonly tolerance?: number | undefined;
|
|
123
|
+
readonly weighted?: boolean | undefined;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Betweenness options as the accelerator sees them: node INDICES, which is the only form that
|
|
127
|
+
* means anything on a snapshot (plan decision PD-5).
|
|
128
|
+
* @public
|
|
129
|
+
*/
|
|
130
|
+
export interface BetweennessAcceleratorOptions {
|
|
131
|
+
readonly normalized?: boolean | undefined;
|
|
132
|
+
readonly endpoints?: boolean | undefined;
|
|
133
|
+
readonly sources?: readonly number[] | undefined;
|
|
134
|
+
readonly k?: number | undefined;
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* The async dispatcher: one method per accelerable `indexed.*` function. Each delegates to the
|
|
138
|
+
* accelerator when it has the method and runs the CPU port otherwise, wrapped in `Promise.resolve`
|
|
139
|
+
* so both paths are async and graphty-element's `async run()` adapters treat them alike.
|
|
140
|
+
*
|
|
141
|
+
* The list GROWS with the A2 ports -- each port PR adds its method. Today it carries the six whose
|
|
142
|
+
* ports exist (plan departure DEP-8A-E).
|
|
143
|
+
* @public
|
|
144
|
+
*/
|
|
145
|
+
export interface AcceleratedAlgorithms {
|
|
146
|
+
readonly accelerator: AlgorithmAccelerator | null;
|
|
147
|
+
pageRank(s: GraphSnapshot, options?: PageRankOptions): Promise<PageRankResultLike>;
|
|
148
|
+
sssp(s: GraphSnapshot, source: number, options?: SsspOptions): Promise<SsspResult>;
|
|
149
|
+
breadthFirstSearch(s: GraphSnapshot, source: number, options?: BfsOptions): Promise<BfsResultLike>;
|
|
150
|
+
connectedComponents(s: GraphSnapshot): Promise<LabelResultLike>;
|
|
151
|
+
weaklyConnectedComponents(s: GraphSnapshot): Promise<LabelResultLike>;
|
|
152
|
+
minimumSpanningTree(s: GraphSnapshot, options?: MstOptions): Promise<MstResultLike>;
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Build the dispatcher for an accelerator, or for none.
|
|
156
|
+
* @param acc - The injected accelerator, or `null` / `undefined` for the CPU path
|
|
157
|
+
* @returns A dispatcher whose methods delegate where they can and run the CPU port otherwise
|
|
158
|
+
* @public
|
|
159
|
+
*/
|
|
160
|
+
export declare function accelerated(acc: AlgorithmAccelerator | null | undefined): AcceleratedAlgorithms;
|
|
161
|
+
//# sourceMappingURL=accelerator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"accelerator.d.ts","sourceRoot":"","sources":["../../../src/indexed/accelerator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The accelerator seam of `@graphty/algorithms` (WebGPU design section 9.2). It contains NO
|
|
3
|
+
* WebGPU types: an accelerator is anything that satisfies `AlgorithmAccelerator` structurally,
|
|
4
|
+
* and this package never imports the GPU package (design section 9.1, the dependency direction).
|
|
5
|
+
*
|
|
6
|
+
* `accelerated(acc)` is the ONE dispatcher object (design section 9.2, the dispatcher rule); the
|
|
7
|
+
* spelling is `accelerated(acc).pageRank(s, options)`, never
|
|
8
|
+
* `runAlgorithm(snapshot, { accelerator })`. There is no try/catch anywhere below: an accelerator
|
|
9
|
+
* method that throws propagates its throw unchanged, because a silent CPU fallback would hide a
|
|
10
|
+
* broken device behind a slow answer.
|
|
11
|
+
* @module
|
|
12
|
+
*/
|
|
13
|
+
import { walkPredArcs, walkPredEdges } from "./dijkstra.js";
|
|
14
|
+
import * as indexed from "./index.js";
|
|
15
|
+
/**
|
|
16
|
+
* Attach `pathTo` / `pathEdges` to an accelerator's bare `{ dist, predArc }`, so both paths return
|
|
17
|
+
* the design's `SsspResult` and the element keeps ONE result-writing loop. The GPU package cannot
|
|
18
|
+
* attach them itself: it must not depend on the CPU package at runtime (design 9.2 line 2971, D3).
|
|
19
|
+
* @param s - The snapshot the search ran on
|
|
20
|
+
* @param source - The search's source node index
|
|
21
|
+
* @param like - The accelerator's result
|
|
22
|
+
* @returns The decorated result
|
|
23
|
+
*/
|
|
24
|
+
function decorateSssp(s, source, like) {
|
|
25
|
+
const { predArc } = like;
|
|
26
|
+
return {
|
|
27
|
+
dist: like.dist,
|
|
28
|
+
predArc,
|
|
29
|
+
pathTo: (target) => walkPredArcs(s, predArc, source, target),
|
|
30
|
+
pathEdges: (target) => walkPredEdges(s, predArc, source, target),
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Build the dispatcher for an accelerator, or for none.
|
|
35
|
+
* @param acc - The injected accelerator, or `null` / `undefined` for the CPU path
|
|
36
|
+
* @returns A dispatcher whose methods delegate where they can and run the CPU port otherwise
|
|
37
|
+
* @public
|
|
38
|
+
*/
|
|
39
|
+
export function accelerated(acc) {
|
|
40
|
+
return {
|
|
41
|
+
accelerator: acc ?? null,
|
|
42
|
+
pageRank: (s, options) => acc?.pageRank !== undefined ? acc.pageRank(s, options) : Promise.resolve(indexed.pageRank(s, options)),
|
|
43
|
+
sssp: (s, source, options) => acc?.sssp !== undefined
|
|
44
|
+
? acc.sssp(s, source, options).then((like) => decorateSssp(s, source, like))
|
|
45
|
+
: Promise.resolve(indexed.dijkstra(s, source, options)),
|
|
46
|
+
breadthFirstSearch: (s, source, options) => acc?.breadthFirstSearch !== undefined
|
|
47
|
+
? acc.breadthFirstSearch(s, source, options)
|
|
48
|
+
: Promise.resolve(indexed.breadthFirstSearch(s, source, options)),
|
|
49
|
+
connectedComponents: (s) => acc?.connectedComponents !== undefined
|
|
50
|
+
? acc.connectedComponents(s)
|
|
51
|
+
: Promise.resolve(indexed.connectedComponents(s)),
|
|
52
|
+
weaklyConnectedComponents: (s) => acc?.weaklyConnectedComponents !== undefined
|
|
53
|
+
? acc.weaklyConnectedComponents(s)
|
|
54
|
+
: Promise.resolve(indexed.weaklyConnectedComponents(s)),
|
|
55
|
+
minimumSpanningTree: (s, options) => acc?.minimumSpanningTree !== undefined
|
|
56
|
+
? acc.minimumSpanningTree(s, options)
|
|
57
|
+
: Promise.resolve(indexed.kruskalMST(s, options)),
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=accelerator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"accelerator.js","sourceRoot":"","sources":["../../../src/indexed/accelerator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAKH,OAAO,EAAqC,YAAY,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC/F,OAAO,KAAK,OAAO,MAAM,YAAY,CAAC;AA4JtC;;;;;;;;GAQG;AACH,SAAS,YAAY,CAAC,CAAgB,EAAE,MAAc,EAAE,IAAoB;IACxE,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IACzB,OAAO;QACH,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,OAAO;QACP,MAAM,EAAE,CAAC,MAAc,EAAO,EAAE,CAAC,YAAY,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC;QACzE,SAAS,EAAE,CAAC,MAAc,EAAO,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC;KAChF,CAAC;AACN,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,GAA4C;IACpE,OAAO;QACH,WAAW,EAAE,GAAG,IAAI,IAAI;QACxB,QAAQ,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,CACrB,GAAG,EAAE,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QAC1G,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,CACzB,GAAG,EAAE,IAAI,KAAK,SAAS;YACnB,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;YAC5E,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QAC/D,kBAAkB,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,CACvC,GAAG,EAAE,kBAAkB,KAAK,SAAS;YACjC,CAAC,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC;YAC5C,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QACzE,mBAAmB,EAAE,CAAC,CAAC,EAAE,EAAE,CACvB,GAAG,EAAE,mBAAmB,KAAK,SAAS;YAClC,CAAC,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,CAAC;YAC5B,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;QACzD,yBAAyB,EAAE,CAAC,CAAC,EAAE,EAAE,CAC7B,GAAG,EAAE,yBAAyB,KAAK,SAAS;YACxC,CAAC,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC,CAAC;YAClC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC;QAC/D,mBAAmB,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,CAChC,GAAG,EAAE,mBAAmB,KAAK,SAAS;YAClC,CAAC,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,EAAE,OAAO,CAAC;YACrC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;KAC5D,CAAC;AACN,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { type AdjacencyView, type U32 } from "@graphty/graph-format";
|
|
2
|
+
/** Result of the index-based BFS (graph-format design 14.2 Port 1). @public */
|
|
3
|
+
export interface BfsResult {
|
|
4
|
+
/** Visit order, one entry per visited node; a subarray of length `visitedCount`. */
|
|
5
|
+
readonly order: U32;
|
|
6
|
+
/** Parent of every node, INVALID_INDEX for the start node and for unvisited nodes. */
|
|
7
|
+
readonly parent: U32;
|
|
8
|
+
/** Hop depth of every node, INVALID_INDEX for unvisited nodes. */
|
|
9
|
+
readonly depth: U32;
|
|
10
|
+
/** How many nodes were visited. */
|
|
11
|
+
readonly visitedCount: number;
|
|
12
|
+
}
|
|
13
|
+
/** Options of the index-based BFS. @public */
|
|
14
|
+
export interface BfsOptions {
|
|
15
|
+
/** Stop expanding at this depth; unbounded when omitted. */
|
|
16
|
+
readonly maxDepth?: number | undefined;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Breadth-first search over out-neighbours. Takes any `AdjacencyView`, so `s.reverse()` gives an
|
|
20
|
+
* in-neighbour BFS with no extra code.
|
|
21
|
+
* @param g - The adjacency to traverse
|
|
22
|
+
* @param start - The node index to start from
|
|
23
|
+
* @param options - Traversal options
|
|
24
|
+
* @returns The visit order, the parent array, the depth array and the visited count
|
|
25
|
+
* @public
|
|
26
|
+
*/
|
|
27
|
+
export declare function breadthFirstSearch(g: AdjacencyView, start: number, options?: BfsOptions): BfsResult;
|
|
28
|
+
//# sourceMappingURL=bfs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bfs.d.ts","sourceRoot":"","sources":["../../../src/indexed/bfs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAiB,KAAK,GAAG,EAAE,MAAM,uBAAuB,CAAC;AAEpF,+EAA+E;AAC/E,MAAM,WAAW,SAAS;IACtB,oFAAoF;IACpF,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC;IACpB,sFAAsF;IACtF,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC;IACrB,kEAAkE;IAClE,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC;IACpB,mCAAmC;IACnC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CACjC;AAED,8CAA8C;AAC9C,MAAM,WAAW,UAAU;IACvB,4DAA4D;IAC5D,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC1C;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,UAAe,GAAG,SAAS,CA2BvG"}
|