aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenjamin Klimczak <benjamin.klimczak@arm.com>2023-11-24 12:23:16 +0000
committerBenjamin Klimczak <benjamin.klimczak@arm.com>2023-11-24 17:02:41 +0000
commit2b5f217fb21e2d100baabd6161c8470b65669ed9 (patch)
tree1f4b3e8d9e1cfcb968f01f901357d54a14a3def5
parent82a5fe34d7464bba70577c734dc446111adb4d93 (diff)
downloadmlia-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.py15
-rw-r--r--tests/test_cli_command_validators.py18
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)