# batchtensor
<p align="center">
<a href="https://github.com/durandtibo/batchtensor/actions">
<img alt="CI" src="https://github.com/durandtibo/batchtensor/workflows/CI/badge.svg">
</a>
<a href="https://github.com/durandtibo/batchtensor/actions">
<img alt="Nightly Tests" src="https://github.com/durandtibo/batchtensor/workflows/Nightly%20Tests/badge.svg">
</a>
<a href="https://github.com/durandtibo/batchtensor/actions">
<img alt="Nightly Package Tests" src="https://github.com/durandtibo/batchtensor/workflows/Nightly%20Package%20Tests/badge.svg">
</a>
<br/>
<a href="https://durandtibo.github.io/batchtensor/">
<img alt="Documentation" src="https://github.com/durandtibo/batchtensor/workflows/Documentation%20(stable)/badge.svg">
</a>
<a href="https://durandtibo.github.io/batchtensor/">
<img alt="Documentation" src="https://github.com/durandtibo/batchtensor/workflows/Documentation%20(unstable)/badge.svg">
</a>
<br/>
<a href="https://codecov.io/gh/durandtibo/batchtensor">
<img alt="Codecov" src="https://codecov.io/gh/durandtibo/batchtensor/branch/main/graph/badge.svg">
</a>
<a href="https://codeclimate.com/github/durandtibo/batchtensor/maintainability">
<img src="https://api.codeclimate.com/v1/badges/148edc26add138d04928/maintainability" />
</a>
<a href="https://codeclimate.com/github/durandtibo/batchtensor/test_coverage">
<img src="https://api.codeclimate.com/v1/badges/148edc26add138d04928/test_coverage" />
</a>
<br/>
<a href="https://github.com/psf/black">
<img alt="Code style: black" src="https://img.shields.io/badge/code%20style-black-000000.svg">
</a>
<a href="https://google.github.io/styleguide/pyguide.html#s3.8-comments-and-docstrings">
<img alt="Doc style: google" src="https://img.shields.io/badge/%20style-google-3666d6.svg">
</a>
<a href="https://github.com/astral-sh/ruff">
<img src="https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json" alt="Ruff" style="max-width:100%;">
</a>
<a href="https://github.com/guilatrova/tryceratops">
<img alt="Doc style: google" src="https://img.shields.io/badge/try%2Fexcept%20style-tryceratops%20%F0%9F%A6%96%E2%9C%A8-black">
</a>
<br/>
<a href="https://pypi.org/project/batchtensor/">
<img alt="PYPI version" src="https://img.shields.io/pypi/v/batchtensor">
</a>
<a href="https://pypi.org/project/batchtensor/">
<img alt="Python" src="https://img.shields.io/pypi/pyversions/batchtensor.svg">
</a>
<a href="https://opensource.org/licenses/BSD-3-Clause">
<img alt="BSD-3-Clause" src="https://img.shields.io/pypi/l/batchtensor">
</a>
<br/>
<a href="https://pepy.tech/project/batchtensor">
<img alt="Downloads" src="https://static.pepy.tech/badge/batchtensor">
</a>
<a href="https://pepy.tech/project/batchtensor">
<img alt="Monthly downloads" src="https://static.pepy.tech/badge/batchtensor/month">
</a>
<br/>
</p>
## Overview
`batchtensor` is lightweight library built on top of [PyTorch](https://pytorch.org/) to manipulate
nested data structure with PyTorch tensors.
This library provides functions for tensors where the first dimension is the batch dimension.
It also provides functions for tensors representing a batch of sequences where the first dimension
is the batch dimension and the second dimension is the sequence dimension.
- [Motivation](#motivation)
- [Documentation](https://durandtibo.github.io/batchtensor/)
- [Installation](#installation)
- [Contributing](#contributing)
- [API stability](#api-stability)
- [License](#license)
## Motivation
Let's imagine you have a batch which is represented by a dictionary with three tensors, and you want
to take the first 2 items.
`batchtensor` provides the function `slice_along_batch` that allows to slide all the tensors:
```pycon
>>> import torch
>>> from batchtensor.nested import slice_along_batch
>>> batch = {
... "a": torch.tensor([[2, 6], [0, 3], [4, 9], [8, 1], [5, 7]]),
... "b": torch.tensor([4, 3, 2, 1, 0]),
... "c": torch.tensor([1.0, 2.0, 3.0, 4.0, 5.0]),
... }
>>> slice_along_batch(batch, stop=2)
{'a': tensor([[2, 6], [0, 3]]), 'b': tensor([4, 3]), 'c': tensor([1., 2.])}
```
Similarly, it is possible to split a batch in multiple batches by using the
function `split_along_batch`:
```pycon
>>> import torch
>>> from batchtensor.nested import split_along_batch
>>> batch = {
... "a": torch.tensor([[2, 6], [0, 3], [4, 9], [8, 1], [5, 7]]),
... "b": torch.tensor([4, 3, 2, 1, 0]),
... "c": torch.tensor([1.0, 2.0, 3.0, 4.0, 5.0]),
... }
>>> split_along_batch(batch, split_size_or_sections=2)
({'a': tensor([[2, 6], [0, 3]]), 'b': tensor([4, 3]), 'c': tensor([1., 2.])},
{'a': tensor([[4, 9], [8, 1]]), 'b': tensor([2, 1]), 'c': tensor([3., 4.])},
{'a': tensor([[5, 7]]), 'b': tensor([0]), 'c': tensor([5.])})
```
Please check the documentation to see all the implemented functions.
## Documentation
- [latest (stable)](https://durandtibo.github.io/batchtensor/): documentation from the latest stable
release.
- [main (unstable)](https://durandtibo.github.io/batchtensor/main/): documentation associated to the
main branch of the repo. This documentation may contain a lot of work-in-progress/outdated/missing
parts.
## Installation
We highly recommend installing
a [virtual environment](https://packaging.python.org/guides/installing-using-pip-and-virtual-environments/).
`batchtensor` can be installed from pip using the following command:
```shell
pip install batchtensor
```
To make the package as slim as possible, only the minimal packages required to use `batchtensor` are
installed.
To include all the dependencies, you can use the following command:
```shell
pip install batchtensor[all]
```
Please check the [get started page](https://durandtibo.github.io/batchtensor/get_started) to see how
to install only some specific dependencies or other alternatives to install the library.
The following is the corresponding `batchtensor` versions and tested dependencies.
| `batchtensor` | `coola` | `numpy`<sup>*</sup> | `torch` | `python` |
|---------------|--------------|---------------------|---------------|---------------|
| `main` | `>=0.1,<1.0` | `>=1.21,<2.0` | `>=1.11,<3.0` | `>=3.9,<3.13` |
| `0.0.4` | `>=0.1,<1.0` | `>=1.21,<2.0` | `>=1.11,<3.0` | `>=3.9,<3.13` |
| `0.0.3` | `>=0.1,<1.0` | `>=1.21,<2.0` | `>=1.11,<3.0` | `>=3.9,<3.13` |
| `0.0.2` | `>=0.1,<1.0` | `>=1.21,<2.0` | `>=1.11,<3.0` | `>=3.9,<3.13` |
| `0.0.1` | `>=0.1,<0.4` | `>=1.21,<2.0` | `>=1.11,<3.0` | `>=3.9,<3.13` |
<sup>*</sup> indicates an optional dependency
## Contributing
Please check the instructions in [CONTRIBUTING.md](.github/CONTRIBUTING.md).
## Suggestions and Communication
Everyone is welcome to contribute to the community.
If you have any questions or suggestions, you can
submit [Github Issues](https://github.com/durandtibo/batchtensor/issues).
We will reply to you as soon as possible. Thank you very much.
## API stability
:warning: While `batchtensor` is in development stage, no API is guaranteed to be stable from one
release to the next.
In fact, it is very likely that the API will change multiple times before a stable 1.0.0 release.
In practice, this means that upgrading `batchtensor` to a new version will possibly break any code
that was using the old version of `batchtensor`.
## License
`batchtensor` is licensed under BSD 3-Clause "New" or "Revised" license available
in [LICENSE](LICENSE) file.
Raw data
{
"_id": null,
"home_page": "https://github.com/durandtibo/batchtensor",
"name": "batchtensor",
"maintainer": null,
"docs_url": null,
"requires_python": "<3.13,>=3.9",
"maintainer_email": null,
"keywords": "batch, sequence, pytorch, tensor",
"author": "Thibaut Durand",
"author_email": "durand.tibo+gh@gmail.com",
"download_url": "https://files.pythonhosted.org/packages/01/da/3d3f9314f0715122a4029e514bf467c8ff440403afb02a0a0f2d94157cd1/batchtensor-0.0.4.tar.gz",
"platform": null,
"description": "# batchtensor\n\n<p align=\"center\">\n <a href=\"https://github.com/durandtibo/batchtensor/actions\">\n <img alt=\"CI\" src=\"https://github.com/durandtibo/batchtensor/workflows/CI/badge.svg\">\n </a>\n <a href=\"https://github.com/durandtibo/batchtensor/actions\">\n <img alt=\"Nightly Tests\" src=\"https://github.com/durandtibo/batchtensor/workflows/Nightly%20Tests/badge.svg\">\n </a>\n <a href=\"https://github.com/durandtibo/batchtensor/actions\">\n <img alt=\"Nightly Package Tests\" src=\"https://github.com/durandtibo/batchtensor/workflows/Nightly%20Package%20Tests/badge.svg\">\n </a>\n <br/>\n <a href=\"https://durandtibo.github.io/batchtensor/\">\n <img alt=\"Documentation\" src=\"https://github.com/durandtibo/batchtensor/workflows/Documentation%20(stable)/badge.svg\">\n </a>\n <a href=\"https://durandtibo.github.io/batchtensor/\">\n <img alt=\"Documentation\" src=\"https://github.com/durandtibo/batchtensor/workflows/Documentation%20(unstable)/badge.svg\">\n </a>\n <br/>\n <a href=\"https://codecov.io/gh/durandtibo/batchtensor\">\n <img alt=\"Codecov\" src=\"https://codecov.io/gh/durandtibo/batchtensor/branch/main/graph/badge.svg\">\n </a>\n <a href=\"https://codeclimate.com/github/durandtibo/batchtensor/maintainability\">\n <img src=\"https://api.codeclimate.com/v1/badges/148edc26add138d04928/maintainability\" />\n </a>\n <a href=\"https://codeclimate.com/github/durandtibo/batchtensor/test_coverage\">\n <img src=\"https://api.codeclimate.com/v1/badges/148edc26add138d04928/test_coverage\" />\n </a>\n <br/>\n <a href=\"https://github.com/psf/black\">\n <img alt=\"Code style: black\" src=\"https://img.shields.io/badge/code%20style-black-000000.svg\">\n </a>\n <a href=\"https://google.github.io/styleguide/pyguide.html#s3.8-comments-and-docstrings\">\n <img alt=\"Doc style: google\" src=\"https://img.shields.io/badge/%20style-google-3666d6.svg\">\n </a>\n <a href=\"https://github.com/astral-sh/ruff\">\n <img src=\"https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json\" alt=\"Ruff\" style=\"max-width:100%;\">\n </a>\n <a href=\"https://github.com/guilatrova/tryceratops\">\n <img alt=\"Doc style: google\" src=\"https://img.shields.io/badge/try%2Fexcept%20style-tryceratops%20%F0%9F%A6%96%E2%9C%A8-black\">\n </a>\n <br/>\n <a href=\"https://pypi.org/project/batchtensor/\">\n <img alt=\"PYPI version\" src=\"https://img.shields.io/pypi/v/batchtensor\">\n </a>\n <a href=\"https://pypi.org/project/batchtensor/\">\n <img alt=\"Python\" src=\"https://img.shields.io/pypi/pyversions/batchtensor.svg\">\n </a>\n <a href=\"https://opensource.org/licenses/BSD-3-Clause\">\n <img alt=\"BSD-3-Clause\" src=\"https://img.shields.io/pypi/l/batchtensor\">\n </a>\n <br/>\n <a href=\"https://pepy.tech/project/batchtensor\">\n <img alt=\"Downloads\" src=\"https://static.pepy.tech/badge/batchtensor\">\n </a>\n <a href=\"https://pepy.tech/project/batchtensor\">\n <img alt=\"Monthly downloads\" src=\"https://static.pepy.tech/badge/batchtensor/month\">\n </a>\n <br/>\n</p>\n\n## Overview\n\n`batchtensor` is lightweight library built on top of [PyTorch](https://pytorch.org/) to manipulate\nnested data structure with PyTorch tensors.\nThis library provides functions for tensors where the first dimension is the batch dimension.\nIt also provides functions for tensors representing a batch of sequences where the first dimension\nis the batch dimension and the second dimension is the sequence dimension.\n\n- [Motivation](#motivation)\n- [Documentation](https://durandtibo.github.io/batchtensor/)\n- [Installation](#installation)\n- [Contributing](#contributing)\n- [API stability](#api-stability)\n- [License](#license)\n\n## Motivation\n\nLet's imagine you have a batch which is represented by a dictionary with three tensors, and you want\nto take the first 2 items.\n`batchtensor` provides the function `slice_along_batch` that allows to slide all the tensors:\n\n```pycon\n>>> import torch\n>>> from batchtensor.nested import slice_along_batch\n>>> batch = {\n... \"a\": torch.tensor([[2, 6], [0, 3], [4, 9], [8, 1], [5, 7]]),\n... \"b\": torch.tensor([4, 3, 2, 1, 0]),\n... \"c\": torch.tensor([1.0, 2.0, 3.0, 4.0, 5.0]),\n... }\n>>> slice_along_batch(batch, stop=2)\n{'a': tensor([[2, 6], [0, 3]]), 'b': tensor([4, 3]), 'c': tensor([1., 2.])}\n\n```\n\nSimilarly, it is possible to split a batch in multiple batches by using the\nfunction `split_along_batch`:\n\n```pycon\n>>> import torch\n>>> from batchtensor.nested import split_along_batch\n>>> batch = {\n... \"a\": torch.tensor([[2, 6], [0, 3], [4, 9], [8, 1], [5, 7]]),\n... \"b\": torch.tensor([4, 3, 2, 1, 0]),\n... \"c\": torch.tensor([1.0, 2.0, 3.0, 4.0, 5.0]),\n... }\n>>> split_along_batch(batch, split_size_or_sections=2)\n({'a': tensor([[2, 6], [0, 3]]), 'b': tensor([4, 3]), 'c': tensor([1., 2.])},\n {'a': tensor([[4, 9], [8, 1]]), 'b': tensor([2, 1]), 'c': tensor([3., 4.])},\n {'a': tensor([[5, 7]]), 'b': tensor([0]), 'c': tensor([5.])})\n\n```\n\nPlease check the documentation to see all the implemented functions.\n\n## Documentation\n\n- [latest (stable)](https://durandtibo.github.io/batchtensor/): documentation from the latest stable\n release.\n- [main (unstable)](https://durandtibo.github.io/batchtensor/main/): documentation associated to the\n main branch of the repo. This documentation may contain a lot of work-in-progress/outdated/missing\n parts.\n\n## Installation\n\nWe highly recommend installing\na [virtual environment](https://packaging.python.org/guides/installing-using-pip-and-virtual-environments/).\n`batchtensor` can be installed from pip using the following command:\n\n```shell\npip install batchtensor\n```\n\nTo make the package as slim as possible, only the minimal packages required to use `batchtensor` are\ninstalled.\nTo include all the dependencies, you can use the following command:\n\n```shell\npip install batchtensor[all]\n```\n\nPlease check the [get started page](https://durandtibo.github.io/batchtensor/get_started) to see how\nto install only some specific dependencies or other alternatives to install the library.\nThe following is the corresponding `batchtensor` versions and tested dependencies.\n\n| `batchtensor` | `coola` | `numpy`<sup>*</sup> | `torch` | `python` |\n|---------------|--------------|---------------------|---------------|---------------|\n| `main` | `>=0.1,<1.0` | `>=1.21,<2.0` | `>=1.11,<3.0` | `>=3.9,<3.13` |\n| `0.0.4` | `>=0.1,<1.0` | `>=1.21,<2.0` | `>=1.11,<3.0` | `>=3.9,<3.13` |\n| `0.0.3` | `>=0.1,<1.0` | `>=1.21,<2.0` | `>=1.11,<3.0` | `>=3.9,<3.13` |\n| `0.0.2` | `>=0.1,<1.0` | `>=1.21,<2.0` | `>=1.11,<3.0` | `>=3.9,<3.13` |\n| `0.0.1` | `>=0.1,<0.4` | `>=1.21,<2.0` | `>=1.11,<3.0` | `>=3.9,<3.13` |\n\n<sup>*</sup> indicates an optional dependency\n\n## Contributing\n\nPlease check the instructions in [CONTRIBUTING.md](.github/CONTRIBUTING.md).\n\n## Suggestions and Communication\n\nEveryone is welcome to contribute to the community.\nIf you have any questions or suggestions, you can\nsubmit [Github Issues](https://github.com/durandtibo/batchtensor/issues).\nWe will reply to you as soon as possible. Thank you very much.\n\n## API stability\n\n:warning: While `batchtensor` is in development stage, no API is guaranteed to be stable from one\nrelease to the next.\nIn fact, it is very likely that the API will change multiple times before a stable 1.0.0 release.\nIn practice, this means that upgrading `batchtensor` to a new version will possibly break any code\nthat was using the old version of `batchtensor`.\n\n## License\n\n`batchtensor` is licensed under BSD 3-Clause \"New\" or \"Revised\" license available\nin [LICENSE](LICENSE) file.\n",
"bugtrack_url": null,
"license": "BSD-3-Clause",
"summary": "Functions to manipulate batches of PyTorch tensors",
"version": "0.0.4",
"project_urls": {
"Homepage": "https://github.com/durandtibo/batchtensor",
"Repository": "https://github.com/durandtibo/batchtensor"
},
"split_keywords": [
"batch",
" sequence",
" pytorch",
" tensor"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "e4abdc172cfbf5890ceddcdd4452f4717db68c8cb718b2ba848b3984daa3ea9d",
"md5": "21c17d6a11f22faca82e725c4549a776",
"sha256": "7ff32e16e2aaeb8a20ee352595ea48b0c0636b0b5daa924d0268317d033f3011"
},
"downloads": -1,
"filename": "batchtensor-0.0.4-py3-none-any.whl",
"has_sig": false,
"md5_digest": "21c17d6a11f22faca82e725c4549a776",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": "<3.13,>=3.9",
"size": 38432,
"upload_time": "2024-05-29T04:16:51",
"upload_time_iso_8601": "2024-05-29T04:16:51.628503Z",
"url": "https://files.pythonhosted.org/packages/e4/ab/dc172cfbf5890ceddcdd4452f4717db68c8cb718b2ba848b3984daa3ea9d/batchtensor-0.0.4-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "01da3d3f9314f0715122a4029e514bf467c8ff440403afb02a0a0f2d94157cd1",
"md5": "f12836777f86a8ff4ad79a40a0267d37",
"sha256": "5debfd194b06ad2338cc2d934860ae148afbbfdbfe00dfaae371c3498f49cfbb"
},
"downloads": -1,
"filename": "batchtensor-0.0.4.tar.gz",
"has_sig": false,
"md5_digest": "f12836777f86a8ff4ad79a40a0267d37",
"packagetype": "sdist",
"python_version": "source",
"requires_python": "<3.13,>=3.9",
"size": 26874,
"upload_time": "2024-05-29T04:16:53",
"upload_time_iso_8601": "2024-05-29T04:16:53.044524Z",
"url": "https://files.pythonhosted.org/packages/01/da/3d3f9314f0715122a4029e514bf467c8ff440403afb02a0a0f2d94157cd1/batchtensor-0.0.4.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-05-29 04:16:53",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "durandtibo",
"github_project": "batchtensor",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "batchtensor"
}