Skip to content
Switch branches/tags
Go to file
Cannot retrieve contributors at this time
import weakref
from numba.core import types
class DataModelManager(object):
"""Manages mapping of FE types to their corresponding data model
def __init__(self):
# { numba type class -> model factory }
self._handlers = {}
# { numba type instance -> model instance }
self._cache = weakref.WeakKeyDictionary()
def register(self, fetypecls, handler):
"""Register the datamodel factory corresponding to a frontend-type class
assert issubclass(fetypecls, types.Type)
self._handlers[fetypecls] = handler
def lookup(self, fetype):
"""Returns the corresponding datamodel given the frontend-type instance
return self._cache[fetype]
except KeyError:
handler = self._handlers[type(fetype)]
model = self._cache[fetype] = handler(self, fetype)
return model
def __getitem__(self, fetype):
"""Shorthand for lookup()
return self.lookup(fetype)
def copy(self):
Make a copy of the manager.
Use this to inherit from the default data model and specialize it
for custom target.
dmm = DataModelManager()
dmm._handlers = self._handlers.copy()
return dmm