Integer: implement own __int__ for speed reason
[sympy.git] / bin / sympy_time.py
blob0bf45c06d48b14838c45b0caf6f91aa791752617
1 import time
3 seen = set()
4 import_order = []
5 elapsed_times = {}
6 level = 0
7 parent = None
8 children = {}
10 def new_import(name, globals={}, locals={}, fromlist=[]):
11 global level, parent
12 if name in seen:
13 return old_import(name, globals, locals, fromlist)
14 seen.add(name)
15 import_order.append((name, level, parent))
16 t1 = time.time()
17 old_parent = parent
18 parent = name
19 level += 1
20 module = old_import(name, globals, locals, fromlist)
21 level -= 1
22 parent = old_parent
23 t2 = time.time()
24 elapsed_times[name] = t2-t1
25 return module
27 old_import = __builtins__.__import__
29 __builtins__.__import__ = new_import
31 from sympy import *
33 parents = {}
34 is_parent = {}
35 for name, level, parent in import_order:
36 parents[name] = parent
37 is_parent[parent] = True
39 print "== Tree =="
40 for name, level, parent in import_order:
41 print "%s%s: %.3f (%s)" % (" "*level, name, elapsed_times.get(name,0),
42 parent)
44 print "\n"
45 print "== Slowest (including children) =="
46 slowest = sorted((t, name) for (name, t) in elapsed_times.items())[-50:]
47 for elapsed_time, name in slowest[::-1]:
48 print "%.3f %s (%s)" % (elapsed_time, name, parents[name])