From 6ec4e81e0202118fae17b92e1850b78313942fe3 Mon Sep 17 00:00:00 2001 From: Rory Yorke Date: Sat, 13 Jan 2018 09:37:44 +0200 Subject: [PATCH] FIX: bdalg.series should reverse order of arguments in product Also corrected doc comment: scaler -> scalar --- control/bdalg.py | 6 +++--- control/tests/bdalg_test.py | 17 +++++++++++++++++ 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/control/bdalg.py b/control/bdalg.py index 3edf287f7..0d1a5e8c4 100644 --- a/control/bdalg.py +++ b/control/bdalg.py @@ -67,7 +67,7 @@ def series(sys1, *sysn): Parameters ---------- sys1: scalar, StateSpace, TransferFunction, or FRD - *sysn: other scalers, StateSpaces, TransferFunctions, or FRDs + *sysn: other scalars, StateSpaces, TransferFunctions, or FRDs Returns ------- @@ -103,7 +103,7 @@ def series(sys1, *sysn): """ from functools import reduce - return reduce(lambda x, y:x*y, sysn, sys1) + return reduce(lambda x, y:y*x, sysn, sys1) def parallel(sys1, *sysn): """ @@ -112,7 +112,7 @@ def parallel(sys1, *sysn): Parameters ---------- sys1: scalar, StateSpace, TransferFunction, or FRD - *sysn: other scalers, StateSpaces, TransferFunctions, or FRDs + *sysn: other scalars, StateSpaces, TransferFunctions, or FRDs Returns ------- diff --git a/control/tests/bdalg_test.py b/control/tests/bdalg_test.py index f3688efa9..07775cb80 100644 --- a/control/tests/bdalg_test.py +++ b/control/tests/bdalg_test.py @@ -237,6 +237,23 @@ def testLists(self): np.testing.assert_array_almost_equal(sort(zero(sys1_5)), sort(zero(sys1 + sys2 + sys3 + sys4 + sys5))) + def testMimoSeries(self): + """regression: bdalg.series reverses order of arguments""" + g1 = ctrl.ss([],[],[],[[1,2],[0,3]]) + g2 = ctrl.ss([],[],[],[[1,0],[2,3]]) + ref = g2*g1 + tst = ctrl.series(g1,g2) + # assert_array_equal on mismatched matrices gives + # "repr failed for : ..." + def assert_equal(x,y): + np.testing.assert_array_equal(np.asarray(x), + np.asarray(y)) + assert_equal(ref.A, tst.A) + assert_equal(ref.B, tst.B) + assert_equal(ref.C, tst.C) + assert_equal(ref.D, tst.D) + + def suite(): return unittest.TestLoader().loadTestsFromTestCase(TestFeedback)