diff --git a/ontolearn/triple_store.py b/ontolearn/triple_store.py index 0762723c..de1138f8 100644 --- a/ontolearn/triple_store.py +++ b/ontolearn/triple_store.py @@ -1018,48 +1018,8 @@ def instances(self, expression: OWLClassExpression, named_individuals: bool = Fa yield from results - # elif isinstance(expression, OWLObjectMaxCardinality): - - # property_expression = expression.get_property() - # filler_expression = expression.get_filler() - - # # (1) Find individuals that are likely y \in C^I, i.e. φ(y, type, C) - - # filler_individuals = {i for i in self.instances(filler_expression)} - - # # 2) set max cardinality - # max_cardinality = expression.get_cardinality() - - # # (3) Iterative (1) and return entities whose predicted score satisfies the condition. - # results = set() - # for individual in filler_individuals:# self.owl_individuals: - - # if isinstance(property_expression, OWLObjectInverseOf): - - # inverse_property = property_expression.get_inverse_property() - # scores = self.neural_link_predictor.predict(h=[individual.str], - # r=[inverse_property.str], - # within=None, - # logits=False).tolist() - # else: - # scores = self.neural_link_predictor.predict(r=[property_expression.str], - # t=[individual.str], - # within=None, - # logits=False).tolist() - - # candidate_iris = [iri for iri, score in zip(self.neural_link_predictor.entity_to_idx.keys(), scores) if score >= self.gamma_for_nc] - - # count = len(candidate_iris) - - # if count <= max_cardinality: - # for iri in candidate_iris: - # try: - # results.add(OWLNamedIndividual(iri)) - # except: - # print(f"Could not convert to OWLNamedIndividual {iri}") - - # yield from results - + + elif isinstance(expression, OWLObjectMaxCardinality): @@ -1071,8 +1031,6 @@ def instances(self, expression: OWLClassExpression, named_individuals: bool = Fa # 1) define max cardinality max_cardinality = expression.get_cardinality() - filler_individuals = {i for i in self.instances(filler_expression)} - # (2) Iterative (1) and return entities whose predicted score satisfies the condition. results = set() for individual in self.owl_individuals: @@ -1097,8 +1055,12 @@ def instances(self, expression: OWLClassExpression, named_individuals: bool = Fa count = sum(1 for idx, score in enumerate(scores) if score >= self.gamma_for_nc and self.is_instance(self.neural_link_predictor.idx_to_entity[idx], filler_expression)) - if count <= max_cardinality: - results.add(individual) + if max_cardinality == 0: + raise NotImplementedError("Handling for max cardinality of 0 is not implemented.") + + else: + if count <= max_cardinality: + results.add(individual) yield from results diff --git a/tests/test_concept_EBR.py b/tests/test_concept_EBR.py index 4ed375e0..b34fffd6 100644 --- a/tests/test_concept_EBR.py +++ b/tests/test_concept_EBR.py @@ -215,8 +215,8 @@ def get_reasoner_instances(reasoner: NeuralReasoner, class_expression: OWLClassE print(len(ground_truth_1)) print(len(ground_truth_2)) -print(len(reasoner_instances_2)) print(len(reasoner_instances_1)) +print(len(reasoner_instances_2)) assert reasoner_instances_1 == reasoner_instances_2, "Reasoner fails" print("test 6 done")