# Scripts

This directory contains utility scripts for validation, data preparation, plotting, profiling, and output analysis.

## Bash Scripts

- [check_private_prefix.sh](./check_private_prefix.sh): Checks that private `libHYPREDRV` callables use the `hypredrv_` prefix.
- [check_symbol_prefix.sh](./check_symbol_prefix.sh): Verifies that all global symbols in the built `libHYPREDRV` library use approved prefixes.
- [compare_output.sh](./compare_output.sh): Normalizes timestamps, versions, and paths before diffing an output file against a reference output.
- [download_and_extract.sh](./download_and_extract.sh): Downloads a tarball, verifies its MD5 checksum, and extracts it into a destination directory.
- [download_spe10_case2a.sh](./download_spe10_case2a.sh): Downloads and unpacks the SPE10 model 2 dataset into `data/spe10_case2a`.
- [fetch_suitesparse_matrix.sh](./fetch_suitesparse_matrix.sh): Downloads and unpacks SuiteSparse Collection matrices by `ID`, `Group/Name`, or `URL`.
- [fetch_build_test.sh](./fetch_build_test.sh): Fetch, build, and test hypredrive on different machines.
- [generate_example_output.sh](./generate_example_output.sh): Runs the example YAML inputs and regenerates normalized reference outputs for the examples.
- [generate_release.sh](./generate_release.sh): Bumps version strings in `CMakeLists.txt` and `conf.py` for a new release.
- [list_public_apis.sh](./list_public_apis.sh): Generates a sorted list of all public `HYPREDRV_` API function names by parsing `include/HYPREDRV.h`.
- [node_scaling.sh](./node_scaling.sh): Runs single-node problem-size scaling studies on supported LLNL, ALCF, and OLCF machines.
- [perf_laplacian.sh](./perf_laplacian.sh): Builds and runs a Laplacian driver across hypre versions with optional profiling and scaling summaries.

## Python Scripts

- [analyze_caliper.py](./analyze_caliper.py): Parses Caliper runtime reports and builds an interactive hierarchical timing visualization.
- [analyze_coverage.py](./analyze_coverage.py): Summarizes, normalizes, and checks `gcovr` coverage reports.
- [analyze_statistics.py](./analyze_statistics.py): Parses statistics outputs and generates plots for iterations, timings, and related solver metrics.
- [eigplot.py](./eigplot.py): Reads eigenvalue files and plots the spectrum with summary statistics and optional histogram or inset views.
- [job_launcher.py](./job_launcher.py): Portable wrapper automating job submission across diverse HPC platforms.
- [parse_logs.py](./parse_logs.py): Mode-based HypreDrive log analyzer. Use `--mode block_norms` to extract block Frobenius norms as labeled tables, Python matrices, or CSV.
- [plot_convergence.py](./plot_convergence.py): Parses solver convergence histories and plots residual-vs-iteration data for one or more runs.
- [spmat_reorder.py](./spmat_reorder.py): Reorders HYPRE IJ matrices by dofmap index groups and can write reordered matrices and partition info.
- [spyplot.py](./spyplot.py): Reads HYPRE matrix files and generates sparse matrix spy plots from text or binary matrix parts.
