061d5b4592
Add an idempotent patch-mmdet-version-gate entrypoint that rewrites the installed mmdet mmcv compatibility assert into a warning so the local rebuilt mmcv wheel can be reused after uv sync. Cover the source rewrite with focused tests and document the post-sync command in the README so the local environment patch is reproducible instead of being a one-off manual edit inside .venv.
57 lines
1.9 KiB
Python
57 lines
1.9 KiB
Python
from pathlib import Path
|
|
|
|
from pose_tracking_exp.detection.patch_mmdet import PATCH_SENTINEL, patch_mmdet_init_file, patch_mmdet_init_text
|
|
|
|
|
|
UNPATCHED_INIT = """# Copyright (c) OpenMMLab. All rights reserved.
|
|
import mmcv
|
|
import mmengine
|
|
from mmengine.utils import digit_version
|
|
|
|
from .version import __version__, version_info
|
|
|
|
mmcv_minimum_version = '2.0.0rc4'
|
|
mmcv_maximum_version = '2.2.0'
|
|
mmcv_version = digit_version(mmcv.__version__)
|
|
|
|
mmengine_minimum_version = '0.7.1'
|
|
mmengine_maximum_version = '1.0.0'
|
|
mmengine_version = digit_version(mmengine.__version__)
|
|
|
|
assert (mmcv_version >= digit_version(mmcv_minimum_version)
|
|
and mmcv_version < digit_version(mmcv_maximum_version)), \\
|
|
f'MMCV=={mmcv.__version__} is used but incompatible. ' \\
|
|
f'Please install mmcv>={mmcv_minimum_version}, ' \\
|
|
f'<{mmcv_maximum_version}.'
|
|
|
|
assert (mmengine_version >= digit_version(mmengine_minimum_version)
|
|
and mmengine_version < digit_version(mmengine_maximum_version)), \\
|
|
f'MMEngine=={mmengine.__version__} is used but incompatible. ' \\
|
|
f'Please install mmengine>={mmengine_minimum_version}, ' \\
|
|
f'<{mmengine_maximum_version}.'
|
|
|
|
__all__ = ['__version__', 'version_info', 'digit_version']
|
|
"""
|
|
|
|
|
|
def test_patch_mmdet_init_text_rewrites_mmcv_assert() -> None:
|
|
patched, changed = patch_mmdet_init_text(UNPATCHED_INIT)
|
|
|
|
assert changed is True
|
|
assert PATCH_SENTINEL in patched
|
|
assert "from warnings import warn" in patched
|
|
assert "assert (mmengine_version >= digit_version(mmengine_minimum_version)" in patched
|
|
|
|
|
|
def test_patch_mmdet_init_file_is_idempotent(tmp_path: Path) -> None:
|
|
init_path = tmp_path / "__init__.py"
|
|
init_path.write_text(UNPATCHED_INIT, encoding="utf-8")
|
|
|
|
assert patch_mmdet_init_file(init_path) is True
|
|
once = init_path.read_text(encoding="utf-8")
|
|
assert PATCH_SENTINEL in once
|
|
|
|
assert patch_mmdet_init_file(init_path) is False
|
|
twice = init_path.read_text(encoding="utf-8")
|
|
assert once == twice
|