pax_global_header 0000666 0000000 0000000 00000000064 15241025157 0014514 g ustar 00root root 0000000 0000000 52 comment=8e6bbd971ead7ce64b5a3a9708a3184c7c31ac2c
volio-v0.0.0.dev1-8e6bbd971ead7ce64b5a3a9708a3184c7c31ac2c/ 0000775 0000000 0000000 00000000000 15241025157 0021540 5 ustar 00root root 0000000 0000000 volio-v0.0.0.dev1-8e6bbd971ead7ce64b5a3a9708a3184c7c31ac2c/.gitignore 0000664 0000000 0000000 00000000121 15241025157 0023522 0 ustar 00root root 0000000 0000000 __pycache__/
*.py[cod]
*.egg-info/
.pytest_cache/
build/
dist/
html
doc/generated volio-v0.0.0.dev1-8e6bbd971ead7ce64b5a3a9708a3184c7c31ac2c/.gitlab-ci.yml 0000664 0000000 0000000 00000004442 15241025157 0024200 0 ustar 00root root 0000000 0000000 include:
- project: dau/ci/pyci
file: .gitlab-ci-template.yml
variables:
TOMOBASE_DEP: "git+https://gitlab.esrf.fr/tomotools/tomobase.git"
DISABLE_BLACK_FLAKE8: "yes"
# style/linting
ruff:
extends: .ruff
# tests with dev deps
# tomobase has no PyPI release yet, so every source-based test job must
# install it from git instead of letting pip resolve it from PyPI.
test_python3_12_dev:
extends: .test-3.12_glx
before_script:
- !reference [.test-3.12_glx, before_script]
script:
- echo "Installing $TOMOBASE_DEP"
- python -m pip install $TOMOBASE_DEP
- !reference [.test-3.12_glx, script]
after_script:
- !reference [.test-3.12_glx, after_script]
variables:
COVERAGE_SOURCE: "./$INTERNAL_PROJECT_NAME"
PYTEST_WARNINGS: "-W error ${IGNORE_WARNINGS}"
PYTEST_COV: "true"
# tests with PyPI deps
# NOTE: allowed to fail until `tomobase` gets its first PyPI release - remove
# `allow_failure` once it is published.
test_sdist-3.10_glx:
extends: .test_sdist-3.10_glx
allow_failure: true
variables:
PYTEST_WARNINGS: "-W error ${IGNORE_WARNINGS}"
test_sdist-3.12_glx:
extends: .test_sdist-3.12_glx
allow_failure: true
variables:
PYTEST_WARNINGS: "-W error ${IGNORE_WARNINGS}"
PYTEST_COV: "true"
test_sdist-3.13_glx:
extends: .test_sdist-3.13_glx
allow_failure: true
variables:
PYTEST_WARNINGS: "-W error ${IGNORE_WARNINGS}"
# doc
build_doc:
extends: .build_doc
before_script:
- !reference [.build_doc, before_script]
script:
- echo "Installing $TOMOBASE_DEP"
- python -m pip install $TOMOBASE_DEP
- !reference [.build_doc, script]
after_script:
- !reference [.build_doc, after_script]
build_sdist:
extends: .build_sdist
# test_notebooks
test_tutorials:
extends: .base-lin
stage: test
image: gitlab-registry.esrf.fr/dau/ci/pyci/python_3.12_glx:latest
before_script:
- !reference [.base-lin, before_script]
script:
- !reference [.base-lin, script]
- python -m pip install $TOMOBASE_DEP
- python -m pip install .[doc,test]
- jupyter nbconvert --to notebook --execute doc/tutorials/volume.ipynb
after_script:
- !reference [.base-lin, after_script]
allow_failure: true
# deploy
assets:
extends: .assets
pages:
extends: .pages
testpypi:
extends: .testpypi
pypi:
extends: .pypi
volio-v0.0.0.dev1-8e6bbd971ead7ce64b5a3a9708a3184c7c31ac2c/.readthedocs.yaml 0000664 0000000 0000000 00000001144 15241025157 0024767 0 ustar 00root root 0000000 0000000 # Read the Docs configuration file
# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details
# Required
version: 2
# Set the version of Python and other tools you might need
build:
os: ubuntu-24.04
tools:
python: "3.12"
# Build documentation in the docs/ directory with Sphinx
sphinx:
configuration: doc/conf.py
# If using Sphinx, optionally build your docs in additional formats such as PDF
# formats:
# - pdf
# Optionally declare the Python requirements required to build your docs
python:
install:
- method: pip
path: .
extra_requirements:
- doc
volio-v0.0.0.dev1-8e6bbd971ead7ce64b5a3a9708a3184c7c31ac2c/CHANGELOG.md 0000664 0000000 0000000 00000003052 15241025157 0023351 0 ustar 00root root 0000000 0000000 # Changelog
All notable changes to this project will be documented in this file.
The format follows the [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) conventions and this project adheres to [Semantic Versioning 2.0.0](https://semver.org/spec/v2.0.0.html).
## [0.0.0dev0] - Unreleased
### Added
- Initial extraction of `volio` from `tomoscan` (2.5.1): volume load/save code, now decoupled from scan reading and depending only on `tomobase`.
- `VolumeBase`, `SliceTuple` (from `tomoscan.volumebase`).
- `VolumeSingleFrameBase`, `TIFFLikeDiskAccessor` (from `tomoscan.esrf.volume.singleframebase`).
- `EDFVolume`, `HDF5Volume`, `JP2KVolume`, `RawVolume`, `TIFFVolume`, `MultiTIFFVolume` and their identifiers (`EDFVolumeIdentifier`, `HDF5VolumeIdentifier`, `JP2KVolumeIdentifier`, `RawVolumeIdentifier`, `TIFFVolumeIdentifier`, `MultiTiffVolumeIdentifier`).
- `mock.create_volume` volume-mocking helper.
- `utils` (merged `tomoscan.esrf.volume.utils` and `tomoscan.utils.volume`): `guess_hdf5_volume_data_paths`, `guess_volumes`, `get_most_common_extension`, `group_slices_by_axis`, `concatenate`, `update_metadata`, `rescale_data`.
- `drac` (from `tomoscan.utils.drac`): `flatten_vol_metadata`, `map_nabu_keys_to_drac`.
- `source_scan` (on `VolumeBase` and subclasses) is now typed as `tomobase.tomoobject.TomoObject` instead of `tomoscan.scanbase.TomoScanBase`, so `volio` does not depend on `tomoscan`. `HDF5Volume`'s `get_default_data_path_for_volume` now duck-types on `hasattr(scan, "entry")` instead of an `isinstance(scan, TomoScanBase)` check.
volio-v0.0.0.dev1-8e6bbd971ead7ce64b5a3a9708a3184c7c31ac2c/LICENSE 0000664 0000000 0000000 00000002317 15241025157 0022550 0 ustar 00root root 0000000 0000000
The volio library provides volume load/save for tomography data at ESRF.
volio is distributed under the MIT license.
The MIT license follows:
Copyright (c) European Synchrotron Radiation Facility (ESRF)
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
volio-v0.0.0.dev1-8e6bbd971ead7ce64b5a3a9708a3184c7c31ac2c/README.md 0000664 0000000 0000000 00000001571 15241025157 0023023 0 ustar 00root root 0000000 0000000 # volio

Volume load/save for tomography data at ESRF.
`volio` reads and writes tomography reconstruction volumes stored in several formats:
* HDF5 (`HDF5Volume`)
* single frame EDF (`EDFVolume`)
* single frame or multi-frame TIFF (`TIFFVolume`, `MultiTIFFVolume`)
* JPEG2000 (`JP2KVolume`)
* raw / `.vol` (`RawVolume`)
It also provides utilities to guess volumes from a file or folder, concatenate volumes,
and map reconstruction metadata to the drac/icat data-portal metadata model.
## installation
### using pypi
To install the latest 'volio' pip package
``` bash
pip install volio
```
### using gitlab repository
``` bash
pip install git+https://gitlab.esrf.fr/tomotools/volio.git
```
## documentation
General documentation can be found here: [https://tomotools.gitlab-pages.esrf.fr/volio/](https://tomotools.gitlab-pages.esrf.fr/volio/)
volio-v0.0.0.dev1-8e6bbd971ead7ce64b5a3a9708a3184c7c31ac2c/doc/ 0000775 0000000 0000000 00000000000 15241025157 0022305 5 ustar 00root root 0000000 0000000 volio-v0.0.0.dev1-8e6bbd971ead7ce64b5a3a9708a3184c7c31ac2c/doc/_static/ 0000775 0000000 0000000 00000000000 15241025157 0023733 5 ustar 00root root 0000000 0000000 volio-v0.0.0.dev1-8e6bbd971ead7ce64b5a3a9708a3184c7c31ac2c/doc/_static/custom.css 0000664 0000000 0000000 00000000323 15241025157 0025755 0 ustar 00root root 0000000 0000000 /* compact code blocks nested in table cells (e.g. the identifier examples table) */
.compact-code-table pre {
margin: 0;
padding: 0.35em 0.6em;
}
.compact-code-table td {
vertical-align: middle;
}
volio-v0.0.0.dev1-8e6bbd971ead7ce64b5a3a9708a3184c7c31ac2c/doc/_templates/ 0000775 0000000 0000000 00000000000 15241025157 0024442 5 ustar 00root root 0000000 0000000 volio-v0.0.0.dev1-8e6bbd971ead7ce64b5a3a9708a3184c7c31ac2c/doc/_templates/autosummary/ 0000775 0000000 0000000 00000000000 15241025157 0027030 5 ustar 00root root 0000000 0000000 volio-v0.0.0.dev1-8e6bbd971ead7ce64b5a3a9708a3184c7c31ac2c/doc/_templates/autosummary/class.rst 0000664 0000000 0000000 00000001142 15241025157 0030665 0 ustar 00root root 0000000 0000000 {{ fullname | escape | underline}}
.. currentmodule:: {{ module }}
.. autoclass:: {{ objname }}
:members:
:show-inheritance:
:inherited-members:
{% block methods %}
.. automethod:: __init__
{% if methods %}
.. rubric:: {{ _('Methods') }}
.. autosummary::
{% for item in methods %}
~{{ name }}.{{ item }}
{%- endfor %}
{% endif %}
{% endblock %}
{% block attributes %}
{% if attributes %}
.. rubric:: {{ _('Attributes') }}
.. autosummary::
{% for item in attributes %}
~{{ name }}.{{ item }}
{%- endfor %}
{% endif %}
{% endblock %} volio-v0.0.0.dev1-8e6bbd971ead7ce64b5a3a9708a3184c7c31ac2c/doc/_templates/autosummary/module.rst 0000664 0000000 0000000 00000002145 15241025157 0031051 0 ustar 00root root 0000000 0000000 {{ fullname | escape | underline}}
.. automodule:: {{ fullname }}
{% block attributes %}
{% if attributes %}
.. rubric:: Module Attributes
.. autosummary::
:toctree:
{% for item in attributes %}
{{ item }}
{%- endfor %}
{% endif %}
{% endblock %}
{% block functions %}
{% if functions %}
.. rubric:: {{ _('Functions') }}
.. autosummary::
:toctree:
{% for item in functions %}
{{ item }}
{%- endfor %}
{% endif %}
{% endblock %}
{% block classes %}
{% if classes %}
.. rubric:: {{ _('Classes') }}
.. autosummary::
:toctree:
{% for item in classes %}
{{ item }}
{%- endfor %}
{% endif %}
{% endblock %}
{% block exceptions %}
{% if exceptions %}
.. rubric:: {{ _('Exceptions') }}
.. autosummary::
:toctree:
{% for item in exceptions %}
{{ item }}
{%- endfor %}
{% endif %}
{% endblock %}
{% block modules %}
{% if modules %}
.. rubric:: Modules
.. autosummary::
:toctree:
:recursive:
{% for item in modules %}
{{ item }}
{%- endfor %}
{% endif %}
{% endblock %} volio-v0.0.0.dev1-8e6bbd971ead7ce64b5a3a9708a3184c7c31ac2c/doc/_templates/version.html 0000664 0000000 0000000 00000000100 15241025157 0027004 0 ustar 00root root 0000000 0000000
{{ version }} volio-v0.0.0.dev1-8e6bbd971ead7ce64b5a3a9708a3184c7c31ac2c/doc/api.rst 0000664 0000000 0000000 00000000136 15241025157 0023610 0 ustar 00root root 0000000 0000000 API reference
=============
.. autosummary::
:toctree: generated
:recursive:
volio
volio-v0.0.0.dev1-8e6bbd971ead7ce64b5a3a9708a3184c7c31ac2c/doc/conf.py 0000664 0000000 0000000 00000003337 15241025157 0023612 0 ustar 00root root 0000000 0000000 from importlib.metadata import version as get_version
extensions = [
"sphinx.ext.autodoc",
"sphinx.ext.intersphinx",
"sphinx.ext.autosummary",
"sphinx_design",
"nbsphinx",
"sphinx_autodoc_typehints",
"myst_parser",
"sphinx_copybutton",
]
nbsphinx_timeout = 60
nbsphinx_allow_errors = True
templates_path = ["_templates"]
source_suffix = {
".rst": "restructuredtext",
".md": "markdown",
}
master_doc = "index"
project = "volio"
copyright = "2026, ESRF"
author = "ESRF"
release = get_version(project)
version = ".".join(release.split(".")[:2])
language = "en"
exclude_patterns = [
"build",
"**.ipynb_checkpoints",
]
pygments_style = "sphinx"
todo_include_todos = False
html_theme = "pydata_sphinx_theme"
html_logo = "img/volio.png"
html_static_path = ["_static"]
html_css_files = ["custom.css"]
htmlhelp_basename = "volio"
man_pages = [(master_doc, "volio", "volio documentation", [author], 1)]
autosummary_generate = True
autodoc_default_flags = [
"members",
"undoc-members",
"show-inheritance",
]
html_theme_options = {
"icon_links": [
{
"name": "pypi",
"url": "https://pypi.org/project/volio",
"icon": "_static/navbar_icons/pypi.svg",
"type": "local",
},
{
"name": "gitlab",
"url": "https://gitlab.esrf.fr/tomotools/volio",
"icon": "_static/navbar_icons/gitlab.svg",
"type": "local",
},
],
"show_toc_level": 1,
"navbar_align": "left",
"show_version_warning_banner": True,
"navbar_start": ["navbar-logo", "version"],
"navbar_center": ["navbar-nav"],
"footer_start": ["copyright"],
"footer_center": ["sphinx-version"],
}
volio-v0.0.0.dev1-8e6bbd971ead7ce64b5a3a9708a3184c7c31ac2c/doc/img/ 0000775 0000000 0000000 00000000000 15241025157 0023061 5 ustar 00root root 0000000 0000000 volio-v0.0.0.dev1-8e6bbd971ead7ce64b5a3a9708a3184c7c31ac2c/doc/img/volio-lockup.svg 0000664 0000000 0000000 00000001102 15241025157 0026217 0 ustar 00root root 0000000 0000000
volio-v0.0.0.dev1-8e6bbd971ead7ce64b5a3a9708a3184c7c31ac2c/doc/img/volio.png 0000664 0000000 0000000 00000003655 15241025157 0024730 0 ustar 00root root 0000000 0000000 ‰PNG
IHDR d d pâ•T pHYs à ÃÇo¨d tEXtSoftware www.inkscape.org›î< :IDATxœí�OlÕÇ?¿Ùu)
´uQrÈ!ErR„Œ¸`€w
!&ª*zÀQ¬dƒ�Å!%Fá‰Kˆˆe�M[¤&·˜D•zŠ�RÉm)Q"P›¼»óã°2Ø^{³»ófÞ›Ýùœwç=ëë÷çóÞÏcQUÜÁ³Ý�„¥$�8Fˆc¤mw (òþŸÚðüà kñ‹}úÔSÛîS$®‹º|øa+ùüÊøéËÇóúµ»û+›ý«—Ø"|°ŸçAsÀ«|ìÊn\?¤»v݈²A‰U 29Ù…êQ�;ªûs¨’ÍŽ)Äâ�E 21ÑŽÊ›÷×ùˆi<Ù«ÝÝ3Ú±p:ÿó&Òùƒ ; 1ðÄÓS½úôã_V88ˆŒ�£ågû^Ö~ü<ÂÛˆiw÷·†Ÿ§‘\ΣmÈÀÆPS® 2†ێéBm«œ D&';Qýu´-ë,"ýšÉœŠ¶Ý•±È"±{ÔjG`ʱ´È*bgëby UŠ�m¬‰e¤�Ô,v¶± –‘b@ìl™X†ˆy±³MøbJ !‹�mBK£�D*v¶ I,�bOìlcV,“+\Ç0ˆf2SÌþýnÐg�XÞÖÕ„rd6l3yì’,굟E½ìáɶ·ö1¬ŠÆÃ²Æ’£“›é.K3™SxÞ�=€s·u‹¸†’ãúõ͚͞Œ²@"9~_Jó¿—u ¹ Z‚õ@H®pK8cêu‹å÷óðÏÃ¥Á�ùGì‚âÌYLUbY(Âå«põ[Xü3üüØØ
éU—¥¤¨^VKU¸ú
|}ŠþÊ_ô~õ¸í— ‹}4)”3Â�bù¿k÷óŸË�ÏW÷ÅtKi´Üº~šTw†T±Oß{·ìp®‘ÅP¶w´�wXg>ê2Ò’Á@ðÇ÷ûuòDÙ:ÒHG'rog+EJ‡£:sÖÈ`z—å¡ú"ŸKv÷~ééY²~è�ÁS´¶€º_Û‹æHç7ë«'‡!wfÖÈöŽ^ŠþEàŸT›!Ë™Cd�‰wÆtYCq<~—ß<Ô…èQ(á¦FHØ�,0�Ê^�<^>Çà‚JîélÇ÷+®�q¤„r_zõ�ÇËv).^áÊ}›ÈËAäæ»DW×�Ê�’ÒHö¹·$óû%—SÄrU±“»Y'íí§ Ÿ!