diff --git a/tools/mo/unit_tests/mo/utils/mo_fallback_test_actual.py b/tools/mo/unit_tests/mo/utils/mo_fallback_test_actual.py index 04b9791297f..d0b6a26c5a8 100644 --- a/tools/mo/unit_tests/mo/utils/mo_fallback_test_actual.py +++ b/tools/mo/unit_tests/mo/utils/mo_fallback_test_actual.py @@ -1,22 +1,19 @@ # Copyright (C) 2018-2023 Intel Corporation # SPDX-License-Identifier: Apache-2.0 -import unittest -from unittest.mock import patch, Mock - -import openvino -from openvino.tools.mo.convert_impl import prepare_ir -from openvino.tools.mo.utils.error import Error -from openvino.frontend import FrontEndManager, FrontEnd # pylint: disable=no-name-in-module,import-error -from onnx.helper import make_graph, make_model, make_tensor_value_info import argparse import os -import onnx -import paddle -import numpy as np import shutil +from unittest.mock import patch, Mock + +import numpy as np +import onnx import pytest -from generator import generator, generate +from onnx.helper import make_graph, make_model, make_tensor_value_info +from openvino.frontend import FrontEndManager, FrontEnd # pylint: disable=no-name-in-module,import-error + +from openvino.tools.mo.convert_impl import prepare_ir +from openvino.tools.mo.utils.error import Error try: import openvino_telemetry as tm @@ -24,6 +21,12 @@ try: except ImportError: import openvino.tools.mo.utils.telemetry_stub as tm +try: + import paddle + paddle_imported = True +except ImportError: + paddle_imported = False + def base_args_config(use_legacy_fe:bool=None, use_new_fe:bool=None): args = argparse.Namespace() @@ -71,9 +74,8 @@ def save_paddle_model(name, exe, feedkeys:list, fetchlist:list, target_dir:str): paddle.fluid.io.save_inference_model(model_dir, feedkeys, fetchlist, exe, model_filename=name+".pdmodel", params_filename=name+".pdiparams") -@generator -class TestMoFallback(unittest.TestCase): - def setUp(self): +class TestMoFallback(): + def setup_method(self): tm.Telemetry.__init__ = Mock(return_value=None) tm.Telemetry.send_event = Mock() FrontEnd.add_extension = Mock() @@ -121,35 +123,36 @@ class TestMoFallback(unittest.TestCase): with open(file, 'w') as f: f.write(content) - self.paddle_dir = "paddle_dir" - paddle.enable_static() - if not os.path.exists(self.paddle_dir): - os.mkdir(self.paddle_dir) - x = np.array([-2, 0, 1]).astype('float32') - node_x = paddle.static.data(name='x', shape=x.shape, dtype='float32') - out = paddle.nn.functional.relu(node_x) + if paddle_imported: + self.paddle_dir = "paddle_dir" + paddle.enable_static() + if not os.path.exists(self.paddle_dir): + os.mkdir(self.paddle_dir) + x = np.array([-2, 0, 1]).astype('float32') + node_x = paddle.static.data(name='x', shape=x.shape, dtype='float32') + out = paddle.nn.functional.relu(node_x) - cpu = paddle.static.cpu_places(1) - exe = paddle.static.Executor(cpu[0]) - exe.run(paddle.static.default_startup_program()) + cpu = paddle.static.cpu_places(1) + exe = paddle.static.Executor(cpu[0]) + exe.run(paddle.static.default_startup_program()) - save_paddle_model("relu", exe, feedkeys=['x'], fetchlist=[out], target_dir=self.paddle_dir) + save_paddle_model("relu", exe, feedkeys=['x'], fetchlist=[out], target_dir=self.paddle_dir) - - def tearDown(self): + def teardown_method(self): for name in self.models.keys(): os.remove(name) for name in self.test_config_files: os.remove(name) - shutil.rmtree(self.paddle_dir) + if paddle_imported: + shutil.rmtree(self.paddle_dir) - - @generate(*[(['dir_to_extension'], None, None, 'mo_legacy', 'extensions'), # fallback - (['dir_to_extension'], None, True, None, None), # exception - (['dir_to_extension'], True, None, 'mo_legacy', None), - ([''], True, None, 'mo_legacy', None), - ([''], None, True, 'onnx_frontend', None), - (None, None, None, 'onnx_frontend', None), + @pytest.mark.parametrize("extension, use_legacy, use_new_fe, conversion_method, fallback_reason", [ + (['dir_to_extension'], None, None, 'mo_legacy', 'extensions'), # fallback + (['dir_to_extension'], None, True, None, None), # exception + (['dir_to_extension'], True, None, 'mo_legacy', None), + ([''], True, None, 'mo_legacy', None), + ([''], None, True, 'onnx_frontend', None), + (None, None, None, 'onnx_frontend', None) ]) def test_fallback_if_extension_specified(self, extension, use_legacy, use_new_fe, conversion_method, fallback_reason): with patch('openvino.tools.mo.convert_impl.get_default_frontends') as default_fe: @@ -170,10 +173,10 @@ class TestMoFallback(unittest.TestCase): with pytest.raises(Error): # not supported extensions on new path prepare_ir(args) - - @generate(*[(None, None, 'onnx_frontend'), - (True, None, None), # exception - (None, True, 'onnx_frontend'), + @pytest.mark.parametrize("use_legacy, use_new_fe, conversion_method", [ + (None, None, 'onnx_frontend'), + (True, None, None), # exception + (None, True, 'onnx_frontend'), ]) def test_fallback_if_new_extension_specified(self, use_legacy, use_new_fe, conversion_method): with patch('openvino.tools.mo.convert_impl.get_default_frontends') as default_fe: @@ -189,10 +192,10 @@ class TestMoFallback(unittest.TestCase): with pytest.raises(Error): prepare_ir(args) - - @generate(*[(None, None, 'onnx_frontend'), - (True, None, None), # exception - (None, True, 'onnx_frontend'), + @pytest.mark.parametrize("use_legacy, use_new_fe, conversion_method", [ + (None, None, 'onnx_frontend'), + (True, None, None), # exception + (None, True, 'onnx_frontend') ]) def test_fallback_if_two_new_extension_specified(self, use_legacy, use_new_fe, conversion_method): with patch('openvino.tools.mo.convert_impl.get_default_frontends') as default_fe: @@ -208,14 +211,14 @@ class TestMoFallback(unittest.TestCase): with pytest.raises(Error): prepare_ir(args) - - @generate(*[('fake_config.json' , None, None, 'mo_legacy', 'transformations_config'), # fallback - ('test_config.json' , None, None, 'mo_legacy', 'transformations_config'), # fallback - ('fake_config.json' , True, None, 'mo_legacy', None), - (None, None, True, 'onnx_frontend', None), - (None, None, None, 'onnx_frontend', None), - ]) - def test_fallback_if_tranformations_config_specified(self, trans_config, use_legacy, use_new_fe, expected_path, fallback_reason): + @pytest.mark.parametrize("trans_config, use_legacy, use_new_fe, expected_path, fallback_reason", [ + ('fake_config.json', None, None, 'mo_legacy', 'transformations_config'), # fallback + ('test_config.json', None, None, 'mo_legacy', 'transformations_config'), # fallback + ('fake_config.json', True, None, 'mo_legacy', None), + (None, None, True, 'onnx_frontend', None), + (None, None, None, 'onnx_frontend', None)]) + def test_fallback_if_tranformations_config_specified(self, trans_config, use_legacy, use_new_fe, expected_path, + fallback_reason): with patch('openvino.tools.mo.convert_impl.get_default_frontends') as default_fe: default_fe.return_value = get_test_default_frontends() args = base_args_config(use_legacy, use_new_fe) @@ -232,11 +235,11 @@ class TestMoFallback(unittest.TestCase): with pytest.raises(AssertionError): # not called tm.Telemetry.send_event.assert_any_call('mo', 'fallback_reason', fallback_reason) - - @generate(*[(['dir_to_extension'], 'fake_config.json', None, 'mo_legacy', 'extensions, transformations_config'), # fallback - (None, 'fake_config.json', None, 'mo_legacy', 'transformations_config'), # fallback - (['dir_to_extension'], None, None, 'mo_legacy', 'extensions'), # fallback - (None, None, True, 'onnx_frontend', None), + @pytest.mark.parametrize("extension, trans_config, use_new_fe, expected_path, fallback_reason", [ + (['dir_to_extension'], 'fake_config.json', None, 'mo_legacy', 'extensions, transformations_config'), # fallback + (None, 'fake_config.json', None, 'mo_legacy', 'transformations_config'), # fallback + (['dir_to_extension'], None, None, 'mo_legacy', 'extensions'), # fallback + (None, None, True, 'onnx_frontend', None) ]) def test_fallback_if_both_extension_and_trans_config_specified(self, extension, trans_config, use_new_fe, expected_path, fallback_reason): with patch('openvino.tools.mo.convert_impl.get_default_frontends') as default_fe: @@ -255,11 +258,10 @@ class TestMoFallback(unittest.TestCase): with pytest.raises(AssertionError): # not called tm.Telemetry.send_event.assert_any_call('mo', 'fallback_reason', fallback_reason) - - @generate(*[('fake_config.json', None, None, 'mo_legacy'), - ('fake_config.json', True, None, 'mo_legacy'), - (None, None, True, 'onnx_frontend'), - ]) + @pytest.mark.parametrize("trans_config, use_legacy, use_new_fe, expected_path", + [('fake_config.json', None, None, 'mo_legacy'), + ('fake_config.json', True, None, 'mo_legacy'), + (None, None, True, 'onnx_frontend')]) def test_fallback_if_legacy_set_as_default(self, trans_config, use_legacy, use_new_fe, expected_path): with patch('openvino.tools.mo.convert_impl.get_default_frontends') as default_fe: default_fe.return_value = {'onnx': 'legacy', 'tf': 'legacy'} @@ -273,10 +275,10 @@ class TestMoFallback(unittest.TestCase): with pytest.raises(AssertionError): # not called tm.Telemetry.send_event.assert_any_call('mo', 'fallback_reason') - - @generate(*[(True, None, None, 'paddle_frontend'), - (None, None, None, 'paddle_frontend'), - ]) + @pytest.mark.skipif(not paddle_imported, reason="PaddlePaddle is not installed") + @pytest.mark.parametrize("use_new_fe, use_legacy, extension, expected_path", + [(True, None, None, 'paddle_frontend'), + (None, None, None, 'paddle_frontend')]) def test_no_fallback_if_pdpd(self, use_new_fe, use_legacy, extension, expected_path): args = base_args_config(use_legacy, use_new_fe) args.framework = 'paddle' @@ -289,7 +291,7 @@ class TestMoFallback(unittest.TestCase): with pytest.raises(AssertionError): # not called tm.Telemetry.send_event.assert_any_call('mo', 'fallback_reason') - + @pytest.mark.skipif(not paddle_imported, reason="PaddlePaddle is not installed") def test_exception_if_old_extensions_used_for_pdpd(self): args = base_args_config() args.framework = 'paddle'