@@ -93,6 +93,70 @@ def test_timebase(self):
9393 self .assertEqual (timebase (self .siso_tf3d ), True );
9494 self .assertEqual (timebase (self .siso_tf3d , strict = False ), 1 );
9595
96+ def test_timebase_conversions (self ):
97+ '''Check to make sure timebases transfer properly'''
98+ tf1 = TransferFunction ([1 ,1 ],[1 ,2 ,3 ]) # unspecified
99+ tf2 = TransferFunction ([1 ,1 ],[1 ,2 ,3 ], 0 ) # cont time
100+ tf3 = TransferFunction ([1 ,1 ],[1 ,2 ,3 ], True ) # dtime, unspec
101+ tf4 = TransferFunction ([1 ,1 ],[1 ,2 ,3 ], 1 ) # dtime, dt=1
102+
103+ # Make sure unspecified timebase is converted correctly
104+ self .assertEqual (timebase (tf1 * tf1 ), timebase (tf1 ))
105+ self .assertEqual (timebase (tf1 * tf2 ), timebase (tf2 ))
106+ self .assertEqual (timebase (tf1 * tf3 ), timebase (tf3 ))
107+ self .assertEqual (timebase (tf1 * tf4 ), timebase (tf4 ))
108+ self .assertEqual (timebase (tf2 * tf1 ), timebase (tf2 ))
109+ self .assertEqual (timebase (tf3 * tf1 ), timebase (tf3 ))
110+ self .assertEqual (timebase (tf4 * tf1 ), timebase (tf4 ))
111+ self .assertEqual (timebase (tf1 + tf1 ), timebase (tf1 ))
112+ self .assertEqual (timebase (tf1 + tf2 ), timebase (tf2 ))
113+ self .assertEqual (timebase (tf1 + tf3 ), timebase (tf3 ))
114+ self .assertEqual (timebase (tf1 + tf4 ), timebase (tf4 ))
115+ self .assertEqual (timebase (feedback (tf1 , tf1 )), timebase (tf1 ))
116+ self .assertEqual (timebase (feedback (tf1 , tf2 )), timebase (tf2 ))
117+ self .assertEqual (timebase (feedback (tf1 , tf3 )), timebase (tf3 ))
118+ self .assertEqual (timebase (feedback (tf1 , tf4 )), timebase (tf4 ))
119+
120+ # Make sure discrete time without sampling is converted correctly
121+ self .assertEqual (timebase (tf3 * tf3 ), timebase (tf3 ))
122+ self .assertEqual (timebase (tf3 * tf4 ), timebase (tf4 ))
123+ self .assertEqual (timebase (tf3 + tf3 ), timebase (tf3 ))
124+ self .assertEqual (timebase (tf3 + tf3 ), timebase (tf4 ))
125+ self .assertEqual (timebase (feedback (tf3 , tf3 )), timebase (tf3 ))
126+ self .assertEqual (timebase (feedback (tf3 , tf4 )), timebase (tf4 ))
127+
128+ # Make sure all other combinations are errors
129+ try :
130+ tf2 * tf3 # Error; incompatible timebases
131+ raise ValueError ("incompatible operation allowed" )
132+ except ValueError :
133+ pass
134+ try :
135+ tf2 * tf4 # Error; incompatible timebases
136+ raise ValueError ("incompatible operation allowed" )
137+ except ValueError :
138+ pass
139+ try :
140+ tf2 + tf3 # Error; incompatible timebases
141+ raise ValueError ("incompatible operation allowed" )
142+ except ValueError :
143+ pass
144+ try :
145+ tf2 + tf4 # Error; incompatible timebases
146+ raise ValueError ("incompatible operation allowed" )
147+ except ValueError :
148+ pass
149+ try :
150+ feedback (tf2 , tf3 ) # Error; incompatible timebases
151+ raise ValueError ("incompatible operation allowed" )
152+ except ValueError :
153+ pass
154+ try :
155+ feedback (tf2 , tf4 ) # Error; incompatible timebases
156+ raise ValueError ("incompatible operation allowed" )
157+ except ValueError :
158+ pass
159+
96160 def testisdtime (self ):
97161 # Constant
98162 self .assertEqual (isdtime (1 ), True );
0 commit comments