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->mainmigration 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.compilejust 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:
einopsoperations can be used with any framework that follows the standard (seeeinops.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.compilejust 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:
einopsoperations can be used with any framework that follows the standard (seeeinops.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()beforetorch.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_graphto 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:
keraslayers are deprecated in favor oftf.keraslayers - 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.asnumpyandeinops.parse_shape
Layers (for chainer, gluon, keras and torch)
RearrangeandReduce
Supported frameworks:
- numpy
- pytorch
- tensorflow eager
- cupy
- chainer
- gluon
- tensorflow
- mxnet (experimental)
- and keras (experimental)
- Python
Published by arogozhnikov over 7 years ago