Installing Optional Packages

Running unit and integrated tests via pytest

The pytest program can run a series of test on python scripts that begin with test_. Install the pytest program with:

pip3 install --user pytest

Note that version 4.0.1 or higher works properly with Basilisk, while versions between 3.6.1 and 4.0.0 had some bugs that impacted some Basilisk tests.

If you want to use pytest to generate a validation HTML report using the --report argument, then the pytest-html package must be installed:

pip3 install --user pytest-html

Running pytest in a multi-threaded manner

While Basilisk is a single threaded simulation, it is possible to run pytest in a multi-threaded manner. Install the pytest-xdist package using:

pip3 install --user pytest-xdist

After installing this utility you now run the multi-threaded version of pytest for 8 threads using:

python3 -m pytest -n 8

or replace 8 with the number of cores your computer has available

Graphing via datashader

Installing

In order to run the full datashader capabilities of the Monte Carlo example, you must run the following commands:

pip3 install --user datashader
pip3 install --user holoviews

Installing datashader will automatically install bokeh and pandas packages. It is possible to use just pandas and datashader to output images of the data; however, without holoviews and bokeh there will be no graph axis, title, etc.

Important features

Incorporating holoviews, datashader, and bokeh, we can now rasterize large amounts of data and plot them faster than using matplotlib. Theoretically, the number of points is now irrelevant while plotting. Using datashader, it is now possible to plot 5 million points in 30 seconds. Aggregating the data (2.5 gigs) took 1 minute to populate the dataframes, and 2 minutes to write to file (which is only needed if you want to avoid running the monte carlo again). To graph the existing without re-running the simulations, set ONLY_DATASHADE_DATA = 1 in the Monte Carlo scenarios.

In order to generate graphs that are zoomed in to a specific x and y range modify the following. For holoviews and bokeh interface:

plot.x_range = Range1d(df.x.min(), df.x.max())
plot.y_range = Range1d(df.y.min(), df.y.max())

The analagous lines to zoom using just datashader are:

x_range = df.x.min(), df.x.max()
y_range = df.y.min(), df.y.max()

After installing all of the packages, pytest will use those libraries by default. To change this back to matplotlib modify the pytest parameters in test_scenarioMonteCarloAttRW.py to the following:

@pytest.mark.parametrize("MCCases, datashader",
                         [(1, False),
                          (2, False)])

Protobuffers

To use Google Protobuffers in a C++ context by building the source, please follow the following documentation here. To use Google Protobuffers as a pre-built library, download the release from here.