Experimental python bindings for CMMCore (the device abstraction layer for micro-manager) using nanobind.
This package can be used as a (mostly) 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!
pip install pymmcore-nano
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)
git clone https://github.com/pymmcore-plus/pymmcore-nano.git
git submodule update --init
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
This repo contains a few device adapters that are useful for testing, in src/mmCoreAndDevices/DeviceAdapters. These adapters are built as a part of the installation.
On windows, in order to build the SequenceTester device (optional) you will also
need boost installed (e.g. choco install boost-msvc-14.3
, or similar version
according to your version of visual studio)
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
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
Rather than using git submodules, this repository checks in the
mmCoreAndDevices
source
code. This makes measuring C++ code coverage easier, as the mmCoreAndDevices
code is included in the same repository (see codecov results
here),
and it also makes it easier to make changes to the mmCoreAndDevices
code
directly from this repository (e.g., to fix bugs or add features that are
pending in the upstream repo).
To bring in new changes from the upstream mmCoreAndDevices
repository, you can
run:
python scripts/update_sources.py
After updating, you can test the build and python code as usual.
just build
pytest