From fc10b363b3c35313ac2f1bf14f83daec2bf22c41 Mon Sep 17 00:00:00 2001 From: Thomas Albers Raviola Date: Tue, 4 Jun 2024 11:26:32 +0200 Subject: Throw exception on linear dependence --- solvers.py | 4 ++-- test/test_solvers.py | 12 +++++------- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/solvers.py b/solvers.py index 72f1b1d..38ac247 100644 --- a/solvers.py +++ b/solvers.py @@ -92,7 +92,7 @@ def gaussian_eliminate( aa: NDArray[np.float_], bb: NDArray[np.float_], tolerance: float = 1e-6 -) -> NDArray[np.float_] | None: +) -> NDArray[np.float_]: '''Solves a linear system of equations (A x = b) by LUP factorization. Args: @@ -108,7 +108,7 @@ def gaussian_eliminate( nn = uu.shape[0] # Check if rank of matrix is lower than nn if np.abs(uu[nn - 1, nn - 1]) < tolerance: - return None + raise ValueError # L y = P @ b y = forward_substitution(ll, pp @ bb) diff --git a/test/test_solvers.py b/test/test_solvers.py index a7c175f..b049cca 100644 --- a/test/test_solvers.py +++ b/test/test_solvers.py @@ -1,6 +1,7 @@ #!/usr/bin/env python3 """Contains routines to test the solvers module""" +import pytest import numpy as np from numpy.typing import NDArray @@ -27,11 +28,10 @@ def test_pivot_3() -> None: def test_lindep_3() -> None: """Tests a linearly dependent system wit three variables.""" - aa = np.array([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0], [7.0, 8.0, 9.0]]) - bb = np.array([1.0, 2.0, 3.0]) - xx_expected = None - xx_gauss = solvers.gaussian_eliminate(aa, bb) - assert xx_expected == xx_gauss + with pytest.raises(ValueError): + aa = np.array([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0], [7.0, 8.0, 9.0]]) + bb = np.array([1.0, 2.0, 3.0]) + xx_gauss = solvers.gaussian_eliminate(aa, bb) def test_lu_factorization() -> None: @@ -45,7 +45,6 @@ def test_forward_substitution() -> None: bb = np.array([3.0, 2.0, 1.0]) xx_result = solvers.forward_substitution(ll, bb) xx_expected = np.array([3 / 2, 7.0 / 4.0, -6]) - print(xx_result) assert np.allclose(xx_expected, xx_result) def test_back_substitution() -> None: @@ -53,5 +52,4 @@ def test_back_substitution() -> None: bb = np.array([1.0, 2.0, 3.0]) xx_result = solvers.back_substitution(uu, bb) xx_expected = np.array([-6, 7.0 / 4.0, 3.0 / 2.0]) - print(xx_result) assert np.allclose(xx_expected, xx_result) -- cgit v1.2.3