1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
|
# SPDX-FileCopyrightText: Copyright 2022, Arm Limited and/or its affiliates.
# SPDX-License-Identifier: Apache-2.0
"""Module for python package based installations."""
from __future__ import annotations
from mlia.tools.metadata.common import DownloadAndInstall
from mlia.tools.metadata.common import Installation
from mlia.tools.metadata.common import InstallationType
from mlia.utils.py_manager import get_package_manager
class PyPackageBackendInstallation(Installation):
"""Backend based on the python package."""
def __init__(
self,
name: str,
description: str,
packages_to_install: list[str],
packages_to_uninstall: list[str],
expected_packages: list[str],
) -> None:
"""Init the backend installation."""
self._name = name
self._description = description
self._packages_to_install = packages_to_install
self._packages_to_uninstall = packages_to_uninstall
self._expected_packages = expected_packages
self.package_manager = get_package_manager()
@property
def name(self) -> str:
"""Return name of the backend."""
return self._name
@property
def description(self) -> str:
"""Return description of the backend."""
return self._description
@property
def could_be_installed(self) -> bool:
"""Check if backend could be installed."""
return True
@property
def already_installed(self) -> bool:
"""Check if backend already installed."""
return self.package_manager.packages_installed(self._expected_packages)
def supports(self, install_type: InstallationType) -> bool:
"""Return true if installation supports requested installation type."""
return isinstance(install_type, DownloadAndInstall)
def install(self, install_type: InstallationType) -> None:
"""Install the backend."""
if not self.supports(install_type):
raise Exception(f"Unsupported installation type {install_type}")
self.package_manager.install(self._packages_to_install)
def uninstall(self) -> None:
"""Uninstall the backend."""
self.package_manager.uninstall(self._packages_to_uninstall)
def get_tosa_backend_installation() -> Installation:
"""Get TOSA backend installation."""
return PyPackageBackendInstallation(
name="tosa-checker",
description="Tool to check if a ML model is compatible "
"with the TOSA specification",
packages_to_install=["mlia[tosa]"],
packages_to_uninstall=["tosa-checker"],
expected_packages=["tosa-checker"],
)
def get_pypackage_backend_installations() -> list[Installation]:
"""Return list of the backend installations based on python packages."""
return [
get_tosa_backend_installation(),
]
|