Source code for idmtools_calibra.calib_site
import logging
from abc import ABCMeta, abstractmethod
logger = logging.getLogger(__name__)
[docs]class SiteFunctions(object):
"""
A helper to take a set of bare SimConfigBuilder-modifying functions
and combine them into a single function of the same format
"""
def __init__(self, name, setup_functions, verbose=False):
self.name = name
self.setup_functions = setup_functions
self.verbose = verbose
[docs] def set_calibration_site(self, task):
"""
N.B. The name of this function is chosen to ensure it is applied first
by ModBuilder.set_mods and other aspects can be over-ridden as needed
by sample-point modifications.
"""
metadata = {'__site__': self.name}
for fn in self.setup_functions:
md = fn(task)
if self.verbose and md:
metadata.update(md)
return metadata
[docs]class CalibSite(object):
"""
A class to represent the base behavior of a calibration site
"""
__metaclass__ = ABCMeta
def __init__(self, name):
self.name = name
self.a_type = None
self.setup_fn = SiteFunctions(self.name, self.get_setup_functions()).set_calibration_site
self.analyzers = self.get_analyzers()
if not self.analyzers:
raise Exception('Each CalibSite must enable at least one analyzer.')
logger.info('Setting up %s CalibSite:', name)
# logger.info(' Analyzers = %s', [a.name for a in self.analyzers])
[docs] @abstractmethod
def get_reference_data(self, reference_type):
"""
Callback function for derived classes to pass site-specific reference data
that is requested by analyzers by the relevant reference_type.
"""
return {}
[docs] @abstractmethod
def get_analyzers(self):
"""
Derived classes return a list of BaseComparisonAnalyzer instances
that have been passed a reference to the CalibSite for site-specific analyzer setup.
"""
return []
# TODO: expose methods to modify some analyzer properties after construction, e.g. comparison functions and weights.
# TODO: or alternatively to pass optional arguments through from CalibSite constructor to get_analyzers.
[docs] @abstractmethod
def get_setup_functions(self):
"""
Derived classes return a list of functions to apply site-specific modifications to the base configuration.
These are combined into a single function using the SiteFunctions helper class in the CalibSite constructor.
"""
return []