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)
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