Skip to content

Commit 8b5eb47

Browse files
committed
squashed noslycot losing signal names bug, added unit tests
1 parent ebabbd6 commit 8b5eb47

File tree

2 files changed

+25
-7
lines changed

2 files changed

+25
-7
lines changed

control/statesp.py

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -170,9 +170,9 @@ class StateSpace(LTI):
170170
171171
The StateSpace class is used to represent state-space realizations of
172172
linear time-invariant (LTI) systems:
173-
173+
174174
.. math::
175-
175+
176176
dx/dt &= A x + B u \\
177177
y &= C x + D u
178178
@@ -1561,7 +1561,8 @@ def _convert_to_statespace(sys):
15611561
return StateSpace(
15621562
ssout[1][:states, :states], ssout[2][:states, :sys.ninputs],
15631563
ssout[3][:sys.noutputs, :states], ssout[4], sys.dt,
1564-
inputs=sys.input_labels, outputs=sys.output_labels)
1564+
inputs=sys.input_labels, outputs=sys.output_labels,
1565+
name=sys.name)
15651566
except ImportError:
15661567
# No Slycot. Scipy tf->ss can't handle MIMO, but static
15671568
# MIMO is an easy special case we can check for here
@@ -1574,7 +1575,9 @@ def _convert_to_statespace(sys):
15741575
for i, j in itertools.product(range(sys.noutputs),
15751576
range(sys.ninputs)):
15761577
D[i, j] = sys.num[i][j][0] / sys.den[i][j][0]
1577-
return StateSpace([], [], [], D, sys.dt)
1578+
return StateSpace([], [], [], D, sys.dt,
1579+
inputs=sys.input_labels, outputs=sys.output_labels,
1580+
name=sys.name)
15781581
else:
15791582
if sys.ninputs != 1 or sys.noutputs != 1:
15801583
raise TypeError("No support for MIMO without slycot")
@@ -1586,7 +1589,7 @@ def _convert_to_statespace(sys):
15861589
sp.signal.tf2ss(squeeze(sys.num), squeeze(sys.den))
15871590
return StateSpace(
15881591
A, B, C, D, sys.dt, inputs=sys.input_labels,
1589-
outputs=sys.output_labels)
1592+
outputs=sys.output_labels, name=sys.name)
15901593

15911594
elif isinstance(sys, FrequencyResponseData):
15921595
raise TypeError("Can't convert FRD to StateSpace system.")

control/tests/namedio_test.py

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -241,14 +241,29 @@ def test_init_namedif():
241241

242242
# Test state space conversion
243243
def test_convert_to_statespace():
244-
# Set up the initial system
245-
sys = ct.tf(ct.rss(2, 1, 1))
244+
# Set up the initial systems
245+
sys = ct.tf(ct.rss(2, 1, 1), inputs='u', outputs='y', name='sys')
246+
sys_static = ct.tf(1, 2, inputs='u', outputs='y', name='sys_static')
247+
248+
# check that name, inputs, and outputs passed through
249+
sys_new = ct.ss(sys)
250+
assert sys_new.name == 'sys'
251+
assert sys_new.input_labels == ['u']
252+
assert sys_new.output_labels == ['y']
253+
sys_new = ct.ss(sys_static)
254+
assert sys_new.name == 'sys_static'
255+
assert sys_new.input_labels == ['u']
256+
assert sys_new.output_labels == ['y']
246257

247258
# Make sure we can rename system name, inputs, outputs
248259
sys_new = ct.ss(sys, inputs='u', outputs='y', name='new')
249260
assert sys_new.name == 'new'
250261
assert sys_new.input_labels == ['u']
251262
assert sys_new.output_labels == ['y']
263+
sys_new = ct.ss(sys_static, inputs='u', outputs='y', name='new')
264+
assert sys_new.name == 'new'
265+
assert sys_new.input_labels == ['u']
266+
assert sys_new.output_labels == ['y']
252267

253268
# Try specifying the state names (via low level test)
254269
with pytest.warns(UserWarning, match="non-unique state space realization"):

0 commit comments

Comments
 (0)