@@ -35,3 +35,28 @@ def test_composition(dt1, dt2, dt3, op, type):
35
35
else :
36
36
sys3 = op (sys1 ,sys2 )
37
37
assert sys3 .dt == dt3
38
+
39
+
40
+ @pytest .mark .parametrize ("dt" , [None ,0 ,0.1 ])
41
+ def test_composition_override (dt ):
42
+ # Define the system
43
+ A ,B ,C ,D = [[1 ,1 ], [0 ,1 ]], [[0 ], [1 ]], [[1 ,0 ]],0
44
+ sys1 = ct .ss (A ,B ,C ,D ,None ,inputs = 'u1' ,outputs = 'y1' )
45
+ sys2 = ct .ss (A ,B ,C ,D ,None ,inputs = 'y1' ,outputs = 'y2' )
46
+
47
+ # Show that we can override the type
48
+ sys3 = ct .interconnect ([sys1 ,sys2 ],inputs = 'u1' ,outputs = 'y2' ,dt = dt )
49
+ assert sys3 .dt == dt
50
+
51
+ # Overriding the type with an inconsistent type generates an error
52
+ sys1 = ct .StateSpace (A ,B ,C ,D ,0.1 ,inputs = 'u1' ,outputs = 'y1' )
53
+ if dt != 0.1 and dt is not None :
54
+ with pytest .raises (ValueError ,match = "incompatible timebases" ):
55
+ sys3 = ct .interconnect (
56
+ [sys1 ,sys2 ],inputs = 'u1' ,outputs = 'y2' ,dt = dt )
57
+
58
+ sys1 = ct .StateSpace (A ,B ,C ,D ,0 ,inputs = 'u1' ,outputs = 'y1' )
59
+ if dt != 0 and dt is not None :
60
+ with pytest .raises (ValueError ,match = "incompatible timebases" ):
61
+ sys3 = ct .interconnect (
62
+ [sys1 ,sys2 ],inputs = 'u1' ,outputs = 'y2' ,dt = dt )