[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:
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'
|
||||
|
||||
Reference in new issue
Block a user