xref: /petsc/src/binding/petsc4py/docs/source/contributing.rst (revision a982d5546cc9bcf96044945e3157033f4bde0259)
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