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

ale at codespeak.net ale at codespeak.net
Wed Dec 21 11:34:04 CET 2005


Author: ale
Date: Wed Dec 21 11:34:02 2005
New Revision: 21392

Modified:
   pypy/dist/pypy/lib/pyontology/pyontology.py
   pypy/dist/pypy/lib/pyontology/test/test_ontology.py
Log:
Make a test pass. Some cleanup


Modified: pypy/dist/pypy/lib/pyontology/pyontology.py
==============================================================================
--- pypy/dist/pypy/lib/pyontology/pyontology.py	(original)
+++ pypy/dist/pypy/lib/pyontology/pyontology.py	Wed Dec 21 11:34:02 2005
@@ -249,8 +249,6 @@
         if (type(var) == URIRef and not 
            (var in [URIRef(namespaces['owl']+'#'+x) for x in builtin_voc])):
             # var is not one of the builtin classes
-             
-#            if self.variables[avar].values:
             self.variables[svar].values +=  self.variables[avar].values
             constrain = BinaryExpression([svar, avar],"%s in %s" %(svar,  avar))
             self.constraints.append(constrain)
@@ -258,14 +256,13 @@
             # var is a builtin class
             self.variables[svar] =  builtin_voc[var.split('#')[-1]]()
 
-
     def first(self, s, p, var):
         pass
 
     def rest(self, s, p, var):
         pass
 
-# --------- Class Axioms ---------------------
+#---Class Axioms---#000000#FFFFFF-----------------------------------------------
 
     def subClassOf(self, s, p, var):
         # s is a subclass of var means that the 
@@ -273,12 +270,10 @@
         # class extension of var. 
         avar = self.make_var(ClassDomain, var)
         svar = self.make_var(ClassDomain, s)
-        res = get_bases(self.variables[avar], self.variables)
-        self.variables[svar].bases.extend(res.keys())
+        cons = SubClassConstraint( svar, avar)
+        self.constraints.append(cons)
 
     def equivalentClass(self, s, p, var):
-        avar = self.make_var(ClassDomain, var)
-        svar = self.make_var(ClassDomain, s)
         self.subClassOf(s, p, var)
         self.subClassOf(var, p, s)
 
@@ -290,7 +285,9 @@
 
     def complementOf(self, s, p, var):
         # add constraint of not var
-        pass
+        # TODO: implementthis for OWL DL
+        avar = self.make_var(ClassDomain, var)
+        svar = self.make_var(ClassDomain, s)
 
     def oneOf(self, s, p, var):
         res = self.get_list(var)
@@ -314,28 +311,35 @@
                    result.pop(cls)
         return result.keys()
 
-#---------Property axioms--------------------
+#---Property Axioms---#000000#FFFFFF--------------------------------------------
 
     def range(self, s, p, var):
-        pass
+        avar = self.make_var(ClassDomain, var)
+        svar = self.make_var(Property, s)
+        cons = RangeConstraint( svar, avar)
+        self.constraints.append(cons)
+
 
     def domain(self, s, p, var):
-        avar = self.make_var(CassDomain, var)
+        avar = self.make_var(ClassDomain, var)
         svar = self.make_var(Property, s)
         assert isinstance(self.variables[svar], Property)
         assert isinstance(self.variables[avar], ClassDomain)
         self.variables[avar].properties[svar] = self.variables[svar]
 
     def subPropertyOf(self, s, p, var):
+        # TODO: implement this
         pass
 
     def equivalentProperty(self, s, p, var):
+        # TODO: implement this  
         pass
 
     def inverseOf(self, s, p, var):
+        # TODO: implement this 
         pass
 
-#-------------------------------------------
+#---Label---#000000#FFFFFF------------------------------------------------------
 
     def maxCardinality(self, s, p, var):
         """ Len of finite domain of the property shall be less than or equal to var"""
@@ -373,21 +377,27 @@
         self.constraints.append(constrain)
 
     def onProperty(self, s, p, var):
+        # TODO: implement this 
         pass
 
     def hasValue(self, s, p, var):
+        # TODO: implement this 
         pass
 
     def allValuesFrom(self, s, p, var):
+        # TODO: implement this 
         pass
 
     def someValuesFrom(self, s, p, var):
+        # TODO: implement this 
         pass
 
     def someValuesFrom(self, s, p, var):
+        # TODO: implement this 
         pass
 
     def imports(self, s, p, var):
+        # TODO: implement this 
         pass
 
 # ----------------- Helper classes ----------------
@@ -441,15 +451,16 @@
         else:
             return 1
 
-def get_bases(cls_dom, domains):
+
+def get_values(dom, domains, attr = 'values'):
     res = {}
-    for bas in cls_dom.bases:
-        res[bas] = 1
-        if bas in domains.keys():
-            res.update( get_bases(bas, domains))
-    res[cls_dom] = 1
+    for val in getattr(dom, attr):
+        res[val] = 1
+        if val in domains.keys():
+            res.update( get_values(val, domains, attr))
+    res[dom] = 1
     return res
-
+ 
 class SubClassConstraint(AbstractConstraint):
 
     def __init__(self, variable, cls_or_restriction):
@@ -462,31 +473,34 @@
     def narrow(self, domains):
         subdom = domains[self.variable]
         superdom = domains[self.super]
-        bases = get_bases(superdom, domains).keys()
+        bases = get_values(superdom, domains, 'bases').keys()
         print subdom,superdom, bases, subdom.bases
         subdom.bases += [bas for bas in bases if bas not in subdom.bases]
-       
-class EquivalentClassConstraint(AbstractConstraint):
+        vals = get_values(subdom, domains, 'values')
+        superdom.values += [val for val in vals if val not in superdom.values]
+
+class DisjointClassConstraint(AbstractConstraint):
 
     def __init__(self, variable, cls_or_restriction):
         AbstractConstraint.__init__(self, [variable])
         # worst case complexity
         self.__cost = 1 #len(variables) * (len(variables) - 1) / 2
-        self.other = cls_or_restriction
+        self.super = cls_or_restriction
         self.variable = variable
 
     def narrow(self, domains):
         subdom = domains[self.variable]
-        otherdom = domains[self.other]
-        bases = get_bases(subdom, domains).keys()
-        otherbases = get_bases(otherdom, domains).keys()
-        print subdom, otherdom, "----",bases , otherbases
-        if bases != otherbases:
-            raise ConsistencyFailure()
-        else:
-            return 1
+        superdom = domains[self.super]
+        bases = get_values(superdom, domains, 'bases').keys()
+        print subdom,superdom, bases, subdom.bases
+        subdom.bases += [bas for bas in bases if bas not in subdom.bases]
+        vals1 = get_values(superdom, domains, 'values').keys()
+        vals2 = get_values(variable, domains, 'values').keys()
+        for i in vals1:
+            if i in vals2:
+                raise ConsistencyError
 
-class DisjointClassConstraint(AbstractConstraint):
+class ComplementClassConstraint(AbstractConstraint):
 
     def __init__(self, variable, cls_or_restriction):
         AbstractConstraint.__init__(self, [variable])
@@ -498,7 +512,4 @@
     def narrow(self, domains):
         subdom = domains[self.variable]
         superdom = domains[self.super]
-        bases = get_bases(superdom, domains).keys()
-        print subdom,superdom, bases, subdom.bases
-        subdom.bases += [bas for bas in bases if bas not in subdom.bases]
-        
+        
\ No newline at end of file

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	Wed Dec 21 11:34:02 2005
@@ -28,6 +28,8 @@
     O.subClassOf(c, None, b)
     A = O.make_var(ClassDomain, a)
     C = O.make_var(ClassDomain, c)
+    for con in O.constraints:
+        con.narrow(O.variables)
     assert len(O.variables) == 3
     assert O.variables[A] in O.variables[C].bases
 
@@ -81,15 +83,16 @@
     assert len(c.bases) == len(a.bases)
     assert [bas in a.bases for bas in c.bases] == [True]*len(a.bases)
 
-def DONOT_test_equivalentClass():
-    a = ClassDomain('A')
-    b = ClassDomain('B')
-    c = ClassDomain('C')
-    con = EquivalentClassConstraint('c','a')
-    con2 = EquivalentClassConstraint('c','b')
-    con.narrow({'a': a, 'b': b, 'c': c}) 
-    con2.narrow({'a': a, 'b': b, 'c': c})
-    assert a == b
+def test_equivalentClass():
+    a = URIRef('A')
+    b = URIRef('B')
+    c = URIRef('C')
+    O = Ontology()
+    O.equivalentClass(c, None, a)
+    O.equivalentClass(c, None, b)
+    A = O.make_var(ClassDomain, a)
+    B = O.make_var(ClassDomain, b)
+    assert O.variables[A].values == O.variables[B].values
 
 def test_type():
     sub = URIRef('a')



More information about the Pypy-commit mailing list