| # Copyright (c) Meta Platforms, Inc. and affiliates. | |
| # All rights reserved. | |
| # | |
| # This source code is licensed under the BSD-style license found in the | |
| # LICENSE file in the root directory of this source tree. | |
| import importlib | |
| import os | |
| import sys | |
| import unittest | |
| import unittest.mock | |
| from tests.common_testing import get_pytorch3d_dir | |
| # This file groups together tests which look at the code without running it. | |
| class TestBuild(unittest.TestCase): | |
| def test_no_import_cycles(self): | |
| # Check each module of pytorch3d imports cleanly, | |
| # which may fail if there are import cycles. | |
| with unittest.mock.patch.dict(sys.modules): | |
| for module in list(sys.modules): | |
| # If any of pytorch3d is already imported, | |
| # the test would be pointless. | |
| if module.startswith("pytorch3d"): | |
| sys.modules.pop(module, None) | |
| # torchvision seems to cause problems if re-imported, | |
| # so make sure it has been imported here. | |
| import torchvision.utils # noqa | |
| root_dir = get_pytorch3d_dir() / "pytorch3d" | |
| # Exclude opengl-related files, as Implicitron is decoupled from opengl | |
| # components which will not work without adding a dep on pytorch3d_opengl. | |
| ignored_modules = ( | |
| "__init__", | |
| "plotly_vis", | |
| "opengl_utils", | |
| "rasterizer_opengl", | |
| ) | |
| if os.environ.get("FB_TEST", False): | |
| ignored_modules += ("orm_types", "sql_dataset", "sql_dataset_provider") | |
| for module_file in root_dir.glob("**/*.py"): | |
| if module_file.stem in ignored_modules: | |
| continue | |
| relative_module = str(module_file.relative_to(root_dir))[:-3] | |
| module = "pytorch3d." + relative_module.replace("/", ".") | |
| with self.subTest(name=module): | |
| with unittest.mock.patch.dict(sys.modules): | |
| importlib.import_module(module) | |