.. _development_guide:
This is a technical guide for people already familiar with scientific Python software development.
For an introduction to scientific Python software development, see :ref:`contribute`.
=================
Development guide
=================
Testing
-------
Atomap has a large number of unit tests, which are tested using ``pytest``:
.. code-block:: bash
$ python3 -m pytest --doctest-modules atomap/
This also runs every docstring example as a unit test.
The documentation is tested by doing:
.. code-block:: bash
$ python3 -m pytest --doctest-glob="*.rst" doc/
Both the unit tests and the doc tests can be accelerated by running the tests in parallel.
Use the `xdist `_ pytest package for this.
To run the tests using 5 parallel processes:
.. code-block:: bash
$ python3 -m pytest -n 5 --doctest-modules atomap/
$ python3 -m pytest -n 5 --doctest-glob="*.rst" doc/
Testing notebooks
*****************
The Jupyter notebooks in https://github.com/atomap-dev/atomap-demos is also tested using pytest
and ``nbval``.
.. code-block:: bash
$ python3 -m pytest --nbval-lax introduction_to_atomap.ipynb
Note: for some reason the ``%matplotlib widget`` or ``%matplotlib qt`` causes the tests to fail,
the easiest way of avoiding this is skipping that specific notebook cell. This done
by adding ``nbval-skip`` to the tag for that cell.
Style checks
------------
In Atomap the PEP8 style guide is followed, and the `Black `_
code formatter is used. To automatically format the code:
.. code-block:: bash
$ python3 -m black atomap/
To only check the code, without changing it:
.. code-block:: bash
$ python3 -m black atomap/ --diff --check
Generating the sphinx page
--------------------------
These documentation pages are written by using sphinx.
You generate the html site by:
.. code-block:: bash
$ cd doc
$ python3 -m sphinx -b html ./ _build/html/
Continuous integration
----------------------
The Continuous integration (CI) settings is contained in ``.github/workflows/tests.yml``.
This runs all the above-mentioned tests, style checks and sphinx page generation on each branch.