@@ -1018,110 +1018,6 @@ def reset_and_disable_cache(self):
10181018
10191019
10201020class SyncReasoner (AbstractOWLReasoner ):
1021-
1022- # def create_justifications(self, owl_individuals: Set[OWLNamedIndividual] = None,
1023- # owl_class_expression: OWLClassExpression = None) -> List[Set[OWLAxiom]]:
1024- # """
1025- # Generate justifications for why the given individual(s) are inferred to be instances of the specified class.
1026- #
1027- # Args:
1028- # owl_individuals (Set[OWLNamedIndividual]): Set of individuals to explain.
1029- # owl_class_expression (OWLClassExpression): Class expression to justify.
1030- #
1031- # Returns:
1032- # List of sets of OWLAxioms, each representing a justification.
1033- # """
1034- # if owl_individuals is None or owl_class_expression is None:
1035- # raise ValueError("Both owl_individuals and owl_class_expression are required.")
1036- #
1037- # import com.clarkparsia.owlapi.explanation.BlackBoxExplanation;
1038- # import com.clarkparsia.owlapi.explanation.ExplanationGenerator;
1039- # import com.clarkparsia.owlapi.explanation.SingleExplanationGeneratorImpl;
1040- # #from org.semanticweb.owl.explanation.api import ExplanationGeneratorFactory
1041- # # from org.semanticweb.owlapi.explanation.impl import ExplanationGeneratorFactoryImpl
1042- #
1043- # # from org.semanticweb.owl.explanation.api import Explanation
1044- # # from org.semanticweb.owl.explanation.impl.blackbox import BlackBoxExplanation
1045- # from org.semanticweb.owlapi.explanation import ExplanationGeneratorFactoryImpl
1046- #
1047- # justifications = []
1048- #
1049- # # Java OWL API types
1050- # j_class_expr = self.mapper.map_(owl_class_expression)
1051- # j_ontology = self._owlapi_ontology
1052- #
1053- # # Explanation setup
1054- # factory = ExplanationGeneratorFactoryImpl()
1055- # generator = factory.createExplanationGenerator(self._owlapi_reasoner)
1056- #
1057- # for ind in owl_individuals:
1058- # j_individual = self.mapper.map_(ind)
1059- # axiom = self._owlapi_manager.getOWLDataFactory().getOWLClassAssertionAxiom(j_class_expr, j_individual)
1060- #
1061- # # Get multiple explanations (justifications)
1062- # explanations = generator.getExplanations(axiom, 10) # limit to 10 justifications
1063- # for explanation in explanations:
1064- # axiom_set = explanation.getAxioms()
1065- # py_axioms = {self.mapper.map_(ax) for ax in axiom_set}
1066- # justifications.append(py_axioms)
1067- #
1068- # return justifications
1069-
1070- # def create_justifications(self, owl_individuals: Set[OWLNamedIndividual] = None,
1071- # owl_class_expression: OWLClassExpression = None) -> List[Set[OWLAxiom]]:
1072- # """
1073- # Generate justifications for why the given individual(s) are inferred to be instances of the specified class.
1074- #
1075- # Args:
1076- # owl_individuals (Set[OWLNamedIndividual]): Set of individuals to explain.
1077- # owl_class_expression (OWLClassExpression): Class expression to justify.
1078- #
1079- # Returns:
1080- # List of sets of OWLAxioms, each representing a justification.
1081- # """
1082- # if owl_individuals is None or owl_class_expression is None:
1083- # raise ValueError("Both owl_individuals and owl_class_expression are required.")
1084- #
1085- # # Import Clark & Parsia explanation classes via JPype
1086- # from com.clarkparsia.owlapi.explanation import BlackBoxExplanation, SingleExplanationGeneratorImpl, ExplanationGenerator
1087- # from com.clarkparsia.owlapi.explanation.util import MultipleExplanationGenerator
1088- # # Import PelletReasonerFactory
1089- # from openllet.owlapi import PelletReasonerFactory
1090- #
1091- # justifications = []
1092- #
1093- # # Map to Java OWL API types
1094- # j_class_expr = self.mapper.map_(owl_class_expression)
1095- # j_ontology = self._owlapi_ontology
1096- # j_reasoner = self._owlapi_reasoner
1097- # j_data_factory = self._owlapi_manager.getOWLDataFactory()
1098- #
1099- # # Create the reasoner factory (not the reasoner instance)
1100- # reasoner_factory = PelletReasonerFactory.getInstance()
1101- #
1102- # # Create explanation generator
1103- # blackbox_exp = BlackBoxExplanation(j_ontology,reasoner_factory, j_reasoner)
1104- # mult_expl_gen = MultipleExplanationGenerator(blackbox_exp)
1105- # #explanation_gen = SingleExplanationGeneratorImpl(blackbox_exp)
1106- # explanation_gen = blackbox_exp
1107- # print("explanation_gen ",explanation_gen)
1108- # print("Explanation generator class:", explanation_gen.getClass().getName())
1109- #
1110- # # For each individual, get explanations for class assertion axiom
1111- # for ind in owl_individuals:
1112- # j_individual = self.mapper.map_(ind)
1113- # axiom = j_data_factory.getOWLClassAssertionAxiom(j_class_expr, j_individual)
1114- #
1115- # # Get multiple explanations (limit 10)
1116- # explanations = explanation_gen.getExplanations(axiom, 10)
1117- #
1118- # for explanation in explanations:
1119- # # explanation is a Set<OWLAxiom>
1120- # py_axioms = {self.mapper.map_(ax) for ax in explanation}
1121- # justifications.append(py_axioms)
1122- #
1123- # return justifications
1124-
11251021 def create_justifications (self , owl_individuals : Set [OWLNamedIndividual ] = None ,
11261022 owl_class_expression : OWLClassExpression = None ) -> List [Set [OWLAxiom ]]:
11271023 """
@@ -1140,19 +1036,15 @@ def create_justifications(self, owl_individuals: Set[OWLNamedIndividual] = None,
11401036 # Import necessary Java classes
11411037 from com .clarkparsia .owlapi .explanation import BlackBoxExplanation , ExplanationGenerator ,HSTExplanationGenerator ,SatisfiabilityConverter
11421038 from openllet .owlapi import PelletReasonerFactory
1143- from org .semanticweb .owlapi .model import OWLClassExpression
1144-
1145- justifications = []
11461039
11471040 # Map Python OWL API types to Java OWL API types
11481041 j_class_expr = self .mapper .map_ (owl_class_expression )
1149- #print("j_class_expr", j_class_expr)
11501042 j_individual = self .mapper .map_ (owl_individuals )
1151- #print("j_individual",j_individual)
11521043 j_ontology = self ._owlapi_ontology
1153- #print("j_ontology", j_ontology)
11541044 j_reasoner = self ._owlapi_reasoner
11551045 j_data_factory = self ._owlapi_manager .getOWLDataFactory ()
1046+
1047+
11561048 # owl_individuals_istances = self._instances(owl_class_expression, direct=False)
11571049 # print("owl_individuals_istances", owl_individuals_istances)
11581050 # j_individuals= self.mapper.map_(owl_individuals_istances)
@@ -1165,14 +1057,7 @@ def create_justifications(self, owl_individuals: Set[OWLNamedIndividual] = None,
11651057 blackbox_exp = BlackBoxExplanation (j_ontology , reasoner_factory , j_reasoner )
11661058
11671059 explanation_gen = HSTExplanationGenerator (blackbox_exp )
1168- #j_explanations = explanation_gen.getExplanations(j_class_expr)
11691060 converter = SatisfiabilityConverter (j_data_factory )
1170- #print("j_explanations",j_explanations)
1171-
1172-
1173- # ExplanationGenerator implements ExplanationGenerator interface
1174- # explanation_gen = blackbox_exp
1175-
11761061 justifications = []
11771062
11781063
@@ -1185,9 +1070,6 @@ def create_justifications(self, owl_individuals: Set[OWLNamedIndividual] = None,
11851070 # Step 2: Convert to unsatisfiable class
11861071 unsat_class = converter .convert (class_assertion_axiom )
11871072
1188-
1189- # print("class_assertion_axiom",class_assertion_axiom)
1190-
11911073 # Get justifications
11921074 j_explanations = explanation_gen .getExplanations (unsat_class )
11931075
0 commit comments