From b90be7d20c50256676a6cba835cc128415370eb2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Se=C3=A1n=20Courtney?= Date: Fri, 10 Nov 2023 10:07:58 +0000 Subject: [PATCH 1/7] fixed indentation in ontology file --- ontology.mods.yml | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/ontology.mods.yml b/ontology.mods.yml index 830776b..fa14245 100644 --- a/ontology.mods.yml +++ b/ontology.mods.yml @@ -63,10 +63,10 @@ ontology: SensitivityAnalysis: subclass_of: - - mods.Simulation - - mods.hasPart: - cardinality: 1 - range: mods.SensitivityDataSet + - mods.Simulation + - mods.hasPart: + cardinality: 1 + range: mods.SensitivityDataSet Algorithm: subclass_of: @@ -102,10 +102,10 @@ ontology: SensitivityDataSet: subclass_of: - - mods.OutputData - - mods.hasPart: - cardinality: some - range: mods.Sensitivity + - mods.OutputData + - mods.hasPart: + cardinality: some + range: mods.Sensitivity Sensitivity: subclass_of: @@ -139,7 +139,7 @@ ontology: SensitivityItem: subclass_of: - - mods.DataPointItem + - mods.DataPointItem attributes: mods.order: @@ -185,7 +185,7 @@ ontology: order: subclass_of: - - mods.value + - mods.value datatype: INT name: From 351d402b9d7a853ef4077c7322ab98f7202f708a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Se=C3=A1n=20Courtney?= Date: Fri, 10 Nov 2023 10:11:30 +0000 Subject: [PATCH 2/7] add dkl to ontology --- ontology.mods.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/ontology.mods.yml b/ontology.mods.yml index fa14245..d2a358c 100644 --- a/ontology.mods.yml +++ b/ontology.mods.yml @@ -1,5 +1,5 @@ --- -version: "0.0.9" +version: "0.0.10" namespace: "mods" author: "CMCL Innovations" @@ -47,6 +47,10 @@ ontology: subclass_of: - mods.Simulation + DeepKernelLearningSimulation: + subclass_of: + - mods.Simulation + MultiObjectiveSimulationOnly: subclass_of: - mods.Simulation From fa27844880027ee63941a2359b569da41173a2e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Se=C3=A1n=20Courtney?= Date: Mon, 13 Nov 2023 10:53:59 +0000 Subject: [PATCH 3/7] updated mods.ttl with dkl --- mods.ttl | 228 +++++++++++++++++++++++++++++++++---------------------- 1 file changed, 137 insertions(+), 91 deletions(-) diff --git a/mods.ttl b/mods.ttl index b40b702..b08f538 100644 --- a/mods.ttl +++ b/mods.ttl @@ -1,47 +1,51 @@ -@prefix ns1: . -@prefix ns2: . +@prefix ns1: . @prefix owl: . @prefix rdfs: . +@prefix skos: . @prefix xsd: . - ns2:_default_rel . + ns1:_default_rel . a owl:Class ; + ns1:_default [ ns1:_default_attribute ; + ns1:_default_value "None" ], + [ ns1:_default_attribute ; + ns1:_default_value "None" ], + [ ns1:_default_attribute ; + ns1:_default_value "None" ] ; rdfs:subClassOf [ a owl:Restriction ; owl:cardinality 1 ; - owl:onProperty ], + owl:onProperty ], [ a owl:Restriction ; owl:cardinality 1 ; - owl:onProperty ], + owl:onProperty ], [ a owl:Restriction ; owl:cardinality 1 ; owl:onProperty ], [ a owl:Restriction ; owl:cardinality 1 ; - owl:onProperty ], + owl:onProperty ], [ a owl:Restriction ; owl:cardinality 1 ; - owl:onProperty ], - ns2:Entity ; - ns1:prefLabel "Algorithm"@en . + owl:onProperty ], + ns1:Entity ; + skos:prefLabel "Algorithm"@en . a owl:Class ; - rdfs:subClassOf ns2:Entity ; - ns1:prefLabel "AnalyticModel"@en . + rdfs:subClassOf ns1:Entity ; + skos:prefLabel "AnalyticModel"@en . a owl:Class ; - rdfs:subClassOf ns2:Entity ; - ns1:prefLabel "DataPoint"@en . + rdfs:subClassOf ns1:Entity ; + skos:prefLabel "DataPoint"@en . - a owl:Class ; - rdfs:subClassOf [ a owl:Restriction ; - owl:cardinality 1 ; - owl:onProperty ], - [ a owl:Restriction ; - owl:cardinality 1 ; - owl:onProperty ], - ns2:Entity ; - ns1:prefLabel "DataPointItem"@en . + a owl:Class ; + rdfs:subClassOf ; + skos:prefLabel "DeepKernelLearningSimulation"@en . + + a owl:Class ; + rdfs:subClassOf ; + skos:prefLabel "EvaluateSurrogate"@en . a owl:Class ; rdfs:subClassOf [ a owl:Restriction ; @@ -50,152 +54,194 @@ [ a owl:Restriction ; owl:cardinality 1 ; owl:onProperty ], - ns2:Entity ; - ns1:prefLabel "Function"@en . + ns1:Entity ; + skos:prefLabel "Function"@en . a owl:Class ; rdfs:subClassOf ; - ns1:prefLabel "HighDimensionalModelRepresentationSimulation"@en . + skos:prefLabel "HighDimensionalModelRepresentationSimulation"@en . a owl:Class ; rdfs:subClassOf ; - ns1:prefLabel "InputData"@en . + skos:prefLabel "InputData"@en . a owl:Class ; - rdfs:subClassOf ns2:Entity ; - ns1:prefLabel "JobID"@en . + rdfs:subClassOf ns1:Entity ; + skos:prefLabel "JobID"@en . a owl:Class ; rdfs:subClassOf [ a owl:Restriction ; owl:cardinality 1 ; owl:onProperty ], - ns2:Entity ; - ns1:prefLabel "JobIDItem"@en . + ns1:Entity ; + skos:prefLabel "JobIDItem"@en . a owl:Class ; rdfs:subClassOf ; - ns1:prefLabel "MultiObjectiveSimulation"@en . + skos:prefLabel "MultiObjectiveSimulation"@en . a owl:Class ; rdfs:subClassOf ; - ns1:prefLabel "MultiObjectiveSimulationOnly"@en . + skos:prefLabel "MultiObjectiveSimulationOnly"@en . a owl:Class ; - rdfs:subClassOf ; - ns1:prefLabel "ParetoFront"@en . + rdfs:subClassOf ; + skos:prefLabel "ParetoFront"@en . + + a owl:Class ; + rdfs:subClassOf [ a owl:Restriction ; + owl:cardinality 1 ; + owl:onProperty ], + ns1:Entity ; + skos:prefLabel "Sensitivity"@en . + + a owl:Class ; + rdfs:subClassOf ; + skos:prefLabel "SensitivityAnalysis"@en . + + a owl:Class ; + rdfs:subClassOf ; + skos:prefLabel "SensitivityDataSet"@en . + + a owl:Class ; + rdfs:subClassOf [ a owl:Restriction ; + owl:cardinality 1 ; + owl:onProperty ], + ; + skos:prefLabel "SensitivityItem"@en . a owl:Class ; - ns2:_default [ ns2:_default_attribute ; - ns2:_default_value "None" ], - [ ns2:_default_attribute ; - ns2:_default_value "None" ], - [ ns2:_default_attribute ; - ns2:_default_value "None" ], - [ ns2:_default_attribute ; - ns2:_default_value "None" ] ; + ns1:_default [ ns1:_default_attribute ; + ns1:_default_value "None" ], + [ ns1:_default_attribute ; + ns1:_default_value "None" ], + [ ns1:_default_attribute ; + ns1:_default_value "None" ], + [ ns1:_default_attribute ; + ns1:_default_value "None" ] ; rdfs:subClassOf [ a owl:Restriction ; owl:cardinality 1 ; - owl:onProperty ], + owl:onProperty ], + [ a owl:Restriction ; + owl:cardinality 1 ; + owl:onProperty ], + [ a owl:Restriction ; + owl:cardinality 1 ; + owl:onProperty ], [ a owl:Restriction ; owl:cardinality 1 ; owl:onProperty ], [ a owl:Restriction ; owl:cardinality 1 ; - owl:onProperty ], + owl:onProperty ], [ a owl:Restriction ; owl:cardinality 1 ; owl:onProperty ], - [ a owl:Restriction ; + ns1:Entity ; + skos:prefLabel "Variable"@en . + + a owl:Class ; + rdfs:subClassOf [ a owl:Restriction ; owl:cardinality 1 ; - owl:onProperty ], + owl:onProperty ], [ a owl:Restriction ; owl:cardinality 1 ; - owl:onProperty ], - ns2:Entity ; - ns1:prefLabel "Variable"@en . + owl:onProperty ], + ns1:Entity ; + skos:prefLabel "DataPointItem"@en . a owl:DatatypeProperty, owl:FunctionalProperty ; rdfs:range xsd:string ; - rdfs:subPropertyOf ns2:attribute ; - ns1:prefLabel "formula"@en . + rdfs:subPropertyOf ns1:attribute ; + skos:prefLabel "formula"@en . a owl:ObjectProperty ; rdfs:isDefinedBy "inverse of the default relationship"@en ; - rdfs:subPropertyOf ns2:passiveRelationship ; + rdfs:subPropertyOf ns1:passiveRelationship ; owl:inverseOf ; - ns1:prefLabel "isPartOf"@en . + skos:prefLabel "isPartOf"@en . - a owl:DatatypeProperty, - owl:FunctionalProperty ; - rdfs:range xsd:string ; - rdfs:subPropertyOf ns2:attribute ; - ns1:prefLabel "surrogateToLoad"@en . - - a owl:DatatypeProperty, + a owl:DatatypeProperty, owl:FunctionalProperty ; rdfs:range xsd:integer ; - rdfs:subPropertyOf ns2:attribute ; - ns1:prefLabel "maxNumberOfResults"@en . - - a owl:DatatypeProperty, - owl:FunctionalProperty ; - rdfs:range xsd:boolean ; - rdfs:subPropertyOf ns2:attribute ; - ns1:prefLabel "saveSurrogate"@en . - - a owl:DatatypeProperty, - owl:FunctionalProperty ; - rdfs:subPropertyOf ns2:attribute ; - ns1:prefLabel "value"@en . + rdfs:subPropertyOf ; + skos:prefLabel "order"@en . a owl:Class ; - rdfs:subClassOf ns2:Entity ; - ns1:prefLabel "DataSet"@en . + rdfs:subClassOf ns1:Entity ; + skos:prefLabel "DataSet"@en . + + a owl:Class ; + rdfs:subClassOf ; + skos:prefLabel "OutputData"@en . a owl:ObjectProperty ; rdfs:isDefinedBy "default relationship"@en ; - rdfs:subPropertyOf ns2:activeRelationship ; + rdfs:subPropertyOf ns1:activeRelationship ; owl:inverseOf ; - ns1:prefLabel "hasPart"@en . + skos:prefLabel "hasPart"@en . + + a owl:DatatypeProperty, + owl:FunctionalProperty ; + rdfs:range xsd:string ; + rdfs:subPropertyOf ns1:attribute ; + skos:prefLabel "maxNumberOfResults"@en . a owl:DatatypeProperty, owl:FunctionalProperty ; rdfs:range xsd:string ; - rdfs:subPropertyOf ns2:attribute ; - ns1:prefLabel "maximum"@en . + rdfs:subPropertyOf ns1:attribute ; + skos:prefLabel "maximum"@en . a owl:DatatypeProperty, owl:FunctionalProperty ; rdfs:range xsd:string ; - rdfs:subPropertyOf ns2:attribute ; - ns1:prefLabel "minimum"@en . + rdfs:subPropertyOf ns1:attribute ; + skos:prefLabel "minimum"@en . a owl:DatatypeProperty, owl:FunctionalProperty ; rdfs:range xsd:string ; - rdfs:subPropertyOf ns2:attribute ; - ns1:prefLabel "objective"@en . + rdfs:subPropertyOf ns1:attribute ; + skos:prefLabel "objective"@en . + + a owl:DatatypeProperty, + owl:FunctionalProperty ; + rdfs:range xsd:boolean ; + rdfs:subPropertyOf ns1:attribute ; + skos:prefLabel "saveSurrogate"@en . + + a owl:DatatypeProperty, + owl:FunctionalProperty ; + rdfs:range xsd:string ; + rdfs:subPropertyOf ns1:attribute ; + skos:prefLabel "surrogateToLoad"@en . a owl:DatatypeProperty, owl:FunctionalProperty ; rdfs:range xsd:string ; - rdfs:subPropertyOf ns2:attribute ; - ns1:prefLabel "type"@en . + rdfs:subPropertyOf ns1:attribute ; + skos:prefLabel "type"@en . + + a owl:DatatypeProperty, + owl:FunctionalProperty ; + rdfs:subPropertyOf ns1:attribute ; + skos:prefLabel "value"@en . a owl:DatatypeProperty, owl:FunctionalProperty ; rdfs:range xsd:string ; - rdfs:subPropertyOf ns2:attribute ; - ns1:prefLabel "weight"@en . + rdfs:subPropertyOf ns1:attribute ; + skos:prefLabel "weight"@en . a owl:Class ; - rdfs:subClassOf ns2:Entity ; - ns1:prefLabel "Simulation"@en . + rdfs:subClassOf ns1:Entity ; + skos:prefLabel "Simulation"@en . a owl:DatatypeProperty, owl:FunctionalProperty ; rdfs:range xsd:string ; - rdfs:subPropertyOf ns2:attribute ; - ns1:prefLabel "name"@en . + rdfs:subPropertyOf ns1:attribute ; + skos:prefLabel "name"@en . From 24e74981ea738732fdfd89d79d9ab300ceba5441 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Se=C3=A1n=20Courtney?= Date: Mon, 13 Nov 2023 10:54:47 +0000 Subject: [PATCH 4/7] Incremented wrapper version --- .env | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.env b/.env index ecad1b5..e2abc4b 100644 --- a/.env +++ b/.env @@ -1,3 +1,3 @@ MODS_MOCK_AGENT_VERSION=0.7.0 -SIM_CMCL_MODS_WRAPPER_VERSION=0.10.0 +SIM_CMCL_MODS_WRAPPER_VERSION=0.11.0 MODS_AGENT_BASE_URL=https://kg.cmclinnovations.com/mods-agent \ No newline at end of file From f535b1888b7c6b23db9669c51ba5fef25bdaabff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Se=C3=A1n=20Courtney?= Date: Mon, 13 Nov 2023 10:55:14 +0000 Subject: [PATCH 5/7] added generating dkl to wrapper backend --- osp/wrappers/sim_cmcl_mods_wrapper/cuds_adaptor.py | 5 +++++ .../sim_cmcl_mods_wrapper/engine_sim_templates.py | 5 +++-- osp/wrappers/sim_cmcl_mods_wrapper/mods_engine.py | 10 ++++++++-- 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/osp/wrappers/sim_cmcl_mods_wrapper/cuds_adaptor.py b/osp/wrappers/sim_cmcl_mods_wrapper/cuds_adaptor.py index cedbe47..fdb74a8 100644 --- a/osp/wrappers/sim_cmcl_mods_wrapper/cuds_adaptor.py +++ b/osp/wrappers/sim_cmcl_mods_wrapper/cuds_adaptor.py @@ -46,6 +46,7 @@ def toJSON(root_cuds_object: Cuds, simulation_template: Enum) -> str: if simulation_template in {engtempl.Engine_Template.MOO, engtempl.Engine_Template.MOOonly, engtempl.Engine_Template.HDMR, + engtempl.Engine_Template.DKL, engtempl.Engine_Template.Evaluate, engtempl.Engine_Template.Sensitivity}: logger.info("Registering inputs") @@ -241,6 +242,10 @@ def toCUDS( simulation = root_cuds_object.get( oclass=mods.HighDimensionalModelRepresentationSimulation, rel=cuba.relationship)[0] + elif simulation_template == engtempl.Engine_Template.DKL: + simulation = root_cuds_object.get( + oclass=mods.DeepKernelLearningSimulation, rel=cuba.relationship)[0] + elif simulation_template == engtempl.Engine_Template.Sensitivity: sensitivity_data_set = mods.SensitivityDataSet() simulation = root_cuds_object.get( diff --git a/osp/wrappers/sim_cmcl_mods_wrapper/engine_sim_templates.py b/osp/wrappers/sim_cmcl_mods_wrapper/engine_sim_templates.py index e1969bb..4b96600 100644 --- a/osp/wrappers/sim_cmcl_mods_wrapper/engine_sim_templates.py +++ b/osp/wrappers/sim_cmcl_mods_wrapper/engine_sim_templates.py @@ -4,5 +4,6 @@ class Engine_Template(Enum): MOO = 1 MOOonly = 2 HDMR = 3 - Evaluate = 4 - Sensitivity = 5 \ No newline at end of file + DKL = 4 + Evaluate = 5 + Sensitivity = 6 diff --git a/osp/wrappers/sim_cmcl_mods_wrapper/mods_engine.py b/osp/wrappers/sim_cmcl_mods_wrapper/mods_engine.py index 7d5c38f..6237a57 100644 --- a/osp/wrappers/sim_cmcl_mods_wrapper/mods_engine.py +++ b/osp/wrappers/sim_cmcl_mods_wrapper/mods_engine.py @@ -44,11 +44,15 @@ def determineTemplate(self, root_cuds_object: Cuds) -> None: hdmr_class = search.find_cuds_objects_by_oclass( mods.HighDimensionalModelRepresentationSimulation, root_cuds_object, rel=None ) # type: ignore - + + dkl_class = search.find_cuds_objects_by_oclass( + mods.DeepKernelLearningSimulation, root_cuds_object, rel=None + ) # type: ignore + evaluate_class = search.find_cuds_objects_by_oclass( mods.EvaluateSurrogate, root_cuds_object, rel=None ) # type: ignore - + sensitivity_class = search.find_cuds_objects_by_oclass( mods.SensitivityAnalysis, root_cuds_object, rel=None ) # type: ignore @@ -59,6 +63,8 @@ def determineTemplate(self, root_cuds_object: Cuds) -> None: self.simulation_template = engtempl.Engine_Template.MOOonly elif hdmr_class: self.simulation_template = engtempl.Engine_Template.HDMR + elif dkl_class: + self.simulation_template = engtempl.Engine_Template.DKL elif evaluate_class: self.simulation_template = engtempl.Engine_Template.Evaluate elif sensitivity_class: From 10cd2f11464bc30aa3f8bd24501a409b00cb12b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Se=C3=A1n=20Courtney?= Date: Mon, 13 Nov 2023 10:55:35 +0000 Subject: [PATCH 6/7] dkl example --- examples/dkl.py | 82 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 examples/dkl.py diff --git a/examples/dkl.py b/examples/dkl.py new file mode 100644 index 0000000..8ffbd47 --- /dev/null +++ b/examples/dkl.py @@ -0,0 +1,82 @@ +import logging +from osp.core.namespaces import mods, cuba +from osp.core.utils import pretty_print +import osp.core.utils.simple_search as search +import osp.wrappers.sim_cmcl_mods_wrapper.mods_session as ms +from dotenv import load_dotenv + +logger = logging.getLogger(__name__) +logger.setLevel(logging.DEBUG) +logger.addHandler(logging.StreamHandler()) +logger.handlers[0].setFormatter( + logging.Formatter("%(levelname)s %(asctime)s [%(name)s]: %(message)s") +) + + +def HDMR_example(): + logger.info("################ Start: MoDS HDMR Example ################") + logger.info("Setting up the simulation inputs") + + dkl_simulation = mods.DeepKernelLearningSimulation() + dkl_algorithm = mods.Algorithm( + name="algorithm1", type="GenSurrogateAlg", saveSurrogate=True) + dkl_algorithm.add( + mods.Variable(name="var1", type="input"), + mods.Variable(name="var2", type="input"), + mods.Variable(name="var3", type="input"), + mods.Variable(name="var4", type="output"), + mods.Variable(name="var5", type="output"), + mods.Variable(name="var6", type="output"), + ) + + dkl_simulation.add(dkl_algorithm) + + example_data = [ + ["var1", "var2", "var3", "var4", "var5", "var6"], + [0.1, 0.4, 0.5, 0.1, 1.2, 2.5], + [0.3, 0.9, 0.1, 0.9, 2.0, 3.0], + [0.6, 0.0, 0.2, 0.1, 1.0, 1.2], + [0.1, 0.1, 0.3, 0.7, 1.6, 2.1], + [0.2, 0.8, 0.5, 0.1, 1.7, 4.0], + ] + + example_data_header = example_data[0] + example_data_values = example_data[1:] + + input_data = mods.InputData() + + for row in example_data_values: + data_point = mods.DataPoint() + for header, value in zip(example_data_header, row): + data_point.add( + mods.DataPointItem(name=header, value=value), + rel=mods.hasPart, + ) + input_data.add(data_point, rel=mods.hasPart) + + dkl_simulation.add(input_data) + + logger.info("Invoking the wrapper session") + # Construct a wrapper and run a new session + with ms.MoDS_Session() as session: + load_dotenv() + wrapper = cuba.wrapper(session=session) + wrapper.add(dkl_simulation, rel=cuba.relationship) + wrapper.session.run() + + job_id = search.find_cuds_objects_by_oclass( + mods.JobID, wrapper, rel=None + ) + + logger.info("Printing the simulation results.") + + if job_id: + pretty_print(job_id[0]) + + logger.info("################ End: MoDS HDMR Example ################") + + return job_id + + +if __name__ == "__main__": + HDMR_example() From ebe21216ecb27669f064e8b4767620298f9e779e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Se=C3=A1n=20Courtney?= Date: Mon, 13 Nov 2023 12:26:10 +0000 Subject: [PATCH 7/7] cuds adaptor robust to returning no results --- osp/wrappers/sim_cmcl_mods_wrapper/cuds_adaptor.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/osp/wrappers/sim_cmcl_mods_wrapper/cuds_adaptor.py b/osp/wrappers/sim_cmcl_mods_wrapper/cuds_adaptor.py index fdb74a8..31f1108 100644 --- a/osp/wrappers/sim_cmcl_mods_wrapper/cuds_adaptor.py +++ b/osp/wrappers/sim_cmcl_mods_wrapper/cuds_adaptor.py @@ -199,7 +199,7 @@ def toCUDS( simulation = root_cuds_object.get( oclass=mods.MultiObjectiveSimulation, rel=cuba.relationship)[0] - num_values = len(jsonResults[OUTPUTS_KEY][0]["values"]) + num_values = 0 if len(jsonResults[OUTPUTS_KEY])==0 else len(jsonResults[OUTPUTS_KEY][0]["values"]) for i in range(num_values): data_point = mods.DataPoint() for output in jsonResults[OUTPUTS_KEY]: @@ -219,8 +219,7 @@ def toCUDS( output_data = mods.OutputData() simulation = root_cuds_object.get( oclass=mods.EvaluateSurrogate, rel=cuba.relationship)[0] - - num_values = len(jsonResults[OUTPUTS_KEY][0]["values"]) + num_values = 0 if len(jsonResults[OUTPUTS_KEY])==0 else len(jsonResults[OUTPUTS_KEY][0]["values"]) for i in range(num_values): data_point = mods.DataPoint() for output in jsonResults[OUTPUTS_KEY]: