From 78f79f740d14fc8644c2baedb598402af382980d Mon Sep 17 00:00:00 2001 From: Lucas Colley Date: Wed, 1 Jan 2025 21:38:20 +0000 Subject: [PATCH] fix std, var units --- src/pint_array/__init__.py | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/pint_array/__init__.py b/src/pint_array/__init__.py index 284e319..2f0e274 100644 --- a/src/pint_array/__init__.py +++ b/src/pint_array/__init__.py @@ -729,7 +729,6 @@ def set_fun(x, /): # output_unit="sum": # `x.units`, unless non-multiplicative, which raises `OffsetUnitCalculusError` for func_str in ( - "std", "cumulative_sum", "sum", ): @@ -745,6 +744,17 @@ def func(x, /, *args, func_str=func_str, **kwargs): setattr(mod, func_str, func) + # output_unit="delta" + def std(x, /, **kwargs): + x = asarray(x) + magnitude = xp.asarray(x.magnitude, copy=True) + units = x.units + magnitude = xp.std(magnitude, **kwargs) + units = (1 * units - 1 * units).units + return ArrayUnitQuantity(magnitude, units) + + mod.std = std + for func_str in ( "any", "all", @@ -764,14 +774,14 @@ def func(x, /, *args, func_str=func_str, **kwargs): setattr(mod, func_str, func) # output_unit="variance": - # square of `x.units`, + # square of delta `x.units`, # unless non-multiplicative, which raises `OffsetUnitCalculusError` def var(x, /, *args, **kwargs): x = asarray(x) magnitude = xp.asarray(x.magnitude, copy=True) units = x.units magnitude = xp.var(magnitude, *args, **kwargs) - units = ((1 * units + 1 * units) ** 2).units + units = ((1 * units - 1 * units) ** 2).units return ArrayUnitQuantity(magnitude, units) mod.var = var