From 1de53f2511d9c939735de7e975bfcfaa715767ea Mon Sep 17 00:00:00 2001 From: Ben Gyori Date: Fri, 4 Oct 2024 10:55:58 -0400 Subject: [PATCH 1/2] Implement singleton refinement closure --- mira/metamodel/comparison.py | 29 ++++++++++++++++++++++++----- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/mira/metamodel/comparison.py b/mira/metamodel/comparison.py index 5fafcac5..e460e08c 100644 --- a/mira/metamodel/comparison.py +++ b/mira/metamodel/comparison.py @@ -3,7 +3,7 @@ __all__ = ["ModelComparisonGraphdata", "TemplateModelComparison", "TemplateModelDelta", "RefinementClosure", - "get_dkg_refinement_closure"] + "get_dkg_refinement_closure", "default_dkg_refinement_closure"] from collections import defaultdict from itertools import combinations, count, product @@ -788,6 +788,28 @@ def is_ontological_child(self, child_curie: str, parent_curie: str) -> bool: return (child_curie, parent_curie) in self.transitive_closure +class DefaultDkgRefinementClosure(RefinementClosure): + def __init__(self, transitive_closure: Set[Tuple[str, str]] = None): + self.transitive_closure = transitive_closure + if self.transitive_closure: + self.initialized = True + else: + self.initialized = False + + def initialize(self): + from mira.dkg.web_client import get_transitive_closure_web + self.transitive_closure = get_transitive_closure_web() + self.initialized = True + + def is_ontological_child(self, child_curie: str, parent_curie: str) -> bool: + if not self.initialized: + self.initialize() + return (child_curie, parent_curie) in self.transitive_closure + + +default_dkg_refinement_closure = DefaultDkgRefinementClosure() + + def get_dkg_refinement_closure() -> RefinementClosure: """Return a refinement closure from the DKG @@ -796,7 +818,4 @@ def get_dkg_refinement_closure() -> RefinementClosure: : The refinement closure """ - # Import here to avoid dependency upon module import - from mira.dkg.web_client import get_transitive_closure_web - rc = RefinementClosure(get_transitive_closure_web()) - return rc + return default_dkg_refinement_closure From 6e8ec4542610e7db70981116f7d6d4430eba51e1 Mon Sep 17 00:00:00 2001 From: nanglo123 Date: Fri, 4 Oct 2024 11:58:29 -0400 Subject: [PATCH 2/2] Refer to refinement closure object in model composition --- mira/metamodel/composition.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mira/metamodel/composition.py b/mira/metamodel/composition.py index 35d0df9f..709bbacf 100644 --- a/mira/metamodel/composition.py +++ b/mira/metamodel/composition.py @@ -8,7 +8,7 @@ from copy import deepcopy import sympy -from .comparison import TemplateModelComparison, get_dkg_refinement_closure +from .comparison import TemplateModelComparison, default_dkg_refinement_closure from .template_model import Annotations, TemplateModel @@ -59,7 +59,7 @@ def compose_two_models(tm0, tm1): The composed template model """ model_list = [tm0, tm1] - rf_func = get_dkg_refinement_closure().is_ontological_child + rf_func = default_dkg_refinement_closure.is_ontological_child compare = TemplateModelComparison(model_list, refinement_func=rf_func) compare_graph = compare.model_comparison