From d4e83e8ea35658e69d29cbfb709928c21f966d50 Mon Sep 17 00:00:00 2001 From: Stefano Borini <sborini@enthought.com> Date: Thu, 7 Jun 2018 11:47:54 +0100 Subject: [PATCH] Fixed tests --- force_bdss/core/data_value.py | 2 +- force_bdss/core/kpi_specification.py | 3 +- force_bdss/core/output_slot_info.py | 2 +- .../tests/test_base_data_source_model.py | 2 - force_bdss/io/tests/test_workflow_reader.py | 5 +- force_bdss/io/workflow_reader.py | 7 ++ force_bdss/io/workflow_writer.py | 33 +++++--- force_bdss/mco/base_mco_model.py | 4 +- force_bdss/tests/fixtures/test_csv.json | 77 ------------------- force_bdss/tests/fixtures/test_dummy.json | 9 ++- force_bdss/tests/fixtures/test_empty.json | 2 - force_bdss/tests/fixtures/test_null.json | 2 + force_bdss/tests/fixtures/test_probe.json | 9 ++- .../tests/test_core_evaluation_driver.py | 11 ++- 14 files changed, 66 insertions(+), 102 deletions(-) delete mode 100644 force_bdss/tests/fixtures/test_csv.json diff --git a/force_bdss/core/data_value.py b/force_bdss/core/data_value.py index 51226d9..c03f1da 100644 --- a/force_bdss/core/data_value.py +++ b/force_bdss/core/data_value.py @@ -1,4 +1,4 @@ -from traits.api import HasStrictTraits, Any, String, Enum, Bool +from traits.api import HasStrictTraits, Any, String, Enum class DataValue(HasStrictTraits): diff --git a/force_bdss/core/kpi_specification.py b/force_bdss/core/kpi_specification.py index 672a9cf..f675939 100644 --- a/force_bdss/core/kpi_specification.py +++ b/force_bdss/core/kpi_specification.py @@ -7,4 +7,5 @@ class KPISpecification(HasStrictTraits): #: The user defined name of the variable containing the kpi value. name = Identifier() - target = Enum("MINIMISE") + #: The expected outcome of the procedure relative to this KPI. + objective = Enum("MINIMISE") diff --git a/force_bdss/core/output_slot_info.py b/force_bdss/core/output_slot_info.py index 6fd360d..b2307d4 100644 --- a/force_bdss/core/output_slot_info.py +++ b/force_bdss/core/output_slot_info.py @@ -1,4 +1,4 @@ -from traits.api import HasStrictTraits, Bool +from traits.api import HasStrictTraits from ..local_traits import Identifier diff --git a/force_bdss/data_sources/tests/test_base_data_source_model.py b/force_bdss/data_sources/tests/test_base_data_source_model.py index 7bdcc3c..a9be54b 100644 --- a/force_bdss/data_sources/tests/test_base_data_source_model.py +++ b/force_bdss/data_sources/tests/test_base_data_source_model.py @@ -57,12 +57,10 @@ class TestBaseDataSourceModel(unittest.TestCase): { "__traits_version__": "4.6.0", "name": "baz", - "is_kpi": False }, { "__traits_version__": "4.6.0", "name": "quux", - "is_kpi": False } ] }) diff --git a/force_bdss/io/tests/test_workflow_reader.py b/force_bdss/io/tests/test_workflow_reader.py index 84bd572..c3e81cb 100644 --- a/force_bdss/io/tests/test_workflow_reader.py +++ b/force_bdss/io/tests/test_workflow_reader.py @@ -34,7 +34,8 @@ class TestWorkflowReader(unittest.TestCase): ".dummy_mco_parameter", "model_data": {} } - ] + ], + "kpis": [] }, }, "execution_layers": [ @@ -146,6 +147,8 @@ class TestModelCreationFailure(unittest.TestCase): ".probe_mco_parameter", "model_data": {} } + ], + "kpis": [ ] }, }, diff --git a/force_bdss/io/workflow_reader.py b/force_bdss/io/workflow_reader.py index dd9687e..f2b3829 100644 --- a/force_bdss/io/workflow_reader.py +++ b/force_bdss/io/workflow_reader.py @@ -5,6 +5,7 @@ from traits.api import HasStrictTraits, Instance from force_bdss.core.execution_layer import ExecutionLayer from force_bdss.core.input_slot_info import InputSlotInfo +from force_bdss.core.kpi_specification import KPISpecification from force_bdss.core.output_slot_info import OutputSlotInfo from force_bdss.core.workflow import Workflow from ..factory_registry_plugin import IFactoryRegistryPlugin @@ -165,6 +166,9 @@ class WorkflowReader(HasStrictTraits): model_data["parameters"] = self._extract_mco_parameters( mco_id, model_data["parameters"]) + model_data["kpis"] = self._extract_kpi_specifications( + model_data["kpis"] + ) try: model = mco_factory.create_model(model_data) @@ -281,6 +285,9 @@ class WorkflowReader(HasStrictTraits): return parameters + def _extract_kpi_specifications(self, info): + return [KPISpecification(**d) for d in info] + def _extract_input_slot_info(self, info): return [InputSlotInfo(**d) for d in info] diff --git a/force_bdss/io/workflow_writer.py b/force_bdss/io/workflow_writer.py index 9a0db68..aadd19d 100644 --- a/force_bdss/io/workflow_writer.py +++ b/force_bdss/io/workflow_writer.py @@ -46,11 +46,7 @@ class WorkflowWriter(HasStrictTraits): parameters_data = [] for param in data["model_data"]["parameters"]: - state = param.__getstate__() - try: - state.pop("__traits_version__") - except KeyError: - pass + state = traits_to_dict(param) parameters_data.append( { @@ -60,6 +56,15 @@ class WorkflowWriter(HasStrictTraits): ) data["model_data"]["parameters"] = parameters_data + + kpis_data = [] + for kpi in data["model_data"]["kpis"]: + kpis_data.append( + traits_to_dict(kpi) + ) + + data["model_data"]["kpis"] = kpis_data + return data def _execution_layer_data(self, layer): @@ -75,13 +80,21 @@ class WorkflowWriter(HasStrictTraits): """ Extracts the data from an external model and returns its dictionary """ - state = model.__getstate__() - try: - state.pop("__traits_version__") - except KeyError: - pass + state = traits_to_dict(model) return { "id": model.factory.id, "model_data": state } + + +def traits_to_dict(traits_obj): + """Converts a traits class into a dict, removing the pesky + traits version.""" + state = traits_obj.__getstate__() + try: + state.pop("__traits_version__") + except KeyError: + pass + + return state diff --git a/force_bdss/mco/base_mco_model.py b/force_bdss/mco/base_mco_model.py index af89084..b39f88e 100644 --- a/force_bdss/mco/base_mco_model.py +++ b/force_bdss/mco/base_mco_model.py @@ -18,10 +18,10 @@ class BaseMCOModel(ABCHasStrictTraits): visible=False, transient=True) - # A list of the parameters for the MCO + #: A list of the parameters for the MCO parameters = List(BaseMCOParameter, visible=False) - # A list of KPI specification objects and their objective. + #: A list of KPI specification objects and their objective. kpis = List(KPISpecification, visible=False) def __init__(self, factory, *args, **kwargs): diff --git a/force_bdss/tests/fixtures/test_csv.json b/force_bdss/tests/fixtures/test_csv.json deleted file mode 100644 index 692ff79..0000000 --- a/force_bdss/tests/fixtures/test_csv.json +++ /dev/null @@ -1,77 +0,0 @@ -{ - "version": "1", - "workflow": { - "mco": { - "id": "force.bdss.enthought.factory.dummy_dakota", - "model_data": { - "parameters" : [ - { - "id": "force.bdss.enthought.factory.dummy_dakota.parameter.ranged", - "model_data": { - "initial_value": 3, - "lower_bound": 0, - "upper_bound": 10, - "name": "p0", - "type": "PRESSURE" - } - } - ] - } - }, - "data_sources": [ - { - "id": "force.bdss.enthought.factory.csv_extractor", - "model_data": { - "filename": "foo.csv", - "row": 3, - "column": 5, - "cuba_type": "PRESSURE", - "input_slot_maps": [ - ], - "output_slot_names": [ - "p1" - ] - } - }, - { - "id": "force.bdss.enthought.factory.csv_extractor", - "model_data": { - "filename": "foo.csv", - "row": 3, - "column": 5, - "cuba_type": "PRESSURE", - "input_slot_maps": [ - ], - "output_slot_names": [ - "p2" - ] - } - } - ], - "kpi_calculators": [ - { - "id": "force.bdss.enthought.factory.kpi_adder", - "model_data": { - "cuba_type_in": "PRESSURE", - "cuba_type_out": "TOTAL_PRESSURE", - "input_slot_maps": [ - { - "name": "p0" - }, - { - "name": "p1" - }, - { - "name": "p2" - } - ], - "output_slot_names": [ - "ptot" - ] - } - } - ], - "notification_listeners": [ - ] - } -} diff --git a/force_bdss/tests/fixtures/test_dummy.json b/force_bdss/tests/fixtures/test_dummy.json index 36ec5c0..f11bc06 100644 --- a/force_bdss/tests/fixtures/test_dummy.json +++ b/force_bdss/tests/fixtures/test_dummy.json @@ -12,6 +12,12 @@ "type": "PRESSURE" } } + ], + "kpis": [ + { + "name": "bar", + "objective": "MINIMISE" + } ] } }, @@ -31,8 +37,7 @@ ], "output_slot_info": [ { - "name": "bar", - "is_kpi": true + "name": "bar" } ] } diff --git a/force_bdss/tests/fixtures/test_empty.json b/force_bdss/tests/fixtures/test_empty.json index 00c6b2f..c739dfe 100644 --- a/force_bdss/tests/fixtures/test_empty.json +++ b/force_bdss/tests/fixtures/test_empty.json @@ -4,8 +4,6 @@ "mco": null, "execution_layers": [ ], - "kpi_calculators": [ - ], "notification_listeners": [ ] } diff --git a/force_bdss/tests/fixtures/test_null.json b/force_bdss/tests/fixtures/test_null.json index b5c9ab9..8103e91 100644 --- a/force_bdss/tests/fixtures/test_null.json +++ b/force_bdss/tests/fixtures/test_null.json @@ -5,6 +5,8 @@ "id": "force.bdss.enthought.plugin.test.v0.factory.probe_mco", "model_data": { "parameters" : [ + ], + "kpis": [ ] } }, diff --git a/force_bdss/tests/fixtures/test_probe.json b/force_bdss/tests/fixtures/test_probe.json index 2eba16d..c0c1bde 100644 --- a/force_bdss/tests/fixtures/test_probe.json +++ b/force_bdss/tests/fixtures/test_probe.json @@ -12,6 +12,12 @@ "type": "PRESSURE" } } + ], + "kpis": [ + { + "name": "bar", + "objective": "MINIMISE" + } ] } }, @@ -28,8 +34,7 @@ ], "output_slot_info": [ { - "name": "bar", - "is_kpi": true + "name": "bar" } ] } diff --git a/force_bdss/tests/test_core_evaluation_driver.py b/force_bdss/tests/test_core_evaluation_driver.py index 5d206ec..172ceaa 100644 --- a/force_bdss/tests/test_core_evaluation_driver.py +++ b/force_bdss/tests/test_core_evaluation_driver.py @@ -4,6 +4,7 @@ import testfixtures import six from force_bdss.core.execution_layer import ExecutionLayer +from force_bdss.core.kpi_specification import KPISpecification from force_bdss.core.output_slot_info import OutputSlotInfo from force_bdss.core.workflow import Workflow from force_bdss.tests.probe_classes.factory_registry_plugin import \ @@ -14,6 +15,7 @@ from force_bdss.core.input_slot_info import InputSlotInfo from force_bdss.core.data_value import DataValue from force_bdss.core.slot import Slot from force_bdss.tests import fixtures +from force_bdss.tests.probe_classes.mco import ProbeMCOFactory try: import mock @@ -223,7 +225,14 @@ class TestCoreEvaluationDriver(unittest.TestCase): output_slots_size=1, run_function=multiplier) + mco_factory = ProbeMCOFactory(self.plugin) + mco_model = mco_factory.create_model() + mco_model.kpis = [ + KPISpecification(name="out1") + ] + wf = Workflow( + mco=mco_model, execution_layers=[ ExecutionLayer(), ExecutionLayer(), @@ -281,7 +290,7 @@ class TestCoreEvaluationDriver(unittest.TestCase): InputSlotInfo(name="res2") ] model.output_slot_info = [ - OutputSlotInfo(name="out1", is_kpi=True) + OutputSlotInfo(name="out1") ] wf.execution_layers[3].data_sources.append(model) -- GitLab