Recent Releases of einops

einops - v0.8.1 Multiple improvements

What's Changed

TLDR:

  • ellipsis is added to EinMix
  • tests moved into the package
  • devcontainer provided
  • added backend for pyTensor
  • niceties: citation, docs, fixed broken links
  • this did not require any changes in einops, but array API is supported by more libs these days, and einops can operate on them

PRs:

  • Update README.md by @project-delphi in https://github.com/arogozhnikov/einops/pull/316
  • change tests for numpy2.0 + fix for numpy regression by @arogozhnikov in https://github.com/arogozhnikov/einops/pull/325
  • PR from @pzread: fix tinygrad concat + changed formatting to fix CI errors by @arogozhnikov in https://github.com/arogozhnikov/einops/pull/329
  • Add devcontainer and dockerfile by @arogozhnikov in https://github.com/arogozhnikov/einops/pull/330
  • delete experimental/indexing by @arogozhnikov in https://github.com/arogozhnikov/einops/pull/333
  • Use same ruff version in CI and in pre-commit, reformat notebooks by @arogozhnikov in https://github.com/arogozhnikov/einops/pull/336
  • Delete chainer backend by @arogozhnikov in https://github.com/arogozhnikov/einops/pull/335
  • Mention support of cupy, pydata/sparse, ndonnx and others by @arogozhnikov in https://github.com/arogozhnikov/einops/pull/337
  • Moving tests into source tree by @arogozhnikov in https://github.com/arogozhnikov/einops/pull/338
  • Update documentation, mention changes in testing + devcontainers by @arogozhnikov in https://github.com/arogozhnikov/einops/pull/339
  • Auto-deploy mkdocs + update mkdocs requirements by @arogozhnikov in https://github.com/arogozhnikov/einops/pull/341
  • Add dict syntax to the einops layers example by @eadadi in https://github.com/arogozhnikov/einops/pull/342
  • include CITATION.cff for einops by @luke-carlson in https://github.com/arogozhnikov/einops/pull/345
  • mention that cupy and jax now support array api by @arogozhnikov in https://github.com/arogozhnikov/einops/pull/348
  • Fix docs broken links after master -> main migration by @VladKha in https://github.com/arogozhnikov/einops/pull/349
  • [Paddle] Update _backends.py to support pir.Value by @HydrogenSulfate in https://github.com/arogozhnikov/einops/pull/353
  • Update docstring for einops.reduce by @arogozhnikov in https://github.com/arogozhnikov/einops/pull/358
  • add a comment about axes names by @arogozhnikov in https://github.com/arogozhnikov/einops/pull/359
  • Add support of ellipsis to einmix by @arogozhnikov in https://github.com/arogozhnikov/einops/pull/360
  • Add PyTensor backend by @ricardoV94 in https://github.com/arogozhnikov/einops/pull/362
  • rename input_dict, document parameter by @arogozhnikov in https://github.com/arogozhnikov/einops/pull/363

New Contributors

  • @project-delphi made their first contribution in https://github.com/arogozhnikov/einops/pull/316
  • @eadadi made their first contribution in https://github.com/arogozhnikov/einops/pull/342
  • @luke-carlson made their first contribution in https://github.com/arogozhnikov/einops/pull/345
  • @VladKha made their first contribution in https://github.com/arogozhnikov/einops/pull/349
  • @HydrogenSulfate made their first contribution in https://github.com/arogozhnikov/einops/pull/353
  • @ricardoV94 made their first contribution in https://github.com/arogozhnikov/einops/pull/362

Full Changelog: https://github.com/arogozhnikov/einops/compare/v0.8.0...v0.8.1

- Python
Published by arogozhnikov about 1 year ago

einops - v0.8.0: tinygrad, small fixes and updates

TLDR

  • tinygrad backend added
  • resolve warning in py3.11 related to docstring
  • remove graph break for unpack
  • breaking TF layers were updated to follow new instructions, new layers compatible with TF 2.16, and not compatible with old TF (certainly does not work with TF2.13)

