Skip to content

Commit 6ed2e77

Browse files
authored
Merge pull request #958 from murrayrm/to_pandas_bug-03Jan2024
Fix TimeResponseData.to_pandas() to handle zero state case
2 parents b389b64 + 6a8779c commit 6ed2e77

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)