Spaces:
Sleeping
Sleeping
#!/usr/bin/env python | |
from sympy.core.random import random | |
from sympy.core.numbers import (I, Integer, pi) | |
from sympy.core.symbol import Symbol | |
from sympy.core.sympify import sympify | |
from sympy.functions.elementary.miscellaneous import sqrt | |
from sympy.functions.elementary.trigonometric import sin | |
from sympy.polys.polytools import factor | |
from sympy.simplify.simplify import simplify | |
from sympy.abc import x, y, z | |
from timeit import default_timer as clock | |
def bench_R1(): | |
"real(f(f(f(f(f(f(f(f(f(f(i/2)))))))))))" | |
def f(z): | |
return sqrt(Integer(1)/3)*z**2 + I/3 | |
f(f(f(f(f(f(f(f(f(f(I/2)))))))))).as_real_imag()[0] | |
def bench_R2(): | |
"Hermite polynomial hermite(15, y)" | |
def hermite(n, y): | |
if n == 1: | |
return 2*y | |
if n == 0: | |
return 1 | |
return (2*y*hermite(n - 1, y) - 2*(n - 1)*hermite(n - 2, y)).expand() | |
hermite(15, y) | |
def bench_R3(): | |
"a = [bool(f==f) for _ in range(10)]" | |
f = x + y + z | |
[bool(f == f) for _ in range(10)] | |
def bench_R4(): | |
# we don't have Tuples | |
pass | |
def bench_R5(): | |
"blowup(L, 8); L=uniq(L)" | |
def blowup(L, n): | |
for i in range(n): | |
L.append( (L[i] + L[i + 1]) * L[i + 2] ) | |
def uniq(x): | |
v = set(x) | |
return v | |
L = [x, y, z] | |
blowup(L, 8) | |
L = uniq(L) | |
def bench_R6(): | |
"sum(simplify((x+sin(i))/x+(x-sin(i))/x) for i in range(100))" | |
sum(simplify((x + sin(i))/x + (x - sin(i))/x) for i in range(100)) | |
def bench_R7(): | |
"[f.subs(x, random()) for _ in range(10**4)]" | |
f = x**24 + 34*x**12 + 45*x**3 + 9*x**18 + 34*x**10 + 32*x**21 | |
[f.subs(x, random()) for _ in range(10**4)] | |
def bench_R8(): | |
"right(x^2,0,5,10^4)" | |
def right(f, a, b, n): | |
a = sympify(a) | |
b = sympify(b) | |
n = sympify(n) | |
x = f.atoms(Symbol).pop() | |
Deltax = (b - a)/n | |
c = a | |
est = 0 | |
for i in range(n): | |
c += Deltax | |
est += f.subs(x, c) | |
return est*Deltax | |
right(x**2, 0, 5, 10**4) | |
def _bench_R9(): | |
"factor(x^20 - pi^5*y^20)" | |
factor(x**20 - pi**5*y**20) | |
def bench_R10(): | |
"v = [-pi,-pi+1/10..,pi]" | |
def srange(min, max, step): | |
v = [min] | |
while (max - v[-1]).evalf() > 0: | |
v.append(v[-1] + step) | |
return v[:-1] | |
srange(-pi, pi, sympify(1)/10) | |
def bench_R11(): | |
"a = [random() + random()*I for w in [0..1000]]" | |
[random() + random()*I for w in range(1000)] | |
def bench_S1(): | |
"e=(x+y+z+1)**7;f=e*(e+1);f.expand()" | |
e = (x + y + z + 1)**7 | |
f = e*(e + 1) | |
f.expand() | |
if __name__ == '__main__': | |
benchmarks = [ | |
bench_R1, | |
bench_R2, | |
bench_R3, | |
bench_R5, | |
bench_R6, | |
bench_R7, | |
bench_R8, | |
#_bench_R9, | |
bench_R10, | |
bench_R11, | |
#bench_S1, | |
] | |
report = [] | |
for b in benchmarks: | |
t = clock() | |
b() | |
t = clock() - t | |
print("%s%65s: %f" % (b.__name__, b.__doc__, t)) | |