build: add reproducible mmdet patch script
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.
This commit is contained in:
@@ -0,0 +1,56 @@
|
||||
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
|
||||
Reference in New Issue
Block a user