@graphty/layout 1.2.0 → 1.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/ci.yml +3 -7
- package/CHANGELOG.md +7 -0
- package/README.md +1 -1
- package/dist/vitest.config.js +2 -2
- package/dist/vitest.config.js.map +1 -1
- package/examples/3d-kamada-kawai.html +4 -19
- package/examples/bfs-layout.html +26 -32
- package/examples/bipartite-layout.html +3 -3
- package/examples/forceatlas2-layout.html +106 -151
- package/{dist → examples}/layout-helpers.js +58 -30
- package/examples/multipartite-layout.html +32 -14
- package/examples/shell-layout.html +4 -2
- package/examples/spring-layout.html +1 -11
- package/package.json +3 -3
- package/src/algorithms/index.ts +6 -0
- package/src/algorithms/optimization/index.ts +12 -0
- package/src/algorithms/optimization/kamada-kawai-solver.ts +231 -0
- package/src/algorithms/optimization/lbfgs.ts +68 -0
- package/src/algorithms/optimization/line-search.ts +50 -0
- package/src/algorithms/optimization/types.ts +8 -0
- package/src/algorithms/planarity/check.ts +38 -0
- package/src/algorithms/planarity/embedding.ts +216 -0
- package/src/algorithms/planarity/index.ts +12 -0
- package/src/algorithms/planarity/lr-test.ts +70 -0
- package/src/algorithms/planarity/special-graphs.ts +126 -0
- package/src/generators/basic.ts +93 -0
- package/src/generators/bipartite.ts +45 -0
- package/src/generators/grid.ts +42 -0
- package/src/generators/index.ts +15 -0
- package/src/generators/random.ts +39 -0
- package/src/generators/scale-free.ts +72 -0
- package/src/index.ts +18 -0
- package/src/layouts/basic/index.ts +5 -0
- package/src/layouts/basic/random.ts +32 -0
- package/src/layouts/force-directed/arf.ts +130 -0
- package/src/layouts/force-directed/forceatlas2.ts +407 -0
- package/src/layouts/force-directed/fruchterman-reingold.ts +164 -0
- package/src/layouts/force-directed/index.ts +9 -0
- package/src/layouts/force-directed/kamada-kawai.ts +112 -0
- package/src/layouts/force-directed/spring.ts +35 -0
- package/src/layouts/geometric/circular.ts +77 -0
- package/src/layouts/geometric/index.ts +7 -0
- package/src/layouts/geometric/shell.ts +80 -0
- package/src/layouts/geometric/spiral.ts +93 -0
- package/src/layouts/hierarchical/bfs.ts +81 -0
- package/src/layouts/hierarchical/bipartite.ts +94 -0
- package/src/layouts/hierarchical/index.ts +7 -0
- package/src/layouts/hierarchical/multipartite.ts +88 -0
- package/src/layouts/index.ts +9 -0
- package/src/layouts/specialized/index.ts +6 -0
- package/src/layouts/specialized/planar.ts +65 -0
- package/src/layouts/specialized/spectral.ts +128 -0
- package/src/types/embedding.ts +11 -0
- package/src/types/graph.ts +13 -0
- package/src/types/index.ts +7 -0
- package/src/types/layout.ts +9 -0
- package/src/utils/graph.ts +77 -0
- package/src/utils/index.ts +9 -0
- package/src/utils/numpy.ts +108 -0
- package/src/utils/params.ts +26 -0
- package/src/utils/random.ts +53 -0
- package/src/utils/rescale.ts +137 -0
- package/test/arf-layout.test.ts +1 -1
- package/test/bfs-layout.test.ts +1 -1
- package/test/bipartite-layout.test.ts +1 -1
- package/test/circular-layout.test.ts +1 -1
- package/test/forceatlas2-layout.test.ts +1 -1
- package/test/fruchterman-reingold-layout.test.ts +1 -1
- package/test/graph-generators.test.ts +1 -1
- package/test/kamada-kawai-layout.test.ts +1 -1
- package/test/multipartite-layout.test.ts +1 -1
- package/test/planar-layout.test.ts +1 -1
- package/test/random-layout.test.ts +1 -1
- package/test/rescale-layout.test.ts +1 -1
- package/test/shell-layout.test.ts +1 -1
- package/test/spectral-layout.test.ts +1 -1
- package/test/spiral-layout.test.ts +1 -1
- package/test/spring-layout.test.ts +1 -1
- package/vitest.config.ts +2 -2
- package/dist/layout-helpers.d.ts +0 -123
- package/dist/layout-helpers.js.map +0 -1
- package/dist/layout.d.ts +0 -275
- package/dist/layout.js +0 -2304
- package/dist/layout.js.map +0 -1
- package/layout-helpers.ts +0 -560
- package/layout.ts +0 -2893
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Random number generator for seed-based randomization
|
|
3
|
+
* Maintains exact same functionality as original implementation
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
export class RandomNumberGenerator {
|
|
7
|
+
private seed: number;
|
|
8
|
+
private m: number;
|
|
9
|
+
private a: number;
|
|
10
|
+
private c: number;
|
|
11
|
+
private _state: number;
|
|
12
|
+
|
|
13
|
+
constructor(seed?: number) {
|
|
14
|
+
this.seed = seed || Math.floor(Math.random() * 1000000);
|
|
15
|
+
this.m = 2 ** 35 - 31;
|
|
16
|
+
this.a = 185852;
|
|
17
|
+
this.c = 1;
|
|
18
|
+
this._state = this.seed % this.m;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
_next(): number {
|
|
22
|
+
this._state = (this.a * this._state + this.c) % this.m;
|
|
23
|
+
return this._state / this.m;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
rand(shape: number | number[] | null = null): number | number[] | number[][] {
|
|
27
|
+
if (shape === null) {
|
|
28
|
+
return this._next();
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
if (typeof shape === 'number') {
|
|
32
|
+
const result: number[] = [];
|
|
33
|
+
for (let i = 0; i < shape; i++) {
|
|
34
|
+
result.push(this._next());
|
|
35
|
+
}
|
|
36
|
+
return result;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
if (shape.length === 1) {
|
|
40
|
+
const result: number[] = [];
|
|
41
|
+
for (let i = 0; i < shape[0]; i++) {
|
|
42
|
+
result.push(this._next());
|
|
43
|
+
}
|
|
44
|
+
return result;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
const result: any[] = [];
|
|
48
|
+
for (let i = 0; i < shape[0]; i++) {
|
|
49
|
+
result.push(this.rand(shape.slice(1)));
|
|
50
|
+
}
|
|
51
|
+
return result;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Layout rescaling utilities
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import { PositionMap } from '../types';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Returns scaled position array/dict to (-scale, scale) in all axes.
|
|
9
|
+
*
|
|
10
|
+
* @param pos - Position dictionary or array
|
|
11
|
+
* @param scale - Scale factor for positions
|
|
12
|
+
* @param center - Coordinate pair around which to center the layout
|
|
13
|
+
* @returns Rescaled positions dictionary
|
|
14
|
+
*/
|
|
15
|
+
export function rescaleLayout(
|
|
16
|
+
pos: PositionMap | number[][],
|
|
17
|
+
scale: number = 1,
|
|
18
|
+
center: number[] = [0, 0]
|
|
19
|
+
): PositionMap | number[][] {
|
|
20
|
+
// Check if pos is empty
|
|
21
|
+
if (Array.isArray(pos)) {
|
|
22
|
+
if (pos.length === 0) return [];
|
|
23
|
+
} else {
|
|
24
|
+
if (Object.keys(pos).length === 0) return {};
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
// Extract position values
|
|
28
|
+
const posValues: number[][] = Array.isArray(pos) ? pos : Object.values(pos);
|
|
29
|
+
const dim = posValues[0].length;
|
|
30
|
+
|
|
31
|
+
// Calculate center of positions
|
|
32
|
+
const posCenter = Array(dim).fill(0);
|
|
33
|
+
for (const p of posValues) {
|
|
34
|
+
for (let i = 0; i < dim; i++) {
|
|
35
|
+
posCenter[i] += p[i] / posValues.length;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// Center positions
|
|
40
|
+
let centeredPos: PositionMap | number[][] = {};
|
|
41
|
+
if (Array.isArray(pos)) {
|
|
42
|
+
centeredPos = pos.map(p => p.map((val, i) => val - posCenter[i]));
|
|
43
|
+
} else {
|
|
44
|
+
for (const [node, p] of Object.entries(pos)) {
|
|
45
|
+
(centeredPos as PositionMap)[node] = p.map((val, i) => val - posCenter[i]);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// Find maximum distance from center
|
|
50
|
+
let maxDistance = 0;
|
|
51
|
+
const centeredValues = Array.isArray(centeredPos) ? centeredPos : Object.values(centeredPos);
|
|
52
|
+
for (const p of centeredValues) {
|
|
53
|
+
const distance = Math.sqrt(p.reduce((sum, val) => sum + val * val, 0));
|
|
54
|
+
maxDistance = Math.max(maxDistance, distance);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
// Rescale
|
|
58
|
+
let scaledPos: PositionMap | number[][] = Array.isArray(pos) ? [] : {};
|
|
59
|
+
|
|
60
|
+
if (maxDistance > 0) {
|
|
61
|
+
const scaleFactor = scale / maxDistance;
|
|
62
|
+
|
|
63
|
+
if (Array.isArray(pos)) {
|
|
64
|
+
(scaledPos as number[][]) = (centeredPos as number[][]).map(p =>
|
|
65
|
+
p.map((val, i) => val * scaleFactor + center[i])
|
|
66
|
+
);
|
|
67
|
+
} else {
|
|
68
|
+
for (const [node, p] of Object.entries(centeredPos as PositionMap)) {
|
|
69
|
+
(scaledPos as PositionMap)[node] = p.map((val, i) => val * scaleFactor + center[i]);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
} else {
|
|
73
|
+
// All nodes at the same position
|
|
74
|
+
if (Array.isArray(pos)) {
|
|
75
|
+
(scaledPos as number[][]) = Array(pos.length).fill(0).map(() => [...center]);
|
|
76
|
+
} else {
|
|
77
|
+
for (const node of Object.keys(pos)) {
|
|
78
|
+
(scaledPos as PositionMap)[node] = [...center];
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
return scaledPos;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Return a dictionary of scaled positions centered at (0, 0).
|
|
88
|
+
*
|
|
89
|
+
* @param pos - Dictionary of positions
|
|
90
|
+
* @param scale - Scale factor for positions
|
|
91
|
+
* @returns Dictionary of scaled positions
|
|
92
|
+
*/
|
|
93
|
+
export function rescaleLayoutDict(
|
|
94
|
+
pos: PositionMap,
|
|
95
|
+
scale: number = 1
|
|
96
|
+
): PositionMap {
|
|
97
|
+
if (Object.keys(pos).length === 0) {
|
|
98
|
+
return {};
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
// Extract positions as array
|
|
102
|
+
const posArray = Object.values(pos);
|
|
103
|
+
|
|
104
|
+
// Find center of positions
|
|
105
|
+
const center: number[] = [];
|
|
106
|
+
for (let d = 0; d < posArray[0].length; d++) {
|
|
107
|
+
center[d] = posArray.reduce((sum, p) => sum + p[d], 0) / posArray.length;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
// Center positions
|
|
111
|
+
const centeredPos: PositionMap = {};
|
|
112
|
+
for (const [node, p] of Object.entries(pos)) {
|
|
113
|
+
centeredPos[node] = p.map((val, d) => val - center[d]);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
// Find maximum distance from center
|
|
117
|
+
let maxDist = 0;
|
|
118
|
+
for (const p of Object.values(centeredPos)) {
|
|
119
|
+
const dist = Math.sqrt(p.reduce((sum, val) => sum + val * val, 0));
|
|
120
|
+
maxDist = Math.max(maxDist, dist);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
// Scale positions
|
|
124
|
+
const scaledPos: PositionMap = {};
|
|
125
|
+
if (maxDist > 0) {
|
|
126
|
+
for (const [node, p] of Object.entries(centeredPos)) {
|
|
127
|
+
scaledPos[node] = p.map(val => val * scale / maxDist);
|
|
128
|
+
}
|
|
129
|
+
} else {
|
|
130
|
+
// All points at the center
|
|
131
|
+
for (const node of Object.keys(centeredPos)) {
|
|
132
|
+
scaledPos[node] = Array(centeredPos[node].length).fill(0);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
return scaledPos;
|
|
137
|
+
}
|
package/test/arf-layout.test.ts
CHANGED
package/test/bfs-layout.test.ts
CHANGED
package/vitest.config.ts
CHANGED
|
@@ -8,8 +8,8 @@ export default defineConfig({
|
|
|
8
8
|
testTimeout: 30000,
|
|
9
9
|
coverage: {
|
|
10
10
|
provider: 'v8',
|
|
11
|
-
reporter: ['text', 'json', 'html'],
|
|
12
|
-
include: ['
|
|
11
|
+
reporter: ['text', 'json', 'html', 'lcov'],
|
|
12
|
+
include: ['src/**/*.ts'],
|
|
13
13
|
exclude: ['**/*.d.ts', '**/*.test.ts'],
|
|
14
14
|
all: true,
|
|
15
15
|
thresholds: {
|
package/dist/layout-helpers.d.ts
DELETED
|
@@ -1,123 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Layout Helper Functions
|
|
3
|
-
* =======================
|
|
4
|
-
*
|
|
5
|
-
* Essential utilities for graph layouts
|
|
6
|
-
*/
|
|
7
|
-
import { Node, Graph } from './layout';
|
|
8
|
-
type PositionMap = Record<Node, number[]>;
|
|
9
|
-
/**
|
|
10
|
-
* Universal Node Grouping
|
|
11
|
-
* =======================
|
|
12
|
-
* Groups nodes for shell, multipartite, or custom layouts
|
|
13
|
-
*/
|
|
14
|
-
/**
|
|
15
|
-
* Group nodes by various centrality measures.
|
|
16
|
-
* Works for shell layout, multipartite layout, or any grouping need.
|
|
17
|
-
*
|
|
18
|
-
* @param graph - Input graph
|
|
19
|
-
* @param method - Grouping method
|
|
20
|
-
* @param numGroups - Number of groups to create
|
|
21
|
-
* @returns Array of node arrays (groups)
|
|
22
|
-
*
|
|
23
|
-
* @example
|
|
24
|
-
* // For shell layout
|
|
25
|
-
* const shells = groupNodes(graph, 'degree', 3);
|
|
26
|
-
* const positions = shellLayout(graph, shells);
|
|
27
|
-
*
|
|
28
|
-
* // For multipartite layout
|
|
29
|
-
* const layers = groupNodes(graph, 'bfs', 0); // 0 = auto
|
|
30
|
-
* const positions = multipartiteLayout(graph, layers);
|
|
31
|
-
*/
|
|
32
|
-
export declare function groupNodes(graph: Graph, method?: 'degree' | 'bfs' | 'k-core' | 'community', numGroups?: number, options?: {
|
|
33
|
-
root?: Node;
|
|
34
|
-
}): Node[][];
|
|
35
|
-
/**
|
|
36
|
-
* Bipartite Detection & Handling
|
|
37
|
-
* ==============================
|
|
38
|
-
*/
|
|
39
|
-
/**
|
|
40
|
-
* Detect if graph is bipartite and find the two sets.
|
|
41
|
-
*
|
|
42
|
-
* @param graph - Input graph
|
|
43
|
-
* @returns Bipartite sets or null if not bipartite
|
|
44
|
-
*
|
|
45
|
-
* @example
|
|
46
|
-
* const result = detectBipartite(graph);
|
|
47
|
-
* if (result) {
|
|
48
|
-
* const positions = bipartiteLayout(graph, result.setA);
|
|
49
|
-
* }
|
|
50
|
-
*/
|
|
51
|
-
export declare function detectBipartite(graph: Graph): {
|
|
52
|
-
setA: Node[];
|
|
53
|
-
setB: Node[];
|
|
54
|
-
} | null;
|
|
55
|
-
/**
|
|
56
|
-
* Layout Analysis & Optimization
|
|
57
|
-
* ==============================
|
|
58
|
-
*/
|
|
59
|
-
/**
|
|
60
|
-
* Find the best root node for tree-like layouts (BFS, hierarchical).
|
|
61
|
-
*
|
|
62
|
-
* @param graph - Input graph
|
|
63
|
-
* @returns Best root node
|
|
64
|
-
*/
|
|
65
|
-
export declare function findBestRoot(graph: Graph): Node | null;
|
|
66
|
-
/**
|
|
67
|
-
* Check if a graph is planar (can be drawn without edge crossings).
|
|
68
|
-
*
|
|
69
|
-
* @param graph - Input graph
|
|
70
|
-
* @returns true if planar
|
|
71
|
-
*/
|
|
72
|
-
export declare function isPlanar(graph: Graph): boolean;
|
|
73
|
-
/**
|
|
74
|
-
* Auto-configure force-directed layout parameters.
|
|
75
|
-
*
|
|
76
|
-
* @param graph - Input graph
|
|
77
|
-
* @returns Recommended parameters
|
|
78
|
-
*/
|
|
79
|
-
export declare function autoConfigureForce(graph: Graph): {
|
|
80
|
-
k: number;
|
|
81
|
-
iterations: number;
|
|
82
|
-
gravity: number;
|
|
83
|
-
scalingRatio: number;
|
|
84
|
-
};
|
|
85
|
-
/**
|
|
86
|
-
* Layout Quality Metrics
|
|
87
|
-
* ======================
|
|
88
|
-
*/
|
|
89
|
-
/**
|
|
90
|
-
* Calculate simple layout quality metrics.
|
|
91
|
-
*
|
|
92
|
-
* @param graph - Input graph
|
|
93
|
-
* @param positions - Layout positions
|
|
94
|
-
* @returns Quality metrics
|
|
95
|
-
*/
|
|
96
|
-
export declare function layoutQuality(graph: Graph, positions: PositionMap): {
|
|
97
|
-
avgEdgeLength: number;
|
|
98
|
-
edgeLengthStdDev: number;
|
|
99
|
-
minNodeDistance: number;
|
|
100
|
-
aspectRatio: number;
|
|
101
|
-
};
|
|
102
|
-
/**
|
|
103
|
-
* Layout Utilities
|
|
104
|
-
* ================
|
|
105
|
-
*/
|
|
106
|
-
/**
|
|
107
|
-
* Combine multiple layouts with weights.
|
|
108
|
-
*
|
|
109
|
-
* @param layouts - Array of position maps
|
|
110
|
-
* @param weights - Weight for each layout (default: equal)
|
|
111
|
-
* @returns Combined positions
|
|
112
|
-
*/
|
|
113
|
-
export declare function combineLayouts(layouts: PositionMap[], weights?: number[]): PositionMap;
|
|
114
|
-
/**
|
|
115
|
-
* Create smooth animation frames between layouts.
|
|
116
|
-
*
|
|
117
|
-
* @param from - Starting positions
|
|
118
|
-
* @param to - Ending positions
|
|
119
|
-
* @param steps - Number of frames
|
|
120
|
-
* @returns Array of position maps
|
|
121
|
-
*/
|
|
122
|
-
export declare function interpolateLayouts(from: PositionMap, to: PositionMap, steps?: number): PositionMap[];
|
|
123
|
-
export {};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"layout-helpers.js","sourceRoot":"","sources":["../layout-helpers.ts"],"names":[],"mappings":"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"}
|