@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
@@ -7,37 +7,30 @@
7
7
  * Reference: Traag, V.A., Waltman, L. & van Eck, N.J. (2019)
8
8
  * "From Louvain to Leiden: guaranteeing well-connected communities"
9
9
  */
10
+ import { graphToMap } from "../../utils/graph-converters.js";
11
+ import { SeededRandom, shuffle } from "../../utils/math-utilities.js";
10
12
  /**
11
- * Leiden algorithm for community detection
13
+ * Internal implementation of Leiden algorithm for community detection
12
14
  * Improves upon Louvain by ensuring well-connected communities
13
- *
14
- * @param graph - Undirected weighted graph
15
- * @param options - Algorithm options
16
- * @returns Community assignments and modularity
17
- *
18
- * Time Complexity: O(m) per iteration, typically O(m log m) total
19
- * Space Complexity: O(n + m)
20
15
  */
21
- export function leiden(graph, options = {}) {
16
+ function leidenImpl(inputGraph, options = {}) {
22
17
  const { resolution = 1.0, randomSeed = 42, maxIterations = 100, threshold = 1e-7, } = options;
23
18
  // Handle empty graph
24
- if (graph.size === 0) {
19
+ if (inputGraph.size === 0) {
25
20
  return {
26
21
  communities: new Map(),
27
22
  modularity: 0,
28
23
  iterations: 0,
29
24
  };
30
25
  }
26
+ // Use a mutable variable for the current graph state
27
+ let currentGraph = inputGraph;
31
28
  // Initialize random number generator
32
- let seed = randomSeed;
33
- const random = () => {
34
- seed = ((seed * 1664525) + 1013904223) % 2147483647;
35
- return seed / 2147483647;
36
- };
29
+ const random = SeededRandom.createGenerator(randomSeed);
37
30
  // Calculate total weight
38
31
  let totalWeight = 0;
39
32
  const degrees = new Map();
40
- for (const [node, neighbors] of graph) {
33
+ for (const [node, neighbors] of currentGraph) {
41
34
  let degree = 0;
42
35
  for (const weight of neighbors.values()) {
43
36
  degree += weight;
@@ -48,9 +41,9 @@ export function leiden(graph, options = {}) {
48
41
  totalWeight /= 2; // Each edge counted twice
49
42
  // Initialize communities - each node in its own community
50
43
  const communities = new Map();
51
- const nodes = Array.from(graph.keys());
44
+ const nodes = Array.from(currentGraph.keys());
52
45
  nodes.forEach((node, i) => communities.set(node, i));
53
- let modularity = calculateModularity(graph, communities, degrees, totalWeight, resolution);
46
+ let modularity = calculateModularity(currentGraph, communities, degrees, totalWeight, resolution);
54
47
  let bestModularity = modularity;
55
48
  let bestCommunities = new Map(communities);
56
49
  let iterations = 0;
@@ -66,7 +59,7 @@ export function leiden(graph, options = {}) {
66
59
  if (currentCommunity === undefined) {
67
60
  continue;
68
61
  }
69
- const neighborCommunities = getNeighborCommunities(node, graph, communities);
62
+ const neighborCommunities = getNeighborCommunities(node, currentGraph, communities);
70
63
  let bestCommunity = currentCommunity;
71
64
  let bestGain = 0;
72
65
  // Try moving to each neighbor community
@@ -74,7 +67,7 @@ export function leiden(graph, options = {}) {
74
67
  if (community === currentCommunity) {
75
68
  continue;
76
69
  }
77
- const gain = calculateModularityGain(node, community, graph, communities, degrees, totalWeight, resolution);
70
+ const gain = calculateModularityGain(node, community, currentGraph, communities, degrees, totalWeight, resolution);
78
71
  if (gain > bestGain) {
79
72
  bestGain = gain;
80
73
  bestCommunity = community;
@@ -89,15 +82,15 @@ export function leiden(graph, options = {}) {
89
82
  }
90
83
  // Phase 2: Refinement (Leiden improvement over Louvain)
91
84
  // Create aggregate network based on current partition
92
- createAggregateNetwork(graph, communities);
85
+ createAggregateNetwork(currentGraph, communities);
93
86
  // Refine partition using aggregate network
94
- const subsetPartition = refinePartition(graph, communities);
87
+ const subsetPartition = refinePartition(currentGraph, communities);
95
88
  // Apply refined partition
96
89
  for (const [node, newCommunity] of subsetPartition) {
97
90
  communities.set(node, newCommunity);
98
91
  }
99
92
  // Recalculate modularity
100
- modularity = calculateModularity(graph, communities, degrees, totalWeight, resolution);
93
+ modularity = calculateModularity(currentGraph, communities, degrees, totalWeight, resolution);
101
94
  // Check if we've improved
102
95
  if (modularity > bestModularity + threshold) {
103
96
  bestModularity = modularity;
@@ -108,16 +101,16 @@ export function leiden(graph, options = {}) {
108
101
  break;
109
102
  }
110
103
  // Phase 3: Aggregate network (create super-nodes)
111
- const aggregated = aggregateCommunities(graph, communities);
112
- if (aggregated.graph.size === graph.size) {
104
+ const aggregated = aggregateCommunities(currentGraph, communities);
105
+ if (aggregated.graph.size === currentGraph.size) {
113
106
  break;
114
107
  } // No aggregation possible
115
108
  // Continue with aggregated network
116
- const { graph: newGraph } = aggregated;
117
- graph = newGraph;
109
+ const { graph: aggregatedGraph } = aggregated;
110
+ currentGraph = aggregatedGraph;
118
111
  communities.clear();
119
112
  let communityId = 0;
120
- for (const node of graph.keys()) {
113
+ for (const node of currentGraph.keys()) {
121
114
  communities.set(node, communityId++);
122
115
  }
123
116
  }
@@ -418,17 +411,19 @@ function aggregateCommunities(graph, communities) {
418
411
  return { graph: aggregated, mapping };
419
412
  }
420
413
  /**
421
- * Fisher-Yates shuffle
414
+ * Leiden algorithm for community detection
415
+ * Improves upon Louvain by ensuring well-connected communities
416
+ *
417
+ * @param graph - Undirected weighted graph - accepts Graph class or Map representation
418
+ * @param options - Algorithm options
419
+ * @returns Community assignments and modularity
420
+ *
421
+ * Time Complexity: O(m) per iteration, typically O(m log m) total
422
+ * Space Complexity: O(n + m)
422
423
  */
423
- function shuffle(array, random) {
424
- for (let i = array.length - 1; i > 0; i--) {
425
- const j = Math.floor(random() * (i + 1));
426
- const temp = array[i];
427
- const swapItem = array[j];
428
- if (temp !== undefined && swapItem !== undefined) {
429
- array[i] = swapItem;
430
- array[j] = temp;
431
- }
432
- }
424
+ export function leiden(graph, options = {}) {
425
+ // Convert Graph to Map representation
426
+ const graphMap = graphToMap(graph);
427
+ return leidenImpl(graphMap, options);
433
428
  }
434
429
  //# sourceMappingURL=leiden.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"leiden.js","sourceRoot":"","sources":["../../../../src/algorithms/community/leiden.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"leiden.js","sourceRoot":"","sources":["../../../../src/algorithms/community/leiden.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAC,UAAU,EAAC,MAAM,iCAAiC,CAAC;AAC3D,OAAO,EAAC,YAAY,EAAE,OAAO,EAAC,MAAM,+BAA+B,CAAC;AAepE;;;GAGG;AACH,SAAS,UAAU,CACf,UAA4C,EAC5C,UAAyB,EAAE;IAE3B,MAAM,EACF,UAAU,GAAG,GAAG,EAChB,UAAU,GAAG,EAAE,EACf,aAAa,GAAG,GAAG,EACnB,SAAS,GAAG,IAAI,GACnB,GAAG,OAAO,CAAC;IAEZ,qBAAqB;IACrB,IAAI,UAAU,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO;YACH,WAAW,EAAE,IAAI,GAAG,EAAE;YACtB,UAAU,EAAE,CAAC;YACb,UAAU,EAAE,CAAC;SAChB,CAAC;IACN,CAAC;IAED,qDAAqD;IACrD,IAAI,YAAY,GAAG,UAAU,CAAC;IAE9B,qCAAqC;IACrC,MAAM,MAAM,GAAG,YAAY,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;IAExD,yBAAyB;IACzB,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;IAE1C,KAAK,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,YAAY,EAAE,CAAC;QAC3C,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,KAAK,MAAM,MAAM,IAAI,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC;YACtC,MAAM,IAAI,MAAM,CAAC;YACjB,WAAW,IAAI,MAAM,CAAC;QAC1B,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC9B,CAAC;IACD,WAAW,IAAI,CAAC,CAAC,CAAC,0BAA0B;IAE5C,0DAA0D;IAC1D,MAAM,WAAW,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC9C,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC;IAC9C,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAErD,IAAI,UAAU,GAAG,mBAAmB,CAAC,YAAY,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC;IAClG,IAAI,cAAc,GAAG,UAAU,CAAC;IAChC,IAAI,eAAe,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,CAAC;IAC3C,IAAI,UAAU,GAAG,CAAC,CAAC;IAEnB,mBAAmB;IACnB,OAAO,UAAU,GAAG,aAAa,EAAE,CAAC;QAChC,UAAU,EAAE,CAAC;QACb,IAAI,QAAQ,GAAG,KAAK,CAAC;QAErB,wCAAwC;QACxC,MAAM,SAAS,GAAG,CAAC,GAAI,KAAK,CAAC,CAAC;QAC9B,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAE3B,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;YAC3B,MAAM,gBAAgB,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAC/C,IAAI,gBAAgB,KAAK,SAAS,EAAE,CAAC;gBACjC,SAAS;YACb,CAAC;YAED,MAAM,mBAAmB,GAAG,sBAAsB,CAAC,IAAI,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC;YAEpF,IAAI,aAAa,GAAG,gBAAgB,CAAC;YACrC,IAAI,QAAQ,GAAG,CAAC,CAAC;YAEjB,wCAAwC;YACxC,KAAK,MAAM,CAAC,SAAS,CAAC,IAAI,mBAAmB,EAAE,CAAC;gBAC5C,IAAI,SAAS,KAAK,gBAAgB,EAAE,CAAC;oBACjC,SAAS;gBACb,CAAC;gBAED,MAAM,IAAI,GAAG,uBAAuB,CAChC,IAAI,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,CAC/E,CAAC;gBAEF,IAAI,IAAI,GAAG,QAAQ,EAAE,CAAC;oBAClB,QAAQ,GAAG,IAAI,CAAC;oBAChB,aAAa,GAAG,SAAS,CAAC;gBAC9B,CAAC;YACL,CAAC;YAED,0BAA0B;YAC1B,IAAI,aAAa,KAAK,gBAAgB,EAAE,CAAC;gBACrC,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;gBACrC,UAAU,IAAI,QAAQ,CAAC;gBACvB,QAAQ,GAAG,IAAI,CAAC;YACpB,CAAC;QACL,CAAC;QAED,wDAAwD;QACxD,sDAAsD;QACtD,sBAAsB,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;QAElD,2CAA2C;QAC3C,MAAM,eAAe,GAAG,eAAe,CACnC,YAAY,EAAE,WAAW,CAC5B,CAAC;QAEF,0BAA0B;QAC1B,KAAK,MAAM,CAAC,IAAI,EAAE,YAAY,CAAC,IAAI,eAAe,EAAE,CAAC;YACjD,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;QACxC,CAAC;QAED,yBAAyB;QACzB,UAAU,GAAG,mBAAmB,CAAC,YAAY,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC;QAE9F,0BAA0B;QAC1B,IAAI,UAAU,GAAG,cAAc,GAAG,SAAS,EAAE,CAAC;YAC1C,cAAc,GAAG,UAAU,CAAC;YAC5B,eAAe,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,CAAC;YACvC,QAAQ,GAAG,IAAI,CAAC;QACpB,CAAC;QAED,IAAI,CAAC,QAAQ,EAAE,CAAC;YACZ,MAAM;QACV,CAAC;QAED,kDAAkD;QAClD,MAAM,UAAU,GAAG,oBAAoB,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;QACnE,IAAI,UAAU,CAAC,KAAK,CAAC,IAAI,KAAK,YAAY,CAAC,IAAI,EAAE,CAAC;YAC9C,MAAM;QACV,CAAC,CAAC,0BAA0B;QAE5B,mCAAmC;QACnC,MAAM,EAAC,KAAK,EAAE,eAAe,EAAC,GAAG,UAAU,CAAC;QAC5C,YAAY,GAAG,eAAe,CAAC;QAC/B,WAAW,CAAC,KAAK,EAAE,CAAC;QACpB,IAAI,WAAW,GAAG,CAAC,CAAC;QACpB,KAAK,MAAM,IAAI,IAAI,YAAY,CAAC,IAAI,EAAE,EAAE,CAAC;YACrC,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;QACzC,CAAC;IACL,CAAC;IAED,6BAA6B;IAC7B,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAkB,CAAC;IACnD,KAAK,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,eAAe,EAAE,CAAC;QAC9C,gBAAgB,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAC1C,CAAC;IAED,qCAAqC;IACrC,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAkB,CAAC;IACpD,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,MAAM,SAAS,IAAI,IAAI,GAAG,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC;QACzD,iBAAiB,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;IAC9C,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,gBAAgB,EAAE,CAAC;QAC/C,MAAM,cAAc,GAAG,iBAAiB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACxD,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;YAC/B,gBAAgB,CAAC,GAAG,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;QAC/C,CAAC;IACL,CAAC;IAED,OAAO;QACH,WAAW,EAAE,gBAAgB;QAC7B,UAAU,EAAE,cAAc;QAC1B,UAAU;KACb,CAAC;AACN,CAAC;AAED;;GAEG;AACH,SAAS,mBAAmB,CACxB,KAAuC,EACvC,WAAgC,EAChC,OAA4B,EAC5B,WAAmB,EACnB,UAAkB;IAElB,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAkB,CAAC;IAEnD,gDAAgD;IAChD,KAAK,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,KAAK,EAAE,CAAC;QACpC,MAAM,aAAa,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;YAC9B,SAAS;QACb,CAAC;QAED,KAAK,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;YACzC,MAAM,iBAAiB,GAAG,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACpD,IAAI,iBAAiB,KAAK,SAAS,EAAE,CAAC;gBAClC,SAAS;YACb,CAAC;YAED,IAAI,aAAa,KAAK,iBAAiB,EAAE,CAAC;gBACtC,UAAU,IAAI,MAAM,CAAC;YACzB,CAAC;QACL,CAAC;QAED,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACjC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACvB,gBAAgB,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC,gBAAgB,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;QAC7F,CAAC;IACL,CAAC;IAED,oCAAoC;IACpC,IAAI,WAAW,KAAK,CAAC,EAAE,CAAC;QACpB,OAAO,CAAC,CAAC;IACb,CAAC;IAED,iCAAiC;IACjC,UAAU,IAAI,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC;IAEhC,0BAA0B;IAC1B,KAAK,MAAM,MAAM,IAAI,gBAAgB,CAAC,MAAM,EAAE,EAAE,CAAC;QAC7C,UAAU,IAAI,UAAU,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACnE,CAAC;IAED,OAAO,UAAU,CAAC;AACtB,CAAC;AAED;;GAEG;AACH,SAAS,sBAAsB,CAC3B,IAAY,EACZ,KAAuC,EACvC,WAAgC;IAEhC,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAAkB,CAAC;IACtD,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAElC,IAAI,SAAS,EAAE,CAAC;QACZ,KAAK,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;YACzC,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC5C,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;gBAC1B,mBAAmB,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,mBAAmB,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;YAC3F,CAAC;QACL,CAAC;IACL,CAAC;IAED,OAAO,mBAAmB,CAAC;AAC/B,CAAC;AAED;;GAEG;AACH,SAAS,uBAAuB,CAC5B,IAAY,EACZ,eAAuB,EACvB,KAAuC,EACvC,WAAgC,EAChC,OAA4B,EAC5B,WAAmB,EACnB,UAAkB;IAElB,MAAM,gBAAgB,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC/C,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACrC,IAAI,gBAAgB,KAAK,SAAS,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAC7D,OAAO,CAAC,CAAC;IACb,CAAC;IAED,gDAAgD;IAChD,IAAI,cAAc,GAAG,CAAC,CAAC;IACvB,IAAI,eAAe,GAAG,CAAC,CAAC;IAExB,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAClC,IAAI,SAAS,EAAE,CAAC;QACZ,KAAK,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;YACzC,MAAM,iBAAiB,GAAG,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACpD,IAAI,iBAAiB,KAAK,SAAS,EAAE,CAAC;gBAClC,SAAS;YACb,CAAC;YAED,IAAI,iBAAiB,KAAK,eAAe,EAAE,CAAC;gBACxC,cAAc,IAAI,MAAM,CAAC;YAC7B,CAAC;iBAAM,IAAI,iBAAiB,KAAK,gBAAgB,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;gBACrE,eAAe,IAAI,MAAM,CAAC;YAC9B,CAAC;QACL,CAAC;IACL,CAAC;IAED,8BAA8B;IAC9B,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,IAAI,aAAa,GAAG,CAAC,CAAC;IAEtB,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,WAAW,EAAE,CAAC;QAC/B,IAAI,CAAC,KAAK,eAAe,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;YACtC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC3B,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;gBACpB,YAAY,IAAI,GAAG,CAAC;YACxB,CAAC;QACL,CAAC;aAAM,IAAI,CAAC,KAAK,gBAAgB,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;YAC9C,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC3B,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;gBACpB,aAAa,IAAI,GAAG,CAAC;YACzB,CAAC;QACL,CAAC;IACL,CAAC;IAED,8BAA8B;IAC9B,MAAM,EAAE,GAAG,CAAC,GAAG,WAAW,CAAC;IAC3B,MAAM,IAAI,GAAG,CAAC,CAAC,cAAc,GAAG,eAAe,CAAC,GAAG,WAAW,CAAC;QAC/D,CAAC,UAAU,GAAG,UAAU,GAAG,CAAC,YAAY,GAAG,aAAa,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;IAEvE,OAAO,IAAI,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,SAAS,sBAAsB,CAC3B,KAAuC,EACvC,WAAgC;IAKhC,MAAM,cAAc,GAAG,IAAI,GAAG,EAA+B,CAAC;IAC9D,MAAM,WAAW,GAAG,IAAI,GAAG,EAAkB,CAAC;IAE9C,2CAA2C;IAC3C,KAAK,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,WAAW,EAAE,CAAC;QAC1C,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACjC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YACjC,cAAc,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;QAC7C,CAAC;IACL,CAAC;IAED,kBAAkB;IAClB,KAAK,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,KAAK,EAAE,CAAC;QACpC,MAAM,eAAe,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC9C,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;YAChC,SAAS;QACb,CAAC;QAED,KAAK,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;YACzC,MAAM,eAAe,GAAG,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAClD,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;gBAChC,SAAS;YACb,CAAC;YAED,MAAM,eAAe,GAAG,cAAc,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;YAC5D,IAAI,eAAe,EAAE,CAAC;gBAClB,MAAM,OAAO,GAAG,eAAe,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;gBAC1D,eAAe,CAAC,GAAG,CAAC,eAAe,EAAE,OAAO,GAAG,MAAM,CAAC,CAAC;YAC3D,CAAC;QACL,CAAC;IACL,CAAC;IAED,OAAO,EAAC,cAAc,EAAE,WAAW,EAAC,CAAC;AACzC,CAAC;AAED;;;GAGG;AACH,SAAS,eAAe,CACpB,aAA+C,EAC/C,WAAgC;IAEhC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;IAE1C,kDAAkD;IAClD,MAAM,cAAc,GAAG,IAAI,GAAG,EAAoB,CAAC;IACnD,KAAK,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,WAAW,EAAE,CAAC;QAC1C,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YACjC,cAAc,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QACtC,CAAC;QAED,MAAM,KAAK,GAAG,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC5C,IAAI,KAAK,EAAE,CAAC;YACR,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrB,CAAC;IACL,CAAC;IAED,IAAI,cAAc,GAAG,CAAC,CAAC;IAEvB,KAAK,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,cAAc,EAAE,CAAC;QAC9C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACrB,wBAAwB;YACxB,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YAC5B,IAAI,UAAU,EAAE,CAAC;gBACb,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,cAAc,EAAE,CAAC,CAAC;YAC9C,CAAC;YAED,SAAS;QACb,CAAC;QAED,sCAAsC;QACtC,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAuB,CAAC;QAChD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACvB,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;YAC9B,MAAM,SAAS,GAAG,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAC1C,IAAI,SAAS,EAAE,CAAC;gBACZ,KAAK,MAAM,CAAC,QAAQ,CAAC,IAAI,SAAS,EAAE,CAAC;oBACjC,IAAI,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,SAAS,EAAE,CAAC;wBAC1C,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;wBACnC,IAAI,OAAO,EAAE,CAAC;4BACV,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;wBAC1B,CAAC;oBACL,CAAC;gBACL,CAAC;YACL,CAAC;QACL,CAAC;QAED,6CAA6C;QAC7C,MAAM,UAAU,GAAG,uBAAuB,CAAC,QAAQ,CAAC,CAAC;QAErD,yCAAyC;QACzC,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACjC,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;gBAC3B,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;YACtC,CAAC;YACD,cAAc,EAAE,CAAC;QACrB,CAAC;IACL,CAAC;IAED,OAAO,OAAO,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,SAAS,uBAAuB,CAAC,KAA+B;IAC5D,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,MAAM,UAAU,GAAkB,EAAE,CAAC;IAErC,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;QAC9B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACrB,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;YACpC,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC;YAErB,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACtB,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;gBAC9B,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;oBAChD,SAAS;gBACb,CAAC;gBAED,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBACrB,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBAEvB,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBACrC,IAAI,SAAS,EAAE,CAAC;oBACZ,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;wBAC/B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;4BACzB,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;wBACzB,CAAC;oBACL,CAAC;gBACL,CAAC;YACL,CAAC;YAED,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC/B,CAAC;IACL,CAAC;IAED,OAAO,UAAU,CAAC;AACtB,CAAC;AAED;;GAEG;AACH,SAAS,oBAAoB,CACzB,KAAuC,EACvC,WAAgC;IAKhC,MAAM,UAAU,GAAG,IAAI,GAAG,EAA+B,CAAC;IAC1D,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;IAE1C,qBAAqB;IACrB,MAAM,cAAc,GAAG,IAAI,GAAG,EAAkB,CAAC;IACjD,KAAK,MAAM,SAAS,IAAI,IAAI,GAAG,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC;QACpD,MAAM,SAAS,GAAG,SAAS,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;QAC/C,cAAc,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QACzC,UAAU,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;IACzC,CAAC;IAED,oCAAoC;IACpC,KAAK,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,WAAW,EAAE,CAAC;QAC1C,MAAM,SAAS,GAAG,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAChD,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC1B,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACjC,CAAC;IACL,CAAC;IAED,kBAAkB;IAClB,KAAK,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,KAAK,EAAE,CAAC;QACpC,MAAM,eAAe,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC9C,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;YAChC,SAAS;QACb,CAAC;QAED,MAAM,WAAW,GAAG,cAAc,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;QACxD,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC5B,SAAS;QACb,CAAC;QAED,KAAK,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;YACzC,MAAM,eAAe,GAAG,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAClD,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;gBAChC,SAAS;YACb,CAAC;YAED,MAAM,WAAW,GAAG,cAAc,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;YACxD,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;gBAC5B,SAAS;YACb,CAAC;YAED,IAAI,WAAW,KAAK,WAAW,EAAE,CAAC;gBAC9B,MAAM,eAAe,GAAG,UAAU,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;gBACpD,IAAI,eAAe,EAAE,CAAC;oBAClB,MAAM,OAAO,GAAG,eAAe,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;oBACtD,eAAe,CAAC,GAAG,CAAC,WAAW,EAAE,OAAO,GAAG,MAAM,CAAC,CAAC;gBACvD,CAAC;YACL,CAAC;QACL,CAAC;IACL,CAAC;IAED,OAAO,EAAC,KAAK,EAAE,UAAU,EAAE,OAAO,EAAC,CAAC;AACxC,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,MAAM,CAClB,KAAY,EACZ,UAAyB,EAAE;IAE3B,sCAAsC;IACtC,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IACnC,OAAO,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AACzC,CAAC"}
@@ -0,0 +1,112 @@
1
+ import type { Graph } from "../../core/graph.js";
2
+ import type { CommunityResult } from "../../types/index.js";
3
+ /**
4
+ * Optimized Louvain community detection algorithm with early pruning and threshold cycling
5
+ *
6
+ * Key optimizations:
7
+ * - Leaf node pruning: Skip nodes with degree 1
8
+ * - Importance ordering: Process high-impact nodes first
9
+ * - Threshold cycling: Adaptive convergence thresholds
10
+ * - Early termination: Stop when changes become insignificant
11
+ *
12
+ * Expected speedup: 2-5x on large graphs with many leaf nodes
13
+ */
14
+ export interface OptimizedLouvainOptions {
15
+ /**
16
+ * Resolution parameter (default: 1.0)
17
+ */
18
+ resolution?: number;
19
+ /**
20
+ * Maximum iterations per level (default: 100)
21
+ */
22
+ maxIterations?: number;
23
+ /**
24
+ * Convergence tolerance (default: 1e-6)
25
+ */
26
+ tolerance?: number;
27
+ /**
28
+ * Enable leaf node pruning (default: true)
29
+ */
30
+ pruneLeaves?: boolean;
31
+ /**
32
+ * Enable importance-based node ordering (default: true)
33
+ */
34
+ importanceOrdering?: boolean;
35
+ /**
36
+ * Base pruning threshold (default: 0.01)
37
+ */
38
+ pruningThreshold?: number;
39
+ /**
40
+ * Enable adaptive threshold cycling (default: true)
41
+ */
42
+ thresholdCycling?: boolean;
43
+ }
44
+ interface PruningStats {
45
+ leafNodesPruned: number;
46
+ lowDegreeNodesPruned: number;
47
+ stableNodesPruned: number;
48
+ }
49
+ export declare class OptimizedLouvain {
50
+ private graph;
51
+ private communities;
52
+ private communityWeights;
53
+ private nodeWeights;
54
+ private nodeDegrees;
55
+ private totalWeight;
56
+ private pruningStats;
57
+ constructor(graph: Graph);
58
+ /**
59
+ * Run optimized Louvain algorithm
60
+ */
61
+ detectCommunities(options?: OptimizedLouvainOptions): CommunityResult;
62
+ /**
63
+ * Initialize data structures
64
+ */
65
+ private initialize;
66
+ /**
67
+ * Get nodes ordered by importance (degree * log(weight))
68
+ */
69
+ private getNodesInImportanceOrder;
70
+ /**
71
+ * Perform local moving phase with optimizations
72
+ */
73
+ private performLocalMoving;
74
+ /**
75
+ * Check if node is a leaf (degree 1)
76
+ */
77
+ private isLeafNode;
78
+ /**
79
+ * Get adaptive threshold that decreases with iterations
80
+ */
81
+ private getAdaptiveThreshold;
82
+ /**
83
+ * Calculate modularity gain from moving a node to a community
84
+ */
85
+ private calculateModularityGain;
86
+ /**
87
+ * Remove node from community (for gain calculation)
88
+ */
89
+ private removeNodeFromCommunity;
90
+ /**
91
+ * Add node to community
92
+ */
93
+ private addNodeToCommunity;
94
+ /**
95
+ * Get neighboring communities of a node
96
+ */
97
+ private getNeighborCommunities;
98
+ /**
99
+ * Calculate total modularity
100
+ */
101
+ private calculateModularity;
102
+ /**
103
+ * Get pruning statistics
104
+ */
105
+ getPruningStats(): PruningStats;
106
+ }
107
+ /**
108
+ * Optimized Louvain algorithm with automatic optimization selection
109
+ */
110
+ export declare function louvainOptimized(graph: Graph, options?: OptimizedLouvainOptions): CommunityResult;
111
+ export {};
112
+ //# sourceMappingURL=louvain-optimized.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"louvain-optimized.d.ts","sourceRoot":"","sources":["../../../../src/algorithms/community/louvain-optimized.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,KAAK,EAAC,MAAM,qBAAqB,CAAC;AAC/C,OAAO,KAAK,EAAC,eAAe,EAAS,MAAM,sBAAsB,CAAC;AAElE;;;;;;;;;;GAUG;AAEH,MAAM,WAAW,uBAAuB;IACpC;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;OAEG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;OAEG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,UAAU,YAAY;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,iBAAiB,EAAE,MAAM,CAAC;CAC7B;AAED,qBAAa,gBAAgB;IACzB,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,WAAW,CAAsB;IACzC,OAAO,CAAC,gBAAgB,CAAsB;IAC9C,OAAO,CAAC,WAAW,CAAsB;IACzC,OAAO,CAAC,WAAW,CAAsB;IACzC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,YAAY,CAAe;gBAEvB,KAAK,EAAE,KAAK;IAcxB;;OAEG;IACI,iBAAiB,CAAC,OAAO,GAAE,uBAA4B,GAAG,eAAe;IAqEhF;;OAEG;IACH,OAAO,CAAC,UAAU;IA2ClB;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAiBjC;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAoE1B;;OAEG;IACH,OAAO,CAAC,UAAU;IAKlB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAM5B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAoC/B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAM/B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAM1B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAuB9B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAwC3B;;OAEG;IACI,eAAe,IAAI,YAAY;CAGzC;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC5B,KAAK,EAAE,KAAK,EACZ,OAAO,GAAE,uBAA4B,GACtC,eAAe,CAGjB"}
@@ -0,0 +1,303 @@
1
+ export class OptimizedLouvain {
2
+ constructor(graph) {
3
+ this.graph = graph;
4
+ this.communities = new Map();
5
+ this.communityWeights = new Map();
6
+ this.nodeWeights = new Map();
7
+ this.nodeDegrees = new Map();
8
+ this.totalWeight = 0;
9
+ this.pruningStats = {
10
+ leafNodesPruned: 0,
11
+ lowDegreeNodesPruned: 0,
12
+ stableNodesPruned: 0,
13
+ };
14
+ }
15
+ /**
16
+ * Run optimized Louvain algorithm
17
+ */
18
+ detectCommunities(options = {}) {
19
+ const { resolution = 1.0, maxIterations = 100, tolerance = 1e-6, pruneLeaves = true, importanceOrdering = true, pruningThreshold = 0.01, thresholdCycling = true, } = options;
20
+ // Initialize
21
+ this.initialize();
22
+ let modularity = this.calculateModularity(resolution);
23
+ let iteration = 0;
24
+ let improved = true;
25
+ while (iteration < maxIterations && improved) {
26
+ // Get nodes in optimal processing order
27
+ const orderedNodes = importanceOrdering ?
28
+ this.getNodesInImportanceOrder() :
29
+ Array.from(this.graph.nodes()).map((n) => n.id);
30
+ // Apply adaptive threshold
31
+ const threshold = thresholdCycling ?
32
+ this.getAdaptiveThreshold(iteration, pruningThreshold) :
33
+ 0;
34
+ // Perform local optimization
35
+ improved = this.performLocalMoving(orderedNodes, {
36
+ pruneLeaves,
37
+ threshold,
38
+ resolution,
39
+ });
40
+ if (improved) {
41
+ const newModularity = this.calculateModularity(resolution);
42
+ // Check convergence
43
+ if (Math.abs(newModularity - modularity) < tolerance) {
44
+ break;
45
+ }
46
+ modularity = newModularity;
47
+ iteration++;
48
+ }
49
+ }
50
+ // Convert community assignments to result format
51
+ const communityGroups = new Map();
52
+ for (const [nodeId, community] of this.communities) {
53
+ if (!communityGroups.has(community)) {
54
+ communityGroups.set(community, []);
55
+ }
56
+ const group = communityGroups.get(community);
57
+ if (group) {
58
+ group.push(nodeId);
59
+ }
60
+ }
61
+ return {
62
+ communities: Array.from(communityGroups.values()),
63
+ modularity,
64
+ iterations: iteration,
65
+ };
66
+ }
67
+ /**
68
+ * Initialize data structures
69
+ */
70
+ initialize() {
71
+ let communityId = 0;
72
+ // Initialize each node in its own community
73
+ for (const node of this.graph.nodes()) {
74
+ this.communities.set(node.id, communityId);
75
+ // Calculate node weight and degree
76
+ let nodeWeight = 0;
77
+ let degree = 0;
78
+ for (const neighbor of Array.from(this.graph.neighbors(node.id))) {
79
+ const edge = this.graph.getEdge(node.id, neighbor);
80
+ const weight = edge?.weight ?? 1;
81
+ nodeWeight += weight;
82
+ degree++;
83
+ }
84
+ // For undirected graphs, also check incoming edges
85
+ if (!this.graph.isDirected) {
86
+ for (const neighbor of Array.from(this.graph.inNeighbors(node.id))) {
87
+ if (!this.graph.hasEdge(node.id, neighbor)) {
88
+ const edge = this.graph.getEdge(neighbor, node.id);
89
+ const weight = edge?.weight ?? 1;
90
+ nodeWeight += weight;
91
+ degree++;
92
+ }
93
+ }
94
+ }
95
+ this.nodeWeights.set(node.id, nodeWeight);
96
+ this.nodeDegrees.set(node.id, degree);
97
+ this.communityWeights.set(communityId, nodeWeight);
98
+ this.totalWeight += nodeWeight;
99
+ communityId++;
100
+ }
101
+ // Total weight is sum of all edge weights
102
+ // For undirected graphs, each edge is counted twice from both endpoints
103
+ this.totalWeight = this.totalWeight / 2;
104
+ }
105
+ /**
106
+ * Get nodes ordered by importance (degree * log(weight))
107
+ */
108
+ getNodesInImportanceOrder() {
109
+ const nodeImportance = new Map();
110
+ for (const [nodeId, degree] of this.nodeDegrees) {
111
+ const weight = this.nodeWeights.get(nodeId) ?? 0;
112
+ // Importance score: combination of degree and weight
113
+ // High-degree nodes and nodes with heavy edges are processed first
114
+ const importance = degree * Math.log(1 + weight);
115
+ nodeImportance.set(nodeId, importance);
116
+ }
117
+ // Sort by importance (descending)
118
+ return Array.from(nodeImportance.entries())
119
+ .sort((a, b) => b[1] - a[1])
120
+ .map(([nodeId]) => nodeId);
121
+ }
122
+ /**
123
+ * Perform local moving phase with optimizations
124
+ */
125
+ performLocalMoving(nodes, options) {
126
+ const { pruneLeaves, threshold, resolution } = options;
127
+ let improvement = false;
128
+ let hasChanged = true;
129
+ while (hasChanged) {
130
+ hasChanged = false;
131
+ for (const nodeId of nodes) {
132
+ // Early pruning: skip leaf nodes
133
+ if (pruneLeaves && this.isLeafNode(nodeId)) {
134
+ this.pruningStats.leafNodesPruned++;
135
+ continue;
136
+ }
137
+ const currentCommunity = this.communities.get(nodeId) ?? 0;
138
+ const neighborCommunities = this.getNeighborCommunities(nodeId);
139
+ // Skip isolated nodes
140
+ if (neighborCommunities.size === 0) {
141
+ continue;
142
+ }
143
+ // Find best community to move to
144
+ let bestCommunity = currentCommunity;
145
+ let bestGain = 0;
146
+ // Remove node from its current community to calculate gains
147
+ this.removeNodeFromCommunity(nodeId, currentCommunity);
148
+ for (const community of neighborCommunities) {
149
+ const gain = this.calculateModularityGain(nodeId, community, resolution);
150
+ // Apply threshold - only move if gain exceeds threshold
151
+ if (gain > bestGain + threshold) {
152
+ bestGain = gain;
153
+ bestCommunity = community;
154
+ }
155
+ }
156
+ // Try staying in current community
157
+ const currentGain = this.calculateModularityGain(nodeId, currentCommunity, resolution);
158
+ if (currentGain > bestGain + threshold) {
159
+ bestGain = currentGain;
160
+ bestCommunity = currentCommunity;
161
+ }
162
+ // Add node to best community
163
+ this.addNodeToCommunity(nodeId, bestCommunity);
164
+ // Track if node moved
165
+ if (bestCommunity !== currentCommunity) {
166
+ hasChanged = true;
167
+ improvement = true;
168
+ }
169
+ }
170
+ }
171
+ return improvement;
172
+ }
173
+ /**
174
+ * Check if node is a leaf (degree 1)
175
+ */
176
+ isLeafNode(nodeId) {
177
+ const degree = this.nodeDegrees.get(nodeId) ?? 0;
178
+ return degree === 1;
179
+ }
180
+ /**
181
+ * Get adaptive threshold that decreases with iterations
182
+ */
183
+ getAdaptiveThreshold(iteration, baseThreshold) {
184
+ // Exponentially decay threshold with iterations
185
+ // This allows coarse movements early and fine-tuning later
186
+ return baseThreshold * Math.pow(0.5, iteration / 10);
187
+ }
188
+ /**
189
+ * Calculate modularity gain from moving a node to a community
190
+ */
191
+ calculateModularityGain(nodeId, targetCommunity, resolution) {
192
+ const nodeWeight = this.nodeWeights.get(nodeId) ?? 0;
193
+ // Sum of weights from node to target community
194
+ let weightToTarget = 0;
195
+ for (const neighbor of Array.from(this.graph.neighbors(nodeId))) {
196
+ if (this.communities.get(neighbor) === targetCommunity) {
197
+ const edge = this.graph.getEdge(nodeId, neighbor);
198
+ weightToTarget += edge?.weight ?? 1;
199
+ }
200
+ }
201
+ // For undirected graphs, also check incoming edges
202
+ if (!this.graph.isDirected) {
203
+ for (const neighbor of Array.from(this.graph.inNeighbors(nodeId))) {
204
+ if (this.communities.get(neighbor) === targetCommunity && !this.graph.hasEdge(nodeId, neighbor)) {
205
+ const edge = this.graph.getEdge(neighbor, nodeId);
206
+ weightToTarget += edge?.weight ?? 1;
207
+ }
208
+ }
209
+ }
210
+ // Weight of target community
211
+ const targetWeight = this.communityWeights.get(targetCommunity) ?? 0;
212
+ // Modularity gain formula
213
+ const gain = (weightToTarget - ((resolution * nodeWeight * targetWeight) / (2 * this.totalWeight))) / this.totalWeight;
214
+ return gain;
215
+ }
216
+ /**
217
+ * Remove node from community (for gain calculation)
218
+ */
219
+ removeNodeFromCommunity(nodeId, community) {
220
+ const nodeWeight = this.nodeWeights.get(nodeId) ?? 0;
221
+ this.communityWeights.set(community, (this.communityWeights.get(community) ?? 0) - nodeWeight);
222
+ this.communities.delete(nodeId);
223
+ }
224
+ /**
225
+ * Add node to community
226
+ */
227
+ addNodeToCommunity(nodeId, community) {
228
+ const nodeWeight = this.nodeWeights.get(nodeId) ?? 0;
229
+ this.communityWeights.set(community, (this.communityWeights.get(community) ?? 0) + nodeWeight);
230
+ this.communities.set(nodeId, community);
231
+ }
232
+ /**
233
+ * Get neighboring communities of a node
234
+ */
235
+ getNeighborCommunities(nodeId) {
236
+ const communities = new Set();
237
+ for (const neighbor of Array.from(this.graph.neighbors(nodeId))) {
238
+ const community = this.communities.get(neighbor);
239
+ if (community !== undefined) {
240
+ communities.add(community);
241
+ }
242
+ }
243
+ // For undirected graphs, also check incoming edges
244
+ if (!this.graph.isDirected) {
245
+ for (const neighbor of Array.from(this.graph.inNeighbors(nodeId))) {
246
+ const community = this.communities.get(neighbor);
247
+ if (community !== undefined) {
248
+ communities.add(community);
249
+ }
250
+ }
251
+ }
252
+ return communities;
253
+ }
254
+ /**
255
+ * Calculate total modularity
256
+ */
257
+ calculateModularity(resolution) {
258
+ if (this.totalWeight === 0) {
259
+ return 0;
260
+ }
261
+ let modularity = 0;
262
+ // Sum over all communities
263
+ const communityInternalWeights = new Map();
264
+ // Calculate internal weights for each community
265
+ for (const node of this.graph.nodes()) {
266
+ const nodeId = node.id;
267
+ const community = this.communities.get(nodeId) ?? 0;
268
+ for (const neighbor of Array.from(this.graph.neighbors(nodeId))) {
269
+ if (this.communities.get(neighbor) === community) {
270
+ const edge = this.graph.getEdge(nodeId, neighbor);
271
+ const weight = edge?.weight ?? 1;
272
+ communityInternalWeights.set(community, (communityInternalWeights.get(community) ?? 0) + weight);
273
+ }
274
+ }
275
+ }
276
+ // Calculate modularity
277
+ for (const [community, internalWeight] of communityInternalWeights) {
278
+ const communityWeight = this.communityWeights.get(community) ?? 0;
279
+ // For undirected graphs, internal weights are counted twice
280
+ const aIn = this.graph.isDirected ? internalWeight : internalWeight / 2;
281
+ const aTotal = communityWeight;
282
+ // Modularity formula: sum of (fraction of edges within community - expected fraction)
283
+ const actualFraction = aIn / this.totalWeight;
284
+ const expectedFraction = resolution * Math.pow(aTotal / (2 * this.totalWeight), 2);
285
+ modularity += actualFraction - expectedFraction;
286
+ }
287
+ return modularity;
288
+ }
289
+ /**
290
+ * Get pruning statistics
291
+ */
292
+ getPruningStats() {
293
+ return { ...this.pruningStats };
294
+ }
295
+ }
296
+ /**
297
+ * Optimized Louvain algorithm with automatic optimization selection
298
+ */
299
+ export function louvainOptimized(graph, options = {}) {
300
+ const optimizer = new OptimizedLouvain(graph);
301
+ return optimizer.detectCommunities(options);
302
+ }
303
+ //# sourceMappingURL=louvain-optimized.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"louvain-optimized.js","sourceRoot":"","sources":["../../../../src/algorithms/community/louvain-optimized.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"louvain.d.ts","sourceRoot":"","sources":["../../../../src/algorithms/community/louvain.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,EAAC,MAAM,qBAAqB,CAAC;AAC1C,OAAO,KAAK,EAAC,eAAe,EAAE,cAAc,EAAS,MAAM,sBAAsB,CAAC;AAElF;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,OAAO,CACnB,KAAK,EAAE,KAAK,EACZ,OAAO,GAAE,cAAmB,GAC7B,eAAe,CAiCjB"}
1
+ {"version":3,"file":"louvain.d.ts","sourceRoot":"","sources":["../../../../src/algorithms/community/louvain.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,EAAC,MAAM,qBAAqB,CAAC;AAC1C,OAAO,KAAK,EAAC,eAAe,EAAE,cAAc,EAAS,MAAM,sBAAsB,CAAC;AASlF;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,OAAO,CACnB,KAAK,EAAE,KAAK,EACZ,OAAO,GAAE,cAAmB,GAC7B,eAAe,CAkDjB"}