@graphty/algorithms 2.0.6 → 2.1.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/README.md +9 -11
- package/dist/algorithms.js +499 -30
- package/dist/algorithms.js.map +1 -1
- package/dist/algorithms.standalone.js +500 -31
- package/dist/algorithms.standalone.js.map +1 -1
- package/dist/src/algorithms/centrality/betweenness.js +2 -2
- package/dist/src/algorithms/centrality/betweenness.js.map +1 -1
- package/dist/src/algorithms/community/girvan-newman.js +1 -1
- package/dist/src/algorithms/community/girvan-newman.js.map +1 -1
- package/dist/src/algorithms/matching/isomorphism.js +3 -3
- package/dist/src/algorithms/matching/isomorphism.js.map +1 -1
- package/dist/src/algorithms/mst/prim.js +1 -1
- package/dist/src/algorithms/mst/prim.js.map +1 -1
- package/dist/src/algorithms/shortest-path/bellman-ford.js +1 -1
- package/dist/src/algorithms/shortest-path/bellman-ford.js.map +1 -1
- package/dist/src/algorithms/shortest-path/bidirectional-dijkstra.js +1 -1
- package/dist/src/algorithms/shortest-path/bidirectional-dijkstra.js.map +1 -1
- package/dist/src/algorithms/shortest-path/dijkstra.js +1 -1
- package/dist/src/algorithms/shortest-path/dijkstra.js.map +1 -1
- package/dist/src/algorithms/traversal/bfs-unified.js +2 -2
- package/dist/src/algorithms/traversal/bfs-unified.js.map +1 -1
- package/dist/src/algorithms/traversal/dfs.js +2 -2
- package/dist/src/algorithms/traversal/dfs.js.map +1 -1
- package/dist/src/clustering/spectral.js +2 -2
- package/dist/src/clustering/spectral.js.map +1 -1
- package/dist/src/index.d.ts +4 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/indexed/accelerator.d.ts +14 -2
- package/dist/src/indexed/accelerator.d.ts.map +1 -1
- package/dist/src/indexed/accelerator.js +8 -0
- package/dist/src/indexed/accelerator.js.map +1 -1
- package/dist/src/indexed/components.d.ts +8 -0
- package/dist/src/indexed/components.d.ts.map +1 -1
- package/dist/src/indexed/components.js +8 -1
- package/dist/src/indexed/components.js.map +1 -1
- package/dist/src/indexed/hits.d.ts +39 -0
- package/dist/src/indexed/hits.d.ts.map +1 -0
- package/dist/src/indexed/hits.js +95 -0
- package/dist/src/indexed/hits.js.map +1 -0
- package/dist/src/indexed/index.d.ts +5 -1
- package/dist/src/indexed/index.d.ts.map +1 -1
- package/dist/src/indexed/index.js +5 -1
- package/dist/src/indexed/index.js.map +1 -1
- package/dist/src/indexed/k-core.d.ts +32 -0
- package/dist/src/indexed/k-core.d.ts.map +1 -0
- package/dist/src/indexed/k-core.js +118 -0
- package/dist/src/indexed/k-core.js.map +1 -0
- package/dist/src/indexed/katz.d.ts +38 -0
- package/dist/src/indexed/katz.d.ts.map +1 -0
- package/dist/src/indexed/katz.js +61 -0
- package/dist/src/indexed/katz.js.map +1 -0
- package/dist/src/indexed/louvain.d.ts +33 -0
- package/dist/src/indexed/louvain.d.ts.map +1 -0
- package/dist/src/indexed/louvain.js +301 -0
- package/dist/src/indexed/louvain.js.map +1 -0
- package/package.json +6 -6
- package/src/algorithms/centrality/betweenness.ts +2 -2
- package/src/algorithms/community/girvan-newman.ts +1 -1
- package/src/algorithms/matching/isomorphism.ts +3 -3
- package/src/algorithms/mst/prim.ts +1 -1
- package/src/algorithms/shortest-path/bellman-ford.ts +3 -3
- package/src/algorithms/shortest-path/bidirectional-dijkstra.ts +1 -1
- package/src/algorithms/shortest-path/dijkstra.ts +1 -1
- package/src/algorithms/traversal/bfs-unified.ts +2 -2
- package/src/algorithms/traversal/dfs.ts +2 -2
- package/src/clustering/spectral.ts +2 -2
- package/src/index.ts +10 -0
- package/src/indexed/accelerator.ts +26 -2
- package/src/indexed/components.ts +8 -1
- package/src/indexed/hits.ts +126 -0
- package/src/indexed/index.ts +5 -7
- package/src/indexed/k-core.ts +138 -0
- package/src/indexed/katz.ts +88 -0
- package/src/indexed/louvain.ts +345 -0
package/dist/src/index.d.ts
CHANGED
|
@@ -20,6 +20,10 @@ export type { BfsOptions, BfsResult } from "./indexed/bfs.js";
|
|
|
20
20
|
export type { CommonNeighborsOptions } from "./indexed/common-neighbors.js";
|
|
21
21
|
export type { LabelResult } from "./indexed/components.js";
|
|
22
22
|
export type { SsspOptions, SsspResult } from "./indexed/dijkstra.js";
|
|
23
|
+
export type { HitsOptions as IndexedHitsOptions, HitsResult as IndexedHitsResult } from "./indexed/hits.js";
|
|
24
|
+
export type { CorenessResult } from "./indexed/k-core.js";
|
|
25
|
+
export type { KatzOptions as IndexedKatzOptions, KatzResult as IndexedKatzResult } from "./indexed/katz.js";
|
|
26
|
+
export type { LouvainOptions as IndexedLouvainOptions, LouvainResult as IndexedLouvainResult, } from "./indexed/louvain.js";
|
|
23
27
|
export type { MstOptions, MstResult } from "./indexed/mst.js";
|
|
24
28
|
export type { PageRankOptions as IndexedPageRankOptions, PageRankResult as IndexedPageRankResult, } from "./indexed/pagerank.js";
|
|
25
29
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAGxC,YAAY,EACR,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,eAAe,EACf,IAAI,EACJ,mBAAmB,EACnB,mBAAmB,EACnB,WAAW,EACX,cAAc,EACd,SAAS,EACT,IAAI,EACJ,MAAM,EAON,eAAe,EACf,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,GAClB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG9D,cAAc,uBAAuB,CAAC;AAGtC,cAAc,qBAAqB,CAAC;AAGpC,cAAc,4BAA4B,CAAC;AAG3C,cAAc,sBAAsB,CAAC;AAKrC,OAAO,KAAK,OAAO,MAAM,oBAAoB,CAAC;AAG9C,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAItD,YAAY,EACR,qBAAqB,EACrB,oBAAoB,EACpB,cAAc,EACd,qBAAqB,EACrB,6BAA6B,EAC7B,aAAa,EACb,mBAAmB,EACnB,kBAAkB,EAClB,oBAAoB,EACpB,eAAe,EACf,cAAc,EACd,eAAe,EACf,aAAa,EACb,kBAAkB,EAClB,gBAAgB,EAChB,cAAc,GACjB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC9D,YAAY,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAC5E,YAAY,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAGxC,YAAY,EACR,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,eAAe,EACf,IAAI,EACJ,mBAAmB,EACnB,mBAAmB,EACnB,WAAW,EACX,cAAc,EACd,SAAS,EACT,IAAI,EACJ,MAAM,EAON,eAAe,EACf,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,GAClB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG9D,cAAc,uBAAuB,CAAC;AAGtC,cAAc,qBAAqB,CAAC;AAGpC,cAAc,4BAA4B,CAAC;AAG3C,cAAc,sBAAsB,CAAC;AAKrC,OAAO,KAAK,OAAO,MAAM,oBAAoB,CAAC;AAG9C,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAItD,YAAY,EACR,qBAAqB,EACrB,oBAAoB,EACpB,cAAc,EACd,qBAAqB,EACrB,6BAA6B,EAC7B,aAAa,EACb,mBAAmB,EACnB,kBAAkB,EAClB,oBAAoB,EACpB,eAAe,EACf,cAAc,EACd,eAAe,EACf,aAAa,EACb,kBAAkB,EAClB,gBAAgB,EAChB,cAAc,GACjB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC9D,YAAY,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAC5E,YAAY,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAIrE,YAAY,EAAE,WAAW,IAAI,kBAAkB,EAAE,UAAU,IAAI,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC5G,YAAY,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,YAAY,EAAE,WAAW,IAAI,kBAAkB,EAAE,UAAU,IAAI,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC5G,YAAY,EACR,cAAc,IAAI,qBAAqB,EACvC,aAAa,IAAI,oBAAoB,GACxC,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE9D,YAAY,EACR,eAAe,IAAI,sBAAsB,EACzC,cAAc,IAAI,qBAAqB,GAC1C,MAAM,uBAAuB,CAAC"}
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,eAAe;AACf,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AA8BxC,gBAAgB;AAChB,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE9D,oBAAoB;AACpB,cAAc,uBAAuB,CAAC;AAEtC,2CAA2C;AAC3C,cAAc,qBAAqB,CAAC;AAEpC,yBAAyB;AACzB,cAAc,4BAA4B,CAAC;AAE3C,8BAA8B;AAC9B,cAAc,sBAAsB,CAAC;AAErC,sGAAsG;AACtG,qGAAqG;AACrG,0GAA0G;AAC1G,OAAO,KAAK,OAAO,MAAM,oBAAoB,CAAC;AAE9C,6DAA6D;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAsBtD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,eAAe;AACf,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AA8BxC,gBAAgB;AAChB,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE9D,oBAAoB;AACpB,cAAc,uBAAuB,CAAC;AAEtC,2CAA2C;AAC3C,cAAc,qBAAqB,CAAC;AAEpC,yBAAyB;AACzB,cAAc,4BAA4B,CAAC;AAE3C,8BAA8B;AAC9B,cAAc,sBAAsB,CAAC;AAErC,sGAAsG;AACtG,qGAAqG;AACrG,0GAA0G;AAC1G,OAAO,KAAK,OAAO,MAAM,oBAAoB,CAAC;AAE9C,6DAA6D;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAsBtD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAsBvD,iDAAiD;AACjD,+DAA+D"}
|
|
@@ -13,6 +13,9 @@
|
|
|
13
13
|
import type { F32, F64, GraphSnapshot, NumericVector, U32 } from "@graphty/graph-format";
|
|
14
14
|
import type { BfsOptions } from "./bfs.js";
|
|
15
15
|
import { type SsspOptions, type SsspResult } from "./dijkstra.js";
|
|
16
|
+
import type { HitsOptions } from "./hits.js";
|
|
17
|
+
import type { KatzOptions } from "./katz.js";
|
|
18
|
+
import type { LouvainOptions } from "./louvain.js";
|
|
16
19
|
import type { MstOptions } from "./mst.js";
|
|
17
20
|
import type { PageRankOptions } from "./pagerank.js";
|
|
18
21
|
/** A score vector with its convergence report. @public */
|
|
@@ -138,8 +141,13 @@ export interface BetweennessAcceleratorOptions {
|
|
|
138
141
|
* accelerator when it has the method and runs the CPU port otherwise, wrapped in `Promise.resolve`
|
|
139
142
|
* so both paths are async and graphty-element's `async run()` adapters treat them alike.
|
|
140
143
|
*
|
|
141
|
-
* The list GROWS with the A2 ports -- each port PR adds its method
|
|
142
|
-
*
|
|
144
|
+
* The list GROWS with the A2 ports -- each port PR adds its method (plan departure DEP-8A-E).
|
|
145
|
+
*
|
|
146
|
+
* The four newest methods take their port's own option type, which is WIDER than the
|
|
147
|
+
* `HitsOptionsLike` the accelerator side still declares: an accelerator therefore never sees Katz's
|
|
148
|
+
* `alpha` / `beta` or Louvain's `resolution`, and one that is handed them would answer a different
|
|
149
|
+
* question than the CPU port. Narrowing `AlgorithmAccelerator` is a change to the interface the GPU
|
|
150
|
+
* package implements, so it belongs to the pull request that lands a GPU Louvain or Katz.
|
|
143
151
|
* @public
|
|
144
152
|
*/
|
|
145
153
|
export interface AcceleratedAlgorithms {
|
|
@@ -150,6 +158,10 @@ export interface AcceleratedAlgorithms {
|
|
|
150
158
|
connectedComponents(s: GraphSnapshot): Promise<LabelResultLike>;
|
|
151
159
|
weaklyConnectedComponents(s: GraphSnapshot): Promise<LabelResultLike>;
|
|
152
160
|
minimumSpanningTree(s: GraphSnapshot, options?: MstOptions): Promise<MstResultLike>;
|
|
161
|
+
kCoreDecomposition(s: GraphSnapshot): Promise<CorenessResultLike>;
|
|
162
|
+
katzCentrality(s: GraphSnapshot, options?: KatzOptions): Promise<ScoresResultLike>;
|
|
163
|
+
hits(s: GraphSnapshot, options?: HitsOptions): Promise<HitsResultLike>;
|
|
164
|
+
louvain(s: GraphSnapshot, options?: LouvainOptions): Promise<CommunityResultLike>;
|
|
153
165
|
}
|
|
154
166
|
/**
|
|
155
167
|
* Build the dispatcher for an accelerator, or for none.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accelerator.d.ts","sourceRoot":"","sources":["../../../src/indexed/accelerator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,aAAa,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,uBAAuB,CAAC;AAEzF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,UAAU,EAA+B,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"accelerator.d.ts","sourceRoot":"","sources":["../../../src/indexed/accelerator.ts"],"names":[],"mappings":"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"}
|
|
@@ -55,6 +55,14 @@ export function accelerated(acc) {
|
|
|
55
55
|
minimumSpanningTree: (s, options) => acc?.minimumSpanningTree !== undefined
|
|
56
56
|
? acc.minimumSpanningTree(s, options)
|
|
57
57
|
: Promise.resolve(indexed.kruskalMST(s, options)),
|
|
58
|
+
kCoreDecomposition: (s) => acc?.kCoreDecomposition !== undefined
|
|
59
|
+
? acc.kCoreDecomposition(s)
|
|
60
|
+
: Promise.resolve(indexed.kCoreDecomposition(s)),
|
|
61
|
+
katzCentrality: (s, options) => acc?.katzCentrality !== undefined
|
|
62
|
+
? acc.katzCentrality(s, options)
|
|
63
|
+
: Promise.resolve(indexed.katzCentrality(s, options)),
|
|
64
|
+
hits: (s, options) => acc?.hits !== undefined ? acc.hits(s, options) : Promise.resolve(indexed.hits(s, options)),
|
|
65
|
+
louvain: (s, options) => acc?.louvain !== undefined ? acc.louvain(s, options) : Promise.resolve(indexed.louvain(s, options)),
|
|
58
66
|
};
|
|
59
67
|
}
|
|
60
68
|
//# sourceMappingURL=accelerator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accelerator.js","sourceRoot":"","sources":["../../../src/indexed/accelerator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAKH,OAAO,EAAqC,YAAY,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"accelerator.js","sourceRoot":"","sources":["../../../src/indexed/accelerator.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,6 +11,14 @@ export interface LabelResult {
|
|
|
11
11
|
*/
|
|
12
12
|
groups(): U32[];
|
|
13
13
|
}
|
|
14
|
+
/**
|
|
15
|
+
* Wrap a dense label array as a `LabelResult`, computing the grouping on first use. Shared with the
|
|
16
|
+
* Louvain port, whose result is a partition with a modularity attached.
|
|
17
|
+
* @param labels - Dense label per node index
|
|
18
|
+
* @param count - Number of distinct labels
|
|
19
|
+
* @returns The partition
|
|
20
|
+
*/
|
|
21
|
+
export declare function withGroups(labels: U32, count: number): LabelResult;
|
|
14
22
|
/**
|
|
15
23
|
* Connected components of an UNDIRECTED snapshot.
|
|
16
24
|
* @param s - An undirected snapshot
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"components.d.ts","sourceRoot":"","sources":["../../../src/indexed/components.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,GAAG,EAAE,MAAM,uBAAuB,CAAC;AAIrE,gGAAgG;AAChG,MAAM,WAAW,WAAW;IACxB,uDAAuD;IACvD,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC;IACrB,iCAAiC;IACjC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB;;;OAGG;IACH,MAAM,IAAI,GAAG,EAAE,CAAC;CACnB;
|
|
1
|
+
{"version":3,"file":"components.d.ts","sourceRoot":"","sources":["../../../src/indexed/components.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,GAAG,EAAE,MAAM,uBAAuB,CAAC;AAIrE,gGAAgG;AAChG,MAAM,WAAW,WAAW;IACxB,uDAAuD;IACvD,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC;IACrB,iCAAiC;IACjC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB;;;OAGG;IACH,MAAM,IAAI,GAAG,EAAE,CAAC;CACnB;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,GAAG,WAAW,CAyBlE;AAYD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,aAAa,GAAG,WAAW,CAOjE;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,CAAC,EAAE,aAAa,GAAG,WAAW,CAEvE"}
|
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
import { IntUnionFind } from "./structures/union-find.js";
|
|
2
|
-
|
|
2
|
+
/**
|
|
3
|
+
* Wrap a dense label array as a `LabelResult`, computing the grouping on first use. Shared with the
|
|
4
|
+
* Louvain port, whose result is a partition with a modularity attached.
|
|
5
|
+
* @param labels - Dense label per node index
|
|
6
|
+
* @param count - Number of distinct labels
|
|
7
|
+
* @returns The partition
|
|
8
|
+
*/
|
|
9
|
+
export function withGroups(labels, count) {
|
|
3
10
|
let cached = null;
|
|
4
11
|
return {
|
|
5
12
|
labels,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"components.js","sourceRoot":"","sources":["../../../src/indexed/components.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAe1D,
|
|
1
|
+
{"version":3,"file":"components.js","sourceRoot":"","sources":["../../../src/indexed/components.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAe1D;;;;;;GAMG;AACH,MAAM,UAAU,UAAU,CAAC,MAAW,EAAE,KAAa;IACjD,IAAI,MAAM,GAAiB,IAAI,CAAC;IAChC,OAAO;QACH,MAAM;QACN,KAAK;QACL,MAAM;YACF,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;gBAClB,MAAM,KAAK,GAAG,IAAI,WAAW,CAAC,KAAK,CAAC,CAAC;gBACrC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBACrC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACvB,CAAC;gBACD,MAAM,GAAG,GAAU,EAAE,CAAC;gBACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC7B,GAAG,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACxC,CAAC;gBACD,MAAM,IAAI,GAAG,IAAI,WAAW,CAAC,KAAK,CAAC,CAAC;gBACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBACrC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;oBACpB,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;gBAC1B,CAAC;gBACD,MAAM,GAAG,GAAG,CAAC;YACjB,CAAC;YACD,OAAO,MAAM,CAAC;QAClB,CAAC;KACJ,CAAC;AACN,CAAC;AAED,SAAS,UAAU,CAAC,CAAgB;IAChC,MAAM,EAAE,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACzC,MAAM,EAAE,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC;IACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC;QACnC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACnC,CAAC;IACD,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;IACxC,OAAO,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AACrC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,CAAgB;IAChD,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CACX,sHAAsH,CACzH,CAAC;IACN,CAAC;IACD,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC;AACzB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,yBAAyB,CAAC,CAAgB;IACtD,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC;AACzB,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { F64, GraphSnapshot } from "@graphty/graph-format";
|
|
2
|
+
/** Options of the index-based HITS, matching the legacy `hits`. @public */
|
|
3
|
+
export interface HitsOptions {
|
|
4
|
+
/** Iteration cap; default 100. */
|
|
5
|
+
readonly maxIterations?: number | undefined;
|
|
6
|
+
/** Convergence tolerance on the largest single-node change; default 1e-6. */
|
|
7
|
+
readonly tolerance?: number | undefined;
|
|
8
|
+
/**
|
|
9
|
+
* `false` rescales both vectors so their largest entry is 1, which is what the legacy function
|
|
10
|
+
* does when normalization is switched OFF -- the iteration itself always divides by the L2
|
|
11
|
+
* norm. Default true, i.e. the L2-normalized vectors are returned unchanged.
|
|
12
|
+
*/
|
|
13
|
+
readonly normalized?: boolean | undefined;
|
|
14
|
+
/** Weight a neighbour's contribution by the arc weight; default false. */
|
|
15
|
+
readonly weighted?: boolean | undefined;
|
|
16
|
+
}
|
|
17
|
+
/** Result of the index-based HITS. @public */
|
|
18
|
+
export interface HitsResult {
|
|
19
|
+
/** Hub score per node index. */
|
|
20
|
+
readonly hubs: F64;
|
|
21
|
+
/** Authority score per node index. */
|
|
22
|
+
readonly authorities: F64;
|
|
23
|
+
/** Iterations actually run. */
|
|
24
|
+
readonly iterations: number;
|
|
25
|
+
/** Whether the largest single-node change fell below the tolerance. */
|
|
26
|
+
readonly converged: boolean;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* HITS by alternating power iteration: an authority sums the hub scores of the nodes pointing at
|
|
30
|
+
* it, a hub sums the authority scores of the nodes it points at, and both vectors are
|
|
31
|
+
* L2-normalized every round. On an undirected snapshot the two adjacencies are the same array, so
|
|
32
|
+
* the hubs and the authorities coincide.
|
|
33
|
+
* @param s - The snapshot
|
|
34
|
+
* @param o - Algorithm options
|
|
35
|
+
* @returns The two score vectors, the iteration count and the convergence flag
|
|
36
|
+
* @public
|
|
37
|
+
*/
|
|
38
|
+
export declare function hits(s: GraphSnapshot, o?: HitsOptions): HitsResult;
|
|
39
|
+
//# sourceMappingURL=hits.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hits.d.ts","sourceRoot":"","sources":["../../../src/indexed/hits.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEhE,2EAA2E;AAC3E,MAAM,WAAW,WAAW;IACxB,kCAAkC;IAClC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5C,6EAA6E;IAC7E,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC;;;;OAIG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC1C,0EAA0E;IAC1E,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CAC3C;AAED,8CAA8C;AAC9C,MAAM,WAAW,UAAU;IACvB,gCAAgC;IAChC,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC;IACnB,sCAAsC;IACtC,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC;IAC1B,+BAA+B;IAC/B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,uEAAuE;IACvE,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;CAC/B;AAqCD;;;;;;;;;GASG;AACH,wBAAgB,IAAI,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,GAAE,WAAgB,GAAG,UAAU,CAkDtE"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Divide a vector by its L2 norm, in place; a zero vector is left alone.
|
|
3
|
+
* @param v - The vector to scale
|
|
4
|
+
*/
|
|
5
|
+
function l2Normalize(v) {
|
|
6
|
+
let sum = 0;
|
|
7
|
+
for (let i = 0; i < v.length; i++) {
|
|
8
|
+
sum += v[i] * v[i];
|
|
9
|
+
}
|
|
10
|
+
const norm = Math.sqrt(sum);
|
|
11
|
+
if (norm > 0) {
|
|
12
|
+
for (let i = 0; i < v.length; i++) {
|
|
13
|
+
v[i] /= norm;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Divide a vector by its largest entry, in place; left alone when that entry is not positive.
|
|
19
|
+
* @param v - The vector to scale
|
|
20
|
+
*/
|
|
21
|
+
function maxNormalize(v) {
|
|
22
|
+
let max = 0;
|
|
23
|
+
for (let i = 0; i < v.length; i++) {
|
|
24
|
+
if (v[i] > max) {
|
|
25
|
+
max = v[i];
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
if (max > 0) {
|
|
29
|
+
for (let i = 0; i < v.length; i++) {
|
|
30
|
+
v[i] /= max;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* HITS by alternating power iteration: an authority sums the hub scores of the nodes pointing at
|
|
36
|
+
* it, a hub sums the authority scores of the nodes it points at, and both vectors are
|
|
37
|
+
* L2-normalized every round. On an undirected snapshot the two adjacencies are the same array, so
|
|
38
|
+
* the hubs and the authorities coincide.
|
|
39
|
+
* @param s - The snapshot
|
|
40
|
+
* @param o - Algorithm options
|
|
41
|
+
* @returns The two score vectors, the iteration count and the convergence flag
|
|
42
|
+
* @public
|
|
43
|
+
*/
|
|
44
|
+
export function hits(s, o = {}) {
|
|
45
|
+
const n = s.nodeCount;
|
|
46
|
+
const maxIter = o.maxIterations ?? 100;
|
|
47
|
+
const tol = o.tolerance ?? 1e-6;
|
|
48
|
+
const rev = s.reverse();
|
|
49
|
+
const fwdW = o.weighted === true ? s.weights : null;
|
|
50
|
+
const revW = o.weighted === true ? rev.weights : null;
|
|
51
|
+
let hubs = new Float64Array(n).fill(n === 0 ? 0 : 1 / Math.sqrt(n));
|
|
52
|
+
let authorities = new Float64Array(n).fill(n === 0 ? 0 : 1 / Math.sqrt(n));
|
|
53
|
+
let nextHubs = new Float64Array(n);
|
|
54
|
+
let nextAuthorities = new Float64Array(n);
|
|
55
|
+
let it = 0;
|
|
56
|
+
let converged = false;
|
|
57
|
+
for (; it < maxIter && !converged; it++) {
|
|
58
|
+
for (let v = 0; v < n; v++) {
|
|
59
|
+
let auth = 0;
|
|
60
|
+
const inEnd = rev.rowPtr[v + 1];
|
|
61
|
+
for (let a = rev.rowPtr[v]; a < inEnd; a++) {
|
|
62
|
+
auth += hubs[rev.colIdx[a]] * (revW === null ? 1 : revW[a]);
|
|
63
|
+
}
|
|
64
|
+
nextAuthorities[v] = auth;
|
|
65
|
+
let hub = 0;
|
|
66
|
+
const outEnd = s.rowPtr[v + 1];
|
|
67
|
+
for (let a = s.rowPtr[v]; a < outEnd; a++) {
|
|
68
|
+
hub += authorities[s.colIdx[a]] * (fwdW === null ? 1 : fwdW[a]);
|
|
69
|
+
}
|
|
70
|
+
nextHubs[v] = hub;
|
|
71
|
+
}
|
|
72
|
+
l2Normalize(nextAuthorities);
|
|
73
|
+
l2Normalize(nextHubs);
|
|
74
|
+
let maxDiff = 0;
|
|
75
|
+
for (let v = 0; v < n; v++) {
|
|
76
|
+
const dh = Math.abs(nextHubs[v] - hubs[v]);
|
|
77
|
+
if (dh > maxDiff) {
|
|
78
|
+
maxDiff = dh;
|
|
79
|
+
}
|
|
80
|
+
const da = Math.abs(nextAuthorities[v] - authorities[v]);
|
|
81
|
+
if (da > maxDiff) {
|
|
82
|
+
maxDiff = da;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
[hubs, nextHubs] = [nextHubs, hubs];
|
|
86
|
+
[authorities, nextAuthorities] = [nextAuthorities, authorities];
|
|
87
|
+
converged = maxDiff < tol;
|
|
88
|
+
}
|
|
89
|
+
if (o.normalized === false) {
|
|
90
|
+
maxNormalize(hubs);
|
|
91
|
+
maxNormalize(authorities);
|
|
92
|
+
}
|
|
93
|
+
return { hubs, authorities, iterations: it, converged };
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=hits.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hits.js","sourceRoot":"","sources":["../../../src/indexed/hits.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,7 +15,11 @@
|
|
|
15
15
|
export { type BfsOptions, type BfsResult, breadthFirstSearch } from "./bfs.js";
|
|
16
16
|
export { type CommonNeighborsOptions, commonNeighborsScore } from "./common-neighbors.js";
|
|
17
17
|
export { connectedComponents, type LabelResult, weaklyConnectedComponents } from "./components.js";
|
|
18
|
-
export { dijkstra, type SsspOptions, type SsspResult, walkPredArcs, walkPredEdges
|
|
18
|
+
export { dijkstra, type SsspOptions, type SsspResult, walkPredArcs, walkPredEdges } from "./dijkstra.js";
|
|
19
|
+
export { hits, type HitsOptions, type HitsResult } from "./hits.js";
|
|
20
|
+
export { type CorenessResult, kCoreDecomposition } from "./k-core.js";
|
|
21
|
+
export { katzCentrality, type KatzOptions, type KatzResult } from "./katz.js";
|
|
22
|
+
export { louvain, type LouvainOptions, type LouvainResult } from "./louvain.js";
|
|
19
23
|
export { kruskalMST, type MstOptions, type MstResult } from "./mst.js";
|
|
20
24
|
export { pageRank, type PageRankOptions, type PageRankResult } from "./pagerank.js";
|
|
21
25
|
export { arcSourceIn, IndexedMinHeap, IntUnionFind } from "./structures/index.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/indexed/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,SAAS,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAC/E,OAAO,EAAE,KAAK,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC1F,OAAO,EAAE,mBAAmB,EAAE,KAAK,WAAW,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AACnG,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/indexed/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,SAAS,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAC/E,OAAO,EAAE,KAAK,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC1F,OAAO,EAAE,mBAAmB,EAAE,KAAK,WAAW,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AACnG,OAAO,EAAE,QAAQ,EAAE,KAAK,WAAW,EAAE,KAAK,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACzG,OAAO,EAAE,IAAI,EAAE,KAAK,WAAW,EAAE,KAAK,UAAU,EAAE,MAAM,WAAW,CAAC;AACpE,OAAO,EAAE,KAAK,cAAc,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,KAAK,WAAW,EAAE,KAAK,UAAU,EAAE,MAAM,WAAW,CAAC;AAC9E,OAAO,EAAE,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AAChF,OAAO,EAAE,UAAU,EAAE,KAAK,UAAU,EAAE,KAAK,SAAS,EAAE,MAAM,UAAU,CAAC;AACvE,OAAO,EAAE,QAAQ,EAAE,KAAK,eAAe,EAAE,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;AACpF,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC"}
|
|
@@ -15,7 +15,11 @@
|
|
|
15
15
|
export { breadthFirstSearch } from "./bfs.js";
|
|
16
16
|
export { commonNeighborsScore } from "./common-neighbors.js";
|
|
17
17
|
export { connectedComponents, weaklyConnectedComponents } from "./components.js";
|
|
18
|
-
export { dijkstra, walkPredArcs, walkPredEdges
|
|
18
|
+
export { dijkstra, walkPredArcs, walkPredEdges } from "./dijkstra.js";
|
|
19
|
+
export { hits } from "./hits.js";
|
|
20
|
+
export { kCoreDecomposition } from "./k-core.js";
|
|
21
|
+
export { katzCentrality } from "./katz.js";
|
|
22
|
+
export { louvain } from "./louvain.js";
|
|
19
23
|
export { kruskalMST } from "./mst.js";
|
|
20
24
|
export { pageRank } from "./pagerank.js";
|
|
21
25
|
export { arcSourceIn, IndexedMinHeap, IntUnionFind } from "./structures/index.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/indexed/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAmC,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAC/E,OAAO,EAA+B,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC1F,OAAO,EAAE,mBAAmB,EAAoB,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AACnG,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/indexed/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAmC,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAC/E,OAAO,EAA+B,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC1F,OAAO,EAAE,mBAAmB,EAAoB,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AACnG,OAAO,EAAE,QAAQ,EAAqC,YAAY,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACzG,OAAO,EAAE,IAAI,EAAqC,MAAM,WAAW,CAAC;AACpE,OAAO,EAAuB,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACtE,OAAO,EAAE,cAAc,EAAqC,MAAM,WAAW,CAAC;AAC9E,OAAO,EAAE,OAAO,EAA2C,MAAM,cAAc,CAAC;AAChF,OAAO,EAAE,UAAU,EAAmC,MAAM,UAAU,CAAC;AACvE,OAAO,EAAE,QAAQ,EAA6C,MAAM,eAAe,CAAC;AACpF,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { GraphSnapshot, U32 } from "@graphty/graph-format";
|
|
2
|
+
/**
|
|
3
|
+
* Result of the index-based k-core decomposition. `coreness` is the shape the accelerator seam
|
|
4
|
+
* declares (`CorenessResultLike`); `maxCore` and `cores()` are what the legacy
|
|
5
|
+
* `kCoreDecomposition` returns as `maxCore` and its `cores` map.
|
|
6
|
+
* @public
|
|
7
|
+
*/
|
|
8
|
+
export interface CorenessResult {
|
|
9
|
+
/** Core number per node index. */
|
|
10
|
+
readonly coreness: U32;
|
|
11
|
+
/** The largest core number present; 0 on an empty graph. */
|
|
12
|
+
readonly maxCore: number;
|
|
13
|
+
/**
|
|
14
|
+
* Node indices grouped by core number, computed once and cached: `cores()[k]` holds the nodes
|
|
15
|
+
* whose coreness is exactly k, so the array has `maxCore + 1` entries.
|
|
16
|
+
* @returns One array per core number
|
|
17
|
+
*/
|
|
18
|
+
cores(): U32[];
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Core number of every node, by the Batagelj-Zaversnik bucket peel: O(nodes + arcs), no priority
|
|
22
|
+
* queue and no per-node object.
|
|
23
|
+
*
|
|
24
|
+
* Core numbers are defined on a SIMPLE graph, so a parallel arc counts once (parallels are
|
|
25
|
+
* adjacent within a row, invariant I4) and a self-loop does not count at all -- which is what the
|
|
26
|
+
* legacy implementation's adjacency-of-sets also does, and what NetworkX requires of its input.
|
|
27
|
+
* @param s - An undirected snapshot
|
|
28
|
+
* @returns The core numbers, the largest of them, and the lazy grouping
|
|
29
|
+
* @public
|
|
30
|
+
*/
|
|
31
|
+
export declare function kCoreDecomposition(s: GraphSnapshot): CorenessResult;
|
|
32
|
+
//# sourceMappingURL=k-core.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"k-core.d.ts","sourceRoot":"","sources":["../../../src/indexed/k-core.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,uBAAuB,CAAC;AAEhE;;;;;GAKG;AACH,MAAM,WAAW,cAAc;IAC3B,kCAAkC;IAClC,QAAQ,CAAC,QAAQ,EAAE,GAAG,CAAC;IACvB,4DAA4D;IAC5D,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB;;;;OAIG;IACH,KAAK,IAAI,GAAG,EAAE,CAAC;CAClB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,aAAa,GAAG,cAAc,CAyGnE"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core number of every node, by the Batagelj-Zaversnik bucket peel: O(nodes + arcs), no priority
|
|
3
|
+
* queue and no per-node object.
|
|
4
|
+
*
|
|
5
|
+
* Core numbers are defined on a SIMPLE graph, so a parallel arc counts once (parallels are
|
|
6
|
+
* adjacent within a row, invariant I4) and a self-loop does not count at all -- which is what the
|
|
7
|
+
* legacy implementation's adjacency-of-sets also does, and what NetworkX requires of its input.
|
|
8
|
+
* @param s - An undirected snapshot
|
|
9
|
+
* @returns The core numbers, the largest of them, and the lazy grouping
|
|
10
|
+
* @public
|
|
11
|
+
*/
|
|
12
|
+
export function kCoreDecomposition(s) {
|
|
13
|
+
if (s.directed) {
|
|
14
|
+
throw new Error("k-core requires an undirected graph. Pass s.toUndirected().snapshot.");
|
|
15
|
+
}
|
|
16
|
+
const n = s.nodeCount;
|
|
17
|
+
const { rowPtr, colIdx } = s;
|
|
18
|
+
// degree[] is peeled in place: when a node is visited its entry is already its core number.
|
|
19
|
+
const degree = new Uint32Array(n);
|
|
20
|
+
let maxDegree = 0;
|
|
21
|
+
for (let u = 0; u < n; u++) {
|
|
22
|
+
let d = 0;
|
|
23
|
+
let last = -1;
|
|
24
|
+
const end = rowPtr[u + 1];
|
|
25
|
+
for (let a = rowPtr[u]; a < end; a++) {
|
|
26
|
+
const v = colIdx[a];
|
|
27
|
+
if (v !== u && v !== last) {
|
|
28
|
+
d++;
|
|
29
|
+
}
|
|
30
|
+
last = v;
|
|
31
|
+
}
|
|
32
|
+
degree[u] = d;
|
|
33
|
+
if (d > maxDegree) {
|
|
34
|
+
maxDegree = d;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
// Bucket sort the nodes by degree; bin[d] is the start of degree d's block in vert.
|
|
38
|
+
const bin = new Uint32Array(maxDegree + 1);
|
|
39
|
+
for (let u = 0; u < n; u++) {
|
|
40
|
+
bin[degree[u]]++;
|
|
41
|
+
}
|
|
42
|
+
let start = 0;
|
|
43
|
+
for (let d = 0; d <= maxDegree; d++) {
|
|
44
|
+
const count = bin[d];
|
|
45
|
+
bin[d] = start;
|
|
46
|
+
start += count;
|
|
47
|
+
}
|
|
48
|
+
const vert = new Uint32Array(n);
|
|
49
|
+
const pos = new Uint32Array(n);
|
|
50
|
+
for (let u = 0; u < n; u++) {
|
|
51
|
+
pos[u] = bin[degree[u]];
|
|
52
|
+
vert[pos[u]] = u;
|
|
53
|
+
bin[degree[u]]++;
|
|
54
|
+
}
|
|
55
|
+
for (let d = maxDegree; d > 0; d--) {
|
|
56
|
+
bin[d] = bin[d - 1];
|
|
57
|
+
}
|
|
58
|
+
bin[0] = 0;
|
|
59
|
+
// Peel in nondecreasing degree order. A neighbour of higher degree swaps to the front of its
|
|
60
|
+
// bucket and loses one, which keeps vert sorted without re-sorting it.
|
|
61
|
+
let maxCore = 0;
|
|
62
|
+
for (let i = 0; i < n; i++) {
|
|
63
|
+
const v = vert[i];
|
|
64
|
+
const dv = degree[v];
|
|
65
|
+
if (dv > maxCore) {
|
|
66
|
+
maxCore = dv;
|
|
67
|
+
}
|
|
68
|
+
const end = rowPtr[v + 1];
|
|
69
|
+
let last = -1;
|
|
70
|
+
for (let a = rowPtr[v]; a < end; a++) {
|
|
71
|
+
const u = colIdx[a];
|
|
72
|
+
const skip = u === v || u === last;
|
|
73
|
+
last = u;
|
|
74
|
+
if (skip) {
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
const du = degree[u];
|
|
78
|
+
if (du > dv) {
|
|
79
|
+
const pu = pos[u];
|
|
80
|
+
const pw = bin[du];
|
|
81
|
+
const w = vert[pw];
|
|
82
|
+
if (u !== w) {
|
|
83
|
+
vert[pu] = w;
|
|
84
|
+
vert[pw] = u;
|
|
85
|
+
pos[u] = pw;
|
|
86
|
+
pos[w] = pu;
|
|
87
|
+
}
|
|
88
|
+
bin[du]++;
|
|
89
|
+
degree[u] = du - 1;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
let cached = null;
|
|
94
|
+
return {
|
|
95
|
+
coreness: degree,
|
|
96
|
+
maxCore,
|
|
97
|
+
cores() {
|
|
98
|
+
if (cached === null) {
|
|
99
|
+
const sizes = new Uint32Array(maxCore + 1);
|
|
100
|
+
for (let u = 0; u < n; u++) {
|
|
101
|
+
sizes[degree[u]]++;
|
|
102
|
+
}
|
|
103
|
+
const out = [];
|
|
104
|
+
for (let k = 0; k <= maxCore; k++) {
|
|
105
|
+
out.push(new Uint32Array(sizes[k]));
|
|
106
|
+
}
|
|
107
|
+
const fill = new Uint32Array(maxCore + 1);
|
|
108
|
+
for (let u = 0; u < n; u++) {
|
|
109
|
+
const k = degree[u];
|
|
110
|
+
out[k][fill[k]++] = u;
|
|
111
|
+
}
|
|
112
|
+
cached = out;
|
|
113
|
+
}
|
|
114
|
+
return cached;
|
|
115
|
+
},
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=k-core.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"k-core.js","sourceRoot":"","sources":["../../../src/indexed/k-core.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { F64, GraphSnapshot } from "@graphty/graph-format";
|
|
2
|
+
/** Options of the index-based Katz centrality, matching the legacy `katzCentrality`. @public */
|
|
3
|
+
export interface KatzOptions {
|
|
4
|
+
/** Attenuation factor applied to a neighbour's score; default 0.1. */
|
|
5
|
+
readonly alpha?: number | undefined;
|
|
6
|
+
/** Base score every node starts with and keeps; default 1. */
|
|
7
|
+
readonly beta?: number | undefined;
|
|
8
|
+
/** Iteration cap; default 100. */
|
|
9
|
+
readonly maxIterations?: number | undefined;
|
|
10
|
+
/** Convergence tolerance on the largest single-node change; default 1e-6. */
|
|
11
|
+
readonly tolerance?: number | undefined;
|
|
12
|
+
/** Rescale the scores to [0, 1] by min-max, as the legacy function does; default true. */
|
|
13
|
+
readonly normalized?: boolean | undefined;
|
|
14
|
+
/** Weight a neighbour's contribution by the arc weight; default false. */
|
|
15
|
+
readonly weighted?: boolean | undefined;
|
|
16
|
+
}
|
|
17
|
+
/** Result of the index-based Katz centrality. @public */
|
|
18
|
+
export interface KatzResult {
|
|
19
|
+
/** Score per node index. */
|
|
20
|
+
readonly scores: F64;
|
|
21
|
+
/** Iterations actually run. */
|
|
22
|
+
readonly iterations: number;
|
|
23
|
+
/** Whether the largest single-node change fell below the tolerance. */
|
|
24
|
+
readonly converged: boolean;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Katz centrality by power iteration over incoming arcs: `x[v] = alpha * sum(x[u] for u -> v) + beta`.
|
|
28
|
+
*
|
|
29
|
+
* `reverse()` supplies the in-arcs, and is the forward adjacency itself on an undirected snapshot,
|
|
30
|
+
* so one loop serves both directions exactly as the legacy function's in-neighbours / neighbours
|
|
31
|
+
* split does.
|
|
32
|
+
* @param s - The snapshot
|
|
33
|
+
* @param o - Algorithm options
|
|
34
|
+
* @returns The scores, the iteration count and the convergence flag
|
|
35
|
+
* @public
|
|
36
|
+
*/
|
|
37
|
+
export declare function katzCentrality(s: GraphSnapshot, o?: KatzOptions): KatzResult;
|
|
38
|
+
//# sourceMappingURL=katz.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"katz.d.ts","sourceRoot":"","sources":["../../../src/indexed/katz.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEhE,gGAAgG;AAChG,MAAM,WAAW,WAAW;IACxB,sEAAsE;IACtE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,8DAA8D;IAC9D,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,kCAAkC;IAClC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5C,6EAA6E;IAC7E,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,0FAA0F;IAC1F,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC1C,0EAA0E;IAC1E,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CAC3C;AAED,yDAAyD;AACzD,MAAM,WAAW,UAAU;IACvB,4BAA4B;IAC5B,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC;IACrB,+BAA+B;IAC/B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,uEAAuE;IACvE,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;CAC/B;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,GAAE,WAAgB,GAAG,UAAU,CAgDhF"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Katz centrality by power iteration over incoming arcs: `x[v] = alpha * sum(x[u] for u -> v) + beta`.
|
|
3
|
+
*
|
|
4
|
+
* `reverse()` supplies the in-arcs, and is the forward adjacency itself on an undirected snapshot,
|
|
5
|
+
* so one loop serves both directions exactly as the legacy function's in-neighbours / neighbours
|
|
6
|
+
* split does.
|
|
7
|
+
* @param s - The snapshot
|
|
8
|
+
* @param o - Algorithm options
|
|
9
|
+
* @returns The scores, the iteration count and the convergence flag
|
|
10
|
+
* @public
|
|
11
|
+
*/
|
|
12
|
+
export function katzCentrality(s, o = {}) {
|
|
13
|
+
const n = s.nodeCount;
|
|
14
|
+
const alpha = o.alpha ?? 0.1;
|
|
15
|
+
const beta = o.beta ?? 1;
|
|
16
|
+
const maxIter = o.maxIterations ?? 100;
|
|
17
|
+
const tol = o.tolerance ?? 1e-6;
|
|
18
|
+
const rev = s.reverse();
|
|
19
|
+
const weights = o.weighted === true ? rev.weights : null;
|
|
20
|
+
let cur = new Float64Array(n).fill(beta);
|
|
21
|
+
let next = new Float64Array(n);
|
|
22
|
+
let it = 0;
|
|
23
|
+
let converged = false;
|
|
24
|
+
for (; it < maxIter && !converged; it++) {
|
|
25
|
+
let maxDiff = 0;
|
|
26
|
+
for (let v = 0; v < n; v++) {
|
|
27
|
+
let sum = 0;
|
|
28
|
+
const end = rev.rowPtr[v + 1];
|
|
29
|
+
for (let a = rev.rowPtr[v]; a < end; a++) {
|
|
30
|
+
sum += cur[rev.colIdx[a]] * (weights === null ? 1 : weights[a]);
|
|
31
|
+
}
|
|
32
|
+
next[v] = alpha * sum + beta;
|
|
33
|
+
const diff = Math.abs(next[v] - cur[v]);
|
|
34
|
+
if (diff > maxDiff) {
|
|
35
|
+
maxDiff = diff;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
[cur, next] = [next, cur];
|
|
39
|
+
converged = maxDiff < tol;
|
|
40
|
+
}
|
|
41
|
+
if (o.normalized !== false) {
|
|
42
|
+
let min = Infinity;
|
|
43
|
+
let max = -Infinity;
|
|
44
|
+
for (let v = 0; v < n; v++) {
|
|
45
|
+
if (cur[v] < min) {
|
|
46
|
+
min = cur[v];
|
|
47
|
+
}
|
|
48
|
+
if (cur[v] > max) {
|
|
49
|
+
max = cur[v];
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
const range = max - min;
|
|
53
|
+
if (range > 0) {
|
|
54
|
+
for (let v = 0; v < n; v++) {
|
|
55
|
+
cur[v] = (cur[v] - min) / range;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return { scores: cur, iterations: it, converged };
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=katz.js.map
|