Contribution guidelines ======================= Workflow -------- 1. Fork this repository; 2. follow the project structure; 3. commit **frequently** with **clear** messages; 4. send a pull request to the ``master`` branch of this repository. Coding ------ 1. **Style** - comply with `PEP 8 `_ and `Wikimedia `_ conventions: - *4 spaces* for indentation; - *snake-case* style AKA *underscore* as a word separator (files, variables, functions); - *UPPERCASE* constants; - anything else is *lowercase*; - *2* empty lines to separate functions; - *80* characters per line, and up to *100* when suitable; - *single-quoted* strings, unless single-quotes are in a string. 2. `Type hints `_ - add them at least to public function signatures; 3. **Documentation** - write `Sphinx `_ docstrings at least for public functions and classes: - use `reST `_ markup; - stick to `PEP 257 `_ and `PEP 287 `_; - pay special attention to `info field lists `_; - `cross-reference `_ Python objects. 4. **Refactoring**: - fix `pylint `_ errors: ``pylint -j 0 -E PATH_TO_YOUR_CONTRIBUTION``; - look at pylint warnings: ``pylint -j 0 -d all -e W PATH_TO_YOUR_CONTRIBUTION``; - reduce complexity: ``flake8 --select C90 --max-complexity 10 PATH_TO_YOUR_CONTRIBUTION``; - apply relevant refactoring suggestions: ``pylint -j 0 -d all -e R PATH_TO_YOUR_CONTRIBUTION``.