From 7bc644594ebb21c4ea46219845dfbe0e9b8efb23 Mon Sep 17 00:00:00 2001 From: Luke Friedrichs Date: Wed, 20 Nov 2024 13:06:51 +0100 Subject: [PATCH 1/2] fixed complement issue `assert A.get_object_complement_of().get_object_complement_of() == A` holds now --- owlapy/class_expression/class_expression.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/owlapy/class_expression/class_expression.py b/owlapy/class_expression/class_expression.py index 8e7bab6a..bfdd308c 100644 --- a/owlapy/class_expression/class_expression.py +++ b/owlapy/class_expression/class_expression.py @@ -63,6 +63,8 @@ def is_owl_thing(self) -> bool: def get_object_complement_of(self) -> 'OWLObjectComplementOf': # documented in parent + if isinstance(self, OWLObjectComplementOf): + return self.get_operand() return OWLObjectComplementOf(self) def get_nnf(self) -> 'OWLClassExpression': From dc39fd5bd7f2819926f2ed9c37b5c5ef5b7d3468 Mon Sep 17 00:00:00 2001 From: Luke Friedrichs Date: Fri, 22 Nov 2024 10:01:23 +0100 Subject: [PATCH 2/2] simplifying complements of complements --- owlapy/class_expression/class_expression.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/owlapy/class_expression/class_expression.py b/owlapy/class_expression/class_expression.py index bfdd308c..f961b440 100644 --- a/owlapy/class_expression/class_expression.py +++ b/owlapy/class_expression/class_expression.py @@ -63,8 +63,6 @@ def is_owl_thing(self) -> bool: def get_object_complement_of(self) -> 'OWLObjectComplementOf': # documented in parent - if isinstance(self, OWLObjectComplementOf): - return self.get_operand() return OWLObjectComplementOf(self) def get_nnf(self) -> 'OWLClassExpression': @@ -86,6 +84,15 @@ class OWLObjectComplementOf(OWLBooleanClassExpression, HasOperands[OWLClassExpre _operand: OWLClassExpression + def __new__(cls, op: OWLClassExpression): + """ + Creates a new instance or returns the operand if op is already a complement. + """ + if isinstance(op, OWLObjectComplementOf): + return op.get_operand() + else: + return super(OWLObjectComplementOf, cls).__new__(cls) + def __init__(self, op: OWLClassExpression): """ Args: