@@ -171,17 +171,45 @@ def use_legacy_defaults(version):
171171 Parameters
172172 ----------
173173 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'.
175175 """
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