Skip to content

pymmcore-plus/pymmcore-nano

Repository files navigation

pymmcore-nano

License PyPI Python Version CI codecov

Experimental python bindings for CMMCore (the device abstraction layer for micro-manager) using nanobind instead of SWIG.

This package can be used as a drop-in replacement for pymmcore. There are a few slight differences in behavior. You are encouraged to try it where you might use pymmcore; and let us know if you run into any issues!

Installation

pip install pymmcore-nano

# optionally include device adapters commonly used for demos and testing
# (DemoCamera, Utilities, etc...)
pip install 'pymmcore-nano[test-devices]'

Versioning is the same as for pymmcore.

MMCoreMajor.MMCoreMinor.MMCorePatch.DeviceInterface.pymmcore-nano-build

For example, the version 11.3.0.71.2 refers to:

  • MMCore version 11.3.0
  • Device interface 71
  • pymmcore-nano build number of 2 (this is a zero indexed version that resets each time the MMCore or Device Interface versions increment)

For Developers

Clone repo

git clone https://github.com/pymmcore-plus/pymmcore-nano.git
cd pymmcore-nano

Setup dev environment (editable install)

Make sure you have uv installed: https://docs.astral.sh/uv/getting-started/installation/

This project uses just as a task runner. If you have just installed (e.g. brew install just), you can fully setup the project with:

just install

If you prefer not to install just globally, you can install it with the rest of the project dependencies using uv. Then activate the environment and call just install

uv sync --no-install-project
. .venv/bin/activate  # Windows: .venv\Scripts\activate
just install

Note that one of the dev dependencies is mm-test-adapters, this brings in a few device adapters that are useful for testing purposes. (The version of mm-test-adapters should match the device interface version you are building against.)

Test

Regardless of whether the environment is active, you can run:

just test

or, if the environment is active and you have already run just install

pytest

Releasing

To release a new version:

  • update the PYMMCORE_NANO_VERSION value in _pymmcore_nano.cc
  • run just version
  • commit changes to main
  • run just release

Updating MMCore and MMDevice

The versions of MMCore and MMDevice that this project builds against are pinned in the subprojects/mmcore.wrap and subprojects/mmdevice.wrap files, respectively. To build against a new version, update the revision field in the appropriate wrap file and re-run just install.

For version changes that bump the Device Interface version, you will also want to update the version of mm-test-adapters in the pyproject.toml file.

About

Python bindings for CMMCore (micro-manager) using nanobind instead of SWIG

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •