@graphty/algorithms 2.1.2 → 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.
Files changed (355) hide show
  1. package/README.md +139 -50
  2. package/dist/algorithms.js +15260 -10390
  3. package/dist/algorithms.js.map +1 -1
  4. package/dist/algorithms.standalone.js +26675 -21542
  5. package/dist/algorithms.standalone.js.map +1 -1
  6. package/dist/src/algorithms/centrality/betweenness.d.ts +18 -0
  7. package/dist/src/algorithms/centrality/betweenness.d.ts.map +1 -1
  8. package/dist/src/algorithms/centrality/betweenness.js +40 -1
  9. package/dist/src/algorithms/centrality/betweenness.js.map +1 -1
  10. package/dist/src/algorithms/centrality/closeness.d.ts +20 -0
  11. package/dist/src/algorithms/centrality/closeness.d.ts.map +1 -1
  12. package/dist/src/algorithms/centrality/closeness.js +93 -8
  13. package/dist/src/algorithms/centrality/closeness.js.map +1 -1
  14. package/dist/src/algorithms/centrality/degree.d.ts +9 -0
  15. package/dist/src/algorithms/centrality/degree.d.ts.map +1 -1
  16. package/dist/src/algorithms/centrality/degree.js +18 -0
  17. package/dist/src/algorithms/centrality/degree.js.map +1 -1
  18. package/dist/src/algorithms/centrality/eigenvector.d.ts +10 -0
  19. package/dist/src/algorithms/centrality/eigenvector.d.ts.map +1 -1
  20. package/dist/src/algorithms/centrality/eigenvector.js +29 -0
  21. package/dist/src/algorithms/centrality/eigenvector.js.map +1 -1
  22. package/dist/src/algorithms/centrality/hits.d.ts +9 -0
  23. package/dist/src/algorithms/centrality/hits.d.ts.map +1 -1
  24. package/dist/src/algorithms/centrality/hits.js +23 -0
  25. package/dist/src/algorithms/centrality/hits.js.map +1 -1
  26. package/dist/src/algorithms/centrality/katz.d.ts +9 -0
  27. package/dist/src/algorithms/centrality/katz.d.ts.map +1 -1
  28. package/dist/src/algorithms/centrality/katz.js +31 -0
  29. package/dist/src/algorithms/centrality/katz.js.map +1 -1
  30. package/dist/src/algorithms/centrality/pagerank.d.ts +13 -13
  31. package/dist/src/algorithms/centrality/pagerank.d.ts.map +1 -1
  32. package/dist/src/algorithms/centrality/pagerank.js +47 -10
  33. package/dist/src/algorithms/centrality/pagerank.js.map +1 -1
  34. package/dist/src/algorithms/community/girvan-newman-legacy.d.ts +27 -0
  35. package/dist/src/algorithms/community/girvan-newman-legacy.d.ts.map +1 -0
  36. package/dist/src/algorithms/community/girvan-newman-legacy.js +335 -0
  37. package/dist/src/algorithms/community/girvan-newman-legacy.js.map +1 -0
  38. package/dist/src/algorithms/community/girvan-newman.d.ts +5 -3
  39. package/dist/src/algorithms/community/girvan-newman.d.ts.map +1 -1
  40. package/dist/src/algorithms/community/girvan-newman.js +34 -308
  41. package/dist/src/algorithms/community/girvan-newman.js.map +1 -1
  42. package/dist/src/algorithms/community/label-propagation.d.ts +9 -6
  43. package/dist/src/algorithms/community/label-propagation.d.ts.map +1 -1
  44. package/dist/src/algorithms/community/label-propagation.js +24 -110
  45. package/dist/src/algorithms/community/label-propagation.js.map +1 -1
  46. package/dist/src/algorithms/components/connected.d.ts.map +1 -1
  47. package/dist/src/algorithms/components/connected.js +28 -77
  48. package/dist/src/algorithms/components/connected.js.map +1 -1
  49. package/dist/src/algorithms/mst/kruskal.d.ts.map +1 -1
  50. package/dist/src/algorithms/mst/kruskal.js +59 -3
  51. package/dist/src/algorithms/mst/kruskal.js.map +1 -1
  52. package/dist/src/algorithms/shortest-path/bellman-ford.d.ts.map +1 -1
  53. package/dist/src/algorithms/shortest-path/bellman-ford.js +46 -0
  54. package/dist/src/algorithms/shortest-path/bellman-ford.js.map +1 -1
  55. package/dist/src/algorithms/shortest-path/dijkstra.d.ts.map +1 -1
  56. package/dist/src/algorithms/shortest-path/dijkstra.js +27 -0
  57. package/dist/src/algorithms/shortest-path/dijkstra.js.map +1 -1
  58. package/dist/src/algorithms/shortest-path/floyd-warshall.d.ts +15 -5
  59. package/dist/src/algorithms/shortest-path/floyd-warshall.d.ts.map +1 -1
  60. package/dist/src/algorithms/shortest-path/floyd-warshall.js +97 -107
  61. package/dist/src/algorithms/shortest-path/floyd-warshall.js.map +1 -1
  62. package/dist/src/algorithms/traversal/bfs-unified.d.ts +2 -12
  63. package/dist/src/algorithms/traversal/bfs-unified.d.ts.map +1 -1
  64. package/dist/src/algorithms/traversal/bfs-unified.js +47 -308
  65. package/dist/src/algorithms/traversal/bfs-unified.js.map +1 -1
  66. package/dist/src/algorithms/traversal/bfs-variants.d.ts.map +1 -1
  67. package/dist/src/algorithms/traversal/bfs-variants.js +5 -25
  68. package/dist/src/algorithms/traversal/bfs-variants.js.map +1 -1
  69. package/dist/src/algorithms/traversal/bfs.d.ts +0 -3
  70. package/dist/src/algorithms/traversal/bfs.d.ts.map +1 -1
  71. package/dist/src/algorithms/traversal/bfs.js +0 -4
  72. package/dist/src/algorithms/traversal/bfs.js.map +1 -1
  73. package/dist/src/algorithms/traversal/dfs.d.ts.map +1 -1
  74. package/dist/src/algorithms/traversal/dfs.js +33 -154
  75. package/dist/src/algorithms/traversal/dfs.js.map +1 -1
  76. package/dist/src/clustering/hierarchical-legacy.d.ts +56 -0
  77. package/dist/src/clustering/hierarchical-legacy.d.ts.map +1 -0
  78. package/dist/src/clustering/hierarchical-legacy.js +441 -0
  79. package/dist/src/clustering/hierarchical-legacy.js.map +1 -0
  80. package/dist/src/clustering/hierarchical.d.ts +7 -39
  81. package/dist/src/clustering/hierarchical.d.ts.map +1 -1
  82. package/dist/src/clustering/hierarchical.js +56 -417
  83. package/dist/src/clustering/hierarchical.js.map +1 -1
  84. package/dist/src/clustering/k-core-legacy.d.ts +30 -0
  85. package/dist/src/clustering/k-core-legacy.d.ts.map +1 -0
  86. package/dist/src/clustering/k-core-legacy.js +191 -0
  87. package/dist/src/clustering/k-core-legacy.js.map +1 -0
  88. package/dist/src/clustering/k-core.d.ts +8 -7
  89. package/dist/src/clustering/k-core.d.ts.map +1 -1
  90. package/dist/src/clustering/k-core.js +33 -174
  91. package/dist/src/clustering/k-core.js.map +1 -1
  92. package/dist/src/clustering/mcl-legacy.d.ts +42 -0
  93. package/dist/src/clustering/mcl-legacy.d.ts.map +1 -0
  94. package/dist/src/clustering/mcl-legacy.js +386 -0
  95. package/dist/src/clustering/mcl-legacy.js.map +1 -0
  96. package/dist/src/clustering/mcl.d.ts +9 -32
  97. package/dist/src/clustering/mcl.d.ts.map +1 -1
  98. package/dist/src/clustering/mcl.js +48 -374
  99. package/dist/src/clustering/mcl.js.map +1 -1
  100. package/dist/src/index.d.ts +29 -3
  101. package/dist/src/index.d.ts.map +1 -1
  102. package/dist/src/index.js +2 -1
  103. package/dist/src/index.js.map +1 -1
  104. package/dist/src/indexed/accelerator.d.ts +141 -11
  105. package/dist/src/indexed/accelerator.d.ts.map +1 -1
  106. package/dist/src/indexed/accelerator.js +319 -5
  107. package/dist/src/indexed/accelerator.js.map +1 -1
  108. package/dist/src/indexed/all-pairs.d.ts +59 -0
  109. package/dist/src/indexed/all-pairs.d.ts.map +1 -0
  110. package/dist/src/indexed/all-pairs.js +274 -0
  111. package/dist/src/indexed/all-pairs.js.map +1 -0
  112. package/dist/src/indexed/bellman-ford.d.ts +25 -0
  113. package/dist/src/indexed/bellman-ford.d.ts.map +1 -0
  114. package/dist/src/indexed/bellman-ford.js +59 -0
  115. package/dist/src/indexed/bellman-ford.js.map +1 -0
  116. package/dist/src/indexed/betweenness.d.ts +85 -0
  117. package/dist/src/indexed/betweenness.d.ts.map +1 -0
  118. package/dist/src/indexed/betweenness.js +188 -0
  119. package/dist/src/indexed/betweenness.js.map +1 -0
  120. package/dist/src/indexed/bfs.d.ts +69 -2
  121. package/dist/src/indexed/bfs.d.ts.map +1 -1
  122. package/dist/src/indexed/bfs.js +148 -1
  123. package/dist/src/indexed/bfs.js.map +1 -1
  124. package/dist/src/indexed/bipartite.d.ts +37 -0
  125. package/dist/src/indexed/bipartite.d.ts.map +1 -0
  126. package/dist/src/indexed/bipartite.js +54 -0
  127. package/dist/src/indexed/bipartite.js.map +1 -0
  128. package/dist/src/indexed/closeness.d.ts +49 -0
  129. package/dist/src/indexed/closeness.d.ts.map +1 -0
  130. package/dist/src/indexed/closeness.js +127 -0
  131. package/dist/src/indexed/closeness.js.map +1 -0
  132. package/dist/src/indexed/common-neighbors.d.ts +14 -1
  133. package/dist/src/indexed/common-neighbors.d.ts.map +1 -1
  134. package/dist/src/indexed/common-neighbors.js +24 -14
  135. package/dist/src/indexed/common-neighbors.js.map +1 -1
  136. package/dist/src/indexed/degree.d.ts +19 -0
  137. package/dist/src/indexed/degree.d.ts.map +1 -0
  138. package/dist/src/indexed/degree.js +45 -0
  139. package/dist/src/indexed/degree.js.map +1 -0
  140. package/dist/src/indexed/delta-pagerank.d.ts +145 -0
  141. package/dist/src/indexed/delta-pagerank.d.ts.map +1 -0
  142. package/dist/src/indexed/delta-pagerank.js +428 -0
  143. package/dist/src/indexed/delta-pagerank.js.map +1 -0
  144. package/dist/src/indexed/dfs.d.ts +55 -0
  145. package/dist/src/indexed/dfs.d.ts.map +1 -0
  146. package/dist/src/indexed/dfs.js +146 -0
  147. package/dist/src/indexed/dfs.js.map +1 -0
  148. package/dist/src/indexed/eigenvector.d.ts +48 -0
  149. package/dist/src/indexed/eigenvector.d.ts.map +1 -0
  150. package/dist/src/indexed/eigenvector.js +162 -0
  151. package/dist/src/indexed/eigenvector.js.map +1 -0
  152. package/dist/src/indexed/facade.d.ts +109 -0
  153. package/dist/src/indexed/facade.d.ts.map +1 -0
  154. package/dist/src/indexed/facade.js +204 -0
  155. package/dist/src/indexed/facade.js.map +1 -0
  156. package/dist/src/indexed/flow.d.ts +120 -0
  157. package/dist/src/indexed/flow.d.ts.map +1 -0
  158. package/dist/src/indexed/flow.js +377 -0
  159. package/dist/src/indexed/flow.js.map +1 -0
  160. package/dist/src/indexed/girvan-newman.d.ts +42 -0
  161. package/dist/src/indexed/girvan-newman.d.ts.map +1 -0
  162. package/dist/src/indexed/girvan-newman.js +90 -0
  163. package/dist/src/indexed/girvan-newman.js.map +1 -0
  164. package/dist/src/indexed/grsbm.d.ts +85 -0
  165. package/dist/src/indexed/grsbm.d.ts.map +1 -0
  166. package/dist/src/indexed/grsbm.js +287 -0
  167. package/dist/src/indexed/grsbm.js.map +1 -0
  168. package/dist/src/indexed/hierarchical.d.ts +69 -0
  169. package/dist/src/indexed/hierarchical.d.ts.map +1 -0
  170. package/dist/src/indexed/hierarchical.js +245 -0
  171. package/dist/src/indexed/hierarchical.js.map +1 -0
  172. package/dist/src/indexed/index.d.ts +29 -3
  173. package/dist/src/indexed/index.d.ts.map +1 -1
  174. package/dist/src/indexed/index.js +29 -3
  175. package/dist/src/indexed/index.js.map +1 -1
  176. package/dist/src/indexed/isomorphism.d.ts +42 -0
  177. package/dist/src/indexed/isomorphism.d.ts.map +1 -0
  178. package/dist/src/indexed/isomorphism.js +269 -0
  179. package/dist/src/indexed/isomorphism.js.map +1 -0
  180. package/dist/src/indexed/label-propagation.d.ts +134 -0
  181. package/dist/src/indexed/label-propagation.d.ts.map +1 -0
  182. package/dist/src/indexed/label-propagation.js +486 -0
  183. package/dist/src/indexed/label-propagation.js.map +1 -0
  184. package/dist/src/indexed/leiden.d.ts +52 -0
  185. package/dist/src/indexed/leiden.d.ts.map +1 -0
  186. package/dist/src/indexed/leiden.js +384 -0
  187. package/dist/src/indexed/leiden.js.map +1 -0
  188. package/dist/src/indexed/link-prediction.d.ts +147 -0
  189. package/dist/src/indexed/link-prediction.d.ts.map +1 -0
  190. package/dist/src/indexed/link-prediction.js +317 -0
  191. package/dist/src/indexed/link-prediction.js.map +1 -0
  192. package/dist/src/indexed/markov.d.ts +54 -0
  193. package/dist/src/indexed/markov.d.ts.map +1 -0
  194. package/dist/src/indexed/markov.js +284 -0
  195. package/dist/src/indexed/markov.js.map +1 -0
  196. package/dist/src/indexed/matching.d.ts +53 -0
  197. package/dist/src/indexed/matching.d.ts.map +1 -0
  198. package/dist/src/indexed/matching.js +139 -0
  199. package/dist/src/indexed/matching.js.map +1 -0
  200. package/dist/src/indexed/min-cut.d.ts +48 -0
  201. package/dist/src/indexed/min-cut.d.ts.map +1 -0
  202. package/dist/src/indexed/min-cut.js +175 -0
  203. package/dist/src/indexed/min-cut.js.map +1 -0
  204. package/dist/src/indexed/modularity.d.ts +34 -0
  205. package/dist/src/indexed/modularity.d.ts.map +1 -0
  206. package/dist/src/indexed/modularity.js +74 -0
  207. package/dist/src/indexed/modularity.js.map +1 -0
  208. package/dist/src/indexed/mst.d.ts +29 -1
  209. package/dist/src/indexed/mst.d.ts.map +1 -1
  210. package/dist/src/indexed/mst.js +62 -0
  211. package/dist/src/indexed/mst.js.map +1 -1
  212. package/dist/src/indexed/pagerank.d.ts +29 -6
  213. package/dist/src/indexed/pagerank.d.ts.map +1 -1
  214. package/dist/src/indexed/pagerank.js +107 -11
  215. package/dist/src/indexed/pagerank.js.map +1 -1
  216. package/dist/src/indexed/point-to-point.d.ts +53 -0
  217. package/dist/src/indexed/point-to-point.d.ts.map +1 -0
  218. package/dist/src/indexed/point-to-point.js +173 -0
  219. package/dist/src/indexed/point-to-point.js.map +1 -0
  220. package/dist/src/indexed/scc.d.ts +53 -0
  221. package/dist/src/indexed/scc.d.ts.map +1 -0
  222. package/dist/src/indexed/scc.js +110 -0
  223. package/dist/src/indexed/scc.js.map +1 -0
  224. package/dist/src/indexed/spectral.d.ts +61 -0
  225. package/dist/src/indexed/spectral.d.ts.map +1 -0
  226. package/dist/src/indexed/spectral.js +476 -0
  227. package/dist/src/indexed/spectral.js.map +1 -0
  228. package/dist/src/indexed/structures/bit-set.d.ts +45 -0
  229. package/dist/src/indexed/structures/bit-set.d.ts.map +1 -0
  230. package/dist/src/indexed/structures/bit-set.js +57 -0
  231. package/dist/src/indexed/structures/bit-set.js.map +1 -0
  232. package/dist/src/indexed/structures/max-heap.d.ts +52 -0
  233. package/dist/src/indexed/structures/max-heap.d.ts.map +1 -0
  234. package/dist/src/indexed/structures/max-heap.js +66 -0
  235. package/dist/src/indexed/structures/max-heap.js.map +1 -0
  236. package/dist/src/indexed/structures/min-heap.d.ts +30 -1
  237. package/dist/src/indexed/structures/min-heap.d.ts.map +1 -1
  238. package/dist/src/indexed/structures/min-heap.js +46 -6
  239. package/dist/src/indexed/structures/min-heap.js.map +1 -1
  240. package/dist/src/indexed/structures/ring-queue.d.ts +41 -0
  241. package/dist/src/indexed/structures/ring-queue.d.ts.map +1 -0
  242. package/dist/src/indexed/structures/ring-queue.js +64 -0
  243. package/dist/src/indexed/structures/ring-queue.js.map +1 -0
  244. package/dist/src/indexed/sync.d.ts +50 -0
  245. package/dist/src/indexed/sync.d.ts.map +1 -0
  246. package/dist/src/indexed/sync.js +175 -0
  247. package/dist/src/indexed/sync.js.map +1 -0
  248. package/dist/src/indexed/terahac.d.ts +58 -0
  249. package/dist/src/indexed/terahac.d.ts.map +1 -0
  250. package/dist/src/indexed/terahac.js +244 -0
  251. package/dist/src/indexed/terahac.js.map +1 -0
  252. package/dist/src/indexed/to-snapshot.d.ts +45 -2
  253. package/dist/src/indexed/to-snapshot.d.ts.map +1 -1
  254. package/dist/src/indexed/to-snapshot.js +140 -6
  255. package/dist/src/indexed/to-snapshot.js.map +1 -1
  256. package/dist/src/link-prediction/common-neighbors-legacy.d.ts +71 -0
  257. package/dist/src/link-prediction/common-neighbors-legacy.d.ts.map +1 -0
  258. package/dist/src/link-prediction/common-neighbors-legacy.js +172 -0
  259. package/dist/src/link-prediction/common-neighbors-legacy.js.map +1 -0
  260. package/dist/src/link-prediction/common-neighbors.d.ts +11 -19
  261. package/dist/src/link-prediction/common-neighbors.d.ts.map +1 -1
  262. package/dist/src/link-prediction/common-neighbors.js +56 -123
  263. package/dist/src/link-prediction/common-neighbors.js.map +1 -1
  264. package/dist/src/optimized/direction-optimized-bfs.d.ts +6 -0
  265. package/dist/src/optimized/direction-optimized-bfs.d.ts.map +1 -1
  266. package/dist/src/optimized/direction-optimized-bfs.js +6 -0
  267. package/dist/src/optimized/direction-optimized-bfs.js.map +1 -1
  268. package/dist/src/research/grsbm-legacy.d.ts +82 -0
  269. package/dist/src/research/grsbm-legacy.d.ts.map +1 -0
  270. package/dist/src/research/grsbm-legacy.js +416 -0
  271. package/dist/src/research/grsbm-legacy.js.map +1 -0
  272. package/dist/src/research/grsbm.d.ts +9 -66
  273. package/dist/src/research/grsbm.d.ts.map +1 -1
  274. package/dist/src/research/grsbm.js +67 -391
  275. package/dist/src/research/grsbm.js.map +1 -1
  276. package/dist/src/research/sync-legacy.d.ts +48 -0
  277. package/dist/src/research/sync-legacy.d.ts.map +1 -0
  278. package/dist/src/research/sync-legacy.js +337 -0
  279. package/dist/src/research/sync-legacy.js.map +1 -0
  280. package/dist/src/research/sync.d.ts +10 -32
  281. package/dist/src/research/sync.d.ts.map +1 -1
  282. package/dist/src/research/sync.js +28 -316
  283. package/dist/src/research/sync.js.map +1 -1
  284. package/package.json +4 -3
  285. package/src/algorithms/centrality/betweenness.ts +51 -1
  286. package/src/algorithms/centrality/closeness.ts +112 -12
  287. package/src/algorithms/centrality/degree.ts +19 -0
  288. package/src/algorithms/centrality/eigenvector.ts +34 -0
  289. package/src/algorithms/centrality/hits.ts +24 -0
  290. package/src/algorithms/centrality/katz.ts +32 -0
  291. package/src/algorithms/centrality/pagerank.ts +53 -13
  292. package/src/algorithms/community/girvan-newman-legacy.ts +414 -0
  293. package/src/algorithms/community/girvan-newman.ts +36 -386
  294. package/src/algorithms/community/label-propagation.ts +24 -133
  295. package/src/algorithms/components/connected.ts +28 -95
  296. package/src/algorithms/mst/kruskal.ts +65 -4
  297. package/src/algorithms/shortest-path/bellman-ford.ts +49 -0
  298. package/src/algorithms/shortest-path/dijkstra.ts +29 -0
  299. package/src/algorithms/shortest-path/floyd-warshall.ts +106 -136
  300. package/src/algorithms/traversal/bfs-unified.ts +52 -366
  301. package/src/algorithms/traversal/bfs-variants.ts +5 -28
  302. package/src/algorithms/traversal/bfs.ts +0 -4
  303. package/src/algorithms/traversal/dfs.ts +39 -182
  304. package/src/clustering/hierarchical-legacy.ts +551 -0
  305. package/src/clustering/hierarchical.ts +64 -520
  306. package/src/clustering/k-core-legacy.ts +229 -0
  307. package/src/clustering/k-core.ts +38 -209
  308. package/src/clustering/mcl-legacy.ts +498 -0
  309. package/src/clustering/mcl.ts +46 -479
  310. package/src/index.ts +90 -3
  311. package/src/indexed/accelerator.ts +502 -16
  312. package/src/indexed/all-pairs.ts +342 -0
  313. package/src/indexed/bellman-ford.ts +72 -0
  314. package/src/indexed/betweenness.ts +258 -0
  315. package/src/indexed/bfs.ts +189 -3
  316. package/src/indexed/bipartite.ts +77 -0
  317. package/src/indexed/closeness.ts +160 -0
  318. package/src/indexed/common-neighbors.ts +31 -14
  319. package/src/indexed/degree.ts +55 -0
  320. package/src/indexed/delta-pagerank.ts +513 -0
  321. package/src/indexed/dfs.ts +189 -0
  322. package/src/indexed/eigenvector.ts +202 -0
  323. package/src/indexed/facade.ts +229 -0
  324. package/src/indexed/flow.ts +500 -0
  325. package/src/indexed/girvan-newman.ts +120 -0
  326. package/src/indexed/grsbm.ts +390 -0
  327. package/src/indexed/hierarchical.ts +295 -0
  328. package/src/indexed/index.ts +94 -3
  329. package/src/indexed/isomorphism.ts +305 -0
  330. package/src/indexed/label-propagation.ts +582 -0
  331. package/src/indexed/leiden.ts +436 -0
  332. package/src/indexed/link-prediction.ts +399 -0
  333. package/src/indexed/markov.ts +324 -0
  334. package/src/indexed/matching.ts +192 -0
  335. package/src/indexed/min-cut.ts +201 -0
  336. package/src/indexed/modularity.ts +81 -0
  337. package/src/indexed/mst.ts +79 -1
  338. package/src/indexed/pagerank.ts +128 -15
  339. package/src/indexed/point-to-point.ts +220 -0
  340. package/src/indexed/scc.ts +132 -0
  341. package/src/indexed/spectral.ts +550 -0
  342. package/src/indexed/structures/bit-set.ts +65 -0
  343. package/src/indexed/structures/max-heap.ts +74 -0
  344. package/src/indexed/structures/min-heap.ts +51 -6
  345. package/src/indexed/structures/ring-queue.ts +70 -0
  346. package/src/indexed/sync.ts +229 -0
  347. package/src/indexed/terahac.ts +290 -0
  348. package/src/indexed/to-snapshot.ts +156 -6
  349. package/src/link-prediction/common-neighbors-legacy.ts +252 -0
  350. package/src/link-prediction/common-neighbors.ts +65 -168
  351. package/src/optimized/direction-optimized-bfs.ts +6 -1
  352. package/src/research/grsbm-legacy.ts +586 -0
  353. package/src/research/grsbm.ts +76 -555
  354. package/src/research/sync-legacy.ts +456 -0
  355. package/src/research/sync.ts +30 -431
