diff options
Diffstat (limited to 'src/mlia/devices/cortexa/data_analysis.py')
-rw-r--r-- | src/mlia/devices/cortexa/data_analysis.py | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/src/mlia/devices/cortexa/data_analysis.py b/src/mlia/devices/cortexa/data_analysis.py index dff95ce..d2b6f35 100644 --- a/src/mlia/devices/cortexa/data_analysis.py +++ b/src/mlia/devices/cortexa/data_analysis.py @@ -1,6 +1,8 @@ # SPDX-FileCopyrightText: Copyright 2022, Arm Limited and/or its affiliates. # SPDX-License-Identifier: Apache-2.0 """Cortex-A data analysis module.""" +from __future__ import annotations + from dataclasses import dataclass from functools import singledispatchmethod @@ -8,6 +10,8 @@ from mlia.core.common import DataItem from mlia.core.data_analysis import Fact from mlia.core.data_analysis import FactExtractor from mlia.devices.cortexa.operators import CortexACompatibilityInfo +from mlia.nn.tensorflow.tflite_compat import TFLiteCompatibilityInfo +from mlia.nn.tensorflow.tflite_compat import TFLiteConversionErrorCode class CortexADataAnalyzer(FactExtractor): @@ -27,6 +31,25 @@ class CortexADataAnalyzer(FactExtractor): else: self.add_fact(ModelIsNotCortexACompatible()) + @analyze_data.register + def analyze_tflite_compatibility(self, data_item: TFLiteCompatibilityInfo) -> None: + """Analyze TensorFlow Lite compatibility information.""" + if data_item.compatible: + return + + custom_ops, flex_ops = [], [] + if data_item.conversion_errors: + custom_ops = data_item.unsupported_ops_by_code( + TFLiteConversionErrorCode.NEEDS_CUSTOM_OPS + ) + flex_ops = data_item.unsupported_ops_by_code( + TFLiteConversionErrorCode.NEEDS_FLEX_OPS + ) + + self.add_fact( + ModelIsNotTFLiteCompatible(custom_ops=custom_ops, flex_ops=flex_ops) + ) + @dataclass class ModelIsCortexACompatible(Fact): @@ -36,3 +59,11 @@ class ModelIsCortexACompatible(Fact): @dataclass class ModelIsNotCortexACompatible(Fact): """Model is not compatible with Cortex-A.""" + + +@dataclass +class ModelIsNotTFLiteCompatible(Fact): + """Model could not be converted into TensorFlow Lite format.""" + + custom_ops: list[str] | None = None + flex_ops: list[str] | None = None |