@graphty/webgpu-graph-algorithms 0.0.0 → 0.2.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/README.md +344 -23
- package/dist/browser.d.ts +1 -0
- package/dist/browser.js +32 -0
- package/dist/browser.js.map +1 -0
- package/dist/chunks/context-E6iKaeuJ.js +3136 -0
- package/dist/chunks/context-E6iKaeuJ.js.map +1 -0
- package/dist/node.d.ts +1 -0
- package/dist/node.js +131 -0
- package/dist/node.js.map +1 -0
- package/dist/src/accelerator.d.ts +26 -0
- package/dist/src/accelerator.d.ts.map +1 -0
- package/dist/src/accelerator.js +101 -0
- package/dist/src/accelerator.js.map +1 -0
- package/dist/src/algorithms/degree.d.ts +35 -0
- package/dist/src/algorithms/degree.d.ts.map +1 -0
- package/dist/src/algorithms/degree.js +119 -0
- package/dist/src/algorithms/degree.js.map +1 -0
- package/dist/src/browser/index.d.ts +23 -0
- package/dist/src/browser/index.d.ts.map +1 -0
- package/dist/src/browser/index.js +48 -0
- package/dist/src/browser/index.js.map +1 -0
- package/dist/src/constants.d.ts +92 -0
- package/dist/src/constants.d.ts.map +1 -0
- package/dist/src/constants.js +92 -0
- package/dist/src/constants.js.map +1 -0
- package/dist/src/context.d.ts +84 -0
- package/dist/src/context.d.ts.map +1 -0
- package/dist/src/context.js +304 -0
- package/dist/src/context.js.map +1 -0
- package/dist/src/device/acquire.d.ts +57 -0
- package/dist/src/device/acquire.d.ts.map +1 -0
- package/dist/src/device/acquire.js +232 -0
- package/dist/src/device/acquire.js.map +1 -0
- package/dist/src/device/caps.d.ts +43 -0
- package/dist/src/device/caps.d.ts.map +1 -0
- package/dist/src/device/caps.js +104 -0
- package/dist/src/device/caps.js.map +1 -0
- package/dist/src/device/error-scope.d.ts +75 -0
- package/dist/src/device/error-scope.d.ts.map +1 -0
- package/dist/src/device/error-scope.js +152 -0
- package/dist/src/device/error-scope.js.map +1 -0
- package/dist/src/device/lost.d.ts +51 -0
- package/dist/src/device/lost.d.ts.map +1 -0
- package/dist/src/device/lost.js +130 -0
- package/dist/src/device/lost.js.map +1 -0
- package/dist/src/device/webgpu-constants.d.ts +31 -0
- package/dist/src/device/webgpu-constants.d.ts.map +1 -0
- package/dist/src/device/webgpu-constants.js +31 -0
- package/dist/src/device/webgpu-constants.js.map +1 -0
- package/dist/src/errors.d.ts +56 -0
- package/dist/src/errors.d.ts.map +1 -0
- package/dist/src/errors.js +57 -0
- package/dist/src/errors.js.map +1 -0
- package/dist/src/index.d.ts +29 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +27 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/kernel/batch.d.ts +116 -0
- package/dist/src/kernel/batch.d.ts.map +1 -0
- package/dist/src/kernel/batch.js +335 -0
- package/dist/src/kernel/batch.js.map +1 -0
- package/dist/src/kernel/dispatch.d.ts +59 -0
- package/dist/src/kernel/dispatch.d.ts.map +1 -0
- package/dist/src/kernel/dispatch.js +139 -0
- package/dist/src/kernel/dispatch.js.map +1 -0
- package/dist/src/kernel/kernel.d.ts +84 -0
- package/dist/src/kernel/kernel.d.ts.map +1 -0
- package/dist/src/kernel/kernel.js +239 -0
- package/dist/src/kernel/kernel.js.map +1 -0
- package/dist/src/kernel/pipeline-cache.d.ts +90 -0
- package/dist/src/kernel/pipeline-cache.d.ts.map +1 -0
- package/dist/src/kernel/pipeline-cache.js +251 -0
- package/dist/src/kernel/pipeline-cache.js.map +1 -0
- package/dist/src/kernel/prelude.d.ts +35 -0
- package/dist/src/kernel/prelude.d.ts.map +1 -0
- package/dist/src/kernel/prelude.js +211 -0
- package/dist/src/kernel/prelude.js.map +1 -0
- package/dist/src/kernel/profiler.d.ts +64 -0
- package/dist/src/kernel/profiler.d.ts.map +1 -0
- package/dist/src/kernel/profiler.js +120 -0
- package/dist/src/kernel/profiler.js.map +1 -0
- package/dist/src/kernel/struct-block.d.ts +122 -0
- package/dist/src/kernel/struct-block.d.ts.map +1 -0
- package/dist/src/kernel/struct-block.js +353 -0
- package/dist/src/kernel/struct-block.js.map +1 -0
- package/dist/src/kernel/uniform-ring.d.ts +70 -0
- package/dist/src/kernel/uniform-ring.d.ts.map +1 -0
- package/dist/src/kernel/uniform-ring.js +146 -0
- package/dist/src/kernel/uniform-ring.js.map +1 -0
- package/dist/src/kernel/wgsl.d.ts +88 -0
- package/dist/src/kernel/wgsl.d.ts.map +1 -0
- package/dist/src/kernel/wgsl.js +390 -0
- package/dist/src/kernel/wgsl.js.map +1 -0
- package/dist/src/kernels.d.ts +81 -0
- package/dist/src/kernels.d.ts.map +1 -0
- package/dist/src/kernels.js +417 -0
- package/dist/src/kernels.js.map +1 -0
- package/dist/src/layouts/force-simulation.d.ts +498 -0
- package/dist/src/layouts/force-simulation.d.ts.map +1 -0
- package/dist/src/layouts/force-simulation.js +1650 -0
- package/dist/src/layouts/force-simulation.js.map +1 -0
- package/dist/src/layouts/forceatlas2.d.ts +210 -0
- package/dist/src/layouts/forceatlas2.d.ts.map +1 -0
- package/dist/src/layouts/forceatlas2.js +759 -0
- package/dist/src/layouts/forceatlas2.js.map +1 -0
- package/dist/src/layouts/inputs.d.ts +40 -0
- package/dist/src/layouts/inputs.d.ts.map +1 -0
- package/dist/src/layouts/inputs.js +185 -0
- package/dist/src/layouts/inputs.js.map +1 -0
- package/dist/src/layouts/repulsion-exact.d.ts +85 -0
- package/dist/src/layouts/repulsion-exact.d.ts.map +1 -0
- package/dist/src/layouts/repulsion-exact.js +134 -0
- package/dist/src/layouts/repulsion-exact.js.map +1 -0
- package/dist/src/layouts/seed.d.ts +56 -0
- package/dist/src/layouts/seed.d.ts.map +1 -0
- package/dist/src/layouts/seed.js +173 -0
- package/dist/src/layouts/seed.js.map +1 -0
- package/dist/src/memory/buffer-pool.d.ts +73 -0
- package/dist/src/memory/buffer-pool.d.ts.map +1 -0
- package/dist/src/memory/buffer-pool.js +170 -0
- package/dist/src/memory/buffer-pool.js.map +1 -0
- package/dist/src/memory/lease.d.ts +53 -0
- package/dist/src/memory/lease.d.ts.map +1 -0
- package/dist/src/memory/lease.js +85 -0
- package/dist/src/memory/lease.js.map +1 -0
- package/dist/src/memory/readback.d.ts +143 -0
- package/dist/src/memory/readback.d.ts.map +1 -0
- package/dist/src/memory/readback.js +375 -0
- package/dist/src/memory/readback.js.map +1 -0
- package/dist/src/memory/residency.d.ts +83 -0
- package/dist/src/memory/residency.d.ts.map +1 -0
- package/dist/src/memory/residency.js +573 -0
- package/dist/src/memory/residency.js.map +1 -0
- package/dist/src/memory/upload-plan.d.ts +101 -0
- package/dist/src/memory/upload-plan.d.ts.map +1 -0
- package/dist/src/memory/upload-plan.js +265 -0
- package/dist/src/memory/upload-plan.js.map +1 -0
- package/dist/src/node/index.d.ts +64 -0
- package/dist/src/node/index.d.ts.map +1 -0
- package/dist/src/node/index.js +183 -0
- package/dist/src/node/index.js.map +1 -0
- package/dist/src/primitives/reduce.d.ts +57 -0
- package/dist/src/primitives/reduce.d.ts.map +1 -0
- package/dist/src/primitives/reduce.js +161 -0
- package/dist/src/primitives/reduce.js.map +1 -0
- package/dist/src/primitives/segmented-reduce.d.ts +38 -0
- package/dist/src/primitives/segmented-reduce.d.ts.map +1 -0
- package/dist/src/primitives/segmented-reduce.js +211 -0
- package/dist/src/primitives/segmented-reduce.js.map +1 -0
- package/dist/src/types/accelerator.d.ts +209 -0
- package/dist/src/types/accelerator.d.ts.map +1 -0
- package/dist/src/types/accelerator.js +8 -0
- package/dist/src/types/accelerator.js.map +1 -0
- package/dist/src/types/context.d.ts +114 -0
- package/dist/src/types/context.d.ts.map +1 -0
- package/dist/src/types/context.js +7 -0
- package/dist/src/types/context.js.map +1 -0
- package/dist/src/types/layout.d.ts +95 -0
- package/dist/src/types/layout.d.ts.map +1 -0
- package/dist/src/types/layout.js +6 -0
- package/dist/src/types/layout.js.map +1 -0
- package/dist/src/types/memory.d.ts +22 -0
- package/dist/src/types/memory.d.ts.map +1 -0
- package/dist/src/types/memory.js +7 -0
- package/dist/src/types/memory.js.map +1 -0
- package/dist/src/types/options.d.ts +78 -0
- package/dist/src/types/options.d.ts.map +1 -0
- package/dist/src/types/options.js +7 -0
- package/dist/src/types/options.js.map +1 -0
- package/dist/src/types/run.d.ts +13 -0
- package/dist/src/types/run.d.ts.map +1 -0
- package/dist/src/types/run.js +6 -0
- package/dist/src/types/run.js.map +1 -0
- package/dist/src/wgsl/degree.wgsl.d.ts +10 -0
- package/dist/src/wgsl/degree.wgsl.d.ts.map +1 -0
- package/dist/src/wgsl/degree.wgsl.js +25 -0
- package/dist/src/wgsl/degree.wgsl.js.map +1 -0
- package/dist/src/wgsl/fa2-attraction.wgsl.d.ts +12 -0
- package/dist/src/wgsl/fa2-attraction.wgsl.d.ts.map +1 -0
- package/dist/src/wgsl/fa2-attraction.wgsl.js +37 -0
- package/dist/src/wgsl/fa2-attraction.wgsl.js.map +1 -0
- package/dist/src/wgsl/fa2-integrate.wgsl.d.ts +13 -0
- package/dist/src/wgsl/fa2-integrate.wgsl.d.ts.map +1 -0
- package/dist/src/wgsl/fa2-integrate.wgsl.js +69 -0
- package/dist/src/wgsl/fa2-integrate.wgsl.js.map +1 -0
- package/dist/src/wgsl/fa2-repulsion-exact.wgsl.d.ts +12 -0
- package/dist/src/wgsl/fa2-repulsion-exact.wgsl.d.ts.map +1 -0
- package/dist/src/wgsl/fa2-repulsion-exact.wgsl.js +79 -0
- package/dist/src/wgsl/fa2-repulsion-exact.wgsl.js.map +1 -0
- package/dist/src/wgsl/fa2-speed-finalize.wgsl.d.ts +15 -0
- package/dist/src/wgsl/fa2-speed-finalize.wgsl.d.ts.map +1 -0
- package/dist/src/wgsl/fa2-speed-finalize.wgsl.js +54 -0
- package/dist/src/wgsl/fa2-speed-finalize.wgsl.js.map +1 -0
- package/dist/src/wgsl/fa2-stats-finalize.wgsl.d.ts +14 -0
- package/dist/src/wgsl/fa2-stats-finalize.wgsl.d.ts.map +1 -0
- package/dist/src/wgsl/fa2-stats-finalize.wgsl.js +57 -0
- package/dist/src/wgsl/fa2-stats-finalize.wgsl.js.map +1 -0
- package/dist/src/wgsl/fa2-to-scene.wgsl.d.ts +11 -0
- package/dist/src/wgsl/fa2-to-scene.wgsl.d.ts.map +1 -0
- package/dist/src/wgsl/fa2-to-scene.wgsl.js +19 -0
- package/dist/src/wgsl/fa2-to-scene.wgsl.js.map +1 -0
- package/dist/src/wgsl/fill.wgsl.d.ts +7 -0
- package/dist/src/wgsl/fill.wgsl.d.ts.map +1 -0
- package/dist/src/wgsl/fill.wgsl.js +14 -0
- package/dist/src/wgsl/fill.wgsl.js.map +1 -0
- package/dist/src/wgsl/reduce.wgsl.d.ts +10 -0
- package/dist/src/wgsl/reduce.wgsl.d.ts.map +1 -0
- package/dist/src/wgsl/reduce.wgsl.js +63 -0
- package/dist/src/wgsl/reduce.wgsl.js.map +1 -0
- package/dist/src/wgsl/segmented-reduce.wgsl.d.ts +13 -0
- package/dist/src/wgsl/segmented-reduce.wgsl.d.ts.map +1 -0
- package/dist/src/wgsl/segmented-reduce.wgsl.js +35 -0
- package/dist/src/wgsl/segmented-reduce.wgsl.js.map +1 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -0
- package/dist/webgpu-graph-algorithms.d.ts +1 -0
- package/dist/webgpu-graph-algorithms.js +4454 -0
- package/dist/webgpu-graph-algorithms.js.map +1 -0
- package/package.json +108 -17
- package/src/accelerator.ts +117 -0
- package/src/algorithms/degree.ts +142 -0
- package/src/browser/index.ts +57 -0
- package/src/constants.ts +116 -0
- package/src/context.ts +399 -0
- package/src/device/acquire.ts +256 -0
- package/src/device/caps.ts +122 -0
- package/src/device/error-scope.ts +171 -0
- package/src/device/lost.ts +142 -0
- package/src/device/webgpu-constants.ts +44 -0
- package/src/errors.ts +94 -0
- package/src/index.ts +102 -0
- package/src/kernel/batch.ts +427 -0
- package/src/kernel/dispatch.ts +162 -0
- package/src/kernel/kernel.ts +311 -0
- package/src/kernel/pipeline-cache.ts +288 -0
- package/src/kernel/prelude.ts +229 -0
- package/src/kernel/profiler.ts +148 -0
- package/src/kernel/struct-block.ts +439 -0
- package/src/kernel/uniform-ring.ts +184 -0
- package/src/kernel/wgsl.ts +490 -0
- package/src/kernels.ts +511 -0
- package/src/layouts/force-simulation.ts +2111 -0
- package/src/layouts/forceatlas2.ts +942 -0
- package/src/layouts/inputs.ts +252 -0
- package/src/layouts/repulsion-exact.ts +183 -0
- package/src/layouts/seed.ts +198 -0
- package/src/memory/buffer-pool.ts +204 -0
- package/src/memory/lease.ts +93 -0
- package/src/memory/readback.ts +429 -0
- package/src/memory/residency.ts +753 -0
- package/src/memory/upload-plan.ts +350 -0
- package/src/node/index.ts +230 -0
- package/src/primitives/reduce.ts +233 -0
- package/src/primitives/segmented-reduce.ts +270 -0
- package/src/types/accelerator.ts +236 -0
- package/src/types/context.ts +135 -0
- package/src/types/layout.ts +103 -0
- package/src/types/memory.ts +23 -0
- package/src/types/options.ts +84 -0
- package/src/types/run.ts +13 -0
- package/src/wgsl/degree.wgsl.ts +24 -0
- package/src/wgsl/fa2-attraction.wgsl.ts +37 -0
- package/src/wgsl/fa2-integrate.wgsl.ts +69 -0
- package/src/wgsl/fa2-repulsion-exact.wgsl.ts +78 -0
- package/src/wgsl/fa2-speed-finalize.wgsl.ts +53 -0
- package/src/wgsl/fa2-stats-finalize.wgsl.ts +57 -0
- package/src/wgsl/fa2-to-scene.wgsl.ts +19 -0
- package/src/wgsl/fill.wgsl.ts +13 -0
- package/src/wgsl/reduce.wgsl.ts +62 -0
- package/src/wgsl/segmented-reduce.wgsl.ts +35 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"forceatlas2.js","sourceRoot":"","sources":["../../../src/layouts/forceatlas2.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* nodeMass and weight resolution from graph-format primitives only (spec 7.14, 7.5; D28, Q-30): the role-"mass"
|
|
3
|
+
* node column first, then outDegree() + 1; weights from the arc array, from a named edge column expanded to arcs
|
|
4
|
+
* with expandEdges, or none. The Record form of nodeMass is rejected with the hint of spec 7.14 (graphty-element
|
|
5
|
+
* writes its nodeMass config as the role column once at engine creation, so both simulations find it the same way
|
|
6
|
+
* and this package parses no ids).
|
|
7
|
+
*/
|
|
8
|
+
import { type Column, type F32, type GraphSnapshot, type NodeId } from "@graphty/graph-format";
|
|
9
|
+
/**
|
|
10
|
+
* nodeMass resolution by ROLE (spec 7.14): null -> the role-"mass" node column when present (any numeric dtype
|
|
11
|
+
* through gpuView, converted to a fresh F32 when not f32), else outDegree()[i] + 1; an F32 of length n -> as is;
|
|
12
|
+
* a column NAME -> nodes.get(name) (numeric); a Record -> E_UNSUPPORTED with the spec's message. Always returns n
|
|
13
|
+
* values, every one finite and > 0.
|
|
14
|
+
* @param s - the snapshot
|
|
15
|
+
* @param spec - the ForceAtlas2Options.nodeMass value
|
|
16
|
+
* @returns nodeCount masses (the caller's array when an F32 was given)
|
|
17
|
+
*/
|
|
18
|
+
export declare function resolveNodeMass(s: GraphSnapshot, spec: F32 | string | Readonly<Record<NodeId, number>> | null | undefined): F32;
|
|
19
|
+
/** What resolveWeights found. */
|
|
20
|
+
export interface ResolvedWeights {
|
|
21
|
+
readonly data: F32 | null;
|
|
22
|
+
readonly source: "arcs" | "column" | "none";
|
|
23
|
+
readonly column: Column | null;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Weight resolution (spec 7.5, 7.14): true -> { data: s.weights, source: "arcs" } (data null when unweighted ->
|
|
27
|
+
* ones); a string -> a name `s.edges` does not hold is E_INVALID_ARGUMENT (spec 7.14's nodeMass rule applied to
|
|
28
|
+
* weight too), else `column = s.edges.get(name)`, then by `column.dtype`: f32 / f64 / u32 / i32 ->
|
|
29
|
+
* expandEdges(s, s.edges.gpuView(name)) (f64 arrives as gpuView's cached f32 copy; u32 / i32 are converted to a
|
|
30
|
+
* fresh F32; `Column.data` is NOT used because it is U8 for u8 / bool and absent for string / list / json), string /
|
|
31
|
+
* list / json -> the gpuView E_GPU_INELIGIBLE pass-through, u8 / bool / dict -> E_INVALID_ARGUMENT (gpuView returns
|
|
32
|
+
* packed words, not per-edge values); source "column", `column` kept for the version check; false / null /
|
|
33
|
+
* undefined -> none. A named column must have one component (PLAN DECISION 15); the weight values are never
|
|
34
|
+
* inspected.
|
|
35
|
+
* @param s - the snapshot
|
|
36
|
+
* @param spec - the ForceAtlas2Options.weight value
|
|
37
|
+
* @returns the resolved weights
|
|
38
|
+
*/
|
|
39
|
+
export declare function resolveWeights(s: GraphSnapshot, spec: boolean | string | null | undefined): ResolvedWeights;
|
|
40
|
+
//# sourceMappingURL=inputs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inputs.d.ts","sourceRoot":"","sources":["../../../src/layouts/inputs.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,KAAK,MAAM,EAAe,KAAK,GAAG,EAAE,KAAK,aAAa,EAAE,KAAK,MAAM,EAAE,MAAM,uBAAuB,CAAC;AA4G5G;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAC3B,CAAC,EAAE,aAAa,EAChB,IAAI,EAAE,GAAG,GAAG,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,IAAI,GAAG,SAAS,GACzE,GAAG,CA4CL;AAED,iCAAiC;AACjC,MAAM,WAAW,eAAe;IAC5B,QAAQ,CAAC,IAAI,EAAE,GAAG,GAAG,IAAI,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC5C,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,eAAe,CAwD3G"}
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* nodeMass and weight resolution from graph-format primitives only (spec 7.14, 7.5; D28, Q-30): the role-"mass"
|
|
3
|
+
* node column first, then outDegree() + 1; weights from the arc array, from a named edge column expanded to arcs
|
|
4
|
+
* with expandEdges, or none. The Record form of nodeMass is rejected with the hint of spec 7.14 (graphty-element
|
|
5
|
+
* writes its nodeMass config as the role column once at engine creation, so both simulations find it the same way
|
|
6
|
+
* and this package parses no ids).
|
|
7
|
+
*/
|
|
8
|
+
import { expandEdges } from "@graphty/graph-format";
|
|
9
|
+
import { WebGpuGraphError } from "../errors.js";
|
|
10
|
+
/** The message of spec 7.14 for the Record form of nodeMass. */
|
|
11
|
+
const NODE_MASS_HINT = "write a role 'mass' node column (nodes.set(name, vec, { role: 'mass', replaceRole: true })) or pass a " +
|
|
12
|
+
"Float32Array; @graphty/layout's resolveNodeVector does this on the CPU path";
|
|
13
|
+
/**
|
|
14
|
+
* An E_INVALID_ARGUMENT with the documented details shape.
|
|
15
|
+
* @param argument - the option name
|
|
16
|
+
* @param value - the offending value
|
|
17
|
+
* @param expected - what was expected
|
|
18
|
+
* @param message - the message
|
|
19
|
+
* @returns the error
|
|
20
|
+
*/
|
|
21
|
+
function invalid(argument, value, expected, message) {
|
|
22
|
+
return new WebGpuGraphError("E_INVALID_ARGUMENT", message, { argument, value, expected });
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Asserts every mass is finite and > 0 (spec 7.14: a mass of 0 would divide the distributed action by zero).
|
|
26
|
+
* @param mass - the masses
|
|
27
|
+
* @param source - what the masses came from, for the message
|
|
28
|
+
*/
|
|
29
|
+
function checkMass(mass, source) {
|
|
30
|
+
for (let i = 0; i < mass.length; i++) {
|
|
31
|
+
const v = mass[i];
|
|
32
|
+
if (!Number.isFinite(v) || v <= 0) {
|
|
33
|
+
throw new WebGpuGraphError("E_INVALID_ARGUMENT", `${source}: mass[${i}] = ${v} is not a finite number > 0`, {
|
|
34
|
+
argument: "nodeMass",
|
|
35
|
+
value: v,
|
|
36
|
+
index: i,
|
|
37
|
+
expected: "finite masses > 0",
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* outDegree()[i] + 1 for every node (spec 7.2 "Mass" row; one O(n) loop over the cached view).
|
|
44
|
+
* @param s - the snapshot
|
|
45
|
+
* @returns a fresh F32 of nodeCount masses
|
|
46
|
+
*/
|
|
47
|
+
function degreePlusOne(s) {
|
|
48
|
+
const n = s.nodeCount;
|
|
49
|
+
const degree = s.outDegree();
|
|
50
|
+
const out = new Float32Array(n);
|
|
51
|
+
for (let i = 0; i < n; i++) {
|
|
52
|
+
out[i] = degree[i] + 1;
|
|
53
|
+
}
|
|
54
|
+
return out;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* The masses of a node column: f32 as is, f64 / u32 / i32 through gpuView (f64 = the cached f32 copy; u32 / i32
|
|
58
|
+
* converted to a fresh F32), u8 through column.data; every other dtype is E_INVALID_ARGUMENT (PLAN DECISION 14).
|
|
59
|
+
* @param s - the snapshot (the column belongs to s.nodes)
|
|
60
|
+
* @param column - the node column
|
|
61
|
+
* @returns nodeCount masses
|
|
62
|
+
*/
|
|
63
|
+
function massFromColumn(s, column) {
|
|
64
|
+
const { name } = column.meta;
|
|
65
|
+
if (column.meta.components !== 1) {
|
|
66
|
+
throw invalid("nodeMass", name, "a one-component numeric node column", `node column "${name}" has ${column.meta.components} components; a mass column has one`);
|
|
67
|
+
}
|
|
68
|
+
let values;
|
|
69
|
+
switch (column.dtype) {
|
|
70
|
+
case "f32":
|
|
71
|
+
case "f64": {
|
|
72
|
+
const view = s.nodes.gpuView(name);
|
|
73
|
+
const out = view instanceof Float32Array ? view : new Float32Array(view);
|
|
74
|
+
checkMass(out, `node column "${name}"`);
|
|
75
|
+
return out;
|
|
76
|
+
}
|
|
77
|
+
case "u32":
|
|
78
|
+
case "i32":
|
|
79
|
+
values = s.nodes.gpuView(name);
|
|
80
|
+
break;
|
|
81
|
+
case "u8":
|
|
82
|
+
values = column.data;
|
|
83
|
+
break;
|
|
84
|
+
default:
|
|
85
|
+
throw invalid("nodeMass", name, "a numeric node column (f32, f64, u32, i32, u8)", `node column "${name}" is ${column.dtype}, not numeric`);
|
|
86
|
+
}
|
|
87
|
+
const out = new Float32Array(s.nodeCount);
|
|
88
|
+
for (let i = 0; i < out.length; i++) {
|
|
89
|
+
out[i] = values[i];
|
|
90
|
+
}
|
|
91
|
+
checkMass(out, `node column "${name}"`);
|
|
92
|
+
return out;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* nodeMass resolution by ROLE (spec 7.14): null -> the role-"mass" node column when present (any numeric dtype
|
|
96
|
+
* through gpuView, converted to a fresh F32 when not f32), else outDegree()[i] + 1; an F32 of length n -> as is;
|
|
97
|
+
* a column NAME -> nodes.get(name) (numeric); a Record -> E_UNSUPPORTED with the spec's message. Always returns n
|
|
98
|
+
* values, every one finite and > 0.
|
|
99
|
+
* @param s - the snapshot
|
|
100
|
+
* @param spec - the ForceAtlas2Options.nodeMass value
|
|
101
|
+
* @returns nodeCount masses (the caller's array when an F32 was given)
|
|
102
|
+
*/
|
|
103
|
+
export function resolveNodeMass(s, spec) {
|
|
104
|
+
const n = s.nodeCount;
|
|
105
|
+
if (spec === null || spec === undefined) {
|
|
106
|
+
const column = s.nodes.byRole("mass");
|
|
107
|
+
if (column === null) {
|
|
108
|
+
return degreePlusOne(s);
|
|
109
|
+
}
|
|
110
|
+
return massFromColumn(s, column);
|
|
111
|
+
}
|
|
112
|
+
if (spec instanceof Float32Array) {
|
|
113
|
+
if (spec.length !== n) {
|
|
114
|
+
throw invalid("nodeMass", spec.length, `${n} values`, `nodeMass has ${spec.length} values, expected ${n}`);
|
|
115
|
+
}
|
|
116
|
+
checkMass(spec, "nodeMass");
|
|
117
|
+
return spec;
|
|
118
|
+
}
|
|
119
|
+
if (typeof spec === "string") {
|
|
120
|
+
const column = s.nodes.get(spec);
|
|
121
|
+
if (column === null) {
|
|
122
|
+
throw invalid("nodeMass", spec, "an existing numeric node column", `nodeMass names node column "${spec}", which the snapshot does not hold`);
|
|
123
|
+
}
|
|
124
|
+
return massFromColumn(s, column);
|
|
125
|
+
}
|
|
126
|
+
if (ArrayBuffer.isView(spec)) {
|
|
127
|
+
throw invalid("nodeMass", "typed array", "a Float32Array", "nodeMass must be a Float32Array, a column name or null");
|
|
128
|
+
}
|
|
129
|
+
throw new WebGpuGraphError("E_UNSUPPORTED", `nodeMass as a Record is not supported on the GPU path: ${NODE_MASS_HINT}`, {
|
|
130
|
+
option: "nodeMass",
|
|
131
|
+
hint: NODE_MASS_HINT,
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Weight resolution (spec 7.5, 7.14): true -> { data: s.weights, source: "arcs" } (data null when unweighted ->
|
|
136
|
+
* ones); a string -> a name `s.edges` does not hold is E_INVALID_ARGUMENT (spec 7.14's nodeMass rule applied to
|
|
137
|
+
* weight too), else `column = s.edges.get(name)`, then by `column.dtype`: f32 / f64 / u32 / i32 ->
|
|
138
|
+
* expandEdges(s, s.edges.gpuView(name)) (f64 arrives as gpuView's cached f32 copy; u32 / i32 are converted to a
|
|
139
|
+
* fresh F32; `Column.data` is NOT used because it is U8 for u8 / bool and absent for string / list / json), string /
|
|
140
|
+
* list / json -> the gpuView E_GPU_INELIGIBLE pass-through, u8 / bool / dict -> E_INVALID_ARGUMENT (gpuView returns
|
|
141
|
+
* packed words, not per-edge values); source "column", `column` kept for the version check; false / null /
|
|
142
|
+
* undefined -> none. A named column must have one component (PLAN DECISION 15); the weight values are never
|
|
143
|
+
* inspected.
|
|
144
|
+
* @param s - the snapshot
|
|
145
|
+
* @param spec - the ForceAtlas2Options.weight value
|
|
146
|
+
* @returns the resolved weights
|
|
147
|
+
*/
|
|
148
|
+
export function resolveWeights(s, spec) {
|
|
149
|
+
if (spec === true) {
|
|
150
|
+
return { data: s.weights, source: "arcs", column: null };
|
|
151
|
+
}
|
|
152
|
+
if (spec === false || spec === null || spec === undefined) {
|
|
153
|
+
return { data: null, source: "none", column: null };
|
|
154
|
+
}
|
|
155
|
+
if (typeof spec !== "string") {
|
|
156
|
+
throw invalid("weight", spec, "true, false, null or an edge column name", "weight must be true, false, null or an edge column name");
|
|
157
|
+
}
|
|
158
|
+
const column = s.edges.get(spec);
|
|
159
|
+
if (column === null) {
|
|
160
|
+
throw invalid("weight", spec, "an existing numeric edge column", `weight names edge column "${spec}", which the snapshot does not hold`);
|
|
161
|
+
}
|
|
162
|
+
if (column.meta.components !== 1) {
|
|
163
|
+
throw invalid("weight", spec, "a one-component numeric edge column", `edge column "${spec}" has ${column.meta.components} components; a weight column has one`);
|
|
164
|
+
}
|
|
165
|
+
switch (column.dtype) {
|
|
166
|
+
case "f32":
|
|
167
|
+
case "f64":
|
|
168
|
+
case "u32":
|
|
169
|
+
case "i32": {
|
|
170
|
+
const view = s.edges.gpuView(spec);
|
|
171
|
+
const expanded = expandEdges(s, view);
|
|
172
|
+
const data = expanded instanceof Float32Array ? expanded : new Float32Array(expanded);
|
|
173
|
+
return { data, source: "column", column };
|
|
174
|
+
}
|
|
175
|
+
case "string":
|
|
176
|
+
case "list":
|
|
177
|
+
case "json":
|
|
178
|
+
// gpuView throws the GraphFormatError E_GPU_INELIGIBLE, which passes through unchanged (D12)
|
|
179
|
+
s.edges.gpuView(spec);
|
|
180
|
+
throw invalid("weight", spec, "a numeric edge column", `edge column "${spec}" is ${column.dtype}`);
|
|
181
|
+
default:
|
|
182
|
+
throw invalid("weight", spec, "an f32 / f64 / u32 / i32 edge column", `edge column "${spec}" is ${column.dtype}: its gpuView is packed words, not per-edge values`);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
//# sourceMappingURL=inputs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inputs.js","sourceRoot":"","sources":["../../../src/layouts/inputs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The exact-tier repulsion stage of ForceAtlas2 (spec 7.6, 7.9, 7.10; contract 3.13): K3, the tiled all-pairs
|
|
3
|
+
* repulsion with the gravity term and the swing / traction epilogue, followed by K4, the one-workgroup speed finalize
|
|
4
|
+
* that folds the per-workgroup partials and runs estimateFactor on the device (D15). P1 ships the stage driven over a
|
|
5
|
+
* pass the caller opens (the tests); P3-T2 records it from ForceAtlas2Model.recordIteration without changing these
|
|
6
|
+
* declarations. Both kernels come from the registry (src/kernels.ts) through the pipeline cache, so a distinct
|
|
7
|
+
* override set is a distinct pipeline and the subgroup twin is selected by the device's features (spec 5.1, D16).
|
|
8
|
+
*/
|
|
9
|
+
import { type PipelineCache } from "../kernel/pipeline-cache.js";
|
|
10
|
+
import { type WgslModuleSpec } from "../kernel/wgsl.js";
|
|
11
|
+
import { type PlanCaps } from "../types/context.js";
|
|
12
|
+
import { type Binding } from "../types/memory.js";
|
|
13
|
+
/** The buffers the exact-tier repulsion stage binds (all in layout units; spec 7.3). */
|
|
14
|
+
export interface RepulsionExactResources {
|
|
15
|
+
readonly pos: Binding;
|
|
16
|
+
readonly state: Binding;
|
|
17
|
+
readonly trace: Binding;
|
|
18
|
+
readonly force: Binding;
|
|
19
|
+
readonly oldForce: Binding;
|
|
20
|
+
readonly fixedMask: Binding;
|
|
21
|
+
readonly partials: Binding;
|
|
22
|
+
readonly params: Binding;
|
|
23
|
+
}
|
|
24
|
+
/** The overrides K3 / K4 compile with. */
|
|
25
|
+
export interface RepulsionExactOverrides {
|
|
26
|
+
readonly SWING_MODE: 0 | 1;
|
|
27
|
+
readonly STRONG_GRAVITY: boolean;
|
|
28
|
+
readonly GRAVITY_CENTER: 0 | 1;
|
|
29
|
+
}
|
|
30
|
+
/** K3 (tiled all-pairs repulsion + gravity + the swing / traction epilogue) followed by K4 (the one-workgroup speed finalize) (spec 7.6, 7.10). */
|
|
31
|
+
export declare class RepulsionExact {
|
|
32
|
+
/** The overrides both kernels were compiled with (a frozen copy of the argument of create()). */
|
|
33
|
+
readonly overrides: RepulsionExactOverrides;
|
|
34
|
+
private readonly caps;
|
|
35
|
+
private readonly repulsion;
|
|
36
|
+
private readonly speedFinalize;
|
|
37
|
+
/** Exactly one workgroup of K4 (spec 7.4: "1 workgroup"). */
|
|
38
|
+
private readonly finalizePlan;
|
|
39
|
+
private boundRepulsion;
|
|
40
|
+
private boundSpeedFinalize;
|
|
41
|
+
/**
|
|
42
|
+
* Holds the two compiled kernels; create() is the only caller.
|
|
43
|
+
* @param repulsion - the K3 kernel
|
|
44
|
+
* @param speedFinalize - the K4 kernel
|
|
45
|
+
* @param caps - the device caps the dispatch planner reads
|
|
46
|
+
* @param overrides - the override set both kernels were compiled with
|
|
47
|
+
*/
|
|
48
|
+
private constructor();
|
|
49
|
+
/**
|
|
50
|
+
* Compiles both kernels through the cache (the twin is selected by caps.features).
|
|
51
|
+
* @param pipelines - the context's pipeline cache
|
|
52
|
+
* @param caps - the device caps the dispatch planner reads
|
|
53
|
+
* @param overrides - the SWING_MODE / STRONG_GRAVITY / GRAVITY_CENTER set of this stage
|
|
54
|
+
* @returns the stage, ready for bind()
|
|
55
|
+
*/
|
|
56
|
+
static create(pipelines: PipelineCache, caps: PlanCaps, overrides: RepulsionExactOverrides): Promise<RepulsionExact>;
|
|
57
|
+
/**
|
|
58
|
+
* The two specs (for warm() and the compile matrix).
|
|
59
|
+
* @param overrides - the override set of the stage
|
|
60
|
+
* @returns the K3 spec then the K4 spec
|
|
61
|
+
*/
|
|
62
|
+
static specs(overrides: RepulsionExactOverrides): readonly [WgslModuleSpec, WgslModuleSpec];
|
|
63
|
+
/**
|
|
64
|
+
* Creates the bind groups once per load(): K3 takes pos, state (S), force, oldForce, fixedMask, partials and the
|
|
65
|
+
* params slot; K4 takes partials, state (S), trace (T) and the params slot (the 3.10.1 binding names). The state
|
|
66
|
+
* header and the trace region are two disjoint ranges of one buffer, which Kernel.bind() accepts (no writable alias).
|
|
67
|
+
* @param resources - the buffers of spec 7.3
|
|
68
|
+
*/
|
|
69
|
+
bind(resources: RepulsionExactResources): void;
|
|
70
|
+
/**
|
|
71
|
+
* Records K3 (plan1d(n)) then K4 (1 workgroup) with the params slot's dynamic offset.
|
|
72
|
+
* @param pass - the open compute pass of the batch
|
|
73
|
+
* @param n - the node count (rows [0, n) of pos / force)
|
|
74
|
+
* @param paramsOffset - the dynamic offset of this iteration's Fa2Params slot in the uniform ring
|
|
75
|
+
*/
|
|
76
|
+
record(pass: GPUComputePassEncoder, n: number, paramsOffset: number): void;
|
|
77
|
+
/**
|
|
78
|
+
* The bound kernel of a method, or E_NOT_LOADED when bind() has not run.
|
|
79
|
+
* @param bound - the cached BoundKernel, null before bind()
|
|
80
|
+
* @param method - the caller's name for the message
|
|
81
|
+
* @returns the bound kernel
|
|
82
|
+
*/
|
|
83
|
+
private bound;
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=repulsion-exact.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repulsion-exact.d.ts","sourceRoot":"","sources":["../../../src/layouts/repulsion-exact.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAElD,wFAAwF;AACxF,MAAM,WAAW,uBAAuB;IACpC,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;CAC5B;AAED,0CAA0C;AAC1C,MAAM,WAAW,uBAAuB;IACpC,QAAQ,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC,CAAC;IAC3B,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,cAAc,EAAE,CAAC,GAAG,CAAC,CAAC;CAClC;AAED,mJAAmJ;AACnJ,qBAAa,cAAc;IACvB,iGAAiG;IACjG,QAAQ,CAAC,SAAS,EAAE,uBAAuB,CAAC;IAE5C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAW;IAChC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,6DAA6D;IAC7D,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAC5C,OAAO,CAAC,cAAc,CAA4B;IAClD,OAAO,CAAC,kBAAkB,CAA4B;IAEtD;;;;;;OAMG;IACH,OAAO;IAYP;;;;;;OAMG;WACU,MAAM,CACf,SAAS,EAAE,aAAa,EACxB,IAAI,EAAE,QAAQ,EACd,SAAS,EAAE,uBAAuB,GACnC,OAAO,CAAC,cAAc,CAAC;IAS1B;;;;OAIG;IACH,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,uBAAuB,GAAG,SAAS,CAAC,cAAc,EAAE,cAAc,CAAC;IAW3F;;;;;OAKG;IACH,IAAI,CAAC,SAAS,EAAE,uBAAuB,GAAG,IAAI;IAkB9C;;;;;OAKG;IACH,MAAM,CAAC,IAAI,EAAE,qBAAqB,EAAE,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI;IA6B1E;;;;;OAKG;IACH,OAAO,CAAC,KAAK;CAYhB"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The exact-tier repulsion stage of ForceAtlas2 (spec 7.6, 7.9, 7.10; contract 3.13): K3, the tiled all-pairs
|
|
3
|
+
* repulsion with the gravity term and the swing / traction epilogue, followed by K4, the one-workgroup speed finalize
|
|
4
|
+
* that folds the per-workgroup partials and runs estimateFactor on the device (D15). P1 ships the stage driven over a
|
|
5
|
+
* pass the caller opens (the tests); P3-T2 records it from ForceAtlas2Model.recordIteration without changing these
|
|
6
|
+
* declarations. Both kernels come from the registry (src/kernels.ts) through the pipeline cache, so a distinct
|
|
7
|
+
* override set is a distinct pipeline and the subgroup twin is selected by the device's features (spec 5.1, D16).
|
|
8
|
+
*/
|
|
9
|
+
import { WebGpuGraphError } from "../errors.js";
|
|
10
|
+
import { plan1d } from "../kernel/dispatch.js";
|
|
11
|
+
import { kernelSpec } from "../kernels.js";
|
|
12
|
+
/** K3 (tiled all-pairs repulsion + gravity + the swing / traction epilogue) followed by K4 (the one-workgroup speed finalize) (spec 7.6, 7.10). */
|
|
13
|
+
export class RepulsionExact {
|
|
14
|
+
/**
|
|
15
|
+
* Holds the two compiled kernels; create() is the only caller.
|
|
16
|
+
* @param repulsion - the K3 kernel
|
|
17
|
+
* @param speedFinalize - the K4 kernel
|
|
18
|
+
* @param caps - the device caps the dispatch planner reads
|
|
19
|
+
* @param overrides - the override set both kernels were compiled with
|
|
20
|
+
*/
|
|
21
|
+
constructor(repulsion, speedFinalize, caps, overrides) {
|
|
22
|
+
this.boundRepulsion = null;
|
|
23
|
+
this.boundSpeedFinalize = null;
|
|
24
|
+
this.repulsion = repulsion;
|
|
25
|
+
this.speedFinalize = speedFinalize;
|
|
26
|
+
this.caps = caps;
|
|
27
|
+
this.overrides = Object.freeze({
|
|
28
|
+
SWING_MODE: overrides.SWING_MODE,
|
|
29
|
+
STRONG_GRAVITY: overrides.STRONG_GRAVITY,
|
|
30
|
+
GRAVITY_CENTER: overrides.GRAVITY_CENTER,
|
|
31
|
+
});
|
|
32
|
+
this.finalizePlan = plan1d(speedFinalize.workgroupSize, speedFinalize.workgroupSize, caps);
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Compiles both kernels through the cache (the twin is selected by caps.features).
|
|
36
|
+
* @param pipelines - the context's pipeline cache
|
|
37
|
+
* @param caps - the device caps the dispatch planner reads
|
|
38
|
+
* @param overrides - the SWING_MODE / STRONG_GRAVITY / GRAVITY_CENTER set of this stage
|
|
39
|
+
* @returns the stage, ready for bind()
|
|
40
|
+
*/
|
|
41
|
+
static async create(pipelines, caps, overrides) {
|
|
42
|
+
const [repulsionSpec, finalizeSpec] = RepulsionExact.specs(overrides);
|
|
43
|
+
// Sequential on purpose: PipelineCache.get runs createComputePipelineAsync inside a validation scope, and error
|
|
44
|
+
// scopes form one stack per device, so two interleaved compilations would pop each other's scope.
|
|
45
|
+
const repulsion = await pipelines.kernel(repulsionSpec);
|
|
46
|
+
const speedFinalize = await pipelines.kernel(finalizeSpec);
|
|
47
|
+
return new RepulsionExact(repulsion, speedFinalize, caps, overrides);
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* The two specs (for warm() and the compile matrix).
|
|
51
|
+
* @param overrides - the override set of the stage
|
|
52
|
+
* @returns the K3 spec then the K4 spec
|
|
53
|
+
*/
|
|
54
|
+
static specs(overrides) {
|
|
55
|
+
return [
|
|
56
|
+
kernelSpec("fa2-repulsion-exact", {
|
|
57
|
+
SWING_MODE: overrides.SWING_MODE,
|
|
58
|
+
STRONG_GRAVITY: overrides.STRONG_GRAVITY,
|
|
59
|
+
GRAVITY_CENTER: overrides.GRAVITY_CENTER,
|
|
60
|
+
}),
|
|
61
|
+
kernelSpec("fa2-speed-finalize", { SWING_MODE: overrides.SWING_MODE }),
|
|
62
|
+
];
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Creates the bind groups once per load(): K3 takes pos, state (S), force, oldForce, fixedMask, partials and the
|
|
66
|
+
* params slot; K4 takes partials, state (S), trace (T) and the params slot (the 3.10.1 binding names). The state
|
|
67
|
+
* header and the trace region are two disjoint ranges of one buffer, which Kernel.bind() accepts (no writable alias).
|
|
68
|
+
* @param resources - the buffers of spec 7.3
|
|
69
|
+
*/
|
|
70
|
+
bind(resources) {
|
|
71
|
+
this.boundRepulsion = this.repulsion.bind({
|
|
72
|
+
pos: resources.pos,
|
|
73
|
+
S: resources.state,
|
|
74
|
+
force: resources.force,
|
|
75
|
+
oldForce: resources.oldForce,
|
|
76
|
+
fixedMask: resources.fixedMask,
|
|
77
|
+
partials: resources.partials,
|
|
78
|
+
P: resources.params,
|
|
79
|
+
});
|
|
80
|
+
this.boundSpeedFinalize = this.speedFinalize.bind({
|
|
81
|
+
partials: resources.partials,
|
|
82
|
+
S: resources.state,
|
|
83
|
+
T: resources.trace,
|
|
84
|
+
P: resources.params,
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Records K3 (plan1d(n)) then K4 (1 workgroup) with the params slot's dynamic offset.
|
|
89
|
+
* @param pass - the open compute pass of the batch
|
|
90
|
+
* @param n - the node count (rows [0, n) of pos / force)
|
|
91
|
+
* @param paramsOffset - the dynamic offset of this iteration's Fa2Params slot in the uniform ring
|
|
92
|
+
*/
|
|
93
|
+
record(pass, n, paramsOffset) {
|
|
94
|
+
this.recordRepulsion(pass, n, paramsOffset);
|
|
95
|
+
this.recordSpeedFinalize(pass, paramsOffset);
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Records K3 only (the inspect() stage split, spec 11.9 item 2).
|
|
99
|
+
* @param pass - the open compute pass
|
|
100
|
+
* @param n - the node count
|
|
101
|
+
* @param paramsOffset - the dynamic offset of the Fa2Params slot
|
|
102
|
+
* @internal
|
|
103
|
+
*/
|
|
104
|
+
recordRepulsion(pass, n, paramsOffset) {
|
|
105
|
+
const bound = this.bound(this.boundRepulsion, "recordRepulsion");
|
|
106
|
+
const plan = plan1d(n, this.repulsion.workgroupSize, this.caps);
|
|
107
|
+
this.repulsion.dispatch(pass, bound, plan, [paramsOffset]);
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Records K4 only.
|
|
111
|
+
* @param pass - the open compute pass
|
|
112
|
+
* @param paramsOffset - the dynamic offset of the Fa2Params slot
|
|
113
|
+
* @internal
|
|
114
|
+
*/
|
|
115
|
+
recordSpeedFinalize(pass, paramsOffset) {
|
|
116
|
+
const bound = this.bound(this.boundSpeedFinalize, "recordSpeedFinalize");
|
|
117
|
+
this.speedFinalize.dispatch(pass, bound, this.finalizePlan, [paramsOffset]);
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* The bound kernel of a method, or E_NOT_LOADED when bind() has not run.
|
|
121
|
+
* @param bound - the cached BoundKernel, null before bind()
|
|
122
|
+
* @param method - the caller's name for the message
|
|
123
|
+
* @returns the bound kernel
|
|
124
|
+
*/
|
|
125
|
+
bound(bound, method) {
|
|
126
|
+
if (bound === null) {
|
|
127
|
+
throw new WebGpuGraphError("E_NOT_LOADED", `RepulsionExact.${method}(): bind() has not been called for this stage`, {
|
|
128
|
+
state: "unbound",
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
return bound;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
//# sourceMappingURL=repulsion-exact.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repulsion-exact.js","sourceRoot":"","sources":["../../../src/layouts/repulsion-exact.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The CPU port's random number generator, bit for bit, and the NaN-row seeding both paths share (spec 7.2 "Initial
|
|
3
|
+
* positions", 9.3 seedPositions, 7.14 `pos`, 7.19 topology change): a seed gives the same start on the CPU and the
|
|
4
|
+
* GPU because both write the same f32 values in index order. The package carries its own copy of the LCG for its
|
|
5
|
+
* whole life (D27: it cannot import @graphty/layout); W1 cross-tests it against the real RandomNumberGenerator.
|
|
6
|
+
*/
|
|
7
|
+
import type { F32, GraphSnapshot } from "@graphty/graph-format";
|
|
8
|
+
/** The CPU port's LCG constants (layout/src/utils/random.ts): m = 2^35 - 31, a = 185852, c = 1. */
|
|
9
|
+
export declare const LCG_M = 34359738337;
|
|
10
|
+
/** The multiplier a of the port's LCG. */
|
|
11
|
+
export declare const LCG_A = 185852;
|
|
12
|
+
/** The increment c of the port's LCG. */
|
|
13
|
+
export declare const LCG_C = 1;
|
|
14
|
+
/**
|
|
15
|
+
* The port's RandomNumberGenerator, bit for bit: `seed || Math.floor(Math.random() * 1000000)` (seed 0 / null =
|
|
16
|
+
* unseeded, the quirk preserved), state = seed % m, next = (a * state + c) % m, value = state / m. The product
|
|
17
|
+
* a * state stays below 2^53 (a < 2^18, state < 2^35), so every step is exact in f64, as it is in the port.
|
|
18
|
+
*/
|
|
19
|
+
export declare class Lcg {
|
|
20
|
+
/** The seed actually used (a random one when unseeded). */
|
|
21
|
+
readonly seed: number;
|
|
22
|
+
private state;
|
|
23
|
+
/**
|
|
24
|
+
* Creates the generator; a seed of 0, -0, NaN or null means unseeded (the port's `seed || random` quirk).
|
|
25
|
+
* @param seed - the seed, or null for a random seed
|
|
26
|
+
*/
|
|
27
|
+
constructor(seed: number | null);
|
|
28
|
+
/**
|
|
29
|
+
* Next value in [0, 1).
|
|
30
|
+
* @returns state / m after one LCG step
|
|
31
|
+
*/
|
|
32
|
+
next(): number;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Seeds the unseeded rows of the owner's stride-3 SCENE array in index order (spec 9.3 seedPositions, 7.14 `pos`,
|
|
36
|
+
* 7.19 topology change): a row is unseeded when any of its `dim` components is not finite; every such component
|
|
37
|
+
* draws one LCG value; when NO row is fully finite the draw is uniform in [-1, 1) layout units per axis (`range:
|
|
38
|
+
* "fa2"`; `"fr"` is [0, 1)), otherwise uniform inside the [min, max] box of the finite components per axis,
|
|
39
|
+
* converted to layout units (an axis with no finite value falls back to the range box); the value is written as
|
|
40
|
+
* `v * scale + center[axis]`, which for scale 1 / center 0 is bit-identical to the port's `u * 2 - 1` (resp. `u`);
|
|
41
|
+
* in 2D the third component of a seeded row is written as center[2]. Finite components are never changed and a
|
|
42
|
+
* fully finite row is never touched. No random number is drawn when nothing needs seeding.
|
|
43
|
+
* PLAN DECISION 12 (P3-T1): the box is taken over every finite COMPONENT (the port's rule), not over the fully
|
|
44
|
+
* finite ROWS only; the two differ only when a partially finite row's finite axis lies outside the fully finite
|
|
45
|
+
* rows' box (pinned by test/layouts/seed.test.ts). PLAN DECISION 13: a 2D row whose x and y are finite is seeded
|
|
46
|
+
* whatever its z holds.
|
|
47
|
+
* @param s - the snapshot (nodeCount rows)
|
|
48
|
+
* @param positions - the owner's stride-3 scene-unit array, length 3 * nodeCount, modified in place
|
|
49
|
+
* @param seed - the LCG seed (0 / null = unseeded, the port's quirk)
|
|
50
|
+
* @param dim - 2 or 3
|
|
51
|
+
* @param scale - the scene scale (> 0)
|
|
52
|
+
* @param center - the scene center, or null for the origin
|
|
53
|
+
* @param range - "fa2" for [-1, 1), "fr" for [0, 1)
|
|
54
|
+
*/
|
|
55
|
+
export declare function seedPositions(s: GraphSnapshot, positions: F32, seed: number | null, dim: 2 | 3, scale: number, center: ArrayLike<number> | null, range: "fa2" | "fr"): void;
|
|
56
|
+
//# sourceMappingURL=seed.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seed.d.ts","sourceRoot":"","sources":["../../../src/layouts/seed.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,GAAG,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAIhE,mGAAmG;AACnG,eAAO,MAAM,KAAK,cAAc,CAAC;AACjC,0CAA0C;AAC1C,eAAO,MAAM,KAAK,SAAS,CAAC;AAC5B,yCAAyC;AACzC,eAAO,MAAM,KAAK,IAAI,CAAC;AAEvB;;;;GAIG;AACH,qBAAa,GAAG;IACZ,2DAA2D;IAC3D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,OAAO,CAAC,KAAK,CAAS;IAEtB;;;OAGG;gBACS,IAAI,EAAE,MAAM,GAAG,IAAI;IAK/B;;;OAGG;IACH,IAAI,IAAI,MAAM;CAIjB;AA0BD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,aAAa,CACzB,CAAC,EAAE,aAAa,EAChB,SAAS,EAAE,GAAG,EACd,IAAI,EAAE,MAAM,GAAG,IAAI,EACnB,GAAG,EAAE,CAAC,GAAG,CAAC,EACV,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,GAAG,IAAI,EAChC,KAAK,EAAE,KAAK,GAAG,IAAI,GACpB,IAAI,CAgGN"}
|