Source code for radarx.fundamentals.common

"""
Common Utilities
================

Shared helper functions for internal use across radarx.fundamentals modules.

.. module:: radarx.fundamentals.common
   :synopsis: Shared helper functions for unit conversion and internal use across radarx.fundamentals modules.

.. autosummary::
   :nosignatures:
   :toctree: generated/

   dbz_from_z
   dbz_to_z
   ensure_positive
   kts_to_mps
   kts_to_si
   km_to_m
   km_to_si
   kilometers_to_meters
   kilometers_to_si
   linearize_dbz
   m_to_km
   meters_to_kilometers
   mps_to_kts
   mps_to_knots
   si_to_kilometers
   si_to_km
   si_to_kts
   z_to_dbz
"""

__all__ = [
    "dbz_from_z",
    "dbz_to_z",
    "ensure_positive",
    "kts_to_mps",
    "kts_to_si",
    "km_to_m",
    "km_to_si",
    "kilometers_to_meters",
    "kilometers_to_si",
    "linearize_dbz",
    "m_to_km",
    "meters_to_kilometers",
    "mps_to_kts",
    "mps_to_knots",
    "si_to_kilometers",
    "si_to_km",
    "si_to_kts",
    "z_to_dbz",
]

import numpy as np


[docs] def ensure_positive(value, name="value"): """ Raise a ValueError if the input value is not positive. Parameters ---------- value : float Numeric value to validate. name : str Optional name of the variable for error messages. Returns ------- float The validated positive value. Raises ------ ValueError If the value is not positive. """ if value <= 0: raise ValueError(f"{name} must be positive, got {value}") return value
[docs] def z_to_dbz(z): """ Convert linear reflectivity Z [mm^6/m^3] to logarithmic dBZ. Parameters ---------- z : float or array-like Linear reflectivity [mm^6/m^3]. Returns ------- float or array-like Reflectivity in dBZ. """ z = np.asarray(z) with np.errstate(divide="ignore"): return 10 * np.log10(z)
[docs] def dbz_to_z(dbz): """ Convert logarithmic reflectivity dBZ to linear Z [mm^6/m^3]. Parameters ---------- dbz : float or array-like Reflectivity in dBZ. Returns ------- float or array-like Linear reflectivity [mm^6/m^3]. """ return 10 ** (np.asarray(dbz) / 10)
[docs] def meters_to_kilometers(meters): """ Convert meters to kilometers. Parameters ---------- meters : float or array-like Distance in meters. Returns ------- float or array-like Distance in kilometers. """ return np.asarray(meters) / 1000.0
[docs] def kilometers_to_meters(kilometers): """ Convert kilometers to meters. Parameters ---------- kilometers : float or array-like Distance in kilometers. Returns ------- float or array-like Distance in meters. """ return np.asarray(kilometers) * 1000.0
def knots_to_mps(knots): """ Convert knots to meters per second. Parameters ---------- knots : float or array-like Speed in knots. Returns ------- float or array-like Speed in meters per second. """ return np.asarray(knots) * 0.514444
[docs] def mps_to_knots(mps): """ Convert meters per second to knots. Parameters ---------- mps : float or array-like Speed in meters per second. Returns ------- float or array-like Speed in knots. """ return np.asarray(mps) / 0.514444
[docs] def si_to_kilometers(value, unit="m"): """ Convert SI distance to kilometers. Parameters ---------- value : float or array-like Distance in SI units (meters by default). unit : str Unit of input value ("m" or "km"). Returns ------- float or array-like Distance in kilometers. """ if unit == "m": return meters_to_kilometers(value) elif unit == "km": return value else: raise ValueError(f"Unsupported unit '{unit}' for distance.")
[docs] def kilometers_to_si(value): """ Convert kilometers to meters (SI). Parameters ---------- value : float or array-like Distance in kilometers. Returns ------- float or array-like Distance in meters (SI). """ return kilometers_to_meters(value)
[docs] def linearize_dbz(dbz): """ Alias for dbz_to_z for compatibility with legacy terminology. Parameters ---------- dbz : float or array-like Reflectivity in dBZ. Returns ------- float or array-like Linear reflectivity Z [mm^6/m^3]. """ return dbz_to_z(dbz)
[docs] def dbz_from_z(z): """ Alias for z_to_dbz for compatibility with legacy terminology. Parameters ---------- z : float or array-like Linear reflectivity [mm^6/m^3]. Returns ------- float or array-like Reflectivity in dBZ. """ return z_to_dbz(z)
[docs] def si_to_kts(value): """ Convert meters per second to knots. Parameters ---------- value : float or array-like Speed in meters per second. Returns ------- float or array-like Speed in knots. """ return mps_to_knots(value)
[docs] def kts_to_si(value): """ Convert knots to meters per second. Parameters ---------- value : float or array-like Speed in knots. Returns ------- float or array-like Speed in meters per second. """ return knots_to_mps(value)
[docs] def m_to_km(meters): """ Convert meters to kilometers. Parameters ---------- meters : float or array-like Distance in meters. Returns ------- float or array-like Distance in kilometers. """ return meters_to_kilometers(meters)
[docs] def km_to_m(kilometers): """ Convert kilometers to meters. Parameters ---------- kilometers : float or array-like Distance in kilometers. Returns ------- float or array-like Distance in meters. """ return kilometers_to_meters(kilometers)
[docs] def mps_to_kts(mps): """ Convert meters per second to knots. Parameters ---------- mps : float or array-like Speed in meters per second. Returns ------- float or array-like Speed in knots. """ return mps_to_knots(mps)
[docs] def kts_to_mps(knots): """ Convert knots to meters per second. Parameters ---------- knots : float or array-like Speed in knots. Returns ------- float or array-like Speed in meters per second. """ return knots_to_mps(knots)
[docs] def si_to_km(value): """ Convert SI distance (meters) to kilometers. Parameters ---------- value : float or array-like Distance in meters. Returns ------- float or array-like Distance in kilometers. """ return meters_to_kilometers(value)
[docs] def km_to_si(kilometers): """ Convert kilometers to meters (SI). Parameters ---------- kilometers : float or array-like Distance in kilometers. Returns ------- float or array-like Distance in meters (SI). """ return kilometers_to_meters(kilometers)