diff --git a/force_bdss/api.py b/force_bdss/api.py index 5c71f3d71284e4124ab530be23f6f5c17dcbb576..4f54ab3b3a75df5b49f44f94053aeb940561daa0 100644 --- a/force_bdss/api.py +++ b/force_bdss/api.py @@ -1,5 +1,6 @@ from .base_extension_plugin import BaseExtensionPlugin # noqa from .ids import bundle_id, plugin_id # noqa +from .core.data_value import DataValue # noqa from .data_sources.base_data_source_model import BaseDataSourceModel # noqa from .data_sources.data_source_result import DataSourceResult # noqa diff --git a/force_bdss/core/__init__.py b/force_bdss/core/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/force_bdss/core/data_value.py b/force_bdss/core/data_value.py new file mode 100644 index 0000000000000000000000000000000000000000..f03aca3fb4a8a1dfd0f798308d0df63ec9d66dae --- /dev/null +++ b/force_bdss/core/data_value.py @@ -0,0 +1,20 @@ +from traits.api import HasStrictTraits, Any, String + + +class DataValue(HasStrictTraits): + """Contains the parameters as passed from the MCO.""" + #: The CUBA types associated to the values + type = String() + + #: The user-defined names associated to the values. + name = String() + + #: The values as a single array. + value = Any() + + def __str__(self): + return """ + {} {} : {} + """.format(str(self.type), + str(self.name), + str(self.value)) diff --git a/force_bdss/core_evaluation_driver.py b/force_bdss/core_evaluation_driver.py index ee8de2b1488d6e14798d4e75e58726b368dc9fda..8cfe761cd513ce973186688013f4dcea56f382c6 100644 --- a/force_bdss/core_evaluation_driver.py +++ b/force_bdss/core_evaluation_driver.py @@ -31,13 +31,13 @@ class CoreEvaluationDriver(BaseCoreDriver): mco_bundle = mco_model.bundle mco_communicator = mco_bundle.create_communicator() - parameters = mco_communicator.receive_from_mco(mco_model) + mco_data_values = mco_communicator.receive_from_mco(mco_model) ds_results = [] for ds_model in workflow.data_sources: ds_bundle = ds_model.bundle data_source = ds_bundle.create_data_source() - ds_results.append(data_source.run(ds_model, parameters)) + ds_results.append(data_source.run(ds_model, mco_data_values)) kpi_results = [] for kpic_model in workflow.kpi_calculators: diff --git a/force_bdss/core_plugins/dummy/csv_extractor/csv_extractor_data_source.py b/force_bdss/core_plugins/dummy/csv_extractor/csv_extractor_data_source.py index b42cf1b7a17207188acefa7bb0192b7e81a9dbcb..d159906bd9030b8d58ebaed3ff462cb8bb7c32d5 100644 --- a/force_bdss/core_plugins/dummy/csv_extractor/csv_extractor_data_source.py +++ b/force_bdss/core_plugins/dummy/csv_extractor/csv_extractor_data_source.py @@ -1,7 +1,5 @@ import csv -import numpy -from force_bdss.api import BaseDataSource -from force_bdss.api import DataSourceResult +from force_bdss.api import BaseDataSource, DataValue class CSVExtractorDataSource(BaseDataSource): @@ -13,13 +11,12 @@ class CSVExtractorDataSource(BaseDataSource): continue if rowindex == model.row: - return DataSourceResult( - originator=self, - value_types=[model.cuba_type], - values=numpy.array( - parameters.values[0]+float( - row[model.column])).reshape(1, 1) - ) + return [ + DataValue( + type=model.cuba_type, + value=float(row[model.column]) + ) + ] return None return None diff --git a/force_bdss/core_plugins/dummy/dummy_dakota/dakota_communicator.py b/force_bdss/core_plugins/dummy/dummy_dakota/dakota_communicator.py index d5b53d90259823e576581e78e5fe1966d85b7a36..958d5c2068e7f4dd99620b06372e016abeef207e 100644 --- a/force_bdss/core_plugins/dummy/dummy_dakota/dakota_communicator.py +++ b/force_bdss/core_plugins/dummy/dummy_dakota/dakota_communicator.py @@ -1,7 +1,8 @@ import sys -import numpy -from force_bdss.api import DataSourceParameters, BaseMCOCommunicator +from force_bdss.api import ( + BaseMCOCommunicator, + DataValue) class DummyDakotaCommunicator(BaseMCOCommunicator): @@ -11,11 +12,10 @@ class DummyDakotaCommunicator(BaseMCOCommunicator): value_names = [p.value_name for p in model.parameters] value_types = [p.value_type for p in model.parameters] - return DataSourceParameters( - value_names=value_names, - value_types=value_types, - values=numpy.array(values) - ) + return [ + DataValue(type=type_, name=name, value=value) + for type_, name, value in zip( + value_types, value_names, values)] def send_to_mco(self, model, kpi_results): data = " ".join( diff --git a/force_bdss/core_plugins/dummy/dummy_data_source/dummy_data_source.py b/force_bdss/core_plugins/dummy/dummy_data_source/dummy_data_source.py index cd0446b68480517853da8be7571eaf0336c34441..03c36de2f42e17926d2069a6b7723e46b986980e 100644 --- a/force_bdss/core_plugins/dummy/dummy_data_source/dummy_data_source.py +++ b/force_bdss/core_plugins/dummy/dummy_data_source/dummy_data_source.py @@ -1,12 +1,6 @@ -from force_bdss.api import BaseDataSource, DataSourceResult +from force_bdss.api import BaseDataSource class DummyDataSource(BaseDataSource): def run(self, model, parameters): - print(parameters) - return DataSourceResult( - originator=self, - value_names=parameters.value_names, - value_types=parameters.value_types, - values=parameters.values.reshape( - parameters.values.shape + (1,))) + return parameters diff --git a/force_bdss/core_plugins/dummy/dummy_kpi_calculator/dummy_kpi_calculator.py b/force_bdss/core_plugins/dummy/dummy_kpi_calculator/dummy_kpi_calculator.py index 0fe0077dd20c4e35ff26b73fe94c12d6fdf67b22..f1a8a168935464c02064905cd5b21a937afeb0f6 100644 --- a/force_bdss/core_plugins/dummy/dummy_kpi_calculator/dummy_kpi_calculator.py +++ b/force_bdss/core_plugins/dummy/dummy_kpi_calculator/dummy_kpi_calculator.py @@ -1,15 +1,8 @@ -from force_bdss.api import BaseKPICalculator, KPICalculatorResult, bundle_id +from force_bdss.api import BaseKPICalculator, bundle_id class DummyKPICalculator(BaseKPICalculator): id = bundle_id("enthought", "dummy_kpi_calculator") def run(self, model, data_source_results): - res = KPICalculatorResult( - originator=self, - value_names=data_source_results[0].value_names, - value_types=data_source_results[0].value_types, - values=data_source_results[0].values.reshape( - data_source_results[0].values.shape[:-1])) - - return res + return data_source_results diff --git a/force_bdss/core_plugins/dummy/kpi_adder/kpi_adder_calculator.py b/force_bdss/core_plugins/dummy/kpi_adder/kpi_adder_calculator.py index 4611683665384da3982d482e4ee99f783c15390b..2c24d6242a760c93956b3eb361517aad15566215 100644 --- a/force_bdss/core_plugins/dummy/kpi_adder/kpi_adder_calculator.py +++ b/force_bdss/core_plugins/dummy/kpi_adder/kpi_adder_calculator.py @@ -1,22 +1,18 @@ -import numpy - -from force_bdss.api import BaseKPICalculator -from force_bdss.api import KPICalculatorResult +from force_bdss.api import BaseKPICalculator, DataValue class KPIAdderCalculator(BaseKPICalculator): def run(self, model, data_source_results): sum = 0.0 - for res in data_source_results: - try: - value_idx = res.value_types.index(model.cuba_type_in) - except ValueError: - continue + for ds_res in data_source_results: + for res in ds_res: + if res.type != model.cuba_type_in: + continue - sum += res.values[value_idx].sum() + sum += res.value - return KPICalculatorResult( - originator=self, - value_types=[model.cuba_type_out], - values=numpy.array([sum]) - ) + return [ + DataValue( + type=model.cuba_type_out, + value=sum + )] diff --git a/force_bdss/mco/base_mco_communicator.py b/force_bdss/mco/base_mco_communicator.py index 4cb0f3bf2b534f6c804a5fbbcd1049a11933b65f..073b16c9066e7d5d823cf14718fd410a599ade95 100644 --- a/force_bdss/mco/base_mco_communicator.py +++ b/force_bdss/mco/base_mco_communicator.py @@ -29,8 +29,8 @@ class BaseMCOCommunicator(ABCHasStrictTraits): The conversion is specific to the format of the communication between the MCO and its evaluator program. - Must return a single DataSourceParameters object, containing - the parameters as passed by the MCO. + Must return a list of DataValue objects, containing the data passed + by the MCO. Parameters ---------- @@ -39,9 +39,8 @@ class BaseMCOCommunicator(ABCHasStrictTraits): Returns ------- - DataSourceParameters - An instance of the DataSourceParameters with the appropriate - information filled in. + List(DataValue) + A list of the DataValues with the appropriate information filled in """ @abc.abstractmethod