graphwise 1.0.0 → 1.1.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 (224) hide show
  1. package/README.md +41 -0
  2. package/dist/expansion/base.d.ts +12 -0
  3. package/dist/expansion/base.d.ts.map +1 -0
  4. package/dist/expansion/base.unit.test.d.ts +2 -0
  5. package/dist/expansion/base.unit.test.d.ts.map +1 -0
  6. package/dist/expansion/dome.d.ts +16 -0
  7. package/dist/expansion/dome.d.ts.map +1 -0
  8. package/dist/expansion/dome.unit.test.d.ts +2 -0
  9. package/dist/expansion/dome.unit.test.d.ts.map +1 -0
  10. package/dist/expansion/edge.d.ts +15 -0
  11. package/dist/expansion/edge.d.ts.map +1 -0
  12. package/dist/expansion/edge.unit.test.d.ts +2 -0
  13. package/dist/expansion/edge.unit.test.d.ts.map +1 -0
  14. package/dist/expansion/hae.d.ts +22 -0
  15. package/dist/expansion/hae.d.ts.map +1 -0
  16. package/dist/expansion/hae.unit.test.d.ts +2 -0
  17. package/dist/expansion/hae.unit.test.d.ts.map +1 -0
  18. package/dist/expansion/index.d.ts +22 -0
  19. package/dist/expansion/index.d.ts.map +1 -0
  20. package/dist/expansion/maze.d.ts +25 -0
  21. package/dist/expansion/maze.d.ts.map +1 -0
  22. package/dist/expansion/maze.unit.test.d.ts +2 -0
  23. package/dist/expansion/maze.unit.test.d.ts.map +1 -0
  24. package/dist/expansion/pipe.d.ts +15 -0
  25. package/dist/expansion/pipe.d.ts.map +1 -0
  26. package/dist/expansion/pipe.unit.test.d.ts +2 -0
  27. package/dist/expansion/pipe.unit.test.d.ts.map +1 -0
  28. package/dist/expansion/reach.d.ts +26 -0
  29. package/dist/expansion/reach.d.ts.map +1 -0
  30. package/dist/expansion/reach.unit.test.d.ts +2 -0
  31. package/dist/expansion/reach.unit.test.d.ts.map +1 -0
  32. package/dist/expansion/sage.d.ts +24 -0
  33. package/dist/expansion/sage.d.ts.map +1 -0
  34. package/dist/expansion/sage.unit.test.d.ts +2 -0
  35. package/dist/expansion/sage.unit.test.d.ts.map +1 -0
  36. package/dist/expansion/types.d.ts +105 -0
  37. package/dist/expansion/types.d.ts.map +1 -0
  38. package/dist/extraction/ego-network.d.ts +32 -0
  39. package/dist/extraction/ego-network.d.ts.map +1 -0
  40. package/dist/extraction/ego-network.unit.test.d.ts +5 -0
  41. package/dist/extraction/ego-network.unit.test.d.ts.map +1 -0
  42. package/dist/extraction/index.d.ts +20 -0
  43. package/dist/extraction/index.d.ts.map +1 -0
  44. package/dist/extraction/induced-subgraph.d.ts +19 -0
  45. package/dist/extraction/induced-subgraph.d.ts.map +1 -0
  46. package/dist/extraction/induced-subgraph.unit.test.d.ts +5 -0
  47. package/dist/extraction/induced-subgraph.unit.test.d.ts.map +1 -0
  48. package/dist/extraction/k-core.d.ts +24 -0
  49. package/dist/extraction/k-core.d.ts.map +1 -0
  50. package/dist/extraction/k-core.unit.test.d.ts +5 -0
  51. package/dist/extraction/k-core.unit.test.d.ts.map +1 -0
  52. package/dist/extraction/motif.d.ts +50 -0
  53. package/dist/extraction/motif.d.ts.map +1 -0
  54. package/dist/extraction/motif.unit.test.d.ts +5 -0
  55. package/dist/extraction/motif.unit.test.d.ts.map +1 -0
  56. package/dist/extraction/node-filter.d.ts +35 -0
  57. package/dist/extraction/node-filter.d.ts.map +1 -0
  58. package/dist/extraction/node-filter.unit.test.d.ts +5 -0
  59. package/dist/extraction/node-filter.unit.test.d.ts.map +1 -0
  60. package/dist/extraction/truss.d.ts +41 -0
  61. package/dist/extraction/truss.d.ts.map +1 -0
  62. package/dist/extraction/truss.unit.test.d.ts +5 -0
  63. package/dist/extraction/truss.unit.test.d.ts.map +1 -0
  64. package/dist/gpu/context.d.ts +118 -0
  65. package/dist/gpu/context.d.ts.map +1 -0
  66. package/dist/gpu/context.unit.test.d.ts +2 -0
  67. package/dist/gpu/context.unit.test.d.ts.map +1 -0
  68. package/dist/gpu/csr.d.ts +97 -0
  69. package/dist/gpu/csr.d.ts.map +1 -0
  70. package/dist/gpu/csr.unit.test.d.ts +2 -0
  71. package/dist/gpu/csr.unit.test.d.ts.map +1 -0
  72. package/dist/gpu/detect.d.ts +25 -0
  73. package/dist/gpu/detect.d.ts.map +1 -0
  74. package/dist/gpu/detect.unit.test.d.ts +2 -0
  75. package/dist/gpu/detect.unit.test.d.ts.map +1 -0
  76. package/dist/gpu/index.cjs +6 -0
  77. package/dist/gpu/index.d.ts +11 -0
  78. package/dist/gpu/index.d.ts.map +1 -0
  79. package/dist/gpu/index.js +2 -0
  80. package/dist/gpu/types.d.ts +50 -0
  81. package/dist/gpu/types.d.ts.map +1 -0
  82. package/dist/gpu-BJRVYBjx.cjs +338 -0
  83. package/dist/gpu-BJRVYBjx.cjs.map +1 -0
  84. package/dist/gpu-BveuXugy.js +315 -0
  85. package/dist/gpu-BveuXugy.js.map +1 -0
  86. package/dist/graph/adjacency-map.d.ts +95 -0
  87. package/dist/graph/adjacency-map.d.ts.map +1 -0
  88. package/dist/graph/adjacency-map.unit.test.d.ts +2 -0
  89. package/dist/graph/adjacency-map.unit.test.d.ts.map +1 -0
  90. package/dist/graph/index.cjs +3 -0
  91. package/dist/graph/index.d.ts +9 -0
  92. package/dist/graph/index.d.ts.map +1 -0
  93. package/dist/graph/index.js +2 -0
  94. package/dist/graph/interfaces.d.ts +125 -0
  95. package/dist/graph/interfaces.d.ts.map +1 -0
  96. package/dist/graph/types.d.ts +72 -0
  97. package/dist/graph/types.d.ts.map +1 -0
  98. package/dist/graph-DLWiziLB.js +222 -0
  99. package/dist/graph-DLWiziLB.js.map +1 -0
  100. package/dist/graph-az06J1YV.cjs +227 -0
  101. package/dist/graph-az06J1YV.cjs.map +1 -0
  102. package/dist/index/index.cjs +1404 -0
  103. package/dist/index/index.cjs.map +1 -0
  104. package/dist/index/index.js +1356 -0
  105. package/dist/index/index.js.map +1 -0
  106. package/dist/index.d.ts +15 -0
  107. package/dist/index.d.ts.map +1 -0
  108. package/dist/kmeans-B0HEOU6k.cjs +234 -0
  109. package/dist/kmeans-B0HEOU6k.cjs.map +1 -0
  110. package/dist/kmeans-DgbsOznU.js +223 -0
  111. package/dist/kmeans-DgbsOznU.js.map +1 -0
  112. package/dist/ranking/baselines/shortest.d.ts +15 -0
  113. package/dist/ranking/baselines/shortest.d.ts.map +1 -0
  114. package/dist/ranking/baselines/shortest.unit.test.d.ts +2 -0
  115. package/dist/ranking/baselines/shortest.unit.test.d.ts.map +1 -0
  116. package/dist/ranking/baselines/types.d.ts +30 -0
  117. package/dist/ranking/baselines/types.d.ts.map +1 -0
  118. package/dist/ranking/index.d.ts +15 -0
  119. package/dist/ranking/index.d.ts.map +1 -0
  120. package/dist/ranking/mi/adamic-adar.d.ts +13 -0
  121. package/dist/ranking/mi/adamic-adar.d.ts.map +1 -0
  122. package/dist/ranking/mi/adaptive.d.ts +16 -0
  123. package/dist/ranking/mi/adaptive.d.ts.map +1 -0
  124. package/dist/ranking/mi/etch.d.ts +7 -0
  125. package/dist/ranking/mi/etch.d.ts.map +1 -0
  126. package/dist/ranking/mi/index.d.ts +18 -0
  127. package/dist/ranking/mi/index.d.ts.map +1 -0
  128. package/dist/ranking/mi/jaccard.d.ts +13 -0
  129. package/dist/ranking/mi/jaccard.d.ts.map +1 -0
  130. package/dist/ranking/mi/mi-variants.unit.test.d.ts +2 -0
  131. package/dist/ranking/mi/mi-variants.unit.test.d.ts.map +1 -0
  132. package/dist/ranking/mi/notch.d.ts +7 -0
  133. package/dist/ranking/mi/notch.d.ts.map +1 -0
  134. package/dist/ranking/mi/scale.d.ts +7 -0
  135. package/dist/ranking/mi/scale.d.ts.map +1 -0
  136. package/dist/ranking/mi/skew.d.ts +7 -0
  137. package/dist/ranking/mi/skew.d.ts.map +1 -0
  138. package/dist/ranking/mi/span.d.ts +7 -0
  139. package/dist/ranking/mi/span.d.ts.map +1 -0
  140. package/dist/ranking/mi/types.d.ts +35 -0
  141. package/dist/ranking/mi/types.d.ts.map +1 -0
  142. package/dist/ranking/parse.d.ts +56 -0
  143. package/dist/ranking/parse.d.ts.map +1 -0
  144. package/dist/ranking/parse.unit.test.d.ts +2 -0
  145. package/dist/ranking/parse.unit.test.d.ts.map +1 -0
  146. package/dist/schemas/define.d.ts +18 -0
  147. package/dist/schemas/define.d.ts.map +1 -0
  148. package/dist/schemas/define.unit.test.d.ts +2 -0
  149. package/dist/schemas/define.unit.test.d.ts.map +1 -0
  150. package/dist/schemas/graph.d.ts +85 -0
  151. package/dist/schemas/graph.d.ts.map +1 -0
  152. package/dist/schemas/graph.unit.test.d.ts +2 -0
  153. package/dist/schemas/graph.unit.test.d.ts.map +1 -0
  154. package/dist/schemas/index.cjs +3791 -0
  155. package/dist/schemas/index.cjs.map +1 -0
  156. package/dist/schemas/index.d.ts +3 -0
  157. package/dist/schemas/index.d.ts.map +1 -0
  158. package/dist/schemas/index.js +3782 -0
  159. package/dist/schemas/index.js.map +1 -0
  160. package/dist/seeds/grasp.d.ts +79 -0
  161. package/dist/seeds/grasp.d.ts.map +1 -0
  162. package/dist/seeds/grasp.unit.test.d.ts +2 -0
  163. package/dist/seeds/grasp.unit.test.d.ts.map +1 -0
  164. package/dist/seeds/index.cjs +4 -0
  165. package/dist/seeds/index.d.ts +10 -0
  166. package/dist/seeds/index.d.ts.map +1 -0
  167. package/dist/seeds/index.js +2 -0
  168. package/dist/seeds/stratified.d.ts +85 -0
  169. package/dist/seeds/stratified.d.ts.map +1 -0
  170. package/dist/seeds/stratified.unit.test.d.ts +2 -0
  171. package/dist/seeds/stratified.unit.test.d.ts.map +1 -0
  172. package/dist/seeds-B6J9oJfU.cjs +404 -0
  173. package/dist/seeds-B6J9oJfU.cjs.map +1 -0
  174. package/dist/seeds-UNZxqm_U.js +393 -0
  175. package/dist/seeds-UNZxqm_U.js.map +1 -0
  176. package/dist/structures/index.cjs +3 -0
  177. package/dist/structures/index.d.ts +3 -0
  178. package/dist/structures/index.d.ts.map +1 -0
  179. package/dist/structures/index.js +2 -0
  180. package/dist/structures/priority-queue.d.ts +59 -0
  181. package/dist/structures/priority-queue.d.ts.map +1 -0
  182. package/dist/structures/priority-queue.unit.test.d.ts +2 -0
  183. package/dist/structures/priority-queue.unit.test.d.ts.map +1 -0
  184. package/dist/structures-BPfhfqNP.js +133 -0
  185. package/dist/structures-BPfhfqNP.js.map +1 -0
  186. package/dist/structures-CJ_S_7fs.cjs +138 -0
  187. package/dist/structures-CJ_S_7fs.cjs.map +1 -0
  188. package/dist/traversal/bfs.d.ts +50 -0
  189. package/dist/traversal/bfs.d.ts.map +1 -0
  190. package/dist/traversal/bfs.unit.test.d.ts +2 -0
  191. package/dist/traversal/bfs.unit.test.d.ts.map +1 -0
  192. package/dist/traversal/dfs.d.ts +50 -0
  193. package/dist/traversal/dfs.d.ts.map +1 -0
  194. package/dist/traversal/dfs.unit.test.d.ts +2 -0
  195. package/dist/traversal/dfs.unit.test.d.ts.map +1 -0
  196. package/dist/traversal/index.cjs +6 -0
  197. package/dist/traversal/index.d.ts +11 -0
  198. package/dist/traversal/index.d.ts.map +1 -0
  199. package/dist/traversal/index.js +2 -0
  200. package/dist/traversal-CQCjUwUJ.js +149 -0
  201. package/dist/traversal-CQCjUwUJ.js.map +1 -0
  202. package/dist/traversal-QeHaNUWn.cjs +172 -0
  203. package/dist/traversal-QeHaNUWn.cjs.map +1 -0
  204. package/dist/utils/clustering-coefficient.d.ts +38 -0
  205. package/dist/utils/clustering-coefficient.d.ts.map +1 -0
  206. package/dist/utils/clustering-coefficient.unit.test.d.ts +2 -0
  207. package/dist/utils/clustering-coefficient.unit.test.d.ts.map +1 -0
  208. package/dist/utils/entropy.d.ts +58 -0
  209. package/dist/utils/entropy.d.ts.map +1 -0
  210. package/dist/utils/entropy.unit.test.d.ts +2 -0
  211. package/dist/utils/entropy.unit.test.d.ts.map +1 -0
  212. package/dist/utils/index.cjs +13 -0
  213. package/dist/utils/index.d.ts +9 -0
  214. package/dist/utils/index.d.ts.map +1 -0
  215. package/dist/utils/index.js +3 -0
  216. package/dist/utils/kmeans.d.ts +73 -0
  217. package/dist/utils/kmeans.d.ts.map +1 -0
  218. package/dist/utils/kmeans.unit.test.d.ts +2 -0
  219. package/dist/utils/kmeans.unit.test.d.ts.map +1 -0
  220. package/dist/utils-Q_akvlMn.js +164 -0
  221. package/dist/utils-Q_akvlMn.js.map +1 -0
  222. package/dist/utils-spZa1ZvS.cjs +205 -0
  223. package/dist/utils-spZa1ZvS.cjs.map +1 -0
  224. package/package.json +136 -8