What's Changed

  • Fix invalid escape sequence in einsum docstring by @atwam in https://github.com/arogozhnikov/einops/pull/298
  • Tinygrad support by @blueridanus in https://github.com/arogozhnikov/einops/pull/297
  • Coerce bool to int in unpack by @drubinstein in https://github.com/arogozhnikov/einops/pull/287
  • Remove oneflow from testing by @arogozhnikov in https://github.com/arogozhnikov/einops/pull/289
  • tests: fix torch installation to force CPU by @arogozhnikov in https://github.com/arogozhnikov/einops/pull/288
  • Allow anonymous axes in parse_shape, fix #302 by @arogozhnikov in https://github.com/arogozhnikov/einops/pull/303
  • Codebase standards + update TF layers by @arogozhnikov in https://github.com/arogozhnikov/einops/pull/318
  • update github actions by @arogozhnikov in https://github.com/arogozhnikov/einops/pull/319

New Contributors

  • @drubinstein made their first contribution in https://github.com/arogozhnikov/einops/pull/287
  • @atwam made their first contribution in https://github.com/arogozhnikov/einops/pull/298
  • @blueridanus made their first contribution in https://github.com/arogozhnikov/einops/pull/297

Full Changelog: https://github.com/arogozhnikov/einops/compare/v0.7.0...v0.8.0

- Python
Published by arogozhnikov almost 2 years ago

einops - v0.7.1 : tinygrad + fixes

TLDR

  • tinygrad backend added
  • prevent graph break in unpack
  • remove warning in python 3.11

What's Changed

  • Coerce bool to int in unpack by @drubinstein in https://github.com/arogozhnikov/einops/pull/287
  • Tinygrad support by @blueridanus in https://github.com/arogozhnikov/einops/pull/297
  • Fix invalid escape sequence in einsum docstring by @atwam in https://github.com/arogozhnikov/einops/pull/298
  • Remove oneflow from testing by @arogozhnikov in https://github.com/arogozhnikov/einops/pull/289
  • tests: fix torch installation to force CPU by @arogozhnikov in https://github.com/arogozhnikov/einops/pull/288
  • Allow anonymous axes in parse_shape, fix #302 by @arogozhnikov in https://github.com/arogozhnikov/einops/pull/303

New Contributors

  • @drubinstein made their first contribution in https://github.com/arogozhnikov/einops/pull/287
  • @atwam made their first contribution in https://github.com/arogozhnikov/einops/pull/298
  • @blueridanus made their first contribution in https://github.com/arogozhnikov/einops/pull/297

Full Changelog: https://github.com/arogozhnikov/einops/compare/v0.7.0...v0.7.1

- Python
Published by arogozhnikov almost 2 years ago

einops - V0.7.0: torch.compile, preserve axis identity, array api

Major changes:

  • torch.compile just works, registration of operations happens automatically
  • JAX's distributed arrays can use ellipses, and in general ellipsis processing now preserves axis identity. This involved changing internal gears of einops.
  • Array API: einops operations can be used with any framework that follows the standard (see einops.array_api)
  • Python 3.7 is dead. Good bye, you were great at the time
  • Gluon is dropped as previously announced
  • reduce/repeat/rearrange all accept lists now

PRs list

  • Preserve axis identity + drop python 3.7 by @arogozhnikov in https://github.com/arogozhnikov/einops/pull/255
  • Support array api by @arogozhnikov in https://github.com/arogozhnikov/einops/pull/261
  • add type-based caching by @arogozhnikov in https://github.com/arogozhnikov/einops/pull/262
  • Uniform support for list inputs across rearrange/reduce/repeat by @arogozhnikov in https://github.com/arogozhnikov/einops/pull/263
  • Drop gluon by @arogozhnikov in https://github.com/arogozhnikov/einops/pull/264
  • automatically register torch ops in torchdynamo by @arogozhnikov in https://github.com/arogozhnikov/einops/pull/265
  • release 0.7.0rc1, highlight changes in README by @arogozhnikov in https://github.com/arogozhnikov/einops/pull/266
  • cover dynamic shapes in torch.compile, introduce fallback if shape was not cacheable by @arogozhnikov in https://github.com/arogozhnikov/einops/pull/275
  • bump version by @arogozhnikov in https://github.com/arogozhnikov/einops/pull/276
  • fix #279, update description by @arogozhnikov in https://github.com/arogozhnikov/einops/pull/281
  • Add support for any/all reductions in einops.reduce by @arogozhnikov in https://github.com/arogozhnikov/einops/pull/282
  • maintenance: cache pip dependencies by @arogozhnikov in https://github.com/arogozhnikov/einops/pull/283
  • maintenance: update versions of github actions by @arogozhnikov in https://github.com/arogozhnikov/einops/pull/285

