[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Gzz-commits] fenfire ./Makefile docs/SwampTutorial.rst org/f...
From: |
Tuomas J. Lukka |
Subject: |
[Gzz-commits] fenfire ./Makefile docs/SwampTutorial.rst org/f... |
Date: |
Thu, 24 Apr 2003 08:05:31 -0400 |
CVSROOT: /cvsroot/fenfire
Module name: fenfire
Changes by: Tuomas J. Lukka <address@hidden> 03/04/24 08:05:30
Modified files:
. : Makefile
docs : SwampTutorial.rst
org/fenfire/swamp: CachedNodeFunction.java
observablegraphtest.py
Added files:
org/fenfire/swamp/bench: __init__.py graph.py
Log message:
Functions, benching
CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/Makefile.diff?tr1=1.10&tr2=1.11&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/docs/SwampTutorial.rst.diff?tr1=1.3&tr2=1.4&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/swamp/CachedNodeFunction.java.diff?tr1=1.1&tr2=1.2&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/swamp/observablegraphtest.py.diff?tr1=1.2&tr2=1.3&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/swamp/bench/__init__.py?rev=1.1
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/swamp/bench/graph.py?rev=1.1
Patches:
Index: fenfire/Makefile
diff -u fenfire/Makefile:1.10 fenfire/Makefile:1.11
--- fenfire/Makefile:1.10 Wed Apr 23 09:04:54 2003
+++ fenfire/Makefile Thu Apr 24 08:05:30 2003
@@ -2,7 +2,7 @@
# For a real makefile use build.xml instead of this.
all:
- ant 2>&1 | sed 's/ *\[javac\] *//g'
+ ant compile 2>&1 | sed 's/ *\[javac\] *//g'
TEST=org/
@@ -20,6 +20,10 @@
rundemo:
$(LDLIB) java $(CLASSPATH) $(PYTHONPATH) org.python.util.jython
../libvob/rundemo.py $(DBG) $(DEMO)
+BENCH=org.fenfire.swamp.bench.graph
+
+bench:
+ $(LDLIB) java $(CLASSPATH) $(PYTHONPATH) org.python.util.jython
../libvob/bench/mark.py $(BENCH)
.PHONY: docs
Index: fenfire/docs/SwampTutorial.rst
diff -u fenfire/docs/SwampTutorial.rst:1.3 fenfire/docs/SwampTutorial.rst:1.4
--- fenfire/docs/SwampTutorial.rst:1.3 Tue Apr 22 08:14:32 2003
+++ fenfire/docs/SwampTutorial.rst Thu Apr 24 08:05:30 2003
@@ -1,7 +1,6 @@
-//(c): Matti J. Katila
-
-2003-04-15T15:53:31Z
+//(c): Matti J. Katila and Tuomas J. Lukka
+$Id: SwampTutorial.rst,v 1.4 2003/04/24 12:05:30 tjl Exp $
How to set up Fen with swamps?
------------------------------
@@ -16,8 +15,8 @@
fen.txt = new CachingNodeContent(new SimpleNodeContent(fen));
-Adding triplet in the Swamp?
-----------------------------
+How do I add a triplet in the Swamp?
+------------------------------------
Adding triplet is easy, just: ::
@@ -29,8 +28,8 @@
fen.graph.set1_11X(sub, pred, obj)
-Literals
---------
+How are Literals used?
+----------------------
::
@@ -41,16 +40,19 @@
<@tuomasl2> x = graph.find1_11X(foo,bar)
<@tuomasl2> ((Literal)x).getTextString()
+(note that this will change at some point for efficiency: we shall
+accept Integer, Float &c objects as literals, I think -- tjl)
-New node
---------
+How do I make a new node?
+-------------------------
-Use shortcut method Nodes.N() ::
+If you want a new identity,
+use shortcut method Nodes.N() ::
Nodes.N() if URN-5 Namespace
also N(Namespace..)
-or ::
+If you know the uri you want, use ::
Nodes.get(uri)
@@ -58,6 +60,8 @@
How to make a triplet?
----------------------
+There is no special "triplet" object in the API at the moment.
+
::
< mudyc> tuomasl2: how do i do a new triplet?
@@ -67,6 +71,7 @@
fen.graph.add(sub, pred, onj);
+See "How do I add a triplet" above.
Find nodes
----------
Index: fenfire/org/fenfire/swamp/CachedNodeFunction.java
diff -u fenfire/org/fenfire/swamp/CachedNodeFunction.java:1.1
fenfire/org/fenfire/swamp/CachedNodeFunction.java:1.2
--- fenfire/org/fenfire/swamp/CachedNodeFunction.java:1.1 Thu Apr 24
00:51:28 2003
+++ fenfire/org/fenfire/swamp/CachedNodeFunction.java Thu Apr 24 08:05:30 2003
@@ -13,10 +13,58 @@
*/
public class CachedNodeFunction implements NodeFunction {
- static List cache = null;
+ static final private Object DIRTY = new Object();
+
+ NodeFunction f;
+
+ ConstGraph ourGraph;
+
+ CachingMap cache;
+
+ private class CacheEntry implements Obs {
+ Object node;
+ Object value = DIRTY;
+ /*
+ Set obses;
+ public void addObs(Obs o) {
+ if(obses == null) obses = new HashSet();
+ obses.add(o);
+ }
+ */
+ public void chg() {
+ /*
+ if(obses != null) {
+ for(Iterator i = obses.iterator(); i.hasNext();) {
+ ((Obs)i.next()).chg();
+ }
+ }
+ */
+ value = DIRTY;
+ }
+ }
+
+ public CachedNodeFunction(int n, ConstGraph g, NodeFunction f) {
+ cache = new CachingMap(n);
+ this.ourGraph = g;
+ this.f = f;
+ }
public Object f(ConstGraph g, Object node) {
- return null;
+ if(g != ourGraph)
+ throw new IllegalArgumentException("Called with wrong graph");
+
+ CacheEntry cac = (CacheEntry)cache.get(node);
+ if(cac == null) {
+ cac = new CacheEntry();
+ cac.node = node;
+ cache.put(node, cac);
+ }
+ if(cac.value == DIRTY) {
+ ConstGraph og = ourGraph.getObservedConstGraph(cac);
+ cac.value = f.f(og, node);
+ og.close();
+ }
+ return cac.value;
}
}
Index: fenfire/org/fenfire/swamp/observablegraphtest.py
diff -u fenfire/org/fenfire/swamp/observablegraphtest.py:1.2
fenfire/org/fenfire/swamp/observablegraphtest.py:1.3
--- fenfire/org/fenfire/swamp/observablegraphtest.py:1.2 Mon Apr 14
08:21:20 2003
+++ fenfire/org/fenfire/swamp/observablegraphtest.py Thu Apr 24 08:05:30 2003
@@ -1,7 +1,9 @@
# Tests which all ObservableGraph implementations must pass
+from __future__ import nested_scopes
+
import org
-from org.fenfire.swamp import Nodes
+from org.fenfire.swamp import Nodes, NodeFunction, CachedNodeFunction
_uriMaker = org.fenfire.util.URN5Namespace()
_node = [Nodes.get(_uriMaker.generateId()) for i in range(0,20)]
@@ -52,4 +54,60 @@
assert o1.t == 2
assert o2.t == 2
+
+def test_ObservableGraph_Func():
+ node = _node
+ class Func(NodeFunction):
+ def f(self, g, x):
+ self.calls += 1
+ literal = g.find1_11X(x, node[0])
+ print "F: Got literal",literal
+ if literal == None: return None
+ return literal.getTextString()
+
+ of = Func()
+ of.calls = 0
+ cf = CachedNodeFunction(3, graph, of)
+
+ def doit(f):
+ print "F now:",f
+ assert f.f(graph, node[1]) == None
+ assert f.f(graph, node[2]) == None
+ assert f.f(graph, node[3]) == None
+ assert f.f(graph, node[4]) == None
+
+ graph.set1_11X(node[4], node[0], Nodes.getStringLiteral("X"))
+
+ assert f.f(graph, node[4]) == "X"
+ assert f.f(graph, node[1]) == None
+
+ graph.set1_11X(node[4], node[0], Nodes.getStringLiteral("Y"))
+ graph.set1_11X(node[1], node[0], Nodes.getStringLiteral("Z"))
+ graph.set1_11X(node[3], node[0], Nodes.getStringLiteral("Q"))
+
+ assert f.f(graph, node[4]) == "Y"
+ assert f.f(graph, node[1]) == "Z"
+ assert f.f(graph, node[2]) == None
+ assert f.f(graph, node[3]) == "Q"
+
+ graph.rm_11A(node[3], node[0])
+
+ assert f.f(graph, node[4]) == "Y"
+ assert f.f(graph, node[1]) == "Z"
+ assert f.f(graph, node[2]) == None
+ assert f.f(graph, node[3]) == None
+
+ graph.rm_11A(node[4], node[0])
+ graph.rm_11A(node[1], node[0])
+
+ assert f.f(graph, node[1]) == None
+ assert f.f(graph, node[2]) == None
+ assert f.f(graph, node[3]) == None
+ assert f.f(graph, node[4]) == None
+
+ doit(of)
+ assert of.calls == 18
+ of.calls = 0
+ doit(cf)
+ assert of.calls < 16
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Gzz-commits] fenfire ./Makefile docs/SwampTutorial.rst org/f...,
Tuomas J. Lukka <=