| # Contributing to SAM3 MLX |
|
|
| Thank you for considering contributing to SAM3 MLX! This document provides guidelines for contributing to the project. |
|
|
| ## Code of Conduct |
|
|
| Be respectful and professional. We're all here to build great software together. |
|
|
| ## How to Contribute |
|
|
| ### Reporting Bugs |
|
|
| If you find a bug, please open an issue with: |
| - Clear description of the problem |
| - Steps to reproduce |
| - Expected vs actual behavior |
| - Your environment (Mac model, macOS version, MLX version) |
| - Error messages and stack traces |
|
|
| ### Suggesting Features |
|
|
| Feature requests are welcome! Please include: |
| - Clear use case |
| - Why this feature would be useful |
| - How it might work |
|
|
| ### Pull Requests |
|
|
| 1. **Fork the repository** |
| ```bash |
| git clone https://github.com/yourusername/sam3-mlx.git |
| cd sam3-mlx |
| ``` |
|
|
| 2. **Create a branch** |
| ```bash |
| git checkout -b feature/your-feature-name |
| ``` |
|
|
| 3. **Make your changes** |
| - Write clear, documented code |
| - Follow the existing code style |
| - Add tests for new functionality |
| - Update documentation as needed |
|
|
| 4. **Test your changes** |
| ```bash |
| # Run tests |
| python tests/test_models.py |
| |
| # Run benchmarks |
| python tests/benchmark.py |
| |
| # Check code style |
| black sam3_mlx/ |
| ruff check sam3_mlx/ |
| ``` |
|
|
| 5. **Commit and push** |
| ```bash |
| git add . |
| git commit -m "Add feature: your feature description" |
| git push origin feature/your-feature-name |
| ``` |
|
|
| 6. **Open a Pull Request** |
| - Describe what you changed and why |
| - Link any related issues |
| - Wait for review |
|
|
| ## Development Setup |
|
|
| ```bash |
| # Clone the repository |
| git clone https://github.com/yourusername/sam3-mlx.git |
| cd sam3-mlx |
| |
| # Install in development mode |
| pip install -e ".[dev]" |
| |
| # Run tests |
| python tests/test_models.py |
| ``` |
|
|
| ## Code Style |
|
|
| - **Python**: Follow PEP 8 |
| - **Line length**: 100 characters |
| - **Formatting**: Use `black` for auto-formatting |
| - **Linting**: Use `ruff` for linting |
| - **Type hints**: Add type hints for function signatures |
|
|
| Example: |
| ```python |
| def process_image(image: mx.array, size: int = 1024) -> mx.array: |
| """ |
| Process image for SAM3 input |
| |
| Args: |
| image: Input image array |
| size: Target size |
| |
| Returns: |
| Processed image |
| """ |
| # Implementation here |
| return processed_image |
| ``` |
|
|
| ## Testing |
|
|
| - Add tests for all new features |
| - Maintain or improve code coverage |
| - Test on actual Apple Silicon hardware when possible |
| - Verify performance benchmarks don't regress |
|
|
| ## Documentation |
|
|
| - Document all public functions and classes |
| - Update README.md for major changes |
| - Add examples for new features |
| - Keep docstrings up to date |
|
|
| ## Performance |
|
|
| - Profile new code for performance |
| - Avoid unnecessary copies with MLX arrays |
| - Use MLX operations instead of numpy when possible |
| - Benchmark performance-critical changes |
|
|
| ## Commit Messages |
|
|
| Write clear commit messages: |
| - Use present tense ("Add feature" not "Added feature") |
| - Keep first line under 72 characters |
| - Add detailed description if needed |
|
|
| Good examples: |
| ``` |
| Add RoPE attention implementation |
| |
| Implements Rotary Position Embeddings for spatial awareness |
| in the vision transformer. |
| ``` |
|
|
| ``` |
| Fix memory leak in mask decoder |
| |
| The transformer was not releasing intermediate tensors, |
| causing memory to grow with each inference. |
| ``` |
|
|
| ## Release Process |
|
|
| Maintainers will: |
| 1. Update version in `pyproject.toml` |
| 2. Update CHANGELOG.md |
| 3. Create a git tag |
| 4. Publish to PyPI |
|
|
| ## Questions? |
|
|
| Open an issue or start a discussion! |
|
|
| ## License |
|
|
| By contributing, you agree that your contributions will be licensed under the MIT License. |
|
|