Crate tenferro_tropical

Crate tenferro_tropical 

Source
Expand description

Tropical semiring tensor operations for the tenferro workspace.

This crate extends the tenferro algebra-parameterized architecture with three tropical semirings:

Semiring⊕ (add)⊗ (mul)ZeroOneUse case
MaxPlusmax+−∞0Shortest path, optimal alignment
MinPlusmin++∞0Shortest path (Dijkstra)
MaxMulmax×01Viterbi, max-probability paths

§Architecture

The crate provides:

§Examples

§Scalar arithmetic

use tenferro_tropical::MaxPlus;

let a = MaxPlus(3.0_f64);
let b = MaxPlus(5.0_f64);
let c = a + b;   // MaxPlus(5.0) — tropical add = max
let d = a * b;   // MaxPlus(8.0) — tropical mul = ordinary +

§Algebra dispatch

use tenferro_algebra::HasAlgebra;
use tenferro_tropical::{MaxPlus, MaxPlusAlgebra};

// MaxPlus<f64> automatically maps to MaxPlusAlgebra
fn check<T: HasAlgebra<Algebra = MaxPlusAlgebra>>() {}
check::<MaxPlus<f64>>();

§Plan-based tropical contraction

use tenferro_prims::{CpuBackend, TensorPrims, PrimDescriptor};
use tenferro_tropical::MaxPlusAlgebra;

let desc = PrimDescriptor::BatchedGemm {
    batch_dims: vec![], m: 3, n: 5, k: 4,
};
// Under MaxPlusAlgebra, GEMM computes:
//   C[i,j] = max_k (A[i,k] + B[k,j])
let plan = <CpuBackend as TensorPrims<MaxPlusAlgebra>>::plan::<f64>(
    &desc, &[&[3, 4], &[4, 5], &[3, 5]],
).unwrap();

Re-exports§

pub use algebra::MaxMulAlgebra;
pub use algebra::MaxPlusAlgebra;
pub use algebra::MinPlusAlgebra;
pub use argmax::ArgmaxTracker;
pub use prims::TropicalPlan;
pub use scalar::MaxMul;
pub use scalar::MaxPlus;
pub use scalar::MinPlus;

Modules§

algebra
Tropical algebra markers, HasAlgebra, and Semiring implementations.
argmax
Argmax tracking for tropical backward pass (automatic differentiation).
prims
[TensorPrims] implementations for tropical algebras on [CpuBackend].
scalar
Tropical scalar wrapper types.