@@ -0,0 +1,441 @@
1
+ /**
2
+ * Hierarchical Clustering Algorithm
3
+ *
4
+ * Builds a hierarchy of clusters through agglomeration (bottom-up)
5
+ * or division (top-down). Useful for understanding multi-scale
6
+ * structure in graphs.
7
+ */
8
+ /**
9
+ * Convert Graph to adjacency set representation for clustering
10
+ * @param graph - The input graph to convert
11
+ * @returns Map of node IDs to sets of neighbor node IDs
12
+ */
13
+ function graphToAdjacencySet(graph) {
14
+ const adjacency = new Map();
15
+ // Initialize all nodes
16
+ for (const node of graph.nodes()) {
17
+ adjacency.set(String(node.id), new Set());
18
+ }
19
+ // Add edges
20
+ for (const edge of graph.edges()) {
21
+ const source = String(edge.source);
22
+ const target = String(edge.target);
23
+ const sourceSet = adjacency.get(source);
24
+ if (sourceSet) {
25
+ sourceSet.add(target);
26
+ }
27
+ // For undirected graphs, add reverse edge
28
+ if (!graph.isDirected) {
29
+ const targetSet = adjacency.get(target);
30
+ if (targetSet) {
31
+ targetSet.add(source);
32
+ }
33
+ }
34
+ }
35
+ return adjacency;
36
+ }
37
+ /**
38
+ * Compute distance between two nodes based on graph structure
39
+ * @param graph - Adjacency map representation of the graph
40
+ * @param distances - Map to store computed distances between nodes
41
+ */
42
+ function computeGraphDistance(graph, distances) {
43
+ // Use BFS to compute shortest path distances
44
+ for (const start of graph.keys()) {
45
+ const dist = new Map();
46
+ const queue = [start];
47
+ dist.set(start, 0);
48
+ while (queue.length > 0) {
49
+ const node = queue.shift();
50
+ if (!node) {
51
+ continue;
52
+ }
53
+ const neighbors = graph.get(node);
54
+ if (neighbors) {
55
+ for (const neighbor of neighbors) {
56
+ if (!dist.has(neighbor)) {
57
+ dist.set(neighbor, (dist.get(node) ?? 0) + 1);
58
+ queue.push(neighbor);
59
+ }
60
+ }
61
+ }
62
+ }
63
+ distances.set(start, dist);
64
+ }
65
+ }
66
+ /**
67
+ * Compute distance between two clusters based on linkage method
68
+ * @param cluster1 - First cluster node
69
+ * @param cluster2 - Second cluster node
70
+ * @param distances - Precomputed distance matrix between nodes
71
+ * @param linkage - Linkage method to use for computing cluster distance
72
+ * @returns The distance between the two clusters
73
+ */
74
+ function clusterDistance(cluster1, cluster2, distances, linkage) {
75
+ const allDistances = [];
76
+ for (const node1 of cluster1.members) {
77
+ const node1Distances = distances.get(node1);
78
+ if (!node1Distances) {
79
+ continue;
80
+ }
81
+ for (const node2 of cluster2.members) {
82
+ const dist = node1Distances.get(node2);
83
+ if (dist !== undefined) {
84
+ allDistances.push(dist);
85
+ }
86
+ }
87
+ }
88
+ if (allDistances.length === 0) {
89
+ return Infinity;
90
+ }
91
+ switch (linkage) {
92
+ case "single":
93
+ return Math.min(...allDistances);
94
+ case "complete":
95
+ return Math.max(...allDistances);
96
+ case "average":
97
+ return allDistances.reduce((a, b) => a + b, 0) / allDistances.length;
98
+ case "ward": {
99
+ // Simplified Ward's method - minimize within-cluster variance
100
+ const size1 = cluster1.members.size;
101
+ const size2 = cluster2.members.size;
102
+ const avgDist = allDistances.reduce((a, b) => a + b, 0) / allDistances.length;
103
+ return avgDist * ((size1 * size2) / (size1 + size2));
104
+ }
105
+ default:
106
+ return Math.min(...allDistances);
107
+ }
108
+ }
109
+ /**
110
+ * Internal implementation of agglomerative hierarchical clustering
111
+ * @param graph - Adjacency map representation of the graph
112
+ * @param linkage - Linkage method for cluster distance computation
113
+ * @returns Hierarchical clustering result with dendrogram and cluster assignments
114
+ */
115
+ function hierarchicalClusteringImpl(graph, linkage = "single") {
116
+ const nodes = Array.from(graph.keys());
117
+ const n = nodes.length;
118
+ if (n === 0) {
119
+ return {
120
+ root: { id: "empty", members: new Set(), distance: 0, height: 0 },
121
+ dendrogram: [],
122
+ clusters: new Map(),
123
+ };
124
+ }
125
+ // Compute pairwise distances
126
+ const distances = new Map();
127
+ computeGraphDistance(graph, distances);
128
+ // Initialize clusters - each node is its own cluster
129
+ const clusters = nodes.map((node, i) => ({
130
+ id: `leaf-${String(i)}`,
131
+ members: new Set([node]),
132
+ distance: 0,
133
+ height: 0,
134
+ }));
135
+ const dendrogram = [...clusters];
136
+ let clusterCount = n;
137
+ // Distance matrix between clusters
138
+ const clusterDistances = new Map();
139
+ // Initialize cluster distances
140
+ for (let i = 0; i < clusters.length; i++) {
141
+ const cluster1 = clusters[i];
142
+ if (!cluster1) {
143
+ continue;
144
+ }
145
+ const distMap = new Map();
146
+ for (let j = i + 1; j < clusters.length; j++) {
147
+ const cluster2 = clusters[j];
148
+ if (!cluster2) {
149
+ continue;
150
+ }
151
+ const dist = clusterDistance(cluster1, cluster2, distances, linkage);
152
+ distMap.set(cluster2.id, dist);
153
+ }
154
+ clusterDistances.set(cluster1.id, distMap);
155
+ }
156
+ // Active clusters
157
+ const activeClusters = new Set(clusters);
158
+ // Merge clusters until only one remains
159
+ while (activeClusters.size > 1) {
160
+ // Find closest pair of clusters
161
+ let minDist = Infinity;
162
+ let mergeCluster1 = null;
163
+ let mergeCluster2 = null;
164
+ for (const cluster1 of activeClusters) {
165
+ const distMap = clusterDistances.get(cluster1.id);
166
+ if (!distMap) {
167
+ continue;
168
+ }
169
+ for (const cluster2 of activeClusters) {
170
+ if (cluster1.id >= cluster2.id) {
171
+ continue;
172
+ }
173
+ const dist = distMap.get(cluster2.id) ?? clusterDistances.get(cluster2.id)?.get(cluster1.id) ?? Infinity;
174
+ if (dist < minDist) {
175
+ minDist = dist;
176
+ mergeCluster1 = cluster1;
177
+ mergeCluster2 = cluster2;
178
+ }
179
+ }
180
+ }
181
+ if (!mergeCluster1 || !mergeCluster2 || minDist === Infinity) {
182
+ // No valid merge found - create forest
183
+ const trees = Array.from(activeClusters);
184
+ const forestRoot = {
185
+ id: `forest-${String(clusterCount++)}`,
186
+ members: new Set(nodes),
187
+ distance: Infinity,
188
+ height: Math.max(...trees.map((t) => t.height)) + 1,
189
+ trees,
190
+ };
191
+ dendrogram.push(forestRoot);
192
+ activeClusters.clear();
193
+ activeClusters.add(forestRoot);
194
+ break;
195
+ }
196
+ // Create new cluster
197
+ const newCluster = {
198
+ id: `cluster-${String(clusterCount++)}`,
199
+ members: new Set([...mergeCluster1.members, ...mergeCluster2.members]),
200
+ left: mergeCluster1,
201
+ right: mergeCluster2,
202
+ distance: minDist,
203
+ height: Math.max(mergeCluster1.height, mergeCluster2.height) + 1,
204
+ };
205
+ dendrogram.push(newCluster);
206
+ // Update distances to new cluster
207
+ const newDistMap = new Map();
208
+ for (const cluster of activeClusters) {
209
+ if (cluster.id === mergeCluster1.id || cluster.id === mergeCluster2.id) {
210
+ continue;
211
+ }
212
+ const dist = clusterDistance(newCluster, cluster, distances, linkage);
213
+ newDistMap.set(cluster.id, dist);
214
+ // Update reverse direction
215
+ const clusterDistMap = clusterDistances.get(cluster.id);
216
+ if (clusterDistMap) {
217
+ clusterDistMap.set(newCluster.id, dist);
218
+ }
219
+ }
220
+ clusterDistances.set(newCluster.id, newDistMap);
221
+ // Remove merged clusters
222
+ activeClusters.delete(mergeCluster1);
223
+ activeClusters.delete(mergeCluster2);
224
+ clusterDistances.delete(mergeCluster1.id);
225
+ clusterDistances.delete(mergeCluster2.id);
226
+ // Clean up references
227
+ for (const distMap of clusterDistances.values()) {
228
+ distMap.delete(mergeCluster1.id);
229
+ distMap.delete(mergeCluster2.id);
230
+ }
231
+ activeClusters.add(newCluster);
232
+ }
233
+ // Root is the last remaining cluster
234
+ const root = activeClusters.size > 0 ? Array.from(activeClusters)[0] : dendrogram[dendrogram.length - 1];
235
+ // Generate clusters at different heights
236
+ const clustersByLevel = new Map();
237
+ if (!root) {
238
+ return {
239
+ root: { id: "empty", members: new Set(), distance: 0, height: 0 },
240
+ dendrogram: [],
241
+ clusters: new Map(),
242
+ };
243
+ }
244
+ for (let h = 0; h <= root.height; h++) {
245
+ clustersByLevel.set(h, cutDendrogram(root, h));
246
+ }
247
+ return {
248
+ root,
249
+ dendrogram,
250
+ clusters: clustersByLevel,
251
+ };
252
+ }
253
+ /**
254
+ * Cut dendrogram at specific height to get clusters
255
+ * @param root - Root node of the dendrogram
256
+ * @param height - Height at which to cut the dendrogram
257
+ * @returns Array of sets representing clusters at the specified height
258
+ */
259
+ export function cutDendrogram(root, height) {
260
+ const clusters = [];
261
+ function traverse(node) {
262
+ if (node.height <= height || (!node.left && !node.right)) {
263
+ clusters.push(node.members);
264
+ }
265
+ else {
266
+ if (node.trees) {
267
+ // Handle forest nodes
268
+ for (const tree of node.trees) {
269
+ traverse(tree);
270
+ }
271
+ }
272
+ else {
273
+ if (node.left) {
274
+ traverse(node.left);
275
+ }
276
+ if (node.right) {
277
+ traverse(node.right);
278
+ }
279
+ }
280
+ }
281
+ }
282
+ traverse(root);
283
+ return clusters;
284
+ }
285
+ /**
286
+ * Cut dendrogram to get exactly k clusters
287
+ * @param root - Root node of the dendrogram
288
+ * @param k - Target number of clusters
289
+ * @returns Array of sets representing exactly k clusters
290
+ */
291
+ export function cutDendrogramKClusters(root, k) {
292
+ if (k <= 0) {
293
+ return [];
294
+ }
295
+ if (k === 1) {
296
+ return [root.members];
297
+ }
298
+ // Binary search for the right height
299
+ let low = 0;
300
+ let high = root.height;
301
+ while (low < high) {
302
+ const mid = Math.floor((low + high) / 2);
303
+ const clusters = cutDendrogram(root, mid);
304
+ if (clusters.length === k) {
305
+ return clusters;
306
+ }
307
+ else if (clusters.length < k) {
308
+ high = mid;
309
+ }
310
+ else {
311
+ low = mid + 1;
312
+ }
313
+ }
314
+ return cutDendrogram(root, low);
315
+ }
316
+ /**
317
+ * Compute modularity-based hierarchical clustering
318
+ * Uses modularity gain to decide merges
319
+ * @param graph - The input graph to cluster
320
+ * @returns Hierarchical clustering result with dendrogram and cluster assignments
321
+ */
322
+ export function modularityHierarchicalClustering(graph) {
323
+ const adjacencySet = graphToAdjacencySet(graph);
324
+ const nodes = Array.from(adjacencySet.keys());
325
+ const n = nodes.length;
326
+ if (n === 0) {
327
+ return {
328
+ root: { id: "empty", members: new Set(), distance: 0, height: 0 },
329
+ dendrogram: [],
330
+ clusters: new Map(),
331
+ };
332
+ }
333
+ // Compute degrees
334
+ const degrees = new Map();
335
+ let totalEdges = 0;
336
+ for (const [node, neighbors] of adjacencySet) {
337
+ degrees.set(node, neighbors.size);
338
+ totalEdges += neighbors.size;
339
+ }
340
+ // For undirected graphs
341
+ totalEdges = totalEdges / 2;
342
+ // Initialize clusters
343
+ const clusters = nodes.map((node, i) => ({
344
+ id: `leaf-${String(i)}`,
345
+ members: new Set([node]),
346
+ distance: 0,
347
+ height: 0,
348
+ }));
349
+ const dendrogram = [...clusters];
350
+ let clusterCount = n;
351
+ // Active clusters
352
+ const activeClusters = new Set(clusters);
353
+ // Community assignments
354
+ const communities = new Map();
355
+ nodes.forEach((node, i) => communities.set(node, i));
356
+ // Merge clusters based on modularity gain
357
+ while (activeClusters.size > 1) {
358
+ let maxGain = -Infinity;
359
+ let mergeCluster1 = null;
360
+ let mergeCluster2 = null;
361
+ for (const cluster1 of activeClusters) {
362
+ for (const cluster2 of activeClusters) {
363
+ if (cluster1.id >= cluster2.id) {
364
+ continue;
365
+ }
366
+ // Calculate modularity gain
367
+ let edgesBetween = 0;
368
+ let degreeProduct = 0;
369
+ for (const node1 of cluster1.members) {
370
+ const neighbors = adjacencySet.get(node1);
371
+ const degree1 = degrees.get(node1) ?? 0;
372
+ for (const node2 of cluster2.members) {
373
+ if (neighbors?.has(node2)) {
374
+ edgesBetween++;
375
+ }
376
+ const degree2 = degrees.get(node2) ?? 0;
377
+ degreeProduct += degree1 * degree2;
378
+ }
379
+ }
380
+ const gain = edgesBetween / totalEdges - degreeProduct / (4 * totalEdges * totalEdges);
381
+ if (gain > maxGain) {
382
+ maxGain = gain;
383
+ mergeCluster1 = cluster1;
384
+ mergeCluster2 = cluster2;
385
+ }
386
+ }
387
+ }
388
+ if (!mergeCluster1 || !mergeCluster2) {
389
+ break;
390
+ }
391
+ // Create new cluster
392
+ const newCluster = {
393
+ id: `cluster-${String(clusterCount++)}`,
394
+ members: new Set([...mergeCluster1.members, ...mergeCluster2.members]),
395
+ left: mergeCluster1,
396
+ right: mergeCluster2,
397
+ distance: -maxGain, // Use negative gain as distance
398
+ height: Math.max(mergeCluster1.height, mergeCluster2.height) + 1,
399
+ };
400
+ dendrogram.push(newCluster);
401
+ // Remove old and add new
402
+ activeClusters.delete(mergeCluster1);
403
+ activeClusters.delete(mergeCluster2);
404
+ activeClusters.add(newCluster);
405
+ }
406
+ // Root is the last remaining cluster
407
+ const root = Array.from(activeClusters)[0] ?? dendrogram[dendrogram.length - 1];
408
+ // Generate clusters at different heights
409
+ const clustersByLevel = new Map();
410
+ if (!root) {
411
+ return {
412
+ root: { id: "empty", members: new Set(), distance: 0, height: 0 },
413
+ dendrogram: [],
414
+ clusters: new Map(),
415
+ };
416
+ }
417
+ for (let h = 0; h <= root.height; h++) {
418
+ clustersByLevel.set(h, cutDendrogram(root, h));
419
+ }
420
+ return {
421
+ root,
422
+ dendrogram,
423
+ clusters: clustersByLevel,
424
+ };
425
+ }
426
+ /**
427
+ * Agglomerative hierarchical clustering
428
+ * Builds clusters bottom-up by merging closest pairs
429
+ * @param graph - Undirected graph - accepts Graph class or Map<T, Set<T>>
430
+ * @param linkage - Linkage method for cluster distance
431
+ * @returns Hierarchical clustering result
432
+ *
433
+ * Time Complexity: O(n³) naive, O(n² log n) with heap
434
+ * Space Complexity: O(n²)
435
+ */
436
+ export function hierarchicalClustering(graph, linkage = "single") {
437
+ // Convert Graph to adjacency set representation
438
+ const adjacencySet = graphToAdjacencySet(graph);
439
+ return hierarchicalClusteringImpl(adjacencySet, linkage);
440
+ }
441
+ //# sourceMappingURL=hierarchical-legacy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hierarchical-legacy.js","sourceRoot":"","sources":["../../../src/clustering/hierarchical-legacy.ts"],"names":[],"mappings":"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"}
@@ -1,47 +1,15 @@
1
1
  /**
2
2
  * Hierarchical Clustering Algorithm
3
3
  *
4
- * Builds a hierarchy of clusters through agglomeration (bottom-up)
5
- * or division (top-down). Useful for understanding multi-scale
6
- * structure in graphs.
4
+ * Builds a hierarchy of clusters through agglomeration (bottom-up). `hierarchicalClustering`
5
+ * delegates to `indexed.hierarchicalClustering` over an unweighted snapshot of the graph (hop
6
+ * distances never read a weight) and rebuilds the legacy dendrogram from its merges; the result
7
+ * equals the pre-migration implementation in `hierarchical-legacy.ts` exactly.
7
8
  */
