From 207a059e2763e43e0823bcc43ad6f19fa5416c3a Mon Sep 17 00:00:00 2001 From: Ben Greiner Date: Mon, 1 Nov 2021 12:50:20 +0100 Subject: [PATCH 1/6] ease test tolerance on timeseries --- control/tests/flatsys_test.py | 5 +++-- control/tests/timeresp_test.py | 3 ++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/control/tests/flatsys_test.py b/control/tests/flatsys_test.py index 373af8dae..6f4ef7cef 100644 --- a/control/tests/flatsys_test.py +++ b/control/tests/flatsys_test.py @@ -339,8 +339,9 @@ def test_point_to_point_errors(self): traj_kwarg = fs.point_to_point( flat_sys, timepts, x0, u0, xf, uf, cost=cost_fcn, basis=fs.PolyFamily(8), minimize_kwargs={'method': 'slsqp'}) - np.testing.assert_almost_equal( - traj_method.eval(timepts)[0], traj_kwarg.eval(timepts)[0]) + np.testing.assert_allclose( + traj_method.eval(timepts)[0], traj_kwarg.eval(timepts)[0], + atol=1e-5) # Unrecognized keywords with pytest.raises(TypeError, match="unrecognized keyword"): diff --git a/control/tests/timeresp_test.py b/control/tests/timeresp_test.py index c74c0c06d..d9cb065f6 100644 --- a/control/tests/timeresp_test.py +++ b/control/tests/timeresp_test.py @@ -681,7 +681,8 @@ def test_forced_response_T_U(self, tsystem, fr_kwargs, refattr): fr_kwargs['X0'] = tsystem.X0 t, y = forced_response(tsystem.sys, **fr_kwargs) np.testing.assert_allclose(t, tsystem.t) - np.testing.assert_allclose(y, getattr(tsystem, refattr), rtol=1e-3) + np.testing.assert_allclose(y, getattr(tsystem, refattr), + rtol=1e-3, atol=1e-5) @pytest.mark.parametrize("tsystem", ["siso_ss1"], indirect=True) def test_forced_response_invalid_c(self, tsystem): From feb88154c82327370b59dcbadf8133e7f2eb5af8 Mon Sep 17 00:00:00 2001 From: Ben Greiner Date: Mon, 1 Nov 2021 13:48:40 +0100 Subject: [PATCH 2/6] debug noslycot solve error --- control/statesp.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/control/statesp.py b/control/statesp.py index 6b3a1dff3..21f09f3d5 100644 --- a/control/statesp.py +++ b/control/statesp.py @@ -909,7 +909,9 @@ def horner(self, x, warn_infinite=True): self.C, solve(x_idx * eye(self.nstates) - self.A, self.B)) \ + self.D - except LinAlgError: + except LinAlgError as e: + print(self) + raise e # Issue a warning messsage, for consistency with xferfcn if warn_infinite: warn("singular matrix in frequency response", From 73062d94874e6ca8fd59a5d1758fa2a863157092 Mon Sep 17 00:00:00 2001 From: Ben Greiner Date: Mon, 1 Nov 2021 14:00:53 +0100 Subject: [PATCH 3/6] debug noslycot solve error: don't raise but print --- control/statesp.py | 1 - 1 file changed, 1 deletion(-) diff --git a/control/statesp.py b/control/statesp.py index 21f09f3d5..b05f47732 100644 --- a/control/statesp.py +++ b/control/statesp.py @@ -911,7 +911,6 @@ def horner(self, x, warn_infinite=True): + self.D except LinAlgError as e: print(self) - raise e # Issue a warning messsage, for consistency with xferfcn if warn_infinite: warn("singular matrix in frequency response", From 6a8b62f6fd1f903d5446800f279569ac561b9eaa Mon Sep 17 00:00:00 2001 From: Ben Greiner Date: Mon, 1 Nov 2021 14:07:09 +0100 Subject: [PATCH 4/6] debug noslycot solve error: don't raise but print nan --- control/statesp.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/control/statesp.py b/control/statesp.py index b05f47732..cde8cb42f 100644 --- a/control/statesp.py +++ b/control/statesp.py @@ -910,7 +910,6 @@ def horner(self, x, warn_infinite=True): solve(x_idx * eye(self.nstates) - self.A, self.B)) \ + self.D except LinAlgError as e: - print(self) # Issue a warning messsage, for consistency with xferfcn if warn_infinite: warn("singular matrix in frequency response", @@ -922,6 +921,9 @@ def horner(self, x, warn_infinite=True): out[:, :, idx] = complex(np.nan, np.nan) else: out[:, :, idx] = complex(np.inf, np.nan) + if np.any(np.isnan(out)): + print(self) + print(out) return out From d163e1523781f5c01ab42f11068cd23afc44c1a6 Mon Sep 17 00:00:00 2001 From: Ben Greiner Date: Mon, 1 Nov 2021 15:29:05 +0100 Subject: [PATCH 5/6] debug noslycot solve error: don't raise but print nan, when created --- control/statesp.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/control/statesp.py b/control/statesp.py index cde8cb42f..0ceacbd9f 100644 --- a/control/statesp.py +++ b/control/statesp.py @@ -921,9 +921,10 @@ def horner(self, x, warn_infinite=True): out[:, :, idx] = complex(np.nan, np.nan) else: out[:, :, idx] = complex(np.inf, np.nan) - if np.any(np.isnan(out)): - print(self) - print(out) + else: + if np.any(np.isnan(out[:, :, idx])): + print(idx, x_idx, self.A, self.B) + print(out[:, :, idx]) return out From 8f368483bf30c223784b1b90eaea368d3d358dba Mon Sep 17 00:00:00 2001 From: Ben Greiner Date: Mon, 1 Nov 2021 21:27:29 +0100 Subject: [PATCH 6/6] Update control/statesp.py --- control/statesp.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/control/statesp.py b/control/statesp.py index 0ceacbd9f..ffd579247 100644 --- a/control/statesp.py +++ b/control/statesp.py @@ -909,7 +909,7 @@ def horner(self, x, warn_infinite=True): self.C, solve(x_idx * eye(self.nstates) - self.A, self.B)) \ + self.D - except LinAlgError as e: + except LinAlgError: # Issue a warning messsage, for consistency with xferfcn if warn_infinite: warn("singular matrix in frequency response", pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy