| 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 range(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 range(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 range(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 range(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 range(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 range(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 range(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 range(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]) |