|
67 | 67 |
|
68 | 68 | from .core import efficiencies, intensities, i_par, i_per, i_unpolarized |
69 | 69 | 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 |
71 | 116 |
|
72 | 117 | # functions exposed to the user |
73 | 118 | __all__ = ( |
|
0 commit comments