From a3c15c06c0789e9fc38545453817fc850a93bb86 Mon Sep 17 00:00:00 2001 From: Garrett Wright Date: Mon, 11 Dec 2023 08:53:57 -0500 Subject: [PATCH 1/5] Remove importlib pre-import --- src/aspire/__init__.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/aspire/__init__.py b/src/aspire/__init__.py index fbb3ac2d2a..b0d3b5f234 100644 --- a/src/aspire/__init__.py +++ b/src/aspire/__init__.py @@ -1,4 +1,3 @@ -import importlib import logging.config import os import pkgutil @@ -73,4 +72,3 @@ __all__ = [] for _, modname, _ in pkgutil.iter_modules(aspire.__path__): __all__.append(modname) # Add module to __all_ - importlib.import_module(f"aspire.{modname}") # Import the module From 763947419a67c4a85f13a1320c245a646a28c393 Mon Sep 17 00:00:00 2001 From: Garrett Wright Date: Mon, 11 Dec 2023 08:55:16 -0500 Subject: [PATCH 2/5] Resolve circular import --- src/aspire/utils/bot_align.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/aspire/utils/bot_align.py b/src/aspire/utils/bot_align.py index 68f6f9047c..fc8fbe4fdc 100644 --- a/src/aspire/utils/bot_align.py +++ b/src/aspire/utils/bot_align.py @@ -11,7 +11,6 @@ from numpy.linalg import norm from scipy.optimize import minimize -from aspire.operators import wemd_embed from aspire.utils.rotation import Rotation # Store parameters specific to each loss_type. @@ -64,6 +63,9 @@ def align_BO( Default `None` infers dtype from `vol_ref`. :return: Rotation matrix R_init (without refinement) or (R_init, R_est) (with refinement). """ + # Avoid utils/operators/utils circular import + from aspire.operators import wemd_embed + # Infer dtype dtype = np.dtype(dtype or vol_ref.dtype) From 9d7ed936518db7564fc56c531810bb6ec61c45af Mon Sep 17 00:00:00 2001 From: Garrett Wright Date: Mon, 11 Dec 2023 12:02:04 -0500 Subject: [PATCH 3/5] Import aspire.downloader before use --- .github/workflows/workflow.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/workflow.yml b/.github/workflows/workflow.yml index c211b5234c..44d799e4ae 100644 --- a/.github/workflows/workflow.yml +++ b/.github/workflows/workflow.yml @@ -155,7 +155,7 @@ jobs: - name: Cache Data run: | ASPIREDIR=${{ env.WORK_DIR }} python -c \ - "import aspire; print(aspire.config['common']['cache_dir']); aspire.downloader.emdb_2660()" + "import aspire; print(aspire.config['common']['cache_dir']); import aspire.downloader; aspire.downloader.emdb_2660()" - name: Cleanup run: rm -rf ${{ env.WORK_DIR }} From cc90cbbdeec8bbe71f71aa842df3c14e9db7e57d Mon Sep 17 00:00:00 2001 From: Garrett Wright Date: Thu, 14 Dec 2023 10:55:25 -0500 Subject: [PATCH 4/5] Dynamically load sub module via getattr overload --- src/aspire/__init__.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/aspire/__init__.py b/src/aspire/__init__.py index b0d3b5f234..69790bdbb3 100644 --- a/src/aspire/__init__.py +++ b/src/aspire/__init__.py @@ -1,3 +1,4 @@ +import importlib import logging.config import os import pkgutil @@ -68,7 +69,18 @@ sys.excepthook = handle_exception +# Collect set of all module names in package +_modules = set(item[1] for item in pkgutil.iter_modules(aspire.__path__)) +# Automatically add modules __all__ = [] -for _, modname, _ in pkgutil.iter_modules(aspire.__path__): +for modname in _modules: __all__.append(modname) # Add module to __all_ + + +# Dynamically load and return attributes +def __getattr__(attr): + if attr in _modules: + return importlib.import_module(f"aspire.{attr}") + else: + raise AttributeError(f"module {__name__} has no attribute {attr}.") From 6707f72e80757e0ff6580bf034ed82f014585355 Mon Sep 17 00:00:00 2001 From: Garrett Wright Date: Fri, 15 Dec 2023 07:26:02 -0500 Subject: [PATCH 5/5] Backtik string err str change --- src/aspire/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/aspire/__init__.py b/src/aspire/__init__.py index 69790bdbb3..8e412fbab8 100644 --- a/src/aspire/__init__.py +++ b/src/aspire/__init__.py @@ -83,4 +83,4 @@ def __getattr__(attr): if attr in _modules: return importlib.import_module(f"aspire.{attr}") else: - raise AttributeError(f"module {__name__} has no attribute {attr}.") + raise AttributeError(f"module `{__name__}` has no attribute `{attr}`.")