"""Utility to compare (Numpy) version strings.
The NumpyVersion class allows properly comparing numpy version strings. The LooseVersion and StrictVersion classes that distutils provides don't work; they don't recognize anything like alpha/beta/rc/dev versions.
"""
"""Parse and compare numpy version strings.
Numpy has the following versioning scheme (numbers given are examples; they can be >9) in principle):
- Released version: '1.8.0', '1.8.1', etc. - Alpha: '1.8.0a1', '1.8.0a2', etc. - Beta: '1.8.0b1', '1.8.0b2', etc. - Release candidates: '1.8.0rc1', '1.8.0rc2', etc. - Development versions: '1.8.0.dev-f1234afa' (git commit hash appended) - Development versions after a1: '1.8.0a1.dev-f1234afa', '1.8.0b2.dev-f1234afa', '1.8.1rc1.dev-f1234afa', etc. - Development versions (no git hash available): '1.8.0.dev-Unknown'
Comparing needs to be done against a valid version string or other `NumpyVersion` instance.
Parameters ---------- vstring : str Numpy version string (``np.__version__``).
Notes ----- All dev versions of the same (pre-)release compare equal.
Examples -------- >>> from scipy._lib._version import NumpyVersion >>> if NumpyVersion(np.__version__) < '1.7.0': ... print('skip') skip
>>> NumpyVersion('1.7') # raises ValueError, add ".0"
""" raise ValueError("Not a valid numpy version string")
self.version.split('.')] else: self.pre_release = pre_rel[0].group() else:
"""Compare major.minor.bugfix""" if self.bugfix == other.bugfix: vercmp = 0 elif self.bugfix > other.bugfix: vercmp = 1 else: vercmp = -1 else: vercmp = -1 elif self.major > other.major: vercmp = 1 else: vercmp = -1
"""Compare alpha/beta/rc/final.""" if self.pre_release == other.pre_release: vercmp = 0 elif self.pre_release == 'final': vercmp = 1 elif other.pre_release == 'final': vercmp = -1 elif self.pre_release > other.pre_release: vercmp = 1 else: vercmp = -1
return vercmp
raise ValueError("Invalid object to compare with NumpyVersion.")
# Same x.y.z version, check for alpha/beta/rc vercmp = self._compare_pre_release(other) if vercmp == 0: # Same version and same pre-release, check if dev version if self.is_devversion is other.is_devversion: vercmp = 0 elif self.is_devversion: vercmp = -1 else: vercmp = 1
return self._compare(other) <= 0
return self._compare(other) == 0
return self._compare(other) != 0
def __repr__(self): return "NumpyVersion(%s)" % self.vstring |