diff --git a/force_bdss/core_mco_driver.py b/force_bdss/core_mco_driver.py index a7775b50758fd9df7757f87b413c050667c90b32..20a50cea38b7421cbbe205043f28055c9d776944 100644 --- a/force_bdss/core_mco_driver.py +++ b/force_bdss/core_mco_driver.py @@ -35,6 +35,7 @@ class CoreMCODriver(Plugin): def application_started(self): workflow = self.application.workflow if self.application.evaluate: + ds_results = [] for requested_ds in workflow.data_sources: ds_bundle = self._find_data_source_bundle_by_name( requested_ds.name) @@ -42,7 +43,7 @@ class CoreMCODriver(Plugin): ds_model = ds_bundle.create_model(requested_ds.model_data) data_source = ds_bundle.create_data_source( self.application, ds_model) - print(data_source.run()) + ds_results.append(data_source.run()) else: raise Exception("Requested data source {} but don't know " "to find it.".format(requested_ds.name)) diff --git a/force_bdss/core_plugins/csv_extractor/csv_extractor/csv_extractor_data_source.py b/force_bdss/core_plugins/csv_extractor/csv_extractor/csv_extractor_data_source.py index f01f35554a5d2530935e560d29f6afc8da06c568..75e1a936cc54c4784d9f3a06893ce143fcc12271 100644 --- a/force_bdss/core_plugins/csv_extractor/csv_extractor/csv_extractor_data_source.py +++ b/force_bdss/core_plugins/csv_extractor/csv_extractor/csv_extractor_data_source.py @@ -1,5 +1,7 @@ import csv +import numpy from force_bdss.data_sources.base_data_source import BaseDataSource +from force_bdss.data_sources.data_source_result import DataSourceResult class CSVExtractorDataSource(BaseDataSource): @@ -11,9 +13,12 @@ class CSVExtractorDataSource(BaseDataSource): continue if rowindex == self.model.row: - return { - self.model.cuba_type: row[self.model.column] - } + return DataSourceResult( + originator=self, + value_types=[self.model.cuba_type], + values=numpy.array( + row[self.model.column]).reshape(1, 1) + ) return None return None diff --git a/force_bdss/data_sources/base_data_source.py b/force_bdss/data_sources/base_data_source.py index 49c114082a4ce68b0301f31e3f31e02959c8b06e..469ed8b902cc9d237139bf6b53ef6e2a952a20e8 100644 --- a/force_bdss/data_sources/base_data_source.py +++ b/force_bdss/data_sources/base_data_source.py @@ -12,5 +12,8 @@ class BaseDataSource(six.with_metaclass(abc.ABCMeta)): def name(self): return self.bundle.name + @abc.abstractmethod def run(self): + """Executes the data source evaluation/fetching and returns + the list of results as a DataSourceResult instance.""" pass diff --git a/force_bdss/data_sources/data_source_result.py b/force_bdss/data_sources/data_source_result.py new file mode 100644 index 0000000000000000000000000000000000000000..b1208aec5ca1dc9217667c9009021344fd4be8c4 --- /dev/null +++ b/force_bdss/data_sources/data_source_result.py @@ -0,0 +1,19 @@ +from traits.api import HasTraits, Array, ArrayOrNone, List, String, Instance + +from .base_data_source import BaseDataSource + + +class DataSourceResult(HasTraits): + """Represents the result of a simulator. + It contains the resulting cuba key, the associated uncertainty and the + originating simulator. + Difference between uncertainty and quality: uncertainty is a numerical + value of the value, as in the case of an experimental simulation. + quality is the level of accuracy of the (e.g. computational) method, as + the importance and reliability of that value. It should be an enumeration + value such as HIGH, MEDIUM, POOR""" + originator = Instance(BaseDataSource) + value_types = List(String) + values = Array(shape=(None, None)) + accuracy = ArrayOrNone(shape=(None, None)) + quality = ArrayOrNone(shape=(None, None)) diff --git a/requirements/requirements.txt b/requirements/requirements.txt index cfc27054ea4f3f6acf0be5267e8bf9a3809d9881..4896c1b4d5714200a4b3d43b45cae26a344c2fc6 100644 --- a/requirements/requirements.txt +++ b/requirements/requirements.txt @@ -2,3 +2,4 @@ envisage==4.6.0 click==6.7 six==1.10.0 stevedore==1.24.0 +numpy==1.12.0 diff --git a/setup.py b/setup.py index 3666512919b74d4c0e96fd001e4896f74d599b64..ee92923801b09e5ccf799726e3df464af61f7d1a 100644 --- a/setup.py +++ b/setup.py @@ -21,6 +21,7 @@ setup( "envisage >= 4.6.0", "click >= 6.7", "stevedore >= 1.24.0", - "six >= 1.10.0" + "six >= 1.10.0", + "numpy >= 1.12.0", ] )