Merge pull request #698 from roryyorke/rory/interconnect-io-str · python-control/python-control@e10855e

2 files changed

lines changed

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)

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}