Skip to content
Snippets Groups Projects

Fix hyper model caching, adds data check

+ 24
4
@@ -3,9 +3,9 @@ from ..core.utils import infer_args_from_function_except_n_args
class Model(object):
"""
Population model
Returns the probability for a given population model using
data and population parameters.
This should take population parameters and return the probability.
"""
def __init__(self, model_functions=None):
@@ -18,14 +18,33 @@ class Model(object):
self.models = model_functions
self._cached_parameters = {model: None for model in self.models}
self._cached_probability = {model: None for model in self.models}
self._cached_data = {model: None for model in self.models}
self.parameters = dict()
def prob(self, data, **kwargs):
"""
Parameters
----------
data: dict, DataFrame
Data to evaluate probability for.
Returns
-------
probability: float
Probability evaluated for a given population model.
Uses data and function parameters.
"""
probability = 1.0
import pandas as pd
for ii, function in enumerate(self.models):
function_parameters = self._get_function_parameters(function)
if self._cached_parameters[function] == function_parameters:
A = self._cached_parameters[function] == function_parameters
if isinstance(data, pd.DataFrame):
B = data.equals(self._cached_data[function])
else:
B = data == self._cached_data[function]
if A and B:
new_probability = self._cached_probability[function]
else:
new_probability = function(
@@ -33,13 +52,14 @@ class Model(object):
)
self._cached_parameters[function] = function_parameters
self._cached_probability[function] = new_probability
self._cached_data[function] = data
probability *= new_probability
return probability
def _get_function_parameters(self, func):
"""If the function is a class method we need to remove more arguments"""
param_keys = infer_args_from_function_except_n_args(func, n=0)
ignore = ['dataset', 'self', 'cls']
ignore = ["dataset", "self", "cls"]
for key in ignore:
if key in param_keys:
del param_keys[param_keys.index(key)]
Loading