Spaces:
Runtime error
Runtime error
| # Copyright (c) OpenMMLab. All rights reserved. | |
| import re | |
| from functools import wraps | |
| from inspect import isfunction | |
| from importlib_metadata import PackageNotFoundError, distribution | |
| from mmengine.utils import digit_version | |
| def satisfy_requirement(dep): | |
| pat = '(' + '|'.join(['>=', '==', '>']) + ')' | |
| parts = re.split(pat, dep, maxsplit=1) | |
| parts = [p.strip() for p in parts] | |
| package = parts[0] | |
| if len(parts) > 1: | |
| op, version = parts[1:] | |
| op = { | |
| '>=': '__ge__', | |
| '==': '__eq__', | |
| '>': '__gt__', | |
| '<': '__lt__', | |
| '<=': '__le__' | |
| }[op] | |
| else: | |
| op, version = None, None | |
| try: | |
| dist = distribution(package) | |
| if op is None or getattr(digit_version(dist.version), op)( | |
| digit_version(version)): | |
| return True | |
| except PackageNotFoundError: | |
| pass | |
| return False | |
| def require(dep, install=None): | |
| """A wrapper of function for extra package requirements. | |
| Args: | |
| dep (str): The dependency package name, like ``transformers`` | |
| or ``transformers>=4.28.0``. | |
| install (str, optional): The installation command hint. Defaults | |
| to None, which means to use "pip install dep". | |
| """ | |
| def wrapper(fn): | |
| assert isfunction(fn) | |
| def ask_install(*args, **kwargs): | |
| name = fn.__qualname__.replace('.__init__', '') | |
| ins = install or f'pip install "{dep}"' | |
| raise ImportError( | |
| f'{name} requires {dep}, please install it by `{ins}`.') | |
| if satisfy_requirement(dep): | |
| fn._verify_require = getattr(fn, '_verify_require', lambda: None) | |
| return fn | |
| ask_install._verify_require = ask_install | |
| return ask_install | |
| return wrapper | |
| WITH_MULTIMODAL = all( | |
| satisfy_requirement(item) | |
| for item in ['pycocotools', 'transformers>=4.28.0']) | |
| def register_multimodal_placeholder(names, registry): | |
| for name in names: | |
| def ask_install(*args, **kwargs): | |
| raise ImportError( | |
| f'{name} requires extra multi-modal dependencies, please ' | |
| 'install it by `pip install "mmpretrain[multimodal]"` ' | |
| 'or `pip install -e ".[multimodal]"`.') | |
| registry.register_module(name=name, module=ask_install) | |