Source code for rubin_sim.maf.maps.base_map

__all__ = ("MapsRegistry", "BaseMap")

import inspect


[docs] class MapsRegistry(type): """ Meta class for Maps, to build a registry of maps classes. """ def __init__(cls, name, bases, dict): super(MapsRegistry, cls).__init__(name, bases, dict) if not hasattr(cls, "registry"): cls.registry = {} modname = inspect.getmodule(cls).__name__ if modname.startswith("rubin_sim.maf.maps"): modname = "" else: if len(modname.split(".")) > 1: modname = ".".join(modname.split(".")[:-1]) + "." else: modname = modname + "." mapsname = modname + name if mapsname in cls.registry: raise Exception("Redefining maps %s! (there are >1 maps with the same name)" % (mapsname)) if mapsname != "BaseMaps": cls.registry[mapsname] = cls def get_class(cls, mapsname): return cls.registry[mapsname] def help(cls, doc=False): for mapsname in sorted(cls.registry): if not doc: print(mapsname) if doc: print("---- ", mapsname, " ----") print(cls.registry[mapsname].__doc__) maps = cls.registry[mapsname]() print(" added to slice_point: ", ",".join(maps.keynames))
[docs] class BaseMap(metaclass=MapsRegistry): """Base for maps classes.""" def __init__(self, **kwargs): self.keynames = ["newkey"] def __eq__(self, othermap): return self.keynames == othermap.keynames def __ne__(self, othermap): return self.keynames != othermap.keynames def __lt__(self, othermap): return self.keynames < othermap.keynames def __gt__(self, othermap): return self.keynames > othermap.keynames def __le__(self, othermap): return self.keynames <= othermap.keynames def __ge__(self, othermap): return self.keynames >= othermap.keynames
[docs] def run(self, slice_points): """Given slice_points (dict containing metadata about each slice_point, including ra/dec), adds additional metadata at each slice_point and returns updated dict. """ raise NotImplementedError("This must be defined in subclass")