======================== Contributing to Project ======================== We welcome contributions to our project! By participating in this project, you agree to abide by the guidelines and rules set forth below. These guidelines will help maintain the quality and consistency of the codebase. Table of Contents ================= 1. `How to Contribute` 2. `Code of Conduct` 3. `Pull Request Process` 4. `Testing and Documentation` 5. `Code Style` How to Contribute ================= We encourage you to contribute in the following ways: 1. **Fork the Repository**: Start by forking the repository to your own GitHub account. 2. **Create a Branch**: Make sure to create a branch for the work you're doing. For example, if you are adding a new feature, name your branch `feature/feature-name`. 3. **Make Changes**: Implement the changes or additions you would like to contribute. Ensure your code follows the existing code style and structure. 4. **Commit and Push**: Commit your changes with descriptive commit messages. Push the changes to your forked repository. 5. **Create a Pull Request**: Once your changes are ready, create a pull request (PR) to merge your branch into the main repository. Please make sure your PR includes a clear description of the changes, including the reasoning for your modification. Code of Conduct =============== We are committed to fostering a welcoming and respectful environment for all contributors. Please be considerate, kind, and respectful in your interactions with others. We follow the [Contributor Covenant Code of Conduct](https://www.contributor-covenant.org/), which you can read more about here. If you experience or witness any behavior that violates this code, please contact the project maintainers. Pull Request Process ==================== 1. **Review the Open Issues**: Before creating a pull request, check if there is an open issue for your change. If there isn't, please create an issue describing your change. 2. **Follow the Issue Template**: If you're submitting a bug fix or new feature, please follow the respective issue template to help maintain consistency. 3. **Ensure Your Code Passes Tests**: Ensure your code passes the automated tests before submitting. This includes writing new tests if necessary. 4. **Request Review**: Once your pull request is created, request a review from the maintainers. Be open to feedback and suggestions. 5. **Merge Your Changes**: After approval, the maintainers will merge your pull request into the main codebase. You can merge your changes if you have permission. Testing and Documentation ========================= - **Automated Testing**: All contributions must pass our automated tests. This helps ensure that no changes break existing functionality. Please run the tests before submitting your pull request. - **New Tests**: If your change introduces new functionality, please write tests for your code. Tests should be added in the appropriate test suite. - **Documentation**: All contributions should include relevant documentation. This includes code comments and updating the project's documentation. Make sure to provide clear explanations for new functions or features. Code Style ========== We use the following guidelines for code style: - **Python Code**: - Follow [PEP 8](https://www.python.org/dev/peps/pep-0008/). - Use 4 spaces per indentation level. - Avoid using `print()` statements for debugging. Use logging or proper exception handling. - **Commit Messages**: - Use clear, concise commit messages. - Start the message with a capital letter. - Use the present tense ("Fix bug" not "Fixed bug"). - Include a description of why the change is needed. - **Docstrings**: - Use docstrings to describe all public functions and classes. - Follow the [Google Style Python Docstrings](https://sphinxcontrib-napoleon.readthedocs.io/en/latest/example_google.html). - **Code Formatting**: - We use `black` to format Python code. Make sure your changes are formatted using `black` before submitting. License ======= By contributing to this project, you agree that your contributions will be licensed under the project's license (typically MIT or similar open-source license). Thank you for contributing to this project!