--- nfo/python/scripts/sixdegrees/sixtest.py 2008/02/06 03:14:58 1.4 +++ nfo/python/scripts/sixdegrees/sixtest.py 2008/02/06 22:59:39 1.5 @@ -1,6 +1,6 @@ #!/usr/bin/env python -# $Id: sixtest.py,v 1.4 2008/02/06 03:14:58 joko Exp $ +# $Id: sixtest.py,v 1.5 2008/02/06 22:59:39 joko Exp $ # (c) 2008 Andreas Motl @@ -18,18 +18,28 @@ # along with this program. If not, see . +import sys import random from sixdegrees import Graph, Node # maximum search depth (DLS limiter) -MAX_SEARCH_DEPTH = 5 +MAX_SEARCH_DEPTH = 4 # settings for random graph -RANDOM_MAX_NODES = 10 -RANDOM_MAX_CHILDREN_PER_NODE = 5 -#RANDOM_MAX_NODES = 1000 -#RANDOM_MAX_CHILDREN_PER_NODE = 10 +#RANDOM_MAX_NODES = 10 +#RANDOM_MAX_CHILDREN_PER_NODE = 5 +RANDOM_MAX_NODES = 10000 +RANDOM_MAX_CHILDREN_PER_NODE = 20 + + +ENABLE_PROFILING = False +ENABLE_JIT = True + + +if ENABLE_PROFILING: + import profile + from profile import Profile def operateOnFixedGraph(): @@ -59,10 +69,15 @@ def buildRandomGraph(graph): + count = 0 for parent_id in range(1, RANDOM_MAX_NODES + 1): + count += 1 + if count % 100 == 0: + sys.stderr.write('.') for j in range(1, random.randint(1, RANDOM_MAX_CHILDREN_PER_NODE)): child_id = random.randint(1, RANDOM_MAX_NODES) graph.addRelation(parent_id, child_id) + sys.stderr.write("\n") """ RANDOM_MAX_NODES = 10 @@ -80,7 +95,7 @@ print '-' * 42 graph = Graph() buildRandomGraph(graph) - print graph + #print graph # 2. choose two random distinct nodes node1 = graph.getNode(random.choice(graph.index.keys())) @@ -96,8 +111,31 @@ # 1. calculate paths print '-' * 42 print " Finding paths from %s to %s (depth=%s)" % (source_node.id, target_node.id, MAX_SEARCH_DEPTH) + print " Using JIT (Psyco):", bool(sys.modules.get('psyco')) print '-' * 42 - paths = graph.computePaths(source_node, target_node, MAX_SEARCH_DEPTH) + + """ + def doCompute(): + #global paths + paths = graph.computePaths(source_node, target_node, MAX_SEARCH_DEPTH) + return paths + """ + + if ENABLE_PROFILING: + global paths + paths = [] + p = Profile() + p.runcall(doCompute) + p.print_stats() + else: + paths = graph.computePaths(source_node, target_node, MAX_SEARCH_DEPTH) + + #p.create_stats() + #a = p.dump_stats() + #print a + #print dir(p) + #for key, value in p.timings.iteritems(): + # print '%s: %s' % (key, value) # 2. output paths #print paths @@ -115,4 +153,12 @@ if __name__ == '__main__': + if ENABLE_JIT: + # Import Psyco if available + try: + import psyco + psyco.log() + psyco.full() + except ImportError: + pass main()