Really, Model.evaluate should be an abstractmethod