diff options
author | Marc-André Lemburg <mal@egenix.com> | 2006-06-13 17:07:14 (GMT) |
---|---|---|
committer | Marc-André Lemburg <mal@egenix.com> | 2006-06-13 17:07:14 (GMT) |
commit | 573bd19e1fbcddb707d93899640d656626998a8c (patch) | |
tree | d7711d0dfd4956ce9807352c3460fd8adc39c533 /Tools/pybench | |
parent | 08de1ef8dfe06680efdbf620b40904e755a60f42 (diff) | |
download | cpython-573bd19e1fbcddb707d93899640d656626998a8c.zip cpython-573bd19e1fbcddb707d93899640d656626998a8c.tar.gz cpython-573bd19e1fbcddb707d93899640d656626998a8c.tar.bz2 |
Revert wrong svn copy.
Diffstat (limited to 'Tools/pybench')
24 files changed, 0 insertions, 10328 deletions
diff --git a/Tools/pybench/pybench-2.0/Arithmetic.py b/Tools/pybench/pybench-2.0/Arithmetic.py deleted file mode 100644 index 6923b4b..0000000 --- a/Tools/pybench/pybench-2.0/Arithmetic.py +++ /dev/null @@ -1,777 +0,0 @@ -from pybench import Test - -class SimpleIntegerArithmetic(Test): - - version = 2.0 - operations = 5 * (3 + 5 + 5 + 3 + 3 + 3) - rounds = 120000 - - def test(self): - - for i in xrange(self.rounds): - - a = 2 - b = 3 - c = 3 - - c = a + b - c = b + c - c = c + a - c = a + b - c = b + c - - c = c - a - c = a - b - c = b - c - c = c - a - c = b - c - - c = a / b - c = b / a - c = c / b - - c = a * b - c = b * a - c = c * b - - c = a / b - c = b / a - c = c / b - - a = 2 - b = 3 - c = 3 - - c = a + b - c = b + c - c = c + a - c = a + b - c = b + c - - c = c - a - c = a - b - c = b - c - c = c - a - c = b - c - - c = a / b - c = b / a - c = c / b - - c = a * b - c = b * a - c = c * b - - c = a / b - c = b / a - c = c / b - - a = 2 - b = 3 - c = 3 - - c = a + b - c = b + c - c = c + a - c = a + b - c = b + c - - c = c - a - c = a - b - c = b - c - c = c - a - c = b - c - - c = a / b - c = b / a - c = c / b - - c = a * b - c = b * a - c = c * b - - c = a / b - c = b / a - c = c / b - - a = 2 - b = 3 - c = 3 - - c = a + b - c = b + c - c = c + a - c = a + b - c = b + c - - c = c - a - c = a - b - c = b - c - c = c - a - c = b - c - - c = a / b - c = b / a - c = c / b - - c = a * b - c = b * a - c = c * b - - c = a / b - c = b / a - c = c / b - - a = 2 - b = 3 - c = 3 - - c = a + b - c = b + c - c = c + a - c = a + b - c = b + c - - c = c - a - c = a - b - c = b - c - c = c - a - c = b - c - - c = a / b - c = b / a - c = c / b - - c = a * b - c = b * a - c = c * b - - c = a / b - c = b / a - c = c / b - - def calibrate(self): - - for i in xrange(self.rounds): - pass - -class SimpleFloatArithmetic(Test): - - version = 2.0 - operations = 5 * (3 + 5 + 5 + 3 + 3 + 3) - rounds = 120000 - - def test(self): - - for i in xrange(self.rounds): - - a = 2.1 - b = 3.3332 - c = 3.14159 - - c = a + b - c = b + c - c = c + a - c = a + b - c = b + c - - c = c - a - c = a - b - c = b - c - c = c - a - c = b - c - - c = a / b - c = b / a - c = c / b - - c = a * b - c = b * a - c = c * b - - c = a / b - c = b / a - c = c / b - - a = 2.1 - b = 3.3332 - c = 3.14159 - - c = a + b - c = b + c - c = c + a - c = a + b - c = b + c - - c = c - a - c = a - b - c = b - c - c = c - a - c = b - c - - c = a / b - c = b / a - c = c / b - - c = a * b - c = b * a - c = c * b - - c = a / b - c = b / a - c = c / b - - a = 2.1 - b = 3.3332 - c = 3.14159 - - c = a + b - c = b + c - c = c + a - c = a + b - c = b + c - - c = c - a - c = a - b - c = b - c - c = c - a - c = b - c - - c = a / b - c = b / a - c = c / b - - c = a * b - c = b * a - c = c * b - - c = a / b - c = b / a - c = c / b - - a = 2.1 - b = 3.3332 - c = 3.14159 - - c = a + b - c = b + c - c = c + a - c = a + b - c = b + c - - c = c - a - c = a - b - c = b - c - c = c - a - c = b - c - - c = a / b - c = b / a - c = c / b - - c = a * b - c = b * a - c = c * b - - c = a / b - c = b / a - c = c / b - - a = 2.1 - b = 3.3332 - c = 3.14159 - - c = a + b - c = b + c - c = c + a - c = a + b - c = b + c - - c = c - a - c = a - b - c = b - c - c = c - a - c = b - c - - c = a / b - c = b / a - c = c / b - - c = a * b - c = b * a - c = c * b - - c = a / b - c = b / a - c = c / b - - def calibrate(self): - - for i in xrange(self.rounds): - pass - -class SimpleIntFloatArithmetic(Test): - - version = 2.0 - operations = 5 * (3 + 5 + 5 + 3 + 3 + 3) - rounds = 120000 - - def test(self): - - for i in xrange(self.rounds): - - a = 2 - b = 3 - c = 3.14159 - - c = a + b - c = b + c - c = c + a - c = a + b - c = b + c - - c = c - a - c = a - b - c = b - c - c = c - a - c = b - c - - c = a / b - c = b / a - c = c / b - - c = a * b - c = b * a - c = c * b - - c = a / b - c = b / a - c = c / b - - a = 2 - b = 3 - c = 3.14159 - - c = a + b - c = b + c - c = c + a - c = a + b - c = b + c - - c = c - a - c = a - b - c = b - c - c = c - a - c = b - c - - c = a / b - c = b / a - c = c / b - - c = a * b - c = b * a - c = c * b - - c = a / b - c = b / a - c = c / b - - a = 2 - b = 3 - c = 3.14159 - - c = a + b - c = b + c - c = c + a - c = a + b - c = b + c - - c = c - a - c = a - b - c = b - c - c = c - a - c = b - c - - c = a / b - c = b / a - c = c / b - - c = a * b - c = b * a - c = c * b - - c = a / b - c = b / a - c = c / b - - a = 2 - b = 3 - c = 3.14159 - - c = a + b - c = b + c - c = c + a - c = a + b - c = b + c - - c = c - a - c = a - b - c = b - c - c = c - a - c = b - c - - c = a / b - c = b / a - c = c / b - - c = a * b - c = b * a - c = c * b - - c = a / b - c = b / a - c = c / b - - a = 2 - b = 3 - c = 3.14159 - - c = a + b - c = b + c - c = c + a - c = a + b - c = b + c - - c = c - a - c = a - b - c = b - c - c = c - a - c = b - c - - c = a / b - c = b / a - c = c / b - - c = a * b - c = b * a - c = c * b - - c = a / b - c = b / a - c = c / b - - def calibrate(self): - - for i in xrange(self.rounds): - pass - - -class SimpleLongArithmetic(Test): - - version = 2.0 - operations = 5 * (3 + 5 + 5 + 3 + 3 + 3) - rounds = 60000 - - def test(self): - - for i in xrange(self.rounds): - - a = 2220001L - b = 100001L - c = 30005L - - c = a + b - c = b + c - c = c + a - c = a + b - c = b + c - - c = c - a - c = a - b - c = b - c - c = c - a - c = b - c - - c = a / b - c = b / a - c = c / b - - c = a * b - c = b * a - c = c * b - - c = a / b - c = b / a - c = c / b - - a = 2220001L - b = 100001L - c = 30005L - - c = a + b - c = b + c - c = c + a - c = a + b - c = b + c - - c = c - a - c = a - b - c = b - c - c = c - a - c = b - c - - c = a / b - c = b / a - c = c / b - - c = a * b - c = b * a - c = c * b - - c = a / b - c = b / a - c = c / b - - a = 2220001L - b = 100001L - c = 30005L - - c = a + b - c = b + c - c = c + a - c = a + b - c = b + c - - c = c - a - c = a - b - c = b - c - c = c - a - c = b - c - - c = a / b - c = b / a - c = c / b - - c = a * b - c = b * a - c = c * b - - c = a / b - c = b / a - c = c / b - - a = 2220001L - b = 100001L - c = 30005L - - c = a + b - c = b + c - c = c + a - c = a + b - c = b + c - - c = c - a - c = a - b - c = b - c - c = c - a - c = b - c - - c = a / b - c = b / a - c = c / b - - c = a * b - c = b * a - c = c * b - - c = a / b - c = b / a - c = c / b - - a = 2220001L - b = 100001L - c = 30005L - - c = a + b - c = b + c - c = c + a - c = a + b - c = b + c - - c = c - a - c = a - b - c = b - c - c = c - a - c = b - c - - c = a / b - c = b / a - c = c / b - - c = a * b - c = b * a - c = c * b - - c = a / b - c = b / a - c = c / b - - def calibrate(self): - - for i in xrange(self.rounds): - pass - -class SimpleComplexArithmetic(Test): - - version = 2.0 - operations = 5 * (3 + 5 + 5 + 3 + 3 + 3) - rounds = 80000 - - def test(self): - - for i in xrange(self.rounds): - - a = 2 + 3j - b = 2.5 + 4.5j - c = 1.2 + 6.2j - - c = a + b - c = b + c - c = c + a - c = a + b - c = b + c - - c = c - a - c = a - b - c = b - c - c = c - a - c = b - c - - c = a / b - c = b / a - c = c / b - - c = a * b - c = b * a - c = c * b - - c = a / b - c = b / a - c = c / b - - a = 2 + 3j - b = 2.5 + 4.5j - c = 1.2 + 6.2j - - c = a + b - c = b + c - c = c + a - c = a + b - c = b + c - - c = c - a - c = a - b - c = b - c - c = c - a - c = b - c - - c = a / b - c = b / a - c = c / b - - c = a * b - c = b * a - c = c * b - - c = a / b - c = b / a - c = c / b - - a = 2 + 3j - b = 2.5 + 4.5j - c = 1.2 + 6.2j - - c = a + b - c = b + c - c = c + a - c = a + b - c = b + c - - c = c - a - c = a - b - c = b - c - c = c - a - c = b - c - - c = a / b - c = b / a - c = c / b - - c = a * b - c = b * a - c = c * b - - c = a / b - c = b / a - c = c / b - - a = 2 + 3j - b = 2.5 + 4.5j - c = 1.2 + 6.2j - - c = a + b - c = b + c - c = c + a - c = a + b - c = b + c - - c = c - a - c = a - b - c = b - c - c = c - a - c = b - c - - c = a / b - c = b / a - c = c / b - - c = a * b - c = b * a - c = c * b - - c = a / b - c = b / a - c = c / b - - a = 2 + 3j - b = 2.5 + 4.5j - c = 1.2 + 6.2j - - c = a + b - c = b + c - c = c + a - c = a + b - c = b + c - - c = c - a - c = a - b - c = b - c - c = c - a - c = b - c - - c = a / b - c = b / a - c = c / b - - c = a * b - c = b * a - c = c * b - - c = a / b - c = b / a - c = c / b - - def calibrate(self): - - for i in xrange(self.rounds): - pass diff --git a/Tools/pybench/pybench-2.0/Calls.py b/Tools/pybench/pybench-2.0/Calls.py deleted file mode 100644 index fa18314..0000000 --- a/Tools/pybench/pybench-2.0/Calls.py +++ /dev/null @@ -1,504 +0,0 @@ -from pybench import Test - -class PythonFunctionCalls(Test): - - version = 2.0 - operations = 5*(1+4+4+2) - rounds = 60000 - - def test(self): - - global f,f1,g,h - - # define functions - def f(): - pass - - def f1(x): - pass - - def g(a,b,c): - return a,b,c - - def h(a,b,c,d=1,e=2,f=3): - return d,e,f - - # do calls - for i in xrange(self.rounds): - - f() - f1(i) - f1(i) - f1(i) - f1(i) - g(i,i,i) - g(i,i,i) - g(i,i,i) - g(i,i,i) - h(i,i,3,i,i) - h(i,i,i,2,i,3) - - f() - f1(i) - f1(i) - f1(i) - f1(i) - g(i,i,i) - g(i,i,i) - g(i,i,i) - g(i,i,i) - h(i,i,3,i,i) - h(i,i,i,2,i,3) - - f() - f1(i) - f1(i) - f1(i) - f1(i) - g(i,i,i) - g(i,i,i) - g(i,i,i) - g(i,i,i) - h(i,i,3,i,i) - h(i,i,i,2,i,3) - - f() - f1(i) - f1(i) - f1(i) - f1(i) - g(i,i,i) - g(i,i,i) - g(i,i,i) - g(i,i,i) - h(i,i,3,i,i) - h(i,i,i,2,i,3) - - f() - f1(i) - f1(i) - f1(i) - f1(i) - g(i,i,i) - g(i,i,i) - g(i,i,i) - g(i,i,i) - h(i,i,3,i,i) - h(i,i,i,2,i,3) - - def calibrate(self): - - global f,f1,g,h - - # define functions - def f(): - pass - - def f1(x): - pass - - def g(a,b,c): - return a,b,c - - def h(a,b,c,d=1,e=2,f=3): - return d,e,f - - # do calls - for i in xrange(self.rounds): - pass - -### - -class BuiltinFunctionCalls(Test): - - version = 2.0 - operations = 5*(2+5+5+5) - rounds = 60000 - - def test(self): - - # localize functions - f0 = globals - f1 = hash - f2 = cmp - f3 = range - - # do calls - for i in xrange(self.rounds): - - f0() - f0() - f1(i) - f1(i) - f1(i) - f1(i) - f1(i) - f2(1,2) - f2(1,2) - f2(1,2) - f2(1,2) - f2(1,2) - f3(1,3,2) - f3(1,3,2) - f3(1,3,2) - f3(1,3,2) - f3(1,3,2) - - f0() - f0() - f1(i) - f1(i) - f1(i) - f1(i) - f1(i) - f2(1,2) - f2(1,2) - f2(1,2) - f2(1,2) - f2(1,2) - f3(1,3,2) - f3(1,3,2) - f3(1,3,2) - f3(1,3,2) - f3(1,3,2) - - f0() - f0() - f1(i) - f1(i) - f1(i) - f1(i) - f1(i) - f2(1,2) - f2(1,2) - f2(1,2) - f2(1,2) - f2(1,2) - f3(1,3,2) - f3(1,3,2) - f3(1,3,2) - f3(1,3,2) - f3(1,3,2) - - f0() - f0() - f1(i) - f1(i) - f1(i) - f1(i) - f1(i) - f2(1,2) - f2(1,2) - f2(1,2) - f2(1,2) - f2(1,2) - f3(1,3,2) - f3(1,3,2) - f3(1,3,2) - f3(1,3,2) - f3(1,3,2) - - f0() - f0() - f1(i) - f1(i) - f1(i) - f1(i) - f1(i) - f2(1,2) - f2(1,2) - f2(1,2) - f2(1,2) - f2(1,2) - f3(1,3,2) - f3(1,3,2) - f3(1,3,2) - f3(1,3,2) - f3(1,3,2) - - def calibrate(self): - - # localize functions - f0 = dir - f1 = hash - f2 = range - f3 = range - - # do calls - for i in xrange(self.rounds): - pass - -### - -class PythonMethodCalls(Test): - - version = 2.0 - operations = 5*(6 + 5 + 4) - rounds = 30000 - - def test(self): - - class c: - - x = 2 - s = 'string' - - def f(self): - - return self.x - - def j(self,a,b): - - self.y = a - self.t = b - return self.y - - def k(self,a,b,c=3): - - self.y = a - self.s = b - self.t = c - - o = c() - - for i in xrange(self.rounds): - - o.f() - o.f() - o.f() - o.f() - o.f() - o.f() - o.j(i,i) - o.j(i,i) - o.j(i,2) - o.j(i,2) - o.j(2,2) - o.k(i,i) - o.k(i,2) - o.k(i,2,3) - o.k(i,i,c=4) - - o.f() - o.f() - o.f() - o.f() - o.f() - o.f() - o.j(i,i) - o.j(i,i) - o.j(i,2) - o.j(i,2) - o.j(2,2) - o.k(i,i) - o.k(i,2) - o.k(i,2,3) - o.k(i,i,c=4) - - o.f() - o.f() - o.f() - o.f() - o.f() - o.f() - o.j(i,i) - o.j(i,i) - o.j(i,2) - o.j(i,2) - o.j(2,2) - o.k(i,i) - o.k(i,2) - o.k(i,2,3) - o.k(i,i,c=4) - - o.f() - o.f() - o.f() - o.f() - o.f() - o.f() - o.j(i,i) - o.j(i,i) - o.j(i,2) - o.j(i,2) - o.j(2,2) - o.k(i,i) - o.k(i,2) - o.k(i,2,3) - o.k(i,i,c=4) - - o.f() - o.f() - o.f() - o.f() - o.f() - o.f() - o.j(i,i) - o.j(i,i) - o.j(i,2) - o.j(i,2) - o.j(2,2) - o.k(i,i) - o.k(i,2) - o.k(i,2,3) - o.k(i,i,c=4) - - def calibrate(self): - - class c: - - x = 2 - s = 'string' - - def f(self): - - return self.x - - def j(self,a,b): - - self.y = a - self.t = b - - def k(self,a,b,c=3): - - self.y = a - self.s = b - self.t = c - - o = c - - for i in xrange(self.rounds): - pass - -### - -class Recursion(Test): - - version = 2.0 - operations = 5 - rounds = 100000 - - def test(self): - - global f - - def f(x): - - if x > 1: - return f(x-1) - return 1 - - for i in xrange(self.rounds): - f(10) - f(10) - f(10) - f(10) - f(10) - - def calibrate(self): - - global f - - def f(x): - - if x > 0: - return f(x-1) - return 1 - - for i in xrange(self.rounds): - pass - - -### Test to make Fredrik happy... - -if __name__ == '__main__': - import timeit - if 0: - timeit.TestClass = PythonFunctionCalls - timeit.main(['-s', 'test = TestClass(); test.rounds = 1000', - 'test.test()']) - else: - setup = """\ -global f,f1,g,h - -# define functions -def f(): - pass - -def f1(x): - pass - -def g(a,b,c): - return a,b,c - -def h(a,b,c,d=1,e=2,f=3): - return d,e,f - -i = 1 -""" - test = """\ -f() -f1(i) -f1(i) -f1(i) -f1(i) -g(i,i,i) -g(i,i,i) -g(i,i,i) -g(i,i,i) -h(i,i,3,i,i) -h(i,i,i,2,i,3) - -f() -f1(i) -f1(i) -f1(i) -f1(i) -g(i,i,i) -g(i,i,i) -g(i,i,i) -g(i,i,i) -h(i,i,3,i,i) -h(i,i,i,2,i,3) - -f() -f1(i) -f1(i) -f1(i) -f1(i) -g(i,i,i) -g(i,i,i) -g(i,i,i) -g(i,i,i) -h(i,i,3,i,i) -h(i,i,i,2,i,3) - -f() -f1(i) -f1(i) -f1(i) -f1(i) -g(i,i,i) -g(i,i,i) -g(i,i,i) -g(i,i,i) -h(i,i,3,i,i) -h(i,i,i,2,i,3) - -f() -f1(i) -f1(i) -f1(i) -f1(i) -g(i,i,i) -g(i,i,i) -g(i,i,i) -g(i,i,i) -h(i,i,3,i,i) -h(i,i,i,2,i,3) -""" - - timeit.main(['-s', setup, - test]) - - diff --git a/Tools/pybench/pybench-2.0/CommandLine.py b/Tools/pybench/pybench-2.0/CommandLine.py deleted file mode 100644 index 6601be5..0000000 --- a/Tools/pybench/pybench-2.0/CommandLine.py +++ /dev/null @@ -1,634 +0,0 @@ -""" CommandLine - Get and parse command line options - - NOTE: This still is very much work in progress !!! - - Different version are likely to be incompatible. - - TODO: - - * Incorporate the changes made by (see Inbox) - * Add number range option using srange() - -""" - -__copyright__ = """\ -Copyright (c), 1997-2006, Marc-Andre Lemburg (mal@lemburg.com) -Copyright (c), 2000-2006, eGenix.com Software GmbH (info@egenix.com) -See the documentation for further information on copyrights, -or contact the author. All Rights Reserved. -""" - -__version__ = '1.2' - -import sys, getopt, string, glob, os, re, exceptions, traceback - -### Helpers - -def _getopt_flags(options): - - """ Convert the option list to a getopt flag string and long opt - list - - """ - s = [] - l = [] - for o in options: - if o.prefix == '-': - # short option - s.append(o.name) - if o.takes_argument: - s.append(':') - else: - # long option - if o.takes_argument: - l.append(o.name+'=') - else: - l.append(o.name) - return string.join(s,''),l - -def invisible_input(prompt='>>> '): - - """ Get raw input from a terminal without echoing the characters to - the terminal, e.g. for password queries. - - """ - import getpass - entry = getpass.getpass(prompt) - if entry is None: - raise KeyboardInterrupt - return entry - -def fileopen(name, mode='wb', encoding=None): - - """ Open a file using mode. - - Default mode is 'wb' meaning to open the file for writing in - binary mode. If encoding is given, I/O to and from the file is - transparently encoded using the given encoding. - - Files opened for writing are chmod()ed to 0600. - - """ - if name == 'stdout': - return sys.stdout - elif name == 'stderr': - return sys.stderr - elif name == 'stdin': - return sys.stdin - else: - if encoding is not None: - import codecs - f = codecs.open(name, mode, encoding) - else: - f = open(name, mode) - if 'w' in mode: - os.chmod(name, 0600) - return f - -def option_dict(options): - - """ Return a dictionary mapping option names to Option instances. - """ - d = {} - for option in options: - d[option.name] = option - return d - -# Alias -getpasswd = invisible_input - -_integerRE = re.compile('\s*(-?\d+)\s*$') -_integerRangeRE = re.compile('\s*(-?\d+)\s*-\s*(-?\d+)\s*$') - -def srange(s, - - split=string.split,integer=_integerRE, - integerRange=_integerRangeRE): - - """ Converts a textual representation of integer numbers and ranges - to a Python list. - - Supported formats: 2,3,4,2-10,-1 - -3, 5 - -2 - - Values are appended to the created list in the order specified - in the string. - - """ - l = [] - append = l.append - for entry in split(s,','): - m = integer.match(entry) - if m: - append(int(m.groups()[0])) - continue - m = integerRange.match(entry) - if m: - start,end = map(int,m.groups()) - l[len(l):] = range(start,end+1) - return l - -def abspath(path, - - expandvars=os.path.expandvars,expanduser=os.path.expanduser, - join=os.path.join,getcwd=os.getcwd): - - """ Return the corresponding absolute path for path. - - path is expanded in the usual shell ways before - joining it with the current working directory. - - """ - try: - path = expandvars(path) - except AttributeError: - pass - try: - path = expanduser(path) - except AttributeError: - pass - return join(getcwd(), path) - -### Option classes - -class Option: - - """ Option base class. Takes no argument. - - """ - default = None - helptext = '' - prefix = '-' - takes_argument = 0 - has_default = 0 - tab = 15 - - def __init__(self,name,help=None): - - if not name[:1] == '-': - raise TypeError,'option names must start with "-"' - if name[1:2] == '-': - self.prefix = '--' - self.name = name[2:] - else: - self.name = name[1:] - if help: - self.help = help - - def __str__(self): - - o = self - name = o.prefix + o.name - if o.takes_argument: - name = name + ' arg' - if len(name) > self.tab: - name = name + '\n' + ' ' * (self.tab + 1 + len(o.prefix)) - else: - name = '%-*s ' % (self.tab, name) - description = o.help - if o.has_default: - description = description + ' (%s)' % o.default - return '%s %s' % (name, description) - -class ArgumentOption(Option): - - """ Option that takes an argument. - - An optional default argument can be given. - - """ - def __init__(self,name,help=None,default=None): - - # Basemethod - Option.__init__(self,name,help) - - if default is not None: - self.default = default - self.has_default = 1 - self.takes_argument = 1 - -class SwitchOption(Option): - - """ Options that can be on or off. Has an optional default value. - - """ - def __init__(self,name,help=None,default=None): - - # Basemethod - Option.__init__(self,name,help) - - if default is not None: - self.default = default - self.has_default = 1 - -### Application baseclass - -class Application: - - """ Command line application interface with builtin argument - parsing. - - """ - # Options the program accepts (Option instances) - options = [] - - # Standard settings; these are appended to options in __init__ - preset_options = [SwitchOption('-v', - 'generate verbose output'), - SwitchOption('-h', - 'show this help text'), - SwitchOption('--help', - 'show this help text'), - SwitchOption('--debug', - 'enable debugging'), - SwitchOption('--copyright', - 'show copyright'), - SwitchOption('--examples', - 'show examples of usage')] - - # The help layout looks like this: - # [header] - defaults to '' - # - # [synopsis] - formatted as '<self.name> %s' % self.synopsis - # - # options: - # [options] - formatted from self.options - # - # [version] - formatted as 'Version:\n %s' % self.version, if given - # - # [about] - defaults to '' - # - # Note: all fields that do not behave as template are formatted - # using the instances dictionary as substitution namespace, - # e.g. %(name)s will be replaced by the applications name. - # - - # Header (default to program name) - header = '' - - # Name (defaults to program name) - name = '' - - # Synopsis (%(name)s is replaced by the program name) - synopsis = '%(name)s [option] files...' - - # Version (optional) - version = '' - - # General information printed after the possible options (optional) - about = '' - - # Examples of usage to show when the --examples option is given (optional) - examples = '' - - # Copyright to show - copyright = __copyright__ - - # Apply file globbing ? - globbing = 1 - - # Generate debug output ? - debug = 0 - - # Generate verbose output ? - verbose = 0 - - # Internal errors to catch - InternalError = exceptions.Exception - - # Instance variables: - values = None # Dictionary of passed options (or default values) - # indexed by the options name, e.g. '-h' - files = None # List of passed filenames - optionlist = None # List of passed options - - def __init__(self,argv=None): - - # Setup application specs - if argv is None: - argv = sys.argv - self.filename = os.path.split(argv[0])[1] - if not self.name: - self.name = os.path.split(self.filename)[1] - else: - self.name = self.name - if not self.header: - self.header = self.name - else: - self.header = self.header - - # Init .arguments list - self.arguments = argv[1:] - - # Setup Option mapping - self.option_map = option_dict(self.options) - - # Append preset options - for option in self.preset_options: - if not self.option_map.has_key(option.name): - self.add_option(option) - - # Init .files list - self.files = [] - - # Start Application - try: - # Process startup - rc = self.startup() - if rc is not None: - raise SystemExit,rc - - # Parse command line - rc = self.parse() - if rc is not None: - raise SystemExit,rc - - # Start application - rc = self.main() - if rc is None: - rc = 0 - - except SystemExit,rc: - pass - - except KeyboardInterrupt: - print - print '* User Break' - print - rc = 1 - - except self.InternalError: - print - print '* Internal Error (use --debug to display the traceback)' - if self.debug: - print - traceback.print_exc(20, sys.stdout) - elif self.verbose: - print ' %s: %s' % sys.exc_info()[:2] - print - rc = 1 - - raise SystemExit,rc - - def add_option(self, option): - - """ Add a new Option instance to the Application dynamically. - - Note that this has to be done *before* .parse() is being - executed. - - """ - self.options.append(option) - self.option_map[option.name] = option - - def startup(self): - - """ Set user defined instance variables. - - If this method returns anything other than None, the - process is terminated with the return value as exit code. - - """ - return None - - def exit(self, rc=0): - - """ Exit the program. - - rc is used as exit code and passed back to the calling - program. It defaults to 0 which usually means: OK. - - """ - raise SystemExit, rc - - def parse(self): - - """ Parse the command line and fill in self.values and self.files. - - After having parsed the options, the remaining command line - arguments are interpreted as files and passed to .handle_files() - for processing. - - As final step the option handlers are called in the order - of the options given on the command line. - - """ - # Parse arguments - self.values = values = {} - for o in self.options: - if o.has_default: - values[o.prefix+o.name] = o.default - else: - values[o.prefix+o.name] = 0 - flags,lflags = _getopt_flags(self.options) - try: - optlist,files = getopt.getopt(self.arguments,flags,lflags) - if self.globbing: - l = [] - for f in files: - gf = glob.glob(f) - if not gf: - l.append(f) - else: - l[len(l):] = gf - files = l - self.optionlist = optlist - self.files = files + self.files - except getopt.error,why: - self.help(why) - sys.exit(1) - - # Call file handler - rc = self.handle_files(self.files) - if rc is not None: - sys.exit(rc) - - # Call option handlers - for optionname, value in optlist: - - # Try to convert value to integer - try: - value = string.atoi(value) - except ValueError: - pass - - # Find handler and call it (or count the number of option - # instances on the command line) - handlername = 'handle' + string.replace(optionname, '-', '_') - try: - handler = getattr(self, handlername) - except AttributeError: - if value == '': - # count the number of occurances - if values.has_key(optionname): - values[optionname] = values[optionname] + 1 - else: - values[optionname] = 1 - else: - values[optionname] = value - else: - rc = handler(value) - if rc is not None: - raise SystemExit, rc - - # Apply final file check (for backward compatibility) - rc = self.check_files(self.files) - if rc is not None: - sys.exit(rc) - - def check_files(self,filelist): - - """ Apply some user defined checks on the files given in filelist. - - This may modify filelist in place. A typical application - is checking that at least n files are given. - - If this method returns anything other than None, the - process is terminated with the return value as exit code. - - """ - return None - - def help(self,note=''): - - self.print_header() - if self.synopsis: - print 'Synopsis:' - # To remain backward compatible: - try: - synopsis = self.synopsis % self.name - except (NameError, KeyError, TypeError): - synopsis = self.synopsis % self.__dict__ - print ' ' + synopsis - print - self.print_options() - if self.version: - print 'Version:' - print ' %s' % self.version - print - if self.about: - print string.strip(self.about % self.__dict__) - print - if note: - print '-'*72 - print 'Note:',note - print - - def notice(self,note): - - print '-'*72 - print 'Note:',note - print '-'*72 - print - - def print_header(self): - - print '-'*72 - print self.header % self.__dict__ - print '-'*72 - print - - def print_options(self): - - options = self.options - print 'Options and default settings:' - if not options: - print ' None' - return - long = filter(lambda x: x.prefix == '--', options) - short = filter(lambda x: x.prefix == '-', options) - items = short + long - for o in options: - print ' ',o - print - - # - # Example handlers: - # - # If a handler returns anything other than None, processing stops - # and the return value is passed to sys.exit() as argument. - # - - # File handler - def handle_files(self,files): - - """ This may process the files list in place. - """ - return None - - # Short option handler - def handle_h(self,arg): - - self.help() - return 0 - - def handle_v(self, value): - - """ Turn on verbose output. - """ - self.verbose = 1 - - # Handlers for long options have two underscores in their name - def handle__help(self,arg): - - self.help() - return 0 - - def handle__debug(self,arg): - - self.debug = 1 - # We don't want to catch internal errors: - self.InternalError = None - - def handle__copyright(self,arg): - - self.print_header() - print string.strip(self.copyright % self.__dict__) - print - return 0 - - def handle__examples(self,arg): - - self.print_header() - if self.examples: - print 'Examples:' - print - print string.strip(self.examples % self.__dict__) - print - else: - print 'No examples available.' - print - return 0 - - def main(self): - - """ Override this method as program entry point. - - The return value is passed to sys.exit() as argument. If - it is None, 0 is assumed (meaning OK). Unhandled - exceptions are reported with exit status code 1 (see - __init__ for further details). - - """ - return None - -# Alias -CommandLine = Application - -def _test(): - - class MyApplication(Application): - header = 'Test Application' - version = __version__ - options = [Option('-v','verbose')] - - def handle_v(self,arg): - print 'VERBOSE, Yeah !' - - cmd = MyApplication() - if not cmd.values['-h']: - cmd.help() - print 'files:',cmd.files - print 'Bye...' - -if __name__ == '__main__': - _test() diff --git a/Tools/pybench/pybench-2.0/Constructs.py b/Tools/pybench/pybench-2.0/Constructs.py deleted file mode 100644 index 5105461..0000000 --- a/Tools/pybench/pybench-2.0/Constructs.py +++ /dev/null @@ -1,564 +0,0 @@ -from pybench import Test - -class IfThenElse(Test): - - version = 2.0 - operations = 30*3 # hard to say... - rounds = 150000 - - def test(self): - - a,b,c = 1,2,3 - for i in xrange(self.rounds): - - if a == 1: - if b == 2: - if c != 3: - c = 3 - b = 3 - else: - c = 2 - elif b == 3: - b = 2 - a = 2 - elif a == 2: - a = 3 - else: - a = 1 - - if a == 1: - if b == 2: - if c != 3: - c = 3 - b = 3 - else: - c = 2 - elif b == 3: - b = 2 - a = 2 - elif a == 2: - a = 3 - else: - a = 1 - - if a == 1: - if b == 2: - if c != 3: - c = 3 - b = 3 - else: - c = 2 - elif b == 3: - b = 2 - a = 2 - elif a == 2: - a = 3 - else: - a = 1 - - if a == 1: - if b == 2: - if c != 3: - c = 3 - b = 3 - else: - c = 2 - elif b == 3: - b = 2 - a = 2 - elif a == 2: - a = 3 - else: - a = 1 - - if a == 1: - if b == 2: - if c != 3: - c = 3 - b = 3 - else: - c = 2 - elif b == 3: - b = 2 - a = 2 - elif a == 2: - a = 3 - else: - a = 1 - - if a == 1: - if b == 2: - if c != 3: - c = 3 - b = 3 - else: - c = 2 - elif b == 3: - b = 2 - a = 2 - elif a == 2: - a = 3 - else: - a = 1 - - if a == 1: - if b == 2: - if c != 3: - c = 3 - b = 3 - else: - c = 2 - elif b == 3: - b = 2 - a = 2 - elif a == 2: - a = 3 - else: - a = 1 - - if a == 1: - if b == 2: - if c != 3: - c = 3 - b = 3 - else: - c = 2 - elif b == 3: - b = 2 - a = 2 - elif a == 2: - a = 3 - else: - a = 1 - - if a == 1: - if b == 2: - if c != 3: - c = 3 - b = 3 - else: - c = 2 - elif b == 3: - b = 2 - a = 2 - elif a == 2: - a = 3 - else: - a = 1 - - if a == 1: - if b == 2: - if c != 3: - c = 3 - b = 3 - else: - c = 2 - elif b == 3: - b = 2 - a = 2 - elif a == 2: - a = 3 - else: - a = 1 - - if a == 1: - if b == 2: - if c != 3: - c = 3 - b = 3 - else: - c = 2 - elif b == 3: - b = 2 - a = 2 - elif a == 2: - a = 3 - else: - a = 1 - - if a == 1: - if b == 2: - if c != 3: - c = 3 - b = 3 - else: - c = 2 - elif b == 3: - b = 2 - a = 2 - elif a == 2: - a = 3 - else: - a = 1 - - if a == 1: - if b == 2: - if c != 3: - c = 3 - b = 3 - else: - c = 2 - elif b == 3: - b = 2 - a = 2 - elif a == 2: - a = 3 - else: - a = 1 - - if a == 1: - if b == 2: - if c != 3: - c = 3 - b = 3 - else: - c = 2 - elif b == 3: - b = 2 - a = 2 - elif a == 2: - a = 3 - else: - a = 1 - - if a == 1: - if b == 2: - if c != 3: - c = 3 - b = 3 - else: - c = 2 - elif b == 3: - b = 2 - a = 2 - elif a == 2: - a = 3 - else: - a = 1 - - if a == 1: - if b == 2: - if c != 3: - c = 3 - b = 3 - else: - c = 2 - elif b == 3: - b = 2 - a = 2 - elif a == 2: - a = 3 - else: - a = 1 - - if a == 1: - if b == 2: - if c != 3: - c = 3 - b = 3 - else: - c = 2 - elif b == 3: - b = 2 - a = 2 - elif a == 2: - a = 3 - else: - a = 1 - - if a == 1: - if b == 2: - if c != 3: - c = 3 - b = 3 - else: - c = 2 - elif b == 3: - b = 2 - a = 2 - elif a == 2: - a = 3 - else: - a = 1 - - if a == 1: - if b == 2: - if c != 3: - c = 3 - b = 3 - else: - c = 2 - elif b == 3: - b = 2 - a = 2 - elif a == 2: - a = 3 - else: - a = 1 - - if a == 1: - if b == 2: - if c != 3: - c = 3 - b = 3 - else: - c = 2 - elif b == 3: - b = 2 - a = 2 - elif a == 2: - a = 3 - else: - a = 1 - - if a == 1: - if b == 2: - if c != 3: - c = 3 - b = 3 - else: - c = 2 - elif b == 3: - b = 2 - a = 2 - elif a == 2: - a = 3 - else: - a = 1 - - if a == 1: - if b == 2: - if c != 3: - c = 3 - b = 3 - else: - c = 2 - elif b == 3: - b = 2 - a = 2 - elif a == 2: - a = 3 - else: - a = 1 - - if a == 1: - if b == 2: - if c != 3: - c = 3 - b = 3 - else: - c = 2 - elif b == 3: - b = 2 - a = 2 - elif a == 2: - a = 3 - else: - a = 1 - - if a == 1: - if b == 2: - if c != 3: - c = 3 - b = 3 - else: - c = 2 - elif b == 3: - b = 2 - a = 2 - elif a == 2: - a = 3 - else: - a = 1 - - if a == 1: - if b == 2: - if c != 3: - c = 3 - b = 3 - else: - c = 2 - elif b == 3: - b = 2 - a = 2 - elif a == 2: - a = 3 - else: - a = 1 - - if a == 1: - if b == 2: - if c != 3: - c = 3 - b = 3 - else: - c = 2 - elif b == 3: - b = 2 - a = 2 - elif a == 2: - a = 3 - else: - a = 1 - - if a == 1: - if b == 2: - if c != 3: - c = 3 - b = 3 - else: - c = 2 - elif b == 3: - b = 2 - a = 2 - elif a == 2: - a = 3 - else: - a = 1 - - if a == 1: - if b == 2: - if c != 3: - c = 3 - b = 3 - else: - c = 2 - elif b == 3: - b = 2 - a = 2 - elif a == 2: - a = 3 - else: - a = 1 - - if a == 1: - if b == 2: - if c != 3: - c = 3 - b = 3 - else: - c = 2 - elif b == 3: - b = 2 - a = 2 - elif a == 2: - a = 3 - else: - a = 1 - - if a == 1: - if b == 2: - if c != 3: - c = 3 - b = 3 - else: - c = 2 - elif b == 3: - b = 2 - a = 2 - elif a == 2: - a = 3 - else: - a = 1 - - def calibrate(self): - - a,b,c = 1,2,3 - for i in xrange(self.rounds): - pass - -class NestedForLoops(Test): - - version = 2.0 - operations = 1000*10*5 - rounds = 300 - - def test(self): - - l1 = range(1000) - l2 = range(10) - l3 = range(5) - for i in xrange(self.rounds): - for i in l1: - for j in l2: - for k in l3: - pass - - def calibrate(self): - - l1 = range(1000) - l2 = range(10) - l3 = range(5) - for i in xrange(self.rounds): - pass - -class ForLoops(Test): - - version = 2.0 - operations = 5 * 5 - rounds = 10000 - - def test(self): - - l1 = range(100) - for i in xrange(self.rounds): - for i in l1: - pass - for i in l1: - pass - for i in l1: - pass - for i in l1: - pass - for i in l1: - pass - - for i in l1: - pass - for i in l1: - pass - for i in l1: - pass - for i in l1: - pass - for i in l1: - pass - - for i in l1: - pass - for i in l1: - pass - for i in l1: - pass - for i in l1: - pass - for i in l1: - pass - - for i in l1: - pass - for i in l1: - pass - for i in l1: - pass - for i in l1: - pass - for i in l1: - pass - - for i in l1: - pass - for i in l1: - pass - for i in l1: - pass - for i in l1: - pass - for i in l1: - pass - - def calibrate(self): - - l1 = range(1000) - for i in xrange(self.rounds): - pass diff --git a/Tools/pybench/pybench-2.0/Dict.py b/Tools/pybench/pybench-2.0/Dict.py deleted file mode 100644 index 9cdd682..0000000 --- a/Tools/pybench/pybench-2.0/Dict.py +++ /dev/null @@ -1,504 +0,0 @@ -from pybench import Test - -class DictCreation(Test): - - version = 2.0 - operations = 5*(5 + 5) - rounds = 80000 - - def test(self): - - for i in xrange(self.rounds): - - d1 = {} - d2 = {} - d3 = {} - d4 = {} - d5 = {} - - d1 = {1:2,3:4,5:6} - d2 = {2:3,4:5,6:7} - d3 = {3:4,5:6,7:8} - d4 = {4:5,6:7,8:9} - d5 = {6:7,8:9,10:11} - - d1 = {} - d2 = {} - d3 = {} - d4 = {} - d5 = {} - - d1 = {1:2,3:4,5:6} - d2 = {2:3,4:5,6:7} - d3 = {3:4,5:6,7:8} - d4 = {4:5,6:7,8:9} - d5 = {6:7,8:9,10:11} - - d1 = {} - d2 = {} - d3 = {} - d4 = {} - d5 = {} - - d1 = {1:2,3:4,5:6} - d2 = {2:3,4:5,6:7} - d3 = {3:4,5:6,7:8} - d4 = {4:5,6:7,8:9} - d5 = {6:7,8:9,10:11} - - d1 = {} - d2 = {} - d3 = {} - d4 = {} - d5 = {} - - d1 = {1:2,3:4,5:6} - d2 = {2:3,4:5,6:7} - d3 = {3:4,5:6,7:8} - d4 = {4:5,6:7,8:9} - d5 = {6:7,8:9,10:11} - - d1 = {} - d2 = {} - d3 = {} - d4 = {} - d5 = {} - - d1 = {1:2,3:4,5:6} - d2 = {2:3,4:5,6:7} - d3 = {3:4,5:6,7:8} - d4 = {4:5,6:7,8:9} - d5 = {6:7,8:9,10:11} - - def calibrate(self): - - for i in xrange(self.rounds): - pass - -class DictWithStringKeys(Test): - - version = 2.0 - operations = 5*(6 + 6) - rounds = 200000 - - def test(self): - - d = {} - - for i in xrange(self.rounds): - - d['abc'] = 1 - d['def'] = 2 - d['ghi'] = 3 - d['jkl'] = 4 - d['mno'] = 5 - d['pqr'] = 6 - - d['abc'] - d['def'] - d['ghi'] - d['jkl'] - d['mno'] - d['pqr'] - - d['abc'] = 1 - d['def'] = 2 - d['ghi'] = 3 - d['jkl'] = 4 - d['mno'] = 5 - d['pqr'] = 6 - - d['abc'] - d['def'] - d['ghi'] - d['jkl'] - d['mno'] - d['pqr'] - - d['abc'] = 1 - d['def'] = 2 - d['ghi'] = 3 - d['jkl'] = 4 - d['mno'] = 5 - d['pqr'] = 6 - - d['abc'] - d['def'] - d['ghi'] - d['jkl'] - d['mno'] - d['pqr'] - - d['abc'] = 1 - d['def'] = 2 - d['ghi'] = 3 - d['jkl'] = 4 - d['mno'] = 5 - d['pqr'] = 6 - - d['abc'] - d['def'] - d['ghi'] - d['jkl'] - d['mno'] - d['pqr'] - - d['abc'] = 1 - d['def'] = 2 - d['ghi'] = 3 - d['jkl'] = 4 - d['mno'] = 5 - d['pqr'] = 6 - - d['abc'] - d['def'] - d['ghi'] - d['jkl'] - d['mno'] - d['pqr'] - - def calibrate(self): - - d = {} - - for i in xrange(self.rounds): - pass - -class DictWithFloatKeys(Test): - - version = 2.0 - operations = 5*(6 + 6) - rounds = 150000 - - def test(self): - - d = {} - - for i in xrange(self.rounds): - - d[1.234] = 1 - d[2.345] = 2 - d[3.456] = 3 - d[4.567] = 4 - d[5.678] = 5 - d[6.789] = 6 - - d[1.234] - d[2.345] - d[3.456] - d[4.567] - d[5.678] - d[6.789] - - d[1.234] = 1 - d[2.345] = 2 - d[3.456] = 3 - d[4.567] = 4 - d[5.678] = 5 - d[6.789] = 6 - - d[1.234] - d[2.345] - d[3.456] - d[4.567] - d[5.678] - d[6.789] - - d[1.234] = 1 - d[2.345] = 2 - d[3.456] = 3 - d[4.567] = 4 - d[5.678] = 5 - d[6.789] = 6 - - d[1.234] - d[2.345] - d[3.456] - d[4.567] - d[5.678] - d[6.789] - - d[1.234] = 1 - d[2.345] = 2 - d[3.456] = 3 - d[4.567] = 4 - d[5.678] = 5 - d[6.789] = 6 - - d[1.234] - d[2.345] - d[3.456] - d[4.567] - d[5.678] - d[6.789] - - d[1.234] = 1 - d[2.345] = 2 - d[3.456] = 3 - d[4.567] = 4 - d[5.678] = 5 - d[6.789] = 6 - - d[1.234] - d[2.345] - d[3.456] - d[4.567] - d[5.678] - d[6.789] - - def calibrate(self): - - d = {} - - for i in xrange(self.rounds): - pass - -class DictWithIntegerKeys(Test): - - version = 2.0 - operations = 5*(6 + 6) - rounds = 200000 - - def test(self): - - d = {} - - for i in xrange(self.rounds): - - d[1] = 1 - d[2] = 2 - d[3] = 3 - d[4] = 4 - d[5] = 5 - d[6] = 6 - - d[1] - d[2] - d[3] - d[4] - d[5] - d[6] - - d[1] = 1 - d[2] = 2 - d[3] = 3 - d[4] = 4 - d[5] = 5 - d[6] = 6 - - d[1] - d[2] - d[3] - d[4] - d[5] - d[6] - - d[1] = 1 - d[2] = 2 - d[3] = 3 - d[4] = 4 - d[5] = 5 - d[6] = 6 - - d[1] - d[2] - d[3] - d[4] - d[5] - d[6] - - d[1] = 1 - d[2] = 2 - d[3] = 3 - d[4] = 4 - d[5] = 5 - d[6] = 6 - - d[1] - d[2] - d[3] - d[4] - d[5] - d[6] - - d[1] = 1 - d[2] = 2 - d[3] = 3 - d[4] = 4 - d[5] = 5 - d[6] = 6 - - d[1] - d[2] - d[3] - d[4] - d[5] - d[6] - - def calibrate(self): - - d = {} - - for i in xrange(self.rounds): - pass - -class SimpleDictManipulation(Test): - - version = 2.0 - operations = 5*(6 + 6 + 6 + 6) - rounds = 100000 - - def test(self): - - d = {} - has_key = d.has_key - - for i in xrange(self.rounds): - - d[0] = 3 - d[1] = 4 - d[2] = 5 - d[3] = 3 - d[4] = 4 - d[5] = 5 - - x = d[0] - x = d[1] - x = d[2] - x = d[3] - x = d[4] - x = d[5] - - has_key(0) - has_key(2) - has_key(4) - has_key(6) - has_key(8) - has_key(10) - - del d[0] - del d[1] - del d[2] - del d[3] - del d[4] - del d[5] - - d[0] = 3 - d[1] = 4 - d[2] = 5 - d[3] = 3 - d[4] = 4 - d[5] = 5 - - x = d[0] - x = d[1] - x = d[2] - x = d[3] - x = d[4] - x = d[5] - - has_key(0) - has_key(2) - has_key(4) - has_key(6) - has_key(8) - has_key(10) - - del d[0] - del d[1] - del d[2] - del d[3] - del d[4] - del d[5] - - d[0] = 3 - d[1] = 4 - d[2] = 5 - d[3] = 3 - d[4] = 4 - d[5] = 5 - - x = d[0] - x = d[1] - x = d[2] - x = d[3] - x = d[4] - x = d[5] - - has_key(0) - has_key(2) - has_key(4) - has_key(6) - has_key(8) - has_key(10) - - del d[0] - del d[1] - del d[2] - del d[3] - del d[4] - del d[5] - - d[0] = 3 - d[1] = 4 - d[2] = 5 - d[3] = 3 - d[4] = 4 - d[5] = 5 - - x = d[0] - x = d[1] - x = d[2] - x = d[3] - x = d[4] - x = d[5] - - has_key(0) - has_key(2) - has_key(4) - has_key(6) - has_key(8) - has_key(10) - - del d[0] - del d[1] - del d[2] - del d[3] - del d[4] - del d[5] - - d[0] = 3 - d[1] = 4 - d[2] = 5 - d[3] = 3 - d[4] = 4 - d[5] = 5 - - x = d[0] - x = d[1] - x = d[2] - x = d[3] - x = d[4] - x = d[5] - - has_key(0) - has_key(2) - has_key(4) - has_key(6) - has_key(8) - has_key(10) - - del d[0] - del d[1] - del d[2] - del d[3] - del d[4] - del d[5] - - def calibrate(self): - - d = {} - has_key = d.has_key - - for i in xrange(self.rounds): - pass diff --git a/Tools/pybench/pybench-2.0/Exceptions.py b/Tools/pybench/pybench-2.0/Exceptions.py deleted file mode 100644 index eff69c7..0000000 --- a/Tools/pybench/pybench-2.0/Exceptions.py +++ /dev/null @@ -1,699 +0,0 @@ -from pybench import Test - -class TryRaiseExcept(Test): - - version = 2.0 - operations = 2 + 3 + 3 - rounds = 80000 - - def test(self): - - error = ValueError - - for i in xrange(self.rounds): - try: - raise error - except: - pass - try: - raise error - except: - pass - try: - raise error,"something" - except: - pass - try: - raise error,"something" - except: - pass - try: - raise error,"something" - except: - pass - try: - raise error("something") - except: - pass - try: - raise error("something") - except: - pass - try: - raise error("something") - except: - pass - - def calibrate(self): - - error = ValueError - - for i in xrange(self.rounds): - pass - - -class TryExcept(Test): - - version = 2.0 - operations = 15 * 10 - rounds = 150000 - - def test(self): - - for i in xrange(self.rounds): - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - - - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - - - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - - - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - - - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - - - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - - - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - - - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - - - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - - - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - try: - pass - except: - pass - - def calibrate(self): - - for i in xrange(self.rounds): - pass - -### Test to make Fredrik happy... - -if __name__ == '__main__': - import timeit - timeit.TestClass = TryRaiseExcept - timeit.main(['-s', 'test = TestClass(); test.rounds = 1000', - 'test.test()']) diff --git a/Tools/pybench/pybench-2.0/Imports.py b/Tools/pybench/pybench-2.0/Imports.py deleted file mode 100644 index afc728b..0000000 --- a/Tools/pybench/pybench-2.0/Imports.py +++ /dev/null @@ -1,138 +0,0 @@ -from pybench import Test - -# First imports: -import os -import package.submodule - -class SecondImport(Test): - - version = 2.0 - operations = 5 * 5 - rounds = 40000 - - def test(self): - - for i in xrange(self.rounds): - import os - import os - import os - import os - import os - - import os - import os - import os - import os - import os - - import os - import os - import os - import os - import os - - import os - import os - import os - import os - import os - - import os - import os - import os - import os - import os - - def calibrate(self): - - for i in xrange(self.rounds): - pass - - -class SecondPackageImport(Test): - - version = 2.0 - operations = 5 * 5 - rounds = 40000 - - def test(self): - - for i in xrange(self.rounds): - import package - import package - import package - import package - import package - - import package - import package - import package - import package - import package - - import package - import package - import package - import package - import package - - import package - import package - import package - import package - import package - - import package - import package - import package - import package - import package - - def calibrate(self): - - for i in xrange(self.rounds): - pass - -class SecondSubmoduleImport(Test): - - version = 2.0 - operations = 5 * 5 - rounds = 40000 - - def test(self): - - for i in xrange(self.rounds): - import package.submodule - import package.submodule - import package.submodule - import package.submodule - import package.submodule - - import package.submodule - import package.submodule - import package.submodule - import package.submodule - import package.submodule - - import package.submodule - import package.submodule - import package.submodule - import package.submodule - import package.submodule - - import package.submodule - import package.submodule - import package.submodule - import package.submodule - import package.submodule - - import package.submodule - import package.submodule - import package.submodule - import package.submodule - import package.submodule - - def calibrate(self): - - for i in xrange(self.rounds): - pass diff --git a/Tools/pybench/pybench-2.0/Instances.py b/Tools/pybench/pybench-2.0/Instances.py deleted file mode 100644 index 1dfc82f..0000000 --- a/Tools/pybench/pybench-2.0/Instances.py +++ /dev/null @@ -1,66 +0,0 @@ -from pybench import Test - -class CreateInstances(Test): - - version = 2.0 - operations = 3 + 7 + 4 - rounds = 80000 - - def test(self): - - class c: - pass - - class d: - def __init__(self,a,b,c): - self.a = a - self.b = b - self.c = c - - class e: - def __init__(self,a,b,c=4): - self.a = a - self.b = b - self.c = c - self.d = a - self.e = b - self.f = c - - for i in xrange(self.rounds): - o = c() - o1 = c() - o2 = c() - p = d(i,i,3) - p1 = d(i,i,3) - p2 = d(i,3,3) - p3 = d(3,i,3) - p4 = d(i,i,i) - p5 = d(3,i,3) - p6 = d(i,i,i) - q = e(i,i,3) - q1 = e(i,i,3) - q2 = e(i,i,3) - q3 = e(i,i) - - def calibrate(self): - - class c: - pass - - class d: - def __init__(self,a,b,c): - self.a = a - self.b = b - self.c = c - - class e: - def __init__(self,a,b,c=4): - self.a = a - self.b = b - self.c = c - self.d = a - self.e = b - self.f = c - - for i in xrange(self.rounds): - pass diff --git a/Tools/pybench/pybench-2.0/LICENSE b/Tools/pybench/pybench-2.0/LICENSE deleted file mode 100644 index 17c6a6b..0000000 --- a/Tools/pybench/pybench-2.0/LICENSE +++ /dev/null @@ -1,25 +0,0 @@ -pybench License ---------------- - -This copyright notice and license applies to all files in the pybench -directory of the pybench distribution. - -Copyright (c), 1997-2006, Marc-Andre Lemburg (mal@lemburg.com) -Copyright (c), 2000-2006, eGenix.com Software GmbH (info@egenix.com) - - All Rights Reserved. - -Permission to use, copy, modify, and distribute this software and its -documentation for any purpose and without fee or royalty is hereby -granted, provided that the above copyright notice appear in all copies -and that both that copyright notice and this permission notice appear -in supporting documentation or portions thereof, including -modifications, that you make. - -THE AUTHOR MARC-ANDRE LEMBURG DISCLAIMS ALL WARRANTIES WITH REGARD TO -THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS, IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, -INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING -FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, -NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION -WITH THE USE OR PERFORMANCE OF THIS SOFTWARE ! diff --git a/Tools/pybench/pybench-2.0/Lists.py b/Tools/pybench/pybench-2.0/Lists.py deleted file mode 100644 index 67760db..0000000 --- a/Tools/pybench/pybench-2.0/Lists.py +++ /dev/null @@ -1,295 +0,0 @@ -from pybench import Test - -class SimpleListManipulation(Test): - - version = 2.0 - operations = 5* (6 + 6 + 6) - rounds = 130000 - - def test(self): - - l = [] - append = l.append - - for i in xrange(self.rounds): - - append(2) - append(3) - append(4) - append(2) - append(3) - append(4) - - l[0] = 3 - l[1] = 4 - l[2] = 5 - l[3] = 3 - l[4] = 4 - l[5] = 5 - - x = l[0] - x = l[1] - x = l[2] - x = l[3] - x = l[4] - x = l[5] - - append(2) - append(3) - append(4) - append(2) - append(3) - append(4) - - l[0] = 3 - l[1] = 4 - l[2] = 5 - l[3] = 3 - l[4] = 4 - l[5] = 5 - - x = l[0] - x = l[1] - x = l[2] - x = l[3] - x = l[4] - x = l[5] - - append(2) - append(3) - append(4) - append(2) - append(3) - append(4) - - l[0] = 3 - l[1] = 4 - l[2] = 5 - l[3] = 3 - l[4] = 4 - l[5] = 5 - - x = l[0] - x = l[1] - x = l[2] - x = l[3] - x = l[4] - x = l[5] - - append(2) - append(3) - append(4) - append(2) - append(3) - append(4) - - l[0] = 3 - l[1] = 4 - l[2] = 5 - l[3] = 3 - l[4] = 4 - l[5] = 5 - - x = l[0] - x = l[1] - x = l[2] - x = l[3] - x = l[4] - x = l[5] - - append(2) - append(3) - append(4) - append(2) - append(3) - append(4) - - l[0] = 3 - l[1] = 4 - l[2] = 5 - l[3] = 3 - l[4] = 4 - l[5] = 5 - - x = l[0] - x = l[1] - x = l[2] - x = l[3] - x = l[4] - x = l[5] - - if len(l) > 10000: - # cut down the size - del l[:] - - def calibrate(self): - - l = [] - append = l.append - - for i in xrange(self.rounds): - pass - -class ListSlicing(Test): - - version = 2.0 - operations = 25*(3+1+2+1) - rounds = 800 - - def test(self): - - n = range(100) - r = range(25) - - for i in xrange(self.rounds): - - l = n[:] - - for j in r: - - m = l[50:] - m = l[:25] - m = l[50:55] - l[:3] = n - m = l[:-1] - m = l[1:] - l[-1:] = n - - def calibrate(self): - - n = range(100) - r = range(25) - - for i in xrange(self.rounds): - for j in r: - pass - -class SmallLists(Test): - - version = 2.0 - operations = 5*(1+ 6 + 6 + 3 + 1) - rounds = 80000 - - def test(self): - - for i in xrange(self.rounds): - - l = [] - - append = l.append - append(2) - append(3) - append(4) - append(2) - append(3) - append(4) - - l[0] = 3 - l[1] = 4 - l[2] = 5 - l[3] = 3 - l[4] = 4 - l[5] = 5 - - l[:3] = [1,2,3] - m = l[:-1] - m = l[1:] - - l[-1:] = [4,5,6] - - l = [] - - append = l.append - append(2) - append(3) - append(4) - append(2) - append(3) - append(4) - - l[0] = 3 - l[1] = 4 - l[2] = 5 - l[3] = 3 - l[4] = 4 - l[5] = 5 - - l[:3] = [1,2,3] - m = l[:-1] - m = l[1:] - - l[-1:] = [4,5,6] - - l = [] - - append = l.append - append(2) - append(3) - append(4) - append(2) - append(3) - append(4) - - l[0] = 3 - l[1] = 4 - l[2] = 5 - l[3] = 3 - l[4] = 4 - l[5] = 5 - - l[:3] = [1,2,3] - m = l[:-1] - m = l[1:] - - l[-1:] = [4,5,6] - - l = [] - - append = l.append - append(2) - append(3) - append(4) - append(2) - append(3) - append(4) - - l[0] = 3 - l[1] = 4 - l[2] = 5 - l[3] = 3 - l[4] = 4 - l[5] = 5 - - l[:3] = [1,2,3] - m = l[:-1] - m = l[1:] - - l[-1:] = [4,5,6] - - l = [] - - append = l.append - append(2) - append(3) - append(4) - append(2) - append(3) - append(4) - - l[0] = 3 - l[1] = 4 - l[2] = 5 - l[3] = 3 - l[4] = 4 - l[5] = 5 - - l[:3] = [1,2,3] - m = l[:-1] - m = l[1:] - - l[-1:] = [4,5,6] - - def calibrate(self): - - for i in xrange(self.rounds): - pass diff --git a/Tools/pybench/pybench-2.0/Lookups.py b/Tools/pybench/pybench-2.0/Lookups.py deleted file mode 100644 index f20e7da..0000000 --- a/Tools/pybench/pybench-2.0/Lookups.py +++ /dev/null @@ -1,945 +0,0 @@ -from pybench import Test - -class SpecialClassAttribute(Test): - - version = 2.0 - operations = 5*(12 + 12) - rounds = 100000 - - def test(self): - - class c: - pass - - for i in xrange(self.rounds): - - c.__a = 2 - c.__b = 3 - c.__c = 4 - - c.__a = 2 - c.__b = 3 - c.__c = 4 - - c.__a = 2 - c.__b = 3 - c.__c = 4 - - c.__a = 2 - c.__b = 3 - c.__c = 4 - - x = c.__a - x = c.__b - x = c.__c - - x = c.__a - x = c.__b - x = c.__c - - x = c.__a - x = c.__b - x = c.__c - - x = c.__a - x = c.__b - x = c.__c - - c.__a = 2 - c.__b = 3 - c.__c = 4 - - c.__a = 2 - c.__b = 3 - c.__c = 4 - - c.__a = 2 - c.__b = 3 - c.__c = 4 - - c.__a = 2 - c.__b = 3 - c.__c = 4 - - x = c.__a - x = c.__b - x = c.__c - - x = c.__a - x = c.__b - x = c.__c - - x = c.__a - x = c.__b - x = c.__c - - x = c.__a - x = c.__b - x = c.__c - - c.__a = 2 - c.__b = 3 - c.__c = 4 - - c.__a = 2 - c.__b = 3 - c.__c = 4 - - c.__a = 2 - c.__b = 3 - c.__c = 4 - - c.__a = 2 - c.__b = 3 - c.__c = 4 - - x = c.__a - x = c.__b - x = c.__c - - x = c.__a - x = c.__b - x = c.__c - - x = c.__a - x = c.__b - x = c.__c - - x = c.__a - x = c.__b - x = c.__c - - c.__a = 2 - c.__b = 3 - c.__c = 4 - - c.__a = 2 - c.__b = 3 - c.__c = 4 - - c.__a = 2 - c.__b = 3 - c.__c = 4 - - c.__a = 2 - c.__b = 3 - c.__c = 4 - - x = c.__a - x = c.__b - x = c.__c - - x = c.__a - x = c.__b - x = c.__c - - x = c.__a - x = c.__b - x = c.__c - - x = c.__a - x = c.__b - x = c.__c - - c.__a = 2 - c.__b = 3 - c.__c = 4 - - c.__a = 2 - c.__b = 3 - c.__c = 4 - - c.__a = 2 - c.__b = 3 - c.__c = 4 - - c.__a = 2 - c.__b = 3 - c.__c = 4 - - x = c.__a - x = c.__b - x = c.__c - - x = c.__a - x = c.__b - x = c.__c - - x = c.__a - x = c.__b - x = c.__c - - x = c.__a - x = c.__b - x = c.__c - - def calibrate(self): - - class c: - pass - - for i in xrange(self.rounds): - pass - -class NormalClassAttribute(Test): - - version = 2.0 - operations = 5*(12 + 12) - rounds = 100000 - - def test(self): - - class c: - pass - - for i in xrange(self.rounds): - - c.a = 2 - c.b = 3 - c.c = 4 - - c.a = 2 - c.b = 3 - c.c = 4 - - c.a = 2 - c.b = 3 - c.c = 4 - - c.a = 2 - c.b = 3 - c.c = 4 - - - x = c.a - x = c.b - x = c.c - - x = c.a - x = c.b - x = c.c - - x = c.a - x = c.b - x = c.c - - x = c.a - x = c.b - x = c.c - - c.a = 2 - c.b = 3 - c.c = 4 - - c.a = 2 - c.b = 3 - c.c = 4 - - c.a = 2 - c.b = 3 - c.c = 4 - - c.a = 2 - c.b = 3 - c.c = 4 - - - x = c.a - x = c.b - x = c.c - - x = c.a - x = c.b - x = c.c - - x = c.a - x = c.b - x = c.c - - x = c.a - x = c.b - x = c.c - - c.a = 2 - c.b = 3 - c.c = 4 - - c.a = 2 - c.b = 3 - c.c = 4 - - c.a = 2 - c.b = 3 - c.c = 4 - - c.a = 2 - c.b = 3 - c.c = 4 - - - x = c.a - x = c.b - x = c.c - - x = c.a - x = c.b - x = c.c - - x = c.a - x = c.b - x = c.c - - x = c.a - x = c.b - x = c.c - - c.a = 2 - c.b = 3 - c.c = 4 - - c.a = 2 - c.b = 3 - c.c = 4 - - c.a = 2 - c.b = 3 - c.c = 4 - - c.a = 2 - c.b = 3 - c.c = 4 - - - x = c.a - x = c.b - x = c.c - - x = c.a - x = c.b - x = c.c - - x = c.a - x = c.b - x = c.c - - x = c.a - x = c.b - x = c.c - - c.a = 2 - c.b = 3 - c.c = 4 - - c.a = 2 - c.b = 3 - c.c = 4 - - c.a = 2 - c.b = 3 - c.c = 4 - - c.a = 2 - c.b = 3 - c.c = 4 - - - x = c.a - x = c.b - x = c.c - - x = c.a - x = c.b - x = c.c - - x = c.a - x = c.b - x = c.c - - x = c.a - x = c.b - x = c.c - - def calibrate(self): - - class c: - pass - - for i in xrange(self.rounds): - pass - -class SpecialInstanceAttribute(Test): - - version = 2.0 - operations = 5*(12 + 12) - rounds = 100000 - - def test(self): - - class c: - pass - o = c() - - for i in xrange(self.rounds): - - o.__a__ = 2 - o.__b__ = 3 - o.__c__ = 4 - - o.__a__ = 2 - o.__b__ = 3 - o.__c__ = 4 - - o.__a__ = 2 - o.__b__ = 3 - o.__c__ = 4 - - o.__a__ = 2 - o.__b__ = 3 - o.__c__ = 4 - - - x = o.__a__ - x = o.__b__ - x = o.__c__ - - x = o.__a__ - x = o.__b__ - x = o.__c__ - - x = o.__a__ - x = o.__b__ - x = o.__c__ - - x = o.__a__ - x = o.__b__ - x = o.__c__ - - o.__a__ = 2 - o.__b__ = 3 - o.__c__ = 4 - - o.__a__ = 2 - o.__b__ = 3 - o.__c__ = 4 - - o.__a__ = 2 - o.__b__ = 3 - o.__c__ = 4 - - o.__a__ = 2 - o.__b__ = 3 - o.__c__ = 4 - - - x = o.__a__ - x = o.__b__ - x = o.__c__ - - x = o.__a__ - x = o.__b__ - x = o.__c__ - - x = o.__a__ - x = o.__b__ - x = o.__c__ - - x = o.__a__ - x = o.__b__ - x = o.__c__ - - o.__a__ = 2 - o.__b__ = 3 - o.__c__ = 4 - - o.__a__ = 2 - o.__b__ = 3 - o.__c__ = 4 - - o.__a__ = 2 - o.__b__ = 3 - o.__c__ = 4 - - o.__a__ = 2 - o.__b__ = 3 - o.__c__ = 4 - - - x = o.__a__ - x = o.__b__ - x = o.__c__ - - x = o.__a__ - x = o.__b__ - x = o.__c__ - - x = o.__a__ - x = o.__b__ - x = o.__c__ - - x = o.__a__ - x = o.__b__ - x = o.__c__ - - o.__a__ = 2 - o.__b__ = 3 - o.__c__ = 4 - - o.__a__ = 2 - o.__b__ = 3 - o.__c__ = 4 - - o.__a__ = 2 - o.__b__ = 3 - o.__c__ = 4 - - o.__a__ = 2 - o.__b__ = 3 - o.__c__ = 4 - - - x = o.__a__ - x = o.__b__ - x = o.__c__ - - x = o.__a__ - x = o.__b__ - x = o.__c__ - - x = o.__a__ - x = o.__b__ - x = o.__c__ - - x = o.__a__ - x = o.__b__ - x = o.__c__ - - o.__a__ = 2 - o.__b__ = 3 - o.__c__ = 4 - - o.__a__ = 2 - o.__b__ = 3 - o.__c__ = 4 - - o.__a__ = 2 - o.__b__ = 3 - o.__c__ = 4 - - o.__a__ = 2 - o.__b__ = 3 - o.__c__ = 4 - - - x = o.__a__ - x = o.__b__ - x = o.__c__ - - x = o.__a__ - x = o.__b__ - x = o.__c__ - - x = o.__a__ - x = o.__b__ - x = o.__c__ - - x = o.__a__ - x = o.__b__ - x = o.__c__ - - def calibrate(self): - - class c: - pass - o = c() - - for i in xrange(self.rounds): - pass - -class NormalInstanceAttribute(Test): - - version = 2.0 - operations = 5*(12 + 12) - rounds = 100000 - - def test(self): - - class c: - pass - o = c() - - for i in xrange(self.rounds): - - o.a = 2 - o.b = 3 - o.c = 4 - - o.a = 2 - o.b = 3 - o.c = 4 - - o.a = 2 - o.b = 3 - o.c = 4 - - o.a = 2 - o.b = 3 - o.c = 4 - - - x = o.a - x = o.b - x = o.c - - x = o.a - x = o.b - x = o.c - - x = o.a - x = o.b - x = o.c - - x = o.a - x = o.b - x = o.c - - o.a = 2 - o.b = 3 - o.c = 4 - - o.a = 2 - o.b = 3 - o.c = 4 - - o.a = 2 - o.b = 3 - o.c = 4 - - o.a = 2 - o.b = 3 - o.c = 4 - - - x = o.a - x = o.b - x = o.c - - x = o.a - x = o.b - x = o.c - - x = o.a - x = o.b - x = o.c - - x = o.a - x = o.b - x = o.c - - o.a = 2 - o.b = 3 - o.c = 4 - - o.a = 2 - o.b = 3 - o.c = 4 - - o.a = 2 - o.b = 3 - o.c = 4 - - o.a = 2 - o.b = 3 - o.c = 4 - - - x = o.a - x = o.b - x = o.c - - x = o.a - x = o.b - x = o.c - - x = o.a - x = o.b - x = o.c - - x = o.a - x = o.b - x = o.c - - o.a = 2 - o.b = 3 - o.c = 4 - - o.a = 2 - o.b = 3 - o.c = 4 - - o.a = 2 - o.b = 3 - o.c = 4 - - o.a = 2 - o.b = 3 - o.c = 4 - - - x = o.a - x = o.b - x = o.c - - x = o.a - x = o.b - x = o.c - - x = o.a - x = o.b - x = o.c - - x = o.a - x = o.b - x = o.c - - o.a = 2 - o.b = 3 - o.c = 4 - - o.a = 2 - o.b = 3 - o.c = 4 - - o.a = 2 - o.b = 3 - o.c = 4 - - o.a = 2 - o.b = 3 - o.c = 4 - - - x = o.a - x = o.b - x = o.c - - x = o.a - x = o.b - x = o.c - - x = o.a - x = o.b - x = o.c - - x = o.a - x = o.b - x = o.c - - def calibrate(self): - - class c: - pass - o = c() - - for i in xrange(self.rounds): - pass - -class BuiltinMethodLookup(Test): - - version = 2.0 - operations = 5*(3*5 + 3*5) - rounds = 70000 - - def test(self): - - l = [] - d = {} - - for i in xrange(self.rounds): - - l.append - l.append - l.append - l.append - l.append - - l.insert - l.insert - l.insert - l.insert - l.insert - - l.sort - l.sort - l.sort - l.sort - l.sort - - d.has_key - d.has_key - d.has_key - d.has_key - d.has_key - - d.items - d.items - d.items - d.items - d.items - - d.get - d.get - d.get - d.get - d.get - - l.append - l.append - l.append - l.append - l.append - - l.insert - l.insert - l.insert - l.insert - l.insert - - l.sort - l.sort - l.sort - l.sort - l.sort - - d.has_key - d.has_key - d.has_key - d.has_key - d.has_key - - d.items - d.items - d.items - d.items - d.items - - d.get - d.get - d.get - d.get - d.get - - l.append - l.append - l.append - l.append - l.append - - l.insert - l.insert - l.insert - l.insert - l.insert - - l.sort - l.sort - l.sort - l.sort - l.sort - - d.has_key - d.has_key - d.has_key - d.has_key - d.has_key - - d.items - d.items - d.items - d.items - d.items - - d.get - d.get - d.get - d.get - d.get - - l.append - l.append - l.append - l.append - l.append - - l.insert - l.insert - l.insert - l.insert - l.insert - - l.sort - l.sort - l.sort - l.sort - l.sort - - d.has_key - d.has_key - d.has_key - d.has_key - d.has_key - - d.items - d.items - d.items - d.items - d.items - - d.get - d.get - d.get - d.get - d.get - - l.append - l.append - l.append - l.append - l.append - - l.insert - l.insert - l.insert - l.insert - l.insert - - l.sort - l.sort - l.sort - l.sort - l.sort - - d.has_key - d.has_key - d.has_key - d.has_key - d.has_key - - d.items - d.items - d.items - d.items - d.items - - d.get - d.get - d.get - d.get - d.get - - def calibrate(self): - - l = [] - d = {} - - for i in xrange(self.rounds): - pass diff --git a/Tools/pybench/pybench-2.0/NewInstances.py b/Tools/pybench/pybench-2.0/NewInstances.py deleted file mode 100644 index 258beba..0000000 --- a/Tools/pybench/pybench-2.0/NewInstances.py +++ /dev/null @@ -1,75 +0,0 @@ -from pybench import Test - -# Check for new-style class support: -try: - class c(object): - pass -except NameError: - raise ImportError - -### - -class CreateNewInstances(Test): - - version = 2.0 - operations = 3 + 7 + 4 - rounds = 60000 - - def test(self): - - class c(object): - pass - - class d(object): - def __init__(self,a,b,c): - self.a = a - self.b = b - self.c = c - - class e(object): - def __init__(self,a,b,c=4): - self.a = a - self.b = b - self.c = c - self.d = a - self.e = b - self.f = c - - for i in xrange(self.rounds): - o = c() - o1 = c() - o2 = c() - p = d(i,i,3) - p1 = d(i,i,3) - p2 = d(i,3,3) - p3 = d(3,i,3) - p4 = d(i,i,i) - p5 = d(3,i,3) - p6 = d(i,i,i) - q = e(i,i,3) - q1 = e(i,i,3) - q2 = e(i,i,3) - q3 = e(i,i) - - def calibrate(self): - - class c(object): - pass - - class d(object): - def __init__(self,a,b,c): - self.a = a - self.b = b - self.c = c - - class e(object): - def __init__(self,a,b,c=4): - self.a = a - self.b = b - self.c = c - self.d = a - self.e = b - self.f = c - - for i in xrange(self.rounds): - pass diff --git a/Tools/pybench/pybench-2.0/Numbers.py b/Tools/pybench/pybench-2.0/Numbers.py deleted file mode 100644 index 10c8940..0000000 --- a/Tools/pybench/pybench-2.0/Numbers.py +++ /dev/null @@ -1,784 +0,0 @@ -from pybench import Test - -class CompareIntegers(Test): - - version = 2.0 - operations = 30 * 5 - rounds = 120000 - - def test(self): - - for i in xrange(self.rounds): - - 2 < 3 - 2 > 3 - 2 == 3 - 2 > 3 - 2 < 3 - - 2 < 3 - 2 > 3 - 2 == 3 - 2 > 3 - 2 < 3 - - 2 < 3 - 2 > 3 - 2 == 3 - 2 > 3 - 2 < 3 - - 2 < 3 - 2 > 3 - 2 == 3 - 2 > 3 - 2 < 3 - - 2 < 3 - 2 > 3 - 2 == 3 - 2 > 3 - 2 < 3 - - 2 < 3 - 2 > 3 - 2 == 3 - 2 > 3 - 2 < 3 - - 2 < 3 - 2 > 3 - 2 == 3 - 2 > 3 - 2 < 3 - - 2 < 3 - 2 > 3 - 2 == 3 - 2 > 3 - 2 < 3 - - 2 < 3 - 2 > 3 - 2 == 3 - 2 > 3 - 2 < 3 - - 2 < 3 - 2 > 3 - 2 == 3 - 2 > 3 - 2 < 3 - - 2 < 3 - 2 > 3 - 2 == 3 - 2 > 3 - 2 < 3 - - 2 < 3 - 2 > 3 - 2 == 3 - 2 > 3 - 2 < 3 - - 2 < 3 - 2 > 3 - 2 == 3 - 2 > 3 - 2 < 3 - - 2 < 3 - 2 > 3 - 2 == 3 - 2 > 3 - 2 < 3 - - 2 < 3 - 2 > 3 - 2 == 3 - 2 > 3 - 2 < 3 - - 2 < 3 - 2 > 3 - 2 == 3 - 2 > 3 - 2 < 3 - - 2 < 3 - 2 > 3 - 2 == 3 - 2 > 3 - 2 < 3 - - 2 < 3 - 2 > 3 - 2 == 3 - 2 > 3 - 2 < 3 - - 2 < 3 - 2 > 3 - 2 == 3 - 2 > 3 - 2 < 3 - - 2 < 3 - 2 > 3 - 2 == 3 - 2 > 3 - 2 < 3 - - 2 < 3 - 2 > 3 - 2 == 3 - 2 > 3 - 2 < 3 - - 2 < 3 - 2 > 3 - 2 == 3 - 2 > 3 - 2 < 3 - - 2 < 3 - 2 > 3 - 2 == 3 - 2 > 3 - 2 < 3 - - 2 < 3 - 2 > 3 - 2 == 3 - 2 > 3 - 2 < 3 - - 2 < 3 - 2 > 3 - 2 == 3 - 2 > 3 - 2 < 3 - - 2 < 3 - 2 > 3 - 2 == 3 - 2 > 3 - 2 < 3 - - 2 < 3 - 2 > 3 - 2 == 3 - 2 > 3 - 2 < 3 - - 2 < 3 - 2 > 3 - 2 == 3 - 2 > 3 - 2 < 3 - - 2 < 3 - 2 > 3 - 2 == 3 - 2 > 3 - 2 < 3 - - 2 < 3 - 2 > 3 - 2 == 3 - 2 > 3 - 2 < 3 - - def calibrate(self): - - for i in xrange(self.rounds): - pass - - -class CompareFloats(Test): - - version = 2.0 - operations = 30 * 5 - rounds = 80000 - - def test(self): - - for i in xrange(self.rounds): - - 2.1 < 3.31 - 2.1 > 3.31 - 2.1 == 3.31 - 2.1 > 3.31 - 2.1 < 3.31 - - 2.1 < 3.31 - 2.1 > 3.31 - 2.1 == 3.31 - 2.1 > 3.31 - 2.1 < 3.31 - - 2.1 < 3.31 - 2.1 > 3.31 - 2.1 == 3.31 - 2.1 > 3.31 - 2.1 < 3.31 - - 2.1 < 3.31 - 2.1 > 3.31 - 2.1 == 3.31 - 2.1 > 3.31 - 2.1 < 3.31 - - 2.1 < 3.31 - 2.1 > 3.31 - 2.1 == 3.31 - 2.1 > 3.31 - 2.1 < 3.31 - - 2.1 < 3.31 - 2.1 > 3.31 - 2.1 == 3.31 - 2.1 > 3.31 - 2.1 < 3.31 - - 2.1 < 3.31 - 2.1 > 3.31 - 2.1 == 3.31 - 2.1 > 3.31 - 2.1 < 3.31 - - 2.1 < 3.31 - 2.1 > 3.31 - 2.1 == 3.31 - 2.1 > 3.31 - 2.1 < 3.31 - - 2.1 < 3.31 - 2.1 > 3.31 - 2.1 == 3.31 - 2.1 > 3.31 - 2.1 < 3.31 - - 2.1 < 3.31 - 2.1 > 3.31 - 2.1 == 3.31 - 2.1 > 3.31 - 2.1 < 3.31 - - 2.1 < 3.31 - 2.1 > 3.31 - 2.1 == 3.31 - 2.1 > 3.31 - 2.1 < 3.31 - - 2.1 < 3.31 - 2.1 > 3.31 - 2.1 == 3.31 - 2.1 > 3.31 - 2.1 < 3.31 - - 2.1 < 3.31 - 2.1 > 3.31 - 2.1 == 3.31 - 2.1 > 3.31 - 2.1 < 3.31 - - 2.1 < 3.31 - 2.1 > 3.31 - 2.1 == 3.31 - 2.1 > 3.31 - 2.1 < 3.31 - - 2.1 < 3.31 - 2.1 > 3.31 - 2.1 == 3.31 - 2.1 > 3.31 - 2.1 < 3.31 - - 2.1 < 3.31 - 2.1 > 3.31 - 2.1 == 3.31 - 2.1 > 3.31 - 2.1 < 3.31 - - 2.1 < 3.31 - 2.1 > 3.31 - 2.1 == 3.31 - 2.1 > 3.31 - 2.1 < 3.31 - - 2.1 < 3.31 - 2.1 > 3.31 - 2.1 == 3.31 - 2.1 > 3.31 - 2.1 < 3.31 - - 2.1 < 3.31 - 2.1 > 3.31 - 2.1 == 3.31 - 2.1 > 3.31 - 2.1 < 3.31 - - 2.1 < 3.31 - 2.1 > 3.31 - 2.1 == 3.31 - 2.1 > 3.31 - 2.1 < 3.31 - - 2.1 < 3.31 - 2.1 > 3.31 - 2.1 == 3.31 - 2.1 > 3.31 - 2.1 < 3.31 - - 2.1 < 3.31 - 2.1 > 3.31 - 2.1 == 3.31 - 2.1 > 3.31 - 2.1 < 3.31 - - 2.1 < 3.31 - 2.1 > 3.31 - 2.1 == 3.31 - 2.1 > 3.31 - 2.1 < 3.31 - - 2.1 < 3.31 - 2.1 > 3.31 - 2.1 == 3.31 - 2.1 > 3.31 - 2.1 < 3.31 - - 2.1 < 3.31 - 2.1 > 3.31 - 2.1 == 3.31 - 2.1 > 3.31 - 2.1 < 3.31 - - 2.1 < 3.31 - 2.1 > 3.31 - 2.1 == 3.31 - 2.1 > 3.31 - 2.1 < 3.31 - - 2.1 < 3.31 - 2.1 > 3.31 - 2.1 == 3.31 - 2.1 > 3.31 - 2.1 < 3.31 - - 2.1 < 3.31 - 2.1 > 3.31 - 2.1 == 3.31 - 2.1 > 3.31 - 2.1 < 3.31 - - 2.1 < 3.31 - 2.1 > 3.31 - 2.1 == 3.31 - 2.1 > 3.31 - 2.1 < 3.31 - - 2.1 < 3.31 - 2.1 > 3.31 - 2.1 == 3.31 - 2.1 > 3.31 - 2.1 < 3.31 - - def calibrate(self): - - for i in xrange(self.rounds): - pass - - -class CompareFloatsIntegers(Test): - - version = 2.0 - operations = 30 * 5 - rounds = 60000 - - def test(self): - - for i in xrange(self.rounds): - - 2.1 < 4 - 2.1 > 4 - 2.1 == 4 - 2.1 > 4 - 2.1 < 4 - - 2.1 < 4 - 2.1 > 4 - 2.1 == 4 - 2.1 > 4 - 2.1 < 4 - - 2.1 < 4 - 2.1 > 4 - 2.1 == 4 - 2.1 > 4 - 2.1 < 4 - - 2.1 < 4 - 2.1 > 4 - 2.1 == 4 - 2.1 > 4 - 2.1 < 4 - - 2.1 < 4 - 2.1 > 4 - 2.1 == 4 - 2.1 > 4 - 2.1 < 4 - - 2.1 < 4 - 2.1 > 4 - 2.1 == 4 - 2.1 > 4 - 2.1 < 4 - - 2.1 < 4 - 2.1 > 4 - 2.1 == 4 - 2.1 > 4 - 2.1 < 4 - - 2.1 < 4 - 2.1 > 4 - 2.1 == 4 - 2.1 > 4 - 2.1 < 4 - - 2.1 < 4 - 2.1 > 4 - 2.1 == 4 - 2.1 > 4 - 2.1 < 4 - - 2.1 < 4 - 2.1 > 4 - 2.1 == 4 - 2.1 > 4 - 2.1 < 4 - - 2.1 < 4 - 2.1 > 4 - 2.1 == 4 - 2.1 > 4 - 2.1 < 4 - - 2.1 < 4 - 2.1 > 4 - 2.1 == 4 - 2.1 > 4 - 2.1 < 4 - - 2.1 < 4 - 2.1 > 4 - 2.1 == 4 - 2.1 > 4 - 2.1 < 4 - - 2.1 < 4 - 2.1 > 4 - 2.1 == 4 - 2.1 > 4 - 2.1 < 4 - - 2.1 < 4 - 2.1 > 4 - 2.1 == 4 - 2.1 > 4 - 2.1 < 4 - - 2.1 < 4 - 2.1 > 4 - 2.1 == 4 - 2.1 > 4 - 2.1 < 4 - - 2.1 < 4 - 2.1 > 4 - 2.1 == 4 - 2.1 > 4 - 2.1 < 4 - - 2.1 < 4 - 2.1 > 4 - 2.1 == 4 - 2.1 > 4 - 2.1 < 4 - - 2.1 < 4 - 2.1 > 4 - 2.1 == 4 - 2.1 > 4 - 2.1 < 4 - - 2.1 < 4 - 2.1 > 4 - 2.1 == 4 - 2.1 > 4 - 2.1 < 4 - - 2.1 < 4 - 2.1 > 4 - 2.1 == 4 - 2.1 > 4 - 2.1 < 4 - - 2.1 < 4 - 2.1 > 4 - 2.1 == 4 - 2.1 > 4 - 2.1 < 4 - - 2.1 < 4 - 2.1 > 4 - 2.1 == 4 - 2.1 > 4 - 2.1 < 4 - - 2.1 < 4 - 2.1 > 4 - 2.1 == 4 - 2.1 > 4 - 2.1 < 4 - - 2.1 < 4 - 2.1 > 4 - 2.1 == 4 - 2.1 > 4 - 2.1 < 4 - - 2.1 < 4 - 2.1 > 4 - 2.1 == 4 - 2.1 > 4 - 2.1 < 4 - - 2.1 < 4 - 2.1 > 4 - 2.1 == 4 - 2.1 > 4 - 2.1 < 4 - - 2.1 < 4 - 2.1 > 4 - 2.1 == 4 - 2.1 > 4 - 2.1 < 4 - - 2.1 < 4 - 2.1 > 4 - 2.1 == 4 - 2.1 > 4 - 2.1 < 4 - - 2.1 < 4 - 2.1 > 4 - 2.1 == 4 - 2.1 > 4 - 2.1 < 4 - - def calibrate(self): - - for i in xrange(self.rounds): - pass - - -class CompareLongs(Test): - - version = 2.0 - operations = 30 * 5 - rounds = 70000 - - def test(self): - - for i in xrange(self.rounds): - - 1234567890L < 3456789012345L - 1234567890L > 3456789012345L - 1234567890L == 3456789012345L - 1234567890L > 3456789012345L - 1234567890L < 3456789012345L - - 1234567890L < 3456789012345L - 1234567890L > 3456789012345L - 1234567890L == 3456789012345L - 1234567890L > 3456789012345L - 1234567890L < 3456789012345L - - 1234567890L < 3456789012345L - 1234567890L > 3456789012345L - 1234567890L == 3456789012345L - 1234567890L > 3456789012345L - 1234567890L < 3456789012345L - - 1234567890L < 3456789012345L - 1234567890L > 3456789012345L - 1234567890L == 3456789012345L - 1234567890L > 3456789012345L - 1234567890L < 3456789012345L - - 1234567890L < 3456789012345L - 1234567890L > 3456789012345L - 1234567890L == 3456789012345L - 1234567890L > 3456789012345L - 1234567890L < 3456789012345L - - 1234567890L < 3456789012345L - 1234567890L > 3456789012345L - 1234567890L == 3456789012345L - 1234567890L > 3456789012345L - 1234567890L < 3456789012345L - - 1234567890L < 3456789012345L - 1234567890L > 3456789012345L - 1234567890L == 3456789012345L - 1234567890L > 3456789012345L - 1234567890L < 3456789012345L - - 1234567890L < 3456789012345L - 1234567890L > 3456789012345L - 1234567890L == 3456789012345L - 1234567890L > 3456789012345L - 1234567890L < 3456789012345L - - 1234567890L < 3456789012345L - 1234567890L > 3456789012345L - 1234567890L == 3456789012345L - 1234567890L > 3456789012345L - 1234567890L < 3456789012345L - - 1234567890L < 3456789012345L - 1234567890L > 3456789012345L - 1234567890L == 3456789012345L - 1234567890L > 3456789012345L - 1234567890L < 3456789012345L - - 1234567890L < 3456789012345L - 1234567890L > 3456789012345L - 1234567890L == 3456789012345L - 1234567890L > 3456789012345L - 1234567890L < 3456789012345L - - 1234567890L < 3456789012345L - 1234567890L > 3456789012345L - 1234567890L == 3456789012345L - 1234567890L > 3456789012345L - 1234567890L < 3456789012345L - - 1234567890L < 3456789012345L - 1234567890L > 3456789012345L - 1234567890L == 3456789012345L - 1234567890L > 3456789012345L - 1234567890L < 3456789012345L - - 1234567890L < 3456789012345L - 1234567890L > 3456789012345L - 1234567890L == 3456789012345L - 1234567890L > 3456789012345L - 1234567890L < 3456789012345L - - 1234567890L < 3456789012345L - 1234567890L > 3456789012345L - 1234567890L == 3456789012345L - 1234567890L > 3456789012345L - 1234567890L < 3456789012345L - - 1234567890L < 3456789012345L - 1234567890L > 3456789012345L - 1234567890L == 3456789012345L - 1234567890L > 3456789012345L - 1234567890L < 3456789012345L - - 1234567890L < 3456789012345L - 1234567890L > 3456789012345L - 1234567890L == 3456789012345L - 1234567890L > 3456789012345L - 1234567890L < 3456789012345L - - 1234567890L < 3456789012345L - 1234567890L > 3456789012345L - 1234567890L == 3456789012345L - 1234567890L > 3456789012345L - 1234567890L < 3456789012345L - - 1234567890L < 3456789012345L - 1234567890L > 3456789012345L - 1234567890L == 3456789012345L - 1234567890L > 3456789012345L - 1234567890L < 3456789012345L - - 1234567890L < 3456789012345L - 1234567890L > 3456789012345L - 1234567890L == 3456789012345L - 1234567890L > 3456789012345L - 1234567890L < 3456789012345L - - 1234567890L < 3456789012345L - 1234567890L > 3456789012345L - 1234567890L == 3456789012345L - 1234567890L > 3456789012345L - 1234567890L < 3456789012345L - - 1234567890L < 3456789012345L - 1234567890L > 3456789012345L - 1234567890L == 3456789012345L - 1234567890L > 3456789012345L - 1234567890L < 3456789012345L - - 1234567890L < 3456789012345L - 1234567890L > 3456789012345L - 1234567890L == 3456789012345L - 1234567890L > 3456789012345L - 1234567890L < 3456789012345L - - 1234567890L < 3456789012345L - 1234567890L > 3456789012345L - 1234567890L == 3456789012345L - 1234567890L > 3456789012345L - 1234567890L < 3456789012345L - - 1234567890L < 3456789012345L - 1234567890L > 3456789012345L - 1234567890L == 3456789012345L - 1234567890L > 3456789012345L - 1234567890L < 3456789012345L - - 1234567890L < 3456789012345L - 1234567890L > 3456789012345L - 1234567890L == 3456789012345L - 1234567890L > 3456789012345L - 1234567890L < 3456789012345L - - 1234567890L < 3456789012345L - 1234567890L > 3456789012345L - 1234567890L == 3456789012345L - 1234567890L > 3456789012345L - 1234567890L < 3456789012345L - - 1234567890L < 3456789012345L - 1234567890L > 3456789012345L - 1234567890L == 3456789012345L - 1234567890L > 3456789012345L - 1234567890L < 3456789012345L - - 1234567890L < 3456789012345L - 1234567890L > 3456789012345L - 1234567890L == 3456789012345L - 1234567890L > 3456789012345L - 1234567890L < 3456789012345L - - 1234567890L < 3456789012345L - 1234567890L > 3456789012345L - 1234567890L == 3456789012345L - 1234567890L > 3456789012345L - 1234567890L < 3456789012345L - - def calibrate(self): - - for i in xrange(self.rounds): - pass diff --git a/Tools/pybench/pybench-2.0/README b/Tools/pybench/pybench-2.0/README deleted file mode 100644 index 022c8de..0000000 --- a/Tools/pybench/pybench-2.0/README +++ /dev/null @@ -1,368 +0,0 @@ -________________________________________________________________________ - -PYBENCH - A Python Benchmark Suite -________________________________________________________________________ - - Extendable suite of of low-level benchmarks for measuring - the performance of the Python implementation - (interpreter, compiler or VM). - -pybench is a collection of tests that provides a standardized way to -measure the performance of Python implementations. It takes a very -close look at different aspects of Python programs and let's you -decide which factors are more important to you than others, rather -than wrapping everything up in one number, like the other performance -tests do (e.g. pystone which is included in the Python Standard -Library). - -pybench has been used in the past by several Python developers to -track down performance bottlenecks or to demonstrate the impact of -optimizations and new features in Python. - -The command line interface for pybench is the file pybench.py. Run -this script with option '--help' to get a listing of the possible -options. Without options, pybench will simply execute the benchmark -and then print out a report to stdout. - - -Micro-Manual ------------- - -Run 'pybench.py -h' to see the help screen. Run 'pybench.py' to run -the benchmark suite using default settings and 'pybench.py -f <file>' -to have it store the results in a file too. - -It is usually a good idea to run pybench.py multiple times to see -whether the environment, timers and benchmark run-times are suitable -for doing benchmark tests. - -You can use the comparison feature of pybench.py ('pybench.py -c -<file>') to check how well the system behaves in comparison to a -reference run. - -If the differences are well below 10% for each test, then you have a -system that is good for doing benchmark testings. Of you get random -differences of more than 10% or significant differences between the -values for minimum and average time, then you likely have some -background processes running which cause the readings to become -inconsistent. Examples include: web-browsers, email clients, RSS -readers, music players, backup programs, etc. - -If you are only interested in a few tests of the whole suite, you can -use the filtering option, e.g. 'pybench.py -t string' will only -run/show the tests that have 'string' in their name. - -This is the current output of pybench.py --help: - -""" ------------------------------------------------------------------------- -PYBENCH - a benchmark test suite for Python interpreters/compilers. ------------------------------------------------------------------------- - -Synopsis: - pybench.py [option] files... - -Options and default settings: - -n arg number of rounds (10) - -f arg save benchmark to file arg () - -c arg compare benchmark with the one in file arg () - -s arg show benchmark in file arg, then exit () - -w arg set warp factor to arg (10) - -t arg run only tests with names matching arg () - -C arg set the number of calibration runs to arg (20) - -d hide noise in comparisons (0) - -v verbose output (not recommended) (0) - --with-gc enable garbage collection (0) - --with-syscheck use default sys check interval (0) - --timer arg use given timer (time.time) - -h show this help text - --help show this help text - --debug enable debugging - --copyright show copyright - --examples show examples of usage - -Version: - 2.0 - -The normal operation is to run the suite and display the -results. Use -f to save them for later reuse or comparisons. - -Available timers: - - time.time - time.clock - systimes.processtime - -Examples: - -python2.1 pybench.py -f p21.pybench -python2.5 pybench.py -f p25.pybench -python pybench.py -s p25.pybench -c p21.pybench -""" - -License -------- - -See LICENSE file. - - -Sample output -------------- - -""" -------------------------------------------------------------------------------- -PYBENCH 2.0 -------------------------------------------------------------------------------- -* using Python 2.4.2 -* disabled garbage collection -* system check interval set to maximum: 2147483647 -* using timer: time.time - -Calibrating tests. Please wait... - -Running 10 round(s) of the suite at warp factor 10: - -* Round 1 done in 6.388 seconds. -* Round 2 done in 6.485 seconds. -* Round 3 done in 6.786 seconds. -... -* Round 10 done in 6.546 seconds. - -------------------------------------------------------------------------------- -Benchmark: 2006-06-12 12:09:25 -------------------------------------------------------------------------------- - - Rounds: 10 - Warp: 10 - Timer: time.time - - Machine Details: - Platform ID: Linux-2.6.8-24.19-default-x86_64-with-SuSE-9.2-x86-64 - Processor: x86_64 - - Python: - Executable: /usr/local/bin/python - Version: 2.4.2 - Compiler: GCC 3.3.4 (pre 3.3.5 20040809) - Bits: 64bit - Build: Oct 1 2005 15:24:35 (#1) - Unicode: UCS2 - - -Test minimum average operation overhead -------------------------------------------------------------------------------- - BuiltinFunctionCalls: 126ms 145ms 0.28us 0.274ms - BuiltinMethodLookup: 124ms 130ms 0.12us 0.316ms - CompareFloats: 109ms 110ms 0.09us 0.361ms - CompareFloatsIntegers: 100ms 104ms 0.12us 0.271ms - CompareIntegers: 137ms 138ms 0.08us 0.542ms - CompareInternedStrings: 124ms 127ms 0.08us 1.367ms - CompareLongs: 100ms 104ms 0.10us 0.316ms - CompareStrings: 111ms 115ms 0.12us 0.929ms - CompareUnicode: 108ms 128ms 0.17us 0.693ms - ConcatStrings: 142ms 155ms 0.31us 0.562ms - ConcatUnicode: 119ms 127ms 0.42us 0.384ms - CreateInstances: 123ms 128ms 1.14us 0.367ms - CreateNewInstances: 121ms 126ms 1.49us 0.335ms - CreateStringsWithConcat: 130ms 135ms 0.14us 0.916ms - CreateUnicodeWithConcat: 130ms 135ms 0.34us 0.361ms - DictCreation: 108ms 109ms 0.27us 0.361ms - DictWithFloatKeys: 149ms 153ms 0.17us 0.678ms - DictWithIntegerKeys: 124ms 126ms 0.11us 0.915ms - DictWithStringKeys: 114ms 117ms 0.10us 0.905ms - ForLoops: 110ms 111ms 4.46us 0.063ms - IfThenElse: 118ms 119ms 0.09us 0.685ms - ListSlicing: 116ms 120ms 8.59us 0.103ms - NestedForLoops: 125ms 137ms 0.09us 0.019ms - NormalClassAttribute: 124ms 136ms 0.11us 0.457ms - NormalInstanceAttribute: 110ms 117ms 0.10us 0.454ms - PythonFunctionCalls: 107ms 113ms 0.34us 0.271ms - PythonMethodCalls: 140ms 149ms 0.66us 0.141ms - Recursion: 156ms 166ms 3.32us 0.452ms - SecondImport: 112ms 118ms 1.18us 0.180ms - SecondPackageImport: 118ms 127ms 1.27us 0.180ms - SecondSubmoduleImport: 140ms 151ms 1.51us 0.180ms - SimpleComplexArithmetic: 128ms 139ms 0.16us 0.361ms - SimpleDictManipulation: 134ms 136ms 0.11us 0.452ms - SimpleFloatArithmetic: 110ms 113ms 0.09us 0.571ms - SimpleIntFloatArithmetic: 106ms 111ms 0.08us 0.548ms - SimpleIntegerArithmetic: 106ms 109ms 0.08us 0.544ms - SimpleListManipulation: 103ms 113ms 0.10us 0.587ms - SimpleLongArithmetic: 112ms 118ms 0.18us 0.271ms - SmallLists: 105ms 116ms 0.17us 0.366ms - SmallTuples: 108ms 128ms 0.24us 0.406ms - SpecialClassAttribute: 119ms 136ms 0.11us 0.453ms - SpecialInstanceAttribute: 143ms 155ms 0.13us 0.454ms - StringMappings: 115ms 121ms 0.48us 0.405ms - StringPredicates: 120ms 129ms 0.18us 2.064ms - StringSlicing: 111ms 127ms 0.23us 0.781ms - TryExcept: 125ms 126ms 0.06us 0.681ms - TryRaiseExcept: 133ms 137ms 2.14us 0.361ms - TupleSlicing: 117ms 120ms 0.46us 0.066ms - UnicodeMappings: 156ms 160ms 4.44us 0.429ms - UnicodePredicates: 117ms 121ms 0.22us 2.487ms - UnicodeProperties: 115ms 153ms 0.38us 2.070ms - UnicodeSlicing: 126ms 129ms 0.26us 0.689ms -------------------------------------------------------------------------------- -Totals: 6283ms 6673ms -""" -________________________________________________________________________ - -Writing New Tests -________________________________________________________________________ - -pybench tests are simple modules defining one or more pybench.Test -subclasses. - -Writing a test essentially boils down to providing two methods: -.test() which runs .rounds number of .operations test operations each -and .calibrate() which does the same except that it doesn't actually -execute the operations. - - -Here's an example: ------------------- - -from pybench import Test - -class IntegerCounting(Test): - - # Version number of the test as float (x.yy); this is important - # for comparisons of benchmark runs - tests with unequal version - # number will not get compared. - version = 1.0 - - # The number of abstract operations done in each round of the - # test. An operation is the basic unit of what you want to - # measure. The benchmark will output the amount of run-time per - # operation. Note that in order to raise the measured timings - # significantly above noise level, it is often required to repeat - # sets of operations more than once per test round. The measured - # overhead per test round should be less than 1 second. - operations = 20 - - # Number of rounds to execute per test run. This should be - # adjusted to a figure that results in a test run-time of between - # 1-2 seconds (at warp 1). - rounds = 100000 - - def test(self): - - """ Run the test. - - The test needs to run self.rounds executing - self.operations number of operations each. - - """ - # Init the test - a = 1 - - # Run test rounds - # - # NOTE: Use xrange() for all test loops unless you want to face - # a 20MB process ! - # - for i in xrange(self.rounds): - - # Repeat the operations per round to raise the run-time - # per operation significantly above the noise level of the - # for-loop overhead. - - # Execute 20 operations (a += 1): - a += 1 - a += 1 - a += 1 - a += 1 - a += 1 - a += 1 - a += 1 - a += 1 - a += 1 - a += 1 - a += 1 - a += 1 - a += 1 - a += 1 - a += 1 - a += 1 - a += 1 - a += 1 - a += 1 - a += 1 - - def calibrate(self): - - """ Calibrate the test. - - This method should execute everything that is needed to - setup and run the test - except for the actual operations - that you intend to measure. pybench uses this method to - measure the test implementation overhead. - - """ - # Init the test - a = 1 - - # Run test rounds (without actually doing any operation) - for i in xrange(self.rounds): - - # Skip the actual execution of the operations, since we - # only want to measure the test's administration overhead. - pass - -Registering a new test module ------------------------------ - -To register a test module with pybench, the classes need to be -imported into the pybench.Setup module. pybench will then scan all the -symbols defined in that module for subclasses of pybench.Test and -automatically add them to the benchmark suite. - - -Breaking Comparability ----------------------- - -If a change is made to any individual test that means it is no -longer strictly comparable with previous runs, the '.version' class -variable should be updated. Therefafter, comparisons with previous -versions of the test will list as "n/a" to reflect the change. - - -Version History ---------------- - - 2.0: rewrote parts of pybench which resulted in more repeatable - timings: - - made timer a parameter - - changed the platform default timer to use high-resolution - timers rather than process timers (which have a much lower - resolution) - - added option to select timer - - added process time timer (using systimes.py) - - changed to use min() as timing estimator (average - is still taken as well to provide an idea of the difference) - - garbage collection is turned off per default - - sys check interval is set to the highest possible value - - calibration is now a separate step and done using - a different strategy that allows measuring the test - overhead more accurately - - modified the tests to each give a run-time of between - 100-200ms using warp 10 - - changed default warp factor to 10 (from 20) - - compared results with timeit.py and confirmed measurements - - bumped all test versions to 2.0 - - updated platform.py to the latest version - - changed the output format a bit to make it look - nicer - - refactored the APIs somewhat - 1.3+: Steve Holden added the NewInstances test and the filtering - option during the NeedForSpeed sprint; this also triggered a long - discussion on how to improve benchmark timing and finally - resulted in the release of 2.0 - 1.3: initial checkin into the Python SVN repository - - -Have fun, --- -Marc-Andre Lemburg -mal@lemburg.com diff --git a/Tools/pybench/pybench-2.0/Setup.py b/Tools/pybench/pybench-2.0/Setup.py deleted file mode 100644 index f1417e6..0000000 --- a/Tools/pybench/pybench-2.0/Setup.py +++ /dev/null @@ -1,39 +0,0 @@ -#!python - -# Setup file for pybench -# -# This file has to import all tests to be run; it is executed as -# Python source file, so you can do all kinds of manipulations here -# rather than having to edit the tests themselves. -# -# Note: Please keep this module compatible to Python 1.5.2. -# -# Tests may include features in later Python versions, but these -# should then be embedded in try-except clauses in this configuration -# module. - -# Defaults -Number_of_rounds = 10 -Warp_factor = 10 - -# Import tests -from Arithmetic import * -from Calls import * -from Constructs import * -from Lookups import * -from Instances import * -try: - from NewInstances import * -except ImportError: - pass -from Lists import * -from Tuples import * -from Dict import * -from Exceptions import * -from Imports import * -from Strings import * -from Numbers import * -try: - from Unicode import * -except (ImportError, SyntaxError): - pass diff --git a/Tools/pybench/pybench-2.0/Strings.py b/Tools/pybench/pybench-2.0/Strings.py deleted file mode 100644 index 3be8b35..0000000 --- a/Tools/pybench/pybench-2.0/Strings.py +++ /dev/null @@ -1,562 +0,0 @@ -from pybench import Test -from string import join - -class ConcatStrings(Test): - - version = 2.0 - operations = 10 * 5 - rounds = 100000 - - def test(self): - - # Make sure the strings are *not* interned - s = join(map(str,range(100))) - t = join(map(str,range(1,101))) - - for i in xrange(self.rounds): - t + s - t + s - t + s - t + s - t + s - - t + s - t + s - t + s - t + s - t + s - - t + s - t + s - t + s - t + s - t + s - - t + s - t + s - t + s - t + s - t + s - - t + s - t + s - t + s - t + s - t + s - - t + s - t + s - t + s - t + s - t + s - - t + s - t + s - t + s - t + s - t + s - - t + s - t + s - t + s - t + s - t + s - - t + s - t + s - t + s - t + s - t + s - - t + s - t + s - t + s - t + s - t + s - - def calibrate(self): - - s = join(map(str,range(100))) - t = join(map(str,range(1,101))) - - for i in xrange(self.rounds): - pass - - -class CompareStrings(Test): - - version = 2.0 - operations = 10 * 5 - rounds = 200000 - - def test(self): - - # Make sure the strings are *not* interned - s = join(map(str,range(10))) - t = join(map(str,range(10))) + "abc" - - for i in xrange(self.rounds): - t < s - t > s - t == s - t > s - t < s - - t < s - t > s - t == s - t > s - t < s - - t < s - t > s - t == s - t > s - t < s - - t < s - t > s - t == s - t > s - t < s - - t < s - t > s - t == s - t > s - t < s - - t < s - t > s - t == s - t > s - t < s - - t < s - t > s - t == s - t > s - t < s - - t < s - t > s - t == s - t > s - t < s - - t < s - t > s - t == s - t > s - t < s - - t < s - t > s - t == s - t > s - t < s - - def calibrate(self): - - s = join(map(str,range(10))) - t = join(map(str,range(10))) + "abc" - - for i in xrange(self.rounds): - pass - - -class CompareInternedStrings(Test): - - version = 2.0 - operations = 10 * 5 - rounds = 300000 - - def test(self): - - # Make sure the strings *are* interned - s = intern(join(map(str,range(10)))) - t = s - - for i in xrange(self.rounds): - t == s - t == s - t >= s - t > s - t < s - - t == s - t == s - t >= s - t > s - t < s - - t == s - t == s - t >= s - t > s - t < s - - t == s - t == s - t >= s - t > s - t < s - - t == s - t == s - t >= s - t > s - t < s - - t == s - t == s - t >= s - t > s - t < s - - t == s - t == s - t >= s - t > s - t < s - - t == s - t == s - t >= s - t > s - t < s - - t == s - t == s - t >= s - t > s - t < s - - t == s - t == s - t >= s - t > s - t < s - - def calibrate(self): - - s = intern(join(map(str,range(10)))) - t = s - - for i in xrange(self.rounds): - pass - - -class CreateStringsWithConcat(Test): - - version = 2.0 - operations = 10 * 5 - rounds = 200000 - - def test(self): - - for i in xrange(self.rounds): - s = 'om' - s = s + 'xbx' - s = s + 'xcx' - s = s + 'xdx' - s = s + 'xex' - - s = s + 'xax' - s = s + 'xbx' - s = s + 'xcx' - s = s + 'xdx' - s = s + 'xex' - - s = s + 'xax' - s = s + 'xbx' - s = s + 'xcx' - s = s + 'xdx' - s = s + 'xex' - - s = s + 'xax' - s = s + 'xbx' - s = s + 'xcx' - s = s + 'xdx' - s = s + 'xex' - - s = s + 'xax' - s = s + 'xbx' - s = s + 'xcx' - s = s + 'xdx' - s = s + 'xex' - - s = s + 'xax' - s = s + 'xbx' - s = s + 'xcx' - s = s + 'xdx' - s = s + 'xex' - - s = s + 'xax' - s = s + 'xbx' - s = s + 'xcx' - s = s + 'xdx' - s = s + 'xex' - - s = s + 'xax' - s = s + 'xbx' - s = s + 'xcx' - s = s + 'xdx' - s = s + 'xex' - - s = s + 'xax' - s = s + 'xbx' - s = s + 'xcx' - s = s + 'xdx' - s = s + 'xex' - - s = s + 'xax' - s = s + 'xbx' - s = s + 'xcx' - s = s + 'xdx' - s = s + 'xex' - - def calibrate(self): - - for i in xrange(self.rounds): - pass - - -class StringSlicing(Test): - - version = 2.0 - operations = 5 * 7 - rounds = 160000 - - def test(self): - - s = join(map(str,range(100))) - - for i in xrange(self.rounds): - - s[50:] - s[:25] - s[50:55] - s[-1:] - s[:1] - s[2:] - s[11:-11] - - s[50:] - s[:25] - s[50:55] - s[-1:] - s[:1] - s[2:] - s[11:-11] - - s[50:] - s[:25] - s[50:55] - s[-1:] - s[:1] - s[2:] - s[11:-11] - - s[50:] - s[:25] - s[50:55] - s[-1:] - s[:1] - s[2:] - s[11:-11] - - s[50:] - s[:25] - s[50:55] - s[-1:] - s[:1] - s[2:] - s[11:-11] - - def calibrate(self): - - s = join(map(str,range(100))) - - for i in xrange(self.rounds): - pass - -### String methods - -if hasattr('', 'lower'): - - class StringMappings(Test): - - version = 2.0 - operations = 3 * (5 + 4 + 2 + 1) - rounds = 70000 - - def test(self): - - s = join(map(chr,range(20)),'') - t = join(map(chr,range(50)),'') - u = join(map(chr,range(100)),'') - v = join(map(chr,range(256)),'') - - for i in xrange(self.rounds): - - s.lower() - s.lower() - s.lower() - s.lower() - s.lower() - - s.upper() - s.upper() - s.upper() - s.upper() - s.upper() - - s.title() - s.title() - s.title() - s.title() - s.title() - - t.lower() - t.lower() - t.lower() - t.lower() - - t.upper() - t.upper() - t.upper() - t.upper() - - t.title() - t.title() - t.title() - t.title() - - u.lower() - u.lower() - - u.upper() - u.upper() - - u.title() - u.title() - - v.lower() - - v.upper() - - v.title() - - def calibrate(self): - - s = join(map(chr,range(20)),'') - t = join(map(chr,range(50)),'') - u = join(map(chr,range(100)),'') - v = join(map(chr,range(256)),'') - - for i in xrange(self.rounds): - pass - - class StringPredicates(Test): - - version = 2.0 - operations = 10 * 7 - rounds = 100000 - - def test(self): - - data = ('abc', '123', ' ', '\xe4\xf6\xfc', '\xdf'*10) - len_data = len(data) - - for i in xrange(self.rounds): - s = data[i % len_data] - - s.isalnum() - s.isalpha() - s.isdigit() - s.islower() - s.isspace() - s.istitle() - s.isupper() - - s.isalnum() - s.isalpha() - s.isdigit() - s.islower() - s.isspace() - s.istitle() - s.isupper() - - s.isalnum() - s.isalpha() - s.isdigit() - s.islower() - s.isspace() - s.istitle() - s.isupper() - - s.isalnum() - s.isalpha() - s.isdigit() - s.islower() - s.isspace() - s.istitle() - s.isupper() - - s.isalnum() - s.isalpha() - s.isdigit() - s.islower() - s.isspace() - s.istitle() - s.isupper() - - s.isalnum() - s.isalpha() - s.isdigit() - s.islower() - s.isspace() - s.istitle() - s.isupper() - - s.isalnum() - s.isalpha() - s.isdigit() - s.islower() - s.isspace() - s.istitle() - s.isupper() - - s.isalnum() - s.isalpha() - s.isdigit() - s.islower() - s.isspace() - s.istitle() - s.isupper() - - s.isalnum() - s.isalpha() - s.isdigit() - s.islower() - s.isspace() - s.istitle() - s.isupper() - - s.isalnum() - s.isalpha() - s.isdigit() - s.islower() - s.isspace() - s.istitle() - s.isupper() - - def calibrate(self): - - data = ('abc', '123', ' ', '\u1234\u2345\u3456', '\uFFFF'*10) - data = ('abc', '123', ' ', '\xe4\xf6\xfc', '\xdf'*10) - len_data = len(data) - - for i in xrange(self.rounds): - s = data[i % len_data] diff --git a/Tools/pybench/pybench-2.0/Tuples.py b/Tools/pybench/pybench-2.0/Tuples.py deleted file mode 100644 index 8e46989..0000000 --- a/Tools/pybench/pybench-2.0/Tuples.py +++ /dev/null @@ -1,360 +0,0 @@ -from pybench import Test - -class TupleSlicing(Test): - - version = 2.0 - operations = 3 * 25 * 10 * 7 - rounds = 500 - - def test(self): - - r = range(25) - t = tuple(range(100)) - - for i in xrange(self.rounds): - - for j in r: - - m = t[50:] - m = t[:25] - m = t[50:55] - m = t[:-1] - m = t[1:] - m = t[-10:] - m = t[:10] - - m = t[50:] - m = t[:25] - m = t[50:55] - m = t[:-1] - m = t[1:] - m = t[-10:] - m = t[:10] - - m = t[50:] - m = t[:25] - m = t[50:55] - m = t[:-1] - m = t[1:] - m = t[-10:] - m = t[:10] - - m = t[50:] - m = t[:25] - m = t[50:55] - m = t[:-1] - m = t[1:] - m = t[-10:] - m = t[:10] - - m = t[50:] - m = t[:25] - m = t[50:55] - m = t[:-1] - m = t[1:] - m = t[-10:] - m = t[:10] - - m = t[50:] - m = t[:25] - m = t[50:55] - m = t[:-1] - m = t[1:] - m = t[-10:] - m = t[:10] - - m = t[50:] - m = t[:25] - m = t[50:55] - m = t[:-1] - m = t[1:] - m = t[-10:] - m = t[:10] - - m = t[50:] - m = t[:25] - m = t[50:55] - m = t[:-1] - m = t[1:] - m = t[-10:] - m = t[:10] - - m = t[50:] - m = t[:25] - m = t[50:55] - m = t[:-1] - m = t[1:] - m = t[-10:] - m = t[:10] - - m = t[50:] - m = t[:25] - m = t[50:55] - m = t[:-1] - m = t[1:] - m = t[-10:] - m = t[:10] - - m = t[50:] - m = t[:25] - m = t[50:55] - m = t[:-1] - m = t[1:] - m = t[-10:] - m = t[:10] - - m = t[50:] - m = t[:25] - m = t[50:55] - m = t[:-1] - m = t[1:] - m = t[-10:] - m = t[:10] - - m = t[50:] - m = t[:25] - m = t[50:55] - m = t[:-1] - m = t[1:] - m = t[-10:] - m = t[:10] - - m = t[50:] - m = t[:25] - m = t[50:55] - m = t[:-1] - m = t[1:] - m = t[-10:] - m = t[:10] - - m = t[50:] - m = t[:25] - m = t[50:55] - m = t[:-1] - m = t[1:] - m = t[-10:] - m = t[:10] - - m = t[50:] - m = t[:25] - m = t[50:55] - m = t[:-1] - m = t[1:] - m = t[-10:] - m = t[:10] - - m = t[50:] - m = t[:25] - m = t[50:55] - m = t[:-1] - m = t[1:] - m = t[-10:] - m = t[:10] - - m = t[50:] - m = t[:25] - m = t[50:55] - m = t[:-1] - m = t[1:] - m = t[-10:] - m = t[:10] - - m = t[50:] - m = t[:25] - m = t[50:55] - m = t[:-1] - m = t[1:] - m = t[-10:] - m = t[:10] - - m = t[50:] - m = t[:25] - m = t[50:55] - m = t[:-1] - m = t[1:] - m = t[-10:] - m = t[:10] - - m = t[50:] - m = t[:25] - m = t[50:55] - m = t[:-1] - m = t[1:] - m = t[-10:] - m = t[:10] - - m = t[50:] - m = t[:25] - m = t[50:55] - m = t[:-1] - m = t[1:] - m = t[-10:] - m = t[:10] - - m = t[50:] - m = t[:25] - m = t[50:55] - m = t[:-1] - m = t[1:] - m = t[-10:] - m = t[:10] - - m = t[50:] - m = t[:25] - m = t[50:55] - m = t[:-1] - m = t[1:] - m = t[-10:] - m = t[:10] - - m = t[50:] - m = t[:25] - m = t[50:55] - m = t[:-1] - m = t[1:] - m = t[-10:] - m = t[:10] - - m = t[50:] - m = t[:25] - m = t[50:55] - m = t[:-1] - m = t[1:] - m = t[-10:] - m = t[:10] - - m = t[50:] - m = t[:25] - m = t[50:55] - m = t[:-1] - m = t[1:] - m = t[-10:] - m = t[:10] - - m = t[50:] - m = t[:25] - m = t[50:55] - m = t[:-1] - m = t[1:] - m = t[-10:] - m = t[:10] - - m = t[50:] - m = t[:25] - m = t[50:55] - m = t[:-1] - m = t[1:] - m = t[-10:] - m = t[:10] - - m = t[50:] - m = t[:25] - m = t[50:55] - m = t[:-1] - m = t[1:] - m = t[-10:] - m = t[:10] - - def calibrate(self): - - r = range(25) - t = tuple(range(100)) - - for i in xrange(self.rounds): - for j in r: - pass - -class SmallTuples(Test): - - version = 2.0 - operations = 5*(1 + 3 + 6 + 2) - rounds = 90000 - - def test(self): - - for i in xrange(self.rounds): - - t = (1,2,3,4,5,6) - - a,b,c,d,e,f = t - a,b,c,d,e,f = t - a,b,c,d,e,f = t - - a,b,c = t[:3] - a,b,c = t[:3] - a,b,c = t[:3] - a,b,c = t[:3] - a,b,c = t[:3] - a,b,c = t[:3] - - l = list(t) - t = tuple(l) - - t = (1,2,3,4,5,6) - - a,b,c,d,e,f = t - a,b,c,d,e,f = t - a,b,c,d,e,f = t - - a,b,c = t[:3] - a,b,c = t[:3] - a,b,c = t[:3] - a,b,c = t[:3] - a,b,c = t[:3] - a,b,c = t[:3] - - l = list(t) - t = tuple(l) - - t = (1,2,3,4,5,6) - - a,b,c,d,e,f = t - a,b,c,d,e,f = t - a,b,c,d,e,f = t - - a,b,c = t[:3] - a,b,c = t[:3] - a,b,c = t[:3] - a,b,c = t[:3] - a,b,c = t[:3] - a,b,c = t[:3] - - l = list(t) - t = tuple(l) - - t = (1,2,3,4,5,6) - - a,b,c,d,e,f = t - a,b,c,d,e,f = t - a,b,c,d,e,f = t - - a,b,c = t[:3] - a,b,c = t[:3] - a,b,c = t[:3] - a,b,c = t[:3] - a,b,c = t[:3] - a,b,c = t[:3] - - l = list(t) - t = tuple(l) - - t = (1,2,3,4,5,6) - - a,b,c,d,e,f = t - a,b,c,d,e,f = t - a,b,c,d,e,f = t - - a,b,c = t[:3] - a,b,c = t[:3] - a,b,c = t[:3] - a,b,c = t[:3] - a,b,c = t[:3] - a,b,c = t[:3] - - l = list(t) - t = tuple(l) - - def calibrate(self): - - for i in xrange(self.rounds): - pass diff --git a/Tools/pybench/pybench-2.0/Unicode.py b/Tools/pybench/pybench-2.0/Unicode.py deleted file mode 100644 index 153a91e..0000000 --- a/Tools/pybench/pybench-2.0/Unicode.py +++ /dev/null @@ -1,542 +0,0 @@ -try: - unicode -except NameError: - raise ImportError - -from pybench import Test -from string import join - -class ConcatUnicode(Test): - - version = 2.0 - operations = 10 * 5 - rounds = 60000 - - def test(self): - - # Make sure the strings are *not* interned - s = unicode(join(map(str,range(100)))) - t = unicode(join(map(str,range(1,101)))) - - for i in xrange(self.rounds): - t + s - t + s - t + s - t + s - t + s - - t + s - t + s - t + s - t + s - t + s - - t + s - t + s - t + s - t + s - t + s - - t + s - t + s - t + s - t + s - t + s - - t + s - t + s - t + s - t + s - t + s - - t + s - t + s - t + s - t + s - t + s - - t + s - t + s - t + s - t + s - t + s - - t + s - t + s - t + s - t + s - t + s - - t + s - t + s - t + s - t + s - t + s - - t + s - t + s - t + s - t + s - t + s - - def calibrate(self): - - s = unicode(join(map(str,range(100)))) - t = unicode(join(map(str,range(1,101)))) - - for i in xrange(self.rounds): - pass - - -class CompareUnicode(Test): - - version = 2.0 - operations = 10 * 5 - rounds = 150000 - - def test(self): - - # Make sure the strings are *not* interned - s = unicode(join(map(str,range(10)))) - t = unicode(join(map(str,range(10))) + "abc") - - for i in xrange(self.rounds): - t < s - t > s - t == s - t > s - t < s - - t < s - t > s - t == s - t > s - t < s - - t < s - t > s - t == s - t > s - t < s - - t < s - t > s - t == s - t > s - t < s - - t < s - t > s - t == s - t > s - t < s - - t < s - t > s - t == s - t > s - t < s - - t < s - t > s - t == s - t > s - t < s - - t < s - t > s - t == s - t > s - t < s - - t < s - t > s - t == s - t > s - t < s - - t < s - t > s - t == s - t > s - t < s - - def calibrate(self): - - s = unicode(join(map(str,range(10)))) - t = unicode(join(map(str,range(10))) + "abc") - - for i in xrange(self.rounds): - pass - - -class CreateUnicodeWithConcat(Test): - - version = 2.0 - operations = 10 * 5 - rounds = 80000 - - def test(self): - - for i in xrange(self.rounds): - s = u'om' - s = s + u'xbx' - s = s + u'xcx' - s = s + u'xdx' - s = s + u'xex' - - s = s + u'xax' - s = s + u'xbx' - s = s + u'xcx' - s = s + u'xdx' - s = s + u'xex' - - s = s + u'xax' - s = s + u'xbx' - s = s + u'xcx' - s = s + u'xdx' - s = s + u'xex' - - s = s + u'xax' - s = s + u'xbx' - s = s + u'xcx' - s = s + u'xdx' - s = s + u'xex' - - s = s + u'xax' - s = s + u'xbx' - s = s + u'xcx' - s = s + u'xdx' - s = s + u'xex' - - s = s + u'xax' - s = s + u'xbx' - s = s + u'xcx' - s = s + u'xdx' - s = s + u'xex' - - s = s + u'xax' - s = s + u'xbx' - s = s + u'xcx' - s = s + u'xdx' - s = s + u'xex' - - s = s + u'xax' - s = s + u'xbx' - s = s + u'xcx' - s = s + u'xdx' - s = s + u'xex' - - s = s + u'xax' - s = s + u'xbx' - s = s + u'xcx' - s = s + u'xdx' - s = s + u'xex' - - s = s + u'xax' - s = s + u'xbx' - s = s + u'xcx' - s = s + u'xdx' - s = s + u'xex' - - def calibrate(self): - - for i in xrange(self.rounds): - pass - - -class UnicodeSlicing(Test): - - version = 2.0 - operations = 5 * 7 - rounds = 140000 - - def test(self): - - s = unicode(join(map(str,range(100)))) - - for i in xrange(self.rounds): - - s[50:] - s[:25] - s[50:55] - s[-1:] - s[:1] - s[2:] - s[11:-11] - - s[50:] - s[:25] - s[50:55] - s[-1:] - s[:1] - s[2:] - s[11:-11] - - s[50:] - s[:25] - s[50:55] - s[-1:] - s[:1] - s[2:] - s[11:-11] - - s[50:] - s[:25] - s[50:55] - s[-1:] - s[:1] - s[2:] - s[11:-11] - - s[50:] - s[:25] - s[50:55] - s[-1:] - s[:1] - s[2:] - s[11:-11] - - def calibrate(self): - - s = unicode(join(map(str,range(100)))) - - for i in xrange(self.rounds): - pass - -### String methods - -class UnicodeMappings(Test): - - version = 2.0 - operations = 3 * (5 + 4 + 2 + 1) - rounds = 10000 - - def test(self): - - s = join(map(unichr,range(20)),'') - t = join(map(unichr,range(100)),'') - u = join(map(unichr,range(500)),'') - v = join(map(unichr,range(1000)),'') - - for i in xrange(self.rounds): - - s.lower() - s.lower() - s.lower() - s.lower() - s.lower() - - s.upper() - s.upper() - s.upper() - s.upper() - s.upper() - - s.title() - s.title() - s.title() - s.title() - s.title() - - t.lower() - t.lower() - t.lower() - t.lower() - - t.upper() - t.upper() - t.upper() - t.upper() - - t.title() - t.title() - t.title() - t.title() - - u.lower() - u.lower() - - u.upper() - u.upper() - - u.title() - u.title() - - v.lower() - - v.upper() - - v.title() - - def calibrate(self): - - s = join(map(unichr,range(20)),'') - t = join(map(unichr,range(100)),'') - u = join(map(unichr,range(500)),'') - v = join(map(unichr,range(1000)),'') - - for i in xrange(self.rounds): - pass - -class UnicodePredicates(Test): - - version = 2.0 - operations = 5 * 9 - rounds = 120000 - - def test(self): - - data = (u'abc', u'123', u' ', u'\u1234\u2345\u3456', u'\uFFFF'*10) - len_data = len(data) - - for i in xrange(self.rounds): - s = data[i % len_data] - - s.isalnum() - s.isalpha() - s.isdecimal() - s.isdigit() - s.islower() - s.isnumeric() - s.isspace() - s.istitle() - s.isupper() - - s.isalnum() - s.isalpha() - s.isdecimal() - s.isdigit() - s.islower() - s.isnumeric() - s.isspace() - s.istitle() - s.isupper() - - s.isalnum() - s.isalpha() - s.isdecimal() - s.isdigit() - s.islower() - s.isnumeric() - s.isspace() - s.istitle() - s.isupper() - - s.isalnum() - s.isalpha() - s.isdecimal() - s.isdigit() - s.islower() - s.isnumeric() - s.isspace() - s.istitle() - s.isupper() - - s.isalnum() - s.isalpha() - s.isdecimal() - s.isdigit() - s.islower() - s.isnumeric() - s.isspace() - s.istitle() - s.isupper() - - def calibrate(self): - - data = (u'abc', u'123', u' ', u'\u1234\u2345\u3456', u'\uFFFF'*10) - len_data = len(data) - - for i in xrange(self.rounds): - s = data[i % len_data] - -try: - import unicodedata -except ImportError: - pass -else: - class UnicodeProperties(Test): - - version = 2.0 - operations = 5 * 8 - rounds = 100000 - - def test(self): - - data = (u'a', u'1', u' ', u'\u1234', u'\uFFFF') - len_data = len(data) - digit = unicodedata.digit - numeric = unicodedata.numeric - decimal = unicodedata.decimal - category = unicodedata.category - bidirectional = unicodedata.bidirectional - decomposition = unicodedata.decomposition - mirrored = unicodedata.mirrored - combining = unicodedata.combining - - for i in xrange(self.rounds): - - c = data[i % len_data] - - digit(c, None) - numeric(c, None) - decimal(c, None) - category(c) - bidirectional(c) - decomposition(c) - mirrored(c) - combining(c) - - digit(c, None) - numeric(c, None) - decimal(c, None) - category(c) - bidirectional(c) - decomposition(c) - mirrored(c) - combining(c) - - digit(c, None) - numeric(c, None) - decimal(c, None) - category(c) - bidirectional(c) - decomposition(c) - mirrored(c) - combining(c) - - digit(c, None) - numeric(c, None) - decimal(c, None) - category(c) - bidirectional(c) - decomposition(c) - mirrored(c) - combining(c) - - digit(c, None) - numeric(c, None) - decimal(c, None) - category(c) - bidirectional(c) - decomposition(c) - mirrored(c) - combining(c) - - def calibrate(self): - - data = (u'a', u'1', u' ', u'\u1234', u'\uFFFF') - len_data = len(data) - digit = unicodedata.digit - numeric = unicodedata.numeric - decimal = unicodedata.decimal - category = unicodedata.category - bidirectional = unicodedata.bidirectional - decomposition = unicodedata.decomposition - mirrored = unicodedata.mirrored - combining = unicodedata.combining - - for i in xrange(self.rounds): - - c = data[i % len_data] diff --git a/Tools/pybench/pybench-2.0/clockres.py b/Tools/pybench/pybench-2.0/clockres.py deleted file mode 100644 index a7855f2..0000000 --- a/Tools/pybench/pybench-2.0/clockres.py +++ /dev/null @@ -1,44 +0,0 @@ -#!/usr/bin/env python - -""" clockres - calculates the resolution in seconds of a given timer. - - Copyright (c) 2006, Marc-Andre Lemburg (mal@egenix.com). See the - documentation for further information on copyrights, or contact - the author. All Rights Reserved. - -""" -import time - -TEST_TIME = 1.0 - -def clockres(timer): - d = {} - wallclock = time.time - start = wallclock() - stop = wallclock() + TEST_TIME - spin_loops = range(1000) - while 1: - now = wallclock() - if now >= stop: - break - for i in spin_loops: - d[timer()] = 1 - values = d.keys() - values.sort() - min_diff = TEST_TIME - for i in range(len(values) - 1): - diff = values[i+1] - values[i] - if diff < min_diff: - min_diff = diff - return min_diff - -if __name__ == '__main__': - print 'Clock resolution of various timer implementations:' - print 'time.clock: %10.3fus' % (clockres(time.clock) * 1e6) - print 'time.time: %10.3fus' % (clockres(time.time) * 1e6) - try: - import systimes - print 'systimes.processtime: %10.3fus' % (clockres(systimes.processtime) * 1e6) - except ImportError: - pass - diff --git a/Tools/pybench/pybench-2.0/package/__init__.py b/Tools/pybench/pybench-2.0/package/__init__.py deleted file mode 100644 index e69de29..0000000 --- a/Tools/pybench/pybench-2.0/package/__init__.py +++ /dev/null diff --git a/Tools/pybench/pybench-2.0/package/submodule.py b/Tools/pybench/pybench-2.0/package/submodule.py deleted file mode 100644 index e69de29..0000000 --- a/Tools/pybench/pybench-2.0/package/submodule.py +++ /dev/null diff --git a/Tools/pybench/pybench-2.0/platform.py b/Tools/pybench/pybench-2.0/platform.py deleted file mode 100755 index 288bc95..0000000 --- a/Tools/pybench/pybench-2.0/platform.py +++ /dev/null @@ -1,1254 +0,0 @@ -#!/usr/bin/env python - -""" This module tries to retrieve as much platform-identifying data as - possible. It makes this information available via function APIs. - - If called from the command line, it prints the platform - information concatenated as single string to stdout. The output - format is useable as part of a filename. - -""" -# This module is maintained by Marc-Andre Lemburg <mal@egenix.com>. -# If you find problems, please submit bug reports/patches via the -# Python SourceForge Project Page and assign them to "lemburg". -# -# Note: Please keep this module compatible to Python 1.5.2. -# -# Still needed: -# * more support for WinCE -# * support for MS-DOS (PythonDX ?) -# * support for Amiga and other still unsupported platforms running Python -# * support for additional Linux distributions -# -# Many thanks to all those who helped adding platform-specific -# checks (in no particular order): -# -# Charles G Waldman, David Arnold, Gordon McMillan, Ben Darnell, -# Jeff Bauer, Cliff Crawford, Ivan Van Laningham, Josef -# Betancourt, Randall Hopper, Karl Putland, John Farrell, Greg -# Andruk, Just van Rossum, Thomas Heller, Mark R. Levinson, Mark -# Hammond, Bill Tutt, Hans Nowak, Uwe Zessin (OpenVMS support), -# Colin Kong, Trent Mick, Guido van Rossum -# -# History: -# -# <see CVS and SVN checkin messages for history> -# -# 1.0.3 - added normalization of Windows system name -# 1.0.2 - added more Windows support -# 1.0.1 - reformatted to make doc.py happy -# 1.0.0 - reformatted a bit and checked into Python CVS -# 0.8.0 - added sys.version parser and various new access -# APIs (python_version(), python_compiler(), etc.) -# 0.7.2 - fixed architecture() to use sizeof(pointer) where available -# 0.7.1 - added support for Caldera OpenLinux -# 0.7.0 - some fixes for WinCE; untabified the source file -# 0.6.2 - support for OpenVMS - requires version 1.5.2-V006 or higher and -# vms_lib.getsyi() configured -# 0.6.1 - added code to prevent 'uname -p' on platforms which are -# known not to support it -# 0.6.0 - fixed win32_ver() to hopefully work on Win95,98,NT and Win2k; -# did some cleanup of the interfaces - some APIs have changed -# 0.5.5 - fixed another type in the MacOS code... should have -# used more coffee today ;-) -# 0.5.4 - fixed a few typos in the MacOS code -# 0.5.3 - added experimental MacOS support; added better popen() -# workarounds in _syscmd_ver() -- still not 100% elegant -# though -# 0.5.2 - fixed uname() to return '' instead of 'unknown' in all -# return values (the system uname command tends to return -# 'unknown' instead of just leaving the field emtpy) -# 0.5.1 - included code for slackware dist; added exception handlers -# to cover up situations where platforms don't have os.popen -# (e.g. Mac) or fail on socket.gethostname(); fixed libc -# detection RE -# 0.5.0 - changed the API names referring to system commands to *syscmd*; -# added java_ver(); made syscmd_ver() a private -# API (was system_ver() in previous versions) -- use uname() -# instead; extended the win32_ver() to also return processor -# type information -# 0.4.0 - added win32_ver() and modified the platform() output for WinXX -# 0.3.4 - fixed a bug in _follow_symlinks() -# 0.3.3 - fixed popen() and "file" command invokation bugs -# 0.3.2 - added architecture() API and support for it in platform() -# 0.3.1 - fixed syscmd_ver() RE to support Windows NT -# 0.3.0 - added system alias support -# 0.2.3 - removed 'wince' again... oh well. -# 0.2.2 - added 'wince' to syscmd_ver() supported platforms -# 0.2.1 - added cache logic and changed the platform string format -# 0.2.0 - changed the API to use functions instead of module globals -# since some action take too long to be run on module import -# 0.1.0 - first release -# -# You can always get the latest version of this module at: -# -# http://www.egenix.com/files/python/platform.py -# -# If that URL should fail, try contacting the author. - -__copyright__ = """ - Copyright (c) 1999-2000, Marc-Andre Lemburg; mailto:mal@lemburg.com - Copyright (c) 2000-2003, eGenix.com Software GmbH; mailto:info@egenix.com - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee or royalty is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation or portions thereof, including modifications, - that you make. - - EGENIX.COM SOFTWARE GMBH DISCLAIMS ALL WARRANTIES WITH REGARD TO - THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND - FITNESS, IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, - INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING - FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, - NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION - WITH THE USE OR PERFORMANCE OF THIS SOFTWARE ! - -""" - -__version__ = '1.0.4' - -import sys,string,os,re - -### Platform specific APIs - -_libc_search = re.compile(r'(__libc_init)' - '|' - '(GLIBC_([0-9.]+))' - '|' - '(libc(_\w+)?\.so(?:\.(\d[0-9.]*))?)') - -def libc_ver(executable=sys.executable,lib='',version='', - - chunksize=2048): - - """ Tries to determine the libc version that the file executable - (which defaults to the Python interpreter) is linked against. - - Returns a tuple of strings (lib,version) which default to the - given parameters in case the lookup fails. - - Note that the function has intimate knowledge of how different - libc versions add symbols to the executable and thus is probably - only useable for executables compiled using gcc. - - The file is read and scanned in chunks of chunksize bytes. - - """ - f = open(executable,'rb') - binary = f.read(chunksize) - pos = 0 - while 1: - m = _libc_search.search(binary,pos) - if not m: - binary = f.read(chunksize) - if not binary: - break - pos = 0 - continue - libcinit,glibc,glibcversion,so,threads,soversion = m.groups() - if libcinit and not lib: - lib = 'libc' - elif glibc: - if lib != 'glibc': - lib = 'glibc' - version = glibcversion - elif glibcversion > version: - version = glibcversion - elif so: - if lib != 'glibc': - lib = 'libc' - if soversion > version: - version = soversion - if threads and version[-len(threads):] != threads: - version = version + threads - pos = m.end() - f.close() - return lib,version - -def _dist_try_harder(distname,version,id): - - """ Tries some special tricks to get the distribution - information in case the default method fails. - - Currently supports older SuSE Linux, Caldera OpenLinux and - Slackware Linux distributions. - - """ - if os.path.exists('/var/adm/inst-log/info'): - # SuSE Linux stores distribution information in that file - info = open('/var/adm/inst-log/info').readlines() - distname = 'SuSE' - for line in info: - tv = string.split(line) - if len(tv) == 2: - tag,value = tv - else: - continue - if tag == 'MIN_DIST_VERSION': - version = string.strip(value) - elif tag == 'DIST_IDENT': - values = string.split(value,'-') - id = values[2] - return distname,version,id - - if os.path.exists('/etc/.installed'): - # Caldera OpenLinux has some infos in that file (thanks to Colin Kong) - info = open('/etc/.installed').readlines() - for line in info: - pkg = string.split(line,'-') - if len(pkg) >= 2 and pkg[0] == 'OpenLinux': - # XXX does Caldera support non Intel platforms ? If yes, - # where can we find the needed id ? - return 'OpenLinux',pkg[1],id - - if os.path.isdir('/usr/lib/setup'): - # Check for slackware verson tag file (thanks to Greg Andruk) - verfiles = os.listdir('/usr/lib/setup') - for n in range(len(verfiles)-1, -1, -1): - if verfiles[n][:14] != 'slack-version-': - del verfiles[n] - if verfiles: - verfiles.sort() - distname = 'slackware' - version = verfiles[-1][14:] - return distname,version,id - - return distname,version,id - -_release_filename = re.compile(r'(\w+)[-_](release|version)') -_release_version = re.compile(r'([\d.]+)[^(]*(?:\((.+)\))?') - -# Note:In supported_dists below we need 'fedora' before 'redhat' as in -# Fedora redhat-release is a link to fedora-release. - -def dist(distname='',version='',id='', - - supported_dists=('SuSE', 'debian', 'fedora', 'redhat', 'mandrake')): - - """ Tries to determine the name of the Linux OS distribution name. - - The function first looks for a distribution release file in - /etc and then reverts to _dist_try_harder() in case no - suitable files are found. - - Returns a tuple (distname,version,id) which default to the - args given as parameters. - - """ - try: - etc = os.listdir('/etc') - except os.error: - # Probably not a Unix system - return distname,version,id - for file in etc: - m = _release_filename.match(file) - if m: - _distname,dummy = m.groups() - if _distname in supported_dists: - distname = _distname - break - else: - return _dist_try_harder(distname,version,id) - f = open('/etc/'+file,'r') - firstline = f.readline() - f.close() - m = _release_version.search(firstline) - if m: - _version,_id = m.groups() - if _version: - version = _version - if _id: - id = _id - else: - # Unkown format... take the first two words - l = string.split(string.strip(firstline)) - if l: - version = l[0] - if len(l) > 1: - id = l[1] - return distname,version,id - -class _popen: - - """ Fairly portable (alternative) popen implementation. - - This is mostly needed in case os.popen() is not available, or - doesn't work as advertised, e.g. in Win9X GUI programs like - PythonWin or IDLE. - - Writing to the pipe is currently not supported. - - """ - tmpfile = '' - pipe = None - bufsize = None - mode = 'r' - - def __init__(self,cmd,mode='r',bufsize=None): - - if mode != 'r': - raise ValueError,'popen()-emulation only supports read mode' - import tempfile - self.tmpfile = tmpfile = tempfile.mktemp() - os.system(cmd + ' > %s' % tmpfile) - self.pipe = open(tmpfile,'rb') - self.bufsize = bufsize - self.mode = mode - - def read(self): - - return self.pipe.read() - - def readlines(self): - - if self.bufsize is not None: - return self.pipe.readlines() - - def close(self, - - remove=os.unlink,error=os.error): - - if self.pipe: - rc = self.pipe.close() - else: - rc = 255 - if self.tmpfile: - try: - remove(self.tmpfile) - except error: - pass - return rc - - # Alias - __del__ = close - -def popen(cmd, mode='r', bufsize=None): - - """ Portable popen() interface. - """ - # Find a working popen implementation preferring win32pipe.popen - # over os.popen over _popen - popen = None - if os.environ.get('OS','') == 'Windows_NT': - # On NT win32pipe should work; on Win9x it hangs due to bugs - # in the MS C lib (see MS KnowledgeBase article Q150956) - try: - import win32pipe - except ImportError: - pass - else: - popen = win32pipe.popen - if popen is None: - if hasattr(os,'popen'): - popen = os.popen - # Check whether it works... it doesn't in GUI programs - # on Windows platforms - if sys.platform == 'win32': # XXX Others too ? - try: - popen('') - except os.error: - popen = _popen - else: - popen = _popen - if bufsize is None: - return popen(cmd,mode) - else: - return popen(cmd,mode,bufsize) - -def _norm_version(version,build=''): - - """ Normalize the version and build strings and return a single - version string using the format major.minor.build (or patchlevel). - """ - l = string.split(version,'.') - if build: - l.append(build) - try: - ints = map(int,l) - except ValueError: - strings = l - else: - strings = map(str,ints) - version = string.join(strings[:3],'.') - return version - -_ver_output = re.compile(r'(?:([\w ]+) ([\w.]+) ' - '.*' - 'Version ([\d.]+))') - -def _syscmd_ver(system='',release='',version='', - - supported_platforms=('win32','win16','dos','os2')): - - """ Tries to figure out the OS version used and returns - a tuple (system,release,version). - - It uses the "ver" shell command for this which is known - to exists on Windows, DOS and OS/2. XXX Others too ? - - In case this fails, the given parameters are used as - defaults. - - """ - if sys.platform not in supported_platforms: - return system,release,version - - # Try some common cmd strings - for cmd in ('ver','command /c ver','cmd /c ver'): - try: - pipe = popen(cmd) - info = pipe.read() - if pipe.close(): - raise os.error,'command failed' - # XXX How can I supress shell errors from being written - # to stderr ? - except os.error,why: - #print 'Command %s failed: %s' % (cmd,why) - continue - except IOError,why: - #print 'Command %s failed: %s' % (cmd,why) - continue - else: - break - else: - return system,release,version - - # Parse the output - info = string.strip(info) - m = _ver_output.match(info) - if m: - system,release,version = m.groups() - # Strip trailing dots from version and release - if release[-1] == '.': - release = release[:-1] - if version[-1] == '.': - version = version[:-1] - # Normalize the version and build strings (eliminating additional - # zeros) - version = _norm_version(version) - return system,release,version - -def _win32_getvalue(key,name,default=''): - - """ Read a value for name from the registry key. - - In case this fails, default is returned. - - """ - from win32api import RegQueryValueEx - try: - return RegQueryValueEx(key,name) - except: - return default - -def win32_ver(release='',version='',csd='',ptype=''): - - """ Get additional version information from the Windows Registry - and return a tuple (version,csd,ptype) referring to version - number, CSD level and OS type (multi/single - processor). - - As a hint: ptype returns 'Uniprocessor Free' on single - processor NT machines and 'Multiprocessor Free' on multi - processor machines. The 'Free' refers to the OS version being - free of debugging code. It could also state 'Checked' which - means the OS version uses debugging code, i.e. code that - checks arguments, ranges, etc. (Thomas Heller). - - Note: this function only works if Mark Hammond's win32 - package is installed and obviously only runs on Win32 - compatible platforms. - - """ - # XXX Is there any way to find out the processor type on WinXX ? - # XXX Is win32 available on Windows CE ? - # - # Adapted from code posted by Karl Putland to comp.lang.python. - # - # The mappings between reg. values and release names can be found - # here: http://msdn.microsoft.com/library/en-us/sysinfo/base/osversioninfo_str.asp - - # Import the needed APIs - try: - import win32api - except ImportError: - return release,version,csd,ptype - from win32api import RegQueryValueEx,RegOpenKeyEx,RegCloseKey,GetVersionEx - from win32con import HKEY_LOCAL_MACHINE,VER_PLATFORM_WIN32_NT,\ - VER_PLATFORM_WIN32_WINDOWS - - # Find out the registry key and some general version infos - maj,min,buildno,plat,csd = GetVersionEx() - version = '%i.%i.%i' % (maj,min,buildno & 0xFFFF) - if csd[:13] == 'Service Pack ': - csd = 'SP' + csd[13:] - if plat == VER_PLATFORM_WIN32_WINDOWS: - regkey = 'SOFTWARE\\Microsoft\\Windows\\CurrentVersion' - # Try to guess the release name - if maj == 4: - if min == 0: - release = '95' - elif min == 10: - release = '98' - elif min == 90: - release = 'Me' - else: - release = 'postMe' - elif maj == 5: - release = '2000' - elif plat == VER_PLATFORM_WIN32_NT: - regkey = 'SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion' - if maj <= 4: - release = 'NT' - elif maj == 5: - if min == 0: - release = '2000' - elif min == 1: - release = 'XP' - elif min == 2: - release = '2003Server' - else: - release = 'post2003' - else: - if not release: - # E.g. Win3.1 with win32s - release = '%i.%i' % (maj,min) - return release,version,csd,ptype - - # Open the registry key - try: - keyCurVer = RegOpenKeyEx(HKEY_LOCAL_MACHINE,regkey) - # Get a value to make sure the key exists... - RegQueryValueEx(keyCurVer,'SystemRoot') - except: - return release,version,csd,ptype - - # Parse values - #subversion = _win32_getvalue(keyCurVer, - # 'SubVersionNumber', - # ('',1))[0] - #if subversion: - # release = release + subversion # 95a, 95b, etc. - build = _win32_getvalue(keyCurVer, - 'CurrentBuildNumber', - ('',1))[0] - ptype = _win32_getvalue(keyCurVer, - 'CurrentType', - (ptype,1))[0] - - # Normalize version - version = _norm_version(version,build) - - # Close key - RegCloseKey(keyCurVer) - return release,version,csd,ptype - -def _mac_ver_lookup(selectors,default=None): - - from gestalt import gestalt - import MacOS - l = [] - append = l.append - for selector in selectors: - try: - append(gestalt(selector)) - except (RuntimeError, MacOS.Error): - append(default) - return l - -def _bcd2str(bcd): - - return hex(bcd)[2:] - -def mac_ver(release='',versioninfo=('','',''),machine=''): - - """ Get MacOS version information and return it as tuple (release, - versioninfo, machine) with versioninfo being a tuple (version, - dev_stage, non_release_version). - - Entries which cannot be determined are set to the paramter values - which default to ''. All tuple entries are strings. - - Thanks to Mark R. Levinson for mailing documentation links and - code examples for this function. Documentation for the - gestalt() API is available online at: - - http://www.rgaros.nl/gestalt/ - - """ - # Check whether the version info module is available - try: - import gestalt - import MacOS - except ImportError: - return release,versioninfo,machine - # Get the infos - sysv,sysu,sysa = _mac_ver_lookup(('sysv','sysu','sysa')) - # Decode the infos - if sysv: - major = (sysv & 0xFF00) >> 8 - minor = (sysv & 0x00F0) >> 4 - patch = (sysv & 0x000F) - release = '%s.%i.%i' % (_bcd2str(major),minor,patch) - if sysu: - major = int((sysu & 0xFF000000L) >> 24) - minor = (sysu & 0x00F00000) >> 20 - bugfix = (sysu & 0x000F0000) >> 16 - stage = (sysu & 0x0000FF00) >> 8 - nonrel = (sysu & 0x000000FF) - version = '%s.%i.%i' % (_bcd2str(major),minor,bugfix) - nonrel = _bcd2str(nonrel) - stage = {0x20:'development', - 0x40:'alpha', - 0x60:'beta', - 0x80:'final'}.get(stage,'') - versioninfo = (version,stage,nonrel) - if sysa: - machine = {0x1: '68k', - 0x2: 'PowerPC', - 0xa: 'i386'}.get(sysa,'') - return release,versioninfo,machine - -def _java_getprop(name,default): - - from java.lang import System - try: - return System.getProperty(name) - except: - return default - -def java_ver(release='',vendor='',vminfo=('','',''),osinfo=('','','')): - - """ Version interface for Jython. - - Returns a tuple (release,vendor,vminfo,osinfo) with vminfo being - a tuple (vm_name,vm_release,vm_vendor) and osinfo being a - tuple (os_name,os_version,os_arch). - - Values which cannot be determined are set to the defaults - given as parameters (which all default to ''). - - """ - # Import the needed APIs - try: - import java.lang - except ImportError: - return release,vendor,vminfo,osinfo - - vendor = _java_getprop('java.vendor',vendor) - release = _java_getprop('java.version',release) - vm_name,vm_release,vm_vendor = vminfo - vm_name = _java_getprop('java.vm.name',vm_name) - vm_vendor = _java_getprop('java.vm.vendor',vm_vendor) - vm_release = _java_getprop('java.vm.version',vm_release) - vminfo = vm_name,vm_release,vm_vendor - os_name,os_version,os_arch = osinfo - os_arch = _java_getprop('java.os.arch',os_arch) - os_name = _java_getprop('java.os.name',os_name) - os_version = _java_getprop('java.os.version',os_version) - osinfo = os_name,os_version,os_arch - - return release,vendor,vminfo,osinfo - -### System name aliasing - -def system_alias(system,release,version): - - """ Returns (system,release,version) aliased to common - marketing names used for some systems. - - It also does some reordering of the information in some cases - where it would otherwise cause confusion. - - """ - if system == 'Rhapsody': - # Apple's BSD derivative - # XXX How can we determine the marketing release number ? - return 'MacOS X Server',system+release,version - - elif system == 'SunOS': - # Sun's OS - if release < '5': - # These releases use the old name SunOS - return system,release,version - # Modify release (marketing release = SunOS release - 3) - l = string.split(release,'.') - if l: - try: - major = int(l[0]) - except ValueError: - pass - else: - major = major - 3 - l[0] = str(major) - release = string.join(l,'.') - if release < '6': - system = 'Solaris' - else: - # XXX Whatever the new SunOS marketing name is... - system = 'Solaris' - - elif system == 'IRIX64': - # IRIX reports IRIX64 on platforms with 64-bit support; yet it - # is really a version and not a different platform, since 32-bit - # apps are also supported.. - system = 'IRIX' - if version: - version = version + ' (64bit)' - else: - version = '64bit' - - elif system in ('win32','win16'): - # In case one of the other tricks - system = 'Windows' - - return system,release,version - -### Various internal helpers - -def _platform(*args): - - """ Helper to format the platform string in a filename - compatible format e.g. "system-version-machine". - """ - # Format the platform string - platform = string.join( - map(string.strip, - filter(len,args)), - '-') - - # Cleanup some possible filename obstacles... - replace = string.replace - platform = replace(platform,' ','_') - platform = replace(platform,'/','-') - platform = replace(platform,'\\','-') - platform = replace(platform,':','-') - platform = replace(platform,';','-') - platform = replace(platform,'"','-') - platform = replace(platform,'(','-') - platform = replace(platform,')','-') - - # No need to report 'unknown' information... - platform = replace(platform,'unknown','') - - # Fold '--'s and remove trailing '-' - while 1: - cleaned = replace(platform,'--','-') - if cleaned == platform: - break - platform = cleaned - while platform[-1] == '-': - platform = platform[:-1] - - return platform - -def _node(default=''): - - """ Helper to determine the node name of this machine. - """ - try: - import socket - except ImportError: - # No sockets... - return default - try: - return socket.gethostname() - except socket.error: - # Still not working... - return default - -# os.path.abspath is new in Python 1.5.2: -if not hasattr(os.path,'abspath'): - - def _abspath(path, - - isabs=os.path.isabs,join=os.path.join,getcwd=os.getcwd, - normpath=os.path.normpath): - - if not isabs(path): - path = join(getcwd(), path) - return normpath(path) - -else: - - _abspath = os.path.abspath - -def _follow_symlinks(filepath): - - """ In case filepath is a symlink, follow it until a - real file is reached. - """ - filepath = _abspath(filepath) - while os.path.islink(filepath): - filepath = os.path.normpath( - os.path.join(filepath,os.readlink(filepath))) - return filepath - -def _syscmd_uname(option,default=''): - - """ Interface to the system's uname command. - """ - if sys.platform in ('dos','win32','win16','os2'): - # XXX Others too ? - return default - try: - f = os.popen('uname %s 2> /dev/null' % option) - except (AttributeError,os.error): - return default - output = string.strip(f.read()) - rc = f.close() - if not output or rc: - return default - else: - return output - -def _syscmd_file(target,default=''): - - """ Interface to the system's file command. - - The function uses the -b option of the file command to have it - ommit the filename in its output and if possible the -L option - to have the command follow symlinks. It returns default in - case the command should fail. - - """ - target = _follow_symlinks(target) - try: - f = os.popen('file %s 2> /dev/null' % target) - except (AttributeError,os.error): - return default - output = string.strip(f.read()) - rc = f.close() - if not output or rc: - return default - else: - return output - -### Information about the used architecture - -# Default values for architecture; non-empty strings override the -# defaults given as parameters -_default_architecture = { - 'win32': ('','WindowsPE'), - 'win16': ('','Windows'), - 'dos': ('','MSDOS'), -} - -_architecture_split = re.compile(r'[\s,]').split - -def architecture(executable=sys.executable,bits='',linkage=''): - - """ Queries the given executable (defaults to the Python interpreter - binary) for various architecture information. - - Returns a tuple (bits,linkage) which contains information about - the bit architecture and the linkage format used for the - executable. Both values are returned as strings. - - Values that cannot be determined are returned as given by the - parameter presets. If bits is given as '', the sizeof(pointer) - (or sizeof(long) on Python version < 1.5.2) is used as - indicator for the supported pointer size. - - The function relies on the system's "file" command to do the - actual work. This is available on most if not all Unix - platforms. On some non-Unix platforms where the "file" command - does not exist and the executable is set to the Python interpreter - binary defaults from _default_architecture are used. - - """ - # Use the sizeof(pointer) as default number of bits if nothing - # else is given as default. - if not bits: - import struct - try: - size = struct.calcsize('P') - except struct.error: - # Older installations can only query longs - size = struct.calcsize('l') - bits = str(size*8) + 'bit' - - # Get data from the 'file' system command - output = _syscmd_file(executable,'') - - if not output and \ - executable == sys.executable: - # "file" command did not return anything; we'll try to provide - # some sensible defaults then... - if _default_architecture.has_key(sys.platform): - b,l = _default_architecture[sys.platform] - if b: - bits = b - if l: - linkage = l - return bits,linkage - - # Split the output into a list of strings omitting the filename - fileout = _architecture_split(output)[1:] - - if 'executable' not in fileout: - # Format not supported - return bits,linkage - - # Bits - if '32-bit' in fileout: - bits = '32bit' - elif 'N32' in fileout: - # On Irix only - bits = 'n32bit' - elif '64-bit' in fileout: - bits = '64bit' - - # Linkage - if 'ELF' in fileout: - linkage = 'ELF' - elif 'PE' in fileout: - # E.g. Windows uses this format - if 'Windows' in fileout: - linkage = 'WindowsPE' - else: - linkage = 'PE' - elif 'COFF' in fileout: - linkage = 'COFF' - elif 'MS-DOS' in fileout: - linkage = 'MSDOS' - else: - # XXX the A.OUT format also falls under this class... - pass - - return bits,linkage - -### Portable uname() interface - -_uname_cache = None - -def uname(): - - """ Fairly portable uname interface. Returns a tuple - of strings (system,node,release,version,machine,processor) - identifying the underlying platform. - - Note that unlike the os.uname function this also returns - possible processor information as an additional tuple entry. - - Entries which cannot be determined are set to ''. - - """ - global _uname_cache - - if _uname_cache is not None: - return _uname_cache - - # Get some infos from the builtin os.uname API... - try: - system,node,release,version,machine = os.uname() - - except AttributeError: - # Hmm, no uname... we'll have to poke around the system then. - system = sys.platform - release = '' - version = '' - node = _node() - machine = '' - processor = '' - use_syscmd_ver = 1 - - # Try win32_ver() on win32 platforms - if system == 'win32': - release,version,csd,ptype = win32_ver() - if release and version: - use_syscmd_ver = 0 - - # Try the 'ver' system command available on some - # platforms - if use_syscmd_ver: - system,release,version = _syscmd_ver(system) - # Normalize system to what win32_ver() normally returns - # (_syscmd_ver() tends to return the vendor name as well) - if system == 'Microsoft Windows': - system = 'Windows' - - # In case we still don't know anything useful, we'll try to - # help ourselves - if system in ('win32','win16'): - if not version: - if system == 'win32': - version = '32bit' - else: - version = '16bit' - system = 'Windows' - - elif system[:4] == 'java': - release,vendor,vminfo,osinfo = java_ver() - system = 'Java' - version = string.join(vminfo,', ') - if not version: - version = vendor - - elif os.name == 'mac': - release,(version,stage,nonrel),machine = mac_ver() - system = 'MacOS' - - else: - # System specific extensions - if system == 'OpenVMS': - # OpenVMS seems to have release and version mixed up - if not release or release == '0': - release = version - version = '' - # Get processor information - try: - import vms_lib - except ImportError: - pass - else: - csid, cpu_number = vms_lib.getsyi('SYI$_CPU',0) - if (cpu_number >= 128): - processor = 'Alpha' - else: - processor = 'VAX' - else: - # Get processor information from the uname system command - processor = _syscmd_uname('-p','') - - # 'unknown' is not really any useful as information; we'll convert - # it to '' which is more portable - if system == 'unknown': - system = '' - if node == 'unknown': - node = '' - if release == 'unknown': - release = '' - if version == 'unknown': - version = '' - if machine == 'unknown': - machine = '' - if processor == 'unknown': - processor = '' - _uname_cache = system,node,release,version,machine,processor - return _uname_cache - -### Direct interfaces to some of the uname() return values - -def system(): - - """ Returns the system/OS name, e.g. 'Linux', 'Windows' or 'Java'. - - An empty string is returned if the value cannot be determined. - - """ - return uname()[0] - -def node(): - - """ Returns the computer's network name (which may not be fully - qualified) - - An empty string is returned if the value cannot be determined. - - """ - return uname()[1] - -def release(): - - """ Returns the system's release, e.g. '2.2.0' or 'NT' - - An empty string is returned if the value cannot be determined. - - """ - return uname()[2] - -def version(): - - """ Returns the system's release version, e.g. '#3 on degas' - - An empty string is returned if the value cannot be determined. - - """ - return uname()[3] - -def machine(): - - """ Returns the machine type, e.g. 'i386' - - An empty string is returned if the value cannot be determined. - - """ - return uname()[4] - -def processor(): - - """ Returns the (true) processor name, e.g. 'amdk6' - - An empty string is returned if the value cannot be - determined. Note that many platforms do not provide this - information or simply return the same value as for machine(), - e.g. NetBSD does this. - - """ - return uname()[5] - -### Various APIs for extracting information from sys.version - -_sys_version_parser = re.compile(r'([\w.+]+)\s*' - '\(#?([^,]+),\s*([\w ]+),\s*([\w :]+)\)\s*' - '\[([^\]]+)\]?') -_sys_version_cache = None - -def _sys_version(): - - """ Returns a parsed version of Python's sys.version as tuple - (version, buildno, builddate, compiler) referring to the Python - version, build number, build date/time as string and the compiler - identification string. - - Note that unlike the Python sys.version, the returned value - for the Python version will always include the patchlevel (it - defaults to '.0'). - - """ - global _sys_version_cache - - if _sys_version_cache is not None: - return _sys_version_cache - version, buildno, builddate, buildtime, compiler = \ - _sys_version_parser.match(sys.version).groups() - builddate = builddate + ' ' + buildtime - l = string.split(version, '.') - if len(l) == 2: - l.append('0') - version = string.join(l, '.') - _sys_version_cache = (version, buildno, builddate, compiler) - return _sys_version_cache - -def python_version(): - - """ Returns the Python version as string 'major.minor.patchlevel' - - Note that unlike the Python sys.version, the returned value - will always include the patchlevel (it defaults to 0). - - """ - return _sys_version()[0] - -def python_version_tuple(): - - """ Returns the Python version as tuple (major, minor, patchlevel) - of strings. - - Note that unlike the Python sys.version, the returned value - will always include the patchlevel (it defaults to 0). - - """ - return string.split(_sys_version()[0], '.') - -def python_build(): - - """ Returns a tuple (buildno, builddate) stating the Python - build number and date as strings. - - """ - return _sys_version()[1:3] - -def python_compiler(): - - """ Returns a string identifying the compiler used for compiling - Python. - - """ - return _sys_version()[3] - -### The Opus Magnum of platform strings :-) - -_platform_cache = {} - -def platform(aliased=0, terse=0): - - """ Returns a single string identifying the underlying platform - with as much useful information as possible (but no more :). - - The output is intended to be human readable rather than - machine parseable. It may look different on different - platforms and this is intended. - - If "aliased" is true, the function will use aliases for - various platforms that report system names which differ from - their common names, e.g. SunOS will be reported as - Solaris. The system_alias() function is used to implement - this. - - Setting terse to true causes the function to return only the - absolute minimum information needed to identify the platform. - - """ - result = _platform_cache.get((aliased, terse), None) - if result is not None: - return result - - # Get uname information and then apply platform specific cosmetics - # to it... - system,node,release,version,machine,processor = uname() - if machine == processor: - processor = '' - if aliased: - system,release,version = system_alias(system,release,version) - - if system == 'Windows': - # MS platforms - rel,vers,csd,ptype = win32_ver(version) - if terse: - platform = _platform(system,release) - else: - platform = _platform(system,release,version,csd) - - elif system in ('Linux',): - # Linux based systems - distname,distversion,distid = dist('') - if distname and not terse: - platform = _platform(system,release,machine,processor, - 'with', - distname,distversion,distid) - else: - # If the distribution name is unknown check for libc vs. glibc - libcname,libcversion = libc_ver(sys.executable) - platform = _platform(system,release,machine,processor, - 'with', - libcname+libcversion) - elif system == 'Java': - # Java platforms - r,v,vminfo,(os_name,os_version,os_arch) = java_ver() - if terse: - platform = _platform(system,release,version) - else: - platform = _platform(system,release,version, - 'on', - os_name,os_version,os_arch) - - elif system == 'MacOS': - # MacOS platforms - if terse: - platform = _platform(system,release) - else: - platform = _platform(system,release,machine) - - else: - # Generic handler - if terse: - platform = _platform(system,release) - else: - bits,linkage = architecture(sys.executable) - platform = _platform(system,release,machine,processor,bits,linkage) - - _platform_cache[(aliased, terse)] = platform - return platform - -### Command line interface - -if __name__ == '__main__': - # Default is to print the aliased verbose platform string - terse = ('terse' in sys.argv or '--terse' in sys.argv) - aliased = (not 'nonaliased' in sys.argv and not '--nonaliased' in sys.argv) - print platform(aliased,terse) - sys.exit(0) diff --git a/Tools/pybench/pybench-2.0/pybench.py b/Tools/pybench/pybench-2.0/pybench.py deleted file mode 100755 index 8ff16c5..0000000 --- a/Tools/pybench/pybench-2.0/pybench.py +++ /dev/null @@ -1,938 +0,0 @@ -#!/usr/local/bin/python -O - -""" A Python Benchmark Suite - -""" -# -# Note: Please keep this module compatible to Python 1.5.2. -# -# Tests may include features in later Python versions, but these -# should then be embedded in try-except clauses in the configuration -# module Setup.py. -# - -# pybench Copyright -__copyright__ = """\ -Copyright (c), 1997-2006, Marc-Andre Lemburg (mal@lemburg.com) -Copyright (c), 2000-2006, eGenix.com Software GmbH (info@egenix.com) - - All Rights Reserved. - -Permission to use, copy, modify, and distribute this software and its -documentation for any purpose and without fee or royalty is hereby -granted, provided that the above copyright notice appear in all copies -and that both that copyright notice and this permission notice appear -in supporting documentation or portions thereof, including -modifications, that you make. - -THE AUTHOR MARC-ANDRE LEMBURG DISCLAIMS ALL WARRANTIES WITH REGARD TO -THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS, IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, -INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING -FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, -NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION -WITH THE USE OR PERFORMANCE OF THIS SOFTWARE ! -""" - -import sys, time, operator, string -from CommandLine import * - -try: - import cPickle - pickle = cPickle -except ImportError: - import pickle - -# Version number; version history: see README file ! -__version__ = '2.0' - -### Constants - -# Second fractions -MILLI_SECONDS = 1e3 -MICRO_SECONDS = 1e6 - -# Percent unit -PERCENT = 100 - -# Horizontal line length -LINE = 79 - -# Minimum test run-time -MIN_TEST_RUNTIME = 1e-3 - -# Number of calibration runs to use for calibrating the tests -CALIBRATION_RUNS = 20 - -# Number of calibration loops to run for each calibration run -CALIBRATION_LOOPS = 20 - -# Allow skipping calibration ? -ALLOW_SKIPPING_CALIBRATION = 1 - -# Timer types -TIMER_TIME_TIME = 'time.time' -TIMER_TIME_CLOCK = 'time.clock' -TIMER_SYSTIMES_PROCESSTIME = 'systimes.processtime' - -# Choose platform default timer -if sys.platform[:3] == 'win': - # On WinXP this has 2.5ms resolution - TIMER_PLATFORM_DEFAULT = TIMER_TIME_CLOCK -else: - # On Linux this has 1ms resolution - TIMER_PLATFORM_DEFAULT = TIMER_TIME_TIME - -# Print debug information ? -_debug = 0 - -### Helpers - -def get_timer(timertype): - - if timertype == TIMER_TIME_TIME: - return time.time - elif timertype == TIMER_TIME_CLOCK: - return time.clock - elif timertype == TIMER_SYSTIMES_PROCESSTIME: - import systimes - return systimes.processtime - else: - raise TypeError('unknown timer type: %s' % timertype) - -def get_machine_details(): - - import platform - if _debug: - print 'Getting machine details...' - buildno, builddate = platform.python_build() - python = platform.python_version() - if python > '2.0': - try: - unichr(100000) - except ValueError: - # UCS2 build (standard) - unicode = 'UCS2' - else: - # UCS4 build (most recent Linux distros) - unicode = 'UCS4' - else: - unicode = None - bits, linkage = platform.architecture() - return { - 'platform': platform.platform(), - 'processor': platform.processor(), - 'executable': sys.executable, - 'python': platform.python_version(), - 'compiler': platform.python_compiler(), - 'buildno': buildno, - 'builddate': builddate, - 'unicode': unicode, - 'bits': bits, - } - -def print_machine_details(d, indent=''): - - l = ['Machine Details:', - ' Platform ID: %s' % d.get('platform', 'n/a'), - ' Processor: %s' % d.get('processor', 'n/a'), - '', - 'Python:', - ' Executable: %s' % d.get('executable', 'n/a'), - ' Version: %s' % d.get('python', 'n/a'), - ' Compiler: %s' % d.get('compiler', 'n/a'), - ' Bits: %s' % d.get('bits', 'n/a'), - ' Build: %s (#%s)' % (d.get('builddate', 'n/a'), - d.get('buildno', 'n/a')), - ' Unicode: %s' % d.get('unicode', 'n/a'), - ] - print indent + string.join(l, '\n' + indent) + '\n' - -### Test baseclass - -class Test: - - """ All test must have this class as baseclass. It provides - the necessary interface to the benchmark machinery. - - The tests must set .rounds to a value high enough to let the - test run between 20-50 seconds. This is needed because - clock()-timing only gives rather inaccurate values (on Linux, - for example, it is accurate to a few hundreths of a - second). If you don't want to wait that long, use a warp - factor larger than 1. - - It is also important to set the .operations variable to a - value representing the number of "virtual operations" done per - call of .run(). - - If you change a test in some way, don't forget to increase - it's version number. - - """ - - ### Instance variables that each test should override - - # Version number of the test as float (x.yy); this is important - # for comparisons of benchmark runs - tests with unequal version - # number will not get compared. - version = 2.0 - - # The number of abstract operations done in each round of the - # test. An operation is the basic unit of what you want to - # measure. The benchmark will output the amount of run-time per - # operation. Note that in order to raise the measured timings - # significantly above noise level, it is often required to repeat - # sets of operations more than once per test round. The measured - # overhead per test round should be less than 1 second. - operations = 1 - - # Number of rounds to execute per test run. This should be - # adjusted to a figure that results in a test run-time of between - # 1-2 seconds. - rounds = 100000 - - ### Internal variables - - # Mark this class as implementing a test - is_a_test = 1 - - # Last timing: (real, run, overhead) - last_timing = (0.0, 0.0, 0.0) - - # Warp factor to use for this test - warp = 1 - - # Number of calibration runs to use - calibration_runs = CALIBRATION_RUNS - - # List of calibration timings - overhead_times = None - - # List of test run timings - times = [] - - # Timer used for the benchmark - timer = TIMER_PLATFORM_DEFAULT - - def __init__(self, warp=None, calibration_runs=None, timer=None): - - # Set parameters - if warp is not None: - self.rounds = int(self.rounds / warp) - if self.rounds == 0: - raise ValueError('warp factor set too high') - self.warp = warp - if calibration_runs is not None: - if (not ALLOW_SKIPPING_CALIBRATION and - calibration_runs < 1): - raise ValueError('at least one calibration run is required') - self.calibration_runs = calibration_runs - if timer is not None: - timer = timer - - # Init variables - self.times = [] - self.overhead_times = [] - - # We want these to be in the instance dict, so that pickle - # saves them - self.version = self.version - self.operations = self.operations - self.rounds = self.rounds - - def get_timer(self): - - """ Return the timer function to use for the test. - - """ - return get_timer(self.timer) - - def compatible(self, other): - - """ Return 1/0 depending on whether the test is compatible - with the other Test instance or not. - - """ - if self.version != other.version: - return 0 - if self.rounds != other.rounds: - return 0 - return 1 - - def calibrate_test(self): - - if self.calibration_runs == 0: - self.overhead_times = [0.0] - return - - calibrate = self.calibrate - timer = self.get_timer() - calibration_loops = range(CALIBRATION_LOOPS) - - # Time the calibration loop overhead - prep_times = [] - for i in range(self.calibration_runs): - t = timer() - for i in calibration_loops: - pass - t = timer() - t - prep_times.append(t) - min_prep_time = min(prep_times) - if _debug: - print - print 'Calib. prep time = %.6fms' % ( - min_prep_time * MILLI_SECONDS) - - # Time the calibration runs (doing CALIBRATION_LOOPS loops of - # .calibrate() method calls each) - for i in range(self.calibration_runs): - t = timer() - for i in calibration_loops: - calibrate() - t = timer() - t - self.overhead_times.append(t / CALIBRATION_LOOPS - - min_prep_time) - - # Check the measured times - min_overhead = min(self.overhead_times) - max_overhead = max(self.overhead_times) - if _debug: - print 'Calib. overhead time = %.6fms' % ( - min_overhead * MILLI_SECONDS) - if min_overhead < 0.0: - raise ValueError('calibration setup did not work') - if max_overhead - min_overhead > 0.1: - raise ValueError( - 'overhead calibration timing range too inaccurate: ' - '%r - %r' % (min_overhead, max_overhead)) - - def run(self): - - """ Run the test in two phases: first calibrate, then - do the actual test. Be careful to keep the calibration - timing low w/r to the test timing. - - """ - test = self.test - timer = self.get_timer() - - # Get calibration - min_overhead = min(self.overhead_times) - - # Test run - t = timer() - test() - t = timer() - t - if t < MIN_TEST_RUNTIME: - raise ValueError('warp factor too high: ' - 'test times are < 10ms') - eff_time = t - min_overhead - if eff_time < 0: - raise ValueError('wrong calibration') - self.last_timing = (eff_time, t, min_overhead) - self.times.append(eff_time) - - def calibrate(self): - - """ Calibrate the test. - - This method should execute everything that is needed to - setup and run the test - except for the actual operations - that you intend to measure. pybench uses this method to - measure the test implementation overhead. - - """ - return - - def test(self): - - """ Run the test. - - The test needs to run self.rounds executing - self.operations number of operations each. - - """ - return - - def stat(self): - - """ Return test run statistics as tuple: - - (minimum run time, - average run time, - total run time, - average time per operation, - minimum overhead time) - - """ - runs = len(self.times) - if runs == 0: - return 0.0, 0.0, 0.0, 0.0 - min_time = min(self.times) - total_time = reduce(operator.add, self.times, 0.0) - avg_time = total_time / float(runs) - operation_avg = total_time / float(runs - * self.rounds - * self.operations) - if self.overhead_times: - min_overhead = min(self.overhead_times) - else: - min_overhead = self.last_timing[2] - return min_time, avg_time, total_time, operation_avg, min_overhead - -### Load Setup - -# This has to be done after the definition of the Test class, since -# the Setup module will import subclasses using this class. - -import Setup - -### Benchmark base class - -class Benchmark: - - # Name of the benchmark - name = '' - - # Number of benchmark rounds to run - rounds = 1 - - # Warp factor use to run the tests - warp = 1 # Warp factor - - # Average benchmark round time - roundtime = 0 - - # Benchmark version number as float x.yy - version = 2.0 - - # Produce verbose output ? - verbose = 0 - - # Dictionary with the machine details - machine_details = None - - # Timer used for the benchmark - timer = TIMER_PLATFORM_DEFAULT - - def __init__(self, name, verbose=None, timer=None, warp=None, - calibration_runs=None): - - if name: - self.name = name - else: - self.name = '%04i-%02i-%02i %02i:%02i:%02i' % \ - (time.localtime(time.time())[:6]) - if verbose is not None: - self.verbose = verbose - if timer is not None: - self.timer = timer - if warp is not None: - self.warp = warp - if calibration_runs is not None: - self.calibration_runs = calibration_runs - - # Init vars - self.tests = {} - if _debug: - print 'Getting machine details...' - self.machine_details = get_machine_details() - - # Make .version an instance attribute to have it saved in the - # Benchmark pickle - self.version = self.version - - def get_timer(self): - - """ Return the timer function to use for the test. - - """ - return get_timer(self.timer) - - def compatible(self, other): - - """ Return 1/0 depending on whether the benchmark is - compatible with the other Benchmark instance or not. - - """ - if self.version != other.version: - return 0 - if (self.machine_details == other.machine_details and - self.timer != other.timer): - return 0 - if (self.calibration_runs == 0 and - other.calibration_runs != 0): - return 0 - if (self.calibration_runs != 0 and - other.calibration_runs == 0): - return 0 - return 1 - - def load_tests(self, setupmod, limitnames=None): - - # Add tests - if self.verbose: - print 'Searching for tests ...' - print '--------------------------------------' - for testclass in setupmod.__dict__.values(): - if not hasattr(testclass, 'is_a_test'): - continue - name = testclass.__name__ - if name == 'Test': - continue - if (limitnames is not None and - limitnames.search(name) is None): - continue - self.tests[name] = testclass( - warp=self.warp, - calibration_runs=self.calibration_runs, - timer=self.timer) - l = self.tests.keys() - l.sort() - if self.verbose: - for name in l: - print ' %s' % name - print '--------------------------------------' - print ' %i tests found' % len(l) - print - - def calibrate(self): - - print 'Calibrating tests. Please wait...' - if self.verbose: - print - print 'Test min max' - print '-' * LINE - tests = self.tests.items() - tests.sort() - for i in range(len(tests)): - name, test = tests[i] - test.calibrate_test() - if self.verbose: - print '%30s: %6.3fms %6.3fms' % \ - (name, - min(test.overhead_times) * MILLI_SECONDS, - max(test.overhead_times) * MILLI_SECONDS) - print - - def run(self): - - tests = self.tests.items() - tests.sort() - timer = self.get_timer() - print 'Running %i round(s) of the suite at warp factor %i:' % \ - (self.rounds, self.warp) - print - self.roundtimes = [] - for i in range(self.rounds): - if self.verbose: - print ' Round %-25i effective absolute overhead' % (i+1) - total_eff_time = 0.0 - for j in range(len(tests)): - name, test = tests[j] - if self.verbose: - print '%30s:' % name, - test.run() - (eff_time, abs_time, min_overhead) = test.last_timing - total_eff_time = total_eff_time + eff_time - if self.verbose: - print ' %5.0fms %5.0fms %7.3fms' % \ - (eff_time * MILLI_SECONDS, - abs_time * MILLI_SECONDS, - min_overhead * MILLI_SECONDS) - self.roundtimes.append(total_eff_time) - if self.verbose: - print (' ' - ' ------------------------------') - print (' ' - ' Totals: %6.0fms' % - (total_eff_time * MILLI_SECONDS)) - print - else: - print '* Round %i done in %.3f seconds.' % (i+1, - total_eff_time) - print - - def stat(self): - - """ Return benchmark run statistics as tuple: - - (minimum round time, - average round time, - maximum round time) - - XXX Currently not used, since the benchmark does test - statistics across all rounds. - - """ - runs = len(self.roundtimes) - if runs == 0: - return 0.0, 0.0 - min_time = min(self.roundtimes) - total_time = reduce(operator.add, self.roundtimes, 0.0) - avg_time = total_time / float(runs) - max_time = max(self.roundtimes) - return (min_time, avg_time, max_time) - - def print_header(self, title='Benchmark'): - - print '-' * LINE - print '%s: %s' % (title, self.name) - print '-' * LINE - print - print ' Rounds: %s' % self.rounds - print ' Warp: %s' % self.warp - print ' Timer: %s' % self.timer - print - if self.machine_details: - print_machine_details(self.machine_details, indent=' ') - print - - def print_benchmark(self, hidenoise=0, limitnames=None): - - print ('Test ' - ' minimum average operation overhead') - print '-' * LINE - tests = self.tests.items() - tests.sort() - total_min_time = 0.0 - total_avg_time = 0.0 - for name, test in tests: - if (limitnames is not None and - limitnames.search(name) is None): - continue - (min_time, - avg_time, - total_time, - op_avg, - min_overhead) = test.stat() - total_min_time = total_min_time + min_time - total_avg_time = total_avg_time + avg_time - print '%30s: %5.0fms %5.0fms %6.2fus %7.3fms' % \ - (name, - min_time * MILLI_SECONDS, - avg_time * MILLI_SECONDS, - op_avg * MICRO_SECONDS, - min_overhead *MILLI_SECONDS) - print '-' * LINE - print ('Totals: ' - ' %6.0fms %6.0fms' % - (total_min_time * MILLI_SECONDS, - total_avg_time * MILLI_SECONDS, - )) - print - - def print_comparison(self, compare_to, hidenoise=0, limitnames=None): - - # Check benchmark versions - if compare_to.version != self.version: - print ('* Benchmark versions differ: ' - 'cannot compare this benchmark to "%s" !' % - compare_to.name) - print - self.print_benchmark(hidenoise=hidenoise, - limitnames=limitnames) - return - - # Print header - compare_to.print_header('Comparing with') - print ('Test ' - ' minimum run-time average run-time') - print (' ' - ' this other diff this other diff') - print '-' * LINE - - # Print test comparisons - tests = self.tests.items() - tests.sort() - total_min_time = other_total_min_time = 0.0 - total_avg_time = other_total_avg_time = 0.0 - benchmarks_compatible = self.compatible(compare_to) - tests_compatible = 1 - for name, test in tests: - if (limitnames is not None and - limitnames.search(name) is None): - continue - (min_time, - avg_time, - total_time, - op_avg, - min_overhead) = test.stat() - total_min_time = total_min_time + min_time - total_avg_time = total_avg_time + avg_time - try: - other = compare_to.tests[name] - except KeyError: - other = None - if other is None: - # Other benchmark doesn't include the given test - min_diff, avg_diff = 'n/a', 'n/a' - other_min_time = 0.0 - other_avg_time = 0.0 - tests_compatible = 0 - else: - (other_min_time, - other_avg_time, - other_total_time, - other_op_avg, - other_min_overhead) = other.stat() - other_total_min_time = other_total_min_time + other_min_time - other_total_avg_time = other_total_avg_time + other_avg_time - if (benchmarks_compatible and - test.compatible(other)): - # Both benchmark and tests are comparible - min_diff = ((min_time * self.warp) / - (other_min_time * other.warp) - 1.0) - avg_diff = ((avg_time * self.warp) / - (other_avg_time * other.warp) - 1.0) - if hidenoise and abs(min_diff) < 10.0: - min_diff = '' - else: - min_diff = '%+5.1f%%' % (min_diff * PERCENT) - if hidenoise and abs(avg_diff) < 10.0: - avg_diff = '' - else: - avg_diff = '%+5.1f%%' % (avg_diff * PERCENT) - else: - # Benchmark or tests are not comparible - min_diff, avg_diff = 'n/a', 'n/a' - tests_compatible = 0 - print '%30s: %5.0fms %5.0fms %7s %5.0fms %5.0fms %7s' % \ - (name, - min_time * MILLI_SECONDS, - other_min_time * MILLI_SECONDS * compare_to.warp / self.warp, - min_diff, - avg_time * MILLI_SECONDS, - other_avg_time * MILLI_SECONDS * compare_to.warp / self.warp, - avg_diff) - print '-' * LINE - - # Summarise test results - if not benchmarks_compatible or not tests_compatible: - min_diff, avg_diff = 'n/a', 'n/a' - else: - if other_total_min_time != 0.0: - min_diff = '%+5.1f%%' % ( - ((total_min_time * self.warp) / - (other_total_min_time * compare_to.warp) - 1.0) * PERCENT) - else: - min_diff = 'n/a' - if other_total_avg_time != 0.0: - avg_diff = '%+5.1f%%' % ( - ((total_avg_time * self.warp) / - (other_total_avg_time * compare_to.warp) - 1.0) * PERCENT) - else: - avg_diff = 'n/a' - print ('Totals: ' - ' %5.0fms %5.0fms %7s %5.0fms %5.0fms %7s' % - (total_min_time * MILLI_SECONDS, - (other_total_min_time * compare_to.warp/self.warp - * MILLI_SECONDS), - min_diff, - total_avg_time * MILLI_SECONDS, - (other_total_avg_time * compare_to.warp/self.warp - * MILLI_SECONDS), - avg_diff - )) - print - print '(this=%s, other=%s)' % (self.name, - compare_to.name) - print - -class PyBenchCmdline(Application): - - header = ("PYBENCH - a benchmark test suite for Python " - "interpreters/compilers.") - - version = __version__ - - debug = _debug - - options = [ArgumentOption('-n', - 'number of rounds', - Setup.Number_of_rounds), - ArgumentOption('-f', - 'save benchmark to file arg', - ''), - ArgumentOption('-c', - 'compare benchmark with the one in file arg', - ''), - ArgumentOption('-s', - 'show benchmark in file arg, then exit', - ''), - ArgumentOption('-w', - 'set warp factor to arg', - Setup.Warp_factor), - ArgumentOption('-t', - 'run only tests with names matching arg', - ''), - ArgumentOption('-C', - 'set the number of calibration runs to arg', - CALIBRATION_RUNS), - SwitchOption('-d', - 'hide noise in comparisons', - 0), - SwitchOption('-v', - 'verbose output (not recommended)', - 0), - SwitchOption('--with-gc', - 'enable garbage collection', - 0), - SwitchOption('--with-syscheck', - 'use default sys check interval', - 0), - ArgumentOption('--timer', - 'use given timer', - TIMER_PLATFORM_DEFAULT), - ] - - about = """\ -The normal operation is to run the suite and display the -results. Use -f to save them for later reuse or comparisons. - -Available timers: - - time.time - time.clock - systimes.processtime - -Examples: - -python2.1 pybench.py -f p21.pybench -python2.5 pybench.py -f p25.pybench -python pybench.py -s p25.pybench -c p21.pybench -""" - copyright = __copyright__ - - def main(self): - - rounds = self.values['-n'] - reportfile = self.values['-f'] - show_bench = self.values['-s'] - compare_to = self.values['-c'] - hidenoise = self.values['-d'] - warp = int(self.values['-w']) - withgc = self.values['--with-gc'] - limitnames = self.values['-t'] - if limitnames: - if _debug: - print '* limiting test names to one with substring "%s"' % \ - limitnames - limitnames = re.compile(limitnames, re.I) - else: - limitnames = None - verbose = self.verbose - withsyscheck = self.values['--with-syscheck'] - calibration_runs = self.values['-C'] - timer = self.values['--timer'] - - print '-' * LINE - print 'PYBENCH %s' % __version__ - print '-' * LINE - print '* using Python %s' % (string.split(sys.version)[0]) - - # Switch off garbage collection - if not withgc: - try: - import gc - except ImportError: - print '* Python version doesn\'t support garbage collection' - else: - gc.disable() - print '* disabled garbage collection' - - # "Disable" sys check interval - if not withsyscheck: - # Too bad the check interval uses an int instead of a long... - value = 2147483647 - sys.setcheckinterval(value) - print '* system check interval set to maximum: %s' % value - - if timer == TIMER_SYSTIMES_PROCESSTIME: - import systimes - print '* using timer: systimes.processtime (%s)' % \ - systimes.SYSTIMES_IMPLEMENTATION - else: - print '* using timer: %s' % timer - - print - - if compare_to: - try: - f = open(compare_to,'rb') - bench = pickle.load(f) - bench.name = compare_to - f.close() - compare_to = bench - except IOError, reason: - print '* Error opening/reading file %s: %s' % ( - repr(compare_to), - reason) - compare_to = None - - if show_bench: - try: - f = open(show_bench,'rb') - bench = pickle.load(f) - bench.name = show_bench - f.close() - bench.print_header() - if compare_to: - bench.print_comparison(compare_to, - hidenoise=hidenoise, - limitnames=limitnames) - else: - bench.print_benchmark(hidenoise=hidenoise, - limitnames=limitnames) - except IOError: - print '* Error opening/reading file %s: %s' % ( - repr(show_bench), - reason) - print - return - - if reportfile: - print 'Creating benchmark: %s (rounds=%i, warp=%i)' % \ - (reportfile, rounds, warp) - print - - # Create benchmark object - bench = Benchmark(reportfile, - verbose=verbose, - timer=timer, - warp=warp, - calibration_runs=calibration_runs) - bench.rounds = rounds - bench.load_tests(Setup, limitnames=limitnames) - try: - bench.calibrate() - bench.run() - except KeyboardInterrupt: - print - print '*** KeyboardInterrupt -- Aborting' - print - return - bench.print_header() - if compare_to: - bench.print_comparison(compare_to, - hidenoise=hidenoise, - limitnames=limitnames) - else: - bench.print_benchmark(hidenoise=hidenoise, - limitnames=limitnames) - - # Ring bell - sys.stderr.write('\007') - - if reportfile: - try: - f = open(reportfile,'wb') - bench.name = reportfile - pickle.dump(bench,f) - f.close() - except IOError: - print '* Error opening/writing reportfile' - -if __name__ == '__main__': - PyBenchCmdline() diff --git a/Tools/pybench/pybench-2.0/systimes.py b/Tools/pybench/pybench-2.0/systimes.py deleted file mode 100644 index bf07e36..0000000 --- a/Tools/pybench/pybench-2.0/systimes.py +++ /dev/null @@ -1,211 +0,0 @@ -#!/usr/bin/env python - -""" systimes() user and system timer implementations for use by - pybench. - - This module implements various different strategies for measuring - performance timings. It tries to choose the best available method - based on the platforma and available tools. - - On Windows, it is recommended to have the Mark Hammond win32 - package installed. Alternatively, the Thomas Heller ctypes - packages can also be used. - - On Unix systems, the standard resource module provides the highest - resolution timings. Unfortunately, it is not available on all Unix - platforms. - - If no supported timing methods based on process time can be found, - the module reverts to the highest resolution wall-clock timer - instead. The system time part will then always be 0.0. - - The module exports one public API: - - def systimes(): - - Return the current timer values for measuring user and system - time as tuple of seconds (user_time, system_time). - - Copyright (c) 2006, Marc-Andre Lemburg (mal@egenix.com). See the - documentation for further information on copyrights, or contact - the author. All Rights Reserved. - -""" -import time, sys, struct - -# -# Note: Please keep this module compatible to Python 1.5.2. -# -# TODOs: -# -# * Add ctypes wrapper for new clock_gettime() real-time POSIX APIs; -# these will then provide nano-second resolution where available. -# -# * Add a function that returns the resolution of systimes() -# values, ie. systimesres(). -# - -### Choose an implementation - -SYSTIMES_IMPLEMENTATION = None -USE_CTYPES_GETPROCESSTIMES = 'cytpes GetProcessTimes() wrapper' -USE_WIN32PROCESS_GETPROCESSTIMES = 'win32process.GetProcessTimes()' -USE_RESOURCE_GETRUSAGE = 'resource.getrusage()' -USE_PROCESS_TIME_CLOCK = 'time.clock() (process time)' -USE_WALL_TIME_CLOCK = 'time.clock() (wall-clock)' -USE_WALL_TIME_TIME = 'time.time() (wall-clock)' - -if sys.platform[:3] == 'win': - # Windows platform - try: - import win32process - except ImportError: - try: - import ctypes - except ImportError: - # Use the wall-clock implementation time.clock(), since this - # is the highest resolution clock available on Windows - SYSTIMES_IMPLEMENTATION = USE_WALL_TIME_CLOCK - else: - SYSTIMES_IMPLEMENTATION = USE_CTYPES_GETPROCESSTIMES - else: - SYSTIMES_IMPLEMENTATION = USE_WIN32PROCESS_GETPROCESSTIMES -else: - # All other platforms - try: - import resource - except ImportError: - pass - else: - SYSTIMES_IMPLEMENTATION = USE_RESOURCE_GETRUSAGE - -# Fall-back solution -if SYSTIMES_IMPLEMENTATION is None: - # Check whether we can use time.clock() as approximation - # for systimes() - start = time.clock() - time.sleep(0.1) - stop = time.clock() - if stop - start < 0.001: - # Looks like time.clock() is usable (and measures process - # time) - SYSTIMES_IMPLEMENTATION = USE_PROCESS_TIME_CLOCK - else: - # Use wall-clock implementation time.time() since this provides - # the highest resolution clock on most systems - SYSTIMES_IMPLEMENTATION = USE_WALL_TIME_TIME - -### Implementations - -def getrusage_systimes(): - return resource.getrusage(resource.RUSAGE_SELF)[:2] - -def process_time_clock_systimes(): - return (time.clock(), 0.0) - -def wall_clock_clock_systimes(): - return (time.clock(), 0.0) - -def wall_clock_time_systimes(): - return (time.time(), 0.0) - -# Number of clock ticks per second for the values returned -# by GetProcessTimes() on Windows. -# -# Note: Ticks returned by GetProcessTimes() are 100ns intervals on -# Windows XP. However, the process times are only updated with every -# clock tick and the frequency of these is somewhat lower: depending -# on the OS version between 10ms and 15ms. Even worse, the process -# time seems to be allocated to process currently running when the -# clock interrupt arrives, ie. it is possible that the current time -# slice gets accounted to a different process. - -WIN32_PROCESS_TIMES_TICKS_PER_SECOND = 1e7 - -def win32process_getprocesstimes_systimes(): - d = win32process.GetProcessTimes(win32process.GetCurrentProcess()) - return (d['UserTime'] / WIN32_PROCESS_TIMES_TICKS_PER_SECOND, - d['KernelTime'] / WIN32_PROCESS_TIMES_TICKS_PER_SECOND) - -def ctypes_getprocesstimes_systimes(): - creationtime = ctypes.c_ulonglong() - exittime = ctypes.c_ulonglong() - kerneltime = ctypes.c_ulonglong() - usertime = ctypes.c_ulonglong() - rc = ctypes.windll.kernel32.GetProcessTimes( - ctypes.windll.kernel32.GetCurrentProcess(), - ctypes.byref(creationtime), - ctypes.byref(exittime), - ctypes.byref(kerneltime), - ctypes.byref(usertime)) - if not rc: - raise TypeError('GetProcessTimes() returned an error') - return (usertime.value / WIN32_PROCESS_TIMES_TICKS_PER_SECOND, - kerneltime.value / WIN32_PROCESS_TIMES_TICKS_PER_SECOND) - -# Select the default for the systimes() function - -if SYSTIMES_IMPLEMENTATION is USE_RESOURCE_GETRUSAGE: - systimes = getrusage_systimes - -elif SYSTIMES_IMPLEMENTATION is USE_PROCESS_TIME_CLOCK: - systimes = process_time_clock_systimes - -elif SYSTIMES_IMPLEMENTATION is USE_WALL_TIME_CLOCK: - systimes = wall_clock_clock_systimes - -elif SYSTIMES_IMPLEMENTATION is USE_WALL_TIME_TIME: - systimes = wall_clock_time_systimes - -elif SYSTIMES_IMPLEMENTATION is USE_WIN32PROCESS_GETPROCESSTIMES: - systimes = win32process_getprocesstimes_systimes - -elif SYSTIMES_IMPLEMENTATION is USE_CTYPES_GETPROCESSTIMES: - systimes = ctypes_getprocesstimes_systimes - -else: - raise TypeError('no suitable systimes() implementation found') - -def processtime(): - - """ Return the total time spent on the process. - - This is the sum of user and system time as returned by - systimes(). - - """ - user, system = systimes() - return user + system - -### Testing - -def some_workload(): - x = 0L - for i in xrange(10000000L): - x = x + 1L - -def test_workload(): - print 'Testing systimes() under load conditions' - t0 = systimes() - some_workload() - t1 = systimes() - print 'before:', t0 - print 'after:', t1 - print 'differences:', (t1[0] - t0[0], t1[1] - t0[1]) - print - -def test_idle(): - print 'Testing systimes() under idle conditions' - t0 = systimes() - time.sleep(1) - t1 = systimes() - print 'before:', t0 - print 'after:', t1 - print 'differences:', (t1[0] - t0[0], t1[1] - t0[1]) - print - -if __name__ == '__main__': - print 'Using %s as timer' % SYSTIMES_IMPLEMENTATION - print - test_workload() - test_idle() |