@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.
Files changed (230) hide show
  1. package/README.md +490 -336
  2. package/dist/algorithms.d.ts +42 -2
  3. package/dist/algorithms.js +11099 -2
  4. package/dist/algorithms.js.map +1 -1
  5. package/dist/src/algorithms/centrality/betweenness.d.ts +4 -0
  6. package/dist/src/algorithms/centrality/betweenness.d.ts.map +1 -1
  7. package/dist/src/algorithms/centrality/betweenness.js +124 -170
  8. package/dist/src/algorithms/centrality/betweenness.js.map +1 -1
  9. package/dist/src/algorithms/centrality/closeness.d.ts +26 -1
  10. package/dist/src/algorithms/centrality/closeness.d.ts.map +1 -1
  11. package/dist/src/algorithms/centrality/closeness.js +56 -149
  12. package/dist/src/algorithms/centrality/closeness.js.map +1 -1
  13. package/dist/src/algorithms/centrality/degree.js +3 -3
  14. package/dist/src/algorithms/centrality/degree.js.map +1 -1
  15. package/dist/src/algorithms/centrality/delta-pagerank-simple.d.ts +39 -0
  16. package/dist/src/algorithms/centrality/delta-pagerank-simple.d.ts.map +1 -0
  17. package/dist/src/algorithms/centrality/delta-pagerank-simple.js +286 -0
  18. package/dist/src/algorithms/centrality/delta-pagerank-simple.js.map +1 -0
  19. package/dist/src/algorithms/centrality/delta-pagerank.d.ts +80 -0
  20. package/dist/src/algorithms/centrality/delta-pagerank.d.ts.map +1 -0
  21. package/dist/src/algorithms/centrality/delta-pagerank.js +294 -0
  22. package/dist/src/algorithms/centrality/delta-pagerank.js.map +1 -0
  23. package/dist/src/algorithms/centrality/index.d.ts +2 -0
  24. package/dist/src/algorithms/centrality/index.d.ts.map +1 -1
  25. package/dist/src/algorithms/centrality/index.js +1 -0
  26. package/dist/src/algorithms/centrality/index.js.map +1 -1
  27. package/dist/src/algorithms/centrality/pagerank.d.ts +17 -0
  28. package/dist/src/algorithms/centrality/pagerank.d.ts.map +1 -1
  29. package/dist/src/algorithms/centrality/pagerank.js +45 -0
  30. package/dist/src/algorithms/centrality/pagerank.js.map +1 -1
  31. package/dist/src/algorithms/community/girvan-newman.d.ts.map +1 -1
  32. package/dist/src/algorithms/community/girvan-newman.js +47 -54
  33. package/dist/src/algorithms/community/girvan-newman.js.map +1 -1
  34. package/dist/src/algorithms/community/index.d.ts +2 -0
  35. package/dist/src/algorithms/community/index.d.ts.map +1 -1
  36. package/dist/src/algorithms/community/index.js.map +1 -1
  37. package/dist/src/algorithms/community/label-propagation.d.ts +13 -3
  38. package/dist/src/algorithms/community/label-propagation.d.ts.map +1 -1
  39. package/dist/src/algorithms/community/label-propagation.js +50 -35
  40. package/dist/src/algorithms/community/label-propagation.js.map +1 -1
  41. package/dist/src/algorithms/community/leiden.d.ts +3 -2
  42. package/dist/src/algorithms/community/leiden.d.ts.map +1 -1
  43. package/dist/src/algorithms/community/leiden.js +34 -39
  44. package/dist/src/algorithms/community/leiden.js.map +1 -1
  45. package/dist/src/algorithms/community/louvain-optimized.d.ts +112 -0
  46. package/dist/src/algorithms/community/louvain-optimized.d.ts.map +1 -0
  47. package/dist/src/algorithms/community/louvain-optimized.js +303 -0
  48. package/dist/src/algorithms/community/louvain-optimized.js.map +1 -0
  49. package/dist/src/algorithms/community/louvain.d.ts.map +1 -1
  50. package/dist/src/algorithms/community/louvain.js +17 -76
  51. package/dist/src/algorithms/community/louvain.js.map +1 -1
  52. package/dist/src/algorithms/community/modularity-utils.d.ts +59 -0
  53. package/dist/src/algorithms/community/modularity-utils.d.ts.map +1 -0
  54. package/dist/src/algorithms/community/modularity-utils.js +112 -0
  55. package/dist/src/algorithms/community/modularity-utils.js.map +1 -0
  56. package/dist/src/algorithms/matching/bipartite.d.ts.map +1 -1
  57. package/dist/src/algorithms/matching/bipartite.js +8 -40
  58. package/dist/src/algorithms/matching/bipartite.js.map +1 -1
  59. package/dist/src/algorithms/shortest-path/bellman-ford.d.ts.map +1 -1
  60. package/dist/src/algorithms/shortest-path/bellman-ford.js +1 -12
  61. package/dist/src/algorithms/shortest-path/bellman-ford.js.map +1 -1
  62. package/dist/src/algorithms/shortest-path/bidirectional-dijkstra.d.ts +37 -0
  63. package/dist/src/algorithms/shortest-path/bidirectional-dijkstra.d.ts.map +1 -0
  64. package/dist/src/algorithms/shortest-path/bidirectional-dijkstra.js +193 -0
  65. package/dist/src/algorithms/shortest-path/bidirectional-dijkstra.js.map +1 -0
  66. package/dist/src/algorithms/shortest-path/dijkstra.d.ts +5 -2
  67. package/dist/src/algorithms/shortest-path/dijkstra.d.ts.map +1 -1
  68. package/dist/src/algorithms/shortest-path/dijkstra.js +15 -14
  69. package/dist/src/algorithms/shortest-path/dijkstra.js.map +1 -1
  70. package/dist/src/algorithms/traversal/bfs-unified.d.ts +29 -0
  71. package/dist/src/algorithms/traversal/bfs-unified.d.ts.map +1 -0
  72. package/dist/src/algorithms/traversal/bfs-unified.js +333 -0
  73. package/dist/src/algorithms/traversal/bfs-unified.js.map +1 -0
  74. package/dist/src/algorithms/traversal/bfs-variants.d.ts +54 -0
  75. package/dist/src/algorithms/traversal/bfs-variants.d.ts.map +1 -0
  76. package/dist/src/algorithms/traversal/bfs-variants.js +368 -0
  77. package/dist/src/algorithms/traversal/bfs-variants.js.map +1 -0
  78. package/dist/src/algorithms/traversal/bfs.d.ts +4 -18
  79. package/dist/src/algorithms/traversal/bfs.d.ts.map +1 -1
  80. package/dist/src/algorithms/traversal/bfs.js +5 -182
  81. package/dist/src/algorithms/traversal/bfs.js.map +1 -1
  82. package/dist/src/benchmark-all-algorithms.d.ts +23 -0
  83. package/dist/src/benchmark-all-algorithms.d.ts.map +1 -0
  84. package/dist/src/benchmark-all-algorithms.js +462 -0
  85. package/dist/src/benchmark-all-algorithms.js.map +1 -0
  86. package/dist/src/clustering/hierarchical.d.ts +16 -15
  87. package/dist/src/clustering/hierarchical.d.ts.map +1 -1
  88. package/dist/src/clustering/hierarchical.js +209 -223
  89. package/dist/src/clustering/hierarchical.js.map +1 -1
  90. package/dist/src/clustering/index.d.ts +4 -2
  91. package/dist/src/clustering/index.d.ts.map +1 -1
  92. package/dist/src/clustering/index.js +2 -2
  93. package/dist/src/clustering/index.js.map +1 -1
  94. package/dist/src/clustering/k-core.d.ts +16 -15
  95. package/dist/src/clustering/k-core.d.ts.map +1 -1
  96. package/dist/src/clustering/k-core.js +57 -21
  97. package/dist/src/clustering/k-core.js.map +1 -1
  98. package/dist/src/clustering/spectral.d.ts +8 -0
  99. package/dist/src/clustering/spectral.d.ts.map +1 -1
  100. package/dist/src/clustering/spectral.js +40 -21
  101. package/dist/src/clustering/spectral.js.map +1 -1
  102. package/dist/src/core/graph.js +4 -4
  103. package/dist/src/core/graph.js.map +1 -1
  104. package/dist/src/flow/ford-fulkerson.d.ts +17 -11
  105. package/dist/src/flow/ford-fulkerson.d.ts.map +1 -1
  106. package/dist/src/flow/ford-fulkerson.js +141 -217
  107. package/dist/src/flow/ford-fulkerson.js.map +1 -1
  108. package/dist/src/flow/min-cut.d.ts +6 -5
  109. package/dist/src/flow/min-cut.d.ts.map +1 -1
  110. package/dist/src/flow/min-cut.js +17 -8
  111. package/dist/src/flow/min-cut.js.map +1 -1
  112. package/dist/src/index.d.ts +1 -0
  113. package/dist/src/index.d.ts.map +1 -1
  114. package/dist/src/index.js +4 -0
  115. package/dist/src/index.js.map +1 -1
  116. package/dist/src/link-prediction/adamic-adar.d.ts.map +1 -1
  117. package/dist/src/link-prediction/adamic-adar.js +17 -26
  118. package/dist/src/link-prediction/adamic-adar.js.map +1 -1
  119. package/dist/src/link-prediction/common-neighbors.d.ts.map +1 -1
  120. package/dist/src/link-prediction/common-neighbors.js +7 -11
  121. package/dist/src/link-prediction/common-neighbors.js.map +1 -1
  122. package/dist/src/optimized/bit-packed.d.ts +143 -0
  123. package/dist/src/optimized/bit-packed.d.ts.map +1 -0
  124. package/dist/src/optimized/bit-packed.js +292 -0
  125. package/dist/src/optimized/bit-packed.js.map +1 -0
  126. package/dist/src/optimized/csr-graph.d.ts +86 -0
  127. package/dist/src/optimized/csr-graph.d.ts.map +1 -0
  128. package/dist/src/optimized/csr-graph.js +341 -0
  129. package/dist/src/optimized/csr-graph.js.map +1 -0
  130. package/dist/src/optimized/direction-optimized-bfs.d.ts +74 -0
  131. package/dist/src/optimized/direction-optimized-bfs.d.ts.map +1 -0
  132. package/dist/src/optimized/direction-optimized-bfs.js +223 -0
  133. package/dist/src/optimized/direction-optimized-bfs.js.map +1 -0
  134. package/dist/src/optimized/graph-adapter.d.ts +62 -0
  135. package/dist/src/optimized/graph-adapter.d.ts.map +1 -0
  136. package/dist/src/optimized/graph-adapter.js +146 -0
  137. package/dist/src/optimized/graph-adapter.js.map +1 -0
  138. package/dist/src/optimized/index.d.ts +14 -0
  139. package/dist/src/optimized/index.d.ts.map +1 -0
  140. package/dist/src/optimized/index.js +28 -0
  141. package/dist/src/optimized/index.js.map +1 -0
  142. package/dist/src/research/grsbm.d.ts.map +1 -1
  143. package/dist/src/research/grsbm.js +6 -14
  144. package/dist/src/research/grsbm.js.map +1 -1
  145. package/dist/src/research/sync.d.ts.map +1 -1
  146. package/dist/src/research/sync.js +3 -29
  147. package/dist/src/research/sync.js.map +1 -1
  148. package/dist/src/research/terahac.d.ts +2 -0
  149. package/dist/src/research/terahac.d.ts.map +1 -1
  150. package/dist/src/research/terahac.js +7 -3
  151. package/dist/src/research/terahac.js.map +1 -1
  152. package/dist/src/types/index.d.ts +8 -0
  153. package/dist/src/types/index.d.ts.map +1 -1
  154. package/dist/src/utils/algorithm-utilities.d.ts +2 -0
  155. package/dist/src/utils/algorithm-utilities.d.ts.map +1 -0
  156. package/dist/src/utils/algorithm-utilities.js +2 -0
  157. package/dist/src/utils/algorithm-utilities.js.map +1 -0
  158. package/dist/src/utils/graph-converters.d.ts +79 -0
  159. package/dist/src/utils/graph-converters.d.ts.map +1 -0
  160. package/dist/src/utils/graph-converters.js +196 -0
  161. package/dist/src/utils/graph-converters.js.map +1 -0
  162. package/dist/src/utils/graph-utilities.d.ts +62 -0
  163. package/dist/src/utils/graph-utilities.d.ts.map +1 -0
  164. package/dist/src/utils/graph-utilities.js +148 -0
  165. package/dist/src/utils/graph-utilities.js.map +1 -0
  166. package/dist/src/utils/index.d.ts +5 -0
  167. package/dist/src/utils/index.d.ts.map +1 -0
  168. package/dist/src/utils/index.js +5 -0
  169. package/dist/src/utils/index.js.map +1 -0
  170. package/dist/src/utils/math-utilities.d.ts +52 -0
  171. package/dist/src/utils/math-utilities.d.ts.map +1 -0
  172. package/dist/src/utils/math-utilities.js +123 -0
  173. package/dist/src/utils/math-utilities.js.map +1 -0
  174. package/dist/src/utils/matrix-utilities.d.ts +2 -0
  175. package/dist/src/utils/matrix-utilities.d.ts.map +1 -0
  176. package/dist/src/utils/matrix-utilities.js +2 -0
  177. package/dist/src/utils/matrix-utilities.js.map +1 -0
  178. package/dist/src/utils/optimization-helpers.d.ts +33 -0
  179. package/dist/src/utils/optimization-helpers.d.ts.map +1 -0
  180. package/dist/src/utils/optimization-helpers.js +47 -0
  181. package/dist/src/utils/optimization-helpers.js.map +1 -0
  182. package/package.json +18 -3
  183. package/src/algorithms/centrality/betweenness.ts +167 -199
  184. package/src/algorithms/centrality/closeness.ts +73 -191
  185. package/src/algorithms/centrality/degree.ts +3 -3
  186. package/src/algorithms/centrality/delta-pagerank-simple.ts +366 -0
  187. package/src/algorithms/centrality/delta-pagerank.ts +435 -0
  188. package/src/algorithms/centrality/index.ts +2 -0
  189. package/src/algorithms/centrality/pagerank.ts +66 -0
  190. package/src/algorithms/community/girvan-newman.ts +52 -59
  191. package/src/algorithms/community/index.ts +2 -0
  192. package/src/algorithms/community/label-propagation.ts +64 -35
  193. package/src/algorithms/community/leiden.ts +40 -41
  194. package/src/algorithms/community/louvain-optimized.ts +445 -0
  195. package/src/algorithms/community/louvain.ts +24 -104
  196. package/src/algorithms/community/modularity-utils.ts +146 -0
  197. package/src/algorithms/matching/bipartite.ts +8 -44
  198. package/src/algorithms/shortest-path/bellman-ford.ts +1 -14
  199. package/src/algorithms/shortest-path/bidirectional-dijkstra.ts +248 -0
  200. package/src/algorithms/shortest-path/dijkstra.ts +17 -15
  201. package/src/algorithms/traversal/bfs-unified.ts +433 -0
  202. package/src/algorithms/traversal/bfs-variants.ts +496 -0
  203. package/src/algorithms/traversal/bfs.ts +10 -228
  204. package/src/benchmark-all-algorithms.ts +548 -0
  205. package/src/clustering/hierarchical.ts +241 -251
  206. package/src/clustering/index.ts +4 -2
  207. package/src/clustering/k-core.ts +87 -39
  208. package/src/clustering/spectral.ts +44 -20
  209. package/src/core/graph.ts +4 -4
  210. package/src/flow/ford-fulkerson.ts +186 -254
  211. package/src/flow/min-cut.ts +21 -11
  212. package/src/index.ts +6 -0
  213. package/src/link-prediction/adamic-adar.ts +17 -30
  214. package/src/link-prediction/common-neighbors.ts +7 -16
  215. package/src/optimized/bit-packed.ts +340 -0
  216. package/src/optimized/csr-graph.ts +455 -0
  217. package/src/optimized/direction-optimized-bfs.ts +291 -0
  218. package/src/optimized/graph-adapter.ts +200 -0
  219. package/src/optimized/index.ts +36 -0
  220. package/src/research/grsbm.ts +7 -16
  221. package/src/research/sync.ts +3 -32
  222. package/src/research/terahac.ts +10 -2
  223. package/src/types/index.ts +8 -0
  224. package/src/utils/algorithm-utilities.ts +2 -0
  225. package/src/utils/graph-converters.ts +241 -0
  226. package/src/utils/graph-utilities.ts +199 -0
  227. package/src/utils/index.ts +4 -0
  228. package/src/utils/math-utilities.ts +140 -0
  229. package/src/utils/matrix-utilities.ts +2 -0
  230. 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":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=algorithm-utilities.d.ts.map
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=algorithm-utilities.js.map
@@ -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,5 @@
1
+ export * from "./algorithm-utilities.js";
2
+ export * from "./graph-utilities.js";
3
+ export * from "./math-utilities.js";
4
+ export * from "./matrix-utilities.js";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -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,5 @@
1
+ export * from "./algorithm-utilities.js";
2
+ export * from "./graph-utilities.js";
3
+ export * from "./math-utilities.js";
4
+ export * from "./matrix-utilities.js";
5
+ //# sourceMappingURL=index.js.map
@@ -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"}