Source code for py_wlc.generic

"""Generic functionality supporting the core modelling."""

from .growth import IndexSeries


[docs]class ExtendedDict(dict): """Dictionary subclass that provides values beyond defined keys. Provides values outside the predefined range, according to the following rules: * If the key is larger than the largest key in the dictionary, the value from the largest key is returned. * If the key is smaller than the smallest key in the dictionary, the value from the smallest key is returned. * If the key is between the smallest and largest keys in the dictionary but no value is found, a ``KeyError`` occurs. """
[docs] def get(self, key, default=None): """Return either the value of the ``key``, or the ``default``. Arguments: key: The key to return the value of. default: The object to return if the key is not found. Returns: Either the value for the specified ``key``, or ``default``. """ try: return self.__getitem__(key) except KeyError: return default
[docs] def copy(self): """Create a copy of the extended dictionary. Returns: ExtendedDict: A new class instance. """ return ExtendedDict(self)
def __getitem__(self, key): try: return super().__getitem__(key) except KeyError: if self and key > max(self): return self[max(self)] elif self and key < min(self): return self[min(self)] else: raise def __repr__(self): return "{}({!r})".format(self.__class__.__name__, list(self.items()))