Como contribuir?
O módulo inewave
e dependências de desenvolvimento
O módulo inewave é desenvolvido considerando o framework proposto no módulo cfinterface. Este fornece para o desenvolvedor uma modelagem de cada arquivo de entrada e saída do modelo NEWAVE em uma classe específica.
A leitura de arquivos de entrada utilizando o módulo inewave é sempre feita através do método read de cada classe, que atua como construtor.
No sintetizador-newave a dependência do módulo inewave é concentrada na classe Deck, que fornece objetos nativos, DataFrames ou arrays para as demais partes da aplicação.
Para instalar as dependências de desenvolvimento, incluindo as necessárias para a geração automática do site:
$ git clone https://github.com/rjmalves/sintetizador-newave.git
$ cd sintetizador-newave
$ pip install -r dev-requirements.txt
Aviso
O conteúdo da documentação não deve ser movido para o repositório. Isto é feito
automaticamente pelos scripts de CI no caso de qualquer modificação no branch main
.
Convenções de código
O sintetizador-newave considera critérios de qualidade de código em seus scripts de Integração Contínua (CI), além de uma bateria de testes unitários. Desta forma, não é possível realizar uma release de uma versão que não passe em todos os testes estabelecidos ou não atenda aos critérios de qualidade de código impostos.
A primeira convenção é que sejam seguidas as diretrizes de sintaxe PEP8, provenientes do guia de estilo do autor da linguagem. Além disso, não é recomendado que existam funções muito complexas, com uma quantidade excessiva de branches e loops, o que piora e legibilidade do código. Isto pode ser garantido através de módulos específicos para análise de qualidade de código, como será mencionado a seguir. A única exceção é a regra E203.
Para garantir a formatação é recomendado utilizar o módulo ruff, que realiza formatação automática e possui integração nativa com alguns editores de texto no formato de plugins ou extensões.
A segunda convenção é que seja utilizada tipagem estática. Isto é, não deve ser uitilizada uma variável em código a qual possua tipo de dados que possa mudar durante a execução do mesmo. Além disso, não deve ser declarada uma variável cujo tipo não é possível de ser inferido em qualquer situação, permanencendo incerto para o leitor o tipo de dados da variável a menos que seja feita uma execução de teste do programa.
Procedimentos de teste
O sintetizador-newave realiza testes utilizando o pacote de testes de Python pytest e controle da qualidade de código com ruff. A tipagem estática é garantida através do uso de mypy , que é sempre executado nos scripts de Integração Contínua (CI).
Antes de realizar um git push
é recomendado que se realize estes três procedimentos
descritos, que serão novamente executados pelo ambiente de CI:
$ pytest ./tests
$ mypy ./app
$ ruff check ./app