Contributing
============
AtomVoxelizer is primarily managed by `Tristan Maxson
`_. Open contributions are welcome,
especially focused bug fixes, documentation improvements, tests, and small
features that fit the existing API.
Project Links
-------------
Use these links when working with the project:
.. list-table::
:header-rows: 1
* - Resource
- Link
* - Source repository and merge requests
- https://gitlab.com/tgmaxson/atomvoxelizer
* - Issues
- https://gitlab.com/tgmaxson/atomvoxelizer/-/issues
* - PyPI package
- https://pypi.org/project/AtomVoxelizer/
* - Documentation
- https://atomvoxelizer.readthedocs.io/en/latest/index.html
* - Zenodo record
- https://zenodo.org/records/15479550
Reporting Issues
----------------
Open an issue on GitLab for bugs, confusing behavior, documentation problems,
or feature proposals. A useful issue includes:
* Operating system
* Python version
* AtomVoxelizer version
* Minimal reproducible example
* Complete error traceback, if there is one
For larger changes, open an issue first so the scope can be discussed before
implementation work begins.
Development Setup
-----------------
Clone the GitLab repository and install the package in editable mode with the
development dependencies:
.. code-block:: bash
git clone https://gitlab.com/tgmaxson/atomvoxelizer.git
cd atomvoxelizer
pip install -e ".[dev]"
Run the test suite before submitting a merge request:
.. code-block:: bash
pytest tests/
Run tests with the same coverage output used by GitLab CI:
.. code-block:: bash
pytest --cov=atomvoxelizer --cov-report=term-missing --cov-report=xml:coverage.xml tests/
Build the documentation locally when changing documentation or public APIs:
.. code-block:: bash
sphinx-build -b html docs/source docs/build/html
Contribution Guidelines
-----------------------
Please keep merge requests focused on one bug fix, feature, or documentation
change. Clear, small changes are easier to review and maintain.
Code changes should follow the existing style in the repository. Add tests for
new behavior, update documentation when user-facing behavior changes, and avoid
adding required dependencies unless they are necessary for the core NumPy
backend. Optional acceleration and analysis packages should stay optional.
All submitted code is reviewed before acceptance. Review may cover correctness,
maintainability, tests, documentation, dependency choices, and consistency with
the package API. Contributors should expect requested revisions before a merge
request is accepted.
AI-assisted development tools, including tools such as Claude Code and Codex,
are generally permitted. Contributors remain responsible for the submitted
code, tests, documentation, and licensing. AI-assisted changes should follow
the same style and quality expectations as any other contribution, and should
not introduce unrelated rewrites, unexplained complexity, or generated code
that cannot be reviewed and maintained.
Merge Requests
--------------
Before opening a merge request:
* Rebase or merge the latest ``main`` branch.
* Run ``pytest tests/``.
* Build the documentation if docs or API behavior changed.
* Write a short description of the change and the verification performed.
Contributors
------------
This list can be updated as people contribute code, tests, documentation,
examples, or review:
.. list-table::
:header-rows: 1
* - Contributor
- Role
* - `Tristan Maxson `_
- Primary maintainer
Release Checklist
-----------------
Releases are built from the GitLab repository using the standard
``pyproject.toml`` build workflow. Before publishing a release, run the CPU
tests and rebuild the documentation:
.. code-block:: bash
pytest
sphinx-build -b html docs/source docs/build/html
Build and check the source distribution and wheel:
.. code-block:: bash
python -m build
twine check dist/*
Upload to TestPyPI first when validating package metadata or dependency
changes:
.. code-block:: bash
twine upload --repository testpypi dist/*
Then upload the checked artifacts to PyPI:
.. code-block:: bash
twine upload dist/*