1+ import warnings
2+
13import mmcv
4+ from packaging .version import parse
25
36from .version import __version__ , version_info
47
58MMCV_MIN = '1.3.7'
69MMCV_MAX = '1.4.0'
710
811
9- def digit_version (version_str ):
10- digit_version = []
11- for x in version_str .split ('.' ):
12- if x .isdigit ():
13- digit_version .append (int (x ))
14- elif x .find ('rc' ) != - 1 :
15- patch_version = x .split ('rc' )
16- digit_version .append (int (patch_version [0 ]) - 1 )
17- digit_version .append (int (patch_version [1 ]))
18- return digit_version
12+ def digit_version (version_str : str , length : int = 4 ):
13+ """Convert a version string into a tuple of integers.
14+
15+ This method is usually used for comparing two versions. For pre-release
16+ versions: alpha < beta < rc.
17+
18+ Args:
19+ version_str (str): The version string.
20+ length (int): The maximum number of version levels. Default: 4.
21+
22+ Returns:
23+ tuple[int]: The version info in digits (integers).
24+ """
25+ version = parse (version_str )
26+ assert version .release , f'failed to parse version { version_str } '
27+ release = list (version .release )
28+ release = release [:length ]
29+ if len (release ) < length :
30+ release = release + [0 ] * (length - len (release ))
31+ if version .is_prerelease :
32+ mapping = {'a' : - 3 , 'b' : - 2 , 'rc' : - 1 }
33+ val = - 4
34+ # version.pre can be None
35+ if version .pre :
36+ if version .pre [0 ] not in mapping :
37+ warnings .warn (f'unknown prerelease version { version .pre [0 ]} , '
38+ 'version checking may go wrong' )
39+ else :
40+ val = mapping [version .pre [0 ]]
41+ release .extend ([val , version .pre [- 1 ]])
42+ else :
43+ release .extend ([val , 0 ])
44+
45+ elif version .is_postrelease :
46+ release .extend ([1 , version .post ])
47+ else :
48+ release .extend ([0 , 0 ])
49+ return tuple (release )
1950
2051
2152mmcv_min_version = digit_version (MMCV_MIN )
@@ -27,4 +58,4 @@ def digit_version(version_str):
2758 f'MMCV=={ mmcv .__version__ } is used but incompatible. ' \
2859 f'Please install mmcv>={ mmcv_min_version } , <={ mmcv_max_version } .'
2960
30- __all__ = ['__version__' , 'version_info' ]
61+ __all__ = ['__version__' , 'version_info' , 'digit_version' ]
0 commit comments