#ndarray #matrix #einsum

einsum-codegen

Helper for generating einsum implementation using proc-macro

1 unstable release

0.1.0 Nov 30, 2022

#573 in Science


Used in einsum-derive

MIT/Apache

44KB
833 lines

einsum-derive

master bench

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

  • einsum-derive crate is proc-macro crate to provide above einsum! macro.
  • einsum-codegen crate implements parser for the einsum subscripts like ij,jk->ik and generates Rust code.
  • 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

License

© 2022 Toshiki Teramura (@termoshtt)

This project is licensed under either of

at your option.

Dependencies

~2.5MB
~57K SLoC