|
|
|
|
|
|
|
|
|
|
|
|
| """Tests for backbone export behavior."""
|
|
|
| import sys
|
| from types import ModuleType
|
|
|
| from rfdetr.models.backbone.backbone import Backbone
|
|
|
|
|
| class TestBackboneExport:
|
| """Tests for ``Backbone.export``."""
|
|
|
| def test_export_without_lora_encoder_skips_peft_import_and_warning(self, monkeypatch) -> None:
|
| """Non-LoRA exports should not warn just because peft is unavailable."""
|
| backbone = object.__new__(Backbone)
|
| backbone.encoder = object()
|
| warning_messages: list[str] = []
|
|
|
| monkeypatch.delitem(sys.modules, "peft", raising=False)
|
| monkeypatch.setattr("rfdetr.models.backbone.backbone.logger.warning", warning_messages.append)
|
|
|
| backbone.export()
|
|
|
| assert warning_messages == []
|
|
|
| def test_export_replaces_peft_encoder_with_merged_encoder(self, monkeypatch) -> None:
|
| """Export should replace PEFT wrapper with merged base encoder."""
|
|
|
| class _MergedEncoder:
|
| pass
|
|
|
| class _FakePeftModel:
|
| def __init__(self) -> None:
|
| self._merged = _MergedEncoder()
|
|
|
| def merge_and_unload(self):
|
| return self._merged
|
|
|
| peft_module = ModuleType("peft")
|
| peft_module.PeftModel = _FakePeftModel
|
| monkeypatch.setitem(sys.modules, "peft", peft_module)
|
|
|
| backbone = object.__new__(Backbone)
|
| backbone.encoder = _FakePeftModel()
|
|
|
| backbone.export()
|
|
|
| assert isinstance(backbone.encoder, _MergedEncoder)
|
|
|