# Contributing to Atlas Thank you for your interest in contributing to Atlas! This guide will help you get started with contributing code, documentation, and ideas to the project. ## Table of Contents 1. [Code of Conduct](#code-of-conduct) 2. [Getting Started](#getting-started) 3. [Development Setup](#development-setup) 4. [Making Contributions](#making-contributions) 5. [Coding Standards](#coding-standards) 6. [Testing Guidelines](#testing-guidelines) 7. [Documentation](#documentation) 8. [Pull Request Process](#pull-request-process) 9. [Community](#community) ## Code of Conduct We are committed to providing a welcoming and inclusive environment for all contributors. Please read and follow our Code of Conduct: - Be respectful and considerate in your communication - Welcome newcomers and help them get started - Focus on constructive criticism - Respect differing viewpoints and experiences - Show empathy towards other community members ## Getting Started ### Types of Contributions We welcome many types of contributions: - **Code**: New features, bug fixes, performance improvements - **Documentation**: Tutorials, examples, API docs, translations - **Tests**: Unit tests, integration tests, performance benchmarks - **Ideas**: Feature requests, design proposals, architecture discussions - **Community**: Answering questions, reviewing PRs, mentoring ### First-Time Contributors If you're new to open source or this project: 1. Look for issues labeled `good first issue` or `beginner-friendly` 2. Read through the documentation to understand the project 3. Set up your development environment 4. Start with small contributions to get familiar with the process 5. Don't hesitate to ask questions! ## Development Setup ### Prerequisites - Python 3.10 or higher - Git - Virtual environment tool (venv, conda, poetry) - Docker (optional, for integration tests) ### Setting Up Your Environment 1. **Fork the repository** ```bash # Click "Fork" on GitHub, then clone your fork git clone https://github.com/YOUR_USERNAME/atlas.git cd atlas ``` 2. **Create a virtual environment** ```bash python -m venv venv source venv/bin/activate # On Windows: venv\Scripts\activate ``` 3. **Install dependencies** ```bash # Install in development mode with all extras pip install -e ".[dev,test,docs]" # Install pre-commit hooks pre-commit install ``` 4. **Set up remote tracking** ```bash git remote add upstream https://github.com/redam94/atlas.git git fetch upstream ``` 5. **Create a feature branch** ```bash git checkout -b feature/your-feature-name ``` ### Development Tools We use several tools to maintain code quality: - **Black**: Code formatting - **isort**: Import sorting - **flake8**: Linting - **mypy**: Type checking - **pytest**: Testing - **coverage**: Code coverage - **pre-commit**: Git hooks Run all checks: ```bash # Format code black src tests isort src tests # Run linting flake8 src tests # Type checking mypy src # Run tests pytest # Check coverage pytest --cov=atlas --cov-report=html ``` ## Making Contributions ### Finding Something to Work On 1. **Check existing issues**: Look for open issues that interest you 2. **Create an issue**: If you have a new idea, create an issue to discuss it 3. **Ask for guidance**: Comment on issues if you need clarification ### Workflow 1. **Sync with upstream** ```bash git fetch upstream git checkout main git merge upstream/main ``` 2. **Create a feature branch** ```bash git checkout -b feature/descriptive-name ``` 3. **Make your changes** - Write code following our standards - Add tests for new functionality - Update documentation as needed 4. **Commit your changes** ```bash git add . git commit -m "feat: add new optimization algorithm - Implemented XYZ algorithm - Added comprehensive tests - Updated documentation Closes #123" ``` 5. **Push to your fork** ```bash git push origin feature/descriptive-name ``` 6. **Create a Pull Request** - Go to GitHub and click "New Pull Request" - Fill out the PR template - Link related issues ### Commit Message Convention We follow the [Conventional Commits](https://www.conventionalcommits.org/) specification: ``` ():