Spaces:
Paused
Paused
import importlib.metadata | |
import importlib.util | |
import operator as op | |
from typing import Union | |
from packaging import version | |
STR_OPERATION_TO_FUNC = { | |
">": op.gt, | |
">=": op.ge, | |
"==": op.eq, | |
"!=": op.ne, | |
"<=": op.le, | |
"<": op.lt, | |
} | |
_optimum_available = importlib.util.find_spec("optimum") is not None | |
_optimum_version = "N/A" | |
if _optimum_available: | |
try: | |
_optimum_version = importlib.metadata.version("optimum") | |
except importlib.metadata.PackageNotFoundError: | |
_optimum_available = False | |
_optimum_intel_available = ( | |
_optimum_available and importlib.util.find_spec("optimum.intel") is not None | |
) | |
_optimum_intel_version = "N/A" | |
if _optimum_intel_available: | |
try: | |
_optimum_intel_version = importlib.metadata.version("optimum-intel") | |
except importlib.metadata.PackageNotFoundError: | |
_optimum_intel_available = False | |
_ipex_available = importlib.util.find_spec("intel_extension_for_pytorch") is not None | |
_openvino_available = importlib.util.find_spec("openvino") is not None | |
# This function was copied from: https://github.com/huggingface/accelerate/blob/874c4967d94badd24f893064cc3bef45f57cadf7/src/accelerate/utils/versions.py#L319 | |
def compare_versions( | |
library_or_version: Union[str, version.Version], | |
operation: str, | |
requirement_version: str, | |
) -> bool: | |
""" | |
Compare a library version to some requirement using a given operation. | |
Arguments: | |
library_or_version (`str` or `packaging.version.Version`): | |
A library name or a version to check. | |
operation (`str`): | |
A string representation of an operator, such as `">"` or `"<="`. | |
requirement_version (`str`): | |
The version to compare the library version against | |
""" | |
if operation not in STR_OPERATION_TO_FUNC.keys(): | |
raise ValueError( | |
f"`operation` must be one of {list(STR_OPERATION_TO_FUNC.keys())}" | |
f", received {operation}" | |
) | |
if isinstance(library_or_version, str): | |
library_or_version = version.parse( | |
importlib.metadata.version(library_or_version) | |
) | |
return STR_OPERATION_TO_FUNC[operation]( | |
library_or_version, version.parse(requirement_version) | |
) | |
def is_optimum_available() -> bool: | |
return _optimum_available | |
def is_optimum_intel_available() -> bool: | |
return _optimum_intel_available | |
def is_ipex_available() -> bool: | |
return _ipex_available | |
def is_openvino_available() -> bool: | |
return _openvino_available | |
def is_optimum_version(operation: str, reference_version: str) -> bool: | |
""" | |
Compare the current Optimum version to a given reference with an operation. | |
""" | |
if not _optimum_version: | |
return False | |
return compare_versions( | |
version.parse(_optimum_version), operation, reference_version | |
) | |
def is_optimum_intel_version(operation: str, reference_version: str) -> bool: | |
""" | |
Compare the current Optimum Intel version to a given reference with an operation. | |
""" | |
if not _optimum_intel_version: | |
return False | |
return compare_versions( | |
version.parse(_optimum_intel_version), operation, reference_version | |
) | |
IMPORT_ERROR = """ | |
requires the {0} library but it was not found in your environment. | |
You can install it with pip: `pip install {0}`. | |
Please note that you may need to restart your runtime after installation. | |
""" | |