Source code for radarx.core.conversion

"""
Radarx Conversion
=================

This module provides conversions between metric, imperial, and radar-relevant units.
It is designed for consistent, clear, and SI-compliant conversions.

References
----------
- BIPM SI Brochure: https://www.bipm.org/en/publications/si-brochure/
- Doviak and Zrnić (1993), Doppler Radar and Weather Observations

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

   {}
"""

__all__ = [
    "meters_to_kilometers",
    "kilometers_to_meters",
    "meters_to_miles",
    "miles_to_meters",
    "hz_to_mhz",
    "mhz_to_hz",
    "hz_to_ghz",
    "ghz_to_hz",
    "wavelength_to_frequency",
    "frequency_to_wavelength",
    "microseconds_to_seconds",
    "seconds_to_microseconds",
    "mps_to_kph",
    "kph_to_mps",
    "mps_to_knots",
    "knots_to_mps",
    "degrees_to_radians",
    "radians_to_degrees",
    "celsius_to_kelvin",
    "kelvin_to_celsius",
    "meters_to_feet",
    "feet_to_meters",
    "seconds_to_minutes",
    "minutes_to_seconds",
    "kelvin_to_fahrenheit",
    "fahrenheit_to_kelvin",
    "megahertz_to_si",
    "si_to_megahertz",
    "gigahertz_to_si",
    "si_to_gigahertz",
    "kilometers_to_si",
    "si_to_kilometers",
    "miles_to_si",
    "si_to_miles",
    "microseconds_to_si",
    "si_to_microseconds",
    "minutes_to_si",
    "si_to_minutes",
    "celsius_to_si",
    "si_to_celsius",
    "fahrenheit_to_si",
    "si_to_fahrenheit",
]

__doc__ = __doc__.format("\n   ".join(__all__))

from typing import Union
import numpy as np

Number = Union[float, int, np.ndarray]


# Length Conversions
[docs] def meters_to_kilometers(value: Number) -> Number: """Convert meters to kilometers.""" return np.asarray(value) / 1_000
[docs] def kilometers_to_meters(value: Number) -> Number: """Convert kilometers to meters.""" return np.asarray(value) * 1_000
[docs] def meters_to_miles(value: Number) -> Number: """Convert meters to miles.""" return np.asarray(value) / 1_609.344
[docs] def miles_to_meters(value: Number) -> Number: """Convert miles to meters.""" return np.asarray(value) * 1_609.344
# Frequency Conversions
[docs] def hz_to_mhz(value: Number) -> Number: """Convert Hertz to Megahertz.""" return np.asarray(value) / 1e6
[docs] def mhz_to_hz(value: Number) -> Number: """Convert Megahertz to Hertz.""" return np.asarray(value) * 1e6
[docs] def hz_to_ghz(value: Number) -> Number: """Convert Hertz to Gigahertz.""" return np.asarray(value) / 1e9
[docs] def ghz_to_hz(value: Number) -> Number: """Convert Gigahertz to Hertz.""" return np.asarray(value) * 1e9
# Wavelength Conversions
[docs] def wavelength_to_frequency(wavelength_m: Number, c: float = 3e8) -> Number: """Convert wavelength in meters to frequency in Hz.""" return np.asarray(c) / np.asarray(wavelength_m)
[docs] def frequency_to_wavelength(frequency_hz: Number, c: float = 3e8) -> Number: """Convert frequency in Hz to wavelength in meters.""" return np.asarray(c) / np.asarray(frequency_hz)
# Time Conversions
[docs] def microseconds_to_seconds(value: Number) -> Number: """Convert microseconds to seconds.""" return np.asarray(value) * 1e-6
[docs] def seconds_to_microseconds(value: Number) -> Number: """Convert seconds to microseconds.""" return np.asarray(value) / 1e-6
# Velocity Conversions
[docs] def mps_to_kph(value: Number) -> Number: """Convert meters per second to kilometers per hour.""" return np.asarray(value) * 3.6
[docs] def kph_to_mps(value: Number) -> Number: """Convert kilometers per hour to meters per second.""" return np.asarray(value) / 3.6
[docs] def mps_to_knots(value: Number) -> Number: """Convert meters per second to knots.""" return np.asarray(value) * 1.943844
[docs] def knots_to_mps(value: Number) -> Number: """Convert knots to meters per second.""" return np.asarray(value) / 1.943844
# Angular Conversions
[docs] def degrees_to_radians(value: Number) -> Number: """Convert degrees to radians.""" return np.radians(value)
[docs] def radians_to_degrees(value: Number) -> Number: """Convert radians to degrees.""" return np.degrees(value)
# Temperature Conversions
[docs] def celsius_to_kelvin(value: Number) -> Number: """Convert Celsius to Kelvin.""" return np.asarray(value) + 273.15
[docs] def kelvin_to_celsius(value: Number) -> Number: """Convert Kelvin to Celsius.""" return np.asarray(value) - 273.15
# Additional Length Conversions
[docs] def meters_to_feet(value: Number) -> Number: """Convert meters to feet.""" return np.asarray(value) * 3.28084
[docs] def feet_to_meters(value: Number) -> Number: """Convert feet to meters.""" return np.asarray(value) / 3.28084
# Additional Time Conversions
[docs] def seconds_to_minutes(value: Number) -> Number: """Convert seconds to minutes.""" return np.asarray(value) / 60
[docs] def minutes_to_seconds(value: Number) -> Number: """Convert minutes to seconds.""" return np.asarray(value) * 60
# Additional Temperature Conversions
[docs] def kelvin_to_fahrenheit(value: Number) -> Number: """Convert Kelvin to Fahrenheit.""" return (np.asarray(value) - 273.15) * 9 / 5 + 32
[docs] def fahrenheit_to_kelvin(value: Number) -> Number: """Convert Fahrenheit to Kelvin.""" return (np.asarray(value) - 32) * 5 / 9 + 273.15
# SI-compliant alias functions for unit conversions # Frequency aliases megahertz_to_si = mhz_to_hz si_to_megahertz = hz_to_mhz gigahertz_to_si = ghz_to_hz si_to_gigahertz = hz_to_ghz # Length aliases kilometers_to_si = kilometers_to_meters si_to_kilometers = meters_to_kilometers miles_to_si = miles_to_meters si_to_miles = meters_to_miles # Time aliases microseconds_to_si = microseconds_to_seconds si_to_microseconds = seconds_to_microseconds minutes_to_si = minutes_to_seconds si_to_minutes = seconds_to_minutes # Temperature aliases celsius_to_si = celsius_to_kelvin si_to_celsius = kelvin_to_celsius fahrenheit_to_si = fahrenheit_to_kelvin si_to_fahrenheit = kelvin_to_fahrenheit