Contributing to StreamPoseML
========================
We're excited that you're interested in contributing to StreamPoseML! This guide will help you get started as a contributor.
Ways to Contribute
----------------
There are many ways to contribute to StreamPoseML:
* **Code**: Fix bugs, implement new features, or improve performance
* **Documentation**: Help improve or translate documentation
* **Testing**: Create tests or report bugs
* **Examples**: Share your use cases or implementation examples
* **Research**: Cite us in your research or suggest new features based on research needs
Getting Started
-------------
Setting Up Your Development Environment
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. **Fork the repository** on GitHub
2. **Clone your fork**:
.. code-block:: bash
git clone https://github.com/YOUR-USERNAME/StreamPoseML.git
cd StreamPoseML
3. **Set up a virtual environment** (recommended):
.. code-block:: bash
# Create a virtual environment
python -m venv venv
# Activate it (Linux/Mac)
source venv/bin/activate
# Or on Windows
venv\\Scripts\\activate
4. **Install in development mode**:
.. code-block:: bash
# Install with development dependencies
pip install -e .[dev]
# Run setup.py to set paths correctly
python setup.py
Development Workflow
------------------
We follow the `GitHub Flow `_ workflow:
1. **Create a feature branch** from ``main``
.. code-block:: bash
git checkout main
git pull origin main
git checkout -b feature/your-feature-name
2. **Write your code and tests**
Make your changes, following our coding standards (we use Black for formatting).
Add or modify tests as needed.
3. **Run tests locally**
.. code-block:: bash
# Run all tests
make test
# Format your code
make lint
4. **Commit your changes**
Use clear, descriptive commit messages that explain what you've changed and why.
5. **Submit a pull request**
* Push your branch to your fork
* Create a pull request against the main repository's ``main`` branch
* Fill out the pull request template with all relevant information
6. **Address review feedback**
Respond to any feedback from maintainers and make necessary changes.
7. **Your PR gets merged!**
Coding Standards
--------------
* We use **Black** for code formatting
* Follow Python's `PEP 8 `_ style guide
* Write clear docstrings in the `NumPy format `_
* Include type hints where appropriate
* Update documentation for new features or changes
Testing
------
All new code should include appropriate tests:
* **Unit tests** for individual functions and classes
* **Integration tests** for component interactions
* **End-to-end tests** for complete workflows
Run tests using pytest:
.. code-block:: bash
# Run all tests
make test
# Run specific test files
pytest stream_pose_ml/tests/path/to/test_file.py
# Run with coverage
pytest --cov=stream_pose_ml
Documentation
-----------
Good documentation is crucial for usability:
* **Update existing docs** when changing functionality
* **Add new documentation** for new features
* **Create examples** to demonstrate usage
To build and view the documentation:
.. code-block:: bash
# Build docs
make docs
# View in browser
open docs/build/html/index.html
First-time Contributors
--------------------
If this is your first contribution to StreamPoseML:
1. Look for issues labeled ``good first issue`` on our `issues page `_
2. Introduce yourself in the issue comments and express your interest
3. A maintainer will help guide you through your first contribution
Need Help?
---------
If you have questions or need assistance:
* Ask questions in the GitHub issue for your feature
* Join our community discussions (if applicable)
* Reach out to the maintainers directly
License
------
By contributing to StreamPoseML, you agree that your contributions will be licensed under the project's `MIT License `_.