pmotools
A collection of tools to interact with the portable microhaplotype object (PMO) file format.
Documentation on the format and pmotools-python, including detailed tutorials can be found here.
The manual for pmotools-python can be found here.
Installation
Requires Python 3.11+.
pip install pmotools
This installs the pmotools-python command-line tool and the pmotools Python library.
Usage
pmotools-python can be used from the command line or imported as a Python library.
Command line
After installation, the pmotools-python command is available:
pmotools-python --help
pmotools-python validate_pmo --help
Examples:
pmotools-python validate_pmo --pmo my_data.pmo.json
pmotools-python combine_pmos --pmo_files run1.pmo.json run2.pmo.json --output combined.pmo.json
Commands are grouped by task:
| Group | Purpose |
|---|---|
convertors_to_json |
Convert tables and metadata into PMO inputs |
extractors_from_pmo |
Subset PMOs by metadata, samples, targets, or read counts |
pmo_to_table |
Export PMO contents to spreadsheets or other formats |
extract_basic_info_from_pmo |
Inspect metadata and counts |
working_with_multiple_pmos |
Combine PMOs |
validation |
Validate PMO files against the JSON schema |
See the command-line manual for full documentation of each command.
Python library
Import pmotools in your own code to read, validate, write, and build PMO files:
from pmotools.pmo_engine.pmo_reader import PMOReader
from pmotools.pmo_engine.pmo_checker import PMOChecker
pmo = PMOReader.read_in_pmo("example.pmo.json")
checker = PMOChecker()
checker.validate_pmo_json(pmo)
Core modules:
pmotools.pmo_engine— read, write, validate, and export PMOspmotools.pmo_builder— build PMOs from tables and metadatapmotools.scripts— the same logic used by the CLI
See the API reference for module-level documentation.
Auto completion
To enable bash tab completion for pmotools-python, append the script from etc/bash_completion to your ~/.bash_completion, or generate it with:
pmotools-python --bash-completion >> ~/.bash_completion
source ~/.bash_completion
Developer Setup
To contribute to pmotools, follow these steps:
- Clone the repository and switch to the develop branch:
git clone git@github.com:your-org/pmotools.git
cd pmotools
git checkout develop
- Create your feature branch:
git checkout -b feature/my-feature
- Install and set up UV. This creates .venv/ and installs everything from pyproject.toml:
pip install -U uv
uv sync --dev
- Install pre-commit hooks (for formatting & linting):
uv run pre-commit install
- Run pre-commit manually on all files (first time):
uv run pre-commit run --all-files
- Develop your code. Pre-commit will automatically run on staged files before each commit, checking:
- Formatting (Ruff)
- Linting (Ruff)
- Trailing whitespace, YAML syntax, large files
- Run tests:
uv run pytest
- Commit and push your changes:
git add .
git commit -m "Your message"
git push origin feature/my-feature
Documentation updating
Documentation for pmotools is automatically generated from docstring under man/. This is automatically built and deployed through GitHub actions on merging to main.
You should check documentation before deployment. To update the documentation locally make sure you have pmotools-python installed.
Next, from your development environment, install sphinx and its dependencies using the following command:
pip install -r man/requirements.txt
Build the documentation using the following commands
cd man
make update_autodocs
make html
You can open the html to review changes.
Releasing pmotools-python
To release pmotools-python you need to update version in pyproject.toml, adhering to semantic versioning conventions.
Note: It is not always the case, but sometimes a release of pmotools-python will coincide with a new schema version. See the section below for notes on updating the schema version.
Once you have merged these updates into the main branch, create a new release with notes. GitHub actions will automatically deploy to PyPi.
Updating the schema version
You can release pmotools-python without updating the schema version. However, for the schema to be updated and become the default within pmotools-python, you must update the schema and then do a release of pmotools-python by following the instructions above.
Update __schema_version__ in src/pmotools/__init__.py to the new version of the schema. Do not include the v here (e.g. 1.0.0 not v1.0.0).
Release files for pmotools 1.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| pmotools-1.1.0.tar.gz | 105.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| pmotools-1.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 231.4 kB
Release files / pmotools-1.1.0.tar.gz
| Download URL | pmotools-1.1.0.tar.gz |
|---|---|
| Size | 105.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
84f0064eabaa9f470677641264216ede0ee9528a91ce67f11948654cc0edce93
|
|
BLAKE2b-256 checksum How to use checksums |
45c032db8ddf94ba863e98b41979e213fc9c82c810a2db970a35859c01ecc81d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.19 {"installer":{"name":"uv","version":"0.11.19","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 / pmotools-1.1.0-py3-none-any.whl
| Download URL | pmotools-1.1.0-py3-none-any.whl |
|---|---|
| Size | 126.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
ce5ce474eb708970447908fb1584919e932b98a7469de964ea53a110dcc2a016
|
|
BLAKE2b-256 checksum How to use checksums |
c5efd1691a2b08304d54791d9175534984cabb2c71801980b61c4f8bc5856beb
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.19 {"installer":{"name":"uv","version":"0.11.19","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}
|