@graphty/algorithms 1.2.0 → 1.3.1
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 +490 -336
- package/dist/algorithms.d.ts +42 -2
- package/dist/algorithms.js +11099 -2
- package/dist/algorithms.js.map +1 -1
- package/dist/src/algorithms/centrality/betweenness.d.ts +4 -0
- package/dist/src/algorithms/centrality/betweenness.d.ts.map +1 -1
- package/dist/src/algorithms/centrality/betweenness.js +124 -170
- package/dist/src/algorithms/centrality/betweenness.js.map +1 -1
- package/dist/src/algorithms/centrality/closeness.d.ts +26 -1
- package/dist/src/algorithms/centrality/closeness.d.ts.map +1 -1
- package/dist/src/algorithms/centrality/closeness.js +56 -149
- package/dist/src/algorithms/centrality/closeness.js.map +1 -1
- package/dist/src/algorithms/centrality/degree.js +3 -3
- package/dist/src/algorithms/centrality/degree.js.map +1 -1
- package/dist/src/algorithms/centrality/delta-pagerank-simple.d.ts +39 -0
- package/dist/src/algorithms/centrality/delta-pagerank-simple.d.ts.map +1 -0
- package/dist/src/algorithms/centrality/delta-pagerank-simple.js +286 -0
- package/dist/src/algorithms/centrality/delta-pagerank-simple.js.map +1 -0
- package/dist/src/algorithms/centrality/delta-pagerank.d.ts +80 -0
- package/dist/src/algorithms/centrality/delta-pagerank.d.ts.map +1 -0
- package/dist/src/algorithms/centrality/delta-pagerank.js +294 -0
- package/dist/src/algorithms/centrality/delta-pagerank.js.map +1 -0
- package/dist/src/algorithms/centrality/index.d.ts +2 -0
- package/dist/src/algorithms/centrality/index.d.ts.map +1 -1
- package/dist/src/algorithms/centrality/index.js +1 -0
- package/dist/src/algorithms/centrality/index.js.map +1 -1
- package/dist/src/algorithms/centrality/pagerank.d.ts +17 -0
- package/dist/src/algorithms/centrality/pagerank.d.ts.map +1 -1
- package/dist/src/algorithms/centrality/pagerank.js +45 -0
- package/dist/src/algorithms/centrality/pagerank.js.map +1 -1
- package/dist/src/algorithms/community/girvan-newman.d.ts.map +1 -1
- package/dist/src/algorithms/community/girvan-newman.js +47 -54
- package/dist/src/algorithms/community/girvan-newman.js.map +1 -1
- package/dist/src/algorithms/community/index.d.ts +2 -0
- package/dist/src/algorithms/community/index.d.ts.map +1 -1
- package/dist/src/algorithms/community/index.js.map +1 -1
- package/dist/src/algorithms/community/label-propagation.d.ts +13 -3
- package/dist/src/algorithms/community/label-propagation.d.ts.map +1 -1
- package/dist/src/algorithms/community/label-propagation.js +50 -35
- package/dist/src/algorithms/community/label-propagation.js.map +1 -1
- package/dist/src/algorithms/community/leiden.d.ts +3 -2
- package/dist/src/algorithms/community/leiden.d.ts.map +1 -1
- package/dist/src/algorithms/community/leiden.js +34 -39
- package/dist/src/algorithms/community/leiden.js.map +1 -1
- package/dist/src/algorithms/community/louvain-optimized.d.ts +112 -0
- package/dist/src/algorithms/community/louvain-optimized.d.ts.map +1 -0
- package/dist/src/algorithms/community/louvain-optimized.js +303 -0
- package/dist/src/algorithms/community/louvain-optimized.js.map +1 -0
- package/dist/src/algorithms/community/louvain.d.ts.map +1 -1
- package/dist/src/algorithms/community/louvain.js +17 -76
- package/dist/src/algorithms/community/louvain.js.map +1 -1
- package/dist/src/algorithms/community/modularity-utils.d.ts +59 -0
- package/dist/src/algorithms/community/modularity-utils.d.ts.map +1 -0
- package/dist/src/algorithms/community/modularity-utils.js +112 -0
- package/dist/src/algorithms/community/modularity-utils.js.map +1 -0
- package/dist/src/algorithms/matching/bipartite.d.ts.map +1 -1
- package/dist/src/algorithms/matching/bipartite.js +8 -40
- package/dist/src/algorithms/matching/bipartite.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 +1 -12
- package/dist/src/algorithms/shortest-path/bellman-ford.js.map +1 -1
- package/dist/src/algorithms/shortest-path/bidirectional-dijkstra.d.ts +37 -0
- package/dist/src/algorithms/shortest-path/bidirectional-dijkstra.d.ts.map +1 -0
- package/dist/src/algorithms/shortest-path/bidirectional-dijkstra.js +193 -0
- package/dist/src/algorithms/shortest-path/bidirectional-dijkstra.js.map +1 -0
- package/dist/src/algorithms/shortest-path/dijkstra.d.ts +5 -2
- package/dist/src/algorithms/shortest-path/dijkstra.d.ts.map +1 -1
- package/dist/src/algorithms/shortest-path/dijkstra.js +15 -14
- package/dist/src/algorithms/shortest-path/dijkstra.js.map +1 -1
- package/dist/src/algorithms/traversal/bfs-unified.d.ts +29 -0
- package/dist/src/algorithms/traversal/bfs-unified.d.ts.map +1 -0
- package/dist/src/algorithms/traversal/bfs-unified.js +333 -0
- package/dist/src/algorithms/traversal/bfs-unified.js.map +1 -0
- package/dist/src/algorithms/traversal/bfs-variants.d.ts +54 -0
- package/dist/src/algorithms/traversal/bfs-variants.d.ts.map +1 -0
- package/dist/src/algorithms/traversal/bfs-variants.js +368 -0
- package/dist/src/algorithms/traversal/bfs-variants.js.map +1 -0
- package/dist/src/algorithms/traversal/bfs.d.ts +4 -18
- package/dist/src/algorithms/traversal/bfs.d.ts.map +1 -1
- package/dist/src/algorithms/traversal/bfs.js +5 -182
- package/dist/src/algorithms/traversal/bfs.js.map +1 -1
- package/dist/src/benchmark-all-algorithms.d.ts +23 -0
- package/dist/src/benchmark-all-algorithms.d.ts.map +1 -0
- package/dist/src/benchmark-all-algorithms.js +462 -0
- package/dist/src/benchmark-all-algorithms.js.map +1 -0
- package/dist/src/clustering/hierarchical.d.ts +16 -15
- package/dist/src/clustering/hierarchical.d.ts.map +1 -1
- package/dist/src/clustering/hierarchical.js +209 -223
- package/dist/src/clustering/hierarchical.js.map +1 -1
- package/dist/src/clustering/index.d.ts +4 -2
- package/dist/src/clustering/index.d.ts.map +1 -1
- package/dist/src/clustering/index.js +2 -2
- package/dist/src/clustering/index.js.map +1 -1
- package/dist/src/clustering/k-core.d.ts +16 -15
- package/dist/src/clustering/k-core.d.ts.map +1 -1
- package/dist/src/clustering/k-core.js +57 -21
- package/dist/src/clustering/k-core.js.map +1 -1
- package/dist/src/clustering/spectral.d.ts +8 -0
- package/dist/src/clustering/spectral.d.ts.map +1 -1
- package/dist/src/clustering/spectral.js +40 -21
- package/dist/src/clustering/spectral.js.map +1 -1
- package/dist/src/core/graph.js +4 -4
- package/dist/src/core/graph.js.map +1 -1
- package/dist/src/flow/ford-fulkerson.d.ts +17 -11
- package/dist/src/flow/ford-fulkerson.d.ts.map +1 -1
- package/dist/src/flow/ford-fulkerson.js +141 -217
- package/dist/src/flow/ford-fulkerson.js.map +1 -1
- package/dist/src/flow/min-cut.d.ts +6 -5
- package/dist/src/flow/min-cut.d.ts.map +1 -1
- package/dist/src/flow/min-cut.js +17 -8
- package/dist/src/flow/min-cut.js.map +1 -1
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +4 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/link-prediction/adamic-adar.d.ts.map +1 -1
- package/dist/src/link-prediction/adamic-adar.js +17 -26
- package/dist/src/link-prediction/adamic-adar.js.map +1 -1
- package/dist/src/link-prediction/common-neighbors.d.ts.map +1 -1
- package/dist/src/link-prediction/common-neighbors.js +7 -11
- package/dist/src/link-prediction/common-neighbors.js.map +1 -1
- package/dist/src/optimized/bit-packed.d.ts +143 -0
- package/dist/src/optimized/bit-packed.d.ts.map +1 -0
- package/dist/src/optimized/bit-packed.js +292 -0
- package/dist/src/optimized/bit-packed.js.map +1 -0
- package/dist/src/optimized/csr-graph.d.ts +86 -0
- package/dist/src/optimized/csr-graph.d.ts.map +1 -0
- package/dist/src/optimized/csr-graph.js +341 -0
- package/dist/src/optimized/csr-graph.js.map +1 -0
- package/dist/src/optimized/direction-optimized-bfs.d.ts +74 -0
- package/dist/src/optimized/direction-optimized-bfs.d.ts.map +1 -0
- package/dist/src/optimized/direction-optimized-bfs.js +223 -0
- package/dist/src/optimized/direction-optimized-bfs.js.map +1 -0
- package/dist/src/optimized/graph-adapter.d.ts +62 -0
- package/dist/src/optimized/graph-adapter.d.ts.map +1 -0
- package/dist/src/optimized/graph-adapter.js +146 -0
- package/dist/src/optimized/graph-adapter.js.map +1 -0
- package/dist/src/optimized/index.d.ts +14 -0
- package/dist/src/optimized/index.d.ts.map +1 -0
- package/dist/src/optimized/index.js +28 -0
- package/dist/src/optimized/index.js.map +1 -0
- package/dist/src/research/grsbm.d.ts.map +1 -1
- package/dist/src/research/grsbm.js +6 -14
- package/dist/src/research/grsbm.js.map +1 -1
- package/dist/src/research/sync.d.ts.map +1 -1
- package/dist/src/research/sync.js +3 -29
- package/dist/src/research/sync.js.map +1 -1
- package/dist/src/research/terahac.d.ts +2 -0
- package/dist/src/research/terahac.d.ts.map +1 -1
- package/dist/src/research/terahac.js +7 -3
- package/dist/src/research/terahac.js.map +1 -1
- package/dist/src/types/index.d.ts +8 -0
- package/dist/src/types/index.d.ts.map +1 -1
- package/dist/src/utils/algorithm-utilities.d.ts +2 -0
- package/dist/src/utils/algorithm-utilities.d.ts.map +1 -0
- package/dist/src/utils/algorithm-utilities.js +2 -0
- package/dist/src/utils/algorithm-utilities.js.map +1 -0
- package/dist/src/utils/graph-converters.d.ts +79 -0
- package/dist/src/utils/graph-converters.d.ts.map +1 -0
- package/dist/src/utils/graph-converters.js +196 -0
- package/dist/src/utils/graph-converters.js.map +1 -0
- package/dist/src/utils/graph-utilities.d.ts +62 -0
- package/dist/src/utils/graph-utilities.d.ts.map +1 -0
- package/dist/src/utils/graph-utilities.js +148 -0
- package/dist/src/utils/graph-utilities.js.map +1 -0
- package/dist/src/utils/index.d.ts +5 -0
- package/dist/src/utils/index.d.ts.map +1 -0
- package/dist/src/utils/index.js +5 -0
- package/dist/src/utils/index.js.map +1 -0
- package/dist/src/utils/math-utilities.d.ts +52 -0
- package/dist/src/utils/math-utilities.d.ts.map +1 -0
- package/dist/src/utils/math-utilities.js +123 -0
- package/dist/src/utils/math-utilities.js.map +1 -0
- package/dist/src/utils/matrix-utilities.d.ts +2 -0
- package/dist/src/utils/matrix-utilities.d.ts.map +1 -0
- package/dist/src/utils/matrix-utilities.js +2 -0
- package/dist/src/utils/matrix-utilities.js.map +1 -0
- package/dist/src/utils/optimization-helpers.d.ts +33 -0
- package/dist/src/utils/optimization-helpers.d.ts.map +1 -0
- package/dist/src/utils/optimization-helpers.js +47 -0
- package/dist/src/utils/optimization-helpers.js.map +1 -0
- package/package.json +18 -3
- package/src/algorithms/centrality/betweenness.ts +167 -199
- package/src/algorithms/centrality/closeness.ts +73 -191
- package/src/algorithms/centrality/degree.ts +3 -3
- package/src/algorithms/centrality/delta-pagerank-simple.ts +366 -0
- package/src/algorithms/centrality/delta-pagerank.ts +435 -0
- package/src/algorithms/centrality/index.ts +2 -0
- package/src/algorithms/centrality/pagerank.ts +66 -0
- package/src/algorithms/community/girvan-newman.ts +52 -59
- package/src/algorithms/community/index.ts +2 -0
- package/src/algorithms/community/label-propagation.ts +64 -35
- package/src/algorithms/community/leiden.ts +40 -41
- package/src/algorithms/community/louvain-optimized.ts +445 -0
- package/src/algorithms/community/louvain.ts +24 -104
- package/src/algorithms/community/modularity-utils.ts +146 -0
- package/src/algorithms/matching/bipartite.ts +8 -44
- package/src/algorithms/shortest-path/bellman-ford.ts +1 -14
- package/src/algorithms/shortest-path/bidirectional-dijkstra.ts +248 -0
- package/src/algorithms/shortest-path/dijkstra.ts +17 -15
- package/src/algorithms/traversal/bfs-unified.ts +433 -0
- package/src/algorithms/traversal/bfs-variants.ts +496 -0
- package/src/algorithms/traversal/bfs.ts +10 -228
- package/src/benchmark-all-algorithms.ts +548 -0
- package/src/clustering/hierarchical.ts +241 -251
- package/src/clustering/index.ts +4 -2
- package/src/clustering/k-core.ts +87 -39
- package/src/clustering/spectral.ts +44 -20
- package/src/core/graph.ts +4 -4
- package/src/flow/ford-fulkerson.ts +186 -254
- package/src/flow/min-cut.ts +21 -11
- package/src/index.ts +6 -0
- package/src/link-prediction/adamic-adar.ts +17 -30
- package/src/link-prediction/common-neighbors.ts +7 -16
- package/src/optimized/bit-packed.ts +340 -0
- package/src/optimized/csr-graph.ts +455 -0
- package/src/optimized/direction-optimized-bfs.ts +291 -0
- package/src/optimized/graph-adapter.ts +200 -0
- package/src/optimized/index.ts +36 -0
- package/src/research/grsbm.ts +7 -16
- package/src/research/sync.ts +3 -32
- package/src/research/terahac.ts +10 -2
- package/src/types/index.ts +8 -0
- package/src/utils/algorithm-utilities.ts +2 -0
- package/src/utils/graph-converters.ts +241 -0
- package/src/utils/graph-utilities.ts +199 -0
- package/src/utils/index.ts +4 -0
- package/src/utils/math-utilities.ts +140 -0
- package/src/utils/matrix-utilities.ts +2 -0
- package/src/utils/optimization-helpers.ts +81 -0
|
@@ -53,6 +53,12 @@ export interface TraversalOptions {
|
|
|
53
53
|
}
|
|
54
54
|
export interface DijkstraOptions {
|
|
55
55
|
target?: NodeId;
|
|
56
|
+
/**
|
|
57
|
+
* Use bidirectional search optimization for point-to-point queries.
|
|
58
|
+
* Defaults to true for graphs with >10 nodes, false for smaller graphs.
|
|
59
|
+
* Set explicitly to override automatic heuristic.
|
|
60
|
+
*/
|
|
61
|
+
bidirectional?: boolean;
|
|
56
62
|
}
|
|
57
63
|
export interface BellmanFordResult {
|
|
58
64
|
distances: Map<NodeId, number>;
|
|
@@ -75,9 +81,11 @@ export interface LouvainOptions {
|
|
|
75
81
|
resolution?: number;
|
|
76
82
|
maxIterations?: number;
|
|
77
83
|
tolerance?: number;
|
|
84
|
+
useOptimized?: boolean;
|
|
78
85
|
}
|
|
79
86
|
export interface GirvanNewmanOptions {
|
|
80
87
|
maxCommunities?: number;
|
|
81
88
|
minCommunitySize?: number;
|
|
89
|
+
maxIterations?: number;
|
|
82
90
|
}
|
|
83
91
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,MAAM,MAAM,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAGrC,MAAM,WAAW,IAAI;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;CAC9C;AAGD,MAAM,WAAW,IAAI;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;CAC9C;AAGD,MAAM,WAAW,WAAW;IACxB,QAAQ,EAAE,OAAO,CAAC;IAClB,cAAc,EAAE,OAAO,CAAC;IACxB,kBAAkB,EAAE,OAAO,CAAC;CAC/B;AAGD,MAAM,WAAW,kBAAkB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC;CAC3C;AAED,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAEtD,MAAM,WAAW,eAAe;IAC5B,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACrB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,IAAI,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC;CACrC;AAED,MAAM,WAAW,eAAe;IAC5B,WAAW,EAAE,MAAM,EAAE,EAAE,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,eAAe;IAC5B,UAAU,EAAE,MAAM,EAAE,EAAE,CAAC;IACvB,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACrC;AAED,MAAM,WAAW,SAAS;IACtB,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,mBAAmB;IAChC,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC5C,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC;IACtD,gBAAgB,EAAE,OAAO,CAAC;CAC7B;AAGD,MAAM,WAAW,gBAAgB;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACzD;AAED,MAAM,WAAW,eAAe;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"algorithm-utilities.d.ts","sourceRoot":"","sources":["../../../src/utils/algorithm-utilities.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"algorithm-utilities.js","sourceRoot":"","sources":["../../../src/utils/algorithm-utilities.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { Graph } from "../core/graph.js";
|
|
2
|
+
import type { NodeId } from "../types/index.js";
|
|
3
|
+
/**
|
|
4
|
+
* Convert Graph class to Map representation
|
|
5
|
+
* Used by community detection and flow algorithms
|
|
6
|
+
*/
|
|
7
|
+
export declare function graphToMap(graph: Graph): Map<string, Map<string, number>>;
|
|
8
|
+
/**
|
|
9
|
+
* Convert Map representation to Graph class
|
|
10
|
+
*/
|
|
11
|
+
export declare function mapToGraph(map: Map<string, Map<string, number>>, isDirected?: boolean): Graph;
|
|
12
|
+
/**
|
|
13
|
+
* Adapter for using Graph algorithms with Map representation
|
|
14
|
+
* Implements a subset of Graph interface methods needed by algorithms
|
|
15
|
+
*/
|
|
16
|
+
export declare class GraphAdapter {
|
|
17
|
+
private map;
|
|
18
|
+
readonly isDirected: boolean;
|
|
19
|
+
constructor(map: Map<string, Map<string, number>>, isDirected?: boolean);
|
|
20
|
+
/**
|
|
21
|
+
* Get all nodes
|
|
22
|
+
*/
|
|
23
|
+
nodes(): {
|
|
24
|
+
id: NodeId;
|
|
25
|
+
}[];
|
|
26
|
+
/**
|
|
27
|
+
* Get node count
|
|
28
|
+
*/
|
|
29
|
+
get nodeCount(): number;
|
|
30
|
+
/**
|
|
31
|
+
* Check if node exists
|
|
32
|
+
*/
|
|
33
|
+
hasNode(nodeId: NodeId): boolean;
|
|
34
|
+
/**
|
|
35
|
+
* Get neighbors of a node
|
|
36
|
+
*/
|
|
37
|
+
neighbors(nodeId: NodeId): NodeId[];
|
|
38
|
+
/**
|
|
39
|
+
* Get edge between two nodes
|
|
40
|
+
*/
|
|
41
|
+
getEdge(source: NodeId, target: NodeId): {
|
|
42
|
+
source: NodeId;
|
|
43
|
+
target: NodeId;
|
|
44
|
+
weight?: number;
|
|
45
|
+
} | null;
|
|
46
|
+
/**
|
|
47
|
+
* Check if edge exists
|
|
48
|
+
*/
|
|
49
|
+
hasEdge(source: NodeId, target: NodeId): boolean;
|
|
50
|
+
/**
|
|
51
|
+
* Get all edges
|
|
52
|
+
*/
|
|
53
|
+
edges(): {
|
|
54
|
+
source: NodeId;
|
|
55
|
+
target: NodeId;
|
|
56
|
+
weight?: number;
|
|
57
|
+
}[];
|
|
58
|
+
/**
|
|
59
|
+
* Get edge count
|
|
60
|
+
*/
|
|
61
|
+
get edgeCount(): number;
|
|
62
|
+
/**
|
|
63
|
+
* Get node degree
|
|
64
|
+
*/
|
|
65
|
+
degree(nodeId: NodeId): number;
|
|
66
|
+
/**
|
|
67
|
+
* Get in-degree (for directed graphs)
|
|
68
|
+
*/
|
|
69
|
+
inDegree(nodeId: NodeId): number;
|
|
70
|
+
/**
|
|
71
|
+
* Get out-degree (for directed graphs)
|
|
72
|
+
*/
|
|
73
|
+
outDegree(nodeId: NodeId): number;
|
|
74
|
+
/**
|
|
75
|
+
* Get underlying map representation
|
|
76
|
+
*/
|
|
77
|
+
getMap(): Map<string, Map<string, number>>;
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=graph-converters.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graph-converters.d.ts","sourceRoot":"","sources":["../../../src/utils/graph-converters.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,EAAC,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,mBAAmB,CAAC;AAE9C;;;GAGG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,KAAK,GAAG,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CA6BzE;AAED;;GAEG;AACH,wBAAgB,UAAU,CACtB,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EACrC,UAAU,UAAO,GAClB,KAAK,CA0BP;AAED;;;GAGG;AACH,qBAAa,YAAY;IACrB,OAAO,CAAC,GAAG,CAAmC;IAC9C,SAAgB,UAAU,EAAE,OAAO,CAAC;gBAExB,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE,UAAU,UAAO;IAKpE;;OAEG;IACH,KAAK,IAAI;QAAC,EAAE,EAAE,MAAM,CAAA;KAAC,EAAE;IAIvB;;OAEG;IACH,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED;;OAEG;IACH,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAIhC;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE;IASnC;;OAEG;IACH,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAC,GAAG,IAAI;IAcjG;;OAEG;IACH,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO;IAShD;;OAEG;IACH,KAAK,IAAI;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAC,EAAE;IAqB5D;;OAEG;IACH,IAAI,SAAS,IAAI,MAAM,CAuBtB;IAED;;OAEG;IACH,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAK9B;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAiBhC;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAIjC;;OAEG;IACH,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAG7C"}
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
import { Graph } from "../core/graph.js";
|
|
2
|
+
/**
|
|
3
|
+
* Convert Graph class to Map representation
|
|
4
|
+
* Used by community detection and flow algorithms
|
|
5
|
+
*/
|
|
6
|
+
export function graphToMap(graph) {
|
|
7
|
+
const map = new Map();
|
|
8
|
+
// Initialize all nodes
|
|
9
|
+
for (const node of graph.nodes()) {
|
|
10
|
+
map.set(String(node.id), new Map());
|
|
11
|
+
}
|
|
12
|
+
// Add edges with weights
|
|
13
|
+
for (const edge of graph.edges()) {
|
|
14
|
+
const source = String(edge.source);
|
|
15
|
+
const target = String(edge.target);
|
|
16
|
+
const weight = edge.weight ?? 1;
|
|
17
|
+
const sourceMap = map.get(source);
|
|
18
|
+
if (sourceMap) {
|
|
19
|
+
sourceMap.set(target, weight);
|
|
20
|
+
}
|
|
21
|
+
// For undirected graphs, add reverse edge
|
|
22
|
+
if (!graph.isDirected) {
|
|
23
|
+
const targetMap = map.get(target);
|
|
24
|
+
if (targetMap) {
|
|
25
|
+
targetMap.set(source, weight);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
return map;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Convert Map representation to Graph class
|
|
33
|
+
*/
|
|
34
|
+
export function mapToGraph(map, isDirected = true) {
|
|
35
|
+
const graph = new Graph({ directed: isDirected });
|
|
36
|
+
// Add all nodes first
|
|
37
|
+
for (const node of map.keys()) {
|
|
38
|
+
graph.addNode(node);
|
|
39
|
+
}
|
|
40
|
+
// Add edges
|
|
41
|
+
const processedEdges = new Set();
|
|
42
|
+
for (const [source, neighbors] of map) {
|
|
43
|
+
for (const [target, weight] of neighbors) {
|
|
44
|
+
const edgeKey = isDirected ? `${source}->${target}` : [source, target].sort().join("-");
|
|
45
|
+
// Skip if we've already processed this edge (for undirected graphs)
|
|
46
|
+
if (!isDirected && processedEdges.has(edgeKey)) {
|
|
47
|
+
continue;
|
|
48
|
+
}
|
|
49
|
+
graph.addEdge(source, target, weight);
|
|
50
|
+
processedEdges.add(edgeKey);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return graph;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Adapter for using Graph algorithms with Map representation
|
|
57
|
+
* Implements a subset of Graph interface methods needed by algorithms
|
|
58
|
+
*/
|
|
59
|
+
export class GraphAdapter {
|
|
60
|
+
constructor(map, isDirected = true) {
|
|
61
|
+
this.map = map;
|
|
62
|
+
this.isDirected = isDirected;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Get all nodes
|
|
66
|
+
*/
|
|
67
|
+
nodes() {
|
|
68
|
+
return Array.from(this.map.keys()).map((id) => ({ id }));
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Get node count
|
|
72
|
+
*/
|
|
73
|
+
get nodeCount() {
|
|
74
|
+
return this.map.size;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Check if node exists
|
|
78
|
+
*/
|
|
79
|
+
hasNode(nodeId) {
|
|
80
|
+
return this.map.has(String(nodeId));
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Get neighbors of a node
|
|
84
|
+
*/
|
|
85
|
+
neighbors(nodeId) {
|
|
86
|
+
const neighbors = this.map.get(String(nodeId));
|
|
87
|
+
if (!neighbors) {
|
|
88
|
+
return [];
|
|
89
|
+
}
|
|
90
|
+
return Array.from(neighbors.keys());
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Get edge between two nodes
|
|
94
|
+
*/
|
|
95
|
+
getEdge(source, target) {
|
|
96
|
+
const sourceNeighbors = this.map.get(String(source));
|
|
97
|
+
if (!sourceNeighbors) {
|
|
98
|
+
return null;
|
|
99
|
+
}
|
|
100
|
+
const weight = sourceNeighbors.get(String(target));
|
|
101
|
+
if (weight === undefined) {
|
|
102
|
+
return null;
|
|
103
|
+
}
|
|
104
|
+
return { source, target, weight };
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Check if edge exists
|
|
108
|
+
*/
|
|
109
|
+
hasEdge(source, target) {
|
|
110
|
+
const sourceNeighbors = this.map.get(String(source));
|
|
111
|
+
if (!sourceNeighbors) {
|
|
112
|
+
return false;
|
|
113
|
+
}
|
|
114
|
+
return sourceNeighbors.has(String(target));
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Get all edges
|
|
118
|
+
*/
|
|
119
|
+
edges() {
|
|
120
|
+
const edges = [];
|
|
121
|
+
const processedEdges = new Set();
|
|
122
|
+
for (const [source, neighbors] of this.map) {
|
|
123
|
+
for (const [target, weight] of neighbors) {
|
|
124
|
+
const edgeKey = this.isDirected ? `${source}->${target}` : [source, target].sort().join("-");
|
|
125
|
+
// Skip if we've already processed this edge (for undirected graphs)
|
|
126
|
+
if (!this.isDirected && processedEdges.has(edgeKey)) {
|
|
127
|
+
continue;
|
|
128
|
+
}
|
|
129
|
+
edges.push({ source, target, weight });
|
|
130
|
+
processedEdges.add(edgeKey);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
return edges;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Get edge count
|
|
137
|
+
*/
|
|
138
|
+
get edgeCount() {
|
|
139
|
+
if (this.isDirected) {
|
|
140
|
+
let count = 0;
|
|
141
|
+
for (const neighbors of this.map.values()) {
|
|
142
|
+
count += neighbors.size;
|
|
143
|
+
}
|
|
144
|
+
return count;
|
|
145
|
+
}
|
|
146
|
+
// For undirected graphs, count each edge once
|
|
147
|
+
let count = 0;
|
|
148
|
+
const counted = new Set();
|
|
149
|
+
for (const [source, neighbors] of this.map) {
|
|
150
|
+
for (const target of neighbors.keys()) {
|
|
151
|
+
const edgeKey = [source, target].sort().join("-");
|
|
152
|
+
if (!counted.has(edgeKey)) {
|
|
153
|
+
counted.add(edgeKey);
|
|
154
|
+
count++;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
return count;
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Get node degree
|
|
162
|
+
*/
|
|
163
|
+
degree(nodeId) {
|
|
164
|
+
const neighbors = this.map.get(String(nodeId));
|
|
165
|
+
return neighbors ? neighbors.size : 0;
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Get in-degree (for directed graphs)
|
|
169
|
+
*/
|
|
170
|
+
inDegree(nodeId) {
|
|
171
|
+
if (!this.isDirected) {
|
|
172
|
+
return this.degree(nodeId);
|
|
173
|
+
}
|
|
174
|
+
let count = 0;
|
|
175
|
+
const targetId = String(nodeId);
|
|
176
|
+
for (const neighbors of this.map.values()) {
|
|
177
|
+
if (neighbors.has(targetId)) {
|
|
178
|
+
count++;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
return count;
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Get out-degree (for directed graphs)
|
|
185
|
+
*/
|
|
186
|
+
outDegree(nodeId) {
|
|
187
|
+
return this.degree(nodeId);
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Get underlying map representation
|
|
191
|
+
*/
|
|
192
|
+
getMap() {
|
|
193
|
+
return this.map;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
//# sourceMappingURL=graph-converters.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graph-converters.js","sourceRoot":"","sources":["../../../src/utils/graph-converters.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { Graph } from "../core/graph.js";
|
|
2
|
+
import type { NodeId } from "../types/index.js";
|
|
3
|
+
/**
|
|
4
|
+
* Reconstructs a path from source to target using a predecessor map
|
|
5
|
+
* @param target - The target node
|
|
6
|
+
* @param predecessor - Map of node to its predecessor in the path
|
|
7
|
+
* @returns Array of nodes from source to target, or empty array if no path exists
|
|
8
|
+
*/
|
|
9
|
+
export declare function reconstructPath<T>(target: T, predecessor: Map<T, T | null>): T[];
|
|
10
|
+
/**
|
|
11
|
+
* Find common neighbors between two nodes
|
|
12
|
+
* @param graph - The graph
|
|
13
|
+
* @param source - First node
|
|
14
|
+
* @param target - Second node
|
|
15
|
+
* @param directed - Whether to consider edge direction
|
|
16
|
+
* @returns Set of common neighbor node IDs
|
|
17
|
+
*/
|
|
18
|
+
export declare function getCommonNeighbors(graph: Graph, source: NodeId, target: NodeId, directed?: boolean): Set<NodeId>;
|
|
19
|
+
/**
|
|
20
|
+
* Find common neighbors for link prediction in directed graphs
|
|
21
|
+
* This finds nodes that form a path from source to target (source->X->target)
|
|
22
|
+
* @param graph - The graph
|
|
23
|
+
* @param source - First node
|
|
24
|
+
* @param target - Second node
|
|
25
|
+
* @returns Set of intermediate node IDs
|
|
26
|
+
*/
|
|
27
|
+
export declare function getIntermediateNodes(graph: Graph, source: NodeId, target: NodeId): Set<NodeId>;
|
|
28
|
+
/**
|
|
29
|
+
* Generate a consistent edge key for undirected graphs
|
|
30
|
+
* @param source - Source node
|
|
31
|
+
* @param target - Target node
|
|
32
|
+
* @param isDirected - Whether the graph is directed
|
|
33
|
+
* @returns A consistent edge identifier
|
|
34
|
+
*/
|
|
35
|
+
export declare function getEdgeKey(source: NodeId, target: NodeId, isDirected: boolean): string;
|
|
36
|
+
/**
|
|
37
|
+
* Calculate total edge weight in a graph
|
|
38
|
+
* @param graph - The graph
|
|
39
|
+
* @returns Total weight of all edges
|
|
40
|
+
*/
|
|
41
|
+
export declare function getTotalEdgeWeight(graph: Graph): number;
|
|
42
|
+
/**
|
|
43
|
+
* Get node degree with optional mode for directed graphs
|
|
44
|
+
* @param graph - The graph
|
|
45
|
+
* @param nodeId - The node ID
|
|
46
|
+
* @param mode - Degree mode for directed graphs
|
|
47
|
+
* @returns Node degree
|
|
48
|
+
*/
|
|
49
|
+
export declare function getNodeDegree(graph: Graph, nodeId: NodeId, mode?: "in" | "out" | "total"): number;
|
|
50
|
+
/**
|
|
51
|
+
* Convert directed graph to undirected
|
|
52
|
+
* @param graph - The directed graph
|
|
53
|
+
* @returns A new undirected graph
|
|
54
|
+
*/
|
|
55
|
+
export declare function makeUndirected(graph: Graph): Graph;
|
|
56
|
+
/**
|
|
57
|
+
* Renumber communities consecutively starting from 0
|
|
58
|
+
* @param communities - Map of node to community ID
|
|
59
|
+
* @returns Map with renumbered community IDs
|
|
60
|
+
*/
|
|
61
|
+
export declare function renumberCommunities<T>(communities: Map<T, number>): Map<T, number>;
|
|
62
|
+
//# sourceMappingURL=graph-utilities.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graph-utilities.d.ts","sourceRoot":"","sources":["../../../src/utils/graph-utilities.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,EAAC,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,mBAAmB,CAAC;AAE9C;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAC7B,MAAM,EAAE,CAAC,EACT,WAAW,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAC9B,CAAC,EAAE,CAiBL;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAC9B,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,QAAQ,UAAQ,GACjB,GAAG,CAAC,MAAM,CAAC,CAgBb;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAChC,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,GACf,GAAG,CAAC,MAAM,CAAC,CAYb;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CACtB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,OAAO,GACpB,MAAM,CAQR;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAMvD;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CACzB,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,MAAM,EACd,IAAI,GAAE,IAAI,GAAG,KAAK,GAAG,OAAiB,GACvC,MAAM,CAUR;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,KAAK,GAAG,KAAK,CAqBlD;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EACjC,WAAW,EAAE,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,GAC5B,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAkBhB"}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import { Graph } from "../core/graph.js";
|
|
2
|
+
/**
|
|
3
|
+
* Reconstructs a path from source to target using a predecessor map
|
|
4
|
+
* @param target - The target node
|
|
5
|
+
* @param predecessor - Map of node to its predecessor in the path
|
|
6
|
+
* @returns Array of nodes from source to target, or empty array if no path exists
|
|
7
|
+
*/
|
|
8
|
+
export function reconstructPath(target, predecessor) {
|
|
9
|
+
const path = [];
|
|
10
|
+
let current = target;
|
|
11
|
+
// Build path backwards from target to source
|
|
12
|
+
while (current !== null) {
|
|
13
|
+
path.unshift(current);
|
|
14
|
+
const pred = predecessor.get(current);
|
|
15
|
+
if (pred === undefined) {
|
|
16
|
+
// No path exists
|
|
17
|
+
return [];
|
|
18
|
+
}
|
|
19
|
+
current = pred;
|
|
20
|
+
}
|
|
21
|
+
return path;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Find common neighbors between two nodes
|
|
25
|
+
* @param graph - The graph
|
|
26
|
+
* @param source - First node
|
|
27
|
+
* @param target - Second node
|
|
28
|
+
* @param directed - Whether to consider edge direction
|
|
29
|
+
* @returns Set of common neighbor node IDs
|
|
30
|
+
*/
|
|
31
|
+
export function getCommonNeighbors(graph, source, target, directed = false) {
|
|
32
|
+
const sourceNeighbors = new Set(directed ? graph.outNeighbors(source) : graph.neighbors(source));
|
|
33
|
+
const targetNeighbors = new Set(directed ? graph.outNeighbors(target) : graph.neighbors(target));
|
|
34
|
+
const common = new Set();
|
|
35
|
+
for (const neighbor of sourceNeighbors) {
|
|
36
|
+
if (targetNeighbors.has(neighbor)) {
|
|
37
|
+
common.add(neighbor);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return common;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Find common neighbors for link prediction in directed graphs
|
|
44
|
+
* This finds nodes that form a path from source to target (source->X->target)
|
|
45
|
+
* @param graph - The graph
|
|
46
|
+
* @param source - First node
|
|
47
|
+
* @param target - Second node
|
|
48
|
+
* @returns Set of intermediate node IDs
|
|
49
|
+
*/
|
|
50
|
+
export function getIntermediateNodes(graph, source, target) {
|
|
51
|
+
const sourceOutNeighbors = new Set(graph.outNeighbors(source));
|
|
52
|
+
const targetInNeighbors = new Set(graph.inNeighbors(target));
|
|
53
|
+
const common = new Set();
|
|
54
|
+
for (const neighbor of sourceOutNeighbors) {
|
|
55
|
+
if (targetInNeighbors.has(neighbor)) {
|
|
56
|
+
common.add(neighbor);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return common;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Generate a consistent edge key for undirected graphs
|
|
63
|
+
* @param source - Source node
|
|
64
|
+
* @param target - Target node
|
|
65
|
+
* @param isDirected - Whether the graph is directed
|
|
66
|
+
* @returns A consistent edge identifier
|
|
67
|
+
*/
|
|
68
|
+
export function getEdgeKey(source, target, isDirected) {
|
|
69
|
+
if (isDirected) {
|
|
70
|
+
return `${String(source)}->${String(target)}`;
|
|
71
|
+
}
|
|
72
|
+
// For undirected graphs, sort to ensure consistency
|
|
73
|
+
const [first, second] = source < target ? [source, target] : [target, source];
|
|
74
|
+
return `${String(first)}-${String(second)}`;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Calculate total edge weight in a graph
|
|
78
|
+
* @param graph - The graph
|
|
79
|
+
* @returns Total weight of all edges
|
|
80
|
+
*/
|
|
81
|
+
export function getTotalEdgeWeight(graph) {
|
|
82
|
+
let totalWeight = 0;
|
|
83
|
+
for (const edge of graph.edges()) {
|
|
84
|
+
totalWeight += edge.weight ?? 1;
|
|
85
|
+
}
|
|
86
|
+
return graph.isDirected ? totalWeight : totalWeight / 2;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Get node degree with optional mode for directed graphs
|
|
90
|
+
* @param graph - The graph
|
|
91
|
+
* @param nodeId - The node ID
|
|
92
|
+
* @param mode - Degree mode for directed graphs
|
|
93
|
+
* @returns Node degree
|
|
94
|
+
*/
|
|
95
|
+
export function getNodeDegree(graph, nodeId, mode = "total") {
|
|
96
|
+
if (!graph.isDirected || mode === "total") {
|
|
97
|
+
return graph.degree(nodeId);
|
|
98
|
+
}
|
|
99
|
+
if (mode === "in") {
|
|
100
|
+
return graph.inDegree(nodeId);
|
|
101
|
+
}
|
|
102
|
+
return graph.outDegree(nodeId);
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Convert directed graph to undirected
|
|
106
|
+
* @param graph - The directed graph
|
|
107
|
+
* @returns A new undirected graph
|
|
108
|
+
*/
|
|
109
|
+
export function makeUndirected(graph) {
|
|
110
|
+
if (!graph.isDirected) {
|
|
111
|
+
return graph;
|
|
112
|
+
}
|
|
113
|
+
const undirected = new Graph({ directed: false });
|
|
114
|
+
// Add all nodes
|
|
115
|
+
for (const node of graph.nodes()) {
|
|
116
|
+
undirected.addNode(node.id, node.data);
|
|
117
|
+
}
|
|
118
|
+
// Add edges (will automatically be made bidirectional)
|
|
119
|
+
for (const edge of graph.edges()) {
|
|
120
|
+
// For undirected, we only add each edge once
|
|
121
|
+
if (!undirected.hasEdge(edge.source, edge.target)) {
|
|
122
|
+
undirected.addEdge(edge.source, edge.target, edge.weight, edge.data);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
return undirected;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Renumber communities consecutively starting from 0
|
|
129
|
+
* @param communities - Map of node to community ID
|
|
130
|
+
* @returns Map with renumbered community IDs
|
|
131
|
+
*/
|
|
132
|
+
export function renumberCommunities(communities) {
|
|
133
|
+
const uniqueCommunities = new Set(communities.values());
|
|
134
|
+
const remapping = new Map();
|
|
135
|
+
let newId = 0;
|
|
136
|
+
for (const community of uniqueCommunities) {
|
|
137
|
+
remapping.set(community, newId++);
|
|
138
|
+
}
|
|
139
|
+
const renumbered = new Map();
|
|
140
|
+
for (const [node, community] of communities) {
|
|
141
|
+
const newCommunity = remapping.get(community);
|
|
142
|
+
if (newCommunity !== undefined) {
|
|
143
|
+
renumbered.set(node, newCommunity);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
return renumbered;
|
|
147
|
+
}
|
|
148
|
+
//# sourceMappingURL=graph-utilities.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graph-utilities.js","sourceRoot":"","sources":["../../../src/utils/graph-utilities.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Seeded random number generator for reproducible results
|
|
3
|
+
*/
|
|
4
|
+
export declare class SeededRandom {
|
|
5
|
+
private seed;
|
|
6
|
+
private readonly m;
|
|
7
|
+
private readonly a;
|
|
8
|
+
private readonly c;
|
|
9
|
+
constructor(seed: number);
|
|
10
|
+
/**
|
|
11
|
+
* Generate next random number between 0 and 1
|
|
12
|
+
*/
|
|
13
|
+
next(): number;
|
|
14
|
+
/**
|
|
15
|
+
* Create a generator function for backward compatibility
|
|
16
|
+
*/
|
|
17
|
+
static createGenerator(seed: number): () => number;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Fisher-Yates shuffle algorithm
|
|
21
|
+
* @param array - Array to shuffle (will be modified in place)
|
|
22
|
+
* @param rng - Optional random number generator (defaults to Math.random)
|
|
23
|
+
* @returns The shuffled array (same reference as input)
|
|
24
|
+
*/
|
|
25
|
+
export declare function shuffle<T>(array: T[], rng?: () => number): T[];
|
|
26
|
+
/**
|
|
27
|
+
* Calculate Euclidean distance between two vectors
|
|
28
|
+
* @param a - First vector
|
|
29
|
+
* @param b - Second vector
|
|
30
|
+
* @returns Euclidean distance
|
|
31
|
+
* @throws Error if vectors have different lengths
|
|
32
|
+
*/
|
|
33
|
+
export declare function euclideanDistance(a: number[], b: number[]): number;
|
|
34
|
+
export declare const normalize: {
|
|
35
|
+
/**
|
|
36
|
+
* Min-max normalization to [0, 1] range
|
|
37
|
+
*/
|
|
38
|
+
minMax(values: Map<string, number>): void;
|
|
39
|
+
/**
|
|
40
|
+
* Normalize by maximum value
|
|
41
|
+
*/
|
|
42
|
+
byMax(values: Map<string, number>): void;
|
|
43
|
+
/**
|
|
44
|
+
* L2 (Euclidean) normalization
|
|
45
|
+
*/
|
|
46
|
+
l2Norm(values: Map<string, number>): void;
|
|
47
|
+
/**
|
|
48
|
+
* Normalize to sum to 1
|
|
49
|
+
*/
|
|
50
|
+
sumToOne(values: Map<string, number>): void;
|
|
51
|
+
};
|
|
52
|
+
//# sourceMappingURL=math-utilities.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"math-utilities.d.ts","sourceRoot":"","sources":["../../../src/utils/math-utilities.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,qBAAa,YAAY;IACrB,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAc;IAChC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAc;IAChC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAS;gBAEf,IAAI,EAAE,MAAM;IAKxB;;OAEG;IACH,IAAI,IAAI,MAAM;IAKd;;OAEG;IACH,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,MAAM;CAIrD;AAED;;;;;GAKG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,GAAG,GAAE,MAAM,MAAoB,GAAG,CAAC,EAAE,CAW3E;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAelE;AAED,eAAO,MAAM,SAAS;IAClB;;OAEG;mBACY,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IAezC;;OAEG;kBACW,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IAWxC;;OAEG;mBACY,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IAczC;;OAEG;qBACc,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;CAY9C,CAAC"}
|