Contributing¶
Contributions are welcomed via pull requests on GitHub. Contact the HOOMD-blue developers before starting work to ensure it meshes well with the planned development direction and standards set for the project.
Features¶
Implement functionality in a general and flexible fashion¶
New features should be applicable to a variety of use-cases. The HOOMD-blue developers can assist you in designing flexible interfaces.
Maintain performance of existing code paths¶
Expensive code paths should only execute when requested.
Optimize for the current GPU generation¶
Write, test, and optimize your GPU kernels on the latest generation of GPUs.
Version control¶
Base your work off the correct branch¶
Base backwards compatible bug fixes on
trunk-patch
.Base additional functionality on
trunk-minor
.Base API incompatible changes on
trunk-major
.
Agree to the Contributor Agreement¶
All contributors must agree to the Contributor Agreement before their pull request can be merged.
Source code¶
Use a consistent style¶
The Code style section of the documentation sets the style guidelines for HOOMD-blue code.
Document code with comments¶
Use doxygen header comments for classes, functions, etc. Also comment complex sections of code so that other developers can understand them.
Compile without warnings¶
Your changes should compile without warnings.
Tests¶
Write unit tests¶
Add unit tests for all new functionality.
Validity tests¶
The developer should run research-scale simulations using the new functionality and ensure that it behaves as intended.
User documentation¶
Write user documentation¶
Document public-facing API with Python docstrings in Google style.
Document version status¶
Add versionadded, versionchanged, and deprecated Sphinx directives to each user-facing Python class, method, etc., so that users will be aware of how functionality changes from version to version. Remove this when breaking APIs in major releases.
Add developer to the credits¶
Update the credits documentation to list the name and affiliation of each individual that has contributed to the code.
Propose a change log entry¶
Propose a concise entry describing the change in CHANGELOG.rst
.