#compile-time #optimization #numpy #ndarray #path #conventions #summation

einsum

A Rust implementation of numpy’s Einstein summation convention for the ndarray crate with compile-time path optimization

1 unstable release

0.1.0 Dec 11, 2018

#4 in #summation

ISC license

4KB

Macro Einsum for ndarray

Setup

Install python and the opt_einsum package.

Usage

The syntax is similar to numpy's. For each input argument, use (expr).(axes). Then use a fat arrow =>, and for the output axes use .(axes) and a semicolon ;. After the semicolon, you need to pass the dimensions of each of the axes in order for the macro to optimize the path at compiletime. See example below

Example

let y: Array<f64, _> = einsum!(a.mi, b.nj, c.ijpl, d.op, e.ql => .mnoq; i 2, j 2, l 10, m 40, n 40, o 8, p 7, q 6);

Dependencies

~4–5.5MB
~104K SLoC