Source code for lenstronomy.Util.package_util

import types


[docs] def exporter(export_self=False): """Export utility, modified from https://stackoverflow.com/a/41895194 Returns export decorator, __all__ list """ all_ = [] if export_self: all_.append("exporter") def decorator(obj): all_.append(obj.__name__) return obj return decorator, all_
export, __all__ = exporter(export_self=True)
[docs] @export def laconic(): """Activate laconic / super-shortcut mode. Usage: import lenstronomy as ls ls.laconic() lens_model = ls.LensModel(...) source_model = ls.LightModel(...) image_model = ls.ImageModel(...) """ short(_laconic=True)
[docs] @export def short(_laconic=False): """Activate shortcut mode. Usage: import lenstronomy as ls ls.short() lens_model = ls.LensModel.lens_model.LensModel(...) source_model = ls.LightModel.light_model.LightModel(...) image_model = ls.ImSim.image_model.ImageModel(...) """ import pkgutil import sys from importlib.util import module_from_spec import lenstronomy to_add = dict() all_modules = dict() for loader, module_name, is_pkg in pkgutil.walk_packages(lenstronomy.__path__): # This deep internal module relies heavily on 'multiprocessing', # which may not be installed if module_name == "Sampling.Pool.multiprocessing": continue # Load the module spec = loader.find_spec(module_name) module = all_modules[module_name] = module_from_spec(spec) spec.loader.exec_module(module) sys.modules[module_name] = module if "." in module_name: # Submodule, e.g. Data.psf # Monkeypatch the parent module to make it accessible fragments = module_name.split(".") parent_module_name, child_name = ".".join(fragments[:-1]), fragments[-1] setattr(all_modules[parent_module_name], child_name, module) else: # Top-level module, e.g. Data: add as lenstronomy attribute to_add[module_name] = module if _laconic: # If the module defines an __all__, load its symbols as well. # (unlike import *, we do not just load everything if __all__ is missing) if hasattr(module, "__all__"): for symbol in module.__all__: symbol_name = symbol if isinstance(to_add.get(symbol), types.ModuleType): # Key class clashing with module name # (Cosmo, LensModel, LightModel, PointSource) # Try to add the symbol as LensModel_: symbol_name = symbol + "_" if symbol_name in to_add: # Name clash! Do not add the symbol # or the one it clashed with. del to_add[symbol_name] else: to_add[symbol_name] = getattr(module, symbol) # Make symbols accessible under lenstronomy.[x] for key, value in to_add.items(): setattr(lenstronomy, key, value) lenstronomy.__all__ = to_add.keys()