diff options
author | Benjamin Klimczak <benjamin.klimczak@arm.com> | 2023-11-24 12:23:16 +0000 |
---|---|---|
committer | Benjamin Klimczak <benjamin.klimczak@arm.com> | 2023-11-24 17:02:41 +0000 |
commit | 2b5f217fb21e2d100baabd6161c8470b65669ed9 (patch) | |
tree | 1f4b3e8d9e1cfcb968f01f901357d54a14a3def5 | |
parent | 82a5fe34d7464bba70577c734dc446111adb4d93 (diff) | |
download | mlia-2b5f217fb21e2d100baabd6161c8470b65669ed9.tar.gz |
MLIA-1037 Fix default backend validation
Add a check to see if the default backends are installed when no backend
is provided via CLI.
Change-Id: I27dd9f35cfeec187f44cba06915d1be5a3a052b5
Signed-off-by: Benjamin Klimczak <benjamin.klimczak@arm.com>
-rw-r--r-- | src/mlia/cli/command_validators.py | 15 | ||||
-rw-r--r-- | tests/test_cli_command_validators.py | 18 |
2 files changed, 29 insertions, 4 deletions
diff --git a/src/mlia/cli/command_validators.py b/src/mlia/cli/command_validators.py index a0f5433..04e04b1 100644 --- a/src/mlia/cli/command_validators.py +++ b/src/mlia/cli/command_validators.py @@ -7,6 +7,7 @@ import argparse import logging import sys +from mlia.backend.manager import get_available_backends from mlia.target.registry import default_backends from mlia.target.registry import get_target from mlia.target.registry import supported_backends @@ -14,9 +15,7 @@ from mlia.target.registry import supported_backends logger = logging.getLogger(__name__) -def validate_backend( - target_profile: str, backend: list[str] | None -) -> list[str] | None: +def validate_backend(target_profile: str, backend: list[str] | None) -> list[str]: """Validate backend with given target profile. This validator checks whether the given target-profile and backend are @@ -26,7 +25,15 @@ def validate_backend( target = get_target(target_profile) if not backend: - return default_backends(target) + defaults = default_backends(target) + missing_backends = set(defaults) + missing_backends.difference_update(get_available_backends()) + if missing_backends: + raise argparse.ArgumentError( + None, + f"The following default backends are not installed: {missing_backends}", + ) + return defaults compatible_backends = list(map(normalize_string, supported_backends(target))) backends = {normalize_string(b): b for b in backend} diff --git a/tests/test_cli_command_validators.py b/tests/test_cli_command_validators.py index 1ac82db..e140749 100644 --- a/tests/test_cli_command_validators.py +++ b/tests/test_cli_command_validators.py @@ -5,6 +5,7 @@ from __future__ import annotations import argparse from contextlib import ExitStack +from unittest.mock import MagicMock import pytest @@ -160,3 +161,20 @@ def test_validate_backend( with exit_stack: assert validate_backend(input_target_profile, input_backends) == output_backends + + +def test_validate_backend_default_available() -> None: + """Test default backend validation with available backend.""" + backends = validate_backend("cortex-a", None) + assert backends + assert backends == ["armnn-tflite-delegate"] + + +def test_validate_backend_default_unavailable(monkeypatch: pytest.MonkeyPatch) -> None: + """Test default backend validation with unavailable backend.""" + monkeypatch.setattr( + "mlia.cli.command_validators.default_backends", + MagicMock(return_value=["UNKNOWN_BACKEND"]), + ) + with pytest.raises(argparse.ArgumentError): + validate_backend("cortex-a", None) |