Skip to main content

NImA-io

PyPI CI codecov

This is a helper library designed for reading microscopy data supported by Bioformats using Python. The package also includes a command-line interface for assessing differences between images.

Features / Description

Despite the comprehensive python-bioformats package, Bioformats reading in Python is not flawless. To assess correct reading and performance, I gathered a set of test input files from real working data and established various approaches for reading them:

  1. Utilizing the external "showinf" and parsing the generated XML metadata.
  2. Employing out-of-the-box python-bioformats.
  3. Leveraging bioformats through the Java API.
  4. Combining python-bioformats with Java for metadata (Download link: bio-formats 5.9.2).

At present, Solution No. 4 appears to be the most effective.

It's important to note that FEI files are not 100% OME compliant, and understanding OME metadata can be challenging. For instance, metadata.getXXX is sometimes equivalent to metadata.getRoot().getImage(i).getPixels().getPlane(index).

The use of parametrized tests enhances clarity and consistency. The approach of returning a wrapper to a Bioformats reader enables memory-mapped (a la memmap) operations.

Notebooks are included in the documentation tutorials to aid development and illustrate usage. Although there was an initial exploration of the TileStitch Java class, the decision was made to implement TileStitcher in Python.

Future improvements can be implemented in the code, particularly for the multichannel OME standard example, which currently lacks obj or resolutionX metadata. Additionally, support for various instrument, experiment, or plate metadata can be considered in future updates.

Installation

System requirements:

  • maven

From PyPI

Using pip:

pip install nima_io

Recommended: Using pipx

For isolated installation (recommended):

pipx install nima_io

Shell Completion

Bash

_IMGDIFF_COMPLETE=bash_source imgdiff > ~/.local/bin/imgdiff-complete.bash
source ~/.local/bin/imgdiff-complete.bash
# Add to your ~/.bashrc to make it permanent:
echo 'source ~/.local/bin/ingdiff-complete.bash' >> ~/.bashrc

Fish:

_IMGDIFF_COMPLETE=fish_source imgdiff | source
# Add to fish config to make it permanent:
_IMGDIFF_COMPLETE=fish_source imgdiff > ~/.config/fish/completions/imgdiff.fish

Usage

Docs: https://{{ cookiecutter.project_slug }}.readthedocs.io/

CLI

imgdiff --help

Python

from nima_io import read

Development

Requires Python uv.

With uv:

# one-time
pre-commit install
# dev tools and deps
uv sync --group dev
# lint/test
uv run ruff check .  (or: make lint)
uv run pytest -q  (or: make test)

Update and initialize submodules

git submodule update --init --recursive

Navigate to the tests/data/ directory:

cd tests/data/
git co master

Configure Git Annex for SSH caching:

git config annex.sshcaching true

Pull the necessary files using Git Annex:

git annex pull

These commands set up the development environment and fetch the required data for testing.

Modify tests/data.filenames.txt and tests/data.filenames.md5 as needed and run:

cd tests
./data.filenames.sh

We use Renovate to keep dependencies current.

Dependency updates (Renovate)

Enable Renovate:

  1. Install the GitHub App: https://github.com/apps/renovate (Settings → Integrations → GitHub Apps → Configure → select this repo/org).
  2. This repo includes a renovate.json policy. Renovate will open a “Dependency Dashboard” issue and PRs accordingly.

Notes:

  • Commit style: build(deps): bump <dep> from <old> to <new>
  • Pre-commit hooks are grouped and labeled; Python version bumps in pyproject.toml are disabled by policy.

Migrating from Dependabot:

  • You may keep “Dependabot alerts” ON for vulnerability visibility, but disable Dependabot security PRs.

Template updates (Cruft)

This project is linked to its Cookiecutter template with Cruft.

  • Check for updates: cruft check
  • Apply updates: cruft update -y (resolve conflicts, then commit)

CI runs a weekly job to open a PR when template updates are available.

First-time setup if you didn’t generate with Cruft:

pipx install cruft  # or: pip install --user cruft
cruft link --checkout main https://github.com/darosio/cookiecutter-python.git

Notes:

  • The CI workflow skips if .cruft.json is absent.
  • If you maintain a stable template branch (e.g., v1), link with --checkout v1. You can also update within that line using cruft update -y --checkout v1.

License

We use a shared copyright model that enables all contributors to maintain the copyright on their contributions.

All code is licensed under the terms of the revised BSD license.

Contributing

If you are interested in contributing to the project, please read our contributing and development environment guides, which outline the guidelines and conventions that we follow for contributing code, documentation, and other resources.

Metadata

Release files for nima_io 0.4.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for nima_io 0.4.2
File Size Uploaded
nima_io-0.4.2.tar.gz 334.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for nima_io 0.4.2
File Interpreter ABI Platform
nima_io-0.4.2-py3-none-any.whl Python 3 none any Details

Total release size: 346.5 kB

Release files / nima_io-0.4.2.tar.gz

Download URL nima_io-0.4.2.tar.gz
Size 334.3 kB
Tags Source
SHA-256 checksum
How to use checksums
ad712ef689fa8173427cc44a1510cf72f608ac757c8285b3a0ee21cf1e3094fb
BLAKE2b-256 checksum
How to use checksums
05e554849e1c37be6c205478edcec396c6615dd05ede18e32af758a042fd44f5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.10.4 {"installer":{"name":"uv","version":"0.10.4","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / nima_io-0.4.2-py3-none-any.whl

Download URL nima_io-0.4.2-py3-none-any.whl
Size 12.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
a291c4ea16f1ed04281d3aaa20027ddc4a8674e258b3f86726f374f35f0c9b3e
BLAKE2b-256 checksum
How to use checksums
686aeb015325498142ad36e652eae7d6df00d0de105be0ef867d7685c7090843
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.10.4 {"installer":{"name":"uv","version":"0.10.4","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release history Release notifications | RSS feed

This release

0.4.2 This release

2 release files

0.4.1

2 release files

0.4.0

2 release files

0.3.12

2 release files

0.3.11

2 release files

0.3.9

2 release files

0.3.8

2 release files

0.3.7

2 release files

0.3.6

2 release files

0.3.5

2 release files

0.3.4

2 release files

0.3.3

2 release files

0.3.2

2 release files

0.3.1

2 release files

0.3.0

2 release files

0.2.0

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page