Convert a version string into a tuple of integers. This method is usually used for comparing two versions. For pre-release versions: alpha < beta < rc. Args: version_str (str): The version string. length (int): The maximum number of version levels. Default: 4. Returns
(version_str: str, length: int = 4)
| 7 | |
| 8 | |
| 9 | def digit_version(version_str: str, length: int = 4): |
| 10 | """Convert a version string into a tuple of integers. |
| 11 | This method is usually used for comparing two versions. For pre-release |
| 12 | versions: alpha < beta < rc. |
| 13 | Args: |
| 14 | version_str (str): The version string. |
| 15 | length (int): The maximum number of version levels. Default: 4. |
| 16 | Returns: |
| 17 | tuple[int]: The version info in digits (integers). |
| 18 | """ |
| 19 | version = parse(version_str) |
| 20 | assert version.release, f'failed to parse version {version_str}' |
| 21 | release = list(version.release) |
| 22 | release = release[:length] |
| 23 | if len(release) < length: |
| 24 | release = release + [0] * (length - len(release)) |
| 25 | if version.is_prerelease: |
| 26 | mapping = {'a': -3, 'b': -2, 'rc': -1} |
| 27 | val = -4 |
| 28 | # version.pre can be None |
| 29 | if version.pre: |
| 30 | if version.pre[0] not in mapping: |
| 31 | warnings.warn(f'unknown prerelease version {version.pre[0]}, ' |
| 32 | 'version checking may go wrong') |
| 33 | else: |
| 34 | val = mapping[version.pre[0]] |
| 35 | release.extend([val, version.pre[-1]]) |
| 36 | else: |
| 37 | release.extend([val, 0]) |
| 38 | |
| 39 | elif version.is_postrelease: |
| 40 | release.extend([1, version.post]) |
| 41 | else: |
| 42 | release.extend([0, 0]) |
| 43 | return tuple(release) |
| 44 | |
| 45 | |
| 46 | mmcv_minimum_version = '1.4.2' |