Mousius commented on a change in pull request #9074:
URL: https://github.com/apache/tvm/pull/9074#discussion_r713772195
##########
File path: tests/python/driver/tvmc/test_frontends.py
##########
@@ -211,3 +212,43 @@ def
test_load_model___wrong_language__to_pytorch(tflite_mobilenet_v1_1_quant):
model_format="pytorch",
shape_dict={"input": [1, 3, 224, 224]},
)
+
+
[email protected]("tvm.driver.tvmc.frontends.import_keras")
+def test_import_keras_friendly_message(import_keras_mock, keras_resnet50):
+ import_keras_mock.side_effect = TVMCException("keras is not installed")
Review comment:
These tests are mostly testing that errors thrown are propagated, it'd
be good to test if the errors are actually caused by the import - I think we
could use pytest's `monkeypatch` on `__builtin__.__import__` but I'm not
feeling very confident in the safety of it. @leandron wdyt?
##########
File path: python/tvm/driver/tvmc/frontends.py
##########
@@ -249,13 +314,12 @@ def suffixes():
return ["pth", "zip"]
def load(self, path, shape_dict=None, **kwargs):
- # pylint: disable=C0415
- import torch
+ tc = import_torch()
Review comment:
I'd suggest keeping this as `torch` if we can as it's easier to
understand as a variable name.
##########
File path: python/tvm/driver/tvmc/frontends.py
##########
@@ -88,10 +88,76 @@ def import_keras():
from tensorflow import keras
return tf, keras
+ except ImportError:
+ err = (
+ "Error: Tensorflow is required and was not found.\n"
+ 'Please install it using "pip install tensorflow".'
+ )
+ raise TVMCException(str(err))
finally:
sys.stderr = stderr
+def import_onnx():
+ """Lazy import function for onnx"""
+ try:
+ # pylint: disable=C0415
+ import onnx as _onnx
+ except ImportError:
+ err = (
+ "Error: ONNX is required and was not found.\n"
+ 'Please install it using "pip install onnx".'
+ )
+ raise TVMCException(str(err))
+
+ return _onnx
+
+
+def import_tensorflow():
+ """Lazy import function for tensorflow"""
+ try:
+ # pylint: disable=C0415
+ import tensorflow as tf
+ except ImportError:
+ err = (
+ "Error: Tensorflow is required and was not found.\n"
+ 'Please install it using "pip install tensorflow".'
+ )
+ raise TVMCException(str(err))
+
+ return tf
+
+
+def import_torch():
+ """Lazy import function for torch"""
+ try:
+ # pylint: disable=C0415
+ import torch as tc
+ except ImportError:
+ err = (
+ "Error: Torch is required and was not found.\n"
+ 'Please install it using "pip install torch".'
+ )
+ raise TVMCException(str(err))
+
+ return tc
+
+
+def import_tflite():
+ """Lazy import function for tflite.Model"""
+ try:
+ # pylint: disable=C0415
+ import tflite.Model as model
+ except ImportError:
+ err = (
+ "Error: tflite is required and was not found.\n"
+ 'Please install it using "pip install tflite".'
+ )
+ raise TVMCException(str(err))
Review comment:
These seem to follow a similar pattern, could this be moved to a
function? Something like:
```py
def create_import_error_string(library_name, import_name):
err = (
f"Error: {library_name} is required and was not found.\n"
f'Please install it using "pip install {import_name}".'
)
return str(err)
```
And used as:
```suggestion
raise TVMCException(create_import_error_string('tflite', 'tflite'))
```
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]