@@ -93,6 +93,70 @@ def test_timebase(self):
93
93
self .assertEqual (timebase (self .siso_tf3d ),True );
94
94
self .assertEqual (timebase (self .siso_tf3d ,strict = False ),1 );
95
95
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
+
96
160
def testisdtime (self ):
97
161
# Constant
98
162
self .assertEqual (isdtime (1 ),True );