# Contributing to SAHI

Thank you for your interest in contributing to SAHI! This guide will help you
get started.

## Setting Up Development Environment

### 1. Fork and Clone

```bash
git clone https://github.com/YOUR_USERNAME/sahi.git
cd sahi
```

### 2. Create Environment

We recommend Python 3.10 for development:

```bash
pip install uv
uv venv --python 3.10
source .venv/bin/activate  # On Windows: .venv\Scripts\activate
```

### 3. Install Dependencies

```bash
# Install core + dev dependencies
uv sync --extra dev

# For testing specific models, install their dependencies.
```

## Code Formatting

We use `ruff` for code formatting and linting. To format your code:

```bash
# Check formatting
uv run ruff check .
uv run ruff format --check .

# Fix formatting
uv run ruff check --fix .
uv run ruff format .
```

Or use the convenience script:

```bash
# Check formatting
python scripts/format_code.py check

# Fix formatting
python scripts/format_code.py fix
```

## Running Tests

```bash
# Run all tests
uv run pytest

# Run specific test file
uv run pytest tests/test_predict.py

# Run with coverage
uv run pytest --cov=sahi
```

## Submitting Pull Requests

1. Create a new branch: `git checkout -b feature-name`
2. Make your changes
3. Format your code: `python scripts/format_code.py fix`
4. Run tests: `uv run pytest`
5. Commit with clear message: `git commit -m "Add feature X"`
6. Push and create PR: `git push origin feature-name`

## CI Build Failures

If the CI build fails due to formatting:

1. Check the CI output for the specific Python version that failed
2. Create environment with that Python version:

   ```bash
   uv venv --python 3.X  # Replace X with the version from CI
   source .venv/bin/activate
   ```

3. Install dev dependencies:

   ```bash
   uv sync --extra dev
   ```

4. Fix formatting:

   ```bash
   python scripts/format_code.py fix
   ```

5. Commit and push the changes

## Adding New Model Support

To add support for a new detection framework:

1. Create a new file under `sahi/models/your_framework.py`
2. Implement a class that inherits from `DetectionModel`
3. Add your framework to `MODEL_TYPE_TO_MODEL_CLASS_NAME` in
   `sahi/auto_model.py`
4. Add tests under `tests/test_yourframework.py`
5. Add a demo notebook under `docs/notebooks/inference_for_your_framework.ipynb`
6. Update [`README.md`](README.md) and related docs under `docs/` to include
   your new model

See existing implementations like `sahi/models/ultralytics.py` for reference.

## Questions?

Feel free to [start a discussion](https://github.com/obss/sahi/discussions) if
you have questions!
