[MO] Fixed MO fallback unit test. (#20868)

* Fixed MO unit test to import paddle conditionally.

* Replace generate with pytest.mark.parametrize.
This commit is contained in:
Anastasiia Pnevskaia authored and Alexander Nesterov committed 2023-11-23 14:44:45 +01:00
1 parent 5ad377fdc6
commit 367a2f5029
1 file changed
+69 -67
@@ -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'