@graphty/cytoscape-extensions 0.0.28 → 0.0.29
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/dist/algorithm-options.d.ts +5 -0
- package/dist/algorithm-options.d.ts.map +1 -0
- package/dist/algorithm-options.js +285 -0
- package/dist/algorithm-options.js.map +1 -0
- package/dist/algorithms.d.ts +489 -0
- package/dist/algorithms.d.ts.map +1 -0
- package/dist/algorithms.js +1184 -0
- package/dist/algorithms.js.map +1 -0
- package/dist/cdn/chunks/elements-DkrLtNP8.js +1 -0
- package/dist/cdn/chunks/gpu-platform-browser-VBah74fl.js +2825 -0
- package/dist/cdn/chunks/index-C4RZkds_.js +10 -0
- package/dist/cdn/chunks/index-CAhmhhmb.js +1 -0
- package/dist/cdn/chunks/io-Da5POp5D.js +268 -0
- package/dist/cdn/chunks/preload-helper-DEpZAvig.js +1 -0
- package/dist/cdn/chunks/samples-BkLzaDJ3.js +1 -0
- package/dist/cdn/chunks/sigv4-EokFic1V-CWJiFeEe.js +3 -0
- package/dist/cdn/chunks/sources-cypher-BGGD4kJ9.js +5 -0
- package/dist/cdn/chunks/sources-ndex-CxnPOYff.js +1 -0
- package/dist/cdn/chunks/sources-rest-BPNV8mX-.js +1 -0
- package/dist/cdn/chunks/sources-sparql-BiqRQuHD.js +5 -0
- package/dist/cdn/cytoscape-extensions.js +1 -0
- package/dist/cdn/io.js +1 -0
- package/dist/cytoscape-extensions.bundle.js +2825 -0
- package/dist/elements.d.ts +69 -0
- package/dist/elements.d.ts.map +1 -0
- package/dist/elements.js +343 -0
- package/dist/elements.js.map +1 -0
- package/dist/gpu-platform-browser.d.ts +11 -0
- package/dist/gpu-platform-browser.d.ts.map +1 -0
- package/dist/gpu-platform-browser.js +22 -0
- package/dist/gpu-platform-browser.js.map +1 -0
- package/dist/gpu-platform-node.d.ts +15 -0
- package/dist/gpu-platform-node.d.ts.map +1 -0
- package/dist/gpu-platform-node.js +27 -0
- package/dist/gpu-platform-node.js.map +1 -0
- package/dist/gpu.d.ts +149 -0
- package/dist/gpu.d.ts.map +1 -0
- package/dist/gpu.js +312 -0
- package/dist/gpu.js.map +1 -0
- package/dist/graph-data.d.ts +101 -0
- package/dist/graph-data.d.ts.map +1 -0
- package/dist/graph-data.js +147 -0
- package/dist/graph-data.js.map +1 -0
- package/dist/index.d.ts +36 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +48 -0
- package/dist/index.js.map +1 -0
- package/dist/io.d.ts +111 -0
- package/dist/io.d.ts.map +1 -0
- package/dist/io.js +258 -0
- package/dist/io.js.map +1 -0
- package/dist/layouts.d.ts +207 -0
- package/dist/layouts.d.ts.map +1 -0
- package/dist/layouts.js +615 -0
- package/dist/layouts.js.map +1 -0
- package/dist/lazy.d.ts +21 -0
- package/dist/lazy.d.ts.map +1 -0
- package/dist/lazy.js +32 -0
- package/dist/lazy.js.map +1 -0
- package/dist/samples.d.ts +115 -0
- package/dist/samples.d.ts.map +1 -0
- package/dist/samples.js +237 -0
- package/dist/samples.js.map +1 -0
- package/dist/snapshot.d.ts +81 -0
- package/dist/snapshot.d.ts.map +1 -0
- package/dist/snapshot.js +225 -0
- package/dist/snapshot.js.map +1 -0
- package/dist/webgpu-provider.d.ts +25 -0
- package/dist/webgpu-provider.d.ts.map +1 -0
- package/dist/webgpu-provider.js +53 -0
- package/dist/webgpu-provider.js.map +1 -0
- package/package.json +13 -9
|
@@ -0,0 +1,489 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Every @graphty/algorithms algorithm as a Cytoscape.js 3.x collection and core method, named "graphty<Name>".
|
|
3
|
+
*
|
|
4
|
+
* The conventions, which follow Cytoscape's built-in algorithms:
|
|
5
|
+
* - scope is the calling collection (its nodes, and its edges whose two ends are in it); `cy.graphtyX(o)` is
|
|
6
|
+
* `cy.elements().graphtyX(o)`;
|
|
7
|
+
* - synchronous, one options object;
|
|
8
|
+
* - `directed` (default false) and `weight` (an edge data field, or a function of the edge) describe the graph;
|
|
9
|
+
* - nodes are named by a selector or a collection (`root`, `goal`, `source`, `sink`, ...);
|
|
10
|
+
* - results are keyed by element: accessor functions (`score(node)`, `distanceTo(node)`), collections, and arrays
|
|
11
|
+
* of collections, never index arrays;
|
|
12
|
+
* - `field` writes the per-element value (what `score` or `cluster` returns) into `data(field)`, so a stylesheet
|
|
13
|
+
* can map it;
|
|
14
|
+
* - every other option the method's type lists goes to the @graphty/algorithms function unchanged, and an option it
|
|
15
|
+
* does not list throws (src/algorithm-options.ts, generated from those types);
|
|
16
|
+
* - errors throw, from the adapter (a selection that matches nothing, a weight given to an algorithm that ignores
|
|
17
|
+
* weights, an unknown option) and from the algorithm (an undirected graph given to one that needs a directed one),
|
|
18
|
+
* each message starting with the method name.
|
|
19
|
+
*/
|
|
20
|
+
import { type AcceleratedAlgorithms, allPairsShortestPath, type ApspOptions, bellmanFord, betweennessCentrality, type BetweennessOptions, type BipartiteOptions, breadthFirstSearch, type CandidateOptions, closenessCentrality, type ClosenessOptions, connectedComponents, type DegreeCentralityOptions, type DeltaPageRankComputeOptions, dijkstra, type DirectionOptimizedBfsOptions, edgeBetweennessCentrality, eigenvectorCentrality, type EigenvectorOptions, type GirvanNewmanOptions, type GrsbmOptions, type HierarchicalOptions, hits, type HitsOptions, type KargerOptions, katzCentrality, type KatzOptions, labelPropagation, type LabelPropagationOptions, labelPropagationSynchronous, type LeidenOptions, type LinkPredictionMetrics, type LinkPredictionOptions, type LouvainOptions, type MarkovOptions, type MaxFlowOptions, type ModularityOptions, pageRank, type PageRankOptions, personalizedPageRank, type SpectralOptions, type SyncClusteringOptions, type TeraHacOptions, triangleCount, weaklyConnectedComponents } from "@graphty/algorithms";
|
|
21
|
+
import { type DerivedGraph, type GraphSnapshot } from "@graphty/graph-format";
|
|
22
|
+
import type { Collection, CollectionReturnValue, Core, EdgeCollection, EdgeSingular, NodeCollection, NodeSingular } from "cytoscape";
|
|
23
|
+
import { type Backend, type GpuMode } from "./gpu.js";
|
|
24
|
+
import { type CytoscapeSnapshot, type NodeSelection, type SnapshotOptions } from "./snapshot.js";
|
|
25
|
+
/** A node or edge as a result accessor takes it: the element, or a selector whose first match is used. */
|
|
26
|
+
export type ElementRef = string | Collection | NodeCollection | EdgeCollection;
|
|
27
|
+
/** Options every "graphty*" algorithm takes. */
|
|
28
|
+
export interface AlgorithmOptions {
|
|
29
|
+
/** Read the edges as directed (source to target). Default false, except where an algorithm says otherwise. */
|
|
30
|
+
readonly directed?: boolean;
|
|
31
|
+
/** Edge data field holding the weight, or a function of the edge. Default: every edge weighs 1. */
|
|
32
|
+
readonly weight?: SnapshotOptions["weight"];
|
|
33
|
+
/**
|
|
34
|
+
* Write each element's value (what `score` or `cluster` returns) into `data(field)`. A method whose result has no
|
|
35
|
+
* per-element value (a path, a tree, a number, a list of predictions) throws when given it.
|
|
36
|
+
*/
|
|
37
|
+
readonly field?: string;
|
|
38
|
+
/**
|
|
39
|
+
* The `...Async` methods only: "auto" (default) runs on the GPU when the runtime has a usable WebGPU device,
|
|
40
|
+
* "off" runs on the CPU, "require" throws instead of running on the CPU when no device is available. The synchronous methods always run on the CPU and reject "require". Any other value throws a TypeError.
|
|
41
|
+
*/
|
|
42
|
+
readonly gpu?: GpuMode;
|
|
43
|
+
}
|
|
44
|
+
/** Per-element values, keyed by element. */
|
|
45
|
+
export interface ScoreResult {
|
|
46
|
+
/** The value of an element of the collection; undefined for one outside it. */
|
|
47
|
+
score(ele: ElementRef): number | undefined;
|
|
48
|
+
}
|
|
49
|
+
/** A partition: an array of node collections, one per cluster, plus each node's cluster number. */
|
|
50
|
+
export type Partition<T = object> = NodeCollection[] & T & {
|
|
51
|
+
/** The cluster number (its position in the array) of a node; undefined for one outside the collection. */
|
|
52
|
+
cluster(node: ElementRef): number | undefined;
|
|
53
|
+
};
|
|
54
|
+
/** Paths from one root, in the shape of Cytoscape's `dijkstra`. */
|
|
55
|
+
export interface PathsResult {
|
|
56
|
+
/** Distance from the root; Infinity when unreachable. */
|
|
57
|
+
distanceTo(node: ElementRef): number;
|
|
58
|
+
/** The path from the root, alternating node, edge, node; empty when unreachable. */
|
|
59
|
+
pathTo(node: ElementRef): CollectionReturnValue;
|
|
60
|
+
}
|
|
61
|
+
/** A walk from one root, in the shape of Cytoscape's `bfs` / `dfs`. */
|
|
62
|
+
export interface SearchResult {
|
|
63
|
+
/** The visited nodes in visit order, each after the tree edge that reached it. */
|
|
64
|
+
readonly path: CollectionReturnValue;
|
|
65
|
+
/** The `goal` node when it was reached, else empty. */
|
|
66
|
+
readonly found: CollectionReturnValue;
|
|
67
|
+
/**
|
|
68
|
+
* Edges from the root along the walk's tree (the parent links): the shortest hop count for a breadth-first
|
|
69
|
+
* search, the tree depth for a depth-first search, which can be larger. Undefined when not visited.
|
|
70
|
+
*/
|
|
71
|
+
depth(node: ElementRef): number | undefined;
|
|
72
|
+
/** The node this one was reached from; undefined for the root and unvisited nodes. */
|
|
73
|
+
parent(node: ElementRef): NodeSingular | undefined;
|
|
74
|
+
}
|
|
75
|
+
/** One path between two nodes, in the shape of Cytoscape's `aStar`. */
|
|
76
|
+
export interface PointPathResult {
|
|
77
|
+
/** Whether `goal` can be reached from `root`. */
|
|
78
|
+
readonly found: boolean;
|
|
79
|
+
/** The length of the path; Infinity when not found. */
|
|
80
|
+
readonly distance: number;
|
|
81
|
+
/** Alternating node, edge, node; empty when not found. */
|
|
82
|
+
readonly path: CollectionReturnValue;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* A cut, like the result of Cytoscape's `kargerStein` with `partition1` and `partition2` named `partitionFirst` and
|
|
86
|
+
* `partitionSecond`, plus `value` and without `components`.
|
|
87
|
+
*/
|
|
88
|
+
export interface CutResult {
|
|
89
|
+
/** The total weight (capacity) of the cut edges. */
|
|
90
|
+
readonly value: number;
|
|
91
|
+
/** The edges that cross the cut. */
|
|
92
|
+
readonly cut: EdgeCollection;
|
|
93
|
+
/** The nodes on one side: the source side for a flow or s-t cut. */
|
|
94
|
+
readonly partitionFirst: NodeCollection;
|
|
95
|
+
/** The nodes on the other side. */
|
|
96
|
+
readonly partitionSecond: NodeCollection;
|
|
97
|
+
}
|
|
98
|
+
/** A predicted link. */
|
|
99
|
+
export interface PredictedLink {
|
|
100
|
+
/** One end of the proposed edge. */
|
|
101
|
+
readonly source: NodeSingular;
|
|
102
|
+
/** The other end. */
|
|
103
|
+
readonly target: NodeSingular;
|
|
104
|
+
/** The pair's score; higher is a more likely link. */
|
|
105
|
+
readonly score: number;
|
|
106
|
+
}
|
|
107
|
+
/** A pair of nodes, each a selector or a collection. */
|
|
108
|
+
export type NodePair = readonly [NodeSelection, NodeSelection];
|
|
109
|
+
/** Held-out edges and non-edges for the link-prediction evaluations. */
|
|
110
|
+
interface EvaluateOptions extends AlgorithmOptions {
|
|
111
|
+
/** Node pairs that are edges (held out of the graph), which a good score ranks high. */
|
|
112
|
+
readonly edges: readonly NodePair[];
|
|
113
|
+
/** Node pairs that are not edges, which a good score ranks low. */
|
|
114
|
+
readonly nonEdges: readonly NodePair[];
|
|
115
|
+
}
|
|
116
|
+
/** What every algorithm implementation gets. */
|
|
117
|
+
interface Ctx {
|
|
118
|
+
readonly name: string;
|
|
119
|
+
readonly cy: Core;
|
|
120
|
+
readonly cs: CytoscapeSnapshot;
|
|
121
|
+
readonly s: GraphSnapshot;
|
|
122
|
+
readonly field: string | undefined;
|
|
123
|
+
/** `weighted` for the algorithms that read the snapshot's weights only when asked. */
|
|
124
|
+
readonly weighted: boolean;
|
|
125
|
+
/** The caller's options without the adapter's own, over this package's pinned defaults (see DEFAULTS). */
|
|
126
|
+
readonly rest: Record<string, unknown>;
|
|
127
|
+
/**
|
|
128
|
+
* Runs one of the algorithms the GPU can answer: synchronously on the CPU for the plain methods, through the
|
|
129
|
+
* dispatcher of `@graphty/algorithms` (GPU or CPU, a promise) for the `...Async` methods.
|
|
130
|
+
*/
|
|
131
|
+
call<K extends GpuKey>(key: K, ...args: Parameters<Dispatch[K]>): Out<K> | Promise<Out<K>>;
|
|
132
|
+
}
|
|
133
|
+
/** The @graphty/algorithms dispatcher's methods: the ones an accelerator can answer, by the dispatcher's names. */
|
|
134
|
+
type Dispatch = Omit<AcceleratedAlgorithms, "accelerator">;
|
|
135
|
+
type Out<K extends keyof Dispatch> = Awaited<ReturnType<Dispatch[K]>>;
|
|
136
|
+
/**
|
|
137
|
+
* The CPU functions behind the dispatcher methods the WebGPU accelerator implements (its `createAccelerator`
|
|
138
|
+
* list), under the dispatcher's names. The plain methods call these directly, so they stay synchronous.
|
|
139
|
+
*/
|
|
140
|
+
declare const CPU: {
|
|
141
|
+
breadthFirstSearch: typeof breadthFirstSearch;
|
|
142
|
+
sssp: typeof dijkstra;
|
|
143
|
+
bellmanFord: typeof bellmanFord;
|
|
144
|
+
allPairsShortestPath: typeof allPairsShortestPath;
|
|
145
|
+
pageRank: typeof pageRank;
|
|
146
|
+
personalizedPageRank: typeof personalizedPageRank;
|
|
147
|
+
eigenvectorCentrality: typeof eigenvectorCentrality;
|
|
148
|
+
katzCentrality: typeof katzCentrality;
|
|
149
|
+
hits: typeof hits;
|
|
150
|
+
closenessCentrality: typeof closenessCentrality;
|
|
151
|
+
betweennessCentrality: typeof betweennessCentrality;
|
|
152
|
+
edgeBetweennessCentrality: typeof edgeBetweennessCentrality;
|
|
153
|
+
connectedComponents: typeof connectedComponents;
|
|
154
|
+
weaklyConnectedComponents: typeof weaklyConnectedComponents;
|
|
155
|
+
triangleCount: typeof triangleCount;
|
|
156
|
+
labelPropagation: typeof labelPropagation;
|
|
157
|
+
labelPropagationSynchronous: typeof labelPropagationSynchronous;
|
|
158
|
+
};
|
|
159
|
+
type GpuKey = keyof typeof CPU;
|
|
160
|
+
export declare const UNWEIGHTED: ReadonlySet<string>;
|
|
161
|
+
export declare const NO_FIELD: ReadonlySet<string>;
|
|
162
|
+
export declare const DEFAULTS: Readonly<Record<string, Readonly<Record<string, unknown>>>>;
|
|
163
|
+
export declare const DIRECTED: ReadonlySet<string>;
|
|
164
|
+
/** The all-pairs result. */
|
|
165
|
+
interface ApspResult {
|
|
166
|
+
distance(from: ElementRef, to: ElementRef): number;
|
|
167
|
+
/** The path; throws when the run was made with `paths: false`. */
|
|
168
|
+
path(from: ElementRef, to: ElementRef): CollectionReturnValue;
|
|
169
|
+
readonly hasNegativeWeightCycle: boolean;
|
|
170
|
+
}
|
|
171
|
+
/** A PageRank result. */
|
|
172
|
+
type RankResult = ScoreResult & {
|
|
173
|
+
rank(node: ElementRef): number | undefined;
|
|
174
|
+
iterations: number;
|
|
175
|
+
converged: boolean;
|
|
176
|
+
};
|
|
177
|
+
/** What label propagation reports beside the partition; undefined when the GPU ran. */
|
|
178
|
+
interface LpaReport {
|
|
179
|
+
iterations: number | undefined;
|
|
180
|
+
converged: boolean | undefined;
|
|
181
|
+
}
|
|
182
|
+
/** A result that is plain from a plain method and a promise from an `...Async` method. */
|
|
183
|
+
type MaybeAsync<T> = T | Promise<T>;
|
|
184
|
+
interface Rooted extends AlgorithmOptions {
|
|
185
|
+
/** The start node: a selector or a collection (its first node). */
|
|
186
|
+
readonly root: NodeSelection;
|
|
187
|
+
}
|
|
188
|
+
interface PointToPoint extends Rooted {
|
|
189
|
+
/** The node to reach. */
|
|
190
|
+
readonly goal: NodeSelection;
|
|
191
|
+
}
|
|
192
|
+
interface WalkOptions extends Rooted {
|
|
193
|
+
/** Stop when this node is reached; it is then `found`. */
|
|
194
|
+
readonly goal?: NodeSelection;
|
|
195
|
+
/** Stop expanding at this many hops from the root; unbounded when absent. */
|
|
196
|
+
readonly maxDepth?: number;
|
|
197
|
+
}
|
|
198
|
+
interface FlowOptions extends AlgorithmOptions, Omit<MaxFlowOptions, "weights"> {
|
|
199
|
+
/** The node the flow leaves. */
|
|
200
|
+
readonly source: NodeSelection;
|
|
201
|
+
/** The node the flow arrives at. */
|
|
202
|
+
readonly sink: NodeSelection;
|
|
203
|
+
}
|
|
204
|
+
interface IsomorphismOptions extends AlgorithmOptions {
|
|
205
|
+
/**
|
|
206
|
+
* The graph to compare with, read with the same `directed`: a collection, an array of elements, or a selector
|
|
207
|
+
* over the whole core (for example ".second", matching that graph's nodes and edges).
|
|
208
|
+
*/
|
|
209
|
+
readonly other: Collection | readonly (NodeSingular | EdgeSingular)[] | string;
|
|
210
|
+
/** Two nodes may be paired only when this returns true; by default any two may. */
|
|
211
|
+
readonly nodeMatch?: (a: NodeSingular, b: NodeSingular) => boolean;
|
|
212
|
+
/** Two edges may be paired only when this returns true; by default any two may. */
|
|
213
|
+
readonly edgeMatch?: (a: EdgeSingular, b: EdgeSingular) => boolean;
|
|
214
|
+
}
|
|
215
|
+
interface MatchingOptions extends AlgorithmOptions {
|
|
216
|
+
/** One side of the bipartite graph; inferred when absent. */
|
|
217
|
+
readonly left?: NodeSelection;
|
|
218
|
+
/** The other side; inferred when absent. */
|
|
219
|
+
readonly right?: NodeSelection;
|
|
220
|
+
/** With `directed`: "both" (default) ignores direction; "out" joins a left node only to its out-neighbors. */
|
|
221
|
+
readonly arcs?: "both" | "out";
|
|
222
|
+
}
|
|
223
|
+
/** A cap on path length. */
|
|
224
|
+
interface Cutoff {
|
|
225
|
+
/** Stop relaxing beyond this distance; a node farther away reads as unreachable. Unbounded when absent. */
|
|
226
|
+
readonly cutoff?: number;
|
|
227
|
+
}
|
|
228
|
+
/** Sampled centrality. */
|
|
229
|
+
interface Sampled {
|
|
230
|
+
/** The nodes to run from, a selector or a collection; default every node. */
|
|
231
|
+
readonly sources?: NodeSelection;
|
|
232
|
+
}
|
|
233
|
+
/** One node pair. */
|
|
234
|
+
interface PairOptions {
|
|
235
|
+
/** One node of the pair. */
|
|
236
|
+
readonly source: NodeSelection;
|
|
237
|
+
/** The other node of the pair. */
|
|
238
|
+
readonly target: NodeSelection;
|
|
239
|
+
}
|
|
240
|
+
/** Several node pairs. */
|
|
241
|
+
interface PairsOptions {
|
|
242
|
+
/** The node pairs to score, each `[a, b]` of selectors or collections. */
|
|
243
|
+
readonly pairs: readonly NodePair[];
|
|
244
|
+
}
|
|
245
|
+
/** The nodes link prediction may propose. */
|
|
246
|
+
interface Candidates {
|
|
247
|
+
/** The nodes to consider linking to `root`; default every node. */
|
|
248
|
+
readonly candidates?: NodeSelection;
|
|
249
|
+
}
|
|
250
|
+
interface MatchingResult {
|
|
251
|
+
readonly size: number;
|
|
252
|
+
/** The node matched with this one, either side. */
|
|
253
|
+
mate(node: ElementRef): NodeSingular | undefined;
|
|
254
|
+
}
|
|
255
|
+
type WeightedFlag<T> = AlgorithmOptions & Omit<T, "weighted" | "weights">;
|
|
256
|
+
declare const IMPLS: {
|
|
257
|
+
breadthFirstSearch: (c: Ctx, o: WalkOptions) => MaybeAsync<SearchResult>;
|
|
258
|
+
directionOptimizedBfs: (c: Ctx, o: Rooted & DirectionOptimizedBfsOptions) => SearchResult;
|
|
259
|
+
depthFirstSearch: (c: Ctx, o: Omit<WalkOptions, "maxDepth"> & {
|
|
260
|
+
/** "pre" (default) lists a node when it is first reached, "post" when everything below it is finished. */
|
|
261
|
+
readonly order?: "pre" | "post";
|
|
262
|
+
}) => SearchResult;
|
|
263
|
+
hasCycle: (c: Ctx, _o?: AlgorithmOptions) => boolean;
|
|
264
|
+
topologicalSort: (c: Ctx, _o?: AlgorithmOptions) => NodeCollection | null;
|
|
265
|
+
dijkstra: (c: Ctx, o: Rooted & Cutoff) => PathsResult | Promise<PathsResult>;
|
|
266
|
+
bellmanFord: (c: Ctx, o: Rooted & Cutoff) => MaybeAsync<PathsResult & {
|
|
267
|
+
readonly hasNegativeWeightCycle: boolean;
|
|
268
|
+
}>;
|
|
269
|
+
bidirectionalDijkstra: (c: Ctx, o: PointToPoint) => PointPathResult;
|
|
270
|
+
aStar: (c: Ctx, o: PointToPoint & {
|
|
271
|
+
/** An estimate of the distance left from a node to `goal`, never more than the real one. Default 0. */
|
|
272
|
+
readonly heuristic?: (node: NodeSingular) => number;
|
|
273
|
+
}) => PointPathResult;
|
|
274
|
+
allPairsShortestPath: (c: Ctx, _o?: AlgorithmOptions & Omit<ApspOptions, "weights" | "weighted">) => MaybeAsync<ApspResult>;
|
|
275
|
+
degreeCentrality: (c: Ctx, _o?: AlgorithmOptions & DegreeCentralityOptions) => ScoreResult & {
|
|
276
|
+
degree(node: ElementRef): number | undefined;
|
|
277
|
+
};
|
|
278
|
+
degrees: (c: Ctx, _o?: AlgorithmOptions) => {
|
|
279
|
+
indegree(node: ElementRef): number | undefined;
|
|
280
|
+
outdegree(node: ElementRef): number | undefined;
|
|
281
|
+
};
|
|
282
|
+
pageRank: (c: Ctx, o?: WeightedFlag<Omit<PageRankOptions, "initialRanks">> & {
|
|
283
|
+
/** Starting rank of each node. */
|
|
284
|
+
readonly initialRanks?: (node: NodeSingular) => number;
|
|
285
|
+
}) => MaybeAsync<RankResult>;
|
|
286
|
+
personalizedPageRank: (c: Ctx, o: WeightedFlag<Omit<PageRankOptions, "initialRanks">> & {
|
|
287
|
+
/** The teleport set: a selection (uniform over it) or a weight per node. */
|
|
288
|
+
readonly personalization: NodeSelection | ((node: NodeSingular) => number);
|
|
289
|
+
/** Starting rank of each node. */
|
|
290
|
+
readonly initialRanks?: (node: NodeSingular) => number;
|
|
291
|
+
}) => MaybeAsync<RankResult>;
|
|
292
|
+
deltaPageRank: (c: Ctx, o?: WeightedFlag<Omit<DeltaPageRankComputeOptions, "personalization">> & {
|
|
293
|
+
/**
|
|
294
|
+
* Process the largest pending delta first (`PriorityDeltaPageRank`, which ignores `personalization`); its
|
|
295
|
+
* ranks match `graphtyPageRank({ directed: true })`. Without it the ranks can differ from PageRank's (by up
|
|
296
|
+
* to 0.07 on the karate club), the run usually goes on until `maxIterations`, and a `maxIterations` in the
|
|
297
|
+
* thousands overflows and throws.
|
|
298
|
+
*/
|
|
299
|
+
readonly priority?: boolean;
|
|
300
|
+
/** The teleport set: a selection (uniform over it) or a weight per node. */
|
|
301
|
+
readonly personalization?: NodeSelection | ((node: NodeSingular) => number);
|
|
302
|
+
}) => ScoreResult & {
|
|
303
|
+
rank(node: ElementRef): number | undefined;
|
|
304
|
+
};
|
|
305
|
+
eigenvectorCentrality: (c: Ctx, o?: AlgorithmOptions & Omit<EigenvectorOptions, "startVector"> & {
|
|
306
|
+
/** Starting value of each node; default uniform. */
|
|
307
|
+
readonly startVector?: (node: NodeSingular) => number;
|
|
308
|
+
}) => MaybeAsync<ScoreResult & {
|
|
309
|
+
iterations: number;
|
|
310
|
+
converged: boolean;
|
|
311
|
+
}>;
|
|
312
|
+
katzCentrality: (c: Ctx, _o?: WeightedFlag<KatzOptions>) => MaybeAsync<ScoreResult & {
|
|
313
|
+
iterations: number;
|
|
314
|
+
converged: boolean;
|
|
315
|
+
}>;
|
|
316
|
+
hits: (c: Ctx, _o?: WeightedFlag<HitsOptions>) => MaybeAsync<ScoreResult & {
|
|
317
|
+
hub(node: ElementRef): number | undefined;
|
|
318
|
+
authority(node: ElementRef): number | undefined;
|
|
319
|
+
iterations: number;
|
|
320
|
+
converged: boolean;
|
|
321
|
+
}>;
|
|
322
|
+
closenessCentrality: (c: Ctx, o?: WeightedFlag<Omit<ClosenessOptions, "sources">> & Sampled) => MaybeAsync<ScoreResult & {
|
|
323
|
+
closeness(node: ElementRef): number | undefined;
|
|
324
|
+
}>;
|
|
325
|
+
nodeClosenessCentrality: (c: Ctx, o: Rooted & Omit<ClosenessOptions, "sources" | "k" | "weights" | "weighted">) => number;
|
|
326
|
+
betweennessCentrality: (c: Ctx, o?: AlgorithmOptions & Omit<BetweennessOptions, "sources"> & Sampled) => MaybeAsync<ScoreResult & {
|
|
327
|
+
betweenness(node: ElementRef): number | undefined;
|
|
328
|
+
betweennessNormalized(node: ElementRef): number | undefined;
|
|
329
|
+
}>;
|
|
330
|
+
edgeBetweennessCentrality: (c: Ctx, o?: AlgorithmOptions & Sampled & {
|
|
331
|
+
/** Divide by `(n - 1)(n - 2)` on a directed graph, half that on an undirected one. Default false. */
|
|
332
|
+
readonly normalized?: boolean;
|
|
333
|
+
/**
|
|
334
|
+
* Draw this many source nodes instead of using every node; the same count draws the same nodes. Not
|
|
335
|
+
* rescaled (see `sources`).
|
|
336
|
+
*/
|
|
337
|
+
readonly k?: number;
|
|
338
|
+
}) => MaybeAsync<ScoreResult>;
|
|
339
|
+
connectedComponents: (c: Ctx, _o?: AlgorithmOptions) => MaybeAsync<Partition>;
|
|
340
|
+
weaklyConnectedComponents: (c: Ctx, _o?: AlgorithmOptions) => MaybeAsync<Partition>;
|
|
341
|
+
stronglyConnectedComponents: (c: Ctx, _o?: AlgorithmOptions) => Partition;
|
|
342
|
+
condensation: (c: Ctx, _o?: AlgorithmOptions) => Partition<{
|
|
343
|
+
condensed: DerivedGraph;
|
|
344
|
+
}>;
|
|
345
|
+
kCoreDecomposition: (c: Ctx, _o?: AlgorithmOptions) => ScoreResult & {
|
|
346
|
+
maxCore: number;
|
|
347
|
+
core(k: number): NodeCollection;
|
|
348
|
+
};
|
|
349
|
+
triangleCount: (c: Ctx, _o?: AlgorithmOptions) => MaybeAsync<ScoreResult & {
|
|
350
|
+
coefficient(node: ElementRef): number | undefined;
|
|
351
|
+
total: number;
|
|
352
|
+
transitivity: number;
|
|
353
|
+
}>;
|
|
354
|
+
isBipartite: (c: Ctx, _o?: AlgorithmOptions & BipartiteOptions) => {
|
|
355
|
+
bipartite: boolean;
|
|
356
|
+
partitionFirst: NodeCollection;
|
|
357
|
+
partitionSecond: NodeCollection;
|
|
358
|
+
};
|
|
359
|
+
isGraphIsomorphic: (c: Ctx, o: IsomorphismOptions) => {
|
|
360
|
+
isomorphic: boolean;
|
|
361
|
+
mapping(node: ElementRef): NodeSingular | undefined;
|
|
362
|
+
};
|
|
363
|
+
findAllIsomorphisms: (c: Ctx, o: IsomorphismOptions) => ((node: ElementRef) => NodeSingular | undefined)[];
|
|
364
|
+
modularity: (c: Ctx, o: AlgorithmOptions & Omit<ModularityOptions, "weights"> & {
|
|
365
|
+
/** The clusters (a partition result, or selections), or the node data field holding each node's cluster. */
|
|
366
|
+
readonly clusters: string | readonly NodeSelection[];
|
|
367
|
+
}) => number;
|
|
368
|
+
louvain: (c: Ctx, _o?: AlgorithmOptions & LouvainOptions) => Partition<{
|
|
369
|
+
modularity: number;
|
|
370
|
+
iterations: number;
|
|
371
|
+
}>;
|
|
372
|
+
leiden: (c: Ctx, _o?: AlgorithmOptions & LeidenOptions) => Partition<{
|
|
373
|
+
modularity: number;
|
|
374
|
+
iterations: number;
|
|
375
|
+
}>;
|
|
376
|
+
labelPropagation: (c: Ctx, _o?: WeightedFlag<LabelPropagationOptions>) => MaybeAsync<Partition<LpaReport>>;
|
|
377
|
+
labelPropagationSynchronous: (c: Ctx, _o?: AlgorithmOptions & {
|
|
378
|
+
/** Iteration cap. */
|
|
379
|
+
readonly maxIterations?: number;
|
|
380
|
+
}) => MaybeAsync<Partition<LpaReport>>;
|
|
381
|
+
labelPropagationSemiSupervised: (c: Ctx, o: WeightedFlag<LabelPropagationOptions> & {
|
|
382
|
+
/**
|
|
383
|
+
* Seed labels: the node data field holding them (nodes without it are free), or one selection per label.
|
|
384
|
+
* Free nodes start unlabeled and take a seed label when one reaches them, so every node connected to a seed
|
|
385
|
+
* ends in a seed's cluster. Each connected group of nodes no seed reaches becomes a cluster of its own.
|
|
386
|
+
*/
|
|
387
|
+
readonly seeds: string | readonly NodeSelection[];
|
|
388
|
+
}) => Partition<{
|
|
389
|
+
iterations: number;
|
|
390
|
+
converged: boolean;
|
|
391
|
+
}>;
|
|
392
|
+
girvanNewman: (c: Ctx, _o?: AlgorithmOptions & GirvanNewmanOptions) => Partition<{
|
|
393
|
+
modularity: number;
|
|
394
|
+
levels: number;
|
|
395
|
+
level(k: number): Partition;
|
|
396
|
+
modularities: number[];
|
|
397
|
+
}>;
|
|
398
|
+
markovClustering: (c: Ctx, _o?: AlgorithmOptions & Omit<MarkovOptions, "weights">) => Partition<{
|
|
399
|
+
iterations: number;
|
|
400
|
+
converged: boolean;
|
|
401
|
+
}>;
|
|
402
|
+
spectralClustering: (c: Ctx, o: AlgorithmOptions & Omit<SpectralOptions, "weights">) => Partition<{
|
|
403
|
+
converged: boolean;
|
|
404
|
+
eigenvalues: Float64Array;
|
|
405
|
+
}>;
|
|
406
|
+
hierarchicalClustering: (c: Ctx, _o?: AlgorithmOptions & HierarchicalOptions) => {
|
|
407
|
+
cut(height: number): Partition;
|
|
408
|
+
cutAt(by: {
|
|
409
|
+
readonly clusters: number;
|
|
410
|
+
} | {
|
|
411
|
+
readonly distance: number;
|
|
412
|
+
}): Partition;
|
|
413
|
+
readonly merges: number;
|
|
414
|
+
};
|
|
415
|
+
teraHAC: (c: Ctx, _o?: AlgorithmOptions & TeraHacOptions) => Partition<{
|
|
416
|
+
merges: number;
|
|
417
|
+
}>;
|
|
418
|
+
grsbm: (c: Ctx, _o?: WeightedFlag<GrsbmOptions>) => Partition;
|
|
419
|
+
syncClustering: (c: Ctx, o: AlgorithmOptions & SyncClusteringOptions) => Partition<{
|
|
420
|
+
loss: number;
|
|
421
|
+
iterations: number;
|
|
422
|
+
converged: boolean;
|
|
423
|
+
}>;
|
|
424
|
+
kruskalMST: (c: Ctx, _o?: AlgorithmOptions) => CollectionReturnValue & {
|
|
425
|
+
totalWeight: number;
|
|
426
|
+
};
|
|
427
|
+
primMST: (c: Ctx, o?: AlgorithmOptions & {
|
|
428
|
+
/** The node the tree grows from; default the first node. */
|
|
429
|
+
readonly root?: NodeSelection;
|
|
430
|
+
/** Grow a tree in every component instead of throwing on a disconnected graph. Default false. */
|
|
431
|
+
readonly forest?: boolean;
|
|
432
|
+
}) => CollectionReturnValue & {
|
|
433
|
+
totalWeight: number;
|
|
434
|
+
};
|
|
435
|
+
maxFlow: (c: Ctx, o: FlowOptions) => CutResult & {
|
|
436
|
+
flow(edge: ElementRef): number | undefined;
|
|
437
|
+
};
|
|
438
|
+
minSTCut: (c: Ctx, o: FlowOptions) => CutResult;
|
|
439
|
+
stoerWagner: (c: Ctx, _o?: AlgorithmOptions) => CutResult;
|
|
440
|
+
kargerMinCut: (c: Ctx, _o?: AlgorithmOptions & Omit<KargerOptions, "weights">) => CutResult;
|
|
441
|
+
maximumBipartiteMatching: (c: Ctx, o?: MatchingOptions) => MatchingResult;
|
|
442
|
+
greedyBipartiteMatching: (c: Ctx, o?: MatchingOptions) => MatchingResult;
|
|
443
|
+
commonNeighborsScore: (c: Ctx, o: AlgorithmOptions & PairOptions) => number;
|
|
444
|
+
adamicAdarScore: (c: Ctx, o: AlgorithmOptions & PairOptions) => number;
|
|
445
|
+
commonNeighborsPrediction: (c: Ctx, _o?: AlgorithmOptions & Omit<LinkPredictionOptions, "directed" | "uniquePairs">) => PredictedLink[];
|
|
446
|
+
adamicAdarPrediction: (c: Ctx, _o?: AlgorithmOptions & Omit<LinkPredictionOptions, "directed" | "uniquePairs">) => PredictedLink[];
|
|
447
|
+
commonNeighborsForPairs: (c: Ctx, o: AlgorithmOptions & PairsOptions) => number[];
|
|
448
|
+
adamicAdarForPairs: (c: Ctx, o: AlgorithmOptions & PairsOptions) => number[];
|
|
449
|
+
topCandidatesForNode: (c: Ctx, o: Rooted & Omit<CandidateOptions, "directed" | "candidates"> & Candidates) => PredictedLink[];
|
|
450
|
+
topAdamicAdarCandidatesForNode: (c: Ctx, o: Rooted & Omit<CandidateOptions, "directed" | "candidates"> & Candidates) => PredictedLink[];
|
|
451
|
+
evaluateCommonNeighbors: (c: Ctx, o: EvaluateOptions) => LinkPredictionMetrics;
|
|
452
|
+
evaluateAdamicAdar: (c: Ctx, o: EvaluateOptions) => LinkPredictionMetrics;
|
|
453
|
+
compareAdamicAdarWithCommonNeighbors: (c: Ctx, o: EvaluateOptions) => {
|
|
454
|
+
adamicAdar: LinkPredictionMetrics;
|
|
455
|
+
commonNeighbors: LinkPredictionMetrics;
|
|
456
|
+
};
|
|
457
|
+
};
|
|
458
|
+
type Impls = typeof IMPLS;
|
|
459
|
+
type Tail<T extends readonly unknown[]> = T extends readonly [unknown, ...infer R] ? R : never;
|
|
460
|
+
/** The methods `cytoscape.use(graphtyCytoscape)` adds to every collection and to the core. */
|
|
461
|
+
export type GraphtyAlgorithms = {
|
|
462
|
+
[K in keyof Impls as `graphty${Capitalize<K>}`]: (...options: Tail<Parameters<Impls[K]>>) => Awaited<ReturnType<Impls[K]>>;
|
|
463
|
+
} & {
|
|
464
|
+
[K in AsyncKey as `graphty${Capitalize<K>}Async`]: (...options: Tail<Parameters<Impls[K]>>) => Promise<Awaited<ReturnType<Impls[K]>> & {
|
|
465
|
+
readonly backend: Backend;
|
|
466
|
+
}>;
|
|
467
|
+
};
|
|
468
|
+
declare module "cytoscape" {
|
|
469
|
+
interface CollectionAlgorithms extends GraphtyAlgorithms {
|
|
470
|
+
}
|
|
471
|
+
interface Core extends GraphtyAlgorithms {
|
|
472
|
+
}
|
|
473
|
+
}
|
|
474
|
+
/** Every synchronous method name `cytoscape.use(graphtyCytoscape)` registers on collections and the core. */
|
|
475
|
+
export declare const ALGORITHM_NAMES: readonly string[];
|
|
476
|
+
declare const ASYNC_KEYS: readonly ["breadthFirstSearch", "dijkstra", "bellmanFord", "allPairsShortestPath", "pageRank", "personalizedPageRank", "eigenvectorCentrality", "katzCentrality", "hits", "closenessCentrality", "betweennessCentrality", "edgeBetweennessCentrality", "connectedComponents", "weaklyConnectedComponents", "triangleCount", "labelPropagation", "labelPropagationSynchronous"];
|
|
477
|
+
/** The algorithms with an `...Async` method: those the WebGPU accelerator can run. */
|
|
478
|
+
type AsyncKey = (typeof ASYNC_KEYS)[number];
|
|
479
|
+
/** Every `...Async` method name: the algorithms the WebGPU accelerator can run. */
|
|
480
|
+
export declare const ASYNC_ALGORITHM_NAMES: readonly string[];
|
|
481
|
+
/** The registration function Cytoscape's `use()` calls. */
|
|
482
|
+
type Register = (type: string, name: string, registrant: unknown) => void;
|
|
483
|
+
/**
|
|
484
|
+
* Registers every algorithm as a collection method and a core method named "graphty<Name>".
|
|
485
|
+
* @param cytoscape - the cytoscape function
|
|
486
|
+
*/
|
|
487
|
+
export declare function registerAlgorithms(cytoscape: Register): void;
|
|
488
|
+
export {};
|
|
489
|
+
//# sourceMappingURL=algorithms.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"algorithms.d.ts","sourceRoot":"","sources":["../src/algorithms.ts"],"names":[],"mappings":"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"}
|