16f336411SStefano ZampiniContributing 26f336411SStefano Zampini============ 36f336411SStefano Zampini 46f336411SStefano ZampiniContributions from the user community are welcome. See 5*4bcd95a3SBarry Smiththe `PETSc developers <ind_developers>` documentation for general 66f336411SStefano Zampiniinformation on contributions. 76f336411SStefano Zampini 86f336411SStefano ZampiniNew contributions to petsc4py **must** adhere with the coding standards. 96f336411SStefano ZampiniWe use cython-lint_ for Cython and ruff_ for Python source codes. 106f336411SStefano ZampiniThese can be installed using:: 116f336411SStefano Zampini 126f336411SStefano Zampini $ python -m pip install -r src/binding/petsc4py/conf/requirements-lint.txt 136f336411SStefano Zampini 146f336411SStefano ZampiniIf you are contributing Cython code, you can check compliance with:: 156f336411SStefano Zampini 166f336411SStefano Zampini $ make cython-lint -C src/binding/petsc4py 176f336411SStefano Zampini 186f336411SStefano ZampiniFor Python code, run:: 196f336411SStefano Zampini 206f336411SStefano Zampini $ make ruff-lint -C src/binding/petsc4py 216f336411SStefano Zampini 226f336411SStefano ZampiniPython code can be auto-formatted using:: 236f336411SStefano Zampini 246f336411SStefano Zampini $ make ruff-lint RUFF_OPTS='format' -C src/binding/petsc4py 256f336411SStefano Zampini 266f336411SStefano ZampiniNew contributions to petsc4py must be tested. 276f336411SStefano ZampiniTests are located in the :file:`src/binding/petsc4py/test` folder. 286f336411SStefano ZampiniTo add a new test, either add a new :file:`test_xxx.py` or modify a 296f336411SStefano Zampinipre-existing file according to the 306f336411SStefano Zampini`unittest <https://docs.python.org/3/library/unittest.html>`_ 316f336411SStefano Zampinispecifications. 326f336411SStefano Zampini 336f336411SStefano ZampiniIf you add a new :file:`test_xxx.py`, you can run the tests using:: 346f336411SStefano Zampini 356f336411SStefano Zampini $ cd src/binding/petsc4py 366f336411SStefano Zampini $ python test/runtests.py -k test_xxx 376f336411SStefano Zampini 386f336411SStefano ZampiniIf instead you are modifying an existing :file:`test_xxx.py`, 396f336411SStefano Zampiniyou can test your additions by using the fully qualified name of the Python 406f336411SStefano Zampiniclass or method you are modifying, e.g.:: 416f336411SStefano Zampini 426f336411SStefano Zampini $ python test/runtests.py -k test_xxx.class_name.method_name 436f336411SStefano Zampini 446f336411SStefano ZampiniAll new code must include documentation in accordance with the `documentation 456f336411SStefano Zampinistandard <documentation_standards>`. To check for compliance, run:: 466f336411SStefano Zampini 476f336411SStefano Zampini $ make html SPHINXOPTS='-W' -C src/binding/petsc4py/docs/source 486f336411SStefano Zampini 496f336411SStefano Zampini.. warning:: 506f336411SStefano Zampini 516f336411SStefano Zampini The docstrings must not cause Sphinx warnings. 526f336411SStefano Zampini 536f336411SStefano Zampini.. _cython-lint: https://github.com/MarcoGorelli/cython-lint 546f336411SStefano Zampini.. _ruff: https://docs.astral.sh/ruff 55