Full Changelog: https://github.com/arogozhnikov/einops/compare/v0.6.1...v0.7.0

- Python
Published by arogozhnikov over 2 years ago

einops - V0.7.0rc2: allow dynamic shapes in torch.compile

What's Changed

  • cover dynamic shapes in torch.compile, introduce fallback if shape was not cacheable by @arogozhnikov in https://github.com/arogozhnikov/einops/pull/275
  • bump version by @arogozhnikov in https://github.com/arogozhnikov/einops/pull/276

Full Changelog: https://github.com/arogozhnikov/einops/compare/v0.7.0rc1...v0.7.0rc2

- Python
Published by arogozhnikov over 2 years ago

einops - V0.7.0rc1: torch.compile, preserve axis identity, array api

Major changes:

  • torch.compile just works, registration of operations happens automatically
  • JAX's distributed arrays can use ellipses, and in general ellipsis processing now preserves axis identity. This involved changing internal gears of einops.
  • Array API: einops operations can be used with any framework that follows the standard (see einops.array_api)
  • Python 3.7 is dead. Good bye, you were great at the time
  • Gluon is dropped as previously announced
  • Reduce/repeat/rearrange all accept lists now

What's Changed

  • Support array api by @arogozhnikov in https://github.com/arogozhnikov/einops/pull/261
  • add type-based caching by @arogozhnikov in https://github.com/arogozhnikov/einops/pull/262
  • Uniform support for list inputs across rearrange/reduce/repeat by @arogozhnikov in https://github.com/arogozhnikov/einops/pull/263
  • Drop gluon by @arogozhnikov in https://github.com/arogozhnikov/einops/pull/264
  • automatically register torch ops in torchdynamo by @arogozhnikov in https://github.com/arogozhnikov/einops/pull/265
  • release 0.7.0rc1, highlight changes in README by @arogozhnikov in https://github.com/arogozhnikov/einops/pull/266
  • Preserve axis identity + drop python 3.7 by @arogozhnikov in https://github.com/arogozhnikov/einops/pull/255

Full Changelog: https://github.com/arogozhnikov/einops/compare/v0.6.1...v0.7.0rc1

- Python
Published by arogozhnikov over 2 years ago

einops - V0.6.2rc0: drop python 3.7 + preserve axis identity

pre-release is published to allow public testing of new caching logic (pattern analysis is now dependent on input dimensionality to preserve axis identity).

What's Changed

  • Preserve axis identity + drop python 3.7 by @arogozhnikov in https://github.com/arogozhnikov/einops/pull/255

Full Changelog: https://github.com/arogozhnikov/einops/compare/v0.6.1...v0.6.2rc0

- Python
Published by arogozhnikov over 2 years ago

einops - V0.6.1: support paddle, support pytorch.compile

  • einops layers perfectly interplay with torch.compile
  • einops operations needs registration: run einops._torch_specific.allow_ops_in_compiled_graph() before torch.compile
  • paddle is now supported (thanks to @zhouwei25)
  • as previously announced, support of mxnet is dropped

