orbit/template/model_template.py (37 lines of code) (raw):
from ..exceptions import AbstractMethodException
class ModelTemplate(object):
"""
Notes
-----
contain data structure ; specify what need to fill from abstract to turn a model concrete
"""
# class attributes
_data_input_mapper = None
_model_name = None
_fitter = None
_supported_estimator_types = None
def __init__(self, **kwargs):
# set by ._set_init_values
# this is ONLY used by stan which by default used 'random'
self._init_values = None
# set by _set_model_param_names()
self._model_param_names = list()
def predict(
self,
posterior_estimates,
df,
training_meta,
prediction_meta,
include_error=False,
**kwargs,
):
"""Predict interface for users"""
raise AbstractMethodException(
"Abstract method. Model should implement concrete .predict()."
)
def set_dynamic_attributes(self, df, training_meta):
"""Optional; set dynamic fitting input based on input DataFrame, rather than at object instantiation"""
pass
def set_init_values(self):
"""Optional; set init as a callable (for Stan ONLY)"""
pass
def get_init_values(self):
return self._init_values
def get_model_param_names(self):
return self._model_param_names
def get_data_input_mapper(self):
return self._data_input_mapper
def get_model_name(self):
return self._model_name
def get_fitter(self):
return self._fitter
def get_supported_estimator_types(self):
return self._supported_estimator_types