Incin is a deep learning framework in Rust where a tensor’s shape, dtype, device and gradient state all live in its type. Shape, dtype, device mismatches and so on are compiler errors.
use incin::prelude::*;
let x = Cpu.randn(shape![4, 8])?;
let w = Cpu.randn(shape![8, 2])?;
let y = x.matmul(&w)?; // [4, 8] x [8, 2] -> [4, 2]
let bad = Cpu.randn(shape![3, 8])?;
let _ = x.matmul(&bad)?; // inner dims 8 and 3: does not compile
The main goal was to find out how much of the tensor contract the type system can genuinely carry, how flexible we can make it, and how pleasant to work with it can be.
If you're interested on the features, architecture or anything else: