from .utils.ParameterSearch import DependentParameter
[docs]class ParameterDefaults:
"""
Base class of OnlineExperiment and OfflineModel, providing utilities for parameter defaults and overriding.
"""
def __init__(self, **parameters):
self.parameters = parameters
self.given_parameters = set(self.parameters.keys())
self.used_parameters = set([])
[docs] def check_unused_parameters(self):
unused = self.given_parameters - self.used_parameters
if(len(unused) != 0):
raise TypeError("Unused parameters: " + ", ".join(unused))
[docs] def set_parameter(self, name, value):
self.parameters[name] = value
self.given_parameters |= set([name])
[docs] def parameter_defaults(self, **defaults):
for k in defaults:
defaults[k] = self.parameter_default(k, defaults[k])
return defaults
[docs] def parameter_default(self, name, value):
self.used_parameters |= set([name])
if name in self.parameters:
if isinstance(self.parameters[name], DependentParameter):
return self.parameters[name].eval(self.parameters)
else:
return self.parameters[name]
else:
return value