Source code for ler.image_properties

# -*- coding: utf-8 -*-
"""
Lensing image geometry: magnifications, time delays, EPL+shear numerics, caustics.

Public symbols are resolved lazily so importing this package does not load every
Numba lensing kernel up front.
"""

from importlib import import_module

_SUBMODULES = {
    "image_properties": ".image_properties",
    "multiprocessing_routine_epl_shear": ".multiprocessing_routine_epl_shear",
    "epl_shear_njit": ".epl_shear_njit",
    "cross_section_njit": ".cross_section_njit",
    "sample_caustic_points_njit": ".sample_caustic_points_njit",
}

_SYMBOL_TO_MODULE = {
    "ImageProperties": ".image_properties",
    "solve_lens_equation": ".multiprocessing_routine_epl_shear",
    "pol_to_ell": ".epl_shear_njit",
    "omega_scalar": ".epl_shear_njit",
    "lensing_diagnostics_scalar": ".epl_shear_njit",
    "fermat_potential_scalar": ".epl_shear_njit",
    "image_position_analytical_njit": ".epl_shear_njit",
    "create_epl_shear_solver": ".epl_shear_njit",
    "phi_q2_ellipticity": ".cross_section_njit",
    "ellipticity2phi_q": ".cross_section_njit",
    "omega": ".cross_section_njit",
    "cdot": ".cross_section_njit",
    "pol_to_cart": ".cross_section_njit",
    "cart_to_pol": ".cross_section_njit",
    "caustic_points_epl_shear": ".cross_section_njit",
    "caustic_area_epl_shear": ".cross_section_njit",
    "half_symmetric_polygon_area": ".cross_section_njit",
    "polygon_area": ".cross_section_njit",
    "make_cross_section_area_reinit": ".cross_section_njit",
    "cross_section_epl_shear_unit": ".cross_section_njit",
    "caustic_points_epl_shear_half": ".sample_caustic_points_njit",
    "sample_source_from_double_caustic": ".sample_caustic_points_njit",
}

[docs] __all__ = sorted([*_SUBMODULES, *_SYMBOL_TO_MODULE])
[docs] def __getattr__(name): if name in _SUBMODULES: module = import_module(_SUBMODULES[name], __name__) globals()[name] = module return module module_name = _SYMBOL_TO_MODULE.get(name) if module_name is None: raise AttributeError(f"module {__name__!r} has no attribute {name!r}") value = getattr(import_module(module_name, __name__), name) globals()[name] = value return value
[docs] def __dir__(): return sorted([*globals(), *__all__])