From 906581983dd1e64562063bcb2890a5033bf9450a Mon Sep 17 00:00:00 2001 From: Daniel Sank Date: Tue, 7 Jul 2026 14:17:50 -0700 Subject: [PATCH 1/2] Add sqrt flux and sqrt power. These are useful in the analysis of microwave circuits where we deal with "power waves" having dimensions of square root of power. --- tunits/__init__.py | 2 ++ tunits/core/cython/dimension.pyx | 44 ++++++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+) diff --git a/tunits/__init__.py b/tunits/__init__.py index 52f0b46..ebfa29b 100644 --- a/tunits/__init__.py +++ b/tunits/__init__.py @@ -81,6 +81,8 @@ Resistance as Resistance, SpeedArray as SpeedArray, Speed as Speed, + SqrtFlux as SqrtFlux, + SqrtPower as SqrtPower, SurfaceDensityArray as SurfaceDensityArray, SurfaceDensity as SurfaceDensity, TemperatureArray as TemperatureArray, diff --git a/tunits/core/cython/dimension.pyx b/tunits/core/cython/dimension.pyx index 8637c58..f9f74a3 100644 --- a/tunits/core/cython/dimension.pyx +++ b/tunits/core/cython/dimension.pyx @@ -727,6 +727,50 @@ class SpeedArray(_Speed, ArrayWithDimension): """An array of speed values. Standard unit: meters per second (m/s).""" +class _SqrtFlux(Dimension): + + @staticmethod + @cache + def valid_base_units() -> tuple[Value, ...]: + return (default_unit_database.known_units['Hz'] ** 0.5,) + + def _value_class(self) -> type[Value]: + return SqrtFlux + + def _array_class(self) -> type[ValueArray]: + return SqrtFluxArray + + +class SqrtFlux(_SqrtFlux, ValueWithDimension): + """A scalar value representing square root of flux. Standard unit: sqrt(1/s).""" + + +class SqrtFluxArray(_SqrtFlux, ArrayWithDimension): + """An array of square root of flux. Standard unit: sqrt(1/s).""" + + +class _SqrtPower(Dimension): + + @staticmethod + @cache + def valid_base_units() -> tuple[Value, ...]: + return (default_unit_database.known_units['W'] ** 0.5,) + + def _value_class(self) -> type[Value]: + return SqrtPower + + def _array_class(self) -> type[ValueArray]: + return SqrtPowerArray + + +class SqrtPower(_SqrtPower, ValueWithDimension): + """A scalar value representing square root of power. Standard unit: sqrt(W).""" + + +class SqrtPowerArray(_SqrtPower, ArrayWithDimension): + """An array of square root of power. Standard unit: sqrt(W).""" + + class _SurfaceDensity(Dimension): @staticmethod From 9cdff10504b631818a46b1331289381deccb7704 Mon Sep 17 00:00:00 2001 From: Daniel Sank Date: Thu, 9 Jul 2026 11:10:56 -0700 Subject: [PATCH 2/2] Update __init__.py and __init__.pyi --- tunits/core/__init__.py | 2 ++ tunits/core/__init__.pyi | 20 ++++++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/tunits/core/__init__.py b/tunits/core/__init__.py index 7d91766..42fadac 100644 --- a/tunits/core/__init__.py +++ b/tunits/core/__init__.py @@ -80,6 +80,8 @@ Resistance, SpeedArray, Speed, + SqrtFlux, + SqrtPower, SurfaceDensityArray, SurfaceDensity, TemperatureArray, diff --git a/tunits/core/__init__.pyi b/tunits/core/__init__.pyi index 71f66ec..ab207a8 100644 --- a/tunits/core/__init__.pyi +++ b/tunits/core/__init__.pyi @@ -728,6 +728,26 @@ class Speed(_Speed, ValueWithDimension): class SpeedArray(_Speed, ArrayWithDimension[Speed]): """An array of speed values. Standard unit: meters per second (m/s).""" +class _SqrtFlux(Dimension): + @staticmethod + def valid_base_units() -> tuple[Value, ...]: ... + +class SqrtFlux(_SqrtFlux, ValueWithDimension): + """A scalar value representing square root of flux. Standard unit: sqrt(1/s).""" + +class SqrtFluxArray(_SqrtFlux, ArrayWithDimension[SqrtFlux]): + """An array of sqrt(flux) values. Standard unit: sqrt(1/s).""" + +class _SqrtPower(Dimension): + @staticmethod + def valid_base_units() -> tuple[Value, ...]: ... + +class SqrtPower(_SqrtPower, ValueWithDimension): + """A scalar value representing square root of power. Standard unit: sqrt(Watt).""" + +class SqrtPowerArray(_SqrtPower, ArrayWithDimension[SqrtPower]): + """An array of sqrt(power) values. Standard unit: sqrt(Watt).""" + class _SurfaceDensity(Dimension): @staticmethod def valid_base_units() -> tuple[Value, ...]: ...