@graphty/algorithms 2.1.1 → 2.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/README.md +139 -50
- package/dist/algorithms.js +15260 -10390
- package/dist/algorithms.js.map +1 -1
- package/dist/algorithms.standalone.js +26675 -21542
- package/dist/algorithms.standalone.js.map +1 -1
- package/dist/src/algorithms/centrality/betweenness.d.ts +18 -0
- package/dist/src/algorithms/centrality/betweenness.d.ts.map +1 -1
- package/dist/src/algorithms/centrality/betweenness.js +40 -1
- package/dist/src/algorithms/centrality/betweenness.js.map +1 -1
- package/dist/src/algorithms/centrality/closeness.d.ts +20 -0
- package/dist/src/algorithms/centrality/closeness.d.ts.map +1 -1
- package/dist/src/algorithms/centrality/closeness.js +93 -8
- package/dist/src/algorithms/centrality/closeness.js.map +1 -1
- package/dist/src/algorithms/centrality/degree.d.ts +9 -0
- package/dist/src/algorithms/centrality/degree.d.ts.map +1 -1
- package/dist/src/algorithms/centrality/degree.js +18 -0
- package/dist/src/algorithms/centrality/degree.js.map +1 -1
- package/dist/src/algorithms/centrality/eigenvector.d.ts +10 -0
- package/dist/src/algorithms/centrality/eigenvector.d.ts.map +1 -1
- package/dist/src/algorithms/centrality/eigenvector.js +29 -0
- package/dist/src/algorithms/centrality/eigenvector.js.map +1 -1
- package/dist/src/algorithms/centrality/hits.d.ts +9 -0
- package/dist/src/algorithms/centrality/hits.d.ts.map +1 -1
- package/dist/src/algorithms/centrality/hits.js +23 -0
- package/dist/src/algorithms/centrality/hits.js.map +1 -1
- package/dist/src/algorithms/centrality/katz.d.ts +9 -0
- package/dist/src/algorithms/centrality/katz.d.ts.map +1 -1
- package/dist/src/algorithms/centrality/katz.js +31 -0
- package/dist/src/algorithms/centrality/katz.js.map +1 -1
- package/dist/src/algorithms/centrality/pagerank.d.ts +13 -13
- package/dist/src/algorithms/centrality/pagerank.d.ts.map +1 -1
- package/dist/src/algorithms/centrality/pagerank.js +47 -10
- package/dist/src/algorithms/centrality/pagerank.js.map +1 -1
- package/dist/src/algorithms/community/girvan-newman-legacy.d.ts +27 -0
- package/dist/src/algorithms/community/girvan-newman-legacy.d.ts.map +1 -0
- package/dist/src/algorithms/community/girvan-newman-legacy.js +335 -0
- package/dist/src/algorithms/community/girvan-newman-legacy.js.map +1 -0
- package/dist/src/algorithms/community/girvan-newman.d.ts +5 -3
- package/dist/src/algorithms/community/girvan-newman.d.ts.map +1 -1
- package/dist/src/algorithms/community/girvan-newman.js +34 -308
- package/dist/src/algorithms/community/girvan-newman.js.map +1 -1
- package/dist/src/algorithms/community/label-propagation.d.ts +9 -6
- package/dist/src/algorithms/community/label-propagation.d.ts.map +1 -1
- package/dist/src/algorithms/community/label-propagation.js +24 -110
- package/dist/src/algorithms/community/label-propagation.js.map +1 -1
- package/dist/src/algorithms/components/connected.d.ts.map +1 -1
- package/dist/src/algorithms/components/connected.js +28 -77
- package/dist/src/algorithms/components/connected.js.map +1 -1
- package/dist/src/algorithms/mst/kruskal.d.ts.map +1 -1
- package/dist/src/algorithms/mst/kruskal.js +59 -3
- package/dist/src/algorithms/mst/kruskal.js.map +1 -1
- package/dist/src/algorithms/shortest-path/bellman-ford.d.ts.map +1 -1
- package/dist/src/algorithms/shortest-path/bellman-ford.js +46 -0
- package/dist/src/algorithms/shortest-path/bellman-ford.js.map +1 -1
- package/dist/src/algorithms/shortest-path/dijkstra.d.ts.map +1 -1
- package/dist/src/algorithms/shortest-path/dijkstra.js +27 -0
- package/dist/src/algorithms/shortest-path/dijkstra.js.map +1 -1
- package/dist/src/algorithms/shortest-path/floyd-warshall.d.ts +15 -5
- package/dist/src/algorithms/shortest-path/floyd-warshall.d.ts.map +1 -1
- package/dist/src/algorithms/shortest-path/floyd-warshall.js +97 -107
- package/dist/src/algorithms/shortest-path/floyd-warshall.js.map +1 -1
- package/dist/src/algorithms/traversal/bfs-unified.d.ts +2 -12
- package/dist/src/algorithms/traversal/bfs-unified.d.ts.map +1 -1
- package/dist/src/algorithms/traversal/bfs-unified.js +47 -308
- package/dist/src/algorithms/traversal/bfs-unified.js.map +1 -1
- package/dist/src/algorithms/traversal/bfs-variants.d.ts.map +1 -1
- package/dist/src/algorithms/traversal/bfs-variants.js +5 -25
- package/dist/src/algorithms/traversal/bfs-variants.js.map +1 -1
- package/dist/src/algorithms/traversal/bfs.d.ts +0 -3
- package/dist/src/algorithms/traversal/bfs.d.ts.map +1 -1
- package/dist/src/algorithms/traversal/bfs.js +0 -4
- package/dist/src/algorithms/traversal/bfs.js.map +1 -1
- package/dist/src/algorithms/traversal/dfs.d.ts.map +1 -1
- package/dist/src/algorithms/traversal/dfs.js +33 -154
- package/dist/src/algorithms/traversal/dfs.js.map +1 -1
- package/dist/src/clustering/hierarchical-legacy.d.ts +56 -0
- package/dist/src/clustering/hierarchical-legacy.d.ts.map +1 -0
- package/dist/src/clustering/hierarchical-legacy.js +441 -0
- package/dist/src/clustering/hierarchical-legacy.js.map +1 -0
- package/dist/src/clustering/hierarchical.d.ts +7 -39
- package/dist/src/clustering/hierarchical.d.ts.map +1 -1
- package/dist/src/clustering/hierarchical.js +56 -417
- package/dist/src/clustering/hierarchical.js.map +1 -1
- package/dist/src/clustering/k-core-legacy.d.ts +30 -0
- package/dist/src/clustering/k-core-legacy.d.ts.map +1 -0
- package/dist/src/clustering/k-core-legacy.js +191 -0
- package/dist/src/clustering/k-core-legacy.js.map +1 -0
- package/dist/src/clustering/k-core.d.ts +8 -7
- package/dist/src/clustering/k-core.d.ts.map +1 -1
- package/dist/src/clustering/k-core.js +33 -174
- package/dist/src/clustering/k-core.js.map +1 -1
- package/dist/src/clustering/mcl-legacy.d.ts +42 -0
- package/dist/src/clustering/mcl-legacy.d.ts.map +1 -0
- package/dist/src/clustering/mcl-legacy.js +386 -0
- package/dist/src/clustering/mcl-legacy.js.map +1 -0
- package/dist/src/clustering/mcl.d.ts +9 -32
- package/dist/src/clustering/mcl.d.ts.map +1 -1
- package/dist/src/clustering/mcl.js +48 -374
- package/dist/src/clustering/mcl.js.map +1 -1
- package/dist/src/index.d.ts +29 -3
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +2 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/indexed/accelerator.d.ts +141 -11
- package/dist/src/indexed/accelerator.d.ts.map +1 -1
- package/dist/src/indexed/accelerator.js +319 -5
- package/dist/src/indexed/accelerator.js.map +1 -1
- package/dist/src/indexed/all-pairs.d.ts +59 -0
- package/dist/src/indexed/all-pairs.d.ts.map +1 -0
- package/dist/src/indexed/all-pairs.js +274 -0
- package/dist/src/indexed/all-pairs.js.map +1 -0
- package/dist/src/indexed/bellman-ford.d.ts +25 -0
- package/dist/src/indexed/bellman-ford.d.ts.map +1 -0
- package/dist/src/indexed/bellman-ford.js +59 -0
- package/dist/src/indexed/bellman-ford.js.map +1 -0
- package/dist/src/indexed/betweenness.d.ts +85 -0
- package/dist/src/indexed/betweenness.d.ts.map +1 -0
- package/dist/src/indexed/betweenness.js +188 -0
- package/dist/src/indexed/betweenness.js.map +1 -0
- package/dist/src/indexed/bfs.d.ts +69 -2
- package/dist/src/indexed/bfs.d.ts.map +1 -1
- package/dist/src/indexed/bfs.js +148 -1
- package/dist/src/indexed/bfs.js.map +1 -1
- package/dist/src/indexed/bipartite.d.ts +37 -0
- package/dist/src/indexed/bipartite.d.ts.map +1 -0
- package/dist/src/indexed/bipartite.js +54 -0
- package/dist/src/indexed/bipartite.js.map +1 -0
- package/dist/src/indexed/closeness.d.ts +49 -0
- package/dist/src/indexed/closeness.d.ts.map +1 -0
- package/dist/src/indexed/closeness.js +127 -0
- package/dist/src/indexed/closeness.js.map +1 -0
- package/dist/src/indexed/common-neighbors.d.ts +14 -1
- package/dist/src/indexed/common-neighbors.d.ts.map +1 -1
- package/dist/src/indexed/common-neighbors.js +24 -14
- package/dist/src/indexed/common-neighbors.js.map +1 -1
- package/dist/src/indexed/degree.d.ts +19 -0
- package/dist/src/indexed/degree.d.ts.map +1 -0
- package/dist/src/indexed/degree.js +45 -0
- package/dist/src/indexed/degree.js.map +1 -0
- package/dist/src/indexed/delta-pagerank.d.ts +145 -0
- package/dist/src/indexed/delta-pagerank.d.ts.map +1 -0
- package/dist/src/indexed/delta-pagerank.js +428 -0
- package/dist/src/indexed/delta-pagerank.js.map +1 -0
- package/dist/src/indexed/dfs.d.ts +55 -0
- package/dist/src/indexed/dfs.d.ts.map +1 -0
- package/dist/src/indexed/dfs.js +146 -0
- package/dist/src/indexed/dfs.js.map +1 -0
- package/dist/src/indexed/eigenvector.d.ts +48 -0
- package/dist/src/indexed/eigenvector.d.ts.map +1 -0
- package/dist/src/indexed/eigenvector.js +162 -0
- package/dist/src/indexed/eigenvector.js.map +1 -0
- package/dist/src/indexed/facade.d.ts +109 -0
- package/dist/src/indexed/facade.d.ts.map +1 -0
- package/dist/src/indexed/facade.js +204 -0
- package/dist/src/indexed/facade.js.map +1 -0
- package/dist/src/indexed/flow.d.ts +120 -0
- package/dist/src/indexed/flow.d.ts.map +1 -0
- package/dist/src/indexed/flow.js +377 -0
- package/dist/src/indexed/flow.js.map +1 -0
- package/dist/src/indexed/girvan-newman.d.ts +42 -0
- package/dist/src/indexed/girvan-newman.d.ts.map +1 -0
- package/dist/src/indexed/girvan-newman.js +90 -0
- package/dist/src/indexed/girvan-newman.js.map +1 -0
- package/dist/src/indexed/grsbm.d.ts +85 -0
- package/dist/src/indexed/grsbm.d.ts.map +1 -0
- package/dist/src/indexed/grsbm.js +287 -0
- package/dist/src/indexed/grsbm.js.map +1 -0
- package/dist/src/indexed/hierarchical.d.ts +69 -0
- package/dist/src/indexed/hierarchical.d.ts.map +1 -0
- package/dist/src/indexed/hierarchical.js +245 -0
- package/dist/src/indexed/hierarchical.js.map +1 -0
- package/dist/src/indexed/index.d.ts +29 -3
- package/dist/src/indexed/index.d.ts.map +1 -1
- package/dist/src/indexed/index.js +29 -3
- package/dist/src/indexed/index.js.map +1 -1
- package/dist/src/indexed/isomorphism.d.ts +42 -0
- package/dist/src/indexed/isomorphism.d.ts.map +1 -0
- package/dist/src/indexed/isomorphism.js +269 -0
- package/dist/src/indexed/isomorphism.js.map +1 -0
- package/dist/src/indexed/label-propagation.d.ts +134 -0
- package/dist/src/indexed/label-propagation.d.ts.map +1 -0
- package/dist/src/indexed/label-propagation.js +486 -0
- package/dist/src/indexed/label-propagation.js.map +1 -0
- package/dist/src/indexed/leiden.d.ts +52 -0
- package/dist/src/indexed/leiden.d.ts.map +1 -0
- package/dist/src/indexed/leiden.js +384 -0
- package/dist/src/indexed/leiden.js.map +1 -0
- package/dist/src/indexed/link-prediction.d.ts +147 -0
- package/dist/src/indexed/link-prediction.d.ts.map +1 -0
- package/dist/src/indexed/link-prediction.js +317 -0
- package/dist/src/indexed/link-prediction.js.map +1 -0
- package/dist/src/indexed/markov.d.ts +54 -0
- package/dist/src/indexed/markov.d.ts.map +1 -0
- package/dist/src/indexed/markov.js +284 -0
- package/dist/src/indexed/markov.js.map +1 -0
- package/dist/src/indexed/matching.d.ts +53 -0
- package/dist/src/indexed/matching.d.ts.map +1 -0
- package/dist/src/indexed/matching.js +139 -0
- package/dist/src/indexed/matching.js.map +1 -0
- package/dist/src/indexed/min-cut.d.ts +48 -0
- package/dist/src/indexed/min-cut.d.ts.map +1 -0
- package/dist/src/indexed/min-cut.js +175 -0
- package/dist/src/indexed/min-cut.js.map +1 -0
- package/dist/src/indexed/modularity.d.ts +34 -0
- package/dist/src/indexed/modularity.d.ts.map +1 -0
- package/dist/src/indexed/modularity.js +74 -0
- package/dist/src/indexed/modularity.js.map +1 -0
- package/dist/src/indexed/mst.d.ts +29 -1
- package/dist/src/indexed/mst.d.ts.map +1 -1
- package/dist/src/indexed/mst.js +62 -0
- package/dist/src/indexed/mst.js.map +1 -1
- package/dist/src/indexed/pagerank.d.ts +29 -6
- package/dist/src/indexed/pagerank.d.ts.map +1 -1
- package/dist/src/indexed/pagerank.js +107 -11
- package/dist/src/indexed/pagerank.js.map +1 -1
- package/dist/src/indexed/point-to-point.d.ts +53 -0
- package/dist/src/indexed/point-to-point.d.ts.map +1 -0
- package/dist/src/indexed/point-to-point.js +173 -0
- package/dist/src/indexed/point-to-point.js.map +1 -0
- package/dist/src/indexed/scc.d.ts +53 -0
- package/dist/src/indexed/scc.d.ts.map +1 -0
- package/dist/src/indexed/scc.js +110 -0
- package/dist/src/indexed/scc.js.map +1 -0
- package/dist/src/indexed/spectral.d.ts +61 -0
- package/dist/src/indexed/spectral.d.ts.map +1 -0
- package/dist/src/indexed/spectral.js +476 -0
- package/dist/src/indexed/spectral.js.map +1 -0
- package/dist/src/indexed/structures/bit-set.d.ts +45 -0
- package/dist/src/indexed/structures/bit-set.d.ts.map +1 -0
- package/dist/src/indexed/structures/bit-set.js +57 -0
- package/dist/src/indexed/structures/bit-set.js.map +1 -0
- package/dist/src/indexed/structures/max-heap.d.ts +52 -0
- package/dist/src/indexed/structures/max-heap.d.ts.map +1 -0
- package/dist/src/indexed/structures/max-heap.js +66 -0
- package/dist/src/indexed/structures/max-heap.js.map +1 -0
- package/dist/src/indexed/structures/min-heap.d.ts +30 -1
- package/dist/src/indexed/structures/min-heap.d.ts.map +1 -1
- package/dist/src/indexed/structures/min-heap.js +46 -6
- package/dist/src/indexed/structures/min-heap.js.map +1 -1
- package/dist/src/indexed/structures/ring-queue.d.ts +41 -0
- package/dist/src/indexed/structures/ring-queue.d.ts.map +1 -0
- package/dist/src/indexed/structures/ring-queue.js +64 -0
- package/dist/src/indexed/structures/ring-queue.js.map +1 -0
- package/dist/src/indexed/sync.d.ts +50 -0
- package/dist/src/indexed/sync.d.ts.map +1 -0
- package/dist/src/indexed/sync.js +175 -0
- package/dist/src/indexed/sync.js.map +1 -0
- package/dist/src/indexed/terahac.d.ts +58 -0
- package/dist/src/indexed/terahac.d.ts.map +1 -0
- package/dist/src/indexed/terahac.js +244 -0
- package/dist/src/indexed/terahac.js.map +1 -0
- package/dist/src/indexed/to-snapshot.d.ts +45 -2
- package/dist/src/indexed/to-snapshot.d.ts.map +1 -1
- package/dist/src/indexed/to-snapshot.js +140 -6
- package/dist/src/indexed/to-snapshot.js.map +1 -1
- package/dist/src/link-prediction/common-neighbors-legacy.d.ts +71 -0
- package/dist/src/link-prediction/common-neighbors-legacy.d.ts.map +1 -0
- package/dist/src/link-prediction/common-neighbors-legacy.js +172 -0
- package/dist/src/link-prediction/common-neighbors-legacy.js.map +1 -0
- package/dist/src/link-prediction/common-neighbors.d.ts +11 -19
- package/dist/src/link-prediction/common-neighbors.d.ts.map +1 -1
- package/dist/src/link-prediction/common-neighbors.js +56 -123
- package/dist/src/link-prediction/common-neighbors.js.map +1 -1
- package/dist/src/optimized/direction-optimized-bfs.d.ts +6 -0
- package/dist/src/optimized/direction-optimized-bfs.d.ts.map +1 -1
- package/dist/src/optimized/direction-optimized-bfs.js +6 -0
- package/dist/src/optimized/direction-optimized-bfs.js.map +1 -1
- package/dist/src/research/grsbm-legacy.d.ts +82 -0
- package/dist/src/research/grsbm-legacy.d.ts.map +1 -0
- package/dist/src/research/grsbm-legacy.js +416 -0
- package/dist/src/research/grsbm-legacy.js.map +1 -0
- package/dist/src/research/grsbm.d.ts +9 -66
- package/dist/src/research/grsbm.d.ts.map +1 -1
- package/dist/src/research/grsbm.js +67 -391
- package/dist/src/research/grsbm.js.map +1 -1
- package/dist/src/research/sync-legacy.d.ts +48 -0
- package/dist/src/research/sync-legacy.d.ts.map +1 -0
- package/dist/src/research/sync-legacy.js +337 -0
- package/dist/src/research/sync-legacy.js.map +1 -0
- package/dist/src/research/sync.d.ts +10 -32
- package/dist/src/research/sync.d.ts.map +1 -1
- package/dist/src/research/sync.js +28 -316
- package/dist/src/research/sync.js.map +1 -1
- package/package.json +4 -3
- package/src/algorithms/centrality/betweenness.ts +51 -1
- package/src/algorithms/centrality/closeness.ts +112 -12
- package/src/algorithms/centrality/degree.ts +19 -0
- package/src/algorithms/centrality/eigenvector.ts +34 -0
- package/src/algorithms/centrality/hits.ts +24 -0
- package/src/algorithms/centrality/katz.ts +32 -0
- package/src/algorithms/centrality/pagerank.ts +53 -13
- package/src/algorithms/community/girvan-newman-legacy.ts +414 -0
- package/src/algorithms/community/girvan-newman.ts +36 -386
- package/src/algorithms/community/label-propagation.ts +24 -133
- package/src/algorithms/components/connected.ts +28 -95
- package/src/algorithms/mst/kruskal.ts +65 -4
- package/src/algorithms/shortest-path/bellman-ford.ts +49 -0
- package/src/algorithms/shortest-path/dijkstra.ts +29 -0
- package/src/algorithms/shortest-path/floyd-warshall.ts +106 -136
- package/src/algorithms/traversal/bfs-unified.ts +52 -366
- package/src/algorithms/traversal/bfs-variants.ts +5 -28
- package/src/algorithms/traversal/bfs.ts +0 -4
- package/src/algorithms/traversal/dfs.ts +39 -182
- package/src/clustering/hierarchical-legacy.ts +551 -0
- package/src/clustering/hierarchical.ts +64 -520
- package/src/clustering/k-core-legacy.ts +229 -0
- package/src/clustering/k-core.ts +38 -209
- package/src/clustering/mcl-legacy.ts +498 -0
- package/src/clustering/mcl.ts +46 -479
- package/src/index.ts +90 -3
- package/src/indexed/accelerator.ts +502 -16
- package/src/indexed/all-pairs.ts +342 -0
- package/src/indexed/bellman-ford.ts +72 -0
- package/src/indexed/betweenness.ts +258 -0
- package/src/indexed/bfs.ts +189 -3
- package/src/indexed/bipartite.ts +77 -0
- package/src/indexed/closeness.ts +160 -0
- package/src/indexed/common-neighbors.ts +31 -14
- package/src/indexed/degree.ts +55 -0
- package/src/indexed/delta-pagerank.ts +513 -0
- package/src/indexed/dfs.ts +189 -0
- package/src/indexed/eigenvector.ts +202 -0
- package/src/indexed/facade.ts +229 -0
- package/src/indexed/flow.ts +500 -0
- package/src/indexed/girvan-newman.ts +120 -0
- package/src/indexed/grsbm.ts +390 -0
- package/src/indexed/hierarchical.ts +295 -0
- package/src/indexed/index.ts +94 -3
- package/src/indexed/isomorphism.ts +305 -0
- package/src/indexed/label-propagation.ts +582 -0
- package/src/indexed/leiden.ts +436 -0
- package/src/indexed/link-prediction.ts +399 -0
- package/src/indexed/markov.ts +324 -0
- package/src/indexed/matching.ts +192 -0
- package/src/indexed/min-cut.ts +201 -0
- package/src/indexed/modularity.ts +81 -0
- package/src/indexed/mst.ts +79 -1
- package/src/indexed/pagerank.ts +128 -15
- package/src/indexed/point-to-point.ts +220 -0
- package/src/indexed/scc.ts +132 -0
- package/src/indexed/spectral.ts +550 -0
- package/src/indexed/structures/bit-set.ts +65 -0
- package/src/indexed/structures/max-heap.ts +74 -0
- package/src/indexed/structures/min-heap.ts +51 -6
- package/src/indexed/structures/ring-queue.ts +70 -0
- package/src/indexed/sync.ts +229 -0
- package/src/indexed/terahac.ts +290 -0
- package/src/indexed/to-snapshot.ts +156 -6
- package/src/link-prediction/common-neighbors-legacy.ts +252 -0
- package/src/link-prediction/common-neighbors.ts +65 -168
- package/src/optimized/direction-optimized-bfs.ts +6 -1
- package/src/research/grsbm-legacy.ts +586 -0
- package/src/research/grsbm.ts +76 -555
- package/src/research/sync-legacy.ts +456 -0
- package/src/research/sync.ts +30 -431
|
@@ -11,12 +11,26 @@
|
|
|
11
11
|
* @module
|
|
12
12
|
*/
|
|
13
13
|
import type { F32, F64, GraphSnapshot, NumericVector, U32 } from "@graphty/graph-format";
|
|
14
|
-
import type
|
|
14
|
+
import { type ApspOptions } from "./all-pairs.js";
|
|
15
|
+
import type { BellmanFordResult } from "./bellman-ford.js";
|
|
16
|
+
import { type BetweennessOptions, type EdgeBetweennessOptions } from "./betweenness.js";
|
|
17
|
+
import type { ArcOrderOption, BfsOptions } from "./bfs.js";
|
|
18
|
+
import type { ClosenessOptions } from "./closeness.js";
|
|
19
|
+
import type { LabelResult } from "./components.js";
|
|
20
|
+
import type { DfsOptions, DfsResult } from "./dfs.js";
|
|
15
21
|
import { type SsspOptions, type SsspResult } from "./dijkstra.js";
|
|
22
|
+
import { type EigenvectorOptions } from "./eigenvector.js";
|
|
23
|
+
import type { MaxFlowOptions, MaxFlowResult, MinCutResult } from "./flow.js";
|
|
24
|
+
import type { GirvanNewmanOptions, GirvanNewmanResult } from "./girvan-newman.js";
|
|
16
25
|
import type { HitsOptions } from "./hits.js";
|
|
17
26
|
import type { KatzOptions } from "./katz.js";
|
|
27
|
+
import type { LabelPropagationOptions } from "./label-propagation.js";
|
|
28
|
+
import type { LeidenOptions, LeidenResult } from "./leiden.js";
|
|
29
|
+
import type { LinkPredictionOptions, LinkPredictionResult } from "./link-prediction.js";
|
|
18
30
|
import type { LouvainOptions } from "./louvain.js";
|
|
19
|
-
import type {
|
|
31
|
+
import type { BipartiteMatchingOptions, BipartiteMatchingResult } from "./matching.js";
|
|
32
|
+
import type { KargerOptions, StoerWagnerOptions } from "./min-cut.js";
|
|
33
|
+
import type { MstOptions, PrimOptions, PrimResult } from "./mst.js";
|
|
20
34
|
import type { PageRankOptions } from "./pagerank.js";
|
|
21
35
|
/** A score vector with its convergence report. @public */
|
|
22
36
|
export interface ScoresResultLike {
|
|
@@ -66,6 +80,10 @@ export interface ApspResultLike {
|
|
|
66
80
|
readonly dist: NumericVector;
|
|
67
81
|
readonly n: number;
|
|
68
82
|
}
|
|
83
|
+
/** ApspResultLike plus the negative-cycle flag. @public */
|
|
84
|
+
export interface ApspCycleResultLike extends ApspResultLike {
|
|
85
|
+
readonly hasNegativeCycle: boolean;
|
|
86
|
+
}
|
|
69
87
|
/** Per-node coreness. @public */
|
|
70
88
|
export interface CorenessResultLike {
|
|
71
89
|
readonly coreness: U32;
|
|
@@ -88,14 +106,14 @@ export interface CommunityResultLike extends LabelResultLike {
|
|
|
88
106
|
*/
|
|
89
107
|
export interface AlgorithmAccelerator {
|
|
90
108
|
readonly kind: string;
|
|
91
|
-
pageRank?(s: GraphSnapshot, options?:
|
|
92
|
-
personalizedPageRank?(s: GraphSnapshot, personalization: F32 | F64, options?:
|
|
109
|
+
pageRank?(s: GraphSnapshot, options?: PageRankOptionsLike): Promise<PageRankResultLike>;
|
|
110
|
+
personalizedPageRank?(s: GraphSnapshot, personalization: F32 | F64, options?: PageRankOptionsLike): Promise<PageRankResultLike>;
|
|
93
111
|
hits?(s: GraphSnapshot, options?: HitsOptionsLike): Promise<HitsResultLike>;
|
|
94
112
|
eigenvectorCentrality?(s: GraphSnapshot, options?: HitsOptionsLike): Promise<ScoresResultLike>;
|
|
95
|
-
katzCentrality?(s: GraphSnapshot, options?:
|
|
113
|
+
katzCentrality?(s: GraphSnapshot, options?: KatzOptionsLike): Promise<ScoresResultLike>;
|
|
96
114
|
connectedComponents?(s: GraphSnapshot): Promise<LabelResultLike>;
|
|
97
115
|
weaklyConnectedComponents?(s: GraphSnapshot): Promise<LabelResultLike>;
|
|
98
|
-
breadthFirstSearch?(s: GraphSnapshot, source: number, options?: BfsOptions): Promise<BfsResultLike>;
|
|
116
|
+
breadthFirstSearch?(s: GraphSnapshot, source: number, options?: Pick<BfsOptions, "maxDepth">): Promise<BfsResultLike>;
|
|
99
117
|
sssp?(s: GraphSnapshot, source: number, options?: SsspOptions): Promise<SsspResultLike>;
|
|
100
118
|
bellmanFord?(s: GraphSnapshot, source: number, options?: SsspOptions): Promise<BellmanFordResultLike>;
|
|
101
119
|
closenessCentrality?(s: GraphSnapshot, options?: HitsOptionsLike): Promise<ScoresResultLike>;
|
|
@@ -125,6 +143,26 @@ export interface HitsOptionsLike {
|
|
|
125
143
|
readonly tolerance?: number | undefined;
|
|
126
144
|
readonly weighted?: boolean | undefined;
|
|
127
145
|
}
|
|
146
|
+
/**
|
|
147
|
+
* Katz options as the accelerator sees them: the power-iteration trio plus the two coefficients
|
|
148
|
+
* that define the recurrence `x = alpha * A^T x + beta`.
|
|
149
|
+
* @public
|
|
150
|
+
*/
|
|
151
|
+
export interface KatzOptionsLike extends HitsOptionsLike {
|
|
152
|
+
readonly alpha?: number | undefined;
|
|
153
|
+
readonly beta?: number | undefined;
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* PageRank options as the accelerator sees them: the port's `PageRankOptions` without
|
|
157
|
+
* `initialRanks` and `convergenceNorm`, which the dispatcher keeps on the CPU port.
|
|
158
|
+
* @public
|
|
159
|
+
*/
|
|
160
|
+
export interface PageRankOptionsLike {
|
|
161
|
+
readonly dampingFactor?: number | undefined;
|
|
162
|
+
readonly maxIterations?: number | undefined;
|
|
163
|
+
readonly tolerance?: number | undefined;
|
|
164
|
+
readonly weighted?: boolean | undefined;
|
|
165
|
+
}
|
|
128
166
|
/**
|
|
129
167
|
* Betweenness options as the accelerator sees them: node INDICES, which is the only form that
|
|
130
168
|
* means anything on a snapshot (plan decision PD-5).
|
|
@@ -143,17 +181,92 @@ export interface BetweennessAcceleratorOptions {
|
|
|
143
181
|
*
|
|
144
182
|
* The list GROWS with the A2 ports -- each port PR adds its method (plan departure DEP-8A-E).
|
|
145
183
|
*
|
|
146
|
-
*
|
|
147
|
-
* `HitsOptionsLike` the accelerator side
|
|
148
|
-
*
|
|
149
|
-
*
|
|
150
|
-
*
|
|
184
|
+
* `louvain` and `kCoreDecomposition` pass their port's options through unchanged; Louvain's
|
|
185
|
+
* `resolution` is wider than the `HitsOptionsLike` the accelerator side declares, and narrowing that
|
|
186
|
+
* member belongs to the pull request that lands a GPU Louvain.
|
|
187
|
+
*
|
|
188
|
+
* `katzCentrality` and `hits` hand the accelerator only what it reads -- `{ alpha, beta,
|
|
189
|
+
* maxIterations, tolerance, weighted }` and `{ maxIterations, tolerance, weighted }` -- with
|
|
190
|
+
* `weighted` resolved to the port's default (false), since an accelerator may default it the
|
|
191
|
+
* other way, and give its result the port's scale: an accelerator may end its iterate on any
|
|
192
|
+
* positive scale (webgpu-graph-algorithms divides Katz by its L2 norm and HITS by its sum), so
|
|
193
|
+
* Katz is min-max rescaled to [0, 1] as the port rescales its own, and each HITS vector is
|
|
194
|
+
* rescaled to unit length, or to a largest entry of 1 under `normalized: false`, as the port does.
|
|
195
|
+
* Katz runs the CPU port under `normalized: false` (the raw sums cannot be recovered from a
|
|
196
|
+
* rescaled vector), with `alpha` 0, and when every node has the same in-degree (or in-weight):
|
|
197
|
+
* there every score is equal, and the port leaves an equal vector unscaled. The iteration counts
|
|
198
|
+
* of the two paths differ.
|
|
199
|
+
*
|
|
200
|
+
* `labelPropagation` passes its options through the same way, except that a call with `randomSeed`
|
|
201
|
+
* set runs the CPU port: the partition depends on the seed, and a GPU kernel has none to honour. An
|
|
202
|
+
* accelerator's result carries no `iterations` or `converged`; call `indexed.labelPropagation`
|
|
203
|
+
* directly for those. webgpu-graph-algorithms does not implement `labelPropagation` yet, so with its
|
|
204
|
+
* accelerator this method runs the CPU port.
|
|
205
|
+
*
|
|
206
|
+
* `breadthFirstSearch` with a `target` or an `arcOrder` runs the CPU port: a GPU BFS expands whole
|
|
207
|
+
* levels and has no early stop and no neighbour order, so it would give a different result.
|
|
208
|
+
*
|
|
209
|
+
* `pageRank` and `personalizedPageRank` run the CPU port when `initialRanks` or
|
|
210
|
+
* `convergenceNorm: "max"` is set: the accelerator members take neither. The accelerator is
|
|
211
|
+
* handed `{ dampingFactor, maxIterations, tolerance, weighted }` with `weighted` resolved to the
|
|
212
|
+
* port's default (false), since an accelerator may default it the other way. Its stopping rule
|
|
213
|
+
* may differ from the port's (webgpu-graph-algorithms stops at an L1 change below
|
|
214
|
+
* `tolerance * n`, as networkx does), so the two paths can stop at different iterations.
|
|
215
|
+
* `personalizedPageRank` also runs the CPU port when the personalization is all zero (the port
|
|
216
|
+
* then answers plain PageRank, as the legacy function does for no personal nodes) or when a node
|
|
217
|
+
* is dangling: the port spreads dangling mass as legacy does, `d * dangling / n` scaled by the
|
|
218
|
+
* personalization, and the accelerator spreads `d * dangling` by the personalization, as networkx
|
|
219
|
+
* does. The two agree when no node is dangling.
|
|
220
|
+
*
|
|
221
|
+
* `eigenvectorCentrality` goes to the accelerator only for the question its kernel answers the
|
|
222
|
+
* same way: an undirected snapshot with no parallel edges and no bipartite component, unweighted,
|
|
223
|
+
* from the uniform start. The kernel iterates on `A` where the port iterates on `A + I`, and walks
|
|
224
|
+
* every parallel arc where the port counts a neighbour once; on a bipartite component the
|
|
225
|
+
* iteration on `A` oscillates forever. A directed snapshot always runs the port, since a
|
|
226
|
+
* periodic strongly connected component oscillates the same way and is not cheap to rule out.
|
|
227
|
+
* The accelerator is called with `{ maxIterations, tolerance, weighted: false }` and its
|
|
228
|
+
* unit-length vector is rescaled to [0, 1] exactly as the port rescales its own unless
|
|
229
|
+
* `normalized: false`. A result with `converged: false` raises `ConvergenceError`, as the port
|
|
230
|
+
* does. The iteration counts of the two paths differ.
|
|
231
|
+
*
|
|
232
|
+
* `allPairsShortestPath` is the reverse case: the accelerator member reads none of the port's
|
|
233
|
+
* options and has no negative-cycle flag, so the dispatcher calls it, without options, only when it
|
|
234
|
+
* answers the port's question -- no options that change the result, at most the port's default
|
|
235
|
+
* 5,792 nodes, and non-negative finite snapshot weights -- and runs the CPU port otherwise. That is
|
|
236
|
+
* routing decided from the inputs, not a fallback: an error the accelerator raises still propagates.
|
|
237
|
+
* Same question is not same bits: both read the snapshot's f32 arc weights, but a GPU member sums
|
|
238
|
+
* them in f32 and returns an f32 `dist`, where the port sums in f64. The two agree exactly while
|
|
239
|
+
* every path sum is an integer below 2^24, and otherwise may differ by f32 rounding.
|
|
240
|
+
*
|
|
241
|
+
* `bellmanFord` goes to the accelerator unless the call carries a `weights` override that is not a
|
|
242
|
+
* `Float32Array`: an accelerator narrows the override to f32, so an f64 one -- the exact weights a
|
|
243
|
+
* legacy facade passes -- would be answered for different weights. Its result gets the same
|
|
244
|
+
* `pathTo` / `pathEdges` decoration as `sssp`.
|
|
245
|
+
*
|
|
246
|
+
* The three path centralities route the same way. `betweennessCentrality` and
|
|
247
|
+
* `edgeBetweennessCentrality` go to the accelerator unless the snapshot is a multigraph (the port
|
|
248
|
+
* counts a pair's parallel edges as one path, the WebGPU kernel as several), `endpoints` is set, or an
|
|
249
|
+
* `alive` edge mask is given. The accelerator is always handed the sources the port would run -- the
|
|
250
|
+
* caller's, the port's `k` draw, or every node -- so it never substitutes a draw or a sampling default of
|
|
251
|
+
* its own. `closenessCentrality` goes only for the plain score -- no `normalized`,
|
|
252
|
+
* `harmonic`, `cutoff` or `weights` override -- and hands the accelerator an explicit `weighted`,
|
|
253
|
+
* because the WebGPU member otherwise defaults it from the snapshot where the port defaults it off.
|
|
254
|
+
*
|
|
255
|
+
* `depthFirstSearch`, `stronglyConnectedComponents`, `leiden`, `girvanNewman`, `maxFlow`,
|
|
256
|
+
* `minSTCut`, `stoerWagner`, `kargerMinCut`, `commonNeighborsPrediction`, `adamicAdarPrediction`,
|
|
257
|
+
* `primMST` and `maximumBipartiteMatching` always run the CPU port: `AlgorithmAccelerator` declares no member for
|
|
258
|
+
* them, since no GPU kernel exists. They are here so graphty-element runs every algorithm through
|
|
259
|
+
* one object, and each gains an accelerator branch when a kernel lands. A port's throw becomes a
|
|
260
|
+
* rejection.
|
|
151
261
|
* @public
|
|
152
262
|
*/
|
|
153
263
|
export interface AcceleratedAlgorithms {
|
|
154
264
|
readonly accelerator: AlgorithmAccelerator | null;
|
|
155
265
|
pageRank(s: GraphSnapshot, options?: PageRankOptions): Promise<PageRankResultLike>;
|
|
266
|
+
personalizedPageRank(s: GraphSnapshot, personalization: F32 | F64, options?: PageRankOptions): Promise<PageRankResultLike>;
|
|
267
|
+
eigenvectorCentrality(s: GraphSnapshot, options?: EigenvectorOptions): Promise<ScoresResultLike>;
|
|
156
268
|
sssp(s: GraphSnapshot, source: number, options?: SsspOptions): Promise<SsspResult>;
|
|
269
|
+
bellmanFord(s: GraphSnapshot, source: number, options?: SsspOptions): Promise<BellmanFordResult>;
|
|
157
270
|
breadthFirstSearch(s: GraphSnapshot, source: number, options?: BfsOptions): Promise<BfsResultLike>;
|
|
158
271
|
connectedComponents(s: GraphSnapshot): Promise<LabelResultLike>;
|
|
159
272
|
weaklyConnectedComponents(s: GraphSnapshot): Promise<LabelResultLike>;
|
|
@@ -162,6 +275,23 @@ export interface AcceleratedAlgorithms {
|
|
|
162
275
|
katzCentrality(s: GraphSnapshot, options?: KatzOptions): Promise<ScoresResultLike>;
|
|
163
276
|
hits(s: GraphSnapshot, options?: HitsOptions): Promise<HitsResultLike>;
|
|
164
277
|
louvain(s: GraphSnapshot, options?: LouvainOptions): Promise<CommunityResultLike>;
|
|
278
|
+
labelPropagation(s: GraphSnapshot, options?: LabelPropagationOptions): Promise<LabelResultLike>;
|
|
279
|
+
allPairsShortestPath(s: GraphSnapshot, options?: ApspOptions): Promise<ApspCycleResultLike>;
|
|
280
|
+
betweennessCentrality(s: GraphSnapshot, options?: BetweennessOptions): Promise<ScoresResultLike>;
|
|
281
|
+
edgeBetweennessCentrality(s: GraphSnapshot, options?: EdgeBetweennessOptions): Promise<EdgeScoresResultLike>;
|
|
282
|
+
closenessCentrality(s: GraphSnapshot, options?: ClosenessOptions): Promise<ScoresResultLike>;
|
|
283
|
+
depthFirstSearch(s: GraphSnapshot, start: number, options?: DfsOptions): Promise<DfsResult>;
|
|
284
|
+
stronglyConnectedComponents(s: GraphSnapshot, options?: ArcOrderOption): Promise<LabelResult>;
|
|
285
|
+
leiden(s: GraphSnapshot, options?: LeidenOptions): Promise<LeidenResult>;
|
|
286
|
+
girvanNewman(s: GraphSnapshot, options?: GirvanNewmanOptions): Promise<GirvanNewmanResult>;
|
|
287
|
+
maxFlow(s: GraphSnapshot, source: number, sink: number, options?: MaxFlowOptions): Promise<MaxFlowResult>;
|
|
288
|
+
minSTCut(s: GraphSnapshot, source: number, sink: number, options?: MaxFlowOptions): Promise<MinCutResult>;
|
|
289
|
+
stoerWagner(s: GraphSnapshot, options?: StoerWagnerOptions): Promise<MinCutResult>;
|
|
290
|
+
kargerMinCut(s: GraphSnapshot, options?: KargerOptions): Promise<MinCutResult>;
|
|
291
|
+
commonNeighborsPrediction(s: GraphSnapshot, options?: LinkPredictionOptions): Promise<LinkPredictionResult>;
|
|
292
|
+
adamicAdarPrediction(s: GraphSnapshot, options?: LinkPredictionOptions): Promise<LinkPredictionResult>;
|
|
293
|
+
primMST(s: GraphSnapshot, options?: PrimOptions): Promise<PrimResult>;
|
|
294
|
+
maximumBipartiteMatching(s: GraphSnapshot, options?: BipartiteMatchingOptions): Promise<BipartiteMatchingResult>;
|
|
165
295
|
}
|
|
166
296
|
/**
|
|
167
297
|
* Build the dispatcher for an accelerator, or for none.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accelerator.d.ts","sourceRoot":"","sources":["../../../src/indexed/accelerator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,aAAa,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"accelerator.d.ts","sourceRoot":"","sources":["../../../src/indexed/accelerator.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,8 +10,255 @@
|
|
|
10
10
|
* broken device behind a slow answer.
|
|
11
11
|
* @module
|
|
12
12
|
*/
|
|
13
|
+
import { ConvergenceError } from "../errors.js";
|
|
14
|
+
import { APSP_DEFAULT_MAX_NODES } from "./all-pairs.js";
|
|
15
|
+
import { resolveSources } from "./betweenness.js";
|
|
13
16
|
import { walkPredArcs, walkPredEdges } from "./dijkstra.js";
|
|
17
|
+
import { minMaxRescale } from "./eigenvector.js";
|
|
14
18
|
import * as indexed from "./index.js";
|
|
19
|
+
/**
|
|
20
|
+
* Run a CPU port inside a promise, so a throw becomes a rejection.
|
|
21
|
+
* @param run - The port call
|
|
22
|
+
* @returns Its result
|
|
23
|
+
*/
|
|
24
|
+
function onCpu(run) {
|
|
25
|
+
return new Promise((resolve) => {
|
|
26
|
+
resolve(run());
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Betweenness options with the sources the port would run spelled out, and no `k`. `endpoints` is never
|
|
31
|
+
* forwarded: a call that sets it runs the port.
|
|
32
|
+
* @param s - The snapshot
|
|
33
|
+
* @param options - The caller's port options
|
|
34
|
+
* @returns The options for the accelerator
|
|
35
|
+
*/
|
|
36
|
+
function explicitSources(s, options) {
|
|
37
|
+
return {
|
|
38
|
+
normalized: options?.normalized,
|
|
39
|
+
sources: resolveSources(s.nodeCount, options?.sources, options?.k),
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Whether the accelerator's closeness member answers the port's question: only the plain
|
|
44
|
+
* `1 / sum(distance)` score over the snapshot's own weights.
|
|
45
|
+
* @param options - The caller's port options
|
|
46
|
+
* @returns True when the call may go to the accelerator
|
|
47
|
+
*/
|
|
48
|
+
function acceleratorAnswersCloseness(options) {
|
|
49
|
+
return (options?.normalized !== true &&
|
|
50
|
+
options?.harmonic !== true &&
|
|
51
|
+
options?.cutoff === undefined &&
|
|
52
|
+
options?.weights === undefined);
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Whether the accelerator's all-pairs member, called with the snapshot alone, answers the question
|
|
56
|
+
* the CPU port would (at its own precision; see `AcceleratedAlgorithms`): no option that changes the answer, a size the port accepts by default, and
|
|
57
|
+
* weights under which no negative cycle can exist, so `hasNegativeCycle: false` is true.
|
|
58
|
+
* @param s - The snapshot
|
|
59
|
+
* @param options - The caller's port options
|
|
60
|
+
* @returns True when the call may go to the accelerator
|
|
61
|
+
*/
|
|
62
|
+
function acceleratorAnswersApsp(s, options) {
|
|
63
|
+
return (options?.weights === undefined &&
|
|
64
|
+
(options?.method ?? "auto") === "auto" &&
|
|
65
|
+
options?.maxNodes === undefined &&
|
|
66
|
+
options?.paths !== true &&
|
|
67
|
+
options?.weighted !== false &&
|
|
68
|
+
s.nodeCount <= APSP_DEFAULT_MAX_NODES &&
|
|
69
|
+
s.flags.nonNegativeWeights &&
|
|
70
|
+
s.flags.finiteWeights);
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Whether a PageRank call asks for something the accelerator members do not take.
|
|
74
|
+
* @param options - The caller's port options
|
|
75
|
+
* @returns True when the call must run the CPU port
|
|
76
|
+
*/
|
|
77
|
+
function pageRankNeedsCpu(options) {
|
|
78
|
+
return options?.initialRanks !== undefined || options?.convergenceNorm === "max";
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* The PageRank options an accelerator is handed: only the members it takes, with `weighted`
|
|
82
|
+
* resolved to the port's default.
|
|
83
|
+
* @param options - The caller's port options
|
|
84
|
+
* @returns The accelerator's options
|
|
85
|
+
*/
|
|
86
|
+
function pageRankOptionsLike(options) {
|
|
87
|
+
return {
|
|
88
|
+
dampingFactor: options?.dampingFactor,
|
|
89
|
+
maxIterations: options?.maxIterations,
|
|
90
|
+
tolerance: options?.tolerance,
|
|
91
|
+
weighted: options?.weighted === true,
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Whether a personalized PageRank call must run the port: an all-zero personalization (plain
|
|
96
|
+
* PageRank in the port, an error in the accelerator) or a dangling node (the two spread its mass
|
|
97
|
+
* differently).
|
|
98
|
+
* @param s - The snapshot
|
|
99
|
+
* @param personalization - The caller's personalization
|
|
100
|
+
* @param options - The caller's port options
|
|
101
|
+
* @returns True when the call must run the CPU port
|
|
102
|
+
*/
|
|
103
|
+
function personalizedNeedsCpu(s, personalization, options) {
|
|
104
|
+
const outW = options?.weighted === true && s.weights !== null ? s.weightedOutDegree() : s.outDegree();
|
|
105
|
+
return pageRankNeedsCpu(options) || !personalization.some((mass) => mass > 0) || outW.some((w) => w === 0);
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Whether the accelerator's eigenvector member answers the port's question: an undirected
|
|
109
|
+
* snapshot with no parallel edges and no bipartite component, from the uniform start.
|
|
110
|
+
* @param s - The snapshot
|
|
111
|
+
* @param options - The caller's port options
|
|
112
|
+
* @returns True when the call may go to the accelerator
|
|
113
|
+
*/
|
|
114
|
+
function acceleratorAnswersEigenvector(s, options) {
|
|
115
|
+
return options?.startVector === undefined && !s.directed && !s.flags.multigraph && !hasBipartiteComponent(s);
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Whether some connected component with at least one edge is bipartite, by two-colouring each
|
|
119
|
+
* component breadth first. A self-loop is an odd cycle.
|
|
120
|
+
* @param s - An undirected snapshot
|
|
121
|
+
* @returns True when a component with an edge has no odd cycle
|
|
122
|
+
*/
|
|
123
|
+
function hasBipartiteComponent(s) {
|
|
124
|
+
const n = s.nodeCount;
|
|
125
|
+
const colour = new Int8Array(n).fill(-1);
|
|
126
|
+
const queue = new Uint32Array(n);
|
|
127
|
+
for (let root = 0; root < n; root++) {
|
|
128
|
+
if (colour[root] !== -1 || s.rowPtr[root] === s.rowPtr[root + 1]) {
|
|
129
|
+
continue;
|
|
130
|
+
}
|
|
131
|
+
colour[root] = 0;
|
|
132
|
+
let tail = 0;
|
|
133
|
+
queue[tail++] = root;
|
|
134
|
+
let odd = false;
|
|
135
|
+
for (let head = 0; head < tail; head++) {
|
|
136
|
+
const u = queue[head];
|
|
137
|
+
for (let a = s.rowPtr[u]; a < s.rowPtr[u + 1]; a++) {
|
|
138
|
+
const v = s.colIdx[a];
|
|
139
|
+
if (colour[v] === -1) {
|
|
140
|
+
colour[v] = 1 - colour[u];
|
|
141
|
+
queue[tail++] = v;
|
|
142
|
+
}
|
|
143
|
+
else if (colour[v] === colour[u]) {
|
|
144
|
+
odd = true;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
if (!odd) {
|
|
149
|
+
return true;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
return false;
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Give an accelerator's eigenvector result the port's contract: an unconverged run throws, and the
|
|
156
|
+
* unit-length vector is rescaled to [0, 1] unless `normalized: false`.
|
|
157
|
+
* @param like - The accelerator's result
|
|
158
|
+
* @param options - The caller's port options
|
|
159
|
+
* @returns The result, rescaled into a new vector when asked
|
|
160
|
+
*/
|
|
161
|
+
function finishEigenvector(like, options) {
|
|
162
|
+
if (!like.converged) {
|
|
163
|
+
throw new ConvergenceError("eigenvectorCentrality", options?.maxIterations ?? 100, options?.tolerance ?? 1e-6);
|
|
164
|
+
}
|
|
165
|
+
if (options?.normalized === false) {
|
|
166
|
+
return like;
|
|
167
|
+
}
|
|
168
|
+
const scores = Float64Array.from(like.scores);
|
|
169
|
+
minMaxRescale(scores);
|
|
170
|
+
return { scores, iterations: like.iterations, converged: true };
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Whether the accelerator's Katz member answers the port's question: the min-max rescaled score
|
|
174
|
+
* of a vector that is not constant. Raw sums (`normalized: false`) are lost to the accelerator's
|
|
175
|
+
* own rescaling, and a constant vector -- `alpha` 0, or the same in-degree (in-weight) everywhere
|
|
176
|
+
* -- is one the port leaves unscaled.
|
|
177
|
+
* @param s - The snapshot
|
|
178
|
+
* @param options - The caller's port options
|
|
179
|
+
* @returns True when the call may go to the accelerator
|
|
180
|
+
*/
|
|
181
|
+
function acceleratorAnswersKatz(s, options) {
|
|
182
|
+
if (options?.normalized === false || options?.alpha === 0) {
|
|
183
|
+
return false;
|
|
184
|
+
}
|
|
185
|
+
const rev = s.reverse();
|
|
186
|
+
const weights = options?.weighted === true ? rev.weights : null;
|
|
187
|
+
let first;
|
|
188
|
+
for (let v = 0; v < s.nodeCount; v++) {
|
|
189
|
+
let inWeight = 0;
|
|
190
|
+
for (let a = rev.rowPtr[v]; a < rev.rowPtr[v + 1]; a++) {
|
|
191
|
+
inWeight += weights === null ? 1 : weights[a];
|
|
192
|
+
}
|
|
193
|
+
first ?? (first = inWeight);
|
|
194
|
+
if (inWeight !== first) {
|
|
195
|
+
return true;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
return false;
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Rescale a vector in place to [0, 1] by min-max, leaving a constant vector alone -- the Katz
|
|
202
|
+
* port's own rescaling.
|
|
203
|
+
* @param x - The vector
|
|
204
|
+
*/
|
|
205
|
+
function katzRescale(x) {
|
|
206
|
+
let min = Infinity;
|
|
207
|
+
let max = -Infinity;
|
|
208
|
+
for (const value of x) {
|
|
209
|
+
min = Math.min(min, value);
|
|
210
|
+
max = Math.max(max, value);
|
|
211
|
+
}
|
|
212
|
+
const range = max - min;
|
|
213
|
+
if (range > 0) {
|
|
214
|
+
for (let v = 0; v < x.length; v++) {
|
|
215
|
+
x[v] = (x[v] - min) / range;
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Give an accelerator's Katz result the port's scale: min-max rescaled to [0, 1], into a new vector.
|
|
221
|
+
* @param like - The accelerator's result
|
|
222
|
+
* @returns The rescaled result
|
|
223
|
+
*/
|
|
224
|
+
function finishKatz(like) {
|
|
225
|
+
const scores = Float64Array.from(like.scores);
|
|
226
|
+
katzRescale(scores);
|
|
227
|
+
return { scores, iterations: like.iterations, converged: like.converged };
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Rescale a vector in place to unit L2 length, or to a largest entry of 1; a vector with no
|
|
231
|
+
* positive scale is left alone, as the port leaves it.
|
|
232
|
+
* @param x - The vector
|
|
233
|
+
* @param norm - Which scale the port gives it
|
|
234
|
+
*/
|
|
235
|
+
function hitsRescale(x, norm) {
|
|
236
|
+
let scale = 0;
|
|
237
|
+
for (const value of x) {
|
|
238
|
+
scale = norm === "l2" ? scale + value * value : Math.max(scale, value);
|
|
239
|
+
}
|
|
240
|
+
scale = norm === "l2" ? Math.sqrt(scale) : scale;
|
|
241
|
+
if (scale > 0) {
|
|
242
|
+
for (let v = 0; v < x.length; v++) {
|
|
243
|
+
x[v] /= scale;
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* Give an accelerator's HITS result the port's scale: each vector at unit length, or at a largest
|
|
249
|
+
* entry of 1 under `normalized: false`, into new vectors.
|
|
250
|
+
* @param like - The accelerator's result
|
|
251
|
+
* @param options - The caller's port options
|
|
252
|
+
* @returns The rescaled result
|
|
253
|
+
*/
|
|
254
|
+
function finishHits(like, options) {
|
|
255
|
+
const norm = options?.normalized === false ? "max" : "l2";
|
|
256
|
+
const hubs = Float64Array.from(like.hubs);
|
|
257
|
+
const authorities = Float64Array.from(like.authorities);
|
|
258
|
+
hitsRescale(hubs, norm);
|
|
259
|
+
hitsRescale(authorities, norm);
|
|
260
|
+
return { hubs, authorities, iterations: like.iterations, converged: like.converged };
|
|
261
|
+
}
|
|
15
262
|
/**
|
|
16
263
|
* Attach `pathTo` / `pathEdges` to an accelerator's bare `{ dist, predArc }`, so both paths return
|
|
17
264
|
* the design's `SsspResult` and the element keeps ONE result-writing loop. The GPU package cannot
|
|
@@ -39,11 +286,35 @@ function decorateSssp(s, source, like) {
|
|
|
39
286
|
export function accelerated(acc) {
|
|
40
287
|
return {
|
|
41
288
|
accelerator: acc ?? null,
|
|
42
|
-
pageRank: (s, options) => acc?.pageRank !== undefined
|
|
289
|
+
pageRank: (s, options) => acc?.pageRank !== undefined && !pageRankNeedsCpu(options)
|
|
290
|
+
? acc.pageRank(s, pageRankOptionsLike(options))
|
|
291
|
+
: Promise.resolve(indexed.pageRank(s, options)),
|
|
292
|
+
personalizedPageRank: (s, personalization, options) => acc?.personalizedPageRank !== undefined && !personalizedNeedsCpu(s, personalization, options)
|
|
293
|
+
? acc.personalizedPageRank(s, personalization, pageRankOptionsLike(options))
|
|
294
|
+
: Promise.resolve(indexed.personalizedPageRank(s, personalization, options)),
|
|
295
|
+
eigenvectorCentrality: (s, options) => acc?.eigenvectorCentrality !== undefined && acceleratorAnswersEigenvector(s, options)
|
|
296
|
+
? acc
|
|
297
|
+
.eigenvectorCentrality(s, {
|
|
298
|
+
maxIterations: options?.maxIterations,
|
|
299
|
+
tolerance: options?.tolerance,
|
|
300
|
+
weighted: false,
|
|
301
|
+
})
|
|
302
|
+
.then((like) => finishEigenvector(like, options))
|
|
303
|
+
: // The executor turns the port's ConvergenceError into a rejection, as on the accelerator path.
|
|
304
|
+
new Promise((resolve) => {
|
|
305
|
+
resolve(indexed.eigenvectorCentrality(s, options));
|
|
306
|
+
}),
|
|
43
307
|
sssp: (s, source, options) => acc?.sssp !== undefined
|
|
44
308
|
? acc.sssp(s, source, options).then((like) => decorateSssp(s, source, like))
|
|
45
309
|
: Promise.resolve(indexed.dijkstra(s, source, options)),
|
|
46
|
-
|
|
310
|
+
bellmanFord: (s, source, options) => acc?.bellmanFord !== undefined &&
|
|
311
|
+
(options?.weights === undefined || options.weights instanceof Float32Array)
|
|
312
|
+
? acc.bellmanFord(s, source, options).then((like) => ({
|
|
313
|
+
...decorateSssp(s, source, like),
|
|
314
|
+
hasNegativeCycle: like.hasNegativeCycle,
|
|
315
|
+
}))
|
|
316
|
+
: Promise.resolve(indexed.bellmanFord(s, source, options)),
|
|
317
|
+
breadthFirstSearch: (s, source, options) => acc?.breadthFirstSearch !== undefined && options?.target === undefined && options?.arcOrder === undefined
|
|
47
318
|
? acc.breadthFirstSearch(s, source, options)
|
|
48
319
|
: Promise.resolve(indexed.breadthFirstSearch(s, source, options)),
|
|
49
320
|
connectedComponents: (s) => acc?.connectedComponents !== undefined
|
|
@@ -58,11 +329,54 @@ export function accelerated(acc) {
|
|
|
58
329
|
kCoreDecomposition: (s) => acc?.kCoreDecomposition !== undefined
|
|
59
330
|
? acc.kCoreDecomposition(s)
|
|
60
331
|
: Promise.resolve(indexed.kCoreDecomposition(s)),
|
|
61
|
-
katzCentrality: (s, options) => acc?.katzCentrality !== undefined
|
|
62
|
-
? acc
|
|
332
|
+
katzCentrality: (s, options) => acc?.katzCentrality !== undefined && acceleratorAnswersKatz(s, options)
|
|
333
|
+
? acc
|
|
334
|
+
.katzCentrality(s, {
|
|
335
|
+
alpha: options?.alpha,
|
|
336
|
+
beta: options?.beta,
|
|
337
|
+
maxIterations: options?.maxIterations,
|
|
338
|
+
tolerance: options?.tolerance,
|
|
339
|
+
weighted: options?.weighted === true,
|
|
340
|
+
})
|
|
341
|
+
.then(finishKatz)
|
|
63
342
|
: Promise.resolve(indexed.katzCentrality(s, options)),
|
|
64
|
-
hits: (s, options) => acc?.hits !== undefined
|
|
343
|
+
hits: (s, options) => acc?.hits !== undefined
|
|
344
|
+
? acc
|
|
345
|
+
.hits(s, {
|
|
346
|
+
maxIterations: options?.maxIterations,
|
|
347
|
+
tolerance: options?.tolerance,
|
|
348
|
+
weighted: options?.weighted === true,
|
|
349
|
+
})
|
|
350
|
+
.then((like) => finishHits(like, options))
|
|
351
|
+
: Promise.resolve(indexed.hits(s, options)),
|
|
65
352
|
louvain: (s, options) => acc?.louvain !== undefined ? acc.louvain(s, options) : Promise.resolve(indexed.louvain(s, options)),
|
|
353
|
+
allPairsShortestPath: (s, options) => acc?.allPairsShortestPath !== undefined && acceleratorAnswersApsp(s, options)
|
|
354
|
+
? acc.allPairsShortestPath(s).then(({ dist, n }) => ({ dist, n, hasNegativeCycle: false }))
|
|
355
|
+
: Promise.resolve(indexed.allPairsShortestPath(s, options)),
|
|
356
|
+
betweennessCentrality: (s, options) => acc?.betweennessCentrality !== undefined && !s.flags.multigraph && options?.endpoints !== true
|
|
357
|
+
? acc.betweennessCentrality(s, explicitSources(s, options))
|
|
358
|
+
: Promise.resolve(indexed.betweennessCentrality(s, options)),
|
|
359
|
+
edgeBetweennessCentrality: (s, options) => acc?.edgeBetweennessCentrality !== undefined && !s.flags.multigraph && options?.alive === undefined
|
|
360
|
+
? acc.edgeBetweennessCentrality(s, explicitSources(s, options))
|
|
361
|
+
: Promise.resolve(indexed.edgeBetweennessCentrality(s, options)),
|
|
362
|
+
closenessCentrality: (s, options) => acc?.closenessCentrality !== undefined && acceleratorAnswersCloseness(options)
|
|
363
|
+
? acc.closenessCentrality(s, { weighted: options?.weighted === true })
|
|
364
|
+
: Promise.resolve(indexed.closenessCentrality(s, options)),
|
|
365
|
+
labelPropagation: (s, options) => acc?.labelPropagation !== undefined && options?.randomSeed === undefined
|
|
366
|
+
? acc.labelPropagation(s, options)
|
|
367
|
+
: Promise.resolve(indexed.labelPropagation(s, options)),
|
|
368
|
+
depthFirstSearch: (s, start, options) => onCpu(() => indexed.depthFirstSearch(s, start, options)),
|
|
369
|
+
stronglyConnectedComponents: (s, options) => onCpu(() => indexed.stronglyConnectedComponents(s, options)),
|
|
370
|
+
leiden: (s, options) => onCpu(() => indexed.leiden(s, options)),
|
|
371
|
+
girvanNewman: (s, options) => onCpu(() => indexed.girvanNewman(s, options)),
|
|
372
|
+
maxFlow: (s, source, sink, options) => onCpu(() => indexed.maxFlow(s, source, sink, options)),
|
|
373
|
+
minSTCut: (s, source, sink, options) => onCpu(() => indexed.minSTCut(s, source, sink, options)),
|
|
374
|
+
stoerWagner: (s, options) => onCpu(() => indexed.stoerWagner(s, options)),
|
|
375
|
+
kargerMinCut: (s, options) => onCpu(() => indexed.kargerMinCut(s, options)),
|
|
376
|
+
commonNeighborsPrediction: (s, options) => onCpu(() => indexed.commonNeighborsPrediction(s, options)),
|
|
377
|
+
adamicAdarPrediction: (s, options) => onCpu(() => indexed.adamicAdarPrediction(s, options)),
|
|
378
|
+
primMST: (s, options) => onCpu(() => indexed.primMST(s, options)),
|
|
379
|
+
maximumBipartiteMatching: (s, options) => onCpu(() => indexed.maximumBipartiteMatching(s, options)),
|
|
66
380
|
};
|
|
67
381
|
}
|
|
68
382
|
//# sourceMappingURL=accelerator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accelerator.js","sourceRoot":"","sources":["../../../src/indexed/accelerator.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"accelerator.js","sourceRoot":"","sources":["../../../src/indexed/accelerator.ts"],"names":[],"mappings":"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"}
|