Files
pose_tracking_exp/tests/test_patch_mmdet.py
T
crosstyan 061d5b4592 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.
2026-03-26 16:35:56 +08:00

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