diff --git a/CHANGES b/CHANGES index 78917394f..1cde05402 100644 --- a/CHANGES +++ b/CHANGES @@ -10,7 +10,8 @@ Pint Changelog (PR #1803) - Optimize matplotlib unit conversion for Quantity arrays (PR #1819) - +- Add numpy.linalg.norm implementation. + (PR #1251) 0.22 (2023-05-25) ----------------- diff --git a/pint/facets/numpy/numpy_func.py b/pint/facets/numpy/numpy_func.py index f9f64f329..7c31de0c3 100644 --- a/pint/facets/numpy/numpy_func.py +++ b/pint/facets/numpy/numpy_func.py @@ -1003,7 +1003,15 @@ def implementation(a, *args, **kwargs): implement_func("function", func_str, input_units=None, output_unit=None) # Handle functions with output unit defined by operation -for func_str in ("std", "nanstd", "sum", "nansum", "cumsum", "nancumsum"): +for func_str in ( + "std", + "nanstd", + "sum", + "nansum", + "cumsum", + "nancumsum", + "linalg.norm", +): implement_func("function", func_str, input_units=None, output_unit="sum") for func_str in ("diff", "ediff1d"): implement_func("function", func_str, input_units=None, output_unit="delta") diff --git a/pint/testsuite/test_numpy.py b/pint/testsuite/test_numpy.py index f843bc99b..83308b2f7 100644 --- a/pint/testsuite/test_numpy.py +++ b/pint/testsuite/test_numpy.py @@ -1425,6 +1425,12 @@ def test_intersect1d(self): [1, 3] * self.ureg.m, ) + @helpers.requires_array_function_protocol() + def test_linalg_norm(self): + q = np.array([[3, 5, 8], [4, 12, 15]]) * self.ureg.m + expected = [5, 13, 17] * self.ureg.m + helpers.assert_quantity_equal(np.linalg.norm(q, axis=0), expected) + @pytest.mark.skip class TestBitTwiddlingUfuncs(TestUFuncs):