.. _contributing:

Contributing to SimPEG
=======================

First of all, we are glad you are here! We welcome contributions and input
from the community.

In these pages we set some guidelines for contributing to the repositories
hosted in the `SimPEG <https://github.com/simpeg>`_ organization on GitHub.
These repositories are maintained on a volunteer basis.

Please, be considerate and respectful of others. Remember that everyone in
the SimPEG community must abide by our `Code of
Conduct <https://github.com/simpeg/simpeg/blob/main/CODE_OF_CONDUCT.md>`_.

Ask questions
-------------

If you have a question regarding a specific use of SimPEG, the fastest way
to get a response is by posting on our Discourse discussion forum:
https://simpeg.discourse.group/. Alternatively, if you prefer real-time chat,
you can join our Mattermost Team at
https://mattermost.softwareunderground.org/simpeg.
Please do not create an issue to ask a question.

.. _issues:

GitHub Issues
-------------

Issues are a place for you to suggest enhancements or raise problems you are
having with the package to the developers. Feel free to open new
`Issues in SimPEG's GitHub repository
<https://github.com/simpeg/simpeg/issues/new/choose>`_.

.. _bugs:

Bugs
~~~~

If you found a bug in SimPEG, please report it through a
`new Issue <https://github.com/simpeg/simpeg/issues/new/choose>`_.
Please be as descriptive as possible and provide sufficient detail to reproduce the error.
Whenever possible, if you can include a small example that reproduces the error,
this will help us resolve issues faster.

.. _suggest-enhancements:

Suggesting enhancements
~~~~~~~~~~~~~~~~~~~~~~~

We welcome ideas for improvements on SimPEG! When writing an issue to suggest
an improvement, please

- use a descriptive title,
- explain where the gap in current functionality is,
- include a pseudocode sketch of the intended functionality

We will use the issue as a place to discuss and provide feedback. Please
remember that SimPEG is maintained on a volunteer basis. If you suggest an
enhancement, we certainly appreciate if you are also willing to take action
and start a Pull Request!


Contributing with code
----------------------

We are glad to receive contributions in form of code to SimPEG, weather it
fixes a bug, adds a new feature, improves the documentation or extends our
tests. In the following pages you'll find information on how to get started to
contribute with new code to SimPEG.

.. toctree::
   :maxdepth: 1

   working-with-github
   setting-up-environment
   code-style
   documentation
   testing
   pull-requests
   advanced


Licensing
~~~~~~~~~

All code contributed to SimPEG is licensed under the `MIT license
<https://github.com/simpeg/simpeg/blob/main/LICENSE>`_ which allows open
and commercial use and extension of SimPEG. If you did not write
the code yourself, it is your responsibility to ensure that the existing
license is compatible and included in the contributed files or you can obtain
permission from the original author to relicense the code.