graphwise 1.9.1 → 1.11.0
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/async/index.cjs +98 -1
- package/dist/async/index.cjs.map +1 -0
- package/dist/async/index.d.ts +1 -0
- package/dist/async/index.d.ts.map +1 -1
- package/dist/async/index.js +96 -2
- package/dist/async/index.js.map +1 -0
- package/dist/async/ops.d.ts +2 -0
- package/dist/async/ops.d.ts.map +1 -1
- package/dist/async/protocol.d.ts +14 -0
- package/dist/async/protocol.d.ts.map +1 -1
- package/dist/async/runner-batched.d.ts +21 -0
- package/dist/async/runner-batched.d.ts.map +1 -0
- package/dist/async/runner-batched.unit.test.d.ts +2 -0
- package/dist/async/runner-batched.unit.test.d.ts.map +1 -0
- package/dist/async/runners.d.ts.map +1 -1
- package/dist/expansion/base-core.d.ts.map +1 -1
- package/dist/expansion/fuse.d.ts +24 -1
- package/dist/expansion/fuse.d.ts.map +1 -1
- package/dist/expansion/index.cjs +9 -1
- package/dist/expansion/index.js +2 -2
- package/dist/expansion/lace.d.ts +23 -2
- package/dist/expansion/lace.d.ts.map +1 -1
- package/dist/expansion/priority-helpers.d.ts +20 -1
- package/dist/expansion/priority-helpers.d.ts.map +1 -1
- package/dist/expansion/sift.d.ts +24 -1
- package/dist/expansion/sift.d.ts.map +1 -1
- package/dist/expansion/types.d.ts +30 -0
- package/dist/expansion/types.d.ts.map +1 -1
- package/dist/{expansion-DaTroIyv.cjs → expansion--UuRowv-.cjs} +267 -4
- package/dist/expansion--UuRowv-.cjs.map +1 -0
- package/dist/{expansion-ClDhlMK8.js → expansion-CZLNK6Pr.js} +220 -5
- package/dist/expansion-CZLNK6Pr.js.map +1 -0
- package/dist/gpu/csr-graph.d.ts +68 -0
- package/dist/gpu/csr-graph.d.ts.map +1 -0
- package/dist/gpu/csr-graph.unit.test.d.ts +2 -0
- package/dist/gpu/csr-graph.unit.test.d.ts.map +1 -0
- package/dist/gpu/index.cjs +220 -15
- package/dist/gpu/index.cjs.map +1 -0
- package/dist/gpu/index.d.ts +1 -0
- package/dist/gpu/index.d.ts.map +1 -1
- package/dist/gpu/index.js +204 -2
- package/dist/gpu/index.js.map +1 -0
- package/dist/gpu/kernels/adamic-adar/kernel.d.ts +39 -0
- package/dist/gpu/kernels/adamic-adar/kernel.d.ts.map +1 -0
- package/dist/gpu/kernels/intersection/kernel.d.ts +50 -0
- package/dist/gpu/kernels/intersection/kernel.d.ts.map +1 -0
- package/dist/gpu/kernels/intersection/logic.d.ts +87 -0
- package/dist/gpu/kernels/intersection/logic.d.ts.map +1 -0
- package/dist/gpu/kernels/intersection/logic.unit.test.d.ts +2 -0
- package/dist/gpu/kernels/intersection/logic.unit.test.d.ts.map +1 -0
- package/dist/gpu/kernels/kmeans/index.d.ts +6 -0
- package/dist/gpu/kernels/kmeans/index.d.ts.map +1 -0
- package/dist/gpu/kernels/kmeans/kernel.d.ts +34 -0
- package/dist/gpu/kernels/kmeans/kernel.d.ts.map +1 -0
- package/dist/gpu/kernels/kmeans/logic.d.ts +111 -0
- package/dist/gpu/kernels/kmeans/logic.d.ts.map +1 -0
- package/dist/gpu/kernels/kmeans/logic.unit.test.d.ts +5 -0
- package/dist/gpu/kernels/kmeans/logic.unit.test.d.ts.map +1 -0
- package/dist/gpu/operations.d.ts +52 -0
- package/dist/gpu/operations.d.ts.map +1 -1
- package/dist/index/index.cjs +42 -19
- package/dist/index/index.js +11 -9
- package/dist/{jaccard-Bys9_dGW.cjs → jaccard-Bdw4B0i4.cjs} +1 -1
- package/dist/{jaccard-Bys9_dGW.cjs.map → jaccard-Bdw4B0i4.cjs.map} +1 -1
- package/dist/{jaccard-3rCdilwm.js → jaccard-BwC_NuQu.js} +1 -1
- package/dist/{jaccard-3rCdilwm.js.map → jaccard-BwC_NuQu.js.map} +1 -1
- package/dist/kernel-2oH4Cn32.cjs +1001 -0
- package/dist/kernel-2oH4Cn32.cjs.map +1 -0
- package/dist/kernel-6deK9fh1.js +724 -0
- package/dist/kernel-6deK9fh1.js.map +1 -0
- package/dist/kernel-CXeGBH3s.cjs +467 -0
- package/dist/kernel-CXeGBH3s.cjs.map +1 -0
- package/dist/kernel-CigCjrts.js +467 -0
- package/dist/kernel-CigCjrts.js.map +1 -0
- package/dist/kernel-CvnRsF7E.js +1001 -0
- package/dist/kernel-CvnRsF7E.js.map +1 -0
- package/dist/kernel-DukrXtVb.cjs +724 -0
- package/dist/kernel-DukrXtVb.cjs.map +1 -0
- package/dist/{kmeans-B8x9D1kt.cjs → kmeans-CZ7tJFYw.cjs} +1 -1
- package/dist/{kmeans-B8x9D1kt.cjs.map → kmeans-CZ7tJFYw.cjs.map} +1 -1
- package/dist/{kmeans-DKkL9rAN.js → kmeans-DLrlrp6i.js} +1 -1
- package/dist/{kmeans-DKkL9rAN.js.map → kmeans-DLrlrp6i.js.map} +1 -1
- package/dist/logic-Dbyfb_-7.cjs +289 -0
- package/dist/logic-Dbyfb_-7.cjs.map +1 -0
- package/dist/logic-DyBzRg1A.js +242 -0
- package/dist/logic-DyBzRg1A.js.map +1 -0
- package/dist/operations-D-RB67WP.cjs +2269 -0
- package/dist/operations-D-RB67WP.cjs.map +1 -0
- package/dist/operations-D9otVlIH.js +2198 -0
- package/dist/operations-D9otVlIH.js.map +1 -0
- package/dist/{ops-upIi6JIi.js → ops-D5xZr4fV.js} +60 -2
- package/dist/ops-D5xZr4fV.js.map +1 -0
- package/dist/{ops-djAsQQSh.cjs → ops-paa1Nvlf.cjs} +71 -1
- package/dist/ops-paa1Nvlf.cjs.map +1 -0
- package/dist/ranking/baselines/communicability.d.ts +12 -0
- package/dist/ranking/baselines/communicability.d.ts.map +1 -1
- package/dist/ranking/baselines/katz.d.ts +12 -0
- package/dist/ranking/baselines/katz.d.ts.map +1 -1
- package/dist/ranking/baselines/pagerank.d.ts +15 -0
- package/dist/ranking/baselines/pagerank.d.ts.map +1 -1
- package/dist/ranking/baselines/types.d.ts +3 -0
- package/dist/ranking/baselines/types.d.ts.map +1 -1
- package/dist/ranking/index.cjs +5 -2
- package/dist/ranking/index.js +3 -3
- package/dist/ranking/mi/index.cjs +1 -1
- package/dist/ranking/mi/index.js +1 -1
- package/dist/ranking/parse-gpu.d.ts +31 -0
- package/dist/ranking/parse-gpu.d.ts.map +1 -0
- package/dist/ranking/parse-gpu.unit.test.d.ts +5 -0
- package/dist/ranking/parse-gpu.unit.test.d.ts.map +1 -0
- package/dist/ranking/parse.d.ts.map +1 -1
- package/dist/{ranking-3ez5m67U.js → ranking-DOKDBcIR.js} +237 -11
- package/dist/ranking-DOKDBcIR.js.map +1 -0
- package/dist/{ranking-DVvajgUZ.cjs → ranking-pe5UaxKg.cjs} +254 -10
- package/dist/ranking-pe5UaxKg.cjs.map +1 -0
- package/dist/schemas/graph.d.ts +1 -1
- package/dist/seeds/crest.d.ts +48 -0
- package/dist/seeds/crest.d.ts.map +1 -0
- package/dist/seeds/crest.unit.test.d.ts +2 -0
- package/dist/seeds/crest.unit.test.d.ts.map +1 -0
- package/dist/seeds/crisp.d.ts +57 -0
- package/dist/seeds/crisp.d.ts.map +1 -0
- package/dist/seeds/crisp.unit.test.d.ts +2 -0
- package/dist/seeds/crisp.unit.test.d.ts.map +1 -0
- package/dist/seeds/grasp-gpu.d.ts +40 -0
- package/dist/seeds/grasp-gpu.d.ts.map +1 -0
- package/dist/seeds/index.cjs +715 -5
- package/dist/seeds/index.cjs.map +1 -1
- package/dist/seeds/index.d.ts +4 -0
- package/dist/seeds/index.d.ts.map +1 -1
- package/dist/seeds/index.js +712 -6
- package/dist/seeds/index.js.map +1 -1
- package/dist/seeds/spine.d.ts +50 -0
- package/dist/seeds/spine.d.ts.map +1 -0
- package/dist/seeds/spine.unit.test.d.ts +2 -0
- package/dist/seeds/spine.unit.test.d.ts.map +1 -0
- package/dist/seeds/stride.d.ts +55 -0
- package/dist/seeds/stride.d.ts.map +1 -0
- package/dist/seeds/stride.unit.test.d.ts +2 -0
- package/dist/seeds/stride.unit.test.d.ts.map +1 -0
- package/dist/{gpu-CHiCN0wa.js → typegpu-Dq5FfUB8.cjs} +16 -2041
- package/dist/typegpu-Dq5FfUB8.cjs.map +1 -0
- package/dist/{gpu-Y6owRVMi.cjs → typegpu-DwnJf28i.js} +2 -2127
- package/dist/typegpu-DwnJf28i.js.map +1 -0
- package/dist/utils/index.cjs +1 -1
- package/dist/utils/index.js +1 -1
- package/package.json +1 -1
- package/dist/expansion-ClDhlMK8.js.map +0 -1
- package/dist/expansion-DaTroIyv.cjs.map +0 -1
- package/dist/gpu-CHiCN0wa.js.map +0 -1
- package/dist/gpu-Y6owRVMi.cjs.map +0 -1
- package/dist/ops-djAsQQSh.cjs.map +0 -1
- package/dist/ops-upIi6JIi.js.map +0 -1
- package/dist/ranking-3ez5m67U.js.map +0 -1
- package/dist/ranking-DVvajgUZ.cjs.map +0 -1
package/dist/async/index.cjs
CHANGED
|
@@ -1,8 +1,102 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
2
|
const require_utils = require("../utils-CDtCcsyF.cjs");
|
|
3
|
-
const require_ops = require("../ops-
|
|
3
|
+
const require_ops = require("../ops-paa1Nvlf.cjs");
|
|
4
|
+
//#region src/async/runner-batched.ts
|
|
5
|
+
/**
|
|
6
|
+
* Drive a generator to completion using batched graph operations.
|
|
7
|
+
*
|
|
8
|
+
* When the generator yields explicit batch ops (batchNeighbours, batchDegree),
|
|
9
|
+
* resolves them efficiently. Single ops are converted to batch-of-one and resolved.
|
|
10
|
+
*
|
|
11
|
+
* @param gen - The generator to drive
|
|
12
|
+
* @param graph - Async graph to resolve ops against
|
|
13
|
+
* @param options - Runner configuration
|
|
14
|
+
* @returns Promise resolving to the generator's return value
|
|
15
|
+
*/
|
|
16
|
+
async function runBatched(gen, graph, options) {
|
|
17
|
+
const signal = options?.signal;
|
|
18
|
+
const onProgress = options?.onProgress;
|
|
19
|
+
const yieldStrategy = options?.yieldStrategy ?? require_utils.defaultYieldStrategy;
|
|
20
|
+
let step = gen.next();
|
|
21
|
+
while (step.done !== true) {
|
|
22
|
+
if (signal?.aborted === true) {
|
|
23
|
+
const abortError = new DOMException("Aborted", "AbortError");
|
|
24
|
+
try {
|
|
25
|
+
gen.throw(abortError);
|
|
26
|
+
} catch {
|
|
27
|
+
throw abortError;
|
|
28
|
+
}
|
|
29
|
+
throw abortError;
|
|
30
|
+
}
|
|
31
|
+
const op = step.value;
|
|
32
|
+
if (op.tag === "yield") {
|
|
33
|
+
await yieldStrategy();
|
|
34
|
+
step = gen.next({ tag: "yield" });
|
|
35
|
+
continue;
|
|
36
|
+
}
|
|
37
|
+
if (op.tag === "progress") {
|
|
38
|
+
if (onProgress !== void 0) {
|
|
39
|
+
const maybePromise = onProgress(op.stats);
|
|
40
|
+
if (maybePromise instanceof Promise) await maybePromise;
|
|
41
|
+
}
|
|
42
|
+
step = gen.next({ tag: "progress" });
|
|
43
|
+
continue;
|
|
44
|
+
}
|
|
45
|
+
if (op.tag === "batchNeighbours" || op.tag === "batchDegree") {
|
|
46
|
+
const response = await require_ops.resolveAsyncOp(graph, op);
|
|
47
|
+
step = gen.next(response);
|
|
48
|
+
continue;
|
|
49
|
+
}
|
|
50
|
+
if (op.tag === "neighbours") {
|
|
51
|
+
const batchResponse = await require_ops.resolveAsyncOp(graph, op.direction !== void 0 ? {
|
|
52
|
+
tag: "batchNeighbours",
|
|
53
|
+
ids: [op.id],
|
|
54
|
+
direction: op.direction
|
|
55
|
+
} : {
|
|
56
|
+
tag: "batchNeighbours",
|
|
57
|
+
ids: [op.id]
|
|
58
|
+
});
|
|
59
|
+
if (batchResponse.tag !== "batchNeighbours") throw new TypeError(`Expected batchNeighbours response, got ${batchResponse.tag}`);
|
|
60
|
+
const neighbours = batchResponse.value.get(op.id);
|
|
61
|
+
step = gen.next({
|
|
62
|
+
tag: "neighbours",
|
|
63
|
+
value: neighbours ?? []
|
|
64
|
+
});
|
|
65
|
+
continue;
|
|
66
|
+
}
|
|
67
|
+
if (op.tag === "degree") {
|
|
68
|
+
const batchResponse = await require_ops.resolveAsyncOp(graph, op.direction !== void 0 ? {
|
|
69
|
+
tag: "batchDegree",
|
|
70
|
+
ids: [op.id],
|
|
71
|
+
direction: op.direction
|
|
72
|
+
} : {
|
|
73
|
+
tag: "batchDegree",
|
|
74
|
+
ids: [op.id]
|
|
75
|
+
});
|
|
76
|
+
if (batchResponse.tag !== "batchDegree") throw new TypeError(`Expected batchDegree response, got ${batchResponse.tag}`);
|
|
77
|
+
const degree = batchResponse.value.get(op.id);
|
|
78
|
+
step = gen.next({
|
|
79
|
+
tag: "degree",
|
|
80
|
+
value: degree ?? 0
|
|
81
|
+
});
|
|
82
|
+
continue;
|
|
83
|
+
}
|
|
84
|
+
let response;
|
|
85
|
+
try {
|
|
86
|
+
response = await require_ops.resolveAsyncOp(graph, op);
|
|
87
|
+
} catch (error) {
|
|
88
|
+
step = gen.throw(error);
|
|
89
|
+
continue;
|
|
90
|
+
}
|
|
91
|
+
step = gen.next(response);
|
|
92
|
+
}
|
|
93
|
+
return step.value;
|
|
94
|
+
}
|
|
95
|
+
//#endregion
|
|
4
96
|
exports.collectAsyncIterable = require_utils.collectAsyncIterable;
|
|
5
97
|
exports.defaultYieldStrategy = require_utils.defaultYieldStrategy;
|
|
98
|
+
exports.opBatchDegree = require_ops.opBatchDegree;
|
|
99
|
+
exports.opBatchNeighbours = require_ops.opBatchNeighbours;
|
|
6
100
|
exports.opDegree = require_ops.opDegree;
|
|
7
101
|
exports.opGetEdge = require_ops.opGetEdge;
|
|
8
102
|
exports.opGetNode = require_ops.opGetNode;
|
|
@@ -13,4 +107,7 @@ exports.opYield = require_ops.opYield;
|
|
|
13
107
|
exports.resolveAsyncOp = require_ops.resolveAsyncOp;
|
|
14
108
|
exports.resolveSyncOp = require_ops.resolveSyncOp;
|
|
15
109
|
exports.runAsync = require_ops.runAsync;
|
|
110
|
+
exports.runBatched = runBatched;
|
|
16
111
|
exports.runSync = require_ops.runSync;
|
|
112
|
+
|
|
113
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","names":[],"sources":["../../src/async/runner-batched.ts"],"sourcesContent":["/**\n * Batched async runner for generator-based graph algorithms.\n *\n * Handles both single ops (by converting to batch-of-one) and explicit batch ops.\n * The batching optimization comes from:\n * 1. Generators explicitly yielding batch ops when they know they need multiple results\n * 2. Graph implementations can cache/prefetch internally\n */\n\nimport type { NodeData, EdgeData } from \"../graph\";\nimport type { AsyncReadableGraph } from \"../graph/async-interfaces\";\nimport type { GraphOp, GraphOpResponse } from \"./protocol\";\nimport type { AsyncRunnerOptions } from \"./types\";\nimport { resolveAsyncOp } from \"./runners\";\nimport { defaultYieldStrategy } from \"./utils\";\n\nexport interface BatchRunnerOptions extends AsyncRunnerOptions {\n\t/** max ops to collect per batch (reserved for future use) */\n\treadonly batchSize?: number;\n}\n\n/**\n * Drive a generator to completion using batched graph operations.\n *\n * When the generator yields explicit batch ops (batchNeighbours, batchDegree),\n * resolves them efficiently. Single ops are converted to batch-of-one and resolved.\n *\n * @param gen - The generator to drive\n * @param graph - Async graph to resolve ops against\n * @param options - Runner configuration\n * @returns Promise resolving to the generator's return value\n */\nexport async function runBatched<\n\tR,\n\tN extends NodeData = NodeData,\n\tE extends EdgeData = EdgeData,\n>(\n\tgen: Generator<GraphOp, R, GraphOpResponse<N, E>>,\n\tgraph: AsyncReadableGraph<N, E>,\n\toptions?: BatchRunnerOptions,\n): Promise<R> {\n\tconst signal = options?.signal;\n\tconst onProgress = options?.onProgress;\n\tconst yieldStrategy = options?.yieldStrategy ?? defaultYieldStrategy;\n\n\tlet step = gen.next();\n\n\twhile (step.done !== true) {\n\t\t// Check for cancellation\n\t\tif (signal?.aborted === true) {\n\t\t\tconst abortError = new DOMException(\"Aborted\", \"AbortError\");\n\t\t\ttry {\n\t\t\t\tgen.throw(abortError);\n\t\t\t} catch {\n\t\t\t\t// Generator did not handle the error\n\t\t\t\tthrow abortError;\n\t\t\t}\n\t\t\tthrow abortError;\n\t\t}\n\n\t\tconst op = step.value;\n\n\t\t// Handle cooperative yield ops\n\t\tif (op.tag === \"yield\") {\n\t\t\tawait yieldStrategy();\n\t\t\tstep = gen.next({ tag: \"yield\" });\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Handle progress ops\n\t\tif (op.tag === \"progress\") {\n\t\t\tif (onProgress !== undefined) {\n\t\t\t\tconst maybePromise = onProgress(op.stats);\n\t\t\t\tif (maybePromise instanceof Promise) {\n\t\t\t\t\tawait maybePromise;\n\t\t\t\t}\n\t\t\t}\n\t\t\tstep = gen.next({ tag: \"progress\" });\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Handle explicit batch ops from generator\n\t\tif (op.tag === \"batchNeighbours\" || op.tag === \"batchDegree\") {\n\t\t\tconst response = await resolveAsyncOp(graph, op);\n\t\t\tstep = gen.next(response);\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Handle single neighbours op - convert to batch-of-one\n\t\tif (op.tag === \"neighbours\") {\n\t\t\tconst batchOp =\n\t\t\t\top.direction !== undefined\n\t\t\t\t\t? {\n\t\t\t\t\t\t\ttag: \"batchNeighbours\" as const,\n\t\t\t\t\t\t\tids: [op.id],\n\t\t\t\t\t\t\tdirection: op.direction,\n\t\t\t\t\t\t}\n\t\t\t\t\t: { tag: \"batchNeighbours\" as const, ids: [op.id] };\n\n\t\t\tconst batchResponse = await resolveAsyncOp(graph, batchOp);\n\n\t\t\tif (batchResponse.tag !== \"batchNeighbours\") {\n\t\t\t\tthrow new TypeError(\n\t\t\t\t\t`Expected batchNeighbours response, got ${batchResponse.tag}`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst neighbours = batchResponse.value.get(op.id);\n\t\t\tstep = gen.next({\n\t\t\t\ttag: \"neighbours\",\n\t\t\t\tvalue: neighbours ?? [],\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Handle single degree op - convert to batch-of-one\n\t\tif (op.tag === \"degree\") {\n\t\t\tconst batchOp =\n\t\t\t\top.direction !== undefined\n\t\t\t\t\t? {\n\t\t\t\t\t\t\ttag: \"batchDegree\" as const,\n\t\t\t\t\t\t\tids: [op.id],\n\t\t\t\t\t\t\tdirection: op.direction,\n\t\t\t\t\t\t}\n\t\t\t\t\t: { tag: \"batchDegree\" as const, ids: [op.id] };\n\n\t\t\tconst batchResponse = await resolveAsyncOp(graph, batchOp);\n\n\t\t\tif (batchResponse.tag !== \"batchDegree\") {\n\t\t\t\tthrow new TypeError(\n\t\t\t\t\t`Expected batchDegree response, got ${batchResponse.tag}`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst degree = batchResponse.value.get(op.id);\n\t\t\tstep = gen.next({\n\t\t\t\ttag: \"degree\",\n\t\t\t\tvalue: degree ?? 0,\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Handle other single ops (getNode, getEdge, hasNode)\n\t\tlet response: GraphOpResponse<N, E>;\n\t\ttry {\n\t\t\tresponse = await resolveAsyncOp(graph, op);\n\t\t} catch (error) {\n\t\t\tstep = gen.throw(error);\n\t\t\tcontinue;\n\t\t}\n\n\t\tstep = gen.next(response);\n\t}\n\n\treturn step.value;\n}\n"],"mappings":";;;;;;;;;;;;;;;AAgCA,eAAsB,WAKrB,KACA,OACA,SACa;CACb,MAAM,SAAS,SAAS;CACxB,MAAM,aAAa,SAAS;CAC5B,MAAM,gBAAgB,SAAS,iBAAiB,cAAA;CAEhD,IAAI,OAAO,IAAI,MAAM;AAErB,QAAO,KAAK,SAAS,MAAM;AAE1B,MAAI,QAAQ,YAAY,MAAM;GAC7B,MAAM,aAAa,IAAI,aAAa,WAAW,aAAa;AAC5D,OAAI;AACH,QAAI,MAAM,WAAW;WACd;AAEP,UAAM;;AAEP,SAAM;;EAGP,MAAM,KAAK,KAAK;AAGhB,MAAI,GAAG,QAAQ,SAAS;AACvB,SAAM,eAAe;AACrB,UAAO,IAAI,KAAK,EAAE,KAAK,SAAS,CAAC;AACjC;;AAID,MAAI,GAAG,QAAQ,YAAY;AAC1B,OAAI,eAAe,KAAA,GAAW;IAC7B,MAAM,eAAe,WAAW,GAAG,MAAM;AACzC,QAAI,wBAAwB,QAC3B,OAAM;;AAGR,UAAO,IAAI,KAAK,EAAE,KAAK,YAAY,CAAC;AACpC;;AAID,MAAI,GAAG,QAAQ,qBAAqB,GAAG,QAAQ,eAAe;GAC7D,MAAM,WAAW,MAAM,YAAA,eAAe,OAAO,GAAG;AAChD,UAAO,IAAI,KAAK,SAAS;AACzB;;AAID,MAAI,GAAG,QAAQ,cAAc;GAU5B,MAAM,gBAAgB,MAAM,YAAA,eAAe,OAR1C,GAAG,cAAc,KAAA,IACd;IACA,KAAK;IACL,KAAK,CAAC,GAAG,GAAG;IACZ,WAAW,GAAG;IACd,GACA;IAAE,KAAK;IAA4B,KAAK,CAAC,GAAG,GAAG;IAAE,CAEK;AAE1D,OAAI,cAAc,QAAQ,kBACzB,OAAM,IAAI,UACT,0CAA0C,cAAc,MACxD;GAGF,MAAM,aAAa,cAAc,MAAM,IAAI,GAAG,GAAG;AACjD,UAAO,IAAI,KAAK;IACf,KAAK;IACL,OAAO,cAAc,EAAE;IACvB,CAAC;AACF;;AAID,MAAI,GAAG,QAAQ,UAAU;GAUxB,MAAM,gBAAgB,MAAM,YAAA,eAAe,OAR1C,GAAG,cAAc,KAAA,IACd;IACA,KAAK;IACL,KAAK,CAAC,GAAG,GAAG;IACZ,WAAW,GAAG;IACd,GACA;IAAE,KAAK;IAAwB,KAAK,CAAC,GAAG,GAAG;IAAE,CAES;AAE1D,OAAI,cAAc,QAAQ,cACzB,OAAM,IAAI,UACT,sCAAsC,cAAc,MACpD;GAGF,MAAM,SAAS,cAAc,MAAM,IAAI,GAAG,GAAG;AAC7C,UAAO,IAAI,KAAK;IACf,KAAK;IACL,OAAO,UAAU;IACjB,CAAC;AACF;;EAID,IAAI;AACJ,MAAI;AACH,cAAW,MAAM,YAAA,eAAe,OAAO,GAAG;WAClC,OAAO;AACf,UAAO,IAAI,MAAM,MAAM;AACvB;;AAGD,SAAO,IAAI,KAAK,SAAS;;AAG1B,QAAO,KAAK"}
|
package/dist/async/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/async/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,OAAO,CAAC;AACtB,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/async/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,OAAO,CAAC;AACtB,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,cAAc,kBAAkB,CAAC;AACjC,cAAc,SAAS,CAAC"}
|
package/dist/async/index.js
CHANGED
|
@@ -1,3 +1,97 @@
|
|
|
1
1
|
import { n as defaultYieldStrategy, t as collectAsyncIterable } from "../utils-BodeE2Mo.js";
|
|
2
|
-
import { a as
|
|
3
|
-
|
|
2
|
+
import { a as opGetNode, c as opProgress, d as resolveSyncOp, f as runAsync, i as opGetEdge, l as opYield, n as opBatchNeighbours, o as opHasNode, p as runSync, r as opDegree, s as opNeighbours, t as opBatchDegree, u as resolveAsyncOp } from "../ops-D5xZr4fV.js";
|
|
3
|
+
//#region src/async/runner-batched.ts
|
|
4
|
+
/**
|
|
5
|
+
* Drive a generator to completion using batched graph operations.
|
|
6
|
+
*
|
|
7
|
+
* When the generator yields explicit batch ops (batchNeighbours, batchDegree),
|
|
8
|
+
* resolves them efficiently. Single ops are converted to batch-of-one and resolved.
|
|
9
|
+
*
|
|
10
|
+
* @param gen - The generator to drive
|
|
11
|
+
* @param graph - Async graph to resolve ops against
|
|
12
|
+
* @param options - Runner configuration
|
|
13
|
+
* @returns Promise resolving to the generator's return value
|
|
14
|
+
*/
|
|
15
|
+
async function runBatched(gen, graph, options) {
|
|
16
|
+
const signal = options?.signal;
|
|
17
|
+
const onProgress = options?.onProgress;
|
|
18
|
+
const yieldStrategy = options?.yieldStrategy ?? defaultYieldStrategy;
|
|
19
|
+
let step = gen.next();
|
|
20
|
+
while (step.done !== true) {
|
|
21
|
+
if (signal?.aborted === true) {
|
|
22
|
+
const abortError = new DOMException("Aborted", "AbortError");
|
|
23
|
+
try {
|
|
24
|
+
gen.throw(abortError);
|
|
25
|
+
} catch {
|
|
26
|
+
throw abortError;
|
|
27
|
+
}
|
|
28
|
+
throw abortError;
|
|
29
|
+
}
|
|
30
|
+
const op = step.value;
|
|
31
|
+
if (op.tag === "yield") {
|
|
32
|
+
await yieldStrategy();
|
|
33
|
+
step = gen.next({ tag: "yield" });
|
|
34
|
+
continue;
|
|
35
|
+
}
|
|
36
|
+
if (op.tag === "progress") {
|
|
37
|
+
if (onProgress !== void 0) {
|
|
38
|
+
const maybePromise = onProgress(op.stats);
|
|
39
|
+
if (maybePromise instanceof Promise) await maybePromise;
|
|
40
|
+
}
|
|
41
|
+
step = gen.next({ tag: "progress" });
|
|
42
|
+
continue;
|
|
43
|
+
}
|
|
44
|
+
if (op.tag === "batchNeighbours" || op.tag === "batchDegree") {
|
|
45
|
+
const response = await resolveAsyncOp(graph, op);
|
|
46
|
+
step = gen.next(response);
|
|
47
|
+
continue;
|
|
48
|
+
}
|
|
49
|
+
if (op.tag === "neighbours") {
|
|
50
|
+
const batchResponse = await resolveAsyncOp(graph, op.direction !== void 0 ? {
|
|
51
|
+
tag: "batchNeighbours",
|
|
52
|
+
ids: [op.id],
|
|
53
|
+
direction: op.direction
|
|
54
|
+
} : {
|
|
55
|
+
tag: "batchNeighbours",
|
|
56
|
+
ids: [op.id]
|
|
57
|
+
});
|
|
58
|
+
if (batchResponse.tag !== "batchNeighbours") throw new TypeError(`Expected batchNeighbours response, got ${batchResponse.tag}`);
|
|
59
|
+
const neighbours = batchResponse.value.get(op.id);
|
|
60
|
+
step = gen.next({
|
|
61
|
+
tag: "neighbours",
|
|
62
|
+
value: neighbours ?? []
|
|
63
|
+
});
|
|
64
|
+
continue;
|
|
65
|
+
}
|
|
66
|
+
if (op.tag === "degree") {
|
|
67
|
+
const batchResponse = await resolveAsyncOp(graph, op.direction !== void 0 ? {
|
|
68
|
+
tag: "batchDegree",
|
|
69
|
+
ids: [op.id],
|
|
70
|
+
direction: op.direction
|
|
71
|
+
} : {
|
|
72
|
+
tag: "batchDegree",
|
|
73
|
+
ids: [op.id]
|
|
74
|
+
});
|
|
75
|
+
if (batchResponse.tag !== "batchDegree") throw new TypeError(`Expected batchDegree response, got ${batchResponse.tag}`);
|
|
76
|
+
const degree = batchResponse.value.get(op.id);
|
|
77
|
+
step = gen.next({
|
|
78
|
+
tag: "degree",
|
|
79
|
+
value: degree ?? 0
|
|
80
|
+
});
|
|
81
|
+
continue;
|
|
82
|
+
}
|
|
83
|
+
let response;
|
|
84
|
+
try {
|
|
85
|
+
response = await resolveAsyncOp(graph, op);
|
|
86
|
+
} catch (error) {
|
|
87
|
+
step = gen.throw(error);
|
|
88
|
+
continue;
|
|
89
|
+
}
|
|
90
|
+
step = gen.next(response);
|
|
91
|
+
}
|
|
92
|
+
return step.value;
|
|
93
|
+
}
|
|
94
|
+
//#endregion
|
|
95
|
+
export { collectAsyncIterable, defaultYieldStrategy, opBatchDegree, opBatchNeighbours, opDegree, opGetEdge, opGetNode, opHasNode, opNeighbours, opProgress, opYield, resolveAsyncOp, resolveSyncOp, runAsync, runBatched, runSync };
|
|
96
|
+
|
|
97
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../src/async/runner-batched.ts"],"sourcesContent":["/**\n * Batched async runner for generator-based graph algorithms.\n *\n * Handles both single ops (by converting to batch-of-one) and explicit batch ops.\n * The batching optimization comes from:\n * 1. Generators explicitly yielding batch ops when they know they need multiple results\n * 2. Graph implementations can cache/prefetch internally\n */\n\nimport type { NodeData, EdgeData } from \"../graph\";\nimport type { AsyncReadableGraph } from \"../graph/async-interfaces\";\nimport type { GraphOp, GraphOpResponse } from \"./protocol\";\nimport type { AsyncRunnerOptions } from \"./types\";\nimport { resolveAsyncOp } from \"./runners\";\nimport { defaultYieldStrategy } from \"./utils\";\n\nexport interface BatchRunnerOptions extends AsyncRunnerOptions {\n\t/** max ops to collect per batch (reserved for future use) */\n\treadonly batchSize?: number;\n}\n\n/**\n * Drive a generator to completion using batched graph operations.\n *\n * When the generator yields explicit batch ops (batchNeighbours, batchDegree),\n * resolves them efficiently. Single ops are converted to batch-of-one and resolved.\n *\n * @param gen - The generator to drive\n * @param graph - Async graph to resolve ops against\n * @param options - Runner configuration\n * @returns Promise resolving to the generator's return value\n */\nexport async function runBatched<\n\tR,\n\tN extends NodeData = NodeData,\n\tE extends EdgeData = EdgeData,\n>(\n\tgen: Generator<GraphOp, R, GraphOpResponse<N, E>>,\n\tgraph: AsyncReadableGraph<N, E>,\n\toptions?: BatchRunnerOptions,\n): Promise<R> {\n\tconst signal = options?.signal;\n\tconst onProgress = options?.onProgress;\n\tconst yieldStrategy = options?.yieldStrategy ?? defaultYieldStrategy;\n\n\tlet step = gen.next();\n\n\twhile (step.done !== true) {\n\t\t// Check for cancellation\n\t\tif (signal?.aborted === true) {\n\t\t\tconst abortError = new DOMException(\"Aborted\", \"AbortError\");\n\t\t\ttry {\n\t\t\t\tgen.throw(abortError);\n\t\t\t} catch {\n\t\t\t\t// Generator did not handle the error\n\t\t\t\tthrow abortError;\n\t\t\t}\n\t\t\tthrow abortError;\n\t\t}\n\n\t\tconst op = step.value;\n\n\t\t// Handle cooperative yield ops\n\t\tif (op.tag === \"yield\") {\n\t\t\tawait yieldStrategy();\n\t\t\tstep = gen.next({ tag: \"yield\" });\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Handle progress ops\n\t\tif (op.tag === \"progress\") {\n\t\t\tif (onProgress !== undefined) {\n\t\t\t\tconst maybePromise = onProgress(op.stats);\n\t\t\t\tif (maybePromise instanceof Promise) {\n\t\t\t\t\tawait maybePromise;\n\t\t\t\t}\n\t\t\t}\n\t\t\tstep = gen.next({ tag: \"progress\" });\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Handle explicit batch ops from generator\n\t\tif (op.tag === \"batchNeighbours\" || op.tag === \"batchDegree\") {\n\t\t\tconst response = await resolveAsyncOp(graph, op);\n\t\t\tstep = gen.next(response);\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Handle single neighbours op - convert to batch-of-one\n\t\tif (op.tag === \"neighbours\") {\n\t\t\tconst batchOp =\n\t\t\t\top.direction !== undefined\n\t\t\t\t\t? {\n\t\t\t\t\t\t\ttag: \"batchNeighbours\" as const,\n\t\t\t\t\t\t\tids: [op.id],\n\t\t\t\t\t\t\tdirection: op.direction,\n\t\t\t\t\t\t}\n\t\t\t\t\t: { tag: \"batchNeighbours\" as const, ids: [op.id] };\n\n\t\t\tconst batchResponse = await resolveAsyncOp(graph, batchOp);\n\n\t\t\tif (batchResponse.tag !== \"batchNeighbours\") {\n\t\t\t\tthrow new TypeError(\n\t\t\t\t\t`Expected batchNeighbours response, got ${batchResponse.tag}`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst neighbours = batchResponse.value.get(op.id);\n\t\t\tstep = gen.next({\n\t\t\t\ttag: \"neighbours\",\n\t\t\t\tvalue: neighbours ?? [],\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Handle single degree op - convert to batch-of-one\n\t\tif (op.tag === \"degree\") {\n\t\t\tconst batchOp =\n\t\t\t\top.direction !== undefined\n\t\t\t\t\t? {\n\t\t\t\t\t\t\ttag: \"batchDegree\" as const,\n\t\t\t\t\t\t\tids: [op.id],\n\t\t\t\t\t\t\tdirection: op.direction,\n\t\t\t\t\t\t}\n\t\t\t\t\t: { tag: \"batchDegree\" as const, ids: [op.id] };\n\n\t\t\tconst batchResponse = await resolveAsyncOp(graph, batchOp);\n\n\t\t\tif (batchResponse.tag !== \"batchDegree\") {\n\t\t\t\tthrow new TypeError(\n\t\t\t\t\t`Expected batchDegree response, got ${batchResponse.tag}`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst degree = batchResponse.value.get(op.id);\n\t\t\tstep = gen.next({\n\t\t\t\ttag: \"degree\",\n\t\t\t\tvalue: degree ?? 0,\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Handle other single ops (getNode, getEdge, hasNode)\n\t\tlet response: GraphOpResponse<N, E>;\n\t\ttry {\n\t\t\tresponse = await resolveAsyncOp(graph, op);\n\t\t} catch (error) {\n\t\t\tstep = gen.throw(error);\n\t\t\tcontinue;\n\t\t}\n\n\t\tstep = gen.next(response);\n\t}\n\n\treturn step.value;\n}\n"],"mappings":";;;;;;;;;;;;;;AAgCA,eAAsB,WAKrB,KACA,OACA,SACa;CACb,MAAM,SAAS,SAAS;CACxB,MAAM,aAAa,SAAS;CAC5B,MAAM,gBAAgB,SAAS,iBAAiB;CAEhD,IAAI,OAAO,IAAI,MAAM;AAErB,QAAO,KAAK,SAAS,MAAM;AAE1B,MAAI,QAAQ,YAAY,MAAM;GAC7B,MAAM,aAAa,IAAI,aAAa,WAAW,aAAa;AAC5D,OAAI;AACH,QAAI,MAAM,WAAW;WACd;AAEP,UAAM;;AAEP,SAAM;;EAGP,MAAM,KAAK,KAAK;AAGhB,MAAI,GAAG,QAAQ,SAAS;AACvB,SAAM,eAAe;AACrB,UAAO,IAAI,KAAK,EAAE,KAAK,SAAS,CAAC;AACjC;;AAID,MAAI,GAAG,QAAQ,YAAY;AAC1B,OAAI,eAAe,KAAA,GAAW;IAC7B,MAAM,eAAe,WAAW,GAAG,MAAM;AACzC,QAAI,wBAAwB,QAC3B,OAAM;;AAGR,UAAO,IAAI,KAAK,EAAE,KAAK,YAAY,CAAC;AACpC;;AAID,MAAI,GAAG,QAAQ,qBAAqB,GAAG,QAAQ,eAAe;GAC7D,MAAM,WAAW,MAAM,eAAe,OAAO,GAAG;AAChD,UAAO,IAAI,KAAK,SAAS;AACzB;;AAID,MAAI,GAAG,QAAQ,cAAc;GAU5B,MAAM,gBAAgB,MAAM,eAAe,OAR1C,GAAG,cAAc,KAAA,IACd;IACA,KAAK;IACL,KAAK,CAAC,GAAG,GAAG;IACZ,WAAW,GAAG;IACd,GACA;IAAE,KAAK;IAA4B,KAAK,CAAC,GAAG,GAAG;IAAE,CAEK;AAE1D,OAAI,cAAc,QAAQ,kBACzB,OAAM,IAAI,UACT,0CAA0C,cAAc,MACxD;GAGF,MAAM,aAAa,cAAc,MAAM,IAAI,GAAG,GAAG;AACjD,UAAO,IAAI,KAAK;IACf,KAAK;IACL,OAAO,cAAc,EAAE;IACvB,CAAC;AACF;;AAID,MAAI,GAAG,QAAQ,UAAU;GAUxB,MAAM,gBAAgB,MAAM,eAAe,OAR1C,GAAG,cAAc,KAAA,IACd;IACA,KAAK;IACL,KAAK,CAAC,GAAG,GAAG;IACZ,WAAW,GAAG;IACd,GACA;IAAE,KAAK;IAAwB,KAAK,CAAC,GAAG,GAAG;IAAE,CAES;AAE1D,OAAI,cAAc,QAAQ,cACzB,OAAM,IAAI,UACT,sCAAsC,cAAc,MACpD;GAGF,MAAM,SAAS,cAAc,MAAM,IAAI,GAAG,GAAG;AAC7C,UAAO,IAAI,KAAK;IACf,KAAK;IACL,OAAO,UAAU;IACjB,CAAC;AACF;;EAID,IAAI;AACJ,MAAI;AACH,cAAW,MAAM,eAAe,OAAO,GAAG;WAClC,OAAO;AACf,UAAO,IAAI,MAAM,MAAM;AACvB;;AAGD,SAAO,IAAI,KAAK,SAAS;;AAG1B,QAAO,KAAK"}
|
package/dist/async/ops.d.ts
CHANGED
|
@@ -7,4 +7,6 @@ export declare function opGetEdge<N extends NodeData = NodeData, E extends EdgeD
|
|
|
7
7
|
export declare function opHasNode<N extends NodeData = NodeData, E extends EdgeData = EdgeData>(id: NodeId): Generator<GraphOp, boolean, GraphOpResponse<N, E>>;
|
|
8
8
|
export declare function opYield<N extends NodeData = NodeData, E extends EdgeData = EdgeData>(): Generator<GraphOp, void, GraphOpResponse<N, E>>;
|
|
9
9
|
export declare function opProgress<N extends NodeData = NodeData, E extends EdgeData = EdgeData>(stats: ProgressStats): Generator<GraphOp, void, GraphOpResponse<N, E>>;
|
|
10
|
+
export declare function opBatchNeighbours<N extends NodeData = NodeData, E extends EdgeData = EdgeData>(ids: readonly NodeId[], direction?: Direction): Generator<GraphOp, ReadonlyMap<NodeId, readonly NodeId[]>, GraphOpResponse<N, E>>;
|
|
11
|
+
export declare function opBatchDegree<N extends NodeData = NodeData, E extends EdgeData = EdgeData>(ids: readonly NodeId[], direction?: Direction): Generator<GraphOp, ReadonlyMap<NodeId, number>, GraphOpResponse<N, E>>;
|
|
10
12
|
//# sourceMappingURL=ops.d.ts.map
|
package/dist/async/ops.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ops.d.ts","sourceRoot":"","sources":["../../src/async/ops.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACtE,OAAO,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE1E,wBAAiB,YAAY,CAC5B,CAAC,SAAS,QAAQ,GAAG,QAAQ,EAC7B,CAAC,SAAS,QAAQ,GAAG,QAAQ,EAE7B,EAAE,EAAE,MAAM,EACV,SAAS,CAAC,EAAE,SAAS,GACnB,SAAS,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,EAAE,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAU9D;AAED,wBAAiB,QAAQ,CACxB,CAAC,SAAS,QAAQ,GAAG,QAAQ,EAC7B,CAAC,SAAS,QAAQ,GAAG,QAAQ,EAE7B,EAAE,EAAE,MAAM,EACV,SAAS,CAAC,EAAE,SAAS,GACnB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAUnD;AAED,wBAAiB,SAAS,CACzB,CAAC,SAAS,QAAQ,GAAG,QAAQ,EAC7B,CAAC,SAAS,QAAQ,GAAG,QAAQ,EAC5B,EAAE,EAAE,MAAM,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC,GAAG,SAAS,EAAE,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAMtE;AAED,wBAAiB,SAAS,CACzB,CAAC,SAAS,QAAQ,GAAG,QAAQ,EAC7B,CAAC,SAAS,QAAQ,GAAG,QAAQ,EAE7B,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,GACZ,SAAS,CAAC,OAAO,EAAE,CAAC,GAAG,SAAS,EAAE,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAU1D;AAED,wBAAiB,SAAS,CACzB,CAAC,SAAS,QAAQ,GAAG,QAAQ,EAC7B,CAAC,SAAS,QAAQ,GAAG,QAAQ,EAC5B,EAAE,EAAE,MAAM,GAAG,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAMhE;AAED,wBAAiB,OAAO,CACvB,CAAC,SAAS,QAAQ,GAAG,QAAQ,EAC7B,CAAC,SAAS,QAAQ,GAAG,QAAQ,KACzB,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAEnD;AAED,wBAAiB,UAAU,CAC1B,CAAC,SAAS,QAAQ,GAAG,QAAQ,EAC7B,CAAC,SAAS,QAAQ,GAAG,QAAQ,EAC5B,KAAK,EAAE,aAAa,GAAG,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAEvE"}
|
|
1
|
+
{"version":3,"file":"ops.d.ts","sourceRoot":"","sources":["../../src/async/ops.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACtE,OAAO,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE1E,wBAAiB,YAAY,CAC5B,CAAC,SAAS,QAAQ,GAAG,QAAQ,EAC7B,CAAC,SAAS,QAAQ,GAAG,QAAQ,EAE7B,EAAE,EAAE,MAAM,EACV,SAAS,CAAC,EAAE,SAAS,GACnB,SAAS,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,EAAE,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAU9D;AAED,wBAAiB,QAAQ,CACxB,CAAC,SAAS,QAAQ,GAAG,QAAQ,EAC7B,CAAC,SAAS,QAAQ,GAAG,QAAQ,EAE7B,EAAE,EAAE,MAAM,EACV,SAAS,CAAC,EAAE,SAAS,GACnB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAUnD;AAED,wBAAiB,SAAS,CACzB,CAAC,SAAS,QAAQ,GAAG,QAAQ,EAC7B,CAAC,SAAS,QAAQ,GAAG,QAAQ,EAC5B,EAAE,EAAE,MAAM,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC,GAAG,SAAS,EAAE,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAMtE;AAED,wBAAiB,SAAS,CACzB,CAAC,SAAS,QAAQ,GAAG,QAAQ,EAC7B,CAAC,SAAS,QAAQ,GAAG,QAAQ,EAE7B,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,GACZ,SAAS,CAAC,OAAO,EAAE,CAAC,GAAG,SAAS,EAAE,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAU1D;AAED,wBAAiB,SAAS,CACzB,CAAC,SAAS,QAAQ,GAAG,QAAQ,EAC7B,CAAC,SAAS,QAAQ,GAAG,QAAQ,EAC5B,EAAE,EAAE,MAAM,GAAG,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAMhE;AAED,wBAAiB,OAAO,CACvB,CAAC,SAAS,QAAQ,GAAG,QAAQ,EAC7B,CAAC,SAAS,QAAQ,GAAG,QAAQ,KACzB,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAEnD;AAED,wBAAiB,UAAU,CAC1B,CAAC,SAAS,QAAQ,GAAG,QAAQ,EAC7B,CAAC,SAAS,QAAQ,GAAG,QAAQ,EAC5B,KAAK,EAAE,aAAa,GAAG,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAEvE;AAED,wBAAiB,iBAAiB,CACjC,CAAC,SAAS,QAAQ,GAAG,QAAQ,EAC7B,CAAC,SAAS,QAAQ,GAAG,QAAQ,EAE7B,GAAG,EAAE,SAAS,MAAM,EAAE,EACtB,SAAS,CAAC,EAAE,SAAS,GACnB,SAAS,CACX,OAAO,EACP,WAAW,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,EACtC,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,CACrB,CAYA;AAED,wBAAiB,aAAa,CAC7B,CAAC,SAAS,QAAQ,GAAG,QAAQ,EAC7B,CAAC,SAAS,QAAQ,GAAG,QAAQ,EAE7B,GAAG,EAAE,SAAS,MAAM,EAAE,EACtB,SAAS,CAAC,EAAE,SAAS,GACnB,SAAS,CAAC,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAUxE"}
|
package/dist/async/protocol.d.ts
CHANGED
|
@@ -18,6 +18,14 @@ export type GraphOp = {
|
|
|
18
18
|
} | {
|
|
19
19
|
readonly tag: "hasNode";
|
|
20
20
|
readonly id: NodeId;
|
|
21
|
+
} | {
|
|
22
|
+
readonly tag: "batchNeighbours";
|
|
23
|
+
readonly ids: readonly NodeId[];
|
|
24
|
+
readonly direction?: Direction;
|
|
25
|
+
} | {
|
|
26
|
+
readonly tag: "batchDegree";
|
|
27
|
+
readonly ids: readonly NodeId[];
|
|
28
|
+
readonly direction?: Direction;
|
|
21
29
|
} | {
|
|
22
30
|
readonly tag: "yield";
|
|
23
31
|
} | {
|
|
@@ -45,6 +53,12 @@ export type GraphOpResponse<N extends NodeData = NodeData, E extends EdgeData =
|
|
|
45
53
|
} | {
|
|
46
54
|
readonly tag: "hasNode";
|
|
47
55
|
readonly value: boolean;
|
|
56
|
+
} | {
|
|
57
|
+
readonly tag: "batchNeighbours";
|
|
58
|
+
readonly value: ReadonlyMap<NodeId, readonly NodeId[]>;
|
|
59
|
+
} | {
|
|
60
|
+
readonly tag: "batchDegree";
|
|
61
|
+
readonly value: ReadonlyMap<NodeId, number>;
|
|
48
62
|
} | {
|
|
49
63
|
readonly tag: "yield";
|
|
50
64
|
} | {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../../src/async/protocol.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAEtE,gEAAgE;AAChE,MAAM,MAAM,OAAO,GAChB;IACA,QAAQ,CAAC,GAAG,EAAE,YAAY,CAAC;IAC3B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC;CAC9B,GACD;IACA,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC;IACvB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC;CAC9B,GACD;IAAE,QAAQ,CAAC,GAAG,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAChD;IACA,QAAQ,CAAC,GAAG,EAAE,SAAS,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACvB,GACD;IAAE,QAAQ,CAAC,GAAG,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAChD;IAAE,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAA;CAAE,GACzB;IAAE,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAA;CAAE,CAAC;AAE/D;;;;;GAKG;AACH,MAAM,MAAM,eAAe,CAC1B,CAAC,SAAS,QAAQ,GAAG,QAAQ,EAC7B,CAAC,SAAS,QAAQ,GAAG,QAAQ,IAE3B;IAAE,QAAQ,CAAC,GAAG,EAAE,YAAY,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,GACjE;IAAE,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAClD;IAAE,QAAQ,CAAC,GAAG,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,GAAG,SAAS,CAAA;CAAE,GAC1D;IAAE,QAAQ,CAAC,GAAG,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,GAAG,SAAS,CAAA;CAAE,GAC1D;IAAE,QAAQ,CAAC,GAAG,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;CAAE,GACpD;IAAE,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAA;CAAE,GACzB;IAAE,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAA;CAAE,CAAC;AAEhC,oDAAoD;AACpD,MAAM,WAAW,aAAa;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC3B"}
|
|
1
|
+
{"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../../src/async/protocol.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAEtE,gEAAgE;AAChE,MAAM,MAAM,OAAO,GAChB;IACA,QAAQ,CAAC,GAAG,EAAE,YAAY,CAAC;IAC3B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC;CAC9B,GACD;IACA,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC;IACvB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC;CAC9B,GACD;IAAE,QAAQ,CAAC,GAAG,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAChD;IACA,QAAQ,CAAC,GAAG,EAAE,SAAS,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACvB,GACD;IAAE,QAAQ,CAAC,GAAG,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAChD;IACA,QAAQ,CAAC,GAAG,EAAE,iBAAiB,CAAC;IAChC,QAAQ,CAAC,GAAG,EAAE,SAAS,MAAM,EAAE,CAAC;IAChC,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC;CAC9B,GACD;IACA,QAAQ,CAAC,GAAG,EAAE,aAAa,CAAC;IAC5B,QAAQ,CAAC,GAAG,EAAE,SAAS,MAAM,EAAE,CAAC;IAChC,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC;CAC9B,GACD;IAAE,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAA;CAAE,GACzB;IAAE,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAA;CAAE,CAAC;AAE/D;;;;;GAKG;AACH,MAAM,MAAM,eAAe,CAC1B,CAAC,SAAS,QAAQ,GAAG,QAAQ,EAC7B,CAAC,SAAS,QAAQ,GAAG,QAAQ,IAE3B;IAAE,QAAQ,CAAC,GAAG,EAAE,YAAY,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,GACjE;IAAE,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAClD;IAAE,QAAQ,CAAC,GAAG,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,GAAG,SAAS,CAAA;CAAE,GAC1D;IAAE,QAAQ,CAAC,GAAG,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,GAAG,SAAS,CAAA;CAAE,GAC1D;IAAE,QAAQ,CAAC,GAAG,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;CAAE,GACpD;IACA,QAAQ,CAAC,GAAG,EAAE,iBAAiB,CAAC;IAChC,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC;CACtD,GACD;IAAE,QAAQ,CAAC,GAAG,EAAE,aAAa,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,GAC5E;IAAE,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAA;CAAE,GACzB;IAAE,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAA;CAAE,CAAC;AAEhC,oDAAoD;AACpD,MAAM,WAAW,aAAa;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC3B"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { NodeData, EdgeData } from '../graph';
|
|
2
|
+
import { AsyncReadableGraph } from '../graph/async-interfaces';
|
|
3
|
+
import { GraphOp, GraphOpResponse } from './protocol';
|
|
4
|
+
import { AsyncRunnerOptions } from './types';
|
|
5
|
+
export interface BatchRunnerOptions extends AsyncRunnerOptions {
|
|
6
|
+
/** max ops to collect per batch (reserved for future use) */
|
|
7
|
+
readonly batchSize?: number;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Drive a generator to completion using batched graph operations.
|
|
11
|
+
*
|
|
12
|
+
* When the generator yields explicit batch ops (batchNeighbours, batchDegree),
|
|
13
|
+
* resolves them efficiently. Single ops are converted to batch-of-one and resolved.
|
|
14
|
+
*
|
|
15
|
+
* @param gen - The generator to drive
|
|
16
|
+
* @param graph - Async graph to resolve ops against
|
|
17
|
+
* @param options - Runner configuration
|
|
18
|
+
* @returns Promise resolving to the generator's return value
|
|
19
|
+
*/
|
|
20
|
+
export declare function runBatched<R, N extends NodeData = NodeData, E extends EdgeData = EdgeData>(gen: Generator<GraphOp, R, GraphOpResponse<N, E>>, graph: AsyncReadableGraph<N, E>, options?: BatchRunnerOptions): Promise<R>;
|
|
21
|
+
//# sourceMappingURL=runner-batched.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runner-batched.d.ts","sourceRoot":"","sources":["../../src/async/runner-batched.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACnD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC3D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAIlD,MAAM,WAAW,kBAAmB,SAAQ,kBAAkB;IAC7D,6DAA6D;IAC7D,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,UAAU,CAC/B,CAAC,EACD,CAAC,SAAS,QAAQ,GAAG,QAAQ,EAC7B,CAAC,SAAS,QAAQ,GAAG,QAAQ,EAE7B,GAAG,EAAE,SAAS,CAAC,OAAO,EAAE,CAAC,EAAE,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EACjD,KAAK,EAAE,kBAAkB,CAAC,CAAC,EAAE,CAAC,CAAC,EAC/B,OAAO,CAAC,EAAE,kBAAkB,GAC1B,OAAO,CAAC,CAAC,CAAC,CAmHZ"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runner-batched.unit.test.d.ts","sourceRoot":"","sources":["../../src/async/runner-batched.unit.test.ts"],"names":[],"mappings":""}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runners.d.ts","sourceRoot":"","sources":["../../src/async/runners.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"runners.d.ts","sourceRoot":"","sources":["../../src/async/runners.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAU,QAAQ,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAC1E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC3D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAOlD;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EACnE,KAAK,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,EAC1B,EAAE,EAAE,OAAO,GACT,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,CAkCvB;AAED;;;;;;;;;GASG;AACH,wBAAgB,OAAO,CAAC,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,EAChE,GAAG,EAAE,SAAS,CAAC,OAAO,EAAE,CAAC,EAAE,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EACjD,KAAK,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,GACxB,CAAC,CAOH;AAMD;;;;;;;;;;GAUG;AACH,wBAAsB,cAAc,CAAC,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAC1E,KAAK,EAAE,kBAAkB,CAAC,CAAC,EAAE,CAAC,CAAC,EAC/B,EAAE,EAAE,OAAO,GACT,OAAO,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CA0ChC;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,QAAQ,CAAC,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,EACvE,GAAG,EAAE,SAAS,CAAC,OAAO,EAAE,CAAC,EAAE,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EACjD,KAAK,EAAE,kBAAkB,CAAC,CAAC,EAAE,CAAC,CAAC,EAC/B,OAAO,CAAC,EAAE,kBAAkB,GAC1B,OAAO,CAAC,CAAC,CAAC,CA0DZ"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-core.d.ts","sourceRoot":"","sources":["../../src/expansion/base-core.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAU,QAAQ,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAE1E,OAAO,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAElE,OAAO,KAAK,EACX,IAAI,EACJ,eAAe,EAGf,eAAe,
|
|
1
|
+
{"version":3,"file":"base-core.d.ts","sourceRoot":"","sources":["../../src/expansion/base-core.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAU,QAAQ,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAE1E,OAAO,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAElE,OAAO,KAAK,EACX,IAAI,EACJ,eAAe,EAGf,eAAe,EAGf,MAAM,SAAS,CAAC;AAqBjB;;;;;;;;;;;;;;GAcG;AACH,wBAAiB,QAAQ,CAAC,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAC/D,SAAS,EAAE;IACV,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC3B,EACD,KAAK,EAAE,SAAS,IAAI,EAAE,EACtB,MAAM,CAAC,EAAE,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,EAC9B,QAAQ,CAAC,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,GAC5B,SAAS,CAAC,OAAO,EAAE,eAAe,EAAE,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAoR5D"}
|
package/dist/expansion/fuse.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { NodeData, EdgeData, ReadableGraph } from '../graph';
|
|
2
2
|
import { AsyncReadableGraph } from '../graph/async-interfaces';
|
|
3
|
-
import { Seed, ExpansionResult, ExpansionConfig } from './types';
|
|
3
|
+
import { Seed, ExpansionResult, ExpansionConfig, BatchPriorityFunction } from './types';
|
|
4
4
|
import { AsyncExpansionConfig } from './base';
|
|
5
5
|
/**
|
|
6
6
|
* Configuration for FUSE expansion.
|
|
@@ -41,4 +41,27 @@ export declare function fuse<N extends NodeData, E extends EdgeData>(graph: Read
|
|
|
41
41
|
* @returns Promise resolving to the expansion result
|
|
42
42
|
*/
|
|
43
43
|
export declare function fuseAsync<N extends NodeData, E extends EdgeData>(graph: AsyncReadableGraph<N, E>, seeds: readonly Seed[], config?: FUSEConfig<N, E> & AsyncExpansionConfig<N, E>): Promise<ExpansionResult>;
|
|
44
|
+
/**
|
|
45
|
+
* Create a batch priority function for FUSE with configurable weight.
|
|
46
|
+
*
|
|
47
|
+
* Combines degree with average frontier MI:
|
|
48
|
+
* Priority = (1 - w) * degree + w * (1 - avgMI)
|
|
49
|
+
*
|
|
50
|
+
* @param salienceWeight - Weight for MI component (0-1, default: 0.5)
|
|
51
|
+
* @returns Batch priority function
|
|
52
|
+
*/
|
|
53
|
+
export declare function createFuseBatchPriority<N extends NodeData, E extends EdgeData>(salienceWeight?: number): BatchPriorityFunction<N, E>;
|
|
54
|
+
/**
|
|
55
|
+
* Default FUSE batch priority function with salienceWeight = 0.5.
|
|
56
|
+
*/
|
|
57
|
+
export declare const fuseBatchPriority: BatchPriorityFunction;
|
|
58
|
+
/**
|
|
59
|
+
* Create a FUSE config with batch priority enabled.
|
|
60
|
+
*
|
|
61
|
+
* @param config - Base FUSE configuration
|
|
62
|
+
* @returns Configuration with batchPriority set
|
|
63
|
+
*/
|
|
64
|
+
export declare function fuseWithBatchPriority<N extends NodeData = NodeData, E extends EdgeData = EdgeData>(config?: FUSEConfig<N, E>): FUSEConfig<N, E> & {
|
|
65
|
+
batchPriority: BatchPriorityFunction<N, E>;
|
|
66
|
+
};
|
|
44
67
|
//# sourceMappingURL=fuse.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fuse.d.ts","sourceRoot":"","sources":["../../src/expansion/fuse.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,aAAa,
|
|
1
|
+
{"version":3,"file":"fuse.d.ts","sourceRoot":"","sources":["../../src/expansion/fuse.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,aAAa,EAAU,MAAM,UAAU,CAAC;AAC1E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,KAAK,EACX,IAAI,EACJ,eAAe,EACf,eAAe,EAGf,qBAAqB,EACrB,MAAM,SAAS,CAAC;AAEjB,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,QAAQ,CAAC;AASnD;;GAEG;AACH,MAAM,WAAW,UAAU,CAC1B,CAAC,SAAS,QAAQ,GAAG,QAAQ,EAC7B,CAAC,SAAS,QAAQ,GAAG,QAAQ,CAC5B,SAAQ,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC;IAC9B,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,CAAC,EAAE,CACb,KAAK,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,EAC1B,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,KACV,MAAM,CAAC;IACZ,wDAAwD;IACxD,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;CACjC;AAED;;GAEG;AACH,MAAM,MAAM,UAAU,CACrB,CAAC,SAAS,QAAQ,GAAG,QAAQ,EAC7B,CAAC,SAAS,QAAQ,GAAG,QAAQ,IAC1B,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAwBrB;;;;;;;;;;GAUG;AACH,wBAAgB,IAAI,CAAC,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAC1D,KAAK,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,EAC1B,KAAK,EAAE,SAAS,IAAI,EAAE,EACtB,MAAM,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,GACvB,eAAe,CAUjB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,SAAS,CAAC,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EACrE,KAAK,EAAE,kBAAkB,CAAC,CAAC,EAAE,CAAC,CAAC,EAC/B,KAAK,EAAE,SAAS,IAAI,EAAE,EACtB,MAAM,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,oBAAoB,CAAC,CAAC,EAAE,CAAC,CAAC,GACpD,OAAO,CAAC,eAAe,CAAC,CAO1B;AAED;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CAAC,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAC7E,cAAc,SAAM,GAClB,qBAAqB,CAAC,CAAC,EAAE,CAAC,CAAC,CA2B7B;AAED;;GAEG;AACH,eAAO,MAAM,iBAAiB,EAAE,qBACH,CAAC;AAE9B;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACpC,CAAC,SAAS,QAAQ,GAAG,QAAQ,EAC7B,CAAC,SAAS,QAAQ,GAAG,QAAQ,EAE7B,MAAM,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,GACvB,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG;IAAE,aAAa,EAAE,qBAAqB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;CAAE,CAKnE"}
|
package/dist/expansion/index.cjs
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
const require_expansion = require("../expansion
|
|
2
|
+
const require_expansion = require("../expansion--UuRowv-.cjs");
|
|
3
3
|
exports.base = require_expansion.base;
|
|
4
4
|
exports.baseAsync = require_expansion.baseAsync;
|
|
5
|
+
exports.createFuseBatchPriority = require_expansion.createFuseBatchPriority;
|
|
6
|
+
exports.createSiftBatchPriority = require_expansion.createSiftBatchPriority;
|
|
5
7
|
exports.dfsPriority = require_expansion.dfsPriority;
|
|
6
8
|
exports.dfsPriorityAsync = require_expansion.dfsPriorityAsync;
|
|
7
9
|
exports.dfsPriorityFn = require_expansion.dfsPriorityFn;
|
|
@@ -17,11 +19,15 @@ exports.frontierBalanced = require_expansion.frontierBalanced;
|
|
|
17
19
|
exports.frontierBalancedAsync = require_expansion.frontierBalancedAsync;
|
|
18
20
|
exports.fuse = require_expansion.fuse;
|
|
19
21
|
exports.fuseAsync = require_expansion.fuseAsync;
|
|
22
|
+
exports.fuseBatchPriority = require_expansion.fuseBatchPriority;
|
|
23
|
+
exports.fuseWithBatchPriority = require_expansion.fuseWithBatchPriority;
|
|
20
24
|
exports.hae = require_expansion.hae;
|
|
21
25
|
exports.haeAsync = require_expansion.haeAsync;
|
|
22
26
|
exports.kHop = require_expansion.kHop;
|
|
23
27
|
exports.lace = require_expansion.lace;
|
|
24
28
|
exports.laceAsync = require_expansion.laceAsync;
|
|
29
|
+
exports.laceBatchPriority = require_expansion.laceBatchPriority;
|
|
30
|
+
exports.laceWithBatchPriority = require_expansion.laceWithBatchPriority;
|
|
25
31
|
exports.maze = require_expansion.maze;
|
|
26
32
|
exports.mazeAsync = require_expansion.mazeAsync;
|
|
27
33
|
exports.pipe = require_expansion.pipe;
|
|
@@ -35,6 +41,8 @@ exports.sage = require_expansion.sage;
|
|
|
35
41
|
exports.sageAsync = require_expansion.sageAsync;
|
|
36
42
|
exports.sift = require_expansion.sift;
|
|
37
43
|
exports.siftAsync = require_expansion.siftAsync;
|
|
44
|
+
exports.siftBatchPriority = require_expansion.siftBatchPriority;
|
|
45
|
+
exports.siftWithBatchPriority = require_expansion.siftWithBatchPriority;
|
|
38
46
|
exports.standardBfs = require_expansion.standardBfs;
|
|
39
47
|
exports.standardBfsAsync = require_expansion.standardBfsAsync;
|
|
40
48
|
exports.tide = require_expansion.tide;
|
package/dist/expansion/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { A as
|
|
2
|
-
export { base, baseAsync, dfsPriority, dfsPriorityAsync, dfsPriorityFn, dome, domeAsync, domeHighDegree, domeHighDegreeAsync, edge, edgeAsync, flux, fluxAsync, frontierBalanced, frontierBalancedAsync, fuse, fuseAsync, hae, haeAsync, kHop, lace, laceAsync, maze, mazeAsync, pipe, pipeAsync, randomPriority, randomPriorityAsync, randomWalk, reach, reachAsync, sage, sageAsync, sift, siftAsync, standardBfs, standardBfsAsync, tide, tideAsync, warp, warpAsync };
|
|
1
|
+
import { A as tide, B as edge, C as fuseWithBatchPriority, D as laceAsync, E as lace, F as reachAsync, G as domeAsync, H as hae, I as sage, J as base, K as domeHighDegree, L as sageAsync, M as maze, N as mazeAsync, O as laceBatchPriority, P as reach, R as pipe, S as fuseBatchPriority, T as warpAsync, U as haeAsync, V as edgeAsync, W as dome, Y as baseAsync, _ as siftBatchPriority, a as dfsPriorityFn, b as fuse, c as frontierBalanced, d as standardBfsAsync, f as flux, g as siftAsync, h as sift, i as dfsPriorityAsync, j as tideAsync, k as laceWithBatchPriority, l as frontierBalancedAsync, m as createSiftBatchPriority, n as kHop, o as randomPriority, p as fluxAsync, q as domeHighDegreeAsync, r as dfsPriority, s as randomPriorityAsync, t as randomWalk, u as standardBfs, v as siftWithBatchPriority, w as warp, x as fuseAsync, y as createFuseBatchPriority, z as pipeAsync } from "../expansion-CZLNK6Pr.js";
|
|
2
|
+
export { base, baseAsync, createFuseBatchPriority, createSiftBatchPriority, dfsPriority, dfsPriorityAsync, dfsPriorityFn, dome, domeAsync, domeHighDegree, domeHighDegreeAsync, edge, edgeAsync, flux, fluxAsync, frontierBalanced, frontierBalancedAsync, fuse, fuseAsync, fuseBatchPriority, fuseWithBatchPriority, hae, haeAsync, kHop, lace, laceAsync, laceBatchPriority, laceWithBatchPriority, maze, mazeAsync, pipe, pipeAsync, randomPriority, randomPriorityAsync, randomWalk, reach, reachAsync, sage, sageAsync, sift, siftAsync, siftBatchPriority, siftWithBatchPriority, standardBfs, standardBfsAsync, tide, tideAsync, warp, warpAsync };
|
package/dist/expansion/lace.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { NodeData, EdgeData, ReadableGraph } from '../graph';
|
|
1
|
+
import { NodeData, EdgeData, ReadableGraph, NodeId } from '../graph';
|
|
2
2
|
import { AsyncReadableGraph } from '../graph/async-interfaces';
|
|
3
|
-
import { Seed, ExpansionResult, ExpansionConfig } from './types';
|
|
3
|
+
import { Seed, ExpansionResult, ExpansionConfig, BatchPriorityContext, BatchPriorityFunction } from './types';
|
|
4
4
|
import { AsyncExpansionConfig } from './base';
|
|
5
5
|
/**
|
|
6
6
|
* Configuration for LACE expansion.
|
|
@@ -35,4 +35,25 @@ export declare function lace<N extends NodeData, E extends EdgeData>(graph: Read
|
|
|
35
35
|
* @returns Promise resolving to the expansion result
|
|
36
36
|
*/
|
|
37
37
|
export declare function laceAsync<N extends NodeData, E extends EdgeData>(graph: AsyncReadableGraph<N, E>, seeds: readonly Seed[], config?: LACEConfig<N, E> & AsyncExpansionConfig<N, E>): Promise<ExpansionResult>;
|
|
38
|
+
/**
|
|
39
|
+
* Batch priority function for LACE expansion.
|
|
40
|
+
*
|
|
41
|
+
* Computes average MI between each candidate and all nodes visited by the
|
|
42
|
+
* same frontier in a single batch operation. More efficient than computing
|
|
43
|
+
* MI per-candidate when there are many candidates and visited nodes.
|
|
44
|
+
*
|
|
45
|
+
* @param candidates - Candidate node IDs to prioritise
|
|
46
|
+
* @param context - Batch priority context
|
|
47
|
+
* @returns Map of node ID to priority (lower = higher priority)
|
|
48
|
+
*/
|
|
49
|
+
export declare function laceBatchPriority<N extends NodeData, E extends EdgeData>(candidates: readonly NodeId[], context: BatchPriorityContext<N, E>): ReadonlyMap<NodeId, number>;
|
|
50
|
+
/**
|
|
51
|
+
* Create a LACE config with batch priority enabled.
|
|
52
|
+
*
|
|
53
|
+
* @param config - Base LACE configuration
|
|
54
|
+
* @returns Configuration with batchPriority set
|
|
55
|
+
*/
|
|
56
|
+
export declare function laceWithBatchPriority<N extends NodeData = NodeData, E extends EdgeData = EdgeData>(config?: LACEConfig<N, E>): LACEConfig<N, E> & {
|
|
57
|
+
batchPriority: BatchPriorityFunction<N, E>;
|
|
58
|
+
};
|
|
38
59
|
//# sourceMappingURL=lace.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lace.d.ts","sourceRoot":"","sources":["../../src/expansion/lace.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"lace.d.ts","sourceRoot":"","sources":["../../src/expansion/lace.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAC1E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,KAAK,EACX,IAAI,EACJ,eAAe,EACf,eAAe,EAEf,oBAAoB,EACpB,qBAAqB,EACrB,MAAM,SAAS,CAAC;AAEjB,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,QAAQ,CAAC;AASnD;;GAEG;AACH,MAAM,WAAW,UAAU,CAC1B,CAAC,SAAS,QAAQ,GAAG,QAAQ,EAC7B,CAAC,SAAS,QAAQ,GAAG,QAAQ,CAC5B,SAAQ,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC;IAC9B,mEAAmE;IACnE,QAAQ,CAAC,EAAE,CAAC,EAAE,CACb,KAAK,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,EAC1B,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,KACV,MAAM,CAAC;CACZ;AAkBD;;;;;;;;;;GAUG;AACH,wBAAgB,IAAI,CAAC,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAC1D,KAAK,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,EAC1B,KAAK,EAAE,SAAS,IAAI,EAAE,EACtB,MAAM,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,GACvB,eAAe,CAUjB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,SAAS,CAAC,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EACrE,KAAK,EAAE,kBAAkB,CAAC,CAAC,EAAE,CAAC,CAAC,EAC/B,KAAK,EAAE,SAAS,IAAI,EAAE,EACtB,MAAM,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,oBAAoB,CAAC,CAAC,EAAE,CAAC,CAAC,GACpD,OAAO,CAAC,eAAe,CAAC,CAO1B;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EACvE,UAAU,EAAE,SAAS,MAAM,EAAE,EAC7B,OAAO,EAAE,oBAAoB,CAAC,CAAC,EAAE,CAAC,CAAC,GACjC,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAmB7B;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACpC,CAAC,SAAS,QAAQ,GAAG,QAAQ,EAC7B,CAAC,SAAS,QAAQ,GAAG,QAAQ,EAE7B,MAAM,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,GACvB,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG;IAAE,aAAa,EAAE,qBAAqB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;CAAE,CAKnE"}
|
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
import { NodeId, NodeData, EdgeData, ReadableGraph } from '../graph';
|
|
2
|
-
import { PriorityContext, ExpansionPath } from './types';
|
|
2
|
+
import { PriorityContext, ExpansionPath, BatchPriorityContext } from './types';
|
|
3
|
+
/**
|
|
4
|
+
* Compute average MI between each candidate and a set of reference nodes.
|
|
5
|
+
*
|
|
6
|
+
* Uses batch intersection computation for efficiency. Returns a Map of
|
|
7
|
+
* candidate ID to average MI score.
|
|
8
|
+
*
|
|
9
|
+
* @param graph - Source graph
|
|
10
|
+
* @param candidates - Candidate node IDs to compute priorities for
|
|
11
|
+
* @param referenceNodes - Reference nodes to compute MI against
|
|
12
|
+
* @returns Map of candidate ID to average MI score
|
|
13
|
+
*/
|
|
14
|
+
export declare function batchAvgMI<N extends NodeData, E extends EdgeData>(graph: ReadableGraph<N, E>, candidates: readonly NodeId[], referenceNodes: ReadonlySet<NodeId>): ReadonlyMap<NodeId, number>;
|
|
3
15
|
/**
|
|
4
16
|
* Compute the average mutual information between a node and all visited
|
|
5
17
|
* nodes in the same frontier.
|
|
@@ -14,6 +26,13 @@ import { PriorityContext, ExpansionPath } from './types';
|
|
|
14
26
|
* @returns Average MI score, or 0 if no same-frontier visited nodes exist
|
|
15
27
|
*/
|
|
16
28
|
export declare function avgFrontierMI<N extends NodeData, E extends EdgeData>(graph: ReadableGraph<N, E>, nodeId: NodeId, context: PriorityContext<N, E>, mi: (graph: ReadableGraph<N, E>, source: string, target: string) => number): number;
|
|
29
|
+
/**
|
|
30
|
+
* Get nodes visited by the same frontier (for batch MI computation).
|
|
31
|
+
*
|
|
32
|
+
* @param context - Batch priority context
|
|
33
|
+
* @returns Set of node IDs visited by the same frontier
|
|
34
|
+
*/
|
|
35
|
+
export declare function getSameFrontierVisited<N extends NodeData, E extends EdgeData>(context: BatchPriorityContext<N, E>): Set<NodeId>;
|
|
17
36
|
/**
|
|
18
37
|
* Count the number of a node's neighbours that have been visited by
|
|
19
38
|
* frontiers other than the node's own frontier.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"priority-helpers.d.ts","sourceRoot":"","sources":["../../src/expansion/priority-helpers.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAC1E,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"priority-helpers.d.ts","sourceRoot":"","sources":["../../src/expansion/priority-helpers.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAC1E,OAAO,KAAK,EACX,eAAe,EACf,aAAa,EACb,oBAAoB,EACpB,MAAM,SAAS,CAAC;AAQjB;;;;;;;;;;GAUG;AACH,wBAAgB,UAAU,CAAC,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAChE,KAAK,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,EAC1B,UAAU,EAAE,SAAS,MAAM,EAAE,EAC7B,cAAc,EAAE,WAAW,CAAC,MAAM,CAAC,GACjC,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CA6F7B;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,aAAa,CAAC,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EACnE,KAAK,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,EAC1B,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,EAC9B,EAAE,EAAE,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,MAAM,GACxE,MAAM,CAcR;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAC5E,OAAO,EAAE,oBAAoB,CAAC,CAAC,EAAE,CAAC,CAAC,GACjC,GAAG,CAAC,MAAM,CAAC,CAQb;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,4BAA4B,CAC3C,CAAC,SAAS,QAAQ,EAClB,CAAC,SAAS,QAAQ,EAElB,KAAK,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,EAC1B,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,GAC5B,MAAM,CAYR;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CACnC,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EACnC,KAAK,EAAE,SAAS,aAAa,EAAE,EAC/B,SAAS,EAAE,MAAM,GACf,MAAM,CAUR"}
|
package/dist/expansion/sift.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { NodeData, EdgeData, ReadableGraph } from '../graph';
|
|
2
2
|
import { AsyncReadableGraph } from '../graph/async-interfaces';
|
|
3
|
-
import { Seed, ExpansionResult, ExpansionConfig } from './types';
|
|
3
|
+
import { Seed, ExpansionResult, ExpansionConfig, BatchPriorityFunction } from './types';
|
|
4
4
|
import { AsyncExpansionConfig } from './base';
|
|
5
5
|
/**
|
|
6
6
|
* Configuration for REACH expansion.
|
|
@@ -39,4 +39,27 @@ export declare function sift<N extends NodeData, E extends EdgeData>(graph: Read
|
|
|
39
39
|
* @returns Promise resolving to the expansion result
|
|
40
40
|
*/
|
|
41
41
|
export declare function siftAsync<N extends NodeData, E extends EdgeData>(graph: AsyncReadableGraph<N, E>, seeds: readonly Seed[], config?: REACHConfig<N, E> & AsyncExpansionConfig<N, E>): Promise<ExpansionResult>;
|
|
42
|
+
/**
|
|
43
|
+
* Create a batch priority function for SIFT with configurable threshold.
|
|
44
|
+
*
|
|
45
|
+
* Nodes with average MI above the threshold get high priority (low value).
|
|
46
|
+
* Nodes below the threshold are deferred with degree-based penalty.
|
|
47
|
+
*
|
|
48
|
+
* @param miThreshold - MI threshold for phase transition (default: 0.25)
|
|
49
|
+
* @returns Batch priority function
|
|
50
|
+
*/
|
|
51
|
+
export declare function createSiftBatchPriority<N extends NodeData, E extends EdgeData>(miThreshold?: number): BatchPriorityFunction<N, E>;
|
|
52
|
+
/**
|
|
53
|
+
* Default SIFT batch priority function with miThreshold = 0.25.
|
|
54
|
+
*/
|
|
55
|
+
export declare const siftBatchPriority: BatchPriorityFunction;
|
|
56
|
+
/**
|
|
57
|
+
* Create a SIFT config with batch priority enabled.
|
|
58
|
+
*
|
|
59
|
+
* @param config - Base SIFT configuration
|
|
60
|
+
* @returns Configuration with batchPriority set
|
|
61
|
+
*/
|
|
62
|
+
export declare function siftWithBatchPriority<N extends NodeData = NodeData, E extends EdgeData = EdgeData>(config?: REACHConfig<N, E>): REACHConfig<N, E> & {
|
|
63
|
+
batchPriority: BatchPriorityFunction<N, E>;
|
|
64
|
+
};
|
|
42
65
|
//# sourceMappingURL=sift.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sift.d.ts","sourceRoot":"","sources":["../../src/expansion/sift.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,aAAa,
|
|
1
|
+
{"version":3,"file":"sift.d.ts","sourceRoot":"","sources":["../../src/expansion/sift.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,aAAa,EAAU,MAAM,UAAU,CAAC;AAC1E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,KAAK,EACX,IAAI,EACJ,eAAe,EACf,eAAe,EAGf,qBAAqB,EACrB,MAAM,SAAS,CAAC;AAEjB,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,QAAQ,CAAC;AASnD;;GAEG;AACH,MAAM,WAAW,WAAW,CAC3B,CAAC,SAAS,QAAQ,GAAG,QAAQ,EAC7B,CAAC,SAAS,QAAQ,GAAG,QAAQ,CAC5B,SAAQ,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC;IAC9B,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,CAAC,EAAE,CACb,KAAK,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,EAC1B,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,KACV,MAAM,CAAC;IACZ,0DAA0D;IAC1D,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,yDAAyD;IACzD,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;CACjC;AAyBD;;;;;;;;;;GAUG;AACH,wBAAgB,IAAI,CAAC,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAC1D,KAAK,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,EAC1B,KAAK,EAAE,SAAS,IAAI,EAAE,EACtB,MAAM,CAAC,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,GACxB,eAAe,CAWjB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,SAAS,CAAC,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EACrE,KAAK,EAAE,kBAAkB,CAAC,CAAC,EAAE,CAAC,CAAC,EAC/B,KAAK,EAAE,SAAS,IAAI,EAAE,EACtB,MAAM,CAAC,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,oBAAoB,CAAC,CAAC,EAAE,CAAC,CAAC,GACrD,OAAO,CAAC,eAAe,CAAC,CAO1B;AAED;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CAAC,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAC7E,WAAW,SAAO,GAChB,qBAAqB,CAAC,CAAC,EAAE,CAAC,CAAC,CA+B7B;AAED;;GAEG;AACH,eAAO,MAAM,iBAAiB,EAAE,qBACF,CAAC;AAE/B;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACpC,CAAC,SAAS,QAAQ,GAAG,QAAQ,EAC7B,CAAC,SAAS,QAAQ,GAAG,QAAQ,EAE7B,MAAM,CAAC,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,GACxB,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG;IAAE,aAAa,EAAE,qBAAqB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;CAAE,CAKpE"}
|