Skip to content

Commit 37d3148

Browse files
committed
Interpret str-type args to interconnect as non-sequence
If the arguments `inputs` or `outputs` (or their aliases `input` or `output`) are of type str, treat as a list containing that string. Fixes gh-692.
1 parent e8db508 commit 37d3148

File tree

2 files changed

+25
-0
lines changed

2 files changed

+25
-0
lines changed

control/iosys.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2519,6 +2519,11 @@ def interconnect(syslist, connections=None, inplist=[], outlist=[],
25192519
# Use an empty connections list
25202520
connections = []
25212521

2522+
if isinstance(inputs, str):
2523+
inputs = [inputs]
2524+
if isinstance(outputs, str):
2525+
outputs = [outputs]
2526+
25222527
# If inplist/outlist is not present, try using inputs/outputs instead
25232528
if not inplist and inputs is not None:
25242529
inplist = list(inputs)

control/tests/interconnect_test.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -210,3 +210,23 @@ def test_interconnect_exceptions():
210210

211211
with pytest.raises(TypeError, match="unknown parameter"):
212212
sumblk = ct.summing_junction(input_count=2, output_count=2)
213+
214+
215+
def test_string_inputoutput():
216+
# regression test for gh-692
217+
P1 = ct.rss(2, 1, 1)
218+
P1_iosys = ct.LinearIOSystem(P1, inputs='u1', outputs='y1')
219+
P2 = ct.rss(2, 1, 1)
220+
P2_iosys = ct.LinearIOSystem(P2, inputs='y1', outputs='y2')
221+
222+
P_s1 = ct.interconnect([P1_iosys, P2_iosys], inputs='u1', outputs=['y2'])
223+
assert P_s1.input_index == {'u1' : 0}
224+
225+
P_s2 = ct.interconnect([P1_iosys, P2_iosys], input='u1', outputs=['y2'])
226+
assert P_s2.input_index == {'u1' : 0}
227+
228+
P_s1 = ct.interconnect([P1_iosys, P2_iosys], inputs=['u1'], outputs='y2')
229+
assert P_s1.output_index == {'y2' : 0}
230+
231+
P_s2 = ct.interconnect([P1_iosys, P2_iosys], inputs=['u1'], output='y2')
232+
assert P_s2.output_index == {'y2' : 0}

0 commit comments

Comments
 (0)