@@ -171,17 +171,45 @@ def use_legacy_defaults(version):
171
171
Parameters
172
172
----------
173
173
version : string
174
- version number of the defaults desired. ranges from '0.1' to '0.8.4'.
174
+ Version number of the defaults desired. Ranges from '0.1' to '0.8.4'.
175
175
"""
176
- numbers_list = version .split ("." )
177
- first_digit = int (numbers_list [0 ])
178
- second_digit = int (numbers_list [1 ].strip ('abcdef' )) # remove trailing letters
179
- if second_digit < 8 :
180
- # TODO: anything for 0.7 and below if needed
181
- pass
182
- elif second_digit == 8 :
183
- if len (version ) > 4 :
184
- third_digit = int (version [4 ])
185
- use_numpy_matrix (True ) # alternatively: set_defaults('statesp', use_numpy_matrix=True)
186
- else :
187
- raise ValueError ('''version number not recognized. Possible values range from '0.1' to '0.8.4'.''' )
176
+ import re
177
+ (major , minor , patch ) = (None , None , None ) # default values
178
+
179
+ # Early release tag format: REL-0.N
180
+ match = re .match ("REL-0.([12])" , version )
181
+ if match : (major , minor , patch ) = (0 , int (match .group (1 )), 0 )
182
+
183
+ # Early release tag format: control-0.Np
184
+ match = re .match ("control-0.([3-6])([a-d])" , version )
185
+ if match : (major , minor , patch ) = \
186
+ (0 , int (match .group (1 )), ord (match .group (2 )) - ord ('a' ) + 1 )
187
+
188
+ # Early release tag format: v0.Np
189
+ match = re .match ("[vV]?0.([3-6])([a-d])" , version )
190
+ if match : (major , minor , patch ) = \
191
+ (0 , int (match .group (1 )), ord (match .group (2 )) - ord ('a' ) + 1 )
192
+
193
+ # Abbreviated version format: vM.N or M.N
194
+ match = re .match ("([vV]?[0-9]).([0-9])" , version )
195
+ if match : (major , minor , patch ) = \
196
+ (int (match .group (1 )), int (match .group (2 )), 0 )
197
+
198
+ # Standard version format: vM.N.P or M.N.P
199
+ match = re .match ("[vV]?([0-9]).([0-9]).([0-9])" , version )
200
+ if match : (major , minor , patch ) = \
201
+ (int (match .group (1 )), int (match .group (2 )), int (match .group (3 )))
202
+
203
+ # Make sure we found match
204
+ if major is None or minor is None :
205
+ raise ValueError ("Version number not recognized. Try M.N.P format." )
206
+
207
+ #
208
+ # Go backwards through releases and reset defaults
209
+ #
210
+
211
+ # Version 0.9.0: switched to 'array' as default for state space objects
212
+ if major == 0 and minor < 9 :
213
+ set_defaults ('statesp' , use_numpy_matrix = True )
214
+
215
+ return (major , minor , patch )
0 commit comments