from WORC.detectors.detectors import BigrClusterDetector, CartesiusClusterDetector
import configparser
[docs]class ConfigBuilder():
[docs] def __init__(self):
# initalize the main config object and the custom overrids
self._config = configparser.ConfigParser()
self._custom_overrides = {}
# Detect when using a cluster and override relevant config fields
self._cluster_config_overrides()
[docs] def build_config(self, defaultconfig):
defaultconfig.read_dict({**self._config})
defaultconfig.read_dict({**self._custom_overrides})
self._config = defaultconfig
return defaultconfig
[docs] def custom_config_overrides(self, config):
self._custom_overrides.update(config)
def _cluster_config_overrides(self):
if BigrClusterDetector().do_detection():
overrides = {
'General': {'Joblib_ncores': '1',
'Joblib_backend': 'threading'},
'Classification': {'fastr': 'True',
'fastr_plugin': 'DRMAAExecution'},
'HyperOptimization': {'n_jobspercore': '4000'}
}
elif CartesiusClusterDetector().do_detection():
overrides = {
'Classification': {'fastr': 'True',
'fastr_plugin': 'ProcessPoolExecution'},
'HyperOptimization': {'n_jobspercore': '4000'}
}
else:
overrides = {} # not a cluster or unsupported
self._custom_overrides.update(overrides)
return overrides
[docs] def estimator_scoring_overrides(self, estimators, scoring_method):
overrides = {
'Classification': {'classifiers': ', '.join(estimators)},
'HyperOptimization': {'scoring_method': scoring_method}
}
self._custom_overrides.update(overrides)
return overrides
[docs] def coarse_overrides(self):
overrides = {
'ImageFeatures': {
'texture_Gabor': 'False',
'vessel': 'False',
'log': 'False',
'phase': 'False'
},
'SelectFeatGroup': {
'texture_Gabor_features': 'False',
'log_features': 'False',
'vessel_features': 'False',
'phase_features': 'False'
},
'CrossValidation': {'N_iterations': '3'},
'HyperOptimization': {'N_iterations': '1000',
'n_jobspercore': '500'},
'Ensemble': {'Use': '1'},
'SampleProcessing': {'SMOTE': 'False'},
}
self._custom_overrides.update(overrides)
return overrides
[docs] def full_overrides(self):
overrides = {
'ImageFeatures': {
'texture_Gabor': 'True',
'vessel': 'True',
'log': 'True',
'phase': 'True'
},
'SelectFeatGroup': {
'texture_Gabor_features': 'True, False',
'log_features': 'True, False',
'vessel_features': 'True, False',
'phase_features': 'True, False'
},
'CrossValidation': {'N_iterations': '100'},
'HyperOptimization': {'N_iterations': '100000',
'n_jobspercore': '4000'},
'Ensemble': {'Use': '50'},
'SampleProcessing': {'SMOTE': 'True'},
}
self._custom_overrides.update(overrides)
return overrides
[docs] def fullprint(self):
'''
Print the full contents of the config to the console.
'''
for k, v in self._config.items():
print(f"{k}:")
for k2, v2 in v.items():
print(f"\t {k2}: {v2}")
print("\n")