1 from pybench import Test 2 3 class PythonFunctionCalls(Test): 4 5 version = 2.0 6 operations = 5*(1+4+4+2) 7 rounds = 60000 8 9 def test(self): 10 11 global f,f1,g,h 12 13 # define functions 14 def f(): 15 pass 16 17 def f1(x): 18 pass 19 20 def g(a,b,c): 21 return a,b,c 22 23 def h(a,b,c,d=1,e=2,f=3): 24 return d,e,f 25 26 # do calls 27 for i in xrange(self.rounds): 28 29 f() 30 f1(i) 31 f1(i) 32 f1(i) 33 f1(i) 34 g(i,i,i) 35 g(i,i,i) 36 g(i,i,i) 37 g(i,i,i) 38 h(i,i,3,i,i) 39 h(i,i,i,2,i,3) 40 41 f() 42 f1(i) 43 f1(i) 44 f1(i) 45 f1(i) 46 g(i,i,i) 47 g(i,i,i) 48 g(i,i,i) 49 g(i,i,i) 50 h(i,i,3,i,i) 51 h(i,i,i,2,i,3) 52 53 f() 54 f1(i) 55 f1(i) 56 f1(i) 57 f1(i) 58 g(i,i,i) 59 g(i,i,i) 60 g(i,i,i) 61 g(i,i,i) 62 h(i,i,3,i,i) 63 h(i,i,i,2,i,3) 64 65 f() 66 f1(i) 67 f1(i) 68 f1(i) 69 f1(i) 70 g(i,i,i) 71 g(i,i,i) 72 g(i,i,i) 73 g(i,i,i) 74 h(i,i,3,i,i) 75 h(i,i,i,2,i,3) 76 77 f() 78 f1(i) 79 f1(i) 80 f1(i) 81 f1(i) 82 g(i,i,i) 83 g(i,i,i) 84 g(i,i,i) 85 g(i,i,i) 86 h(i,i,3,i,i) 87 h(i,i,i,2,i,3) 88 89 def calibrate(self): 90 91 global f,f1,g,h 92 93 # define functions 94 def f(): 95 pass 96 97 def f1(x): 98 pass 99 100 def g(a,b,c): 101 return a,b,c 102 103 def h(a,b,c,d=1,e=2,f=3): 104 return d,e,f 105 106 # do calls 107 for i in xrange(self.rounds): 108 pass 109 110 ### 111 112 class ComplexPythonFunctionCalls(Test): 113 114 version = 2.0 115 operations = 4*5 116 rounds = 100000 117 118 def test(self): 119 120 # define functions 121 def f(a,b,c,d=1,e=2,f=3): 122 return f 123 124 args = 1,2 125 kwargs = dict(c=3,d=4,e=5) 126 127 # do calls 128 for i in xrange(self.rounds): 129 f(a=i,b=i,c=i) 130 f(f=i,e=i,d=i,c=2,b=i,a=3) 131 f(1,b=i,**kwargs) 132 f(*args,**kwargs) 133 134 f(a=i,b=i,c=i) 135 f(f=i,e=i,d=i,c=2,b=i,a=3) 136 f(1,b=i,**kwargs) 137 f(*args,**kwargs) 138 139 f(a=i,b=i,c=i) 140 f(f=i,e=i,d=i,c=2,b=i,a=3) 141 f(1,b=i,**kwargs) 142 f(*args,**kwargs) 143 144 f(a=i,b=i,c=i) 145 f(f=i,e=i,d=i,c=2,b=i,a=3) 146 f(1,b=i,**kwargs) 147 f(*args,**kwargs) 148 149 f(a=i,b=i,c=i) 150 f(f=i,e=i,d=i,c=2,b=i,a=3) 151 f(1,b=i,**kwargs) 152 f(*args,**kwargs) 153 154 155 def calibrate(self): 156 157 # define functions 158 def f(a,b,c,d=1,e=2,f=3): 159 return f 160 161 args = 1,2 162 kwargs = dict(c=3,d=4,e=5) 163 164 # do calls 165 for i in xrange(self.rounds): 166 pass 167 168 ### 169 170 class BuiltinFunctionCalls(Test): 171 172 version = 2.0 173 operations = 5*(2+5+5+5) 174 rounds = 60000 175 176 def test(self): 177 178 # localize functions 179 f0 = globals 180 f1 = hash 181 f2 = cmp 182 f3 = range 183 184 # do calls 185 for i in xrange(self.rounds): 186 187 f0() 188 f0() 189 f1(i) 190 f1(i) 191 f1(i) 192 f1(i) 193 f1(i) 194 f2(1,2) 195 f2(1,2) 196 f2(1,2) 197 f2(1,2) 198 f2(1,2) 199 f3(1,3,2) 200 f3(1,3,2) 201 f3(1,3,2) 202 f3(1,3,2) 203 f3(1,3,2) 204 205 f0() 206 f0() 207 f1(i) 208 f1(i) 209 f1(i) 210 f1(i) 211 f1(i) 212 f2(1,2) 213 f2(1,2) 214 f2(1,2) 215 f2(1,2) 216 f2(1,2) 217 f3(1,3,2) 218 f3(1,3,2) 219 f3(1,3,2) 220 f3(1,3,2) 221 f3(1,3,2) 222 223 f0() 224 f0() 225 f1(i) 226 f1(i) 227 f1(i) 228 f1(i) 229 f1(i) 230 f2(1,2) 231 f2(1,2) 232 f2(1,2) 233 f2(1,2) 234 f2(1,2) 235 f3(1,3,2) 236 f3(1,3,2) 237 f3(1,3,2) 238 f3(1,3,2) 239 f3(1,3,2) 240 241 f0() 242 f0() 243 f1(i) 244 f1(i) 245 f1(i) 246 f1(i) 247 f1(i) 248 f2(1,2) 249 f2(1,2) 250 f2(1,2) 251 f2(1,2) 252 f2(1,2) 253 f3(1,3,2) 254 f3(1,3,2) 255 f3(1,3,2) 256 f3(1,3,2) 257 f3(1,3,2) 258 259 f0() 260 f0() 261 f1(i) 262 f1(i) 263 f1(i) 264 f1(i) 265 f1(i) 266 f2(1,2) 267 f2(1,2) 268 f2(1,2) 269 f2(1,2) 270 f2(1,2) 271 f3(1,3,2) 272 f3(1,3,2) 273 f3(1,3,2) 274 f3(1,3,2) 275 f3(1,3,2) 276 277 def calibrate(self): 278 279 # localize functions 280 f0 = dir 281 f1 = hash 282 f2 = range 283 f3 = range 284 285 # do calls 286 for i in xrange(self.rounds): 287 pass 288 289 ### 290 291 class PythonMethodCalls(Test): 292 293 version = 2.0 294 operations = 5*(6 + 5 + 4) 295 rounds = 30000 296 297 def test(self): 298 299 class c: 300 301 x = 2 302 s = 'string' 303 304 def f(self): 305 306 return self.x 307 308 def j(self,a,b): 309 310 self.y = a 311 self.t = b 312 return self.y 313 314 def k(self,a,b,c=3): 315 316 self.y = a 317 self.s = b 318 self.t = c 319 320 o = c() 321 322 for i in xrange(self.rounds): 323 324 o.f() 325 o.f() 326 o.f() 327 o.f() 328 o.f() 329 o.f() 330 o.j(i,i) 331 o.j(i,i) 332 o.j(i,2) 333 o.j(i,2) 334 o.j(2,2) 335 o.k(i,i) 336 o.k(i,2) 337 o.k(i,2,3) 338 o.k(i,i,c=4) 339 340 o.f() 341 o.f() 342 o.f() 343 o.f() 344 o.f() 345 o.f() 346 o.j(i,i) 347 o.j(i,i) 348 o.j(i,2) 349 o.j(i,2) 350 o.j(2,2) 351 o.k(i,i) 352 o.k(i,2) 353 o.k(i,2,3) 354 o.k(i,i,c=4) 355 356 o.f() 357 o.f() 358 o.f() 359 o.f() 360 o.f() 361 o.f() 362 o.j(i,i) 363 o.j(i,i) 364 o.j(i,2) 365 o.j(i,2) 366 o.j(2,2) 367 o.k(i,i) 368 o.k(i,2) 369 o.k(i,2,3) 370 o.k(i,i,c=4) 371 372 o.f() 373 o.f() 374 o.f() 375 o.f() 376 o.f() 377 o.f() 378 o.j(i,i) 379 o.j(i,i) 380 o.j(i,2) 381 o.j(i,2) 382 o.j(2,2) 383 o.k(i,i) 384 o.k(i,2) 385 o.k(i,2,3) 386 o.k(i,i,c=4) 387 388 o.f() 389 o.f() 390 o.f() 391 o.f() 392 o.f() 393 o.f() 394 o.j(i,i) 395 o.j(i,i) 396 o.j(i,2) 397 o.j(i,2) 398 o.j(2,2) 399 o.k(i,i) 400 o.k(i,2) 401 o.k(i,2,3) 402 o.k(i,i,c=4) 403 404 def calibrate(self): 405 406 class c: 407 408 x = 2 409 s = 'string' 410 411 def f(self): 412 413 return self.x 414 415 def j(self,a,b): 416 417 self.y = a 418 self.t = b 419 420 def k(self,a,b,c=3): 421 422 self.y = a 423 self.s = b 424 self.t = c 425 426 o = c 427 428 for i in xrange(self.rounds): 429 pass 430 431 ### 432 433 class Recursion(Test): 434 435 version = 2.0 436 operations = 5 437 rounds = 100000 438 439 def test(self): 440 441 global f 442 443 def f(x): 444 445 if x > 1: 446 return f(x-1) 447 return 1 448 449 for i in xrange(self.rounds): 450 f(10) 451 f(10) 452 f(10) 453 f(10) 454 f(10) 455 456 def calibrate(self): 457 458 global f 459 460 def f(x): 461 462 if x > 0: 463 return f(x-1) 464 return 1 465 466 for i in xrange(self.rounds): 467 pass 468 469 470 ### Test to make Fredrik happy... 471 472 if __name__ == '__main__': 473 import timeit 474 if 0: 475 timeit.TestClass = PythonFunctionCalls 476 timeit.main(['-s', 'test = TestClass(); test.rounds = 1000', 477 'test.test()']) 478 else: 479 setup = """\ 480 global f,f1,g,h 481 482 # define functions 483 def f(): 484 pass 485 486 def f1(x): 487 pass 488 489 def g(a,b,c): 490 return a,b,c 491 492 def h(a,b,c,d=1,e=2,f=3): 493 return d,e,f 494 495 i = 1 496 """ 497 test = """\ 498 f() 499 f1(i) 500 f1(i) 501 f1(i) 502 f1(i) 503 g(i,i,i) 504 g(i,i,i) 505 g(i,i,i) 506 g(i,i,i) 507 h(i,i,3,i,i) 508 h(i,i,i,2,i,3) 509 510 f() 511 f1(i) 512 f1(i) 513 f1(i) 514 f1(i) 515 g(i,i,i) 516 g(i,i,i) 517 g(i,i,i) 518 g(i,i,i) 519 h(i,i,3,i,i) 520 h(i,i,i,2,i,3) 521 522 f() 523 f1(i) 524 f1(i) 525 f1(i) 526 f1(i) 527 g(i,i,i) 528 g(i,i,i) 529 g(i,i,i) 530 g(i,i,i) 531 h(i,i,3,i,i) 532 h(i,i,i,2,i,3) 533 534 f() 535 f1(i) 536 f1(i) 537 f1(i) 538 f1(i) 539 g(i,i,i) 540 g(i,i,i) 541 g(i,i,i) 542 g(i,i,i) 543 h(i,i,3,i,i) 544 h(i,i,i,2,i,3) 545 546 f() 547 f1(i) 548 f1(i) 549 f1(i) 550 f1(i) 551 g(i,i,i) 552 g(i,i,i) 553 g(i,i,i) 554 g(i,i,i) 555 h(i,i,3,i,i) 556 h(i,i,i,2,i,3) 557 """ 558 559 timeit.main(['-s', setup, 560 test]) 561