package/README.md ADDED
@@ -0,0 +1,41 @@
1
+ # graphwise
2
+
3
+ Low-dependency TypeScript graph algorithms for citation network analysis.
4
+
5
+ ## Features
6
+
7
+ - **Expansion algorithms**: BASE, DOME, EDGE, HAE, PIPE, SAGE, REACH, MAZE + baselines
8
+ - **MI variants**: Jaccard, Adamic-Adar, SCALE, SKEW, SPAN, ETCH, NOTCH, Unified Adaptive
9
+ - **Path ranking**: PARSE + baselines (Katz, Communicability, PageRank, etc.)
10
+ - **Seed selection**: GRASP, Stratified
11
+ - **Subgraph extraction**: ego-network, k-core, k-truss, motif, induced, filter
12
+ - **Optional WebGPU acceleration**
13
+
14
+ ## Installation
15
+
16
+ ```bash
17
+ pnpm add graphwise
18
+ ```
19
+
20
+ ## Usage
21
+
22
+ ```typescript
23
+ import { AdjacencyMapGraph, dome, parse, jaccard } from 'graphwise';
24
+
25
+ const graph = AdjacencyMapGraph.undirected();
26
+ // add nodes and edges...
27
+
28
+ const result = dome(graph, seeds);
29
+ const ranked = parse(graph, result.paths, { mi: jaccard });
30
+ ```
31
+
32
+ ## Commands
33
+
34
+ ```bash
35
+ pnpm build # Build ESM + CJS + UMD
36
+ pnpm test # Run tests
37
+ pnpm test:coverage # Run tests with coverage
38
+ pnpm typecheck # Type check only
39
+ pnpm lint # Run ESLint
40
+ pnpm validate # Full QA: typecheck + lint + test + build
41
+ ```
@@ -0,0 +1,12 @@
1
+ import { NodeData, EdgeData, ReadableGraph } from '../graph';
2
+ import { Seed, ExpansionResult, ExpansionConfig } from './types';
3
+ /**
4
+ * Run BASE expansion algorithm.
5
+ *
6
+ * @param graph - Source graph
7
+ * @param seeds - Seed nodes for expansion
8
+ * @param config - Expansion configuration
9
+ * @returns Expansion result with discovered paths
10
+ */
11
+ export declare function base<N extends NodeData, E extends EdgeData>(graph: ReadableGraph<N, E>, seeds: readonly Seed[], config?: ExpansionConfig<N, E>): ExpansionResult;
12
+ //# sourceMappingURL=base.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/expansion/base.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAU,QAAQ,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAE1E,OAAO,KAAK,EACX,IAAI,EACJ,eAAe,EAGf,eAAe,EAEf,MAAM,SAAS,CAAC;AAqBjB;;;;;;;GAOG;AACH,wBAAgB,IAAI,CAAC,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAC1D,KAAK,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,EAC1B,KAAK,EAAE,SAAS,IAAI,EAAE,EACtB,MAAM,CAAC,EAAE,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,GAC5B,eAAe,CAoOjB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=base.unit.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.unit.test.d.ts","sourceRoot":"","sources":["../../src/expansion/base.unit.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,16 @@
1
+ import { NodeData, EdgeData, ReadableGraph } from '../graph';
2
+ import { Seed, ExpansionResult, ExpansionConfig } from './types';
3
+ /**
4
+ * Run DOME expansion (degree-ordered).
5
+ *
6
+ * @param graph - Source graph
7
+ * @param seeds - Seed nodes for expansion
8
+ * @param config - Expansion configuration
9
+ * @returns Expansion result with discovered paths
10
+ */
11
+ export declare function dome<N extends NodeData, E extends EdgeData>(graph: ReadableGraph<N, E>, seeds: readonly Seed[], config?: ExpansionConfig<N, E>): ExpansionResult;
12
+ /**
13
+ * DOME with reverse priority (high degree first).
14
+ */
15
+ export declare function domeHighDegree<N extends NodeData, E extends EdgeData>(graph: ReadableGraph<N, E>, seeds: readonly Seed[], config?: ExpansionConfig<N, E>): ExpansionResult;
16
+ //# sourceMappingURL=dome.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dome.d.ts","sourceRoot":"","sources":["../../src/expansion/dome.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAClE,OAAO,KAAK,EACX,IAAI,EACJ,eAAe,EACf,eAAe,EAEf,MAAM,SAAS,CAAC;AAGjB;;;;;;;GAOG;AACH,wBAAgB,IAAI,CAAC,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAC1D,KAAK,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,EAC1B,KAAK,EAAE,SAAS,IAAI,EAAE,EACtB,MAAM,CAAC,EAAE,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,GAC5B,eAAe,CAejB;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EACpE,KAAK,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,EAC1B,KAAK,EAAE,SAAS,IAAI,EAAE,EACtB,MAAM,CAAC,EAAE,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,GAC5B,eAAe,CAejB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=dome.unit.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dome.unit.test.d.ts","sourceRoot":"","sources":["../../src/expansion/dome.unit.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,15 @@
1
+ import { NodeData, EdgeData, ReadableGraph } from '../graph';
2
+ import { Seed, ExpansionResult, ExpansionConfig } from './types';
3
+ /**
4
+ * Run EDGE expansion algorithm.
5
+ *
6
+ * Expands from seeds prioritising low-degree edges first.
7
+ * Useful for avoiding hubs and exploring sparse regions.
8
+ *
9
+ * @param graph - Source graph
10
+ * @param seeds - Seed nodes for expansion
11
+ * @param config - Expansion configuration
12
+ * @returns Expansion result with discovered paths
13
+ */
14
+ export declare function edge<N extends NodeData, E extends EdgeData>(graph: ReadableGraph<N, E>, seeds: readonly Seed[], config?: ExpansionConfig<N, E>): ExpansionResult;
15
+ //# sourceMappingURL=edge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"edge.d.ts","sourceRoot":"","sources":["../../src/expansion/edge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAClE,OAAO,KAAK,EACX,IAAI,EACJ,eAAe,EACf,eAAe,EAEf,MAAM,SAAS,CAAC;AAwBjB;;;;;;;;;;GAUG;AACH,wBAAgB,IAAI,CAAC,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAC1D,KAAK,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,EAC1B,KAAK,EAAE,SAAS,IAAI,EAAE,EACtB,MAAM,CAAC,EAAE,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,GAC5B,eAAe,CAKjB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=edge.unit.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"edge.unit.test.d.ts","sourceRoot":"","sources":["../../src/expansion/edge.unit.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,22 @@
1
+ import { NodeData, EdgeData, ReadableGraph } from '../graph';
2
+ import { Seed, ExpansionResult, ExpansionConfig } from './types';
3
+ /**
4
+ * Configuration for HAE expansion.
5
+ */
6
+ export interface HAEConfig<N extends NodeData = NodeData, E extends EdgeData = EdgeData> extends ExpansionConfig<N, E> {
7
+ /** MI function for computing edge priorities (default: jaccard) */
8
+ readonly mi?: (graph: ReadableGraph<N, E>, source: string, target: string) => number;
9
+ }
10
+ /**
11
+ * Run HAE expansion algorithm.
12
+ *
13
+ * Expands from seeds prioritising high-MI edges.
14
+ * Useful for finding paths with strong semantic associations.
15
+ *
16
+ * @param graph - Source graph
17
+ * @param seeds - Seed nodes for expansion
18
+ * @param config - Expansion configuration with MI function
19
+ * @returns Expansion result with discovered paths
20
+ */
21
+ export declare function hae<N extends NodeData, E extends EdgeData>(graph: ReadableGraph<N, E>, seeds: readonly Seed[], config?: HAEConfig<N, E>): ExpansionResult;
22
+ //# sourceMappingURL=hae.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hae.d.ts","sourceRoot":"","sources":["../../src/expansion/hae.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAClE,OAAO,KAAK,EACX,IAAI,EACJ,eAAe,EACf,eAAe,EAEf,MAAM,SAAS,CAAC;AAIjB;;GAEG;AACH,MAAM,WAAW,SAAS,CACzB,CAAC,SAAS,QAAQ,GAAG,QAAQ,EAC7B,CAAC,SAAS,QAAQ,GAAG,QAAQ,CAC5B,SAAQ,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC;IAC9B,mEAAmE;IACnE,QAAQ,CAAC,EAAE,CAAC,EAAE,CACb,KAAK,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,EAC1B,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,KACV,MAAM,CAAC;CACZ;AA0CD;;;;;;;;;;GAUG;AACH,wBAAgB,GAAG,CAAC,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EACzD,KAAK,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,EAC1B,KAAK,EAAE,SAAS,IAAI,EAAE,EACtB,MAAM,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,GACtB,eAAe,CAUjB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=hae.unit.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hae.unit.test.d.ts","sourceRoot":"","sources":["../../src/expansion/hae.unit.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Expansion algorithms module.
3
+ *
4
+ * Provides bidirectional expansion algorithms for discovering paths
5
+ * between seed nodes in a graph.
6
+ *
7
+ * @module expansion
8
+ */
9
+ export type { Seed, SeedRole, ExpansionResult, ExpansionPath, ExpansionStats, ExpansionConfig, PriorityFunction, PriorityContext, } from './types';
10
+ export { base } from './base';
11
+ export { dome } from './dome';
12
+ export { edge } from './edge';
13
+ export { hae } from './hae';
14
+ export type { HAEConfig } from './hae';
15
+ export { pipe } from './pipe';
16
+ export { sage } from './sage';
17
+ export type { SAGEConfig } from './sage';
18
+ export { reach } from './reach';
19
+ export type { REACHConfig } from './reach';
20
+ export { maze } from './maze';
21
+ export type { MAZEConfig } from './maze';
22
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/expansion/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,YAAY,EACX,IAAI,EACJ,QAAQ,EACR,eAAe,EACf,aAAa,EACb,cAAc,EACd,eAAe,EACf,gBAAgB,EAChB,eAAe,GACf,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAG9B,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAG9B,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAG9B,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAC5B,YAAY,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAG9B,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,YAAY,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAGzC,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAG3C,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,YAAY,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC"}
@@ -0,0 +1,25 @@
1
+ import { NodeData, EdgeData, ReadableGraph } from '../graph';
2
+ import { Seed, ExpansionResult, ExpansionConfig } from './types';
3
+ /**
4
+ * Configuration for MAZE expansion.
5
+ */
6
+ export interface MAZEConfig<N extends NodeData = NodeData, E extends EdgeData = EdgeData> extends ExpansionConfig<N, E> {
7
+ /** Density threshold for switching to EDGE mode (default: 0.5) */
8
+ readonly densityThreshold?: number;
9
+ /** Bridge threshold for switching to PIPE mode (default: 0.3) */
10
+ readonly bridgeThreshold?: number;
11
+ }
12
+ /**
13
+ * Run MAZE expansion algorithm.
14
+ *
15
+ * Adaptively switches between expansion strategies based on
16
+ * local graph structure. Useful for heterogeneous graphs
17
+ * with varying density.
18
+ *
19
+ * @param graph - Source graph
20
+ * @param seeds - Seed nodes for expansion
21
+ * @param config - Expansion configuration
22
+ * @returns Expansion result with discovered paths
23
+ */
24
+ export declare function maze<N extends NodeData, E extends EdgeData>(graph: ReadableGraph<N, E>, seeds: readonly Seed[], config?: MAZEConfig<N, E>): ExpansionResult;
25
+ //# sourceMappingURL=maze.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"maze.d.ts","sourceRoot":"","sources":["../../src/expansion/maze.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAClE,OAAO,KAAK,EACX,IAAI,EACJ,eAAe,EACf,eAAe,EAEf,MAAM,SAAS,CAAC;AAGjB;;GAEG;AACH,MAAM,WAAW,UAAU,CAC1B,CAAC,SAAS,QAAQ,GAAG,QAAQ,EAC7B,CAAC,SAAS,QAAQ,GAAG,QAAQ,CAC5B,SAAQ,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC;IAC9B,kEAAkE;IAClE,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,iEAAiE;IACjE,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;CAClC;AA8FD;;;;;;;;;;;GAWG;AACH,wBAAgB,IAAI,CAAC,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAC1D,KAAK,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,EAC1B,KAAK,EAAE,SAAS,IAAI,EAAE,EACtB,MAAM,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,GACvB,eAAe,CAcjB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=maze.unit.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"maze.unit.test.d.ts","sourceRoot":"","sources":["../../src/expansion/maze.unit.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,15 @@
1
+ import { NodeData, EdgeData, ReadableGraph } from '../graph';
2
+ import { Seed, ExpansionResult, ExpansionConfig } from './types';
3
+ /**
4
+ * Run PIPE expansion algorithm.
5
+ *
6
+ * Expands from seeds prioritising bridge nodes.
7
+ * Useful for finding paths through structurally important nodes.
8
+ *
9
+ * @param graph - Source graph
10
+ * @param seeds - Seed nodes for expansion
11
+ * @param config - Expansion configuration
12
+ * @returns Expansion result with discovered paths
13
+ */
14
+ export declare function pipe<N extends NodeData, E extends EdgeData>(graph: ReadableGraph<N, E>, seeds: readonly Seed[], config?: ExpansionConfig<N, E>): ExpansionResult;
15
+ //# sourceMappingURL=pipe.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipe.d.ts","sourceRoot":"","sources":["../../src/expansion/pipe.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAClE,OAAO,KAAK,EACX,IAAI,EACJ,eAAe,EACf,eAAe,EAEf,MAAM,SAAS,CAAC;AAsCjB;;;;;;;;;;GAUG;AACH,wBAAgB,IAAI,CAAC,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAC1D,KAAK,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,EAC1B,KAAK,EAAE,SAAS,IAAI,EAAE,EACtB,MAAM,CAAC,EAAE,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,GAC5B,eAAe,CAKjB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=pipe.unit.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipe.unit.test.d.ts","sourceRoot":"","sources":["../../src/expansion/pipe.unit.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,26 @@
1
+ import { NodeData, EdgeData, ReadableGraph } from '../graph';
2
+ import { Seed, ExpansionResult, ExpansionConfig } from './types';
3
+ /**
4
+ * Configuration for REACH expansion.
5
+ */
6
+ export interface REACHConfig<N extends NodeData = NodeData, E extends EdgeData = EdgeData> extends ExpansionConfig<N, E> {
7
+ /** MI function for salience computation (default: jaccard) */
8
+ readonly mi?: (graph: ReadableGraph<N, E>, source: string, target: string) => number;
9
+ /** MI percentile threshold for phase 2 (default: 0.25) */
10
+ readonly miThreshold?: number;
11
+ /** Maximum nodes for phase 1 sampling (default: 1000) */
12
+ readonly phase1MaxNodes?: number;
13
+ }
14
+ /**
15
+ * Run REACH expansion algorithm.
16
+ *
17
+ * Two-phase adaptive expansion that learns MI thresholds
18
+ * from initial sampling, then uses them for guided expansion.
19
+ *
20
+ * @param graph - Source graph
21
+ * @param seeds - Seed nodes for expansion
22
+ * @param config - Expansion configuration
23
+ * @returns Expansion result with discovered paths
24
+ */
25
+ export declare function reach<N extends NodeData, E extends EdgeData>(graph: ReadableGraph<N, E>, seeds: readonly Seed[], config?: REACHConfig<N, E>): ExpansionResult;
26
+ //# sourceMappingURL=reach.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reach.d.ts","sourceRoot":"","sources":["../../src/expansion/reach.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAClE,OAAO,KAAK,EACX,IAAI,EACJ,eAAe,EACf,eAAe,EAEf,MAAM,SAAS,CAAC;AAIjB;;GAEG;AACH,MAAM,WAAW,WAAW,CAC3B,CAAC,SAAS,QAAQ,GAAG,QAAQ,EAC7B,CAAC,SAAS,QAAQ,GAAG,QAAQ,CAC5B,SAAQ,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC;IAC9B,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,CAAC,EAAE,CACb,KAAK,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,EAC1B,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,KACV,MAAM,CAAC;IACZ,0DAA0D;IAC1D,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,yDAAyD;IACzD,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;CACjC;AAsCD;;;;;;;;;;GAUG;AACH,wBAAgB,KAAK,CAAC,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAC3D,KAAK,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,EAC1B,KAAK,EAAE,SAAS,IAAI,EAAE,EACtB,MAAM,CAAC,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,GACxB,eAAe,CAWjB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=reach.unit.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reach.unit.test.d.ts","sourceRoot":"","sources":["../../src/expansion/reach.unit.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,24 @@
1
+ import { NodeData, EdgeData, ReadableGraph } from '../graph';
2
+ import { Seed, ExpansionResult, ExpansionConfig } from './types';
3
+ /**
4
+ * Configuration for SAGE expansion.
5
+ */
6
+ export interface SAGEConfig<N extends NodeData = NodeData, E extends EdgeData = EdgeData> extends ExpansionConfig<N, E> {
7
+ /** MI function for salience computation (default: jaccard) */
8
+ readonly mi?: (graph: ReadableGraph<N, E>, source: string, target: string) => number;
9
+ /** Weight for salience component (0-1, default: 0.5) */
10
+ readonly salienceWeight?: number;
11
+ }
12
+ /**
13
+ * Run SAGE expansion algorithm.
14
+ *
15
+ * Combines structural exploration with semantic salience.
16
+ * Useful for finding paths that are both short and semantically meaningful.
17
+ *
18
+ * @param graph - Source graph
19
+ * @param seeds - Seed nodes for expansion
20
+ * @param config - Expansion configuration with MI function
21
+ * @returns Expansion result with discovered paths
22
+ */
23
+ export declare function sage<N extends NodeData, E extends EdgeData>(graph: ReadableGraph<N, E>, seeds: readonly Seed[], config?: SAGEConfig<N, E>): ExpansionResult;
24
+ //# sourceMappingURL=sage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sage.d.ts","sourceRoot":"","sources":["../../src/expansion/sage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAClE,OAAO,KAAK,EACX,IAAI,EACJ,eAAe,EACf,eAAe,EAEf,MAAM,SAAS,CAAC;AAIjB;;GAEG;AACH,MAAM,WAAW,UAAU,CAC1B,CAAC,SAAS,QAAQ,GAAG,QAAQ,EAC7B,CAAC,SAAS,QAAQ,GAAG,QAAQ,CAC5B,SAAQ,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC;IAC9B,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,CAAC,EAAE,CACb,KAAK,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,EAC1B,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,KACV,MAAM,CAAC;IACZ,wDAAwD;IACxD,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;CACjC;AAyCD;;;;;;;;;;GAUG;AACH,wBAAgB,IAAI,CAAC,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAC1D,KAAK,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,EAC1B,KAAK,EAAE,SAAS,IAAI,EAAE,EACtB,MAAM,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,GACvB,eAAe,CAUjB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=sage.unit.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sage.unit.test.d.ts","sourceRoot":"","sources":["../../src/expansion/sage.unit.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,105 @@
1
+ import { NodeId, NodeData, EdgeData, ReadableGraph } from '../graph';
2
+ /**
3
+ * Role of a seed node in expansion.
4
+ */
5
+ export type SeedRole = "source" | "target" | "bidirectional";
6
+ /**
7
+ * A seed node for expansion.
8
+ */
9
+ export interface Seed {
10
+ /** Node identifier */
11
+ readonly id: NodeId;
12
+ /** Optional role - default is 'bidirectional' */
13
+ readonly role?: SeedRole;
14
+ }
15
+ /**
16
+ * Context provided to priority functions.
17
+ */
18
+ export interface PriorityContext<N extends NodeData = NodeData, E extends EdgeData = EdgeData> {
19
+ /** The source graph */
20
+ readonly graph: ReadableGraph<N, E>;
21
+ /** Degree of the node being prioritised */
22
+ readonly degree: number;
23
+ /** Index of the frontier this node belongs to */
24
+ readonly frontierIndex: number;
25
+ /** Map of node ID to frontier index that visited it */
26
+ readonly visitedByFrontier: ReadonlyMap<NodeId, number>;
27
+ /** Set of all visited nodes */
28
+ readonly allVisited: ReadonlySet<NodeId>;
29
+ /** Paths discovered so far */
30
+ readonly discoveredPaths: readonly ExpansionPath[];
31
+ /** Current iteration number */
32
+ readonly iteration: number;
33
+ /** Optional MI score (for REACH phase 2) */
34
+ readonly mi?: number;
35
+ }
36
+ /**
37
+ * Function that computes expansion priority for a node.
38
+ * Lower values = higher priority (expanded first).
39
+ */
40
+ export type PriorityFunction<N extends NodeData = NodeData, E extends EdgeData = EdgeData> = (nodeId: NodeId, context: PriorityContext<N, E>) => number;
41
+ /**
42
+ * A path discovered by bidirectional expansion.
43
+ */
44
+ export interface ExpansionPath {
45
+ /** Source seed */
46
+ readonly fromSeed: Seed;
47
+ /** Target seed */
48
+ readonly toSeed: Seed;
49
+ /** Nodes in the path (inclusive of endpoints) */
50
+ readonly nodes: readonly NodeId[];
51
+ /** Optional salience score */
52
+ readonly salience?: number;
53
+ }
54
+ /**
55
+ * Statistics from expansion.
56
+ */
57
+ export interface ExpansionStats {
58
+ /** Total iterations */
59
+ readonly iterations: number;
60
+ /** Total nodes visited */
61
+ readonly nodesVisited: number;
62
+ /** Total edges traversed */
63
+ readonly edgesTraversed: number;
64
+ /** Paths discovered */
65
+ readonly pathsFound: number;
66
+ /** Expansion duration in milliseconds */
67
+ readonly durationMs: number;
68
+ /** Algorithm name */
69
+ readonly algorithm: string;
70
+ /** Termination reason */
71
+ readonly termination: "exhausted" | "limit" | "collision" | "error";
72
+ }
73
+ /**
74
+ * Result of an expansion algorithm.
75
+ */
76
+ export interface ExpansionResult {
77
+ /** All discovered paths */
78
+ readonly paths: readonly ExpansionPath[];
79
+ /** Nodes sampled during expansion */
80
+ readonly sampledNodes: ReadonlySet<NodeId>;
81
+ /** Edges sampled during expansion */
82
+ readonly sampledEdges: ReadonlySet<readonly [NodeId, NodeId]>;
83
+ /** Nodes visited per frontier */
84
+ readonly visitedPerFrontier: readonly ReadonlySet<NodeId>[];
85
+ /** Expansion statistics */
86
+ readonly stats: ExpansionStats;
87
+ }
88
+ /**
89
+ * Configuration for expansion algorithms.
90
+ */
91
+ export interface ExpansionConfig<N extends NodeData = NodeData, E extends EdgeData = EdgeData> {
92
+ /** Maximum number of nodes to visit (0 = unlimited) */
93
+ readonly maxNodes?: number;
94
+ /** Maximum number of iterations (0 = unlimited) */
95
+ readonly maxIterations?: number;
96
+ /** Maximum paths to discover before stopping (0 = unlimited) */
97
+ readonly maxPaths?: number;
98
+ /** Custom priority function */
99
+ readonly priority?: PriorityFunction<N, E>;
100
+ /** Random seed for reproducibility */
101
+ readonly seed?: number;
102
+ /** Enable debug logging */
103
+ readonly debug?: boolean;
104
+ }
105
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/expansion/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAE1E;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,eAAe,CAAC;AAE7D;;GAEG;AACH,MAAM,WAAW,IAAI;IACpB,sBAAsB;IACtB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,iDAAiD;IACjD,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe,CAC/B,CAAC,SAAS,QAAQ,GAAG,QAAQ,EAC7B,CAAC,SAAS,QAAQ,GAAG,QAAQ;IAE7B,uBAAuB;IACvB,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACpC,2CAA2C;IAC3C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,iDAAiD;IACjD,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,uDAAuD;IACvD,QAAQ,CAAC,iBAAiB,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxD,+BAA+B;IAC/B,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACzC,8BAA8B;IAC9B,QAAQ,CAAC,eAAe,EAAE,SAAS,aAAa,EAAE,CAAC;IACnD,+BAA+B;IAC/B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,4CAA4C;IAC5C,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,MAAM,MAAM,gBAAgB,CAC3B,CAAC,SAAS,QAAQ,GAAG,QAAQ,EAC7B,CAAC,SAAS,QAAQ,GAAG,QAAQ,IAC1B,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,MAAM,CAAC;AAE/D;;GAEG;AACH,MAAM,WAAW,aAAa;IAC7B,kBAAkB;IAClB,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC;IACxB,kBAAkB;IAClB,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC;IACtB,iDAAiD;IACjD,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,8BAA8B;IAC9B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC9B,uBAAuB;IACvB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,0BAA0B;IAC1B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,4BAA4B;IAC5B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,uBAAuB;IACvB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,yCAAyC;IACzC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,qBAAqB;IACrB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,yBAAyB;IACzB,QAAQ,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,GAAG,WAAW,GAAG,OAAO,CAAC;CACpE;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC/B,2BAA2B;IAC3B,QAAQ,CAAC,KAAK,EAAE,SAAS,aAAa,EAAE,CAAC;IACzC,qCAAqC;IACrC,QAAQ,CAAC,YAAY,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC3C,qCAAqC;IACrC,QAAQ,CAAC,YAAY,EAAE,WAAW,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC9D,iCAAiC;IACjC,QAAQ,CAAC,kBAAkB,EAAE,SAAS,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;IAC5D,2BAA2B;IAC3B,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC;CAC/B;AAED;;GAEG;AACH,MAAM,WAAW,eAAe,CAC/B,CAAC,SAAS,QAAQ,GAAG,QAAQ,EAC7B,CAAC,SAAS,QAAQ,GAAG,QAAQ;IAE7B,uDAAuD;IACvD,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,mDAAmD;IACnD,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,gEAAgE;IAChE,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,+BAA+B;IAC/B,QAAQ,CAAC,QAAQ,CAAC,EAAE,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3C,sCAAsC;IACtC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,2BAA2B;IAC3B,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;CACzB"}
@@ -0,0 +1,32 @@
1
+ import { NodeId, NodeData, EdgeData, ReadableGraph } from '../graph';
2
+ import { AdjacencyMapGraph } from '../graph/adjacency-map';
3
+ /**
4
+ * Options for ego-network extraction.
5
+ */
6
+ export interface EgoNetworkOptions {
7
+ /** Number of hops from the centre node. Default: 1. */
8
+ readonly hops?: number;
9
+ }
10
+ /**
11
+ * Extract the ego-network (k-hop neighbourhood) of a centre node.
12
+ *
13
+ * The ego-network includes all nodes reachable within k hops from the
14
+ * centre node, plus all edges between those nodes (induced subgraph).
15
+ *
16
+ * For directed graphs, the search follows outgoing edges by default.
17
+ * To include incoming edges, use direction 'both' in the underlying traversal.
18
+ *
19
+ * @param graph - The source graph
20
+ * @param centre - The centre node ID
21
+ * @param options - Extraction options
22
+ * @returns An induced subgraph of the k-hop neighbourhood
23
+ * @throws Error if the centre node does not exist in the graph
24
+ *
25
+ * @example
26
+ * ```typescript
27
+ * // 2-hop neighbourhood
28
+ * const ego = extractEgoNetwork(graph, 'A', { hops: 2 });
29
+ * ```
30
+ */
31
+ export declare function extractEgoNetwork<N extends NodeData, E extends EdgeData>(graph: ReadableGraph<N, E>, centre: NodeId, options?: EgoNetworkOptions): AdjacencyMapGraph<N, E>;
32
+ //# sourceMappingURL=ego-network.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ego-network.d.ts","sourceRoot":"","sources":["../../src/extraction/ego-network.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAC1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D;;GAEG;AACH,MAAM,WAAW,iBAAiB;IACjC,uDAAuD;IACvD,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EACvE,KAAK,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,EAC1B,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,iBAAiB,GACzB,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC,CA4DzB"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Tests for ego-network extraction.
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=ego-network.unit.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ego-network.unit.test.d.ts","sourceRoot":"","sources":["../../src/extraction/ego-network.unit.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Subgraph extraction algorithms module.
3
+ *
4
+ * Provides algorithms for extracting various subgraphs from a graph:
5
+ * - Ego-networks (k-hop neighbourhoods)
6
+ * - K-core decomposition
7
+ * - K-truss decomposition
8
+ * - Motif enumeration
9
+ * - Induced subgraphs
10
+ * - Filtered subgraphs
11
+ *
12
+ * @module extraction
13
+ */
14
+ export { extractEgoNetwork, type EgoNetworkOptions } from './ego-network';
15
+ export { extractKCore } from './k-core';
16
+ export { extractKTruss } from './truss';
17
+ export { enumerateMotifs, enumerateMotifsWithInstances, getMotifName, type MotifCensus, } from './motif';
18
+ export { extractInducedSubgraph } from './induced-subgraph';
19
+ export { filterSubgraph, type FilterOptions } from './node-filter';
20
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/extraction/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,iBAAiB,EAAE,KAAK,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAC1E,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,EACN,eAAe,EACf,4BAA4B,EAC5B,YAAY,EACZ,KAAK,WAAW,GAChB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,KAAK,aAAa,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,19 @@
1
+ import { NodeId, NodeData, EdgeData, ReadableGraph } from '../graph';
2
+ import { AdjacencyMapGraph } from '../graph/adjacency-map';
3
+ /**
4
+ * Extract the induced subgraph containing exactly the specified nodes.
5
+ *
6
+ * The induced subgraph includes all nodes from the input set that exist
7
+ * in the original graph, plus all edges where both endpoints are in the set.
8
+ *
9
+ * @param graph - The source graph
10
+ * @param nodes - Set of node IDs to include in the subgraph
11
+ * @returns A new graph containing the induced subgraph
12
+ *
13
+ * @example
14
+ * ```typescript
15
+ * const subgraph = extractInducedSubgraph(graph, new Set(['A', 'B', 'C']));
16
+ * ```
17
+ */
18
+ export declare function extractInducedSubgraph<N extends NodeData, E extends EdgeData>(graph: ReadableGraph<N, E>, nodes: ReadonlySet<NodeId>): AdjacencyMapGraph<N, E>;
19
+ //# sourceMappingURL=induced-subgraph.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"induced-subgraph.d.ts","sourceRoot":"","sources":["../../src/extraction/induced-subgraph.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAC1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAC5E,KAAK,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,EAC1B,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,GACxB,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC,CAqBzB"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Tests for induced subgraph extraction.
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=induced-subgraph.unit.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"induced-subgraph.unit.test.d.ts","sourceRoot":"","sources":["../../src/extraction/induced-subgraph.unit.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,24 @@
1
+ import { NodeData, EdgeData, ReadableGraph } from '../graph';
2
+ import { AdjacencyMapGraph } from '../graph/adjacency-map';
3
+ /**
4
+ * Extract the k-core of a graph.
5
+ *
6
+ * The k-core is the maximal connected subgraph where every node has
7
+ * degree at least k. This is computed using a peeling algorithm that
8
+ * iteratively removes nodes with degree less than k.
9
+ *
10
+ * For undirected graphs, degree counts all adjacent nodes.
11
+ * For directed graphs, degree counts both in- and out-neighbours.
12
+ *
13
+ * @param graph - The source graph
14
+ * @param k - The minimum degree threshold
15
+ * @returns A new graph containing the k-core (may be empty)
16
+ *
17
+ * @example
18
+ * ```typescript
19
+ * // Extract the 3-core (nodes with at least 3 neighbours)
20
+ * const core3 = extractKCore(graph, 3);
21
+ * ```
22
+ */
23
+ export declare function extractKCore<N extends NodeData, E extends EdgeData>(graph: ReadableGraph<N, E>, k: number): AdjacencyMapGraph<N, E>;
24
+ //# sourceMappingURL=k-core.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"k-core.d.ts","sourceRoot":"","sources":["../../src/extraction/k-core.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAU,QAAQ,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAC1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,YAAY,CAAC,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAClE,KAAK,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,EAC1B,CAAC,EAAE,MAAM,GACP,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC,CA8EzB"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Tests for k-core decomposition.
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=k-core.unit.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"k-core.unit.test.d.ts","sourceRoot":"","sources":["../../src/extraction/k-core.unit.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}