# aGrUM Contribution guide

Welcome to aGrUM's contribution guide and thank you for helping us making aGrUM the best open source API for using Graphical Probabilistic Models.

## Reporting new issue 

[Opening an issue](https://gitlab.com/agrumery/aGrUM/issues/new?issue%5Bassignee_id%5D=&issue%5Bmilestone_id%5D=) does not imply to fill the aGrUM's contribution agreement.

Please follow as much as possible this template :

> ⚠️ *One issue, One bug*
>
>(Describe your issue in detail. Provide as much as possible steps to reproduce.)
>
>### Environment
>
>(describe your os, you CC compiler, your python version, the agrum version, etc.)
>
>### Expected Behavior
>
>(Write what you thought would happen.)
>
>### Actual Behavior
>
>(Write what happened. Include screenshots if needed.)

## What to contribute

You can contribute to aGrUM in the following domains:

* Code
* Documentation
* Packaging and distributing

## Before contributing

Before submitting your first contribution, please take the time to fill aGrUM's contribution agreement. We will not accept any contribution without it !

You can find the individual agreement [here](https://gitlab.com/agrumery/aGrUM/wikis/contribution/individual) and the entity agreement 
[here](https://gitlab.com/agrumery/aGrUM/wikis/contribution/entity). Please send us your agreement at [info@agrum.org](mailto:info@agrum.org).

### Why a contribution agreement ?

We are planning to change aGrUM's licence, but don't worry aGrUM will always be Open Source. To do so, we need your agreement as one of aGrUM's contributor. There is also some legal consideration about how your contribution can be used and distributed with aGrUM. So please take your time and read the agreement before sending it to us. And if you have any question, feel free to ask us at [info@agrum.org](mailto:info@agrum.org).

### Contributing to aGrUM's Code

Before contributing to aGrUM's code you should ask us before hand at [info@agrum.org](mailto:info@agrum.org). This will prevent you from submiting code that we won't integrate: aGrUM's is still under heavy development and some featured modules like `bayesnet` or `learning` are refactored quite often.

Outside of aGrUM's core code, you can help us [solve bugs](https://gitlab.com/agrumery/aGrUM/issues), write [new tests](https://gitlab.com/agrumery/aGrUM/tree/master/src/testunits/README.md) or contribute to one of aGrUM's [applications](https://gitlab.com/agrumery/aGrUM/tree/master/apps/README.md) or [wrappers](https://gitlab.com/agrumery/aGrUM/tree/master/wrappers/README.md).

### Contributing to aGrUM's Documentation

Helping us to write aGrUM's documentation is one of the best way to help us making aGrUM a more usable API. aGrUM's documentation is written using [Doxygen](http://www.stack.nl/~dimitri/doxygen/) and aGrUM's wrappers is written with [Sphynx].

You can also write aGrUM's example or tutorials, both are direly needed.

### Contributing to aGrUM's Packaging and Distribution

Packaging and distributing aGrUM or pyAgrum helps a lot by leting aGrUM users easily access updates. We currently have [conda](https://anaconda.org/conda-forge/pyagrum) and [pip](https://pypi.python.org/pypi/pyagrum/0.10.4.3) packaging for pyAgrum and packaging for [ArchLinux](https://aur.archlinux.org/packages/agrum/). Please contact us if you plan to package aGrUM or pyAgrum. We will be happy to help/

## How to contribute

For your first contribution you should fork aGrUM, make your contribution and send us a merge request. Before contributing, please take the time to warn us at [info@agrum.org](mailto:info@agrum.org) so we can help you out with your contribution.


