@graphty/layout 1.2.9 → 1.3.2
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 +393 -403
- package/dist/layout.js +867 -808
- package/dist/layout.js.map +1 -1
- package/dist/src/algorithms/index.d.ts +2 -2
- 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 +4 -4
- 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 +2 -5
- 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 +0 -1
- package/dist/src/algorithms/optimization/lbfgs.js +3 -5
- package/dist/src/algorithms/optimization/lbfgs.js.map +1 -1
- package/dist/src/algorithms/optimization/line-search.d.ts +0 -1
- 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 +1 -1
- package/dist/src/algorithms/planarity/check.d.ts +2 -2
- package/dist/src/algorithms/planarity/check.js +4 -4
- package/dist/src/algorithms/planarity/check.js.map +1 -1
- package/dist/src/algorithms/planarity/embedding.d.ts +2 -4
- package/dist/src/algorithms/planarity/embedding.js +13 -12
- package/dist/src/algorithms/planarity/embedding.js.map +1 -1
- package/dist/src/algorithms/planarity/index.d.ts +4 -4
- 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 +2 -2
- 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 +1 -4
- 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 +1 -1
- package/dist/src/generators/basic.js +4 -4
- package/dist/src/generators/basic.js.map +1 -1
- package/dist/src/generators/bipartite.d.ts +1 -1
- package/dist/src/generators/bipartite.js +2 -2
- package/dist/src/generators/bipartite.js.map +1 -1
- package/dist/src/generators/grid.d.ts +1 -1
- package/dist/src/generators/grid.js +1 -1
- package/dist/src/generators/grid.js.map +1 -1
- package/dist/src/generators/index.d.ts +5 -5
- package/dist/src/generators/index.js +5 -5
- package/dist/src/generators/index.js.map +1 -1
- package/dist/src/generators/random.d.ts +1 -1
- 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 +1 -1
- 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 +4 -4
- package/dist/src/index.js +4 -4
- package/dist/src/layouts/basic/index.d.ts +1 -1
- package/dist/src/layouts/basic/index.js +1 -1
- package/dist/src/layouts/basic/random.d.ts +1 -2
- package/dist/src/layouts/basic/random.js +3 -4
- package/dist/src/layouts/basic/random.js.map +1 -1
- package/dist/src/layouts/force-directed/arf.d.ts +1 -2
- 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 +1 -2
- package/dist/src/layouts/force-directed/forceatlas2.js +58 -35
- package/dist/src/layouts/force-directed/forceatlas2.js.map +1 -1
- package/dist/src/layouts/force-directed/fruchterman-reingold.d.ts +11 -12
- package/dist/src/layouts/force-directed/fruchterman-reingold.js +17 -17
- package/dist/src/layouts/force-directed/fruchterman-reingold.js.map +1 -1
- package/dist/src/layouts/force-directed/index.d.ts +5 -5
- 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 +2 -3
- package/dist/src/layouts/force-directed/kamada-kawai.js +12 -10
- package/dist/src/layouts/force-directed/kamada-kawai.js.map +1 -1
- package/dist/src/layouts/force-directed/spring.d.ts +11 -12
- 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 +1 -2
- package/dist/src/layouts/geometric/circular.js +10 -9
- package/dist/src/layouts/geometric/circular.js.map +1 -1
- package/dist/src/layouts/geometric/index.d.ts +3 -3
- package/dist/src/layouts/geometric/index.js +3 -3
- package/dist/src/layouts/geometric/shell.d.ts +1 -2
- package/dist/src/layouts/geometric/shell.js +5 -5
- package/dist/src/layouts/geometric/shell.js.map +1 -1
- package/dist/src/layouts/geometric/spiral.d.ts +1 -2
- package/dist/src/layouts/geometric/spiral.js +5 -9
- package/dist/src/layouts/geometric/spiral.js.map +1 -1
- package/dist/src/layouts/hierarchical/bfs.d.ts +2 -3
- package/dist/src/layouts/hierarchical/bfs.js +5 -6
- package/dist/src/layouts/hierarchical/bfs.js.map +1 -1
- package/dist/src/layouts/hierarchical/bipartite.d.ts +2 -3
- package/dist/src/layouts/hierarchical/bipartite.js +8 -9
- package/dist/src/layouts/hierarchical/bipartite.js.map +1 -1
- package/dist/src/layouts/hierarchical/index.d.ts +3 -3
- 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 +2 -3
- package/dist/src/layouts/hierarchical/multipartite.js +7 -8
- package/dist/src/layouts/hierarchical/multipartite.js.map +1 -1
- package/dist/src/layouts/index.d.ts +5 -5
- 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 +2 -2
- 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 +1 -2
- package/dist/src/layouts/specialized/planar.js +5 -6
- package/dist/src/layouts/specialized/planar.js.map +1 -1
- package/dist/src/layouts/specialized/spectral.d.ts +1 -2
- package/dist/src/layouts/specialized/spectral.js +30 -20
- package/dist/src/layouts/specialized/spectral.js.map +1 -1
- package/dist/src/types/embedding.d.ts +1 -1
- package/dist/src/types/index.d.ts +3 -3
- package/dist/src/types/index.js +3 -3
- package/dist/src/types/index.js.map +1 -1
- package/dist/src/types/layout.d.ts +1 -1
- package/dist/src/utils/graph.d.ts +1 -5
- package/dist/src/utils/graph.js +4 -6
- package/dist/src/utils/graph.js.map +1 -1
- package/dist/src/utils/index.d.ts +5 -5
- package/dist/src/utils/index.js +5 -5
- package/dist/src/utils/index.js.map +1 -1
- package/dist/src/utils/numpy.js +22 -16
- package/dist/src/utils/numpy.js.map +1 -1
- package/dist/src/utils/params.d.ts +1 -2
- package/dist/src/utils/params.js +0 -1
- package/dist/src/utils/params.js.map +1 -1
- package/dist/src/utils/random.d.ts +17 -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 +1 -3
- package/dist/src/utils/rescale.js +12 -10
- package/dist/src/utils/rescale.js.map +1 -1
- package/dist/vitest.config.js +14 -14
- package/dist/vitest.config.js.map +1 -1
- package/package.json +29 -24
- 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 +41 -48
- package/src/algorithms/optimization/line-search.ts +27 -28
- package/src/algorithms/optimization/types.ts +2 -2
- package/src/algorithms/planarity/check.ts +22 -22
- package/src/algorithms/planarity/embedding.ts +159 -170
- 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 +365 -351
- 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 +78 -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
|
@@ -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,7 @@
|
|
|
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";
|
|
@@ -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 { 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
|
|
@@ -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,7 +3,6 @@
|
|
|
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)
|
|
@@ -13,7 +12,7 @@
|
|
|
13
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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"}
|
|
@@ -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"}
|
|
@@ -1,14 +1,14 @@
|
|
|
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
8
|
* @param G - Graph
|
|
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
14
|
export declare function checkPlanarity(G: Graph, nodes: Node[], edges: Edge[], seed?: number | null): {
|
|
@@ -1,16 +1,16 @@
|
|
|
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
10
|
* @param G - Graph
|
|
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
16
|
export function checkPlanarity(G, nodes, edges, seed = null) {
|
|
@@ -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,CAAQ,EACR,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,18 +1,17 @@
|
|
|
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
16
|
* @param edges - List of edges
|
|
18
17
|
* @param adjMap - Adjacency map
|
|
@@ -21,7 +20,6 @@ export declare function createTriangulationEmbedding(nodes: Node[], edges: Edge[
|
|
|
21
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
|
|
@@ -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
78
|
* @param edges - List of edges
|
|
80
79
|
* @param adjMap - Adjacency map
|
|
81
80
|
* @returns Cycle as array of nodes, or null if none found
|
|
82
81
|
*/
|
|
83
82
|
export function findCycle(nodes, edges, adjMap) {
|
|
84
|
-
if (nodes.length === 0)
|
|
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,7 @@
|
|
|
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";
|
|
@@ -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,12 +1,12 @@
|
|
|
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): {
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Left-Right Planarity Test implementation
|
|
3
3
|
*/
|
|
4
|
-
import { createTriangulationEmbedding } from
|
|
4
|
+
import { createTriangulationEmbedding } from "./embedding";
|
|
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 function lrPlanarityTest(nodes, edges, seed = null) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lr-test.js","sourceRoot":"","sources":["../../../../src/algorithms/planarity/lr-test.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,4BAA4B,EAAE,MAAM,aAAa,CAAC;AAE3D;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,
|
|
1
|
+
{"version":3,"file":"lr-test.js","sourceRoot":"","sources":["../../../../src/algorithms/planarity/lr-test.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,4BAA4B,EAAE,MAAM,aAAa,CAAC;AAE3D;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAC3B,KAAa,EACb,KAAa,EACb,OAAsB,IAAI;IAE1B,sCAAsC;IACtC,MAAM,OAAO,GAAyB,EAAE,CAAC;IACzC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACvB,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,CAAC;IAED,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC;QACzB,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACnB,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACvB,CAAC;IAED,iEAAiE;IACjE,MAAM,OAAO,GAAG,IAAI,GAAG,EAAQ,CAAC;IAChC,MAAM,QAAQ,GAAW,EAAE,CAAC;IAE5B,SAAS,GAAG,CAAC,IAAU;QACnB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEpB,KAAK,MAAM,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACnC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACzB,GAAG,CAAC,QAAQ,CAAC,CAAC;YAClB,CAAC;QACL,CAAC;IACL,CAAC;IAED,4BAA4B;IAC5B,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAEd,uFAAuF;IACvF,IAAI,QAAQ,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;QACjC,kEAAkE;QAClE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,4BAA4B,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC;IAC3F,CAAC;IAED,wEAAwE;IACxE,yEAAyE;IAEzE,yEAAyE;IACzE,oEAAoE;IAEpE,wEAAwE;IACxE,qEAAqE;IACrE,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtC,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IAChD,CAAC;IAED,2DAA2D;IAC3D,MAAM,SAAS,GAAG,4BAA4B,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IAEnE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;AACzC,CAAC"}
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Special graph detection functions for planarity testing
|
|
3
3
|
*/
|
|
4
|
-
import {
|
|
4
|
+
import { Edge, Node } from "../../types";
|
|
5
5
|
/**
|
|
6
6
|
* Check if graph is K5 (complete graph with 5 nodes)
|
|
7
|
-
*
|
|
8
7
|
* @param nodes - List of nodes
|
|
9
8
|
* @param edges - List of edges
|
|
10
9
|
* @returns True if graph is K5
|
|
@@ -12,7 +11,6 @@ import { Node, Edge } from '../../types';
|
|
|
12
11
|
export declare function isK5(nodes: Node[], edges: Edge[]): boolean;
|
|
13
12
|
/**
|
|
14
13
|
* Check if graph is K3,3 (complete bipartite with 3,3 nodes)
|
|
15
|
-
*
|
|
16
14
|
* @param nodes - List of nodes
|
|
17
15
|
* @param edges - List of edges
|
|
18
16
|
* @returns True if graph is K3,3
|
|
@@ -20,7 +18,6 @@ export declare function isK5(nodes: Node[], edges: Edge[]): boolean;
|
|
|
20
18
|
export declare function isK33(nodes: Node[], edges: Edge[]): boolean;
|
|
21
19
|
/**
|
|
22
20
|
* Try to find a bipartite partition of the nodes
|
|
23
|
-
*
|
|
24
21
|
* @param nodes - List of nodes
|
|
25
22
|
* @param edges - List of edges
|
|
26
23
|
* @returns Array of two partitions, or null if not bipartite
|