[pypy-svn] r26971 - in pypy/dist/pypy/lib/pyontology: . test

ale at codespeak.net ale at codespeak.net
Mon May 8 17:59:08 CEST 2006


Author: ale
Date: Mon May  8 17:59:08 2006
New Revision: 26971

Modified:
   pypy/dist/pypy/lib/pyontology/constraint_classes.py
   pypy/dist/pypy/lib/pyontology/pyontology.py
   pypy/dist/pypy/lib/pyontology/test/test_ontology.py
Log:
a few bugfixes

Modified: pypy/dist/pypy/lib/pyontology/constraint_classes.py
==============================================================================
--- pypy/dist/pypy/lib/pyontology/constraint_classes.py	(original)
+++ pypy/dist/pypy/lib/pyontology/constraint_classes.py	Mon May  8 17:59:08 2006
@@ -101,7 +101,7 @@
         vals += superdom.getValues()
         vals += subdom.getValues() +[self.variable]
         superdom.setValues(vals)
-	        
+            
         return 0
 
 class DisjointClassConstraint(SubClassConstraint):
@@ -244,23 +244,26 @@
     """Contraint: all values must be distinct"""
 
     def narrow(self, domains):
-        pass
         """narrowing algorithm for the constraint"""
-#        domain = domains[self.variable].getValues()
-#        for cls, val in domain:
-#            for v in val:
-#                domains[self.variable].addValue(cls,v)
+        domain = domains[self.variable].getValues()
+        for cls, val in domain:
+            for v in val:
+                if v in domains[self.variable]._dict.keys():
+                    [domains[self.variable].addValue(cls,x)
+                        for x in domains[self.variable]._dict[v]]
 
 class SymmetricConstraint(OwlConstraint):
     """Contraint: all values must be distinct"""
 
     def narrow(self, domains):
         """narrowing algorithm for the constraint"""
-        domain = domains[self.variable].getValues()
+        prop = domains[self.variable]
+        domain = prop.getValues()
         for cls, val in domain:
-            if not (val, cls) in domain:
-                domain.append((val,cls))
-        domains[self.variable].setValues(domain)
+            for v in val:
+                if not v in prop._dict.keys() or not cls in prop._dict[v]:
+                    prop.addValue(v,cls)
+
 
 class InverseofConstraint(SubClassConstraint):
     """Contraint: all values must be distinct"""
@@ -272,12 +275,14 @@
         sub_domain = domains[self.variable].getValues()
         res = []
         for cls, val in obj_domain:
-            if not (val,cls) in sub_domain:
-                raise ConsistencyFailure("Inverseof failed for (%r, %r) in %r" % 
+            for v in val:
+                if not (v,cls) in sub_domain:
+                    raise ConsistencyFailure("Inverseof failed for (%r, %r) in %r" % 
                                          (val, cls, sub_domain) )
         for cls, val in sub_domain:
-            if not (val,cls) in obj_domain:
-                raise ConsistencyFailure("Inverseof failed for (%r, %r) in %r" % 
+            for v in val:
+                if not (val,cls) in obj_domain:
+                    raise ConsistencyFailure("Inverseof failed for (%r, %r) in %r" % 
                                          (val, cls, obj_domain)) 
 
 class DifferentfromConstraint(SubClassConstraint):

Modified: pypy/dist/pypy/lib/pyontology/pyontology.py
==============================================================================
--- pypy/dist/pypy/lib/pyontology/pyontology.py	(original)
+++ pypy/dist/pypy/lib/pyontology/pyontology.py	Mon May  8 17:59:08 2006
@@ -133,6 +133,14 @@
             else:
                 self._dict[k] = [ x for x in vals if x != v]
 
+    def __contains__(self, (cls, val)):
+        if not cls in self._dict.keys():
+            return False
+        vals = self._dict[cls]
+        if val in vals:
+            return True
+        return False
+
 class ObjectProperty(Property):
     
     pass
@@ -546,29 +554,35 @@
         self.constraints.append(constrain)
     
     def hasValue(self, s, var):
+        self.resolve_item(s)
         self.resolve_item(var)
         svar = self.make_var(Restriction, s)
         avar = self.make_var(None, var)
+        prop = self.variables[svar].property
         restr = self.variables[svar]
-        restr.TBox['hasValue'] = [('hasvalue', var)]
+        restr.TBox[prop] = {'hasValue' : [('hasvalue', var)]}
 #        constrain = HasvalueConstraint(svar, avar)
 #        self.constraints.append(constrain)
     
     def allValuesFrom(self, s, var):
+        self.resolve_item(s)
         self.resolve_item(var)
         svar = self.make_var(Restriction, s)
         avar = self.make_var(None, var)
+        prop = self.variables[svar].property
         restr = self.variables[svar]
-        restr.TBox['allValues'] = [('allvalue', var)]
+        restr.TBox[prop] = {'allValues' : [('allValues', var)]}
 #        constrain = AllValueConstraint(svar, avar)
 #        self.constraints.append(constrain)
     
     def someValuesFrom(self, s, var):
+        self.resolve_item(s)
         self.resolve_item(var)
         svar = self.make_var(Restriction, s)
         avar = self.make_var(None, var)
+        prop = self.variables[svar].property
         restr = self.variables[svar]
-        restr.TBox['someValues'] = [('somevalues', var)]
+        restr.TBox[prop] = {'someValues' : [('someValues', var)]}
 #        constrain = SomeValueConstraint(svar, avar)
 #        self.constraints.append(constrain)
 

Modified: pypy/dist/pypy/lib/pyontology/test/test_ontology.py
==============================================================================
--- pypy/dist/pypy/lib/pyontology/test/test_ontology.py	(original)
+++ pypy/dist/pypy/lib/pyontology/test/test_ontology.py	Mon May  8 17:59:08 2006
@@ -255,7 +255,7 @@
     py.test.raises(ConsistencyFailure, O.consistency)
     
 def test_Transitiveproperty():
-    py.test.skip("in transit")
+    #py.test.skip("in transit")
     O = Ontology()
     #Make functional property
     sub = URIRef('subRegionOf')
@@ -275,10 +275,10 @@
     O.type(sub, obj)
     O.variables['subRegionOf_'].setValues([('Italy_','Tuscanny_'),('Tuscanny_','Chianti_')])
     O.consistency()
-    assert ('Italy_', ['Chianti_']) in O.variables['subRegionOf_'].getValues()
+    assert 'Chianti_' in O.variables['subRegionOf_']._dict['Italy_']
     
 def test_symmetricproperty():
-    py.test.skip("in transit")
+    #py.test.skip("in transit")
     
     O = Ontology()
     #Make functional property
@@ -298,7 +298,7 @@
     O.type(sub, obj)
     O.variables['friend_'].setValues([('Bob_','Alice_')])
     O.consistency()
-    assert ('Alice_', 'Bob_') in O.variables['friend_'].getValues()
+    assert ('Alice_', ['Bob_']) in O.variables['friend_'].getValues()
 
 def test_inverseof():
     py.test.skip("in transit")
@@ -505,7 +505,6 @@
 
 
 def test_cardinality_terminology():
-    #py.test.skip("In progress")
     # Modeled after one of the standard tests (approved/maxCardinality)
     # 'cls' by subclassing two maxCardinality restrictions becomes the set of
     # individuals satisfying both restriction, ie having exactly 2 values of



More information about the Pypy-commit mailing list