Contributing ============ We welcome contributions to AccelForge! This guide outlines the standards and practices for contributing to the project. Code Formatting --------------- All Python code should be formatted using `Black `_ with a line length of 88 characters (Black's default). To format your code, install Black and run: .. code-block:: bash pip install black black . You can also set up your editor to format on save, or add a pre-commit hook to automatically format your code before committing. Type Hints ---------- All functions and methods should include type hints for parameters and return values. This improves code clarity and enables better IDE support and static analysis. Example: .. code-block:: python def calculate_energy( operations: int, energy_per_op: float, voltage: float = 1.0 ) -> float: """Calculate total energy consumption. Args: operations: Number of operations performed energy_per_op: Energy consumed per operation (pJ) voltage: Operating voltage (V) Returns: Total energy consumed (pJ) """ return operations * energy_per_op * (voltage ** 2) Documentation ------------- All public functions, classes, and modules should include docstrings that clearly explain their purpose, parameters, and return values. We use `Google-style docstrings `_. Documentation should include: - **Module docstrings**: Brief description of the module's purpose - **Class docstrings**: Purpose of the class and any important attributes - **Function/method docstrings**: - Brief description - Args section describing each parameter - Returns section describing the return value - Raises section for any exceptions (if applicable) - Examples section for complex functionality (if helpful) Building the Documentation --------------------------- Before submitting a pull request, ensure that the documentation builds without errors. To build the documentation: .. code-block:: bash cd docs make html The documentation will be built in ``docs/build/html/``. Open ``docs/build/html/index.html`` in your browser to view the results. **Important**: The build should complete with zero errors. Warnings should also be minimized where possible. If you add new modules or modify docstrings, verify that: - All cross-references resolve correctly - Code examples render properly - API documentation is complete - No broken links exist Testing ------- Before submitting changes, run the test suite to ensure your modifications don't break existing functionality: .. code-block:: bash python3 -m unittest ./tests/*.py Add tests for any new functionality you introduce. Pull Request Process -------------------- 1. Fork the repository and create a new branch for your changes 2. Make your changes following the guidelines above 3. Format your code with Black 4. Build the documentation and verify it's error-free 5. Run the test suite 6. Submit a pull request with a clear description of your changes Your pull request should: - Have a descriptive title - Include a summary of the changes and motivation - Reference any related issues - Include tests for new functionality - Pass all CI checks