@graphty/layout 1.2.9 → 1.4.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.
- package/README.md +400 -409
- package/dist/layout.js +884 -817
- package/dist/layout.js.map +1 -1
- package/dist/src/algorithms/index.d.ts +3 -2
- package/dist/src/algorithms/index.d.ts.map +1 -0
- package/dist/src/algorithms/index.js +2 -2
- package/dist/src/algorithms/index.js.map +1 -1
- package/dist/src/algorithms/optimization/index.d.ts +5 -4
- package/dist/src/algorithms/optimization/index.d.ts.map +1 -0
- package/dist/src/algorithms/optimization/index.js +3 -3
- package/dist/src/algorithms/optimization/index.js.map +1 -1
- package/dist/src/algorithms/optimization/kamada-kawai-solver.d.ts +3 -5
- package/dist/src/algorithms/optimization/kamada-kawai-solver.d.ts.map +1 -0
- package/dist/src/algorithms/optimization/kamada-kawai-solver.js +6 -9
- package/dist/src/algorithms/optimization/kamada-kawai-solver.js.map +1 -1
- package/dist/src/algorithms/optimization/lbfgs.d.ts +3 -3
- package/dist/src/algorithms/optimization/lbfgs.d.ts.map +1 -0
- package/dist/src/algorithms/optimization/lbfgs.js +5 -7
- package/dist/src/algorithms/optimization/lbfgs.js.map +1 -1
- package/dist/src/algorithms/optimization/line-search.d.ts +1 -1
- package/dist/src/algorithms/optimization/line-search.d.ts.map +1 -0
- package/dist/src/algorithms/optimization/line-search.js +0 -1
- package/dist/src/algorithms/optimization/line-search.js.map +1 -1
- package/dist/src/algorithms/optimization/types.d.ts +2 -1
- package/dist/src/algorithms/optimization/types.d.ts.map +1 -0
- package/dist/src/algorithms/planarity/check.d.ts +5 -4
- package/dist/src/algorithms/planarity/check.d.ts.map +1 -0
- package/dist/src/algorithms/planarity/check.js +6 -6
- package/dist/src/algorithms/planarity/check.js.map +1 -1
- package/dist/src/algorithms/planarity/embedding.d.ts +5 -6
- package/dist/src/algorithms/planarity/embedding.d.ts.map +1 -0
- package/dist/src/algorithms/planarity/embedding.js +15 -14
- package/dist/src/algorithms/planarity/embedding.js.map +1 -1
- package/dist/src/algorithms/planarity/index.d.ts +5 -4
- package/dist/src/algorithms/planarity/index.d.ts.map +1 -0
- package/dist/src/algorithms/planarity/index.js +4 -4
- package/dist/src/algorithms/planarity/index.js.map +1 -1
- package/dist/src/algorithms/planarity/lr-test.d.ts +3 -2
- package/dist/src/algorithms/planarity/lr-test.d.ts.map +1 -0
- package/dist/src/algorithms/planarity/lr-test.js +2 -2
- package/dist/src/algorithms/planarity/lr-test.js.map +1 -1
- package/dist/src/algorithms/planarity/special-graphs.d.ts +2 -4
- package/dist/src/algorithms/planarity/special-graphs.d.ts.map +1 -0
- package/dist/src/algorithms/planarity/special-graphs.js +18 -15
- package/dist/src/algorithms/planarity/special-graphs.js.map +1 -1
- package/dist/src/generators/basic.d.ts +2 -1
- package/dist/src/generators/basic.d.ts.map +1 -0
- package/dist/src/generators/basic.js +4 -4
- package/dist/src/generators/basic.js.map +1 -1
- package/dist/src/generators/bipartite.d.ts +2 -1
- package/dist/src/generators/bipartite.d.ts.map +1 -0
- package/dist/src/generators/bipartite.js +2 -2
- package/dist/src/generators/bipartite.js.map +1 -1
- package/dist/src/generators/grid.d.ts +2 -1
- package/dist/src/generators/grid.d.ts.map +1 -0
- package/dist/src/generators/grid.js +1 -1
- package/dist/src/generators/grid.js.map +1 -1
- package/dist/src/generators/index.d.ts +6 -5
- package/dist/src/generators/index.d.ts.map +1 -0
- package/dist/src/generators/index.js +5 -5
- package/dist/src/generators/index.js.map +1 -1
- package/dist/src/generators/random.d.ts +2 -1
- package/dist/src/generators/random.d.ts.map +1 -0
- package/dist/src/generators/random.js +2 -2
- package/dist/src/generators/random.js.map +1 -1
- package/dist/src/generators/scale-free.d.ts +2 -1
- package/dist/src/generators/scale-free.d.ts.map +1 -0
- package/dist/src/generators/scale-free.js +4 -4
- package/dist/src/generators/scale-free.js.map +1 -1
- package/dist/src/index.d.ts +5 -4
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +4 -4
- package/dist/src/layouts/basic/index.d.ts +2 -1
- package/dist/src/layouts/basic/index.d.ts.map +1 -0
- package/dist/src/layouts/basic/index.js +1 -1
- package/dist/src/layouts/basic/random.d.ts +2 -2
- package/dist/src/layouts/basic/random.d.ts.map +1 -0
- package/dist/src/layouts/basic/random.js +4 -5
- package/dist/src/layouts/basic/random.js.map +1 -1
- package/dist/src/layouts/force-directed/arf.d.ts +2 -2
- package/dist/src/layouts/force-directed/arf.d.ts.map +1 -0
- package/dist/src/layouts/force-directed/arf.js +13 -8
- package/dist/src/layouts/force-directed/arf.js.map +1 -1
- package/dist/src/layouts/force-directed/forceatlas2.d.ts +4 -4
- package/dist/src/layouts/force-directed/forceatlas2.d.ts.map +1 -0
- package/dist/src/layouts/force-directed/forceatlas2.js +83 -51
- package/dist/src/layouts/force-directed/forceatlas2.js.map +1 -1
- package/dist/src/layouts/force-directed/fruchterman-reingold.d.ts +12 -12
- package/dist/src/layouts/force-directed/fruchterman-reingold.d.ts.map +1 -0
- package/dist/src/layouts/force-directed/fruchterman-reingold.js +18 -18
- package/dist/src/layouts/force-directed/fruchterman-reingold.js.map +1 -1
- package/dist/src/layouts/force-directed/index.d.ts +6 -5
- package/dist/src/layouts/force-directed/index.d.ts.map +1 -0
- package/dist/src/layouts/force-directed/index.js +5 -5
- package/dist/src/layouts/force-directed/index.js.map +1 -1
- package/dist/src/layouts/force-directed/kamada-kawai.d.ts +3 -3
- package/dist/src/layouts/force-directed/kamada-kawai.d.ts.map +1 -0
- package/dist/src/layouts/force-directed/kamada-kawai.js +13 -11
- package/dist/src/layouts/force-directed/kamada-kawai.js.map +1 -1
- package/dist/src/layouts/force-directed/spring.d.ts +12 -12
- package/dist/src/layouts/force-directed/spring.d.ts.map +1 -0
- package/dist/src/layouts/force-directed/spring.js +11 -12
- package/dist/src/layouts/force-directed/spring.js.map +1 -1
- package/dist/src/layouts/geometric/circular.d.ts +2 -2
- package/dist/src/layouts/geometric/circular.d.ts.map +1 -0
- package/dist/src/layouts/geometric/circular.js +11 -10
- package/dist/src/layouts/geometric/circular.js.map +1 -1
- package/dist/src/layouts/geometric/index.d.ts +4 -3
- package/dist/src/layouts/geometric/index.d.ts.map +1 -0
- package/dist/src/layouts/geometric/index.js +3 -3
- package/dist/src/layouts/geometric/shell.d.ts +2 -2
- package/dist/src/layouts/geometric/shell.d.ts.map +1 -0
- package/dist/src/layouts/geometric/shell.js +6 -6
- package/dist/src/layouts/geometric/shell.js.map +1 -1
- package/dist/src/layouts/geometric/spiral.d.ts +2 -2
- package/dist/src/layouts/geometric/spiral.d.ts.map +1 -0
- package/dist/src/layouts/geometric/spiral.js +6 -10
- package/dist/src/layouts/geometric/spiral.js.map +1 -1
- package/dist/src/layouts/hierarchical/bfs.d.ts +3 -3
- package/dist/src/layouts/hierarchical/bfs.d.ts.map +1 -0
- package/dist/src/layouts/hierarchical/bfs.js +6 -7
- package/dist/src/layouts/hierarchical/bfs.js.map +1 -1
- package/dist/src/layouts/hierarchical/bipartite.d.ts +3 -3
- package/dist/src/layouts/hierarchical/bipartite.d.ts.map +1 -0
- package/dist/src/layouts/hierarchical/bipartite.js +9 -10
- package/dist/src/layouts/hierarchical/bipartite.js.map +1 -1
- package/dist/src/layouts/hierarchical/index.d.ts +4 -3
- package/dist/src/layouts/hierarchical/index.d.ts.map +1 -0
- package/dist/src/layouts/hierarchical/index.js +3 -3
- package/dist/src/layouts/hierarchical/index.js.map +1 -1
- package/dist/src/layouts/hierarchical/multipartite.d.ts +3 -3
- package/dist/src/layouts/hierarchical/multipartite.d.ts.map +1 -0
- package/dist/src/layouts/hierarchical/multipartite.js +9 -10
- package/dist/src/layouts/hierarchical/multipartite.js.map +1 -1
- package/dist/src/layouts/index.d.ts +6 -5
- package/dist/src/layouts/index.d.ts.map +1 -0
- package/dist/src/layouts/index.js +5 -5
- package/dist/src/layouts/index.js.map +1 -1
- package/dist/src/layouts/specialized/index.d.ts +3 -2
- package/dist/src/layouts/specialized/index.d.ts.map +1 -0
- package/dist/src/layouts/specialized/index.js +2 -2
- package/dist/src/layouts/specialized/index.js.map +1 -1
- package/dist/src/layouts/specialized/planar.d.ts +2 -2
- package/dist/src/layouts/specialized/planar.d.ts.map +1 -0
- package/dist/src/layouts/specialized/planar.js +6 -7
- package/dist/src/layouts/specialized/planar.js.map +1 -1
- package/dist/src/layouts/specialized/spectral.d.ts +2 -2
- package/dist/src/layouts/specialized/spectral.d.ts.map +1 -0
- package/dist/src/layouts/specialized/spectral.js +31 -21
- package/dist/src/layouts/specialized/spectral.js.map +1 -1
- package/dist/src/types/embedding.d.ts +2 -1
- package/dist/src/types/embedding.d.ts.map +1 -0
- package/dist/src/types/graph.d.ts +2 -1
- package/dist/src/types/graph.d.ts.map +1 -0
- package/dist/src/types/index.d.ts +4 -3
- package/dist/src/types/index.d.ts.map +1 -0
- package/dist/src/types/index.js +3 -3
- package/dist/src/types/index.js.map +1 -1
- package/dist/src/types/layout.d.ts +2 -1
- package/dist/src/types/layout.d.ts.map +1 -0
- package/dist/src/utils/graph.d.ts +2 -5
- package/dist/src/utils/graph.d.ts.map +1 -0
- package/dist/src/utils/graph.js +4 -6
- package/dist/src/utils/graph.js.map +1 -1
- package/dist/src/utils/index.d.ts +6 -5
- package/dist/src/utils/index.d.ts.map +1 -0
- package/dist/src/utils/index.js +5 -5
- package/dist/src/utils/index.js.map +1 -1
- package/dist/src/utils/numpy.d.ts +5 -4
- package/dist/src/utils/numpy.d.ts.map +1 -0
- package/dist/src/utils/numpy.js +22 -16
- package/dist/src/utils/numpy.js.map +1 -1
- package/dist/src/utils/params.d.ts +2 -2
- package/dist/src/utils/params.d.ts.map +1 -0
- package/dist/src/utils/params.js +0 -1
- package/dist/src/utils/params.js.map +1 -1
- package/dist/src/utils/random.d.ts +18 -0
- package/dist/src/utils/random.d.ts.map +1 -0
- package/dist/src/utils/random.js +18 -1
- package/dist/src/utils/random.js.map +1 -1
- package/dist/src/utils/rescale.d.ts +2 -3
- package/dist/src/utils/rescale.d.ts.map +1 -0
- package/dist/src/utils/rescale.js +12 -10
- package/dist/src/utils/rescale.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +35 -34
- package/src/algorithms/index.ts +2 -2
- package/src/algorithms/optimization/index.ts +4 -8
- package/src/algorithms/optimization/kamada-kawai-solver.ts +170 -179
- package/src/algorithms/optimization/lbfgs.ts +42 -49
- package/src/algorithms/optimization/line-search.ts +27 -28
- package/src/algorithms/optimization/types.ts +2 -2
- package/src/algorithms/planarity/check.ts +23 -23
- package/src/algorithms/planarity/embedding.ts +160 -171
- package/src/algorithms/planarity/index.ts +4 -8
- package/src/algorithms/planarity/lr-test.ts +46 -46
- package/src/algorithms/planarity/special-graphs.ts +73 -83
- package/src/generators/basic.ts +57 -57
- package/src/generators/bipartite.ts +37 -31
- package/src/generators/grid.ts +28 -28
- package/src/generators/index.ts +5 -11
- package/src/generators/random.ts +26 -25
- package/src/generators/scale-free.ts +56 -55
- package/src/index.ts +5 -5
- package/src/layouts/basic/index.ts +1 -1
- package/src/layouts/basic/random.ts +20 -16
- package/src/layouts/force-directed/arf.ts +107 -105
- package/src/layouts/force-directed/forceatlas2.ts +374 -352
- package/src/layouts/force-directed/fruchterman-reingold.ts +133 -134
- package/src/layouts/force-directed/index.ts +5 -5
- package/src/layouts/force-directed/kamada-kawai.ts +77 -80
- package/src/layouts/force-directed/spring.ts +24 -25
- package/src/layouts/geometric/circular.ts +63 -57
- package/src/layouts/geometric/index.ts +3 -3
- package/src/layouts/geometric/shell.ts +58 -53
- package/src/layouts/geometric/spiral.ts +60 -64
- package/src/layouts/hierarchical/bfs.ts +58 -59
- package/src/layouts/hierarchical/bipartite.ts +62 -63
- package/src/layouts/hierarchical/index.ts +3 -3
- package/src/layouts/hierarchical/multipartite.ts +62 -63
- package/src/layouts/index.ts +5 -5
- package/src/layouts/specialized/index.ts +2 -2
- package/src/layouts/specialized/planar.ts +41 -42
- package/src/layouts/specialized/spectral.ts +110 -99
- package/src/types/embedding.ts +5 -5
- package/src/types/graph.ts +4 -4
- package/src/types/index.ts +3 -3
- package/src/types/layout.ts +2 -2
- package/src/utils/graph.ts +31 -35
- package/src/utils/index.ts +5 -5
- package/src/utils/numpy.ts +96 -92
- package/src/utils/params.ts +14 -11
- package/src/utils/random.ts +57 -40
- package/src/utils/rescale.ts +169 -174
- package/dist/vitest.config.d.ts +0 -2
- package/dist/vitest.config.js +0 -30
- package/dist/vitest.config.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/algorithms/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/algorithms/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/algorithms/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Re-export all optimization algorithms
|
|
3
3
|
*/
|
|
4
|
-
export
|
|
5
|
-
export {
|
|
6
|
-
export {
|
|
7
|
-
export {
|
|
4
|
+
export { _computeShortestPathDistances, _kamadaKawaiCostfn, _kamadaKawaiSolve } from "./kamada-kawai-solver";
|
|
5
|
+
export { _lbfgsDirection } from "./lbfgs";
|
|
6
|
+
export { _backtrackingLineSearch } from "./line-search";
|
|
7
|
+
export type { DistanceMap } from "./types";
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/algorithms/optimization/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,6BAA6B,EAAE,kBAAkB,EAAC,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC5G,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AACxD,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Re-export all optimization algorithms
|
|
3
3
|
*/
|
|
4
|
-
export { _computeShortestPathDistances,
|
|
5
|
-
export { _lbfgsDirection } from
|
|
6
|
-
export { _backtrackingLineSearch } from
|
|
4
|
+
export { _computeShortestPathDistances, _kamadaKawaiCostfn, _kamadaKawaiSolve } from "./kamada-kawai-solver";
|
|
5
|
+
export { _lbfgsDirection } from "./lbfgs";
|
|
6
|
+
export { _backtrackingLineSearch } from "./line-search";
|
|
7
7
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/algorithms/optimization/index.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/algorithms/optimization/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,6BAA6B,EAAE,kBAAkB,EAAC,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC5G,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Kamada-Kawai layout algorithm optimization functions
|
|
3
3
|
*/
|
|
4
|
-
import { Graph } from
|
|
5
|
-
import { DistanceMap } from
|
|
4
|
+
import type { Graph } from "../../types";
|
|
5
|
+
import { DistanceMap } from "./types";
|
|
6
6
|
/**
|
|
7
7
|
* Compute all-pairs shortest path distances for the graph
|
|
8
|
-
*
|
|
9
8
|
* @param G - NetworkX graph
|
|
10
9
|
* @param weight - Edge attribute for weight
|
|
11
10
|
* @returns Dictionary of dictionaries of shortest path distances
|
|
@@ -13,7 +12,6 @@ import { DistanceMap } from './types';
|
|
|
13
12
|
export declare function _computeShortestPathDistances(G: Graph, weight: string): DistanceMap;
|
|
14
13
|
/**
|
|
15
14
|
* Solve the Kamada-Kawai layout optimization problem
|
|
16
|
-
*
|
|
17
15
|
* @param distMatrix - Matrix of desired distances between nodes
|
|
18
16
|
* @param positions - Initial node positions
|
|
19
17
|
* @param dim - Dimension of layout
|
|
@@ -22,7 +20,6 @@ export declare function _computeShortestPathDistances(G: Graph, weight: string):
|
|
|
22
20
|
export declare function _kamadaKawaiSolve(distMatrix: number[][], positions: number[][], dim: number): number[][];
|
|
23
21
|
/**
|
|
24
22
|
* Cost function and gradient for Kamada-Kawai layout algorithm
|
|
25
|
-
*
|
|
26
23
|
* @param posVec - Flattened position array
|
|
27
24
|
* @param invDist - Inverse distance matrix
|
|
28
25
|
* @param meanWeight - Weight for centering positions
|
|
@@ -30,3 +27,4 @@ export declare function _kamadaKawaiSolve(distMatrix: number[][], positions: num
|
|
|
30
27
|
* @returns Array with [cost, gradient]
|
|
31
28
|
*/
|
|
32
29
|
export declare function _kamadaKawaiCostfn(posVec: number[], invDist: number[][], meanWeight: number, dim: number): [number, number[]];
|
|
30
|
+
//# sourceMappingURL=kamada-kawai-solver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kamada-kawai-solver.d.ts","sourceRoot":"","sources":["../../../../src/algorithms/optimization/kamada-kawai-solver.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAIzC,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAEtC;;;;;GAKG;AACH,wBAAgB,6BAA6B,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,GAAG,WAAW,CA0CnF;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,CAyExG;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAC9B,MAAM,EAAE,MAAM,EAAE,EAChB,OAAO,EAAE,MAAM,EAAE,EAAE,EACnB,UAAU,EAAE,MAAM,EAClB,GAAG,EAAE,MAAM,GACZ,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAkEpB"}
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Kamada-Kawai layout algorithm optimization functions
|
|
3
3
|
*/
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
4
|
+
import { getEdgesFromGraph, getNodesFromGraph } from "../../utils/graph";
|
|
5
|
+
import { _lbfgsDirection } from "./lbfgs";
|
|
6
|
+
import { _backtrackingLineSearch } from "./line-search";
|
|
7
7
|
/**
|
|
8
8
|
* Compute all-pairs shortest path distances for the graph
|
|
9
|
-
*
|
|
10
9
|
* @param G - NetworkX graph
|
|
11
10
|
* @param weight - Edge attribute for weight
|
|
12
11
|
* @returns Dictionary of dictionaries of shortest path distances
|
|
@@ -50,7 +49,6 @@ export function _computeShortestPathDistances(G, weight) {
|
|
|
50
49
|
}
|
|
51
50
|
/**
|
|
52
51
|
* Solve the Kamada-Kawai layout optimization problem
|
|
53
|
-
*
|
|
54
52
|
* @param distMatrix - Matrix of desired distances between nodes
|
|
55
53
|
* @param positions - Initial node positions
|
|
56
54
|
* @param dim - Dimension of layout
|
|
@@ -61,9 +59,9 @@ export function _kamadaKawaiSolve(distMatrix, positions, dim) {
|
|
|
61
59
|
const nNodes = positions.length;
|
|
62
60
|
const meanWeight = 1e-3;
|
|
63
61
|
// Convert distances to inverse distances (with protection against division by zero)
|
|
64
|
-
const invDistMatrix = distMatrix.map(row => row.map(d => d === 0 ? 0 : 1 / (d + 1e-3)));
|
|
62
|
+
const invDistMatrix = distMatrix.map((row) => row.map((d) => (d === 0 ? 0 : 1 / (d + 1e-3))));
|
|
65
63
|
// Flatten positions for optimization
|
|
66
|
-
|
|
64
|
+
const posVec = positions.flat();
|
|
67
65
|
// Optimization parameters
|
|
68
66
|
const maxIter = 500;
|
|
69
67
|
const gtol = 1e-5;
|
|
@@ -110,7 +108,6 @@ export function _kamadaKawaiSolve(distMatrix, positions, dim) {
|
|
|
110
108
|
}
|
|
111
109
|
/**
|
|
112
110
|
* Cost function and gradient for Kamada-Kawai layout algorithm
|
|
113
|
-
*
|
|
114
111
|
* @param posVec - Flattened position array
|
|
115
112
|
* @param invDist - Inverse distance matrix
|
|
116
113
|
* @param meanWeight - Weight for centering positions
|
|
@@ -160,7 +157,7 @@ export function _kamadaKawaiCostfn(posVec, invDist, meanWeight, dim) {
|
|
|
160
157
|
// Calculate actual distance and direction
|
|
161
158
|
const diff = positions[i].map((val, d) => val - positions[j][d]);
|
|
162
159
|
const distance = Math.sqrt(diff.reduce((sum, d) => sum + d * d, 0)) || 1e-10;
|
|
163
|
-
const direction = diff.map(d => d / distance);
|
|
160
|
+
const direction = diff.map((d) => d / distance);
|
|
164
161
|
// Calculate contribution to gradient
|
|
165
162
|
const idealInvDist = invDist[i][j];
|
|
166
163
|
const offset = distance * idealInvDist - 1.0;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kamada-kawai-solver.js","sourceRoot":"","sources":["../../../../src/algorithms/optimization/kamada-kawai-solver.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"kamada-kawai-solver.js","sourceRoot":"","sources":["../../../../src/algorithms/optimization/kamada-kawai-solver.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,11 +3,11 @@
|
|
|
3
3
|
*/
|
|
4
4
|
/**
|
|
5
5
|
* Compute the search direction using L-BFGS approximation
|
|
6
|
-
*
|
|
7
6
|
* @param grad - Current gradient
|
|
8
7
|
* @param sList - List of position differences (s_k)
|
|
9
8
|
* @param yList - List of gradient differences (y_k)
|
|
10
|
-
* @param
|
|
9
|
+
* @param _m - Memory size (unused, kept for API compatibility)
|
|
11
10
|
* @returns Direction vector
|
|
12
11
|
*/
|
|
13
|
-
export declare function _lbfgsDirection(grad: number[], sList: number[][], yList: number[][],
|
|
12
|
+
export declare function _lbfgsDirection(grad: number[], sList: number[][], yList: number[][], _m: number): number[];
|
|
13
|
+
//# sourceMappingURL=lbfgs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lbfgs.d.ts","sourceRoot":"","sources":["../../../../src/algorithms/optimization/lbfgs.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,CAgD1G"}
|
|
@@ -3,17 +3,16 @@
|
|
|
3
3
|
*/
|
|
4
4
|
/**
|
|
5
5
|
* Compute the search direction using L-BFGS approximation
|
|
6
|
-
*
|
|
7
6
|
* @param grad - Current gradient
|
|
8
7
|
* @param sList - List of position differences (s_k)
|
|
9
8
|
* @param yList - List of gradient differences (y_k)
|
|
10
|
-
* @param
|
|
9
|
+
* @param _m - Memory size (unused, kept for API compatibility)
|
|
11
10
|
* @returns Direction vector
|
|
12
11
|
*/
|
|
13
|
-
export function _lbfgsDirection(grad, sList, yList,
|
|
12
|
+
export function _lbfgsDirection(grad, sList, yList, _m) {
|
|
14
13
|
if (sList.length === 0) {
|
|
15
14
|
// First iteration - use negative gradient
|
|
16
|
-
return grad.map(g => -g);
|
|
15
|
+
return grad.map((g) => -g);
|
|
17
16
|
}
|
|
18
17
|
const q = grad.slice();
|
|
19
18
|
const alpha = Array(sList.length).fill(0);
|
|
@@ -37,11 +36,10 @@ export function _lbfgsDirection(grad, sList, yList, m) {
|
|
|
37
36
|
if (sList.length > 0 && yList.length > 0) {
|
|
38
37
|
const y = yList[yList.length - 1];
|
|
39
38
|
const s = sList[sList.length - 1];
|
|
40
|
-
gamma = s.reduce((sum, val, i) => sum + val * y[i], 0) /
|
|
41
|
-
y.reduce((sum, val) => sum + val * val, 0);
|
|
39
|
+
gamma = s.reduce((sum, val, i) => sum + val * y[i], 0) / y.reduce((sum, val) => sum + val * val, 0);
|
|
42
40
|
}
|
|
43
41
|
// Initialize direction with scaled negative gradient
|
|
44
|
-
const direction = q.map(val => -gamma * val);
|
|
42
|
+
const direction = q.map((val) => -gamma * val);
|
|
45
43
|
// Backward pass
|
|
46
44
|
for (let i = 0; i < sList.length; i++) {
|
|
47
45
|
const s = sList[i];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lbfgs.js","sourceRoot":"","sources":["../../../../src/algorithms/optimization/lbfgs.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH
|
|
1
|
+
{"version":3,"file":"lbfgs.js","sourceRoot":"","sources":["../../../../src/algorithms/optimization/lbfgs.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,6 @@
|
|
|
3
3
|
*/
|
|
4
4
|
/**
|
|
5
5
|
* Backtracking line search to find step size
|
|
6
|
-
*
|
|
7
6
|
* @param x - Current position
|
|
8
7
|
* @param direction - Search direction
|
|
9
8
|
* @param f - Function value at current position
|
|
@@ -13,3 +12,4 @@
|
|
|
13
12
|
* @returns Optimal step size
|
|
14
13
|
*/
|
|
15
14
|
export declare function _backtrackingLineSearch(x: number[], direction: number[], f: number, grad: number[], func: (x: number[]) => number, alpha0: number): number;
|
|
15
|
+
//# sourceMappingURL=line-search.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"line-search.d.ts","sourceRoot":"","sources":["../../../../src/algorithms/optimization/line-search.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;;;;;;GASG;AACH,wBAAgB,uBAAuB,CACnC,CAAC,EAAE,MAAM,EAAE,EACX,SAAS,EAAE,MAAM,EAAE,EACnB,CAAC,EAAE,MAAM,EACT,IAAI,EAAE,MAAM,EAAE,EACd,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,MAAM,EAC7B,MAAM,EAAE,MAAM,GACf,MAAM,CA2BR"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"line-search.js","sourceRoot":"","sources":["../../../../src/algorithms/optimization/line-search.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH
|
|
1
|
+
{"version":3,"file":"line-search.js","sourceRoot":"","sources":["../../../../src/algorithms/optimization/line-search.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;;;;;;GASG;AACH,MAAM,UAAU,uBAAuB,CACnC,CAAW,EACX,SAAmB,EACnB,CAAS,EACT,IAAc,EACd,IAA6B,EAC7B,MAAc;IAEd,MAAM,EAAE,GAAG,IAAI,CAAC;IAChB,MAAM,EAAE,GAAG,GAAG,CAAC;IACf,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAE3E,IAAI,YAAY,IAAI,CAAC,EAAE,CAAC;QACpB,OAAO,IAAI,CAAC,CAAC,uCAAuC;IACxD,CAAC;IAED,IAAI,KAAK,GAAG,MAAM,CAAC;IACnB,MAAM,OAAO,GAAG,EAAE,CAAC;IAEnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC;QAC/B,WAAW;QACX,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3D,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;QAExB,yDAAyD;QACzD,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,YAAY,EAAE,CAAC;YACxC,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,mBAAmB;QACnB,KAAK,IAAI,EAAE,CAAC;IAChB,CAAC;IAED,OAAO,KAAK,CAAC,CAAC,wCAAwC;AAC1D,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/algorithms/optimization/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAGnC,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC"}
|
|
@@ -1,17 +1,18 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Main planarity checking function
|
|
3
3
|
*/
|
|
4
|
-
import {
|
|
4
|
+
import { Edge, Embedding, Graph, Node } from "../../types";
|
|
5
5
|
/**
|
|
6
6
|
* Check if graph is planar using a simplified version of Boyer-Myrvold algorithm.
|
|
7
7
|
* Returns planarity and embedding information.
|
|
8
|
-
*
|
|
9
|
-
* @param G - Graph
|
|
8
|
+
* @param _G - Graph (reserved for future use)
|
|
10
9
|
* @param nodes - List of nodes
|
|
11
10
|
* @param edges - List of edges
|
|
11
|
+
* @param seed - Random seed for deterministic embedding generation
|
|
12
12
|
* @returns Object containing isPlanar flag and embedding
|
|
13
13
|
*/
|
|
14
|
-
export declare function checkPlanarity(
|
|
14
|
+
export declare function checkPlanarity(_G: Graph, nodes: Node[], edges: Edge[], seed?: number | null): {
|
|
15
15
|
isPlanar: boolean;
|
|
16
16
|
embedding: Embedding | null;
|
|
17
17
|
};
|
|
18
|
+
//# sourceMappingURL=check.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../../../src/algorithms/planarity/check.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,IAAI,EAAE,SAAS,EAAC,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAK1D;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAC1B,EAAE,EAAE,KAAK,EACT,KAAK,EAAE,IAAI,EAAE,EACb,KAAK,EAAE,IAAI,EAAE,EACb,IAAI,GAAE,MAAM,GAAG,IAAW,GAC3B;IAAE,QAAQ,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,SAAS,GAAG,IAAI,CAAA;CAAE,CAepD"}
|
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Main planarity checking function
|
|
3
3
|
*/
|
|
4
|
-
import {
|
|
5
|
-
import { lrPlanarityTest } from
|
|
6
|
-
import {
|
|
4
|
+
import { createTriangulationEmbedding } from "./embedding";
|
|
5
|
+
import { lrPlanarityTest } from "./lr-test";
|
|
6
|
+
import { isK5, isK33 } from "./special-graphs";
|
|
7
7
|
/**
|
|
8
8
|
* Check if graph is planar using a simplified version of Boyer-Myrvold algorithm.
|
|
9
9
|
* Returns planarity and embedding information.
|
|
10
|
-
*
|
|
11
|
-
* @param G - Graph
|
|
10
|
+
* @param _G - Graph (reserved for future use)
|
|
12
11
|
* @param nodes - List of nodes
|
|
13
12
|
* @param edges - List of edges
|
|
13
|
+
* @param seed - Random seed for deterministic embedding generation
|
|
14
14
|
* @returns Object containing isPlanar flag and embedding
|
|
15
15
|
*/
|
|
16
|
-
export function checkPlanarity(
|
|
16
|
+
export function checkPlanarity(_G, nodes, edges, seed = null) {
|
|
17
17
|
// For small graphs (n <= 4), all are planar
|
|
18
18
|
if (nodes.length <= 4) {
|
|
19
19
|
return { isPlanar: true, embedding: createTriangulationEmbedding(nodes, edges, seed) };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check.js","sourceRoot":"","sources":["../../../../src/algorithms/planarity/check.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"check.js","sourceRoot":"","sources":["../../../../src/algorithms/planarity/check.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,4BAA4B,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAE/C;;;;;;;;GAQG;AACH,MAAM,UAAU,cAAc,CAC1B,EAAS,EACT,KAAa,EACb,KAAa,EACb,OAAsB,IAAI;IAE1B,4CAA4C;IAC5C,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QACpB,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,4BAA4B,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC;IAC3F,CAAC;IAED,oFAAoF;IACpF,+CAA+C;IAC/C,IAAI,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC;QAC5C,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IAChD,CAAC;IAED,iEAAiE;IACjE,MAAM,MAAM,GAAG,eAAe,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IACnD,OAAO,MAAM,CAAC;AAClB,CAAC"}
|
|
@@ -1,29 +1,28 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Embedding functions for planar graphs
|
|
3
3
|
*/
|
|
4
|
-
import {
|
|
4
|
+
import { Edge, Embedding, Node, PositionMap } from "../../types";
|
|
5
5
|
/**
|
|
6
6
|
* Create a triangulation-based embedding for a planar graph
|
|
7
|
-
*
|
|
8
7
|
* @param nodes - List of nodes
|
|
9
8
|
* @param edges - List of edges
|
|
9
|
+
* @param seed - Random seed for deterministic embedding generation
|
|
10
10
|
* @returns Embedding object
|
|
11
11
|
*/
|
|
12
12
|
export declare function createTriangulationEmbedding(nodes: Node[], edges: Edge[], seed?: number | null): Embedding;
|
|
13
13
|
/**
|
|
14
14
|
* Find a simple cycle in the graph (for outer face)
|
|
15
|
-
*
|
|
16
15
|
* @param nodes - List of nodes
|
|
17
|
-
* @param
|
|
16
|
+
* @param _edges - List of edges (reserved for future use)
|
|
18
17
|
* @param adjMap - Adjacency map
|
|
19
18
|
* @returns Cycle as array of nodes, or null if none found
|
|
20
19
|
*/
|
|
21
|
-
export declare function findCycle(nodes: Node[],
|
|
20
|
+
export declare function findCycle(nodes: Node[], _edges: Edge[], adjMap: Record<Node, Set<Node>>): Node[] | null;
|
|
22
21
|
/**
|
|
23
22
|
* Convert a combinatorial embedding to node positions
|
|
24
|
-
*
|
|
25
23
|
* @param embedding - The embedding object
|
|
26
24
|
* @param nodes - List of nodes
|
|
27
25
|
* @returns Dictionary mapping nodes to positions
|
|
28
26
|
*/
|
|
29
27
|
export declare function combinatorialEmbeddingToPos(embedding: Embedding, nodes: Node[]): PositionMap;
|
|
28
|
+
//# sourceMappingURL=embedding.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"embedding.d.ts","sourceRoot":"","sources":["../../../../src/algorithms/planarity/embedding.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAGjE;;;;;;GAMG;AACH,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,IAAI,GAAE,MAAM,GAAG,IAAW,GAAG,SAAS,CAyEhH;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,EAAE,GAAG,IAAI,CA2FvG;AAED;;;;;GAKG;AACH,wBAAgB,2BAA2B,CAAC,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,WAAW,CAc5F"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Embedding functions for planar graphs
|
|
3
3
|
*/
|
|
4
|
-
import { RandomNumberGenerator } from
|
|
4
|
+
import { RandomNumberGenerator } from "../../utils/random";
|
|
5
5
|
/**
|
|
6
6
|
* Create a triangulation-based embedding for a planar graph
|
|
7
|
-
*
|
|
8
7
|
* @param nodes - List of nodes
|
|
9
8
|
* @param edges - List of edges
|
|
9
|
+
* @param seed - Random seed for deterministic embedding generation
|
|
10
10
|
* @returns Embedding object
|
|
11
11
|
*/
|
|
12
12
|
export function createTriangulationEmbedding(nodes, edges, seed = null) {
|
|
@@ -16,7 +16,7 @@ export function createTriangulationEmbedding(nodes, edges, seed = null) {
|
|
|
16
16
|
const embedding = {
|
|
17
17
|
nodeOrder: [...nodes],
|
|
18
18
|
faceList: [],
|
|
19
|
-
nodePositions: {}
|
|
19
|
+
nodePositions: {},
|
|
20
20
|
};
|
|
21
21
|
// Create a map of adjacent nodes
|
|
22
22
|
const adjMap = {};
|
|
@@ -33,11 +33,11 @@ export function createTriangulationEmbedding(nodes, edges, seed = null) {
|
|
|
33
33
|
// Position nodes on a convex polygon (outer face)
|
|
34
34
|
const n = outerFace.length;
|
|
35
35
|
for (let i = 0; i < n; i++) {
|
|
36
|
-
const angle = 2 * Math.PI * i / n;
|
|
36
|
+
const angle = (2 * Math.PI * i) / n;
|
|
37
37
|
embedding.nodePositions[outerFace[i]] = [Math.cos(angle), Math.sin(angle)];
|
|
38
38
|
}
|
|
39
39
|
// Position interior nodes using barycentric coordinates
|
|
40
|
-
const interiorNodes = nodes.filter(node => !embedding.nodePositions[node]);
|
|
40
|
+
const interiorNodes = nodes.filter((node) => !embedding.nodePositions[node]);
|
|
41
41
|
for (const node of interiorNodes) {
|
|
42
42
|
const neighbors = Array.from(adjMap[node]);
|
|
43
43
|
if (neighbors.length === 0) {
|
|
@@ -59,7 +59,7 @@ export function createTriangulationEmbedding(nodes, edges, seed = null) {
|
|
|
59
59
|
const jitter = 0.1 * rng.rand();
|
|
60
60
|
embedding.nodePositions[node] = [
|
|
61
61
|
xSum / count + jitter * (rng.rand() - 0.5),
|
|
62
|
-
ySum / count + jitter * (rng.rand() - 0.5)
|
|
62
|
+
ySum / count + jitter * (rng.rand() - 0.5),
|
|
63
63
|
];
|
|
64
64
|
}
|
|
65
65
|
else {
|
|
@@ -74,17 +74,18 @@ export function createTriangulationEmbedding(nodes, edges, seed = null) {
|
|
|
74
74
|
}
|
|
75
75
|
/**
|
|
76
76
|
* Find a simple cycle in the graph (for outer face)
|
|
77
|
-
*
|
|
78
77
|
* @param nodes - List of nodes
|
|
79
|
-
* @param
|
|
78
|
+
* @param _edges - List of edges (reserved for future use)
|
|
80
79
|
* @param adjMap - Adjacency map
|
|
81
80
|
* @returns Cycle as array of nodes, or null if none found
|
|
82
81
|
*/
|
|
83
|
-
export function findCycle(nodes,
|
|
84
|
-
if (nodes.length === 0)
|
|
82
|
+
export function findCycle(nodes, _edges, adjMap) {
|
|
83
|
+
if (nodes.length === 0) {
|
|
85
84
|
return null;
|
|
86
|
-
|
|
87
|
-
|
|
85
|
+
}
|
|
86
|
+
if (nodes.length <= 2) {
|
|
87
|
+
return nodes;
|
|
88
|
+
} // Not a real cycle but handle it
|
|
88
89
|
// Try to find a Hamiltonian cycle for simplicity (for small graphs)
|
|
89
90
|
if (nodes.length <= 8) {
|
|
90
91
|
const visited = new Set();
|
|
@@ -124,8 +125,9 @@ export function findCycle(nodes, edges, adjMap) {
|
|
|
124
125
|
function findCycleDFS(node, parentNode) {
|
|
125
126
|
visited.add(node);
|
|
126
127
|
for (const neighbor of adjMap[node]) {
|
|
127
|
-
if (neighbor === parentNode)
|
|
128
|
+
if (neighbor === parentNode) {
|
|
128
129
|
continue;
|
|
130
|
+
}
|
|
129
131
|
if (visited.has(neighbor)) {
|
|
130
132
|
// Found a cycle
|
|
131
133
|
cycleFound = constructCycle(node, neighbor, parent);
|
|
@@ -160,7 +162,6 @@ export function findCycle(nodes, edges, adjMap) {
|
|
|
160
162
|
}
|
|
161
163
|
/**
|
|
162
164
|
* Convert a combinatorial embedding to node positions
|
|
163
|
-
*
|
|
164
165
|
* @param embedding - The embedding object
|
|
165
166
|
* @param nodes - List of nodes
|
|
166
167
|
* @returns Dictionary mapping nodes to positions
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"embedding.js","sourceRoot":"","sources":["../../../../src/algorithms/planarity/embedding.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAE3D;;;;;;GAMG;AACH,MAAM,UAAU,4BAA4B,
|
|
1
|
+
{"version":3,"file":"embedding.js","sourceRoot":"","sources":["../../../../src/algorithms/planarity/embedding.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Re-export all planarity algorithms
|
|
3
3
|
*/
|
|
4
|
-
export { checkPlanarity } from
|
|
5
|
-
export {
|
|
6
|
-
export { lrPlanarityTest } from
|
|
7
|
-
export {
|
|
4
|
+
export { checkPlanarity } from "./check";
|
|
5
|
+
export { combinatorialEmbeddingToPos, createTriangulationEmbedding, findCycle } from "./embedding";
|
|
6
|
+
export { lrPlanarityTest } from "./lr-test";
|
|
7
|
+
export { isK5, isK33, tryFindBipartitePartition } from "./special-graphs";
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/algorithms/planarity/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,2BAA2B,EAAC,4BAA4B,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAClG,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Re-export all planarity algorithms
|
|
3
3
|
*/
|
|
4
|
-
export { checkPlanarity } from
|
|
5
|
-
export {
|
|
6
|
-
export { lrPlanarityTest } from
|
|
7
|
-
export {
|
|
4
|
+
export { checkPlanarity } from "./check";
|
|
5
|
+
export { combinatorialEmbeddingToPos, createTriangulationEmbedding, findCycle } from "./embedding";
|
|
6
|
+
export { lrPlanarityTest } from "./lr-test";
|
|
7
|
+
export { isK5, isK33, tryFindBipartitePartition } from "./special-graphs";
|
|
8
8
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/algorithms/planarity/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/algorithms/planarity/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,2BAA2B,EAAC,4BAA4B,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAClG,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Left-Right Planarity Test implementation
|
|
3
3
|
*/
|
|
4
|
-
import {
|
|
4
|
+
import { Edge, Embedding, Node } from "../../types";
|
|
5
5
|
/**
|
|
6
6
|
* Left-Right Planarity Test for general graphs
|
|
7
|
-
*
|
|
8
7
|
* @param nodes - List of nodes
|
|
9
8
|
* @param edges - List of edges
|
|
9
|
+
* @param seed - Random seed for deterministic embedding generation
|
|
10
10
|
* @returns Object containing isPlanar flag and embedding
|
|
11
11
|
*/
|
|
12
12
|
export declare function lrPlanarityTest(nodes: Node[], edges: Edge[], seed?: number | null): {
|
|
13
13
|
isPlanar: boolean;
|
|
14
14
|
embedding: Embedding | null;
|
|
15
15
|
};
|
|
16
|
+
//# sourceMappingURL=lr-test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lr-test.d.ts","sourceRoot":"","sources":["../../../../src/algorithms/planarity/lr-test.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,IAAI,EAAE,SAAS,EAAC,IAAI,EAAE,MAAM,aAAa,CAAC;AAGnD;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC3B,KAAK,EAAE,IAAI,EAAE,EACb,KAAK,EAAE,IAAI,EAAE,EACb,IAAI,GAAE,MAAM,GAAG,IAAW,GAC3B;IAAE,QAAQ,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,SAAS,GAAG,IAAI,CAAA;CAAE,CAoDpD"}
|