ruvector-math-wasm
WebAssembly-compiled mathematical primitives for Optimal Transport, Information Geometry, and Product Manifold operations. Runs in browsers, Node.js, and edge runtimes with near-native performance.
Quick Reference
| Task | Code |
|---|---|
| Import | import { WassersteinDistance, FisherMetric, ProductManifold } from 'ruvector-math-wasm'; |
| Initialize | await init(); |
| Wasserstein distance | WassersteinDistance.compute(p, q) |
| Fisher metric | FisherMetric.distance(p, q) |
| Product manifold | ProductManifold.geodesic(a, b, t) |
Installation
npx ruvector-math-wasm@latest
Node.js Usage
import init, {
WassersteinDistance,
FisherMetric,
ProductManifold,
SinkhornSolver,
} from 'ruvector-math-wasm';
await init();
// Optimal Transport: Wasserstein distance between distributions
const p = new Float64Array([0.2, 0.3, 0.5]);
const q = new Float64Array([0.1, 0.4, 0.5]);
const distance = WassersteinDistance.compute(p, q);
console.log(`W2 distance: ${distance}`);
// Sinkhorn approximation for large distributions
const solver = new SinkhornSolver({ epsilon: 0.01, maxIter: 100 });
const transport = solver.solve(costMatrix, p, q);
console.log(`Transport plan cost: ${transport.cost}`);
// Information Geometry: Fisher-Rao distance
const dist1 = new Float64Array([0.3, 0.7]); // Bernoulli p=0.3
const dist2 = new Float64Array([0.6, 0.4]); // Bernoulli p=0.6
const fisherDist = FisherMetric.distance(dist1, dist2);
console.log(`Fisher-Rao distance: ${fisherDist}`);
// Product Manifold: geodesic interpolation
const pointA = new Float64Array([1.0, 0.0, 0.5]);
const pointB = new Float64Array([0.0, 1.0, 0.8]);
const midpoint = ProductManifold.geodesic(pointA, pointB, 0.5);
Browser Usage
<script type="module">
import init, { WassersteinDistance, FisherMetric } from 'ruvector-math-wasm';
await init();
const p = new Float64Array([0.25, 0.25, 0.25, 0.25]);
const q = new Float64Array([0.1, 0.2, 0.3, 0.4]);
const dist = WassersteinDistance.compute(p, q);
document.getElementById('result').textContent = `Distance: ${dist}`;
</script>
Key API
WassersteinDistance
Compute Earth Mover's Distance (Wasserstein-p) between probability distributions.
WassersteinDistance.compute(p: Float64Array, q: Float64Array, order?: number): number
WassersteinDistance.computeWithCost(p: Float64Array, q: Float64Array, costMatrix: Float64Array): number
Parameters:
| Parameter | Type | Description |
|---|---|---|
p |
Float64Array |
Source distribution (must sum to 1) |
q |
Float64Array |
Target distribution (must sum to 1) |
order |
number |
Wasserstein order p (default: 2) |
costMatrix |
Float64Array |
Custom cost matrix (row-major, n*m) |
SinkhornSolver
Entropic-regularized optimal transport for large-scale problems.
const solver = new SinkhornSolver(config?: SinkhornConfig);
const result = solver.solve(costMatrix: Float64Array, p: Float64Array, q: Float64Array): TransportResult;
SinkhornConfig:
| Parameter | Type | Default | Description |
|---|---|---|---|
epsilon |
number |
0.01 |
Regularization strength |
maxIter |
number |
100 |
Maximum iterations |
tolerance |
number |
1e-9 |
Convergence threshold |
TransportResult:
| Field | Type | Description |
|---|---|---|
plan |
Float64Array |
Optimal transport plan |
cost |
number |
Total transport cost |
iterations |
number |
Iterations used |
FisherMetric
Information-geometric distance on statistical manifolds.
FisherMetric.distance(p: Float64Array, q: Float64Array): number
FisherMetric.matrix(params: Float64Array, family: string): Float64Array
FisherMetric.naturalGradient(params: Float64Array, gradient: Float64Array): Float64Array
Parameters:
| Parameter | Type | Description |
|---|---|---|
p, q |
Float64Array |
Distribution parameters |
family |
string |
Distribution family: 'gaussian', 'bernoulli', 'categorical' |
ProductManifold
Operations on product spaces of Riemannian manifolds.
ProductManifold.geodesic(a: Float64Array, b: Float64Array, t: number): Float64Array
ProductManifold.distance(a: Float64Array, b: Float64Array): number
ProductManifold.expMap(point: Float64Array, tangent: Float64Array): Float64Array
ProductManifold.logMap(base: Float64Array, target: Float64Array): Float64Array
ProductManifold.parallelTransport(v: Float64Array, from: Float64Array, to: Float64Array): Float64Array
Parameters:
| Parameter | Type | Description |
|---|---|---|
a, b |
Float64Array |
Points on the manifold |
t |
number |
Interpolation parameter (0-1) |
tangent |
Float64Array |
Tangent vector |
References
- API Reference
- npm