3.3.0 / 2020-07-19¶
object backend for optimized contractions on arbitrary Python objects.
(GH#145) Adds a
objectbased backend so that
contract(backend='object')can be used on arbitrary objects such as SymPy symbols.
(GH#140) Better error messages when the requested
contractbackend cannot be found.
(GH#141) Adds a check with RandomOptimizers to ensure the objects are not accidentally reused for different contractions.
(GH#149) Limits the
remainingcategory for the
contract_pathoutput to only show up to 20 tensors to prevent issues with the quadratically scaling memory requirements and the number of print lines for large contractions.
3.2.0 / 2020-03-01¶
Small fixes for the
dp path and support for a new mars backend.
3.1.0 / 2019-09-30¶
Adds a new dynamic programming algorithm to the suite of paths.
3.0.0 / 2019-08-10¶
This release moves
opt_einsum to be backend agnostic while adding support
additional backends such as Jax and Autograd. Support for Python 2.7 has been dropped and Python 3.5 will become the new minimum version, a Python deprecation policy equivalent to NumPy’s has been adopted.
(GH#78) A new random-optimizer has been implemented which uses Boltzmann weighting to explore alternative near-minimum paths using greedy-like schemes. This provides a fairly large path performance enhancements with a linear path time overhead.
(GH#78) A new PathOptimizer class has been implemented to provide a framework for building new optimizers. An example is that now custom cost functions can now be provided in the greedy formalism for building custom optimizers without a large amount of additional code.
backend="auto"keyword has been implemented for
contractallowing automatic detection of the correct backend to use based off provided tensors in the contraction.
(GH#88) Autograd and Jax support have been implemented.
(GH#96) Deprecates Python 2 functionality and devops improvements.
2.3.0 / 2018-12-01¶
This release primarily focuses on expanding the suite of available path technologies to provide better optimization characistics for 4-20 tensors while decreasing the time to find paths for 50-200+ tensors. See Path Overview for more information.
(GH#60) A new
greedyimplementation has been added which is up to two orders of magnitude faster for 200 tensors.
(GH#73) Adds a new
branchpath that uses
greedyideas to prune the
optimalexploration space to provide a better path than
opt_einsum.contract_path()now returns a
opt_einsum.contract.PathInfo()object that can be queried for the scaling, flops, and intermediates of the path. The print representation of this object is identical to before.
(GH#61) The default
memory_limitis now unlimited by default based on community feedback.
(GH#66) The Torch backend will now use
tensordotwhen using a version of Torch which includes this functionality.
(GH#74) Allows the default transpose operation to be overridden to take advantage of more advanced tensor transpose libraries.
optimalpath is now significantly faster.
(GH#81) A documentation pass for v3.0.
2.2.0 / 2018-07-29¶
2.1.3 / 2018-8-23¶
Fixes unicode issue for large numbers of tensors in Python 2.7.
Fixes unicode install bug in README.md.
2.1.0 / 2018-8-15¶
opt_einsum continues to improve its support for additional backends beyond NumPy with PyTorch.
We have also published the opt_einsum package in the Journal of Open Source Software. If you use this package in your work, please consider citing us!
PyTorch backend support
Tensorflow eager-mode execution backend support
Intermediate tensordot-like expressions are now ordered to avoid transposes.
CI now uses conda backend to better support GPU and tensor libraries.
Now accepts arbitrary unicode indices rather than a subset.
New auto path option which switches between optimal and greedy at four tensors.
Fixed issue where broadcast indices were incorrectly locked out of tensordot-like evaluations even after their dimension was broadcast.
2.0.1 / 2018-6-28¶
Allows unlimited Unicode indices.
Adds a Journal of Open-Source Software paper.
Minor documentation improvements.
2.0.0 / 2018-5-17¶
opt_einsum is a powerful tensor contraction order optimizer for NumPy and related ecosystems.
Expressions can be precompiled so that the expression optimization need not happen multiple times.
The greedy order optimization algorithm has been tuned to be able to handle hundreds of tensors in several seconds.
Input indices can now be unicode so that expressions can have many thousands of indices.
GPU and distributed computing backends have been added such as Dask, TensorFlow, CUPy, Theano, and Sparse.
An error affecting cases where opt_einsum mistook broadcasting operations for matrix multiply has been fixed.
Most error messages are now more expressive.
1.0.0 / 2016-10-14¶
Einsum is a very powerful function for contracting tensors of arbitrary dimension and index. However, it is only optimized to contract two terms at a time resulting in non-optimal scaling for contractions with many terms. Opt_einsum aims to fix this by optimizing the contraction order which can lead to arbitrarily large speed ups at the cost of additional intermediate tensors.
Opt_einsum is also implemented into the np.einsum function as of NumPy v1.12.