Skip to content

Commit 6a8779c

Browse files
committed
fix TimeResponseData.to_pandas() to handle zero state case (#957)
1 parent b389b64 commit 6a8779c

File tree

2 files changed

+17
-6
lines changed

2 files changed

+17
-6
lines changed

control/tests/timeresp_test.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1230,6 +1230,14 @@ def test_to_pandas():
12301230
np.testing.assert_equal(df['x[0]'], resp.states[0])
12311231
np.testing.assert_equal(df['x[1]'], resp.states[1])
12321232

1233+
# System with no states
1234+
sys = ct.ss([], [], [], 5)
1235+
resp = ct.input_output_response(sys, timepts, np.sin(timepts), t_eval=T)
1236+
df = resp.to_pandas()
1237+
np.testing.assert_equal(df['time'], resp.time)
1238+
np.testing.assert_equal(df['u[0]'], resp.inputs)
1239+
np.testing.assert_equal(df['y[0]'], resp.inputs * 5)
1240+
12331241

12341242
@pytest.mark.skipif(pandas_check(), reason="pandas installed")
12351243
def test_no_pandas():

control/timeresp.py

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -678,12 +678,15 @@ def to_pandas(self):
678678

679679
# Create a dict for setting up the data frame
680680
data = {'time': self.time}
681-
data.update(
682-
{name: self.u[i] for i, name in enumerate(self.input_labels)})
683-
data.update(
684-
{name: self.y[i] for i, name in enumerate(self.output_labels)})
685-
data.update(
686-
{name: self.x[i] for i, name in enumerate(self.state_labels)})
681+
if self.ninputs > 0:
682+
data.update(
683+
{name: self.u[i] for i, name in enumerate(self.input_labels)})
684+
if self.noutputs > 0:
685+
data.update(
686+
{name: self.y[i] for i, name in enumerate(self.output_labels)})
687+
if self.nstates > 0:
688+
data.update(
689+
{name: self.x[i] for i, name in enumerate(self.state_labels)})
687690

688691
return pandas.DataFrame(data)
689692

0 commit comments

Comments
 (0)
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