Crate einsum_derive

source ·
Expand description

§einsum-derive

Proc-macro based einsum implementation for ndarray crate

use ndarray::array;
use einsum_derive::einsum;

let a = array![
  [1.0, 2.0],
  [3.0, 4.0]
];
let b = array![
  [1.0, 2.0],
  [3.0, 4.0]
];
let c = einsum!("ij,jk->ik", a, b);
assert_eq!(c, array![
  [6.0, 8.0],
  [12.0, 16.0]
]);

This proc-macro wil compile the input subscripts "ij,jk->ik" to generate Rust code executing corresponding operation.

§Status / Roadmap

§Architecture

crates.iodocs.rsGitHub PagesDescription
einsum-derivecratedocs.rsPagesproc-macro crate to provide einsum! macro
einsum-codegencratedocs.rsPagesImplements parser for the einsum subscripts and generates Rust code

§Benchmark

bench

Benchmark with criterion.rs is running on GitHub Action on every commit on the main branch. The code is placed at einsum-derive/benches/einsum.rs, and you can run it on your environment by

cargo bench

and you will find its result on target/criterion/report/index.html.

§License

© 2022 Toshiki Teramura (@termoshtt)

This project is licensed under either of

  • Apache License, Version 2.0, (LICENSE-APACHE or https://www.apache.org/licenses/LICENSE-2.0)
  • MIT license (LICENSE-MIT or https://opensource.org/licenses/MIT)

at your option.

  • numpy.einsum is well-known einsum implementation in Python.
  • opt_einsum is an implementation for optimizing einsum computation for NumPy and other linear algebra packages.
  • oracleofnj/einsum is a runtime-based implementation of einsum for rust-ndarray

Macros§