@kortexya/nodus 0.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 (252) hide show
  1. package/LICENSE +37 -0
  2. package/README.md +60 -0
  3. package/__vite-plugin-wasm-helper-1Aiokjk5.js +24 -0
  4. package/assets/hypergraphWorker-DV0aFI3L.js +1 -0
  5. package/assets/layoutWorker-DwDJwbgr.js +285 -0
  6. package/assets/nodus_wasm-C0vDfO5K.js +1 -0
  7. package/chunk-DmhlhrBa.js +11 -0
  8. package/nodus.src.bundle.js +33577 -0
  9. package/nodus_render_wasm-Bs6hlsx-.js +2617 -0
  10. package/nodus_wasm-DKYQVSUZ.js +2789 -0
  11. package/package.json +61 -0
  12. package/types/Nodus.d.ts +100 -0
  13. package/types/algorithms/concentric/index.d.ts +29 -0
  14. package/types/algorithms/concentricFactory.d.ts +43 -0
  15. package/types/algorithms/force/Alea.d.ts +13 -0
  16. package/types/algorithms/force/BVH.d.ts +35 -0
  17. package/types/algorithms/force/LayoutData.d.ts +40 -0
  18. package/types/algorithms/force/Packing.d.ts +31 -0
  19. package/types/algorithms/force/Physics.d.ts +61 -0
  20. package/types/algorithms/force/SEC.d.ts +14 -0
  21. package/types/algorithms/force/Topology.d.ts +3 -0
  22. package/types/algorithms/force/index.d.ts +54 -0
  23. package/types/algorithms/force-gpu/ParticleSystem.d.ts +45 -0
  24. package/types/algorithms/force-gpu/Settings.d.ts +60 -0
  25. package/types/algorithms/force-gpu/Simulation.d.ts +7 -0
  26. package/types/algorithms/force-gpu/getGlContext.d.ts +10 -0
  27. package/types/algorithms/force-gpu/gpuLayout.d.ts +14 -0
  28. package/types/algorithms/force-gpu/index.d.ts +2 -0
  29. package/types/algorithms/force-gpu/kernels/index.d.ts +176 -0
  30. package/types/algorithms/force-gpu/kernels/utils.d.ts +31 -0
  31. package/types/algorithms/force-gpu/shaders/aabb.d.ts +2 -0
  32. package/types/algorithms/force-gpu/shaders/bhExpand.d.ts +2 -0
  33. package/types/algorithms/force-gpu/shaders/bhTranslate.d.ts +2 -0
  34. package/types/algorithms/force-gpu/shaders/cellLookup.d.ts +2 -0
  35. package/types/algorithms/force-gpu/shaders/index.d.ts +9 -0
  36. package/types/algorithms/force-gpu/shaders/integrate.d.ts +2 -0
  37. package/types/algorithms/force-gpu/shaders/morton.d.ts +2 -0
  38. package/types/algorithms/force-gpu/shaders/sortIntervals.d.ts +2 -0
  39. package/types/algorithms/force-gpu/shaders/sortKeys.d.ts +2 -0
  40. package/types/algorithms/force-gpu/shaders/types.d.ts +10 -0
  41. package/types/algorithms/force-gpu/webgl/helpers.d.ts +24 -0
  42. package/types/algorithms/force-gpu/webgl/index.d.ts +4 -0
  43. package/types/algorithms/force-gpu/webgl/program.d.ts +15 -0
  44. package/types/algorithms/forceFactory.d.ts +55 -0
  45. package/types/algorithms/forceLinkFactory.d.ts +40 -0
  46. package/types/algorithms/grid/index.d.ts +26 -0
  47. package/types/algorithms/gridFactory.d.ts +30 -0
  48. package/types/algorithms/hierarchical/index.d.ts +80 -0
  49. package/types/algorithms/hierarchical/sugiyama.d.ts +144 -0
  50. package/types/algorithms/hierarchicalFactory.d.ts +49 -0
  51. package/types/algorithms/index.d.ts +13 -0
  52. package/types/algorithms/radial/index.d.ts +33 -0
  53. package/types/algorithms/radialFactory.d.ts +54 -0
  54. package/types/algorithms/sequential/index.d.ts +37 -0
  55. package/types/algorithms/sequentialFactory.d.ts +37 -0
  56. package/types/core/Edge.d.ts +67 -0
  57. package/types/core/EdgeList.d.ts +86 -0
  58. package/types/core/Node.d.ts +89 -0
  59. package/types/core/NodeList.d.ts +105 -0
  60. package/types/core/Transformation.d.ts +108 -0
  61. package/types/core/enums.d.ts +16 -0
  62. package/types/geometry/BoundingBox.d.ts +41 -0
  63. package/types/geometry/index.d.ts +276 -0
  64. package/types/geometry/types.d.ts +27 -0
  65. package/types/hypergraph/Hypergraph.d.ts +74 -0
  66. package/types/hypergraph/KoenigGraph.d.ts +29 -0
  67. package/types/hypergraph/Simplifier.d.ts +39 -0
  68. package/types/hypergraph/Statistics.d.ts +55 -0
  69. package/types/hypergraph/forbidden/StrangledHyperedge.d.ts +12 -0
  70. package/types/hypergraph/forbidden/StrangledVertex.d.ts +16 -0
  71. package/types/hypergraph/forbidden/ThreeAdjacentCluster2.d.ts +10 -0
  72. package/types/hypergraph/forbidden/TwoAdjacentCluster3.d.ts +14 -0
  73. package/types/hypergraph/forbidden/index.d.ts +22 -0
  74. package/types/hypergraph/index.d.ts +21 -0
  75. package/types/hypergraph/layout/Adam.d.ts +12 -0
  76. package/types/hypergraph/layout/Energy.d.ts +55 -0
  77. package/types/hypergraph/layout/LBFGS.d.ts +32 -0
  78. package/types/hypergraph/layout/Optimizer.d.ts +60 -0
  79. package/types/hypergraph/layout/Reverser.d.ts +42 -0
  80. package/types/hypergraph/operations/AtomicOperation.d.ts +54 -0
  81. package/types/hypergraph/operations/HyperedgeMerger.d.ts +30 -0
  82. package/types/hypergraph/operations/HyperedgeRemoval.d.ts +27 -0
  83. package/types/hypergraph/operations/VertexMerger.d.ts +32 -0
  84. package/types/hypergraph/operations/VertexRemoval.d.ts +30 -0
  85. package/types/hypergraph/operations/index.d.ts +19 -0
  86. package/types/hypergraph/osfkb/adapter.d.ts +315 -0
  87. package/types/hypergraph/render/Interaction.d.ts +40 -0
  88. package/types/hypergraph/render/PolygonRenderer.d.ts +50 -0
  89. package/types/hypergraph/render/SVGPolygonRenderer.d.ts +7 -0
  90. package/types/hypergraph/types.d.ts +170 -0
  91. package/types/index.d.ts +21 -0
  92. package/types/internals/Algorithms.d.ts +68 -0
  93. package/types/internals/AlgorithmsPrimitives.d.ts +18 -0
  94. package/types/internals/Animations.d.ts +39 -0
  95. package/types/internals/AttributePathPrimitives.d.ts +2 -0
  96. package/types/internals/Brand.d.ts +22 -0
  97. package/types/internals/Camera.d.ts +115 -0
  98. package/types/internals/CameraInteractions.d.ts +15 -0
  99. package/types/internals/CameraInteractionsPrimitives.d.ts +18 -0
  100. package/types/internals/Captor.d.ts +56 -0
  101. package/types/internals/CaptorPrimitives.d.ts +9 -0
  102. package/types/internals/ClassModule.d.ts +42 -0
  103. package/types/internals/ConnectNodes.d.ts +23 -0
  104. package/types/internals/CurvatureManager.d.ts +14 -0
  105. package/types/internals/DataModule.d.ts +29 -0
  106. package/types/internals/Disabled.d.ts +27 -0
  107. package/types/internals/DomModule.d.ts +87 -0
  108. package/types/internals/DragModule.d.ts +14 -0
  109. package/types/internals/ElementSet.d.ts +17 -0
  110. package/types/internals/EventsModule.d.ts +41 -0
  111. package/types/internals/FlexArray.d.ts +54 -0
  112. package/types/internals/Geo.d.ts +127 -0
  113. package/types/internals/Graph.d.ts +109 -0
  114. package/types/internals/Graphics.d.ts +112 -0
  115. package/types/internals/GraphicsEngine.d.ts +96 -0
  116. package/types/internals/Hover.d.ts +32 -0
  117. package/types/internals/Hypergraph.d.ts +112 -0
  118. package/types/internals/IndexList.d.ts +28 -0
  119. package/types/internals/IndividualAttributes.d.ts +27 -0
  120. package/types/internals/Interactions.d.ts +45 -0
  121. package/types/internals/Keyboard.d.ts +25 -0
  122. package/types/internals/LabelManager.d.ts +56 -0
  123. package/types/internals/Lasso.d.ts +22 -0
  124. package/types/internals/Layers.d.ts +79 -0
  125. package/types/internals/LayersPrimitives.d.ts +5 -0
  126. package/types/internals/Layouts.d.ts +35 -0
  127. package/types/internals/LayoutsInternal.d.ts +37 -0
  128. package/types/internals/LayoutsPrimitives.d.ts +23 -0
  129. package/types/internals/Legend.d.ts +33 -0
  130. package/types/internals/LegendPrimitives.d.ts +3 -0
  131. package/types/internals/Locate.d.ts +43 -0
  132. package/types/internals/LocatePrimitives.d.ts +20 -0
  133. package/types/internals/MappingManager.d.ts +27 -0
  134. package/types/internals/MappingPrimitives.d.ts +29 -0
  135. package/types/internals/Module.d.ts +23 -0
  136. package/types/internals/Mouse.d.ts +42 -0
  137. package/types/internals/NodusModules.d.ts +99 -0
  138. package/types/internals/PositionModule.d.ts +10 -0
  139. package/types/internals/PulseModule.d.ts +29 -0
  140. package/types/internals/Quadtree.d.ts +100 -0
  141. package/types/internals/RectangleSelect.d.ts +18 -0
  142. package/types/internals/Resizing.d.ts +48 -0
  143. package/types/internals/Rewiring.d.ts +64 -0
  144. package/types/internals/SchemaWatchPrimitives.d.ts +75 -0
  145. package/types/internals/Selection.d.ts +52 -0
  146. package/types/internals/SelectionModule.d.ts +27 -0
  147. package/types/internals/Settings.d.ts +20 -0
  148. package/types/internals/Snapping.d.ts +54 -0
  149. package/types/internals/Spatial.d.ts +50 -0
  150. package/types/internals/SpatialPrimitives.d.ts +75 -0
  151. package/types/internals/Storage.d.ts +46 -0
  152. package/types/internals/StyleRulesModule.d.ts +21 -0
  153. package/types/internals/Synchronizer.d.ts +17 -0
  154. package/types/internals/Tooltip.d.ts +25 -0
  155. package/types/internals/TooltipPrimitives.d.ts +21 -0
  156. package/types/internals/Topology.d.ts +50 -0
  157. package/types/internals/Touch.d.ts +16 -0
  158. package/types/internals/Transformations.d.ts +36 -0
  159. package/types/internals/VirtualMouse.d.ts +52 -0
  160. package/types/internals/WasmHGrid.d.ts +25 -0
  161. package/types/internals/WatcherModule.d.ts +25 -0
  162. package/types/internals/Workers.d.ts +79 -0
  163. package/types/internals/algorithmExports.d.ts +333 -0
  164. package/types/internals/algorithmHelpers.d.ts +36 -0
  165. package/types/internals/attributes/AttributesManager.d.ts +216 -0
  166. package/types/internals/attributes/ElementAttributesManager.d.ts +119 -0
  167. package/types/internals/attributes/attributeHelpers.d.ts +70 -0
  168. package/types/internals/attributes/flexArrayFactories.d.ts +277 -0
  169. package/types/internals/easing.d.ts +15 -0
  170. package/types/internals/helpers.d.ts +79 -0
  171. package/types/internals/hypergraphWorker.d.ts +37 -0
  172. package/types/internals/hypergraphWorkerHost.d.ts +40 -0
  173. package/types/internals/labels/SpatialGrid.d.ts +29 -0
  174. package/types/internals/labels/fillEdgeTexts.d.ts +25 -0
  175. package/types/internals/labels/fillNodeTexts.d.ts +24 -0
  176. package/types/internals/labels/helpers.d.ts +180 -0
  177. package/types/internals/layoutWorker.d.ts +21 -0
  178. package/types/internals/rendering/BoundariesManager.d.ts +53 -0
  179. package/types/internals/rendering/Buffer2.d.ts +91 -0
  180. package/types/internals/rendering/BufferList.d.ts +86 -0
  181. package/types/internals/rendering/CpuRenderer.d.ts +128 -0
  182. package/types/internals/rendering/EasingManager.d.ts +40 -0
  183. package/types/internals/rendering/EdgeDrawer.d.ts +54 -0
  184. package/types/internals/rendering/ElementGroup.d.ts +66 -0
  185. package/types/internals/rendering/MemoryManager.d.ts +71 -0
  186. package/types/internals/rendering/NodeDrawer.d.ts +49 -0
  187. package/types/internals/rendering/PatternManager.d.ts +29 -0
  188. package/types/internals/rendering/RENDER_MAPPING.d.ts +5 -0
  189. package/types/internals/rendering/RendererBase.d.ts +127 -0
  190. package/types/internals/rendering/ShapeManager.d.ts +46 -0
  191. package/types/internals/rendering/TextManager.d.ts +112 -0
  192. package/types/internals/rendering/canvasHelpers.d.ts +5 -0
  193. package/types/internals/rendering/constants.d.ts +125 -0
  194. package/types/internals/rendering/curveHelpers.d.ts +96 -0
  195. package/types/internals/rendering/drawerHelpers.d.ts +32 -0
  196. package/types/internals/rendering/float16.d.ts +25 -0
  197. package/types/internals/rendering/hitDetection.d.ts +89 -0
  198. package/types/internals/rendering/loadGraph.d.ts +103 -0
  199. package/types/internals/rendering/objectInfo.d.ts +46 -0
  200. package/types/internals/rendering/packing.d.ts +46 -0
  201. package/types/internals/rendering/shapeHelpers.d.ts +26 -0
  202. package/types/internals/rendering/types.d.ts +143 -0
  203. package/types/internals/renderingBinaryPrimitives.d.ts +110 -0
  204. package/types/internals/utilsExports.d.ts +408 -0
  205. package/types/internals/wasmBackend.d.ts +38 -0
  206. package/types/internals/wasmColumns.d.ts +61 -0
  207. package/types/internals/wasmInit.d.ts +1 -0
  208. package/types/modules/APIModule.d.ts +8 -0
  209. package/types/modules/AlgorithmsAPI.d.ts +15 -0
  210. package/types/modules/BrandAPI.d.ts +6 -0
  211. package/types/modules/CaptorAPI.d.ts +9 -0
  212. package/types/modules/ClassesAPI.d.ts +9 -0
  213. package/types/modules/DebugAPI.d.ts +18 -0
  214. package/types/modules/DisabledAPI.d.ts +11 -0
  215. package/types/modules/DomAPI.d.ts +9 -0
  216. package/types/modules/EventsAPI.d.ts +16 -0
  217. package/types/modules/ExportAPI.d.ts +23 -0
  218. package/types/modules/GeneratorsAPI.d.ts +12 -0
  219. package/types/modules/GeoAPI.d.ts +20 -0
  220. package/types/modules/GraphAPI.d.ts +26 -0
  221. package/types/modules/GraphicsAPI.d.ts +8 -0
  222. package/types/modules/HypergraphAPI.d.ts +71 -0
  223. package/types/modules/KeyboardAPI.d.ts +6 -0
  224. package/types/modules/LayersAPI.d.ts +7 -0
  225. package/types/modules/LayoutsAPI.d.ts +25 -0
  226. package/types/modules/LegendAPI.d.ts +9 -0
  227. package/types/modules/MouseAPI.d.ts +16 -0
  228. package/types/modules/ParseAPI.d.ts +83 -0
  229. package/types/modules/RulesAPI.d.ts +7 -0
  230. package/types/modules/SchemaAPI.d.ts +9 -0
  231. package/types/modules/SelectionAPI.d.ts +12 -0
  232. package/types/modules/SettingsAPI.d.ts +9 -0
  233. package/types/modules/StylesAPI.d.ts +64 -0
  234. package/types/modules/ToolsAPI.d.ts +68 -0
  235. package/types/modules/TransformationsAPI.d.ts +30 -0
  236. package/types/modules/ViewAPI.d.ts +52 -0
  237. package/types/publicTypes.d.ts +56 -0
  238. package/types/renderers/CanvasRenderer.d.ts +86 -0
  239. package/types/renderers/Renderer.d.ts +13 -0
  240. package/types/renderers/SVGRenderer.d.ts +57 -0
  241. package/types/renderers/WasmGraphRenderer.d.ts +118 -0
  242. package/types/renderers/WasmRendererAdapter.d.ts +38 -0
  243. package/types/tools/ConnectNodesAPI.d.ts +42 -0
  244. package/types/tools/LassoAPI.d.ts +78 -0
  245. package/types/tools/RectangleSelectAPI.d.ts +51 -0
  246. package/types/tools/ResizingAPI.d.ts +62 -0
  247. package/types/tools/RewiringAPI.d.ts +78 -0
  248. package/types/tools/SnappingAPI.d.ts +71 -0
  249. package/types/tools/ToolsAPI.d.ts +46 -0
  250. package/types/tools/TooltipAPI.d.ts +141 -0
  251. package/types/transformations/TransformationsEngine.d.ts +602 -0
  252. package/types/utils/index.d.ts +6 -0
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Simplifier driver. Orchestrates iterative atomic-operation application
3
+ * via a max-priority queue keyed on the priority measure (paper Eq. 1).
4
+ *
5
+ * Pipeline (paper §5.1, §5.2):
6
+ * 1. Compute statistics on H_0.
7
+ * 2. Enumerate every legal candidate op.
8
+ * 3. Push into priority queue.
9
+ * 4. Pop top op → apply → record on reversal stack.
10
+ * 5. Update statistics over operation footprint (lazy betweenness).
11
+ * 6. Re-evaluate legality + priority of footprint-touching ops.
12
+ * 7. Stop when terminating criterion met.
13
+ */
14
+ import { Hypergraph } from './Hypergraph';
15
+ import type { AtomicOperationRecord, HypergraphData, HypergraphId, SimplificationOptions } from './types';
16
+ export interface SimplifierResult {
17
+ /** Reversal stack: operations in reverse-application order H_0 → H_n. */
18
+ operations: AtomicOperationRecord[];
19
+ /** Captured snapshots H_0, H_1, ..., H_n. */
20
+ scales: HypergraphData[];
21
+ /** H_0 cardinality of every hyperedge that has ever existed in any
22
+ * scale. Used by the optimizer/reverser to size polygons per paper
23
+ * §5.3 ("we use the corresponding cardinalities saved from the
24
+ * original scale H_0"). For hyperedges that absorbed others via
25
+ * merger, this is the sum of the absorbed H_0 cardinalities. */
26
+ originalCardinality: Map<HypergraphId, number>;
27
+ }
28
+ export declare class Simplifier {
29
+ readonly H: Hypergraph;
30
+ constructor(H: Hypergraph);
31
+ run(opts?: SimplificationOptions): SimplifierResult;
32
+ /**
33
+ * WASM-accelerated path. Interns the hypergraph to integer ids, runs the Rust simplifier
34
+ * to get the operation sequence + originalCardinality, then replays the sequence on `this.H`
35
+ * via the real op objects — producing byte-identical records + scales to the pure-TS run.
36
+ * Returns null (caller falls back to the TS path) when the wasm module isn't loaded.
37
+ */
38
+ private _runWasm;
39
+ }
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Statistics over a hypergraph used by the simplifier priority measure
3
+ * (paper §4.2): vertex degree, hyperedge cardinality, betweenness centrality
4
+ * (Brandes on the König graph), adjacency factor.
5
+ */
6
+ import type { HypergraphId } from './types';
7
+ import type { Hypergraph } from './Hypergraph';
8
+ export interface Statistics {
9
+ degree: Map<HypergraphId, number>;
10
+ cardinality: Map<HypergraphId, number>;
11
+ betweenness: Map<HypergraphId, number>;
12
+ /** Adjacency factor Adj_t(v) and Adj_t(e), parameterized by t. */
13
+ adjacencyFactor: Map<HypergraphId, number>;
14
+ /** Pair adjacency a'_{uv} = a_{uv}^t for vertex pairs. Lazy-evaluated via getter. */
15
+ adjacencyPair: (a: HypergraphId, b: HypergraphId) => number;
16
+ /** Global ranges for normalizing the priority measure (Eq. 1). */
17
+ ranges: {
18
+ degree: {
19
+ min: number;
20
+ max: number;
21
+ };
22
+ cardinality: {
23
+ min: number;
24
+ max: number;
25
+ };
26
+ adjacency: {
27
+ min: number;
28
+ max: number;
29
+ };
30
+ betweenness: {
31
+ min: number;
32
+ max: number;
33
+ };
34
+ };
35
+ }
36
+ /**
37
+ * Brandes' algorithm for betweenness centrality on an undirected
38
+ * unweighted graph. Returns an array indexed by node index.
39
+ *
40
+ * Brandes 2001, "A Faster Algorithm for Betweenness Centrality".
41
+ * O(n·m) time, O(n+m) space. Used here on the König graph K(H).
42
+ */
43
+ export declare function brandesBetweenness(adj: number[][]): Float64Array;
44
+ /**
45
+ * Compute all statistics for the priority measure.
46
+ *
47
+ * @param t Power in adjacency factor; t=0 reduces to neighborhood size,
48
+ * t≥1 emphasizes high-multiplicity sharing. Paper recommends t=2.
49
+ */
50
+ export declare function computeStatistics<V, E>(H: Hypergraph<V, E>, t?: number): Statistics;
51
+ /**
52
+ * Adjacency factor (paper §4.2.1):
53
+ * Adj_t(v) = Σ_{u≠v} a_{uv}^t, Adj_t(e) = Σ_{f≠e} a_{ef}^t
54
+ */
55
+ export declare function computeAdjacencyFactor<V, E>(H: Hypergraph<V, E>, t?: number): Map<HypergraphId, number>;
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Strangled hyperedge (paper Fig. 6 (d)) — dual of strangled vertex.
3
+ *
4
+ * Detection runs the strangled-vertex algorithm on the dual hypergraph
5
+ * H' = ⟨E, V⟩, where each "vertex" of H' is an original hyperedge and
6
+ * each "hyperedge" of H' is the set of original hyperedges incident to
7
+ * an original vertex.
8
+ */
9
+ import { Hypergraph } from '../Hypergraph';
10
+ import type { ForbiddenSubgraph } from '../types';
11
+ export declare function buildDual<V, E>(H: Hypergraph<V, E>): Hypergraph<E, V>;
12
+ export declare function detectStrangledHyperedge(H: Hypergraph): ForbiddenSubgraph[];
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Strangled vertex (paper Fig. 6 (c)).
3
+ *
4
+ * A vertex v whose neighborhood H_{V_v ∪ {v}} contains a proper subset
5
+ * of incident hyperedges and adjacent vertices that form a cycle of
6
+ * length ≥3 around v in the König-graph sense.
7
+ *
8
+ * Detection: build the König-style alternating graph induced by v's
9
+ * 1-hop hyperedges and 1-hop adjacent vertices. Search for any cycle
10
+ * passing through ≥3 distinct hyperedges (plus their connecting
11
+ * vertices) that does NOT include v itself. Such a cycle "strangles"
12
+ * v because v is enclosed by a closed chain of polygons.
13
+ */
14
+ import type { Hypergraph } from '../Hypergraph';
15
+ import type { ForbiddenSubgraph } from '../types';
16
+ export declare function detectStrangledVertex(H: Hypergraph): ForbiddenSubgraph[];
@@ -0,0 +1,10 @@
1
+ /**
2
+ * 3-adjacent cluster of 2 hyperedges (paper Fig. 6 (a)).
3
+ *
4
+ * A pair (e, f) of hyperedges that share at least 3 common vertices.
5
+ * Such a pair forces self-intersection or non-strict-convexity in any
6
+ * polygon representation.
7
+ */
8
+ import type { Hypergraph } from '../Hypergraph';
9
+ import type { ForbiddenSubgraph } from '../types';
10
+ export declare function detectThreeAdjacentCluster2(H: Hypergraph): ForbiddenSubgraph[];
@@ -0,0 +1,14 @@
1
+ /**
2
+ * 2-adjacent cluster of 3 hyperedges (paper Fig. 6 (b)).
3
+ *
4
+ * Definition (paper §4.2.1): an "n-adjacent cluster of m hyperedges" is
5
+ * the partial hypergraph induced by a set of hyperedges J ⊆ E that
6
+ * **all** contain a common set of n ≥ 2 vertices X ⊆ V — that is, the
7
+ * intersection ∩_{e∈J} V_e ⊇ X with |X| = n.
8
+ *
9
+ * For (b), n = 2 and |J| = 3. Detection: enumerate triples of
10
+ * hyperedges and count their global intersection size.
11
+ */
12
+ import type { Hypergraph } from '../Hypergraph';
13
+ import type { ForbiddenSubgraph } from '../types';
14
+ export declare function detectTwoAdjacentCluster3(H: Hypergraph): ForbiddenSubgraph[];
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Forbidden sub-hypergraph detectors. From paper Theorem 2 / Fig. 6:
3
+ * a Zykov-planar hypergraph H has a convex polygon representation if
4
+ * and only if it contains none of:
5
+ *
6
+ * (a) 3-adjacent cluster of 2 hyperedges — pair sharing ≥3 vertices
7
+ * (b) 2-adjacent cluster of 3 hyperedges — triple where each pair shares ≥2
8
+ * (c) Strangled vertex — cycle of length ≥3 in the
9
+ * incidence neighborhood of v
10
+ * (d) Strangled hyperedge — dual of (c)
11
+ */
12
+ import type { Hypergraph } from '../Hypergraph';
13
+ import type { ForbiddenSubgraph, ForbiddenSubgraphKind, HypergraphId } from '../types';
14
+ import { detectThreeAdjacentCluster2 } from './ThreeAdjacentCluster2';
15
+ import { detectTwoAdjacentCluster3 } from './TwoAdjacentCluster3';
16
+ import { detectStrangledVertex } from './StrangledVertex';
17
+ import { detectStrangledHyperedge } from './StrangledHyperedge';
18
+ export declare const ALL_FORBIDDEN_KINDS: ForbiddenSubgraphKind[];
19
+ export declare function detectAllForbidden(H: Hypergraph, kinds?: ForbiddenSubgraphKind[]): ForbiddenSubgraph[];
20
+ /** Returns true if any forbidden sub-hypergraph touches the given footprint. */
21
+ export declare function forbiddenInFootprint(H: Hypergraph, vSet: Set<HypergraphId>, eSet: Set<HypergraphId>, kinds?: ForbiddenSubgraphKind[]): boolean;
22
+ export { detectThreeAdjacentCluster2, detectTwoAdjacentCluster3, detectStrangledVertex, detectStrangledHyperedge, };
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Public surface of the hypergraph subsystem. Re-exports the data
3
+ * model, simplifier, optimizer, reverser, renderers, and types.
4
+ */
5
+ export { Hypergraph } from './Hypergraph';
6
+ export { buildKoenigGraph, isHyperedgeIndex, type KoenigGraph } from './KoenigGraph';
7
+ export { computeStatistics, computeAdjacencyFactor, brandesBetweenness, type Statistics, } from './Statistics';
8
+ export { VertexRemoval, HyperedgeRemoval, VertexMerger, HyperedgeMerger, enumerateCandidates, operationFromRecord, computePriority, type AtomicOperation, } from './operations';
9
+ export { detectAllForbidden, forbiddenInFootprint, ALL_FORBIDDEN_KINDS, detectThreeAdjacentCluster2, detectTwoAdjacentCluster3, detectStrangledVertex, detectStrangledHyperedge, } from './forbidden';
10
+ export { buildDual } from './forbidden/StrangledHyperedge';
11
+ export { Simplifier, type SimplifierResult } from './Simplifier';
12
+ export { evaluateEnergy, type LayoutModel, } from './layout/Energy';
13
+ export { minimizeLBFGS, type LBFGSOptions, type LBFGSResult } from './layout/LBFGS';
14
+ export { minimizeAdam, type AdamOptions } from './layout/Adam';
15
+ export { optimize, buildModel, refreshModelOrdering, type OptimizerInput, type OptimizerResult, } from './layout/Optimizer';
16
+ export { reverse, type ReverserInput, type ReverserResult, } from './layout/Reverser';
17
+ export { createPolygonDraw, applyDefaults, type PolygonRenderState, } from './render/PolygonRenderer';
18
+ export { createSVGDraw } from './render/SVGPolygonRenderer';
19
+ export { hitTest, screenToWorld, type HitResult, type HitTestState } from './render/Interaction';
20
+ export { adaptOsfkbGraph, fetchOsfkbHypergraph, fetchOsfkbLattice, fetchOsfkbLatticeAll, fetchOsfkbDerivation, fetchOsfkbResiduation, fetchOsfkbTermState, fetchOsfkbGlbLub, fetchOsfkbUnifyTerms, fetchOsfkbFunctions, fetchOsfkbBranchDiff, fetchOsfkbOsfqlAsGraph, fetchOsfkbFuzzyUnify, fetchOsfkbGradedPoset, fetchOsfkbGradedPosetAll, fetchOsfkbSortNeighborhood, subscribeOsfkbDerivationStream, type OsfkbVisualizationGraph, type OsfkbVisualizationResponse, type OsfkbAdapterResult, type OsfkbClientOptions, type OsfkbCoreferenceGroup, type AdaptOptions, } from './osfkb/adapter';
21
+ export type { HypergraphData, HypergraphVertex, HypergraphHyperedge, HypergraphId, HypergraphRenderOptions, InteractionEvent, AtomicOperationKind, AtomicOperationRecord, ForbiddenSubgraph, ForbiddenSubgraphKind, SimplificationOptions, LayoutOptions, LayoutWeights, LayoutProgress, QualityMetrics, Vec2, } from './types';
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Adam optimizer fallback. Selectable when L-BFGS line search fails on
3
+ * a pathological dataset.
4
+ */
5
+ import type { LBFGSOptions, ObjectiveFn, LBFGSResult } from './LBFGS';
6
+ export interface AdamOptions extends Pick<LBFGSOptions, 'maxIter' | 'tol' | 'mask' | 'onIter'> {
7
+ lr?: number;
8
+ beta1?: number;
9
+ beta2?: number;
10
+ eps?: number;
11
+ }
12
+ export declare function minimizeAdam(f: ObjectiveFn, x0: Float64Array, opts?: AdamOptions): LBFGSResult;
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Energy terms for the polygon-layout objective (paper §5.3, building
3
+ * on Qu et al. [41]). Five terms:
4
+ *
5
+ * 1. Polygon regularity E_reg
6
+ * 2. Polygon area E_area
7
+ * 3. Polygon separation E_sep
8
+ * 4. Regularity intersection (convexity recovery) E_int
9
+ * 5. Primal-dual coordination E_pd
10
+ *
11
+ * State vectors:
12
+ * x : Float64Array of length 2|V| (primal vertex positions)
13
+ * y : Float64Array of length 2|E| (dual vertex positions = primal hyperedge centroids)
14
+ */
15
+ import type { LayoutWeights } from '../types';
16
+ export interface LayoutModel {
17
+ /** vertex id → flat index 0..|V|-1 */
18
+ vIndex: Map<string | number, number>;
19
+ /** hyperedge id → flat index 0..|E|-1 */
20
+ eIndex: Map<string | number, number>;
21
+ vCount: number;
22
+ eCount: number;
23
+ /** Per-hyperedge: list of vertex flat-indices (sorted CCW around centroid). */
24
+ hyperedgeVerts: number[][];
25
+ /** Per-hyperedge: cardinality (equal to hyperedgeVerts[i].length, cached). */
26
+ cardinality: number[];
27
+ /** Per-hyperedge: cardinality used for E_area / E_sep in the regularity
28
+ * phase. Paper §5.3: "we use the corresponding cardinalities saved
29
+ * from the original scale H_0" — for hyperedges that have absorbed
30
+ * others via merger, this is the sum of merged H_0 cardinalities;
31
+ * for hyperedges intact since H_0, this equals the H_0 cardinality. */
32
+ originalCardinality: number[];
33
+ /** Per-hyperedge: target polygon area A*(k). Computed from
34
+ * originalCardinality, not the current k. */
35
+ targetArea: number[];
36
+ /** Per-vertex: list of hyperedge flat-indices that contain it. */
37
+ vertexInHyperedges: number[][];
38
+ /** Buffer distance d_b for separation energy. */
39
+ bufferDistance: number;
40
+ /** Which phase the energy evaluator should use for the separation
41
+ * d_0 formula. 'separation' uses Eq. 3 (½ sum of current diameters
42
+ * + d_b); 'regularity' uses the circumradius of the regular polygon
43
+ * with originalCardinality and targetArea. */
44
+ phase: 'separation' | 'regularity';
45
+ }
46
+ /**
47
+ * Compute total energy and its gradient w.r.t. (x, y).
48
+ *
49
+ * Returns { energy, grad } where grad is a flat Float64Array of length
50
+ * 2*(|V| + |E|): first 2|V| entries are ∂E/∂x, next 2|E| are ∂E/∂y.
51
+ */
52
+ export declare function evaluateEnergy(model: LayoutModel, state: Float64Array, weights: LayoutWeights): {
53
+ energy: number;
54
+ grad: Float64Array;
55
+ };
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Limited-memory BFGS solver. m=8 by default. Backtracking Armijo line
3
+ * search (sufficient for our convex-ish energy basin once separation is
4
+ * resolved). No external dependencies.
5
+ *
6
+ * Used by the hypergraph layout optimizer; the paper specifically cites
7
+ * primal-dual quasi-Newton methods because the energy Hessian is ill-
8
+ * conditioned (regularity term curvature ≫ coordination term curvature).
9
+ */
10
+ export interface LBFGSOptions {
11
+ m?: number;
12
+ maxIter?: number;
13
+ tol?: number;
14
+ c1?: number;
15
+ alphaInit?: number;
16
+ alphaShrink?: number;
17
+ maxLineSearch?: number;
18
+ /** Optional mask: if mask[i] is false, gradient and step are zeroed for index i. */
19
+ mask?: Uint8Array;
20
+ onIter?: (iter: number, f: number, gnorm: number) => void;
21
+ }
22
+ export type ObjectiveFn = (x: Float64Array) => {
23
+ energy: number;
24
+ grad: Float64Array;
25
+ };
26
+ export interface LBFGSResult {
27
+ x: Float64Array;
28
+ energy: number;
29
+ iterations: number;
30
+ converged: boolean;
31
+ }
32
+ export declare function minimizeLBFGS(f: ObjectiveFn, x0: Float64Array, opts?: LBFGSOptions): LBFGSResult;
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Two-phase polygon-layout optimizer (paper §5.3).
3
+ *
4
+ * Phase 1 (separation): only E_sep + E_pd active. Spreads apart any
5
+ * initial overlaps.
6
+ * Phase 2 (regularity): all five terms active with paper weights.
7
+ */
8
+ import type { Hypergraph } from '../Hypergraph';
9
+ import { type LayoutModel } from './Energy';
10
+ import type { LayoutOptions, HypergraphId } from '../types';
11
+ import { sortPointsCCW } from '../../geometry/index';
12
+ export interface OptimizerInput {
13
+ H: Hypergraph;
14
+ /** Optional initial vertex positions; missing vertices placed on a circle. */
15
+ initialPositions?: Map<HypergraphId, {
16
+ x: number;
17
+ y: number;
18
+ }>;
19
+ /** Optional initial dual positions (hyperedge centroids); auto-computed if absent. */
20
+ initialDualPositions?: Map<HypergraphId, {
21
+ x: number;
22
+ y: number;
23
+ }>;
24
+ /** Original H_0 hyperedge cardinalities. Used by E_area / E_sep in the
25
+ * regularity phase per paper §5.3 — when a hyperedge in H_n has
26
+ * absorbed others via merger, its target area should reflect the
27
+ * total of the merged H_0 cardinalities, not the current H_n vertex
28
+ * count. Pass `null`/undefined to fall back to current cardinality. */
29
+ originalCardinality?: Map<HypergraphId, number>;
30
+ options: LayoutOptions;
31
+ }
32
+ export interface OptimizerResult {
33
+ vertexPositions: Map<HypergraphId, {
34
+ x: number;
35
+ y: number;
36
+ }>;
37
+ dualPositions: Map<HypergraphId, {
38
+ x: number;
39
+ y: number;
40
+ }>;
41
+ energy: number;
42
+ iterations: number;
43
+ /** Float64Array state for debugging / chaining. */
44
+ state: Float64Array;
45
+ model: LayoutModel;
46
+ }
47
+ export declare function optimize(input: OptimizerInput): OptimizerResult;
48
+ /**
49
+ * Build the per-call layout model: maps ids to flat indices, sorts each
50
+ * hyperedge's vertex list CCW around its centroid (by initial positions),
51
+ * and computes target areas.
52
+ */
53
+ export declare function buildModel(H: Hypergraph, targetA: (k: number) => number, bufferDistance: number, originalCardinality?: Map<HypergraphId, number>): LayoutModel;
54
+ /**
55
+ * Re-sort each hyperedge's vertex list CCW around its current centroid.
56
+ * Called inside the objective so the regularity / area terms see a
57
+ * coherent ordering even as positions move.
58
+ */
59
+ export declare function refreshModelOrdering(model: LayoutModel, state: Float64Array): void;
60
+ export { sortPointsCCW };
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Iterative reversal with locally-frozen optimization (paper §5.3).
3
+ *
4
+ * Pop applied operations off the simplifier stack one at a time; for
5
+ * each:
6
+ * 1. Apply the inverse to recover the predecessor scale H_i.
7
+ * 2. Compute the operation footprint F.
8
+ * 3. Run the regularity-phase L-BFGS over the full state but with a
9
+ * mask that freezes any vertex / dual-vertex outside F. This keeps
10
+ * per-step cost roughly constant rather than O(|V|+|E|).
11
+ */
12
+ import { Hypergraph } from '../Hypergraph';
13
+ import type { AtomicOperationRecord, HypergraphId, LayoutOptions } from '../types';
14
+ export interface ReverserInput {
15
+ /** Current simplest hypergraph H_n (will be mutated in place into H_0). */
16
+ H: Hypergraph;
17
+ /** Reversal stack from the simplifier (most-recent op last). */
18
+ operations: AtomicOperationRecord[];
19
+ /** Vertex positions at H_n. */
20
+ vertexPositions: Map<HypergraphId, {
21
+ x: number;
22
+ y: number;
23
+ }>;
24
+ dualPositions: Map<HypergraphId, {
25
+ x: number;
26
+ y: number;
27
+ }>;
28
+ /** H_0 cardinalities of every hyperedge that ever existed (paper §5.3). */
29
+ originalCardinality?: Map<HypergraphId, number>;
30
+ options: LayoutOptions;
31
+ }
32
+ export interface ReverserResult {
33
+ vertexPositions: Map<HypergraphId, {
34
+ x: number;
35
+ y: number;
36
+ }>;
37
+ dualPositions: Map<HypergraphId, {
38
+ x: number;
39
+ y: number;
40
+ }>;
41
+ }
42
+ export declare function reverse(input: ReverserInput): ReverserResult;
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Atomic simplification operations and their inverses (paper §4.1).
3
+ *
4
+ * Four primal-dual pairs:
5
+ * - Vertex Removal ↔ Vertex Addition
6
+ * - Hyperedge Removal ↔ Hyperedge Addition
7
+ * - Vertex Merger ↔ Vertex Split
8
+ * - Hyperedge Merger ↔ Hyperedge Split
9
+ *
10
+ * Vertex/hyperedge removal correspond under primal-dual swap, as do
11
+ * the mergers (Fig. 5 of the paper).
12
+ */
13
+ import type { AtomicOperationKind, AtomicOperationRecord, HypergraphId } from '../types';
14
+ import type { Hypergraph } from '../Hypergraph';
15
+ import type { Statistics } from '../Statistics';
16
+ export interface OperationCandidate {
17
+ kind: AtomicOperationKind;
18
+ vertices: HypergraphId[];
19
+ hyperedges: HypergraphId[];
20
+ }
21
+ export interface AtomicOperation {
22
+ kind: AtomicOperationKind;
23
+ /** Returns true if applying this op preserves connectivity and respects merger legality. */
24
+ isLegal(H: Hypergraph): boolean;
25
+ /** Apply mutation. Returns a record sufficient to invert. */
26
+ apply(H: Hypergraph): AtomicOperationRecord;
27
+ /** Reverse a previously applied operation given its record. */
28
+ invert(H: Hypergraph, record: AtomicOperationRecord): void;
29
+ /** Footprint = elements affected (used for local re-optimization on reversal). */
30
+ footprint(H: Hypergraph): {
31
+ vertices: HypergraphId[];
32
+ hyperedges: HypergraphId[];
33
+ };
34
+ /** Priority (paper Eq. 1 + max-of-footprint per Eq. 2). */
35
+ priority(H: Hypergraph, S: Statistics, weights: {
36
+ alpha: number;
37
+ beta: number;
38
+ gamma: number;
39
+ }): number;
40
+ }
41
+ /**
42
+ * Compute paper Eq. 1: P(O) = α·d̂_O' + β·ā_O' + γ·b̄_O' where each
43
+ * primed value is normalized via global min/max ranges of S.
44
+ *
45
+ * d̂_O = max(degree, cardinality) over the operation footprint (Eq. 2).
46
+ * ā_O = average adjacency factor of the operands (only meaningful for
47
+ * merger ops; for removal ops we use the operand's own factor).
48
+ * b̄_O = average betweenness of the operands.
49
+ */
50
+ export declare function computePriority(S: Statistics, weights: {
51
+ alpha: number;
52
+ beta: number;
53
+ gamma: number;
54
+ }, footprintMaxDegOrCard: number, operandsAvgAdj: number, operandsAvgBetween: number): number;
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Hyperedge Merger: collapses a pair of adjacent hyperedges (e, f) into
3
+ * a single hyperedge (we keep `e` and absorb `f`). The retained
4
+ * hyperedge's vertex set becomes V_e ∪ V_f.
5
+ *
6
+ * Legality (paper §5.1): legal iff a_{ef} ≥ 2 (the hyperedges share ≥2
7
+ * vertices) — guarantees the merger doesn't introduce non-adjacent pairs.
8
+ */
9
+ import type { Hypergraph } from '../Hypergraph';
10
+ import type { Statistics } from '../Statistics';
11
+ import type { AtomicOperationRecord, HypergraphId } from '../types';
12
+ import { type AtomicOperation } from './AtomicOperation';
13
+ export declare class HyperedgeMerger implements AtomicOperation {
14
+ readonly retained: HypergraphId;
15
+ readonly absorbed: HypergraphId;
16
+ kind: "hyperedgeMerger";
17
+ constructor(retained: HypergraphId, absorbed: HypergraphId);
18
+ isLegal(H: Hypergraph): boolean;
19
+ apply(H: Hypergraph): AtomicOperationRecord;
20
+ invert(H: Hypergraph, record: AtomicOperationRecord): void;
21
+ footprint(H: Hypergraph): {
22
+ vertices: HypergraphId[];
23
+ hyperedges: HypergraphId[];
24
+ };
25
+ priority(H: Hypergraph, S: Statistics, w: {
26
+ alpha: number;
27
+ beta: number;
28
+ gamma: number;
29
+ }): number;
30
+ }
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Hyperedge Removal: deletes a hyperedge e from H. Dual of vertex removal.
3
+ *
4
+ * Legality (paper §5.1): every pair of vertices incident to e must remain
5
+ * adjacent (share at least one other hyperedge). Plus connectivity.
6
+ */
7
+ import type { Hypergraph } from '../Hypergraph';
8
+ import type { Statistics } from '../Statistics';
9
+ import type { AtomicOperationRecord, HypergraphId } from '../types';
10
+ import { type AtomicOperation } from './AtomicOperation';
11
+ export declare class HyperedgeRemoval implements AtomicOperation {
12
+ readonly eid: HypergraphId;
13
+ kind: "hyperedgeRemoval";
14
+ constructor(eid: HypergraphId);
15
+ isLegal(H: Hypergraph): boolean;
16
+ apply(H: Hypergraph): AtomicOperationRecord;
17
+ invert(H: Hypergraph, record: AtomicOperationRecord): void;
18
+ footprint(H: Hypergraph): {
19
+ vertices: HypergraphId[];
20
+ hyperedges: HypergraphId[];
21
+ };
22
+ priority(H: Hypergraph, S: Statistics, w: {
23
+ alpha: number;
24
+ beta: number;
25
+ gamma: number;
26
+ }): number;
27
+ }
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Vertex Merger: collapses a pair of adjacent vertices (u, v) into a
3
+ * single vertex (we keep `u` and absorb `v`). The retained vertex's
4
+ * incidence becomes E_u ∪ E_v.
5
+ *
6
+ * Legality (paper §5.1): legal iff a_{uv} ≥ 2 (the vertices already share
7
+ * ≥2 hyperedges) — guarantees the merger doesn't introduce non-adjacent
8
+ * pairs of remaining elements. Plus connectivity (always preserved by a
9
+ * merger of adjacent vertices in a connected hypergraph).
10
+ */
11
+ import type { Hypergraph } from '../Hypergraph';
12
+ import type { Statistics } from '../Statistics';
13
+ import type { AtomicOperationRecord, HypergraphId } from '../types';
14
+ import { type AtomicOperation } from './AtomicOperation';
15
+ export declare class VertexMerger implements AtomicOperation {
16
+ readonly retained: HypergraphId;
17
+ readonly absorbed: HypergraphId;
18
+ kind: "vertexMerger";
19
+ constructor(retained: HypergraphId, absorbed: HypergraphId);
20
+ isLegal(H: Hypergraph): boolean;
21
+ apply(H: Hypergraph): AtomicOperationRecord;
22
+ invert(H: Hypergraph, record: AtomicOperationRecord): void;
23
+ footprint(H: Hypergraph): {
24
+ vertices: HypergraphId[];
25
+ hyperedges: HypergraphId[];
26
+ };
27
+ priority(H: Hypergraph, S: Statistics, w: {
28
+ alpha: number;
29
+ beta: number;
30
+ gamma: number;
31
+ }): number;
32
+ }
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Vertex Removal: deletes a vertex v from H. The vertex is removed from
3
+ * every incident hyperedge's vertex set. Inverse: re-add v with its
4
+ * original incidence list.
5
+ *
6
+ * Legality (paper §5.1): removal is legal only if no pair of hyperedges
7
+ * incident to v becomes non-adjacent as a consequence. We also require
8
+ * connectivity preservation.
9
+ */
10
+ import type { Hypergraph } from '../Hypergraph';
11
+ import type { Statistics } from '../Statistics';
12
+ import type { AtomicOperationRecord, HypergraphId } from '../types';
13
+ import { type AtomicOperation } from './AtomicOperation';
14
+ export declare class VertexRemoval implements AtomicOperation {
15
+ readonly vid: HypergraphId;
16
+ kind: "vertexRemoval";
17
+ constructor(vid: HypergraphId);
18
+ isLegal(H: Hypergraph): boolean;
19
+ apply(H: Hypergraph): AtomicOperationRecord;
20
+ invert(H: Hypergraph, record: AtomicOperationRecord): void;
21
+ footprint(H: Hypergraph): {
22
+ vertices: HypergraphId[];
23
+ hyperedges: HypergraphId[];
24
+ };
25
+ priority(H: Hypergraph, S: Statistics, w: {
26
+ alpha: number;
27
+ beta: number;
28
+ gamma: number;
29
+ }): number;
30
+ }
@@ -0,0 +1,19 @@
1
+ export { VertexRemoval } from './VertexRemoval';
2
+ export { HyperedgeRemoval } from './HyperedgeRemoval';
3
+ export { VertexMerger } from './VertexMerger';
4
+ export { HyperedgeMerger } from './HyperedgeMerger';
5
+ export { computePriority } from './AtomicOperation';
6
+ export type { AtomicOperation, OperationCandidate } from './AtomicOperation';
7
+ import type { AtomicOperation } from './AtomicOperation';
8
+ import type { AtomicOperationRecord } from '../types';
9
+ import type { Hypergraph } from '../Hypergraph';
10
+ /**
11
+ * Reconstruct an operation object from a record so the simplifier can
12
+ * invert ops it didn't synthesize itself (e.g. on JSON-roundtrip).
13
+ */
14
+ export declare function operationFromRecord(record: AtomicOperationRecord): AtomicOperation;
15
+ /**
16
+ * Enumerate all candidate operations on the given hypergraph.
17
+ * Used by the simplifier to seed its priority queue.
18
+ */
19
+ export declare function enumerateCandidates(H: Hypergraph): AtomicOperation[];