What's Changed

  • Add PaddlePaddle backend for einops by @zhouwei25 in https://github.com/arogozhnikov/einops/pull/242 , https://github.com/arogozhnikov/einops/pull/245
  • Add allow_ops_in_compiled_graph to support torch.compile by @arogozhnikov in https://github.com/arogozhnikov/einops/pull/251
  • torch.concat -> torch.cat to support packing for torch < 1.10 by @arogozhnikov in https://github.com/arogozhnikov/einops/pull/238
  • chores: improve documentation and testing by @arogozhnikov in https://github.com/arogozhnikov/einops/pull/246
  • Remove mxnet by @arogozhnikov in https://github.com/arogozhnikov/einops/pull/231

New Contributors

  • @zhouwei25 made their first contribution in https://github.com/arogozhnikov/einops/pull/242

Full Changelog: https://github.com/arogozhnikov/einops/compare/v0.6.0...v0.6.1

- Python
Published by arogozhnikov almost 3 years ago

einops - V0.6.0: pack and unpack

What's Changed

  • Introduce einops.pack and einops.unpack by @arogozhnikov in https://github.com/arogozhnikov/einops/pull/222
  • Update example to match description by @EPronovost in https://github.com/arogozhnikov/einops/pull/217
  • Improve type hinting by @arogozhnikov in https://github.com/arogozhnikov/einops/pull/221
  • Cosmetics for pack/unpack: documentation and comments by @arogozhnikov in https://github.com/arogozhnikov/einops/pull/223
  • Preparations for 0.6.0 release by @arogozhnikov in https://github.com/arogozhnikov/einops/pull/224

New Contributors

  • @EPronovost made their first contribution in https://github.com/arogozhnikov/einops/pull/217

Announcement

Sunsetting experimental mxnet support: no demand and package is outdated, with numerous deprecations and poor support of corner cases. 0.6.0 will be the last release with mxnet backend.

Full Changelog: https://github.com/arogozhnikov/einops/compare/v0.5.0...v0.6.0

- Python
Published by arogozhnikov over 3 years ago

einops - Einops v0.5.0: einsum + support of flax and oneflow.

What's Changed

  • Create einsum operation by @MilesCranmer in https://github.com/arogozhnikov/einops/pull/197
  • Add flax layers by @arogozhnikov in https://github.com/arogozhnikov/einops/pull/214
  • Add oneflow backend by @arogozhnikov in https://github.com/arogozhnikov/einops/pull/181
  • Add oneflow backend by @rentainhe in https://github.com/arogozhnikov/einops/pull/180
  • Fix wrong error message by @arogozhnikov in https://github.com/arogozhnikov/einops/pull/196
  • Clarify documentation re. default bias on EinMix by @maxeonyx in https://github.com/arogozhnikov/einops/pull/201
  • corrected spelling mistake: einsops -> einops by @cs-mshah in https://github.com/arogozhnikov/einops/pull/205
  • add mean-reduction for bfloat16, fix #206 by @arogozhnikov in https://github.com/arogozhnikov/einops/pull/209
  • add py.typed (adopt PEP 561) by @arogozhnikov in https://github.com/arogozhnikov/einops/pull/211
  • Delete tensorflow-specific readme file by @arogozhnikov in https://github.com/arogozhnikov/einops/pull/212
  • Adopt pypa/hatch by @arogozhnikov in https://github.com/arogozhnikov/einops/pull/213

New Contributors

  • @rentainhe made their first contribution in https://github.com/arogozhnikov/einops/pull/180
  • @MilesCranmer made their first contribution in https://github.com/arogozhnikov/einops/pull/197
  • @maxeonyx made their first contribution in https://github.com/arogozhnikov/einops/pull/201
  • @cs-mshah made their first contribution in https://github.com/arogozhnikov/einops/pull/205

Full Changelog: https://github.com/arogozhnikov/einops/compare/v0.4.1...v0.5.0

- Python
Published by arogozhnikov over 3 years ago

einops - Einops v0.4.1: Avoid importing numpy if it is not required

What's Changed

  • fix numpy dependency problem by @lucidrains in https://github.com/arogozhnikov/einops/pull/176

New Contributors

  • @lucidrains made their first contribution in https://github.com/arogozhnikov/einops/pull/176

Full Changelog: https://github.com/arogozhnikov/einops/compare/v0.4.0...v0.4.1

- Python
Published by arogozhnikov almost 4 years ago

einops - Einops v0.4.0: EinMix and torch.jit.script

Main Changes

  • torch.jit.script is supported (in addition to previous torch.jit.trace)
  • EinMix (swiss-knife for next-gen MLPs) is added. A much-improved einsum/linear layer is now available.
  • einops.repeat in torch does not create copy when possible

Detailed PRs

  • Update documentation by @arogozhnikov in https://github.com/arogozhnikov/einops/pull/137
  • Multiple updates in docs, add Rearrange layer to torch test by @arogozhnikov in https://github.com/arogozhnikov/einops/pull/138
  • Add support for torch scripting of einops layers by @arogozhnikov in https://github.com/arogozhnikov/einops/pull/139
  • Introduce EinMix - swiss-knife for next-gen MLPs by @arogozhnikov in https://github.com/arogozhnikov/einops/pull/142
  • Docs improvements: wording, visual style, EinMix by @arogozhnikov in https://github.com/arogozhnikov/einops/pull/143
  • Move docs to a separate folder by @arogozhnikov in https://github.com/arogozhnikov/einops/pull/144
  • Type hinting + add testing for EinMix composition/decomposition by @arogozhnikov in https://github.com/arogozhnikov/einops/pull/154
  • Reject repeated axes in parse_shape by @dmitriy-serdyuk in https://github.com/arogozhnikov/einops/pull/159
  • Enable ellipsis in patterns for parse_shape. by @dmitriy-serdyuk in https://github.com/arogozhnikov/einops/pull/162

New Contributors

  • @dmitriy-serdyuk made their first contribution in https://github.com/arogozhnikov/einops/pull/159

Full Changelog: https://github.com/arogozhnikov/einops/compare/v0.3.2...v0.4.0

- Python
Published by arogozhnikov about 4 years ago

einops - Einops v0.3.2: updated documentation and tutorials, keras -> tf.keras

  • documentation and domain (#75, #76, #77, #79, #81), thanks to @cgarciae
  • typos and spellcheck (thank @ollema and @GarrettMooney )
  • moved away from keras to tf.keras
  • adjustments to tutorials and testing
  • other minor improvements

- Python
Published by arogozhnikov over 4 years ago

einops - Einops v0.3: repeat + more friendly requirements + ...

  • new operation: repeat (includes repeat/tiling logic, copying along a new dimension)
  • anonymous axes (specified by their length not name) are allowed: python grayscale = reduce(image, 'h w 3 -> h w', 'mean') image_with_identical_channels = repeat(grayscale, 'h w -> h w 3')
  • 1 can be used to refer to all dimensions of length 1
  • reduced restrictions on axes names: almost any python identified can be an axis name now
  • reduction can be provided with callable not string
  • tutorials were slightly updated to include these changes
  • code in kernel undergone refactoring, and now more documented
  • support: keras layers are deprecated in favor of tf.keras layers
  • experimental layer introduced: WeightedEinsum (RFC: #71 )

- Python
Published by arogozhnikov over 5 years ago

einops - Jax support + updated testing code

  • experimental support for Jax framework was added
  • testing code was rewritten and updated to work
  • tf2 always worked with einops, but tests had to be updated. So, tests are updated for tf2
  • tf readme, minor additions, comments, etc.

Thanks to contributors

- Python
Published by arogozhnikov about 6 years ago

einops - Initial release (v0.1)

This release introduces einops, as well as its notion.

Initial release API: Operations (ops) - einops.rearrange and einops.reduce

Auxiliary

  • einops.asnumpy and einops.parse_shape

Layers (for chainer, gluon, keras and torch)

  • Rearrange and Reduce

Supported frameworks:

  • numpy
  • pytorch
  • tensorflow eager
  • cupy
  • chainer
  • gluon
  • tensorflow
  • mxnet (experimental)
  • and keras (experimental)

- Python
Published by arogozhnikov over 7 years ago