'Compares this version to the specified min/max range.
Returns whether the version object represents a version
greater than or equal to the minimum version and less than
or equal to the maximum version.
If min_version is null then there is no minimum limit.
If max_version is null then there is no maximum limit.
If self is null then raise ValueError.
:param min_version: Minimum acceptable version.
:param max_version: Maximum acceptable version.
:param experimental: Whether to match experimental APIs.
:returns: boolean'

def matches(self, min_version, max_version=None, experimental=False):

    if (not self):
        raise ValueError
    if isinstance(min_version, str):
        min_version = APIVersionRequest(version_string=min_version)
    if isinstance(max_version, str):
        max_version = APIVersionRequest(version_string=max_version)
    if ((not min_version) and (not max_version)):
        return True
    if (not max_version):
        return (min_version <= self)
    if (not min_version):
        return (self <= max_version)
    return (min_version <= self <= max_version)