8
9
  import type { Graph } from "../core/graph.js";
9
- export interface ClusterNode<T> {
10
- id: string;
11
- members: Set<T>;
12
- left?: ClusterNode<T> | undefined;
13
- right?: ClusterNode<T> | undefined;
14
- distance: number;
15
- height: number;
16
- trees?: ClusterNode<T>[] | undefined;
17
- }
18
- export interface HierarchicalClusteringResult<T> {
19
- root: ClusterNode<T>;
20
- dendrogram: ClusterNode<T>[];
21
- clusters: Map<number, Set<T>[]>;
22
- }
23
- export type LinkageMethod = "single" | "complete" | "average" | "ward";
24
- /**
25
- * Cut dendrogram at specific height to get clusters
26
- * @param root - Root node of the dendrogram
27
- * @param height - Height at which to cut the dendrogram
28
- * @returns Array of sets representing clusters at the specified height
29
- */
30
- export declare function cutDendrogram<T>(root: ClusterNode<T>, height: number): Set<T>[];
31
- /**
32
- * Cut dendrogram to get exactly k clusters
33
- * @param root - Root node of the dendrogram
34
- * @param k - Target number of clusters
35
- * @returns Array of sets representing exactly k clusters
36
- */
37
- export declare function cutDendrogramKClusters<T>(root: ClusterNode<T>, k: number): Set<T>[];
38
- /**
39
- * Compute modularity-based hierarchical clustering
40
- * Uses modularity gain to decide merges
41
- * @param graph - The input graph to cluster
42
- * @returns Hierarchical clustering result with dendrogram and cluster assignments
43
- */
44
- export declare function modularityHierarchicalClustering(graph: Graph): HierarchicalClusteringResult<string>;
10
+ import { type HierarchicalClusteringResult, type LinkageMethod } from "./hierarchical-legacy.js";
11
+ export type { ClusterNode, HierarchicalClusteringResult, LinkageMethod } from "./hierarchical-legacy.js";
12
+ export { cutDendrogram, cutDendrogramKClusters, modularityHierarchicalClustering } from "./hierarchical-legacy.js";
45
13
  /**
46
14
  * Agglomerative hierarchical clustering
47
15
  * Builds clusters bottom-up by merging closest pairs
@@ -1 +1 @@
1
- {"version":3,"file":"hierarchical.d.ts","sourceRoot":"","sources":["../../../src/clustering/hierarchical.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAqC9C,MAAM,WAAW,WAAW,CAAC,CAAC;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;IAChB,IAAI,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;IAClC,KAAK,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IAEf,KAAK,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,GAAG,SAAS,CAAC;CACxC;AAED,MAAM,WAAW,4BAA4B,CAAC,CAAC;IAC3C,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;IACrB,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7B,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;CACnC;AAED,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,GAAG,MAAM,CAAC;AA0QvE;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CA0B/E;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CA2BnF;AAED;;;;;GAKG;AACH,wBAAgB,gCAAgC,CAAC,KAAK,EAAE,KAAK,GAAG,4BAA4B,CAAC,MAAM,CAAC,CAgInG;AAED;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CAClC,KAAK,EAAE,KAAK,EACZ,OAAO,GAAE,aAAwB,GAClC,4BAA4B,CAAC,MAAM,CAAC,CAItC"}
1
+ {"version":3,"file":"hierarchical.d.ts","sourceRoot":"","sources":["../../../src/clustering/hierarchical.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAG9C,OAAO,EAIH,KAAK,4BAA4B,EACjC,KAAK,aAAa,EACrB,MAAM,0BAA0B,CAAC;AAElC,YAAY,EAAE,WAAW,EAAE,4BAA4B,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzG,OAAO,EAAE,aAAa,EAAE,sBAAsB,EAAE,gCAAgC,EAAE,MAAM,0BAA0B,CAAC;AAInH;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CAClC,KAAK,EAAE,KAAK,EACZ,OAAO,GAAE,aAAwB,GAClC,4BAA4B,CAAC,MAAM,CAAC,CAwDtC"}