[![pytest](https://github.com/daisy-model/daisypy-vis/actions/workflows/pytest.yml/badge.svg)](https://github.com/daisy-model/daisypy-vis/actions/workflows/pytest.yml)
[![Pylint](https://github.com/daisy-model/daisypy-vis/actions/workflows/pylint.yml/badge.svg)](https://github.com/daisy-model/daisypy-vis/actions/workflows/pylint.yml)
[![codecov](https://codecov.io/gh/daisy-model/daisypy-vis/graph/badge.svg?token=F8625GT0A8)](https://codecov.io/gh/daisy-model/daisypy-vis)

# daisypy-vis
Visualisation library and tools for Daisy model output

See [doc](https://github.com/daisy-model/daisy-vis/tree/main/doc) for examples.

## Installation
The visualization tools are available from pypi

    pip install daisypy-vis

## Development
Checkout repository

    git clone git@github.com:daisy-model/daisypy-vis.git
    cd daisypy-vis

Install package as editable

    pip install -e ".[all]"

### pylint
Use `pyproject.toml` for package-wide settings, e.g. `ignore-trailing-whitespace`.

	pylint daisypy/vis
    pylint doc


### Tests
See `pyproject.toml`for configuration.

To install test dependencies, use either the `[all]` or the `[test]` target, e.g.

    pip install ".[test]"

To run tests

    pytest


Use pytest-mpl to compare images. Generate baselines images by running

    pytest --mpl-generate-path=test-data/baseline

and inspect the output...

Note that image comparison tests can fail between different version of matplotlib and freetype. You can force test against images generated with a specific version of matplotlib with

    pytest --mpl-baseline-path=test-data/baseline/matplotlib-<matplotlib-version-number>
    
If no baseline images are available for a specific version, you can generate with

    pytest --mpl-generate-path=test-data/baseline/matplotlib-<matplotlib-version-number>
    
and compare manually.


Baseline for animations are generated by running the tests, this will produce a new set of images in `test-data/tmp`. Inspect and move to `test-data/baseline` when happy. In general, text should be removed from to avoid tests failing due to slight variations in font rendering. See for example `render_and_compare_animation` in `daisy_vis/animate/test/test_animate_depth_timeseries.py`


### Coverage
See `pyproject.toml`for configuration. To generate coverage report

    coverage run
    
To inspect coverage report

    coverage report

Tests should as a minimum have 100% code coverage. When applicable, fixed tests should cover boundary conditions and randomized tests should sample the full parameter space.
