[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