pyobjcryst is a Python binding (via Boost.Python) of the ObjCryst++ C++
library. It is built and maintained with
scikit-package, which
provides the release scripts, CI workflows, and changelog tooling used here.
The C++ bindings live under src/extensions/; pure-Python wrappers and
utilities are in src/pyobjcryst/. Tests live in tests/.
vincefn/objcryst ← real upstream (C++ library, GUI, Fox)
↓
diffpy/libobjcryst ← repackages ObjCryst++ as a shared library for conda/pip
↓
diffpy/pyobjcryst ← Python bindings (this repo)
Any C++ feature or fix must flow through the full chain before it can land here:
- Implement or fix it in vincefn/objcryst.
- Pick it up in diffpy/libobjcryst (libobjcryst is a convenience repackaging — updating the vendored sources and cutting a release is usually all that is needed).
- Only then expose or rely on it in pyobjcryst.
If a PR here is blocked on an upstream change, note the upstream issue/PR in the description and news item.
- Always branch from
main. - Use Conventional Commits prefixes:
fix:,feat:,docs:,refactor:,test:,chore:, etc. - Keep commits focused and atomic.
- Make sure
git config user.emailis a verified address on the author's GitHub account so commits are attributed correctly.
- Where possible, make the code conform to Billinge group coding standards. These can be found in the documentation of scikit-package
- News item — every PR that changes user-visible behaviour must add a
file
news/<PR-number>.rstfollowingnews/TEMPLATE.rst(sections:Added,Changed,Deprecated,Removed,Fixed,Security; leave unused sections as* <news item>). Thecheck-news-itemCI job (provided by scikit-package release scripts) enforces this. - Do not edit
CHANGELOG.rstdirectly — it is auto-generated from thenews/items at release time by the scikit-package tooling. - Run the test suite locally before pushing if possible:
pytest tests/
| Workflow | Trigger | What it does |
|---|---|---|
tests-on-pr |
every PR | Builds the C extension and runs the full test suite |
check-news-item |
every PR | Verifies a news/<PR-number>.rst file exists |
Both workflows are provided by scikit-package/release-scripts.
PRs must never be auto-merged. Every PR requires at least one human
review and approval before merging, regardless of CI status.
Do not use gh pr merge --auto or any equivalent automated merge on this
repository.
- Do not force-push to
main. - Do not bypass CI or skip the news-item requirement.
- Do not merge PRs autonomously — always leave them open for human review.
- Do not commit secrets, credentials, or large binary files.
- Do not expose a new C++ feature in pyobjcryst before it is available in a released version of diffpy/libobjcryst.