Skip to content
Snippets Groups Projects
Commit d4e83e8e authored by Stefano Borini's avatar Stefano Borini
Browse files

Fixed tests

parent f44b8de2
No related branches found
No related tags found
1 merge request!146Specify KPIs at the MCO level
Showing
with 66 additions and 102 deletions
from traits.api import HasStrictTraits, Any, String, Enum, Bool from traits.api import HasStrictTraits, Any, String, Enum
class DataValue(HasStrictTraits): class DataValue(HasStrictTraits):
......
...@@ -7,4 +7,5 @@ class KPISpecification(HasStrictTraits): ...@@ -7,4 +7,5 @@ class KPISpecification(HasStrictTraits):
#: The user defined name of the variable containing the kpi value. #: The user defined name of the variable containing the kpi value.
name = Identifier() name = Identifier()
target = Enum("MINIMISE") #: The expected outcome of the procedure relative to this KPI.
objective = Enum("MINIMISE")
from traits.api import HasStrictTraits, Bool from traits.api import HasStrictTraits
from ..local_traits import Identifier from ..local_traits import Identifier
......
...@@ -57,12 +57,10 @@ class TestBaseDataSourceModel(unittest.TestCase): ...@@ -57,12 +57,10 @@ class TestBaseDataSourceModel(unittest.TestCase):
{ {
"__traits_version__": "4.6.0", "__traits_version__": "4.6.0",
"name": "baz", "name": "baz",
"is_kpi": False
}, },
{ {
"__traits_version__": "4.6.0", "__traits_version__": "4.6.0",
"name": "quux", "name": "quux",
"is_kpi": False
} }
] ]
}) })
...@@ -34,7 +34,8 @@ class TestWorkflowReader(unittest.TestCase): ...@@ -34,7 +34,8 @@ class TestWorkflowReader(unittest.TestCase):
".dummy_mco_parameter", ".dummy_mco_parameter",
"model_data": {} "model_data": {}
} }
] ],
"kpis": []
}, },
}, },
"execution_layers": [ "execution_layers": [
...@@ -146,6 +147,8 @@ class TestModelCreationFailure(unittest.TestCase): ...@@ -146,6 +147,8 @@ class TestModelCreationFailure(unittest.TestCase):
".probe_mco_parameter", ".probe_mco_parameter",
"model_data": {} "model_data": {}
} }
],
"kpis": [
] ]
}, },
}, },
......
...@@ -5,6 +5,7 @@ from traits.api import HasStrictTraits, Instance ...@@ -5,6 +5,7 @@ from traits.api import HasStrictTraits, Instance
from force_bdss.core.execution_layer import ExecutionLayer from force_bdss.core.execution_layer import ExecutionLayer
from force_bdss.core.input_slot_info import InputSlotInfo 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.output_slot_info import OutputSlotInfo
from force_bdss.core.workflow import Workflow from force_bdss.core.workflow import Workflow
from ..factory_registry_plugin import IFactoryRegistryPlugin from ..factory_registry_plugin import IFactoryRegistryPlugin
...@@ -165,6 +166,9 @@ class WorkflowReader(HasStrictTraits): ...@@ -165,6 +166,9 @@ class WorkflowReader(HasStrictTraits):
model_data["parameters"] = self._extract_mco_parameters( model_data["parameters"] = self._extract_mco_parameters(
mco_id, mco_id,
model_data["parameters"]) model_data["parameters"])
model_data["kpis"] = self._extract_kpi_specifications(
model_data["kpis"]
)
try: try:
model = mco_factory.create_model(model_data) model = mco_factory.create_model(model_data)
...@@ -281,6 +285,9 @@ class WorkflowReader(HasStrictTraits): ...@@ -281,6 +285,9 @@ class WorkflowReader(HasStrictTraits):
return parameters return parameters
def _extract_kpi_specifications(self, info):
return [KPISpecification(**d) for d in info]
def _extract_input_slot_info(self, info): def _extract_input_slot_info(self, info):
return [InputSlotInfo(**d) for d in info] return [InputSlotInfo(**d) for d in info]
......
...@@ -46,11 +46,7 @@ class WorkflowWriter(HasStrictTraits): ...@@ -46,11 +46,7 @@ class WorkflowWriter(HasStrictTraits):
parameters_data = [] parameters_data = []
for param in data["model_data"]["parameters"]: for param in data["model_data"]["parameters"]:
state = param.__getstate__() state = traits_to_dict(param)
try:
state.pop("__traits_version__")
except KeyError:
pass
parameters_data.append( parameters_data.append(
{ {
...@@ -60,6 +56,15 @@ class WorkflowWriter(HasStrictTraits): ...@@ -60,6 +56,15 @@ class WorkflowWriter(HasStrictTraits):
) )
data["model_data"]["parameters"] = parameters_data 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 return data
def _execution_layer_data(self, layer): def _execution_layer_data(self, layer):
...@@ -75,13 +80,21 @@ class WorkflowWriter(HasStrictTraits): ...@@ -75,13 +80,21 @@ class WorkflowWriter(HasStrictTraits):
""" """
Extracts the data from an external model and returns its dictionary Extracts the data from an external model and returns its dictionary
""" """
state = model.__getstate__() state = traits_to_dict(model)
try:
state.pop("__traits_version__")
except KeyError:
pass
return { return {
"id": model.factory.id, "id": model.factory.id,
"model_data": state "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
...@@ -18,10 +18,10 @@ class BaseMCOModel(ABCHasStrictTraits): ...@@ -18,10 +18,10 @@ class BaseMCOModel(ABCHasStrictTraits):
visible=False, visible=False,
transient=True) transient=True)
# A list of the parameters for the MCO #: A list of the parameters for the MCO
parameters = List(BaseMCOParameter, visible=False) 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) kpis = List(KPISpecification, visible=False)
def __init__(self, factory, *args, **kwargs): def __init__(self, factory, *args, **kwargs):
......
{
"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": [
]
}
}
...@@ -12,6 +12,12 @@ ...@@ -12,6 +12,12 @@
"type": "PRESSURE" "type": "PRESSURE"
} }
} }
],
"kpis": [
{
"name": "bar",
"objective": "MINIMISE"
}
] ]
} }
}, },
...@@ -31,8 +37,7 @@ ...@@ -31,8 +37,7 @@
], ],
"output_slot_info": [ "output_slot_info": [
{ {
"name": "bar", "name": "bar"
"is_kpi": true
} }
] ]
} }
......
...@@ -4,8 +4,6 @@ ...@@ -4,8 +4,6 @@
"mco": null, "mco": null,
"execution_layers": [ "execution_layers": [
], ],
"kpi_calculators": [
],
"notification_listeners": [ "notification_listeners": [
] ]
} }
......
...@@ -5,6 +5,8 @@ ...@@ -5,6 +5,8 @@
"id": "force.bdss.enthought.plugin.test.v0.factory.probe_mco", "id": "force.bdss.enthought.plugin.test.v0.factory.probe_mco",
"model_data": { "model_data": {
"parameters" : [ "parameters" : [
],
"kpis": [
] ]
} }
}, },
......
...@@ -12,6 +12,12 @@ ...@@ -12,6 +12,12 @@
"type": "PRESSURE" "type": "PRESSURE"
} }
} }
],
"kpis": [
{
"name": "bar",
"objective": "MINIMISE"
}
] ]
} }
}, },
...@@ -28,8 +34,7 @@ ...@@ -28,8 +34,7 @@
], ],
"output_slot_info": [ "output_slot_info": [
{ {
"name": "bar", "name": "bar"
"is_kpi": true
} }
] ]
} }
......
...@@ -4,6 +4,7 @@ import testfixtures ...@@ -4,6 +4,7 @@ import testfixtures
import six import six
from force_bdss.core.execution_layer import ExecutionLayer 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.output_slot_info import OutputSlotInfo
from force_bdss.core.workflow import Workflow from force_bdss.core.workflow import Workflow
from force_bdss.tests.probe_classes.factory_registry_plugin import \ from force_bdss.tests.probe_classes.factory_registry_plugin import \
...@@ -14,6 +15,7 @@ from force_bdss.core.input_slot_info import InputSlotInfo ...@@ -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.data_value import DataValue
from force_bdss.core.slot import Slot from force_bdss.core.slot import Slot
from force_bdss.tests import fixtures from force_bdss.tests import fixtures
from force_bdss.tests.probe_classes.mco import ProbeMCOFactory
try: try:
import mock import mock
...@@ -223,7 +225,14 @@ class TestCoreEvaluationDriver(unittest.TestCase): ...@@ -223,7 +225,14 @@ class TestCoreEvaluationDriver(unittest.TestCase):
output_slots_size=1, output_slots_size=1,
run_function=multiplier) run_function=multiplier)
mco_factory = ProbeMCOFactory(self.plugin)
mco_model = mco_factory.create_model()
mco_model.kpis = [
KPISpecification(name="out1")
]
wf = Workflow( wf = Workflow(
mco=mco_model,
execution_layers=[ execution_layers=[
ExecutionLayer(), ExecutionLayer(),
ExecutionLayer(), ExecutionLayer(),
...@@ -281,7 +290,7 @@ class TestCoreEvaluationDriver(unittest.TestCase): ...@@ -281,7 +290,7 @@ class TestCoreEvaluationDriver(unittest.TestCase):
InputSlotInfo(name="res2") InputSlotInfo(name="res2")
] ]
model.output_slot_info = [ model.output_slot_info = [
OutputSlotInfo(name="out1", is_kpi=True) OutputSlotInfo(name="out1")
] ]
wf.execution_layers[3].data_sources.append(model) wf.execution_layers[3].data_sources.append(model)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment