Skip to content

Commit 60e6ba2

Browse files
committed
fix scipy issue
1 parent 9a5308d commit 60e6ba2

1 file changed

Lines changed: 46 additions & 1 deletion

File tree

miepython/__init__.py

Lines changed: 46 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,52 @@
6767

6868
from .core import efficiencies, intensities, i_par, i_per, i_unpolarized
6969
from .core import efficiencies_mx, S1_S2, phase_matrix, coefficients
70-
from .field import e_far, e_near, eh_near, e_near_cartesian, h_near, h_near_cartesian, eh_near_cartesian
70+
71+
_FIELD_IMPORT_ERROR = None
72+
73+
def _raise_field_import_error():
74+
"""Raise a consistent error when optional near-field dependencies are missing."""
75+
raise ModuleNotFoundError(
76+
"Near-field functions require the optional dependency 'scipy'. "
77+
"Install miepython with SciPy support to use e_far/e_near/h_near/eh_near."
78+
) from _FIELD_IMPORT_ERROR
79+
80+
81+
def _missing_field_function(name):
82+
"""Create a placeholder near-field function when SciPy is unavailable."""
83+
84+
def _missing(*_args, **_kwargs):
85+
_raise_field_import_error()
86+
87+
_missing.__name__ = name
88+
_missing.__qualname__ = name
89+
_missing.__doc__ = f"{name} requires the optional dependency 'scipy'."
90+
return _missing
91+
92+
93+
try:
94+
from . import field as _field
95+
except ModuleNotFoundError as exc:
96+
missing_module = str(getattr(exc, "name", "") or "")
97+
if missing_module.startswith("scipy"):
98+
_FIELD_IMPORT_ERROR = exc
99+
e_far = _missing_field_function("e_far")
100+
e_near = _missing_field_function("e_near")
101+
h_near = _missing_field_function("h_near")
102+
eh_near = _missing_field_function("eh_near")
103+
e_near_cartesian = _missing_field_function("e_near_cartesian")
104+
h_near_cartesian = _missing_field_function("h_near_cartesian")
105+
eh_near_cartesian = _missing_field_function("eh_near_cartesian")
106+
else:
107+
raise
108+
else:
109+
e_far = _field.e_far
110+
e_near = _field.e_near
111+
h_near = _field.h_near
112+
eh_near = _field.eh_near
113+
e_near_cartesian = _field.e_near_cartesian
114+
h_near_cartesian = _field.h_near_cartesian
115+
eh_near_cartesian = _field.eh_near_cartesian
71116

72117
# functions exposed to the user
73118
__all__ = (

0 commit comments

Comments
 (0)