@graphty/layout 1.2.8 → 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 +394 -404
- package/dist/layout.js +881 -821
- 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 +3 -3
- package/dist/src/algorithms/planarity/check.js +7 -7
- package/dist/src/algorithms/planarity/check.js.map +1 -1
- package/dist/src/algorithms/planarity/embedding.d.ts +3 -5
- package/dist/src/algorithms/planarity/embedding.js +20 -16
- 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 +3 -3
- package/dist/src/algorithms/planarity/lr-test.js +5 -5
- 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 +3 -3
- package/dist/src/layouts/specialized/planar.js +8 -8
- 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 -21
- package/src/algorithms/planarity/embedding.ts +159 -165
- package/src/algorithms/planarity/index.ts +4 -8
- package/src/algorithms/planarity/lr-test.ts +46 -45
- 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 +42 -41
- 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,12 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Spectral layout algorithm using eigenvectors of the graph Laplacian
|
|
3
3
|
*/
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import { rescaleLayout } from
|
|
4
|
+
import { getEdgesFromGraph, getNodesFromGraph } from "../../utils/graph";
|
|
5
|
+
import { _processParams } from "../../utils/params";
|
|
6
|
+
import { rescaleLayout } from "../../utils/rescale";
|
|
7
7
|
/**
|
|
8
8
|
* Position nodes in a spectral layout using eigenvectors of the graph Laplacian.
|
|
9
|
-
*
|
|
10
9
|
* @param G - Graph
|
|
11
10
|
* @param scale - Scale factor for positions
|
|
12
11
|
* @param center - Coordinate pair around which to center the layout
|
|
@@ -25,18 +24,20 @@ export function spectralLayout(G, scale = 1, center = null, dim = 2) {
|
|
|
25
24
|
else if (nodes.length === 1) {
|
|
26
25
|
return { [nodes[0]]: center };
|
|
27
26
|
}
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
};
|
|
33
|
-
}
|
|
27
|
+
return {
|
|
28
|
+
[nodes[0]]: center.map((v) => v - scale),
|
|
29
|
+
[nodes[1]]: center.map((v) => v + scale),
|
|
30
|
+
};
|
|
34
31
|
}
|
|
35
32
|
// Create adjacency matrix
|
|
36
33
|
const N = nodes.length;
|
|
37
34
|
const nodeIndices = {};
|
|
38
|
-
nodes.forEach((node, i) => {
|
|
39
|
-
|
|
35
|
+
nodes.forEach((node, i) => {
|
|
36
|
+
nodeIndices[node] = i;
|
|
37
|
+
});
|
|
38
|
+
const A = Array(N)
|
|
39
|
+
.fill(0)
|
|
40
|
+
.map(() => Array(N).fill(0));
|
|
40
41
|
const edges = getEdgesFromGraph(graph);
|
|
41
42
|
for (const [source, target] of edges) {
|
|
42
43
|
const i = nodeIndices[source];
|
|
@@ -45,7 +46,9 @@ export function spectralLayout(G, scale = 1, center = null, dim = 2) {
|
|
|
45
46
|
A[j][i] = 1; // Make symmetric for undirected graphs
|
|
46
47
|
}
|
|
47
48
|
// Create Laplacian matrix: L = D - A where D is degree matrix
|
|
48
|
-
const L = Array(N)
|
|
49
|
+
const L = Array(N)
|
|
50
|
+
.fill(0)
|
|
51
|
+
.map(() => Array(N).fill(0));
|
|
49
52
|
for (let i = 0; i < N; i++) {
|
|
50
53
|
// Compute degree (sum of row)
|
|
51
54
|
L[i][i] = A[i].reduce((sum, val) => sum + val, 0);
|
|
@@ -58,7 +61,9 @@ export function spectralLayout(G, scale = 1, center = null, dim = 2) {
|
|
|
58
61
|
const eigenvectors = [];
|
|
59
62
|
// For each dimension, find an eigenvector
|
|
60
63
|
for (let d = 0; d < dim; d++) {
|
|
61
|
-
let vector = Array(N)
|
|
64
|
+
let vector = Array(N)
|
|
65
|
+
.fill(0)
|
|
66
|
+
.map(() => Math.random() - 0.5);
|
|
62
67
|
// Orthogonalize against previous eigenvectors
|
|
63
68
|
for (const ev of eigenvectors) {
|
|
64
69
|
const dot = vector.reduce((acc, val, idx) => acc + val * ev[idx], 0);
|
|
@@ -66,7 +71,7 @@ export function spectralLayout(G, scale = 1, center = null, dim = 2) {
|
|
|
66
71
|
}
|
|
67
72
|
// Normalize
|
|
68
73
|
const norm = Math.sqrt(vector.reduce((acc, val) => acc + val * val, 0));
|
|
69
|
-
vector = vector.map(val => val / norm);
|
|
74
|
+
vector = vector.map((val) => val / norm);
|
|
70
75
|
// Apply shifted inverse iteration to find smallest non-zero eigenvector
|
|
71
76
|
// This is a simplification of the actual algorithm
|
|
72
77
|
for (let iter = 0; iter < 100; iter++) {
|
|
@@ -79,17 +84,22 @@ export function spectralLayout(G, scale = 1, center = null, dim = 2) {
|
|
|
79
84
|
}
|
|
80
85
|
// Orthogonalize against the constant vector (eigenvector with eigenvalue 0)
|
|
81
86
|
const mean = newVec.reduce((acc, val) => acc + val, 0) / N;
|
|
82
|
-
newVec.forEach((val, idx, arr) => {
|
|
87
|
+
newVec.forEach((val, idx, arr) => {
|
|
88
|
+
arr[idx] = val - mean;
|
|
89
|
+
});
|
|
83
90
|
// Normalize
|
|
84
91
|
const newNorm = Math.sqrt(newVec.reduce((acc, val) => acc + val * val, 0));
|
|
85
|
-
if (newNorm < 1e-10)
|
|
86
|
-
continue;
|
|
87
|
-
|
|
92
|
+
if (newNorm < 1e-10) {
|
|
93
|
+
continue;
|
|
94
|
+
} // Skip if vector is close to zero
|
|
95
|
+
vector = newVec.map((val) => val / newNorm);
|
|
88
96
|
}
|
|
89
97
|
eigenvectors.push(vector);
|
|
90
98
|
}
|
|
91
99
|
// Create position array from eigenvectors
|
|
92
|
-
const positions = Array(N)
|
|
100
|
+
const positions = Array(N)
|
|
101
|
+
.fill(0)
|
|
102
|
+
.map(() => Array(dim).fill(0));
|
|
93
103
|
for (let i = 0; i < N; i++) {
|
|
94
104
|
for (let d = 0; d < dim; d++) {
|
|
95
105
|
positions[i][d] = eigenvectors[d][i];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spectral.js","sourceRoot":"","sources":["../../../../src/layouts/specialized/spectral.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"spectral.js","sourceRoot":"","sources":["../../../../src/layouts/specialized/spectral.ts"],"names":[],"mappings":"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"}
|
package/dist/src/types/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC"}
|
|
@@ -1,24 +1,21 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Graph utility functions
|
|
3
3
|
*/
|
|
4
|
-
import { Graph, Node
|
|
4
|
+
import { Edge, Graph, Node } from "../types";
|
|
5
5
|
/**
|
|
6
6
|
* Extract nodes from a graph object
|
|
7
|
-
*
|
|
8
7
|
* @param G - Graph or list of nodes
|
|
9
8
|
* @returns Array of nodes
|
|
10
9
|
*/
|
|
11
10
|
export declare function getNodesFromGraph(G: Graph | Node[]): Node[];
|
|
12
11
|
/**
|
|
13
12
|
* Extract edges from a graph object
|
|
14
|
-
*
|
|
15
13
|
* @param G - Graph or list of nodes
|
|
16
14
|
* @returns Array of edges
|
|
17
15
|
*/
|
|
18
16
|
export declare function getEdgesFromGraph(G: Graph | Node[]): Edge[];
|
|
19
17
|
/**
|
|
20
18
|
* Get the degree of a node in the graph
|
|
21
|
-
*
|
|
22
19
|
* @param graph - Graph object
|
|
23
20
|
* @param node - Node to get degree for
|
|
24
21
|
* @returns Degree of the node
|
|
@@ -26,7 +23,6 @@ export declare function getEdgesFromGraph(G: Graph | Node[]): Edge[];
|
|
|
26
23
|
export declare function getNodeDegree(graph: Graph, node: Node): number;
|
|
27
24
|
/**
|
|
28
25
|
* Get the neighbors of a node in the graph
|
|
29
|
-
*
|
|
30
26
|
* @param graph - Graph object
|
|
31
27
|
* @param node - Node to get neighbors for
|
|
32
28
|
* @returns Array of neighbor nodes
|
package/dist/src/utils/graph.js
CHANGED
|
@@ -3,7 +3,6 @@
|
|
|
3
3
|
*/
|
|
4
4
|
/**
|
|
5
5
|
* Extract nodes from a graph object
|
|
6
|
-
*
|
|
7
6
|
* @param G - Graph or list of nodes
|
|
8
7
|
* @returns Array of nodes
|
|
9
8
|
*/
|
|
@@ -15,7 +14,6 @@ export function getNodesFromGraph(G) {
|
|
|
15
14
|
}
|
|
16
15
|
/**
|
|
17
16
|
* Extract edges from a graph object
|
|
18
|
-
*
|
|
19
17
|
* @param G - Graph or list of nodes
|
|
20
18
|
* @returns Array of edges
|
|
21
19
|
*/
|
|
@@ -27,14 +25,14 @@ export function getEdgesFromGraph(G) {
|
|
|
27
25
|
}
|
|
28
26
|
/**
|
|
29
27
|
* Get the degree of a node in the graph
|
|
30
|
-
*
|
|
31
28
|
* @param graph - Graph object
|
|
32
29
|
* @param node - Node to get degree for
|
|
33
30
|
* @returns Degree of the node
|
|
34
31
|
*/
|
|
35
32
|
export function getNodeDegree(graph, node) {
|
|
36
|
-
if (!graph.edges)
|
|
33
|
+
if (!graph.edges) {
|
|
37
34
|
return 0;
|
|
35
|
+
}
|
|
38
36
|
const edges = graph.edges();
|
|
39
37
|
let degree = 0;
|
|
40
38
|
for (const [source, target] of edges) {
|
|
@@ -46,14 +44,14 @@ export function getNodeDegree(graph, node) {
|
|
|
46
44
|
}
|
|
47
45
|
/**
|
|
48
46
|
* Get the neighbors of a node in the graph
|
|
49
|
-
*
|
|
50
47
|
* @param graph - Graph object
|
|
51
48
|
* @param node - Node to get neighbors for
|
|
52
49
|
* @returns Array of neighbor nodes
|
|
53
50
|
*/
|
|
54
51
|
export function getNeighbors(graph, node) {
|
|
55
|
-
if (!graph.edges)
|
|
52
|
+
if (!graph.edges) {
|
|
56
53
|
return [];
|
|
54
|
+
}
|
|
57
55
|
const neighbors = new Set();
|
|
58
56
|
const edges = graph.edges();
|
|
59
57
|
for (const [source, target] of edges) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graph.js","sourceRoot":"","sources":["../../../src/utils/graph.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH
|
|
1
|
+
{"version":3,"file":"graph.js","sourceRoot":"","sources":["../../../src/utils/graph.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,CAAiB;IAC/C,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QACnB,OAAO,CAAC,CAAC;IACb,CAAC;IACD,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC;AACrB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,CAAiB;IAC/C,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QACnB,OAAO,EAAE,CAAC;IACd,CAAC;IACD,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC;AACrB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,KAAY,EAAE,IAAU;IAClD,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QAAA,OAAO,CAAC,CAAC;IAAA,CAAC;IAE7B,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;IAC5B,IAAI,MAAM,GAAG,CAAC,CAAC;IAEf,KAAK,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACnC,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;YACrC,MAAM,EAAE,CAAC;QACb,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,KAAY,EAAE,IAAU;IACjD,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QAAA,OAAO,EAAE,CAAC;IAAA,CAAC;IAE9B,MAAM,SAAS,GAAG,IAAI,GAAG,EAAQ,CAAC;IAClC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;IAE5B,KAAK,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACnC,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;YAClB,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC1B,CAAC;aAAM,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;YACzB,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC1B,CAAC;IACL,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AACjC,CAAC"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Re-export all utilities
|
|
3
3
|
*/
|
|
4
|
-
export * from
|
|
5
|
-
export * from
|
|
6
|
-
export * from
|
|
7
|
-
export * from
|
|
8
|
-
export * from
|
|
4
|
+
export * from "./graph";
|
|
5
|
+
export * from "./numpy";
|
|
6
|
+
export * from "./params";
|
|
7
|
+
export * from "./random";
|
|
8
|
+
export * from "./rescale";
|
package/dist/src/utils/index.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Re-export all utilities
|
|
3
3
|
*/
|
|
4
|
-
export * from
|
|
5
|
-
export * from
|
|
6
|
-
export * from
|
|
7
|
-
export * from
|
|
8
|
-
export * from
|
|
4
|
+
export * from "./graph";
|
|
5
|
+
export * from "./numpy";
|
|
6
|
+
export * from "./params";
|
|
7
|
+
export * from "./random";
|
|
8
|
+
export * from "./rescale";
|
|
9
9
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,SAAS,CAAC;AACxB,cAAc,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC"}
|
package/dist/src/utils/numpy.js
CHANGED
|
@@ -4,22 +4,26 @@
|
|
|
4
4
|
*/
|
|
5
5
|
export const np = {
|
|
6
6
|
zeros: function (shape) {
|
|
7
|
-
if (typeof shape ===
|
|
7
|
+
if (typeof shape === "number") {
|
|
8
8
|
return Array(shape).fill(0);
|
|
9
9
|
}
|
|
10
10
|
if (shape.length === 1) {
|
|
11
11
|
return Array(shape[0]).fill(0);
|
|
12
12
|
}
|
|
13
|
-
return Array(shape[0])
|
|
13
|
+
return Array(shape[0])
|
|
14
|
+
.fill(0)
|
|
15
|
+
.map(() => this.zeros(shape.slice(1)));
|
|
14
16
|
},
|
|
15
17
|
ones: function (shape) {
|
|
16
|
-
if (typeof shape ===
|
|
18
|
+
if (typeof shape === "number") {
|
|
17
19
|
return Array(shape).fill(1);
|
|
18
20
|
}
|
|
19
21
|
if (shape.length === 1) {
|
|
20
22
|
return Array(shape[0]).fill(1);
|
|
21
23
|
}
|
|
22
|
-
return Array(shape[0])
|
|
24
|
+
return Array(shape[0])
|
|
25
|
+
.fill(1)
|
|
26
|
+
.map(() => this.ones(shape.slice(1)));
|
|
23
27
|
},
|
|
24
28
|
linspace: function (start, stop, num) {
|
|
25
29
|
if (num === 1) {
|
|
@@ -58,44 +62,46 @@ export const np = {
|
|
|
58
62
|
}
|
|
59
63
|
return result;
|
|
60
64
|
}
|
|
61
|
-
return arr.map(row => np.mean(row));
|
|
65
|
+
return arr.map((row) => np.mean(row));
|
|
62
66
|
},
|
|
63
67
|
add: function (a, b) {
|
|
64
68
|
if (!Array.isArray(a) && !Array.isArray(b)) {
|
|
65
69
|
return a + b;
|
|
66
70
|
}
|
|
67
71
|
if (!Array.isArray(a)) {
|
|
68
|
-
return b.map(val => a + val);
|
|
72
|
+
return b.map((val) => a + val);
|
|
69
73
|
}
|
|
70
74
|
if (!Array.isArray(b)) {
|
|
71
|
-
return a.map(val => val + b);
|
|
75
|
+
return (a).map((val) => val + b);
|
|
72
76
|
}
|
|
73
|
-
return a.map((val, i) => val + b[i]);
|
|
77
|
+
return (a).map((val, i) => val + (b)[i]);
|
|
74
78
|
},
|
|
75
79
|
subtract: function (a, b) {
|
|
76
80
|
if (!Array.isArray(a) && !Array.isArray(b)) {
|
|
77
81
|
return a - b;
|
|
78
82
|
}
|
|
79
83
|
if (!Array.isArray(a)) {
|
|
80
|
-
return b.map(val => a - val);
|
|
84
|
+
return b.map((val) => a - val);
|
|
81
85
|
}
|
|
82
86
|
if (!Array.isArray(b)) {
|
|
83
|
-
return a.map(val => val - b);
|
|
87
|
+
return (a).map((val) => val - b);
|
|
84
88
|
}
|
|
85
|
-
return a.map((val, i) => val - b[i]);
|
|
89
|
+
return (a).map((val, i) => val - (b)[i]);
|
|
86
90
|
},
|
|
87
91
|
max: function (arr) {
|
|
88
|
-
if (!Array.isArray(arr))
|
|
92
|
+
if (!Array.isArray(arr)) {
|
|
89
93
|
return arr;
|
|
90
|
-
|
|
94
|
+
}
|
|
95
|
+
return Math.max(...((arr).flat(Infinity)));
|
|
91
96
|
},
|
|
92
97
|
min: function (arr) {
|
|
93
|
-
if (!Array.isArray(arr))
|
|
98
|
+
if (!Array.isArray(arr)) {
|
|
94
99
|
return arr;
|
|
95
|
-
|
|
100
|
+
}
|
|
101
|
+
return Math.min(...((arr).flat(Infinity)));
|
|
96
102
|
},
|
|
97
103
|
norm: function (arr) {
|
|
98
104
|
return Math.sqrt(arr.reduce((sum, val) => sum + val * val, 0));
|
|
99
|
-
}
|
|
105
|
+
},
|
|
100
106
|
};
|
|
101
107
|
//# sourceMappingURL=numpy.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"numpy.js","sourceRoot":"","sources":["../../../src/utils/numpy.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,CAAC,MAAM,EAAE,GAAG;
|
|
1
|
+
{"version":3,"file":"numpy.js","sourceRoot":"","sources":["../../../src/utils/numpy.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Parameter processing utilities
|
|
3
3
|
*/
|
|
4
|
-
import { Graph, Node } from
|
|
4
|
+
import { Graph, Node } from "../types";
|
|
5
5
|
/**
|
|
6
6
|
* Process and validate layout parameters
|
|
7
7
|
* Helper function similar to _process_params in Python version
|
|
8
|
-
*
|
|
9
8
|
* @param G - Graph object or array of nodes
|
|
10
9
|
* @param center - Center coordinates or null
|
|
11
10
|
* @param dim - Dimension of layout
|
package/dist/src/utils/params.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"params.js","sourceRoot":"","sources":["../../../src/utils/params.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH
|
|
1
|
+
{"version":3,"file":"params.js","sourceRoot":"","sources":["../../../src/utils/params.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc,CAC1B,CAAiB,EACjB,MAAuB,EACvB,GAAW;IAEX,IAAI,CAAC,MAAM,EAAE,CAAC;QACV,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAChC,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC;IACnF,CAAC;IAED,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC;AACzB,CAAC"}
|
|
@@ -2,13 +2,30 @@
|
|
|
2
2
|
* Random number generator for seed-based randomization
|
|
3
3
|
* Maintains exact same functionality as original implementation
|
|
4
4
|
*/
|
|
5
|
+
/**
|
|
6
|
+
* A deterministic random number generator based on a linear congruential generator (LCG) algorithm.
|
|
7
|
+
* Provides consistent random sequences when initialized with the same seed.
|
|
8
|
+
*/
|
|
5
9
|
export declare class RandomNumberGenerator {
|
|
6
10
|
private seed;
|
|
7
11
|
private m;
|
|
8
12
|
private a;
|
|
9
13
|
private c;
|
|
10
14
|
private _state;
|
|
15
|
+
/**
|
|
16
|
+
* Creates a new random number generator instance.
|
|
17
|
+
* @param seed - Initial seed value for the generator. If not provided, uses a random seed.
|
|
18
|
+
*/
|
|
11
19
|
constructor(seed?: number);
|
|
20
|
+
/**
|
|
21
|
+
* Generates the next random number in the sequence.
|
|
22
|
+
* @returns A random number between 0 and 1.
|
|
23
|
+
*/
|
|
12
24
|
_next(): number;
|
|
25
|
+
/**
|
|
26
|
+
* Generates random numbers according to the specified shape.
|
|
27
|
+
* @param shape - Determines the output format: null for single number, number for 1D array, array for multi-dimensional array.
|
|
28
|
+
* @returns A random number, 1D array, or multi-dimensional array depending on the shape parameter.
|
|
29
|
+
*/
|
|
13
30
|
rand(shape?: number | number[] | null): number | number[] | number[][];
|
|
14
31
|
}
|
package/dist/src/utils/random.js
CHANGED
|
@@ -2,7 +2,15 @@
|
|
|
2
2
|
* Random number generator for seed-based randomization
|
|
3
3
|
* Maintains exact same functionality as original implementation
|
|
4
4
|
*/
|
|
5
|
+
/**
|
|
6
|
+
* A deterministic random number generator based on a linear congruential generator (LCG) algorithm.
|
|
7
|
+
* Provides consistent random sequences when initialized with the same seed.
|
|
8
|
+
*/
|
|
5
9
|
export class RandomNumberGenerator {
|
|
10
|
+
/**
|
|
11
|
+
* Creates a new random number generator instance.
|
|
12
|
+
* @param seed - Initial seed value for the generator. If not provided, uses a random seed.
|
|
13
|
+
*/
|
|
6
14
|
constructor(seed) {
|
|
7
15
|
this.seed = seed || Math.floor(Math.random() * 1000000);
|
|
8
16
|
this.m = 2 ** 35 - 31;
|
|
@@ -10,15 +18,24 @@ export class RandomNumberGenerator {
|
|
|
10
18
|
this.c = 1;
|
|
11
19
|
this._state = this.seed % this.m;
|
|
12
20
|
}
|
|
21
|
+
/**
|
|
22
|
+
* Generates the next random number in the sequence.
|
|
23
|
+
* @returns A random number between 0 and 1.
|
|
24
|
+
*/
|
|
13
25
|
_next() {
|
|
14
26
|
this._state = (this.a * this._state + this.c) % this.m;
|
|
15
27
|
return this._state / this.m;
|
|
16
28
|
}
|
|
29
|
+
/**
|
|
30
|
+
* Generates random numbers according to the specified shape.
|
|
31
|
+
* @param shape - Determines the output format: null for single number, number for 1D array, array for multi-dimensional array.
|
|
32
|
+
* @returns A random number, 1D array, or multi-dimensional array depending on the shape parameter.
|
|
33
|
+
*/
|
|
17
34
|
rand(shape = null) {
|
|
18
35
|
if (shape === null) {
|
|
19
36
|
return this._next();
|
|
20
37
|
}
|
|
21
|
-
if (typeof shape ===
|
|
38
|
+
if (typeof shape === "number") {
|
|
22
39
|
const result = [];
|
|
23
40
|
for (let i = 0; i < shape; i++) {
|
|
24
41
|
result.push(this._next());
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"random.js","sourceRoot":"","sources":["../../../src/utils/random.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,OAAO,qBAAqB;
|
|
1
|
+
{"version":3,"file":"random.js","sourceRoot":"","sources":["../../../src/utils/random.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;GAGG;AACH,MAAM,OAAO,qBAAqB;IAO9B;;;OAGG;IACH,YAAY,IAAa;QACrB,IAAI,CAAC,IAAI,GAAG,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC;QACxD,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC;QACtB,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC;QAChB,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACX,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC;IACrC,CAAC;IAED;;;OAGG;IACH,KAAK;QACD,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;QACvD,OAAO,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC;IAChC,CAAC;IAED;;;;OAIG;IACH,IAAI,CAAC,QAAkC,IAAI;QACvC,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACjB,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC;QACxB,CAAC;QAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC5B,MAAM,MAAM,GAAa,EAAE,CAAC;YAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC7B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;YAC9B,CAAC;YACD,OAAO,MAAM,CAAC;QAClB,CAAC;QAED,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACrB,MAAM,MAAM,GAAa,EAAE,CAAC;YAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAChC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;YAC9B,CAAC;YACD,OAAO,MAAM,CAAC;QAClB,CAAC;QAED,MAAM,MAAM,GAAU,EAAE,CAAC;QACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAChC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3C,CAAC;QACD,OAAO,MAAM,CAAC;IAClB,CAAC;CACJ"}
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Layout rescaling utilities
|
|
3
3
|
*/
|
|
4
|
-
import { PositionMap } from
|
|
4
|
+
import { PositionMap } from "../types";
|
|
5
5
|
/**
|
|
6
6
|
* Returns scaled position array/dict to (-scale, scale) in all axes.
|
|
7
|
-
*
|
|
8
7
|
* @param pos - Position dictionary or array
|
|
9
8
|
* @param scale - Scale factor for positions
|
|
10
9
|
* @param center - Coordinate pair around which to center the layout
|
|
@@ -13,7 +12,6 @@ import { PositionMap } from '../types';
|
|
|
13
12
|
export declare function rescaleLayout(pos: PositionMap | number[][], scale?: number, center?: number[] | null): PositionMap | number[][];
|
|
14
13
|
/**
|
|
15
14
|
* Return a dictionary of scaled positions centered at (0, 0).
|
|
16
|
-
*
|
|
17
15
|
* @param pos - Dictionary of positions
|
|
18
16
|
* @param scale - Scale factor for positions
|
|
19
17
|
* @returns Dictionary of scaled positions
|