Skip to content

Commit b4e8766

Browse files
committed
deepxde: defer import-time backend banner
`import deepxde` prints a multi-line backend banner ("Using backend: pytorch ...") on first load. The eager `from .deepxde_integration import DeepXDEAdapter` in `epde/integrate/__init__.py` and the top-level import in `fitness.py` meant any `import epde` triggered that banner even when no DeepXDE solver is in use (e.g. the legacy L2 / L2LR fitness paths). Drop the eager imports; expose `DeepXDEAdapter` via a PEP 562 `__getattr__` on `epde.integrate` so the name still resolves on first access, but the banner only fires when DeepXDE is actually requested (via `DeepXDEBasedFitness.apply()`'s existing lazy import at line 436).
1 parent 777d6db commit b4e8766

2 files changed

Lines changed: 15 additions & 2 deletions

File tree

epde/integrate/__init__.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,14 @@
22
from .bop import BOPElement, BoundaryConditions
33
from .pinn_integration import SolverAdapter
44
from .numeric_integration import OdeintAdapter
5-
from .deepxde_integration import DeepXDEAdapter
5+
6+
7+
# ``deepxde_integration`` does ``import deepxde``, which prints a backend
8+
# banner on first load. Defer that until the DeepXDE adapter is actually
9+
# requested so plain ``import epde`` / ``from epde.integrate import
10+
# SolverAdapter`` stays quiet.
11+
def __getattr__(name):
12+
if name == 'DeepXDEAdapter':
13+
from .deepxde_integration import DeepXDEAdapter
14+
return DeepXDEAdapter
15+
raise AttributeError(f"module {__name__!r} has no attribute {name!r}")

epde/operators/common/fitness.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,10 @@
1313
import matplotlib.pyplot as plt
1414
from matplotlib import cm
1515

16-
from epde.integrate import SolverAdapter, DeepXDEAdapter
16+
from epde.integrate import SolverAdapter
17+
# DeepXDEAdapter is imported lazily inside DeepXDEBasedFitness.apply() to
18+
# avoid triggering deepxde's import-time backend banner when no DeepXDE
19+
# solver is used (e.g. legacy L2/L2LR fitness paths).
1720
from epde.structure.main_structures import SoEq, Equation
1821
from epde.operators.utils.template import CompoundOperator
1922
import epde.globals as global_var

0 commit comments

Comments
 (0)