---
template: overrides/main.html
title: Contribuir
---
# Contribuindo
O SysIdentPy é um projeto comunitário, portanto todas as contribuições são bem-vindas! Existem muitos casos de uso possíveis na área de Identificação de Sistemas e não podemos testar todos os cenários sem a sua ajuda! Se você encontrar algum bug ou tiver sugestões, por favor reporte-os no [issue tracker] no GitHub.
> Recebemos novos contribuidores de todos os níveis de experiência. Os objetivos da comunidade SysIdentPy são ser prestativa, acolhedora e eficaz.
[issue tracker]: https://github.com/wilsonrljr/sysidentpy/issues
## Ajude outros com issues no GitHub
Você pode ver as issues existentes e tentar ajudar outros, na maioria das vezes são perguntas para as quais você já pode saber a resposta.
## Acompanhe o repositório do GitHub
Você pode [acompanhar] o SysIdentPy no GitHub (clicando no botão "watch" no canto superior direito):
[acompanhar]: https://github.com/wilsonrljr/sysidentpy
Se você selecionar "Watching" em vez de "Releases only", receberá notificações quando alguém criar uma nova issue.
Assim você pode tentar ajudá-los a resolver essas issues.
## Documentação
A documentação é tão importante quanto a própria biblioteca. O inglês não é a língua principal dos autores, então se você encontrar algum erro de digitação ou algo errado, não hesite em nos avisar.
## Criar um Pull Request
Você pode [contribuir](contribute.md){.internal-link target=_blank} com o código-fonte através de Pull Requests, por exemplo:
* Para corrigir um erro de digitação que você encontrou na documentação.
* Para compartilhar um artigo, vídeo ou podcast que você criou ou encontrou sobre o SysIdentPy.
* Para propor novas seções de documentação.
* Para corrigir uma issue/bug existente.
* Para adicionar um novo recurso.
## Ambiente de desenvolvimento
Estes são alguns passos básicos para nos ajudar com o código:
- [x] Instalar e configurar o Git no seu computador.
- [x] [Fork] o SysIdentPy.
- [x] [Clone] o fork na sua máquina local.
- [x] Criar uma nova branch.
- [x] Fazer alterações seguindo o estilo de codificação do projeto (ou sugerindo melhorias).
- [x] Executar os testes.
- [x] Escrever e/ou adaptar testes existentes se necessário.
- [x] Adicionar documentação se necessário.
- [x] Commit.
- [x] [Push] para o seu fork.
- [x] Abrir um [pull_request].
[Fork]: https://help.github.com/articles/fork-a-repo/
[Clone]: https://help.github.com/articles/cloning-a-repository/
[Push]: https://help.github.com/articles/pushing-to-a-remote/
[pull_request]: https://help.github.com/articles/creating-a-pull-request/
### Ambiente
Clone o repositório usando
```console
git clone https://github.com/wilsonrljr/sysidentpy.git
```
Se você já clonou o repositório e sabe que precisa mergulhar fundo no código, aqui estão algumas diretrizes para configurar seu ambiente.
#### Ambiente virtual com `venv`
Você pode criar um ambiente virtual em um diretório usando o módulo `venv` do Python ou Conda:
=== "venv"
```console
$ python -m venv env
```
=== "conda"
```console
conda create -n env
```
Isso criará um diretório `./env/` com os binários do Python e então você poderá instalar pacotes para esse ambiente isolado.
#### Ativar o ambiente
Se você criou o ambiente usando o módulo `venv` do Python, ative-o com:
=== "Linux, macOS"
```console
source ./env/bin/activate
```
=== "Windows PowerShell"
```console
.\env\Scripts\Activate.ps1
```
=== "Windows Bash"
Ou se você usa Bash no Windows (ex: Git Bash):
```console
source ./env/Scripts/activate
```
Se você criou o ambiente usando Conda, ative-o com:
=== "Conda Bash"
```console
conda activate env
```
Para verificar se funcionou, use:
=== "Linux, macOS, Windows Bash"
```console
$ which pip
some/directory/sysidentpy/env/Scripts/pip
```
=== "Windows PowerShell"
```console
$ Get-Command pip
some/directory/sysidentpy/env/Scripts/pip
```
Se mostrar o binário `pip` em `env/bin/pip`, então funcionou.
!!! tip
Toda vez que você instalar um novo pacote com `pip` nesse ambiente, ative o ambiente novamente.
!!! note
Usamos o pacote `pytest` para testes. As funções de teste estão localizadas em subdiretórios de testes em cada pasta dentro do SysIdentPy, que verificam a validade dos algoritmos.
#### Dependências
Instale o SysIdentPy com as opções `dev` e `docs` para obter todas as dependências necessárias para executar os testes
=== "Dependências Dev e Docs"
``` sh
pip install "sysidentpy[dev, docs]"
```
## Documentação
Primeiro, certifique-se de configurar seu ambiente conforme descrito acima, isso instalará todos os requisitos.
A documentação usa MkDocs e Material for MKDocs.
Toda a documentação está em formato Markdown no diretório `./docs/`.
### Verificar as alterações
Durante o desenvolvimento local, você pode servir o site localmente e verificar quaisquer alterações. Isso ajuda a garantir que:
* Todas as suas modificações foram aplicadas.
* Os arquivos não modificados estão sendo exibidos conforme esperado.
```console
$ mkdocs serve
INFO - [13:25:00] Browser connected: http://127.0.0.1:8000
```
Isso servirá a documentação em `http://127.0.0.1:8008`.
Dessa forma, você pode continuar editando os arquivos fonte e ver as alterações ao vivo.
!!! warning
Se alguma modificação quebrar o build, você terá que servir o site novamente. Sempre verifique seu `console` para garantir que está servindo o site.
## Executar testes localmente
É sempre bom verificar se suas implementações/modificações não quebram nenhuma outra parte do pacote. Você pode executar os testes do SysIdentPy localmente usando `pytest` na respectiva pasta para realizar todos os testes dos sub-pacotes correspondentes.
#### Exemplo de como executar os testes:
Abra um emulador de terminal de sua escolha e vá para o diretório principal, ex:
\sysidentpy\
Basta digitar `pytest` no emulador de terminal
```console
pytest
```
e você obtém um resultado como:
```console
========== test session starts ==========
platform linux -- Python 3.7.6, pytest-5.4.2, py-1.8.1, pluggy-0.13.1
rootdir: ~/sysidentpy
plugins: cov-2.8.1
collected 12 items
tests/test_regression.py ............ [100%]
========== 12 passed in 2.45s ==================
```