Developer Guide#

Set up#

The hvPlot library is a complex project which provides a wide range of data interfaces and an extensible set of plotting backends, which means the development and testing process involves a wide set of libraries.

If you have any problems with the steps here, please contact the developers on Discord.

Preliminaries#

Git#

The hvPlot source code is stored in a Git source control repository. The first step to working on hvPlot is to install Git on to your system. There are different ways to do this depending on whether, you are using Windows, OSX, or Linux.

To install Git on any platform, refer to the Installing Git section of the Pro Git Book.

Conda (optional)#

Developing hvPlot requires a wide range of dependencies that can all be installed with the conda package manager. Using conda is sometimes the easiest way to install a dependency (e.g. graphviz, Firefox drivers). However, these days most of the dependencies required to develop hvPlot can be installed with pip.

Follow these instructions to download conda.

Cloning the Repository#

The source code for the hvPlot project is hosted on GitHub. To clone the source repository, issue the following command:

git clone https://github.com/holoviz/hvplot.git

This will create a hvplot directory at your file system location. This hvplot directory is referred to as the source checkout for the remainder of this document.

Installing Dependencies#

hvPlot requires many additional packages for development and testing.

Start by creating a virtual environment with venv:

python -m venv .venv

Activate it:

# Linux/MacOs
source .venv/bin/activate
# Windows
.venv\Scripts\activate

Install the test dependencies:

pip install --prefer-binary -e '.[tests, examples-tests, geo, hvdev, hvdev-geo, dev-extras]'

Create a development conda environment using one of the environment files present in the ./envs folder, and activate it:

conda env create --file envs/py3.10-tests.yaml
conda activate hvplottests

Setting up pre-commit#

hvPlot uses pre-commit to automatically apply linting to hvPlot code. If you intend to contribute to hvPlot we recommend you enable it with:

pre-commit install

This will ensure that every time you make a commit linting will automatically be applied.

Testing#

This chapter describes how to run various tests locally in a development environment, guidelines for writing tests, and information regarding the continuous testing infrastructure.

Running Tests Locally#

Before attempting to run hvPlot tests, make sure you have successfully run through all of the instructions in the Developer Guide section of the Developer’s Guide.

Currently hvPlot uses linting two types of tests: regular unit tests which are run with pytest and notebook example tests run with pytest and nbval:

Run the unit tests with:

pytest hvplot
pytest -v hvplot --geo  # include the test that require geo dependencies

Run the example tests with:

pytest -n auto --dist loadscope --nbval-lax -p no:python

Writing Tests#

In order to help keep hvPlot maintainable, all Pull Requests that touch code should normally be accompanied by relevant tests. While exceptions may be made for specific circumstances, the default assumption should be that a Pull Request without tests may not be merged.

Python unit tests maintain the basic functionality of the Python portion of the hvPlot library. A few general guidelines will help you write Python unit tests:

In order to ensure that hvPlot’s unit tests as relocatable and unambiguous as possible, always prefer absolute imports in test files. When convenient, import and use the entire module under test:

  • Good: import hvplot.pandas

  • Good: from hvplot.plotting import HvPlotTabular

  • Bad: from ..plotting import HvPlotTabular

Continuous Integration (CI)#

Every push to the main branch or any Pull Request branch on GitHub automatically triggers a full test build on the Github Action continuous integration service. This is most often useful for running the full hvPlot test suite continuously, but also triggers automated scripts for publishing releases when a tagged branch is pushed.

When in doubt about what command to run, you can always inspect the Github workflow files in the ./github/workflows folder so see what commands are running on the CI.

Github Action provides a limited number free build workers to Open Source projects. Please be considerate of others and group commits into meaningful chunks of work before pushing to GitHub (i.e. don’t push on every commit).