From 6a8779c1bb01da099dcefac5001b74c7ba428842 Mon Sep 17 00:00:00 2001 From: Richard Murray Date: Wed, 3 Jan 2024 22:20:51 -0800 Subject: [PATCH] fix TimeResponseData.to_pandas() to handle zero state case (#957) --- control/tests/timeresp_test.py | 8 ++++++++ control/timeresp.py | 15 +++++++++------ 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/control/tests/timeresp_test.py b/control/tests/timeresp_test.py index 989c9bd95..fb21180b3 100644 --- a/control/tests/timeresp_test.py +++ b/control/tests/timeresp_test.py @@ -1230,6 +1230,14 @@ def test_to_pandas(): np.testing.assert_equal(df['x[0]'], resp.states[0]) np.testing.assert_equal(df['x[1]'], resp.states[1]) + # System with no states + sys = ct.ss([], [], [], 5) + resp = ct.input_output_response(sys, timepts, np.sin(timepts), t_eval=T) + df = resp.to_pandas() + np.testing.assert_equal(df['time'], resp.time) + np.testing.assert_equal(df['u[0]'], resp.inputs) + np.testing.assert_equal(df['y[0]'], resp.inputs * 5) + @pytest.mark.skipif(pandas_check(), reason="pandas installed") def test_no_pandas(): diff --git a/control/timeresp.py b/control/timeresp.py index bc13ad0d1..3822f13f0 100644 --- a/control/timeresp.py +++ b/control/timeresp.py @@ -678,12 +678,15 @@ def to_pandas(self): # Create a dict for setting up the data frame data = {'time': self.time} - data.update( - {name: self.u[i] for i, name in enumerate(self.input_labels)}) - data.update( - {name: self.y[i] for i, name in enumerate(self.output_labels)}) - data.update( - {name: self.x[i] for i, name in enumerate(self.state_labels)}) + if self.ninputs > 0: + data.update( + {name: self.u[i] for i, name in enumerate(self.input_labels)}) + if self.noutputs > 0: + data.update( + {name: self.y[i] for i, name in enumerate(self.output_labels)}) + if self.nstates > 0: + data.update( + {name: self.x[i] for i, name in enumerate(self.state_labels)}) return pandas.DataFrame(data) 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