# Contributing
Contributions are welcome, and they are greatly appreciated! Every little bit
helps, and credit will always be given.

You can contribute in many ways:

## Types of Contributions

### Report Bugs

Report bugs at [https://github.com/automl/CARP-S/issues](https://github.com/automl/CARP-S/issues).

If you are reporting a bug, please include:

- Your operating system name and version.
- Any details about your local setup that might be helpful in troubleshooting.
- Detailed steps to reproduce the bug.

### Fix Bugs

Look through the GitHub issues for bugs. Anything tagged with "bug" and "help
wanted" is open to whoever wants to implement it.

### Implement Features

Look through the GitHub issues for features. Anything tagged with "enhancement"
and "help wanted" is open to whoever wants to implement it.

### Write Documentation

CARP-S could always use more documentation, whether as part of the
official CARP-S docs, in docstrings, or even on the web in blog posts,
articles, and such.

### Submit Feedback

The best way to send feedback is to file an issue at https://github.com/automl/CARP-S/issues.

If you are proposing a feature:

- Explain in detail how it would work.
- Keep the scope as narrow as possible, to make it easier to implement.
- Remember that this is a volunteer-driven project, and that contributions are welcome :)

## Get Started!

Ready to contribute? Here's how to set up `CARP-S` for local development.

Fork the `CARP-S` repo on GitHub and then clone your fork locally:
```bash
git clone git@github.com:YOUR_NAME_HERE/CARP-S.git
cd CARP-S
```

Install your local copy into a virtualenv.
We'll also install [`pre-commit`](https://pre-commit.com/) which runs some code quality checks.
```bash
python -m venv .venv
pip install -e ".[dev]"
pre-commit install
```

Create a branch for local development:
```bash
git checkout -b name-of-your-bugfix-or-feature
```

Now you can make your changes locally!

When you're done making changes, check that your changes pass ruff, including testing other Python versions:
```bash
python setup.py test or pytest
```
Commit your changes and push your branch to GitHub:

```bash
git add .
git commit -m "Your detailed description of your changes."
git push origin name-of-your-bugfix-or-feature
```
Submit a [pull request](https://github.com/automl/CARP-S/pulls) through the GitHub website!

## Local Development
To promote compatibility we encourage to enable `numpy>2.0.0` and `ConfigSpace>1.0.0`, and that in general modern
python versions are supported.
If there are still package clashes, you can create a virtual env per benchmark and optimizer.

## Pull Request Guidelines
Before you submit a pull request, check that it meets these guidelines:

1. The pull request should include tests.
2. If the pull request adds functionality, the docs should be updated.
Put your new functionality into a function with a docstring, and add the feature to the list in `README.md`.
3. The pull request should work for `Python 3.9` (ideally newer versions) and
make sure that the tests pass for all supported Python versions.

## Testing
To run a subset of tests:
```bash
pytest tests/some_file.py  # Run tests only in a certain file
pytest -k "test_mytest"  # Find tests with a name matching "test_mytest"
```

## Deploying
A reminder for the maintainers on how to deploy.
Make sure all your changes are committed (including an entry in `CHANGELOG.md`).

Update the version in `pyproject.toml`, then run:

```bash
git tag "x.y.z"  # Replace with your version
git push
git push --tags
```
