| #!/usr/bin/env python3 | |
| # Copyright 2021 The IREE Authors | |
| # | |
| # Licensed under the Apache License v2.0 with LLVM Exceptions. | |
| # See https://llvm.org/LICENSE.txt for license information. | |
| # SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | |
| import glob | |
| import logging | |
| import os | |
| import subprocess | |
| import unittest | |
| NOTEBOOKS_TO_SKIP = [ | |
| # matplotlib error when testing: | |
| # FileNotFoundError: [Errno 2] No such file or directory: 'seaborn-whitegrid' | |
| # support level for TF-code and samples is also low | |
| "tensorflow_mnist_training.ipynb", | |
| # tflite_runtime requires some deps ("version `GLIBC_2.29' not found") that | |
| # samples.Dockerfile does not currently include. | |
| "tflite_text_classification.ipynb", | |
| # PyTorch notebooks using SHARK-Turbine require Python 3.10+ in Docker. | |
| "pytorch_aot_advanced.ipynb", | |
| "pytorch_aot_simple.ipynb", | |
| "pytorch_jit.ipynb", | |
| ] | |
| NOTEBOOKS_EXPECTED_TO_FAIL = [ | |
| # Error: | |
| # ``` | |
| # module 'tensorflow.python.pywrap_mlir' has no attribute | |
| # 'experimental_convert_saved_model_v1' | |
| # ``` | |
| # convert_saved_model_v1 may be broken, but convert_saved_model works? | |
| "tensorflow_hub_import.ipynb", | |
| ] | |
| class ColabNotebookTests(unittest.TestCase): | |
| """Tests running all Colab notebooks in this directory.""" | |
| @classmethod | |
| def generateTests(cls): | |
| repo_root = os.path.dirname( | |
| os.path.dirname(os.path.dirname(os.path.abspath(__file__))) | |
| ) | |
| script_path = os.path.join( | |
| repo_root, "build_tools/testing/run_python_notebook.sh" | |
| ) | |
| # Create a test case for each notebook in this folder. | |
| notebooks_path = os.path.join(repo_root, "samples/colab/") | |
| for notebook_path in glob.glob(notebooks_path + "*.ipynb"): | |
| notebook_name = os.path.basename(notebook_path) | |
| def unit_test(self, notebook_path=notebook_path): | |
| completed_process = subprocess.run([script_path, notebook_path]) | |
| self.assertEqual(completed_process.returncode, 0) | |
| if notebook_name in NOTEBOOKS_TO_SKIP: | |
| unit_test = unittest.skip("Skip requested")(unit_test) | |
| elif notebook_name in NOTEBOOKS_EXPECTED_TO_FAIL: | |
| unit_test = unittest.expectedFailure(unit_test) | |
| # Add 'unit_test' to this class, so the test runner runs it. | |
| unit_test.__name__ = f"test_{notebook_name}" | |
| setattr(cls, unit_test.__name__, unit_test) | |
| if __name__ == "__main__": | |
| ColabNotebookTests.generateTests() | |
| logging.basicConfig(level=logging.DEBUG) | |
| unittest.main() |