Source code for ravenpy.testing.helpers

from pathlib import Path

import numpy as np
import pandas as pd
import xarray as xr


__all__ = [
    "count_pixels",
    "make_bnds",
    "synthetic_gr4j_inputs",
]


[docs] def count_pixels(stats: dict, numeric_categories=False) -> int: category_counts = 0 for key, val in stats.items(): if numeric_categories: try: int(key) except ValueError: # noqa: S112 continue if key in ["count", "min", "max", "mean", "median", "sum", "nodata"]: continue category_counts += val return category_counts
[docs] def make_bnds(params, delta): """ Return low and high parameter bounds by subtracting and adding delta*params to params. Parameters ---------- params : sequence Parameters. delta : float [0,1] Relative delta to subtract and add to parameters. Returns ------- (tuple, tuple) Low and high bounds for parameters. """ arr = np.asarray(params) d = np.abs(arr * delta) return tuple(arr - d), tuple(arr + d)
[docs] def synthetic_gr4j_inputs(path): time = pd.date_range(start="2000-07-01", end="2002-07-01", freq="D") pr = 3 * np.ones(len(time)) pr = xr.DataArray(pr, coords={"time": time}, dims="time", name="pr") pr.to_netcdf(Path(path).joinpath("pr.nc")) tas = 280 + 20 * np.cos(np.arange(len(time)) * 2 * np.pi / 365.0) tas = xr.DataArray(tas, coords={"time": time}, dims="time", name="tas") tas.to_netcdf(Path(path).joinpath("tas.nc")) evap = 3 + 3 * np.cos(-30 + np.arange(len(time)) * 2 * np.pi / 365.0) evap = xr.DataArray(evap, coords={"time": time}, dims="time", name="evap") evap.to_netcdf(Path(path).joinpath("evap.nc"))