Parallel Rao's Q Visualization and Analysis — Spectral indices, Rao's Q diversity, raster visualization
Project description
PaRaVis
Parallel Rao's Q Visualization and Analysis
A cross-platform Python library and desktop GUI for spectral index computation, Rao's Q diversity analysis, and raster data visualization. PaRaVis combines a professional PySide6 interface with a lightweight headless API — equally at home in interactive exploration and automated HPC batch pipelines.
in
Features
- 200+ Spectral Indices — NDVI, EVI, SAVI, NDWI, NBR, BAI, and more via Spyndex. Register custom indices with the
@register_indexdecorator. - Rao's Q Diversity — Moving-window quadratic entropy with three backends: CPU (NumPy), multi-core parallel (
ProcessPoolExecutor), and GPU-accelerated (CuPy + custom CUDARawKernel). - 6 Distance Metrics — Euclidean, Manhattan, Chebyshev, Minkowski, Canberra, and Bray-Curtis — all supported on every backend.
- Raster I/O — Downsampling for large files, LZW-compressed GeoTIFF output, multi-band support.
- Desktop GUI — Three-panel layout, light/dark themes, splash screen, and full-screen mode for a better experience.
- Headless API — Zero-Qt core modules usable in scripts, notebooks, and HPC clusters.
Quick Start
pip install paravis[gui] # install with GUI
paravis # launch the desktop app
from paravis.api import compute_indices, compute_rao_q
# Compute vegetation indices
results = compute_indices("scene.tif", indices=["NDVI", "EVI"])
print(results["NDVI"].mean())
# Rao's Q diversity (auto-selects GPU if available)
diversity = compute_rao_q("scene.tif", window_size=15, backend="auto")
Installation
pip install paravis # headless (scripts, notebooks, HPC)
pip install paravis[gui] # + desktop GUI
pip install paravis[gpu] # + GPU acceleration (needs NVIDIA + CUDA)
pip install paravis[gui,gpu,dev] # everything
Dependencies
| Core | Optional |
|---|---|
Note:
rasteriorequires the GDAL system library. On Linux:apt install libgdal-dev. On Windows/macOS the pip wheel includes it.
How Rao's Q Works
Rao's Quadratic Entropy measures spectral diversity using a species-abundance approach: identical spectral profiles in a window are treated as the same "species", their frequencies counted, and pairwise spectral distances are weighted by relative abundance:
$$Q = \sum_{i=1}^{S} \sum_{j=1}^{S} d_{ij} \cdot p_i \cdot p_j$$
Where $S$ = unique profiles (species), $d_{ij}$ = spectral distance between species $i$ and $j$, $p_i$ = relative abundance of species $i$.
The simplify parameter controls input truncation precision before species identification — higher precision means more distinct species detected, yielding a more detailed diversity map but at greater computational cost.
Six distance metrics are available: Euclidean, Manhattan, Chebyshev, Minkowski (tunable $p$), Canberra, and Bray-Curtis. All work on every backend.
→ Full theory, formulas, and parameter details in docs/user_guide.md
Backends
| Backend | Command | Best for |
|---|---|---|
| CPU (NumPy) | backend="cpu" |
Small rasters, any hardware |
| Parallel CPU | backend="parallel" |
Multi-core workstations, HPC nodes |
| GPU (CUDA kernel) | backend="gpu" or "auto" |
Large rasters, NVIDIA GPUs |
All three implement the identical species-abundance formula, producing bitwise-comparable results. The GPU uses three automatic paths: a fast shared-memory CUDA kernel, a per-thread fallback kernel, and a pure CuPy fallback if compilation fails.
→ Full backend comparison and GPU architecture in docs/user_guide.md
API Overview
from paravis.api import (
compute_indices, # → dict of 2D arrays
compute_index, # → single 2D array
compute_rao_q, # → 2D Rao's Q map
plot_raster, # → (figure, axes)
plot_comparison, # → (figure, axes)
list_available_indices, # → list of index names
)
# Spectral indices with custom band mapping
compute_indices("sentinel2.tif", indices=["NDVI", "NDWI"],
band_mapping={4: "R", 8: "N"})
# Rao's Q with full control
compute_rao_q("scene.tif", window_size=11, na_tolerance=0.3,
backend="parallel", n_workers=8,
simplify=2, distance_metric="braycurtis")
# Read / write rasters
from paravis.core.raster import read_raster, write_geotiff
data, transform, crs = read_raster("input.tif")
write_geotiff(result, "output.tif", transform=transform, crs=crs)
→ Full API reference with all parameters in docs/user_guide.md
Desktop GUI
paravis # launch
python -m paravis.gui.app # or via module
Three-panel layout: Left — controls and index selection, Centre — Rao's Q processing, Right — visualisation with five plot modes (individual, stats, diff+heatmap, split comparison, time series with GIF export). Light/dark themes, keyboard shortcuts, persistent settings.
→ Full GUI walkthrough in docs/user_guide.md
System Requirements
- Python ≥ 3.9
- RAM: 4 GB minimum, 8 GB recommended for GUI
- GPU (optional): NVIDIA with Compute Capability 6.0+, driver ≥ 450.0, CuPy ≥ 12.0
Citation
@software{paravis2026,
author = {{PaRaVis Contributors}},
title = {PaRaVis: Parallel Rao's Q Visualization and Analysis},
year = {2026},
version = {2.0.1},
url = {https://github.com/mmadrz/paravis}
}
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file parammadrz-2.5.3.tar.gz.
File metadata
- Download URL: parammadrz-2.5.3.tar.gz
- Upload date:
- Size: 237.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
67e2fdb09f75538ed059ef3c77b168a66a4f43fad7caca34d66a87b8dbc7afd0
|
|
| MD5 |
2087bb92af5ec9b9226b1fbddfcb5e22
|
|
| BLAKE2b-256 |
cd37ef4805ef7f917ccc39b2abbc20020c9c20e39d7e42ac5523a13e1658ff8b
|
File details
Details for the file parammadrz-2.5.3-py3-none-any.whl.
File metadata
- Download URL: parammadrz-2.5.3-py3-none-any.whl
- Upload date:
- Size: 220.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
91de76f1fb63d304755326e002af0429b9877676b8b674227577e76da79175fe
|
|
| MD5 |
3e10fbe3e79b5613d3c3f85b40e97b0e
|
|
| BLAKE2b-256 |
1169abb892777b2ba5b9a6fb8e8beeb93d26143fbad9923ab6e090a909912fa7
|