add read me
This commit is contained in:
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,83 @@
|
||||
import sys
|
||||
from time import time
|
||||
from sympy.ntheory.residue_ntheory import (discrete_log,
|
||||
_discrete_log_trial_mul, _discrete_log_shanks_steps,
|
||||
_discrete_log_pollard_rho, _discrete_log_pohlig_hellman)
|
||||
|
||||
|
||||
# Cyclic group (Z/pZ)* with p prime, order p - 1 and generator g
|
||||
data_set_1 = [
|
||||
# p, p - 1, g
|
||||
[191, 190, 19],
|
||||
[46639, 46638, 6],
|
||||
[14789363, 14789362, 2],
|
||||
[4254225211, 4254225210, 2],
|
||||
[432751500361, 432751500360, 7],
|
||||
[158505390797053, 158505390797052, 2],
|
||||
[6575202655312007, 6575202655312006, 5],
|
||||
[8430573471995353769, 8430573471995353768, 3],
|
||||
[3938471339744997827267, 3938471339744997827266, 2],
|
||||
[875260951364705563393093, 875260951364705563393092, 5],
|
||||
]
|
||||
|
||||
|
||||
# Cyclic sub-groups of (Z/nZ)* with prime order p and generator g
|
||||
# (n, p are primes and n = 2 * p + 1)
|
||||
data_set_2 = [
|
||||
# n, p, g
|
||||
[227, 113, 3],
|
||||
[2447, 1223, 2],
|
||||
[24527, 12263, 2],
|
||||
[245639, 122819, 2],
|
||||
[2456747, 1228373, 3],
|
||||
[24567899, 12283949, 3],
|
||||
[245679023, 122839511, 2],
|
||||
[2456791307, 1228395653, 3],
|
||||
[24567913439, 12283956719, 2],
|
||||
[245679135407, 122839567703, 2],
|
||||
[2456791354763, 1228395677381, 3],
|
||||
[24567913550903, 12283956775451, 2],
|
||||
[245679135509519, 122839567754759, 2],
|
||||
]
|
||||
|
||||
|
||||
# Cyclic sub-groups of (Z/nZ)* with smooth order o and generator g
|
||||
data_set_3 = [
|
||||
# n, o, g
|
||||
[2**118, 2**116, 3],
|
||||
]
|
||||
|
||||
|
||||
def bench_discrete_log(data_set, algo=None):
|
||||
if algo is None:
|
||||
f = discrete_log
|
||||
elif algo == 'trial':
|
||||
f = _discrete_log_trial_mul
|
||||
elif algo == 'shanks':
|
||||
f = _discrete_log_shanks_steps
|
||||
elif algo == 'rho':
|
||||
f = _discrete_log_pollard_rho
|
||||
elif algo == 'ph':
|
||||
f = _discrete_log_pohlig_hellman
|
||||
else:
|
||||
raise ValueError("Argument 'algo' should be one"
|
||||
" of ('trial', 'shanks', 'rho' or 'ph')")
|
||||
|
||||
for i, data in enumerate(data_set):
|
||||
for j, (n, p, g) in enumerate(data):
|
||||
t = time()
|
||||
l = f(n, pow(g, p - 1, n), g, p)
|
||||
t = time() - t
|
||||
print('[%02d-%03d] %15.10f' % (i, j, t))
|
||||
assert l == p - 1
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
algo = sys.argv[1] \
|
||||
if len(sys.argv) > 1 else None
|
||||
data_set = [
|
||||
data_set_1,
|
||||
data_set_2,
|
||||
data_set_3,
|
||||
]
|
||||
bench_discrete_log(data_set, algo)
|
||||
@@ -0,0 +1,261 @@
|
||||
# conceal the implicit import from the code quality tester
|
||||
from sympy.core.numbers import (oo, pi)
|
||||
from sympy.core.symbol import (Symbol, symbols)
|
||||
from sympy.functions.elementary.exponential import exp
|
||||
from sympy.functions.elementary.miscellaneous import sqrt
|
||||
from sympy.functions.special.bessel import besseli
|
||||
from sympy.functions.special.gamma_functions import gamma
|
||||
from sympy.integrals.integrals import integrate
|
||||
from sympy.integrals.transforms import (mellin_transform,
|
||||
inverse_fourier_transform, inverse_mellin_transform,
|
||||
laplace_transform, inverse_laplace_transform, fourier_transform)
|
||||
|
||||
LT = laplace_transform
|
||||
FT = fourier_transform
|
||||
MT = mellin_transform
|
||||
IFT = inverse_fourier_transform
|
||||
ILT = inverse_laplace_transform
|
||||
IMT = inverse_mellin_transform
|
||||
|
||||
from sympy.abc import x, y
|
||||
nu, beta, rho = symbols('nu beta rho')
|
||||
|
||||
apos, bpos, cpos, dpos, posk, p = symbols('a b c d k p', positive=True)
|
||||
k = Symbol('k', real=True)
|
||||
negk = Symbol('k', negative=True)
|
||||
|
||||
mu1, mu2 = symbols('mu1 mu2', real=True, nonzero=True, finite=True)
|
||||
sigma1, sigma2 = symbols('sigma1 sigma2', real=True, nonzero=True,
|
||||
finite=True, positive=True)
|
||||
rate = Symbol('lambda', positive=True)
|
||||
|
||||
|
||||
def normal(x, mu, sigma):
|
||||
return 1/sqrt(2*pi*sigma**2)*exp(-(x - mu)**2/2/sigma**2)
|
||||
|
||||
|
||||
def exponential(x, rate):
|
||||
return rate*exp(-rate*x)
|
||||
alpha, beta = symbols('alpha beta', positive=True)
|
||||
betadist = x**(alpha - 1)*(1 + x)**(-alpha - beta)*gamma(alpha + beta) \
|
||||
/gamma(alpha)/gamma(beta)
|
||||
kint = Symbol('k', integer=True, positive=True)
|
||||
chi = 2**(1 - kint/2)*x**(kint - 1)*exp(-x**2/2)/gamma(kint/2)
|
||||
chisquared = 2**(-k/2)/gamma(k/2)*x**(k/2 - 1)*exp(-x/2)
|
||||
dagum = apos*p/x*(x/bpos)**(apos*p)/(1 + x**apos/bpos**apos)**(p + 1)
|
||||
d1, d2 = symbols('d1 d2', positive=True)
|
||||
f = sqrt(((d1*x)**d1 * d2**d2)/(d1*x + d2)**(d1 + d2))/x \
|
||||
/gamma(d1/2)/gamma(d2/2)*gamma((d1 + d2)/2)
|
||||
nupos, sigmapos = symbols('nu sigma', positive=True)
|
||||
rice = x/sigmapos**2*exp(-(x**2 + nupos**2)/2/sigmapos**2)*besseli(0, x*
|
||||
nupos/sigmapos**2)
|
||||
mu = Symbol('mu', real=True)
|
||||
laplace = exp(-abs(x - mu)/bpos)/2/bpos
|
||||
|
||||
u = Symbol('u', polar=True)
|
||||
tpos = Symbol('t', positive=True)
|
||||
|
||||
|
||||
def E(expr):
|
||||
integrate(expr*exponential(x, rate)*normal(y, mu1, sigma1),
|
||||
(x, 0, oo), (y, -oo, oo), meijerg=True)
|
||||
integrate(expr*exponential(x, rate)*normal(y, mu1, sigma1),
|
||||
(y, -oo, oo), (x, 0, oo), meijerg=True)
|
||||
|
||||
bench = [
|
||||
'MT(x**nu*Heaviside(x - 1), x, s)',
|
||||
'MT(x**nu*Heaviside(1 - x), x, s)',
|
||||
'MT((1-x)**(beta - 1)*Heaviside(1-x), x, s)',
|
||||
'MT((x-1)**(beta - 1)*Heaviside(x-1), x, s)',
|
||||
'MT((1+x)**(-rho), x, s)',
|
||||
'MT(abs(1-x)**(-rho), x, s)',
|
||||
'MT((1-x)**(beta-1)*Heaviside(1-x) + a*(x-1)**(beta-1)*Heaviside(x-1), x, s)',
|
||||
'MT((x**a-b**a)/(x-b), x, s)',
|
||||
'MT((x**a-bpos**a)/(x-bpos), x, s)',
|
||||
'MT(exp(-x), x, s)',
|
||||
'MT(exp(-1/x), x, s)',
|
||||
'MT(log(x)**4*Heaviside(1-x), x, s)',
|
||||
'MT(log(x)**3*Heaviside(x-1), x, s)',
|
||||
'MT(log(x + 1), x, s)',
|
||||
'MT(log(1/x + 1), x, s)',
|
||||
'MT(log(abs(1 - x)), x, s)',
|
||||
'MT(log(abs(1 - 1/x)), x, s)',
|
||||
'MT(log(x)/(x+1), x, s)',
|
||||
'MT(log(x)**2/(x+1), x, s)',
|
||||
'MT(log(x)/(x+1)**2, x, s)',
|
||||
'MT(erf(sqrt(x)), x, s)',
|
||||
|
||||
'MT(besselj(a, 2*sqrt(x)), x, s)',
|
||||
'MT(sin(sqrt(x))*besselj(a, sqrt(x)), x, s)',
|
||||
'MT(cos(sqrt(x))*besselj(a, sqrt(x)), x, s)',
|
||||
'MT(besselj(a, sqrt(x))**2, x, s)',
|
||||
'MT(besselj(a, sqrt(x))*besselj(-a, sqrt(x)), x, s)',
|
||||
'MT(besselj(a - 1, sqrt(x))*besselj(a, sqrt(x)), x, s)',
|
||||
'MT(besselj(a, sqrt(x))*besselj(b, sqrt(x)), x, s)',
|
||||
'MT(besselj(a, sqrt(x))**2 + besselj(-a, sqrt(x))**2, x, s)',
|
||||
'MT(bessely(a, 2*sqrt(x)), x, s)',
|
||||
'MT(sin(sqrt(x))*bessely(a, sqrt(x)), x, s)',
|
||||
'MT(cos(sqrt(x))*bessely(a, sqrt(x)), x, s)',
|
||||
'MT(besselj(a, sqrt(x))*bessely(a, sqrt(x)), x, s)',
|
||||
'MT(besselj(a, sqrt(x))*bessely(b, sqrt(x)), x, s)',
|
||||
'MT(bessely(a, sqrt(x))**2, x, s)',
|
||||
|
||||
'MT(besselk(a, 2*sqrt(x)), x, s)',
|
||||
'MT(besselj(a, 2*sqrt(2*sqrt(x)))*besselk(a, 2*sqrt(2*sqrt(x))), x, s)',
|
||||
'MT(besseli(a, sqrt(x))*besselk(a, sqrt(x)), x, s)',
|
||||
'MT(besseli(b, sqrt(x))*besselk(a, sqrt(x)), x, s)',
|
||||
'MT(exp(-x/2)*besselk(a, x/2), x, s)',
|
||||
|
||||
# later: ILT, IMT
|
||||
|
||||
'LT((t-apos)**bpos*exp(-cpos*(t-apos))*Heaviside(t-apos), t, s)',
|
||||
'LT(t**apos, t, s)',
|
||||
'LT(Heaviside(t), t, s)',
|
||||
'LT(Heaviside(t - apos), t, s)',
|
||||
'LT(1 - exp(-apos*t), t, s)',
|
||||
'LT((exp(2*t)-1)*exp(-bpos - t)*Heaviside(t)/2, t, s, noconds=True)',
|
||||
'LT(exp(t), t, s)',
|
||||
'LT(exp(2*t), t, s)',
|
||||
'LT(exp(apos*t), t, s)',
|
||||
'LT(log(t/apos), t, s)',
|
||||
'LT(erf(t), t, s)',
|
||||
'LT(sin(apos*t), t, s)',
|
||||
'LT(cos(apos*t), t, s)',
|
||||
'LT(exp(-apos*t)*sin(bpos*t), t, s)',
|
||||
'LT(exp(-apos*t)*cos(bpos*t), t, s)',
|
||||
'LT(besselj(0, t), t, s, noconds=True)',
|
||||
'LT(besselj(1, t), t, s, noconds=True)',
|
||||
|
||||
'FT(Heaviside(1 - abs(2*apos*x)), x, k)',
|
||||
'FT(Heaviside(1-abs(apos*x))*(1-abs(apos*x)), x, k)',
|
||||
'FT(exp(-apos*x)*Heaviside(x), x, k)',
|
||||
'IFT(1/(apos + 2*pi*I*x), x, posk, noconds=False)',
|
||||
'IFT(1/(apos + 2*pi*I*x), x, -posk, noconds=False)',
|
||||
'IFT(1/(apos + 2*pi*I*x), x, negk)',
|
||||
'FT(x*exp(-apos*x)*Heaviside(x), x, k)',
|
||||
'FT(exp(-apos*x)*sin(bpos*x)*Heaviside(x), x, k)',
|
||||
'FT(exp(-apos*x**2), x, k)',
|
||||
'IFT(sqrt(pi/apos)*exp(-(pi*k)**2/apos), k, x)',
|
||||
'FT(exp(-apos*abs(x)), x, k)',
|
||||
|
||||
'integrate(normal(x, mu1, sigma1), (x, -oo, oo), meijerg=True)',
|
||||
'integrate(x*normal(x, mu1, sigma1), (x, -oo, oo), meijerg=True)',
|
||||
'integrate(x**2*normal(x, mu1, sigma1), (x, -oo, oo), meijerg=True)',
|
||||
'integrate(x**3*normal(x, mu1, sigma1), (x, -oo, oo), meijerg=True)',
|
||||
'integrate(normal(x, mu1, sigma1)*normal(y, mu2, sigma2),'
|
||||
' (x, -oo, oo), (y, -oo, oo), meijerg=True)',
|
||||
'integrate(x*normal(x, mu1, sigma1)*normal(y, mu2, sigma2),'
|
||||
' (x, -oo, oo), (y, -oo, oo), meijerg=True)',
|
||||
'integrate(y*normal(x, mu1, sigma1)*normal(y, mu2, sigma2),'
|
||||
' (x, -oo, oo), (y, -oo, oo), meijerg=True)',
|
||||
'integrate(x*y*normal(x, mu1, sigma1)*normal(y, mu2, sigma2),'
|
||||
' (x, -oo, oo), (y, -oo, oo), meijerg=True)',
|
||||
'integrate((x+y+1)*normal(x, mu1, sigma1)*normal(y, mu2, sigma2),'
|
||||
' (x, -oo, oo), (y, -oo, oo), meijerg=True)',
|
||||
'integrate((x+y-1)*normal(x, mu1, sigma1)*normal(y, mu2, sigma2),'
|
||||
' (x, -oo, oo), (y, -oo, oo), meijerg=True)',
|
||||
'integrate(x**2*normal(x, mu1, sigma1)*normal(y, mu2, sigma2),'
|
||||
' (x, -oo, oo), (y, -oo, oo), meijerg=True)',
|
||||
'integrate(y**2*normal(x, mu1, sigma1)*normal(y, mu2, sigma2),'
|
||||
' (x, -oo, oo), (y, -oo, oo), meijerg=True)',
|
||||
'integrate(exponential(x, rate), (x, 0, oo), meijerg=True)',
|
||||
'integrate(x*exponential(x, rate), (x, 0, oo), meijerg=True)',
|
||||
'integrate(x**2*exponential(x, rate), (x, 0, oo), meijerg=True)',
|
||||
'E(1)',
|
||||
'E(x*y)',
|
||||
'E(x*y**2)',
|
||||
'E((x+y+1)**2)',
|
||||
'E(x+y+1)',
|
||||
'E((x+y-1)**2)',
|
||||
'integrate(betadist, (x, 0, oo), meijerg=True)',
|
||||
'integrate(x*betadist, (x, 0, oo), meijerg=True)',
|
||||
'integrate(x**2*betadist, (x, 0, oo), meijerg=True)',
|
||||
'integrate(chi, (x, 0, oo), meijerg=True)',
|
||||
'integrate(x*chi, (x, 0, oo), meijerg=True)',
|
||||
'integrate(x**2*chi, (x, 0, oo), meijerg=True)',
|
||||
'integrate(chisquared, (x, 0, oo), meijerg=True)',
|
||||
'integrate(x*chisquared, (x, 0, oo), meijerg=True)',
|
||||
'integrate(x**2*chisquared, (x, 0, oo), meijerg=True)',
|
||||
'integrate(((x-k)/sqrt(2*k))**3*chisquared, (x, 0, oo), meijerg=True)',
|
||||
'integrate(dagum, (x, 0, oo), meijerg=True)',
|
||||
'integrate(x*dagum, (x, 0, oo), meijerg=True)',
|
||||
'integrate(x**2*dagum, (x, 0, oo), meijerg=True)',
|
||||
'integrate(f, (x, 0, oo), meijerg=True)',
|
||||
'integrate(x*f, (x, 0, oo), meijerg=True)',
|
||||
'integrate(x**2*f, (x, 0, oo), meijerg=True)',
|
||||
'integrate(rice, (x, 0, oo), meijerg=True)',
|
||||
'integrate(laplace, (x, -oo, oo), meijerg=True)',
|
||||
'integrate(x*laplace, (x, -oo, oo), meijerg=True)',
|
||||
'integrate(x**2*laplace, (x, -oo, oo), meijerg=True)',
|
||||
'integrate(log(x) * x**(k-1) * exp(-x) / gamma(k), (x, 0, oo))',
|
||||
|
||||
'integrate(sin(z*x)*(x**2-1)**(-(y+S(1)/2)), (x, 1, oo), meijerg=True)',
|
||||
'integrate(besselj(0,x)*besselj(1,x)*exp(-x**2), (x, 0, oo), meijerg=True)',
|
||||
'integrate(besselj(0,x)*besselj(1,x)*besselk(0,x), (x, 0, oo), meijerg=True)',
|
||||
'integrate(besselj(0,x)*besselj(1,x)*exp(-x**2), (x, 0, oo), meijerg=True)',
|
||||
'integrate(besselj(a,x)*besselj(b,x)/x, (x,0,oo), meijerg=True)',
|
||||
|
||||
'hyperexpand(meijerg((-s - a/2 + 1, -s + a/2 + 1), (-a/2 - S(1)/2, -s + a/2 + S(3)/2), (a/2, -a/2), (-a/2 - S(1)/2, -s + a/2 + S(3)/2), 1))',
|
||||
"gammasimp(S('2**(2*s)*(-pi*gamma(-a + 1)*gamma(a + 1)*gamma(-a - s + 1)*gamma(-a + s - 1/2)*gamma(a - s + 3/2)*gamma(a + s + 1)/(a*(a + s)) - gamma(-a - 1/2)*gamma(-a + 1)*gamma(a + 1)*gamma(a + 3/2)*gamma(-s + 3/2)*gamma(s - 1/2)*gamma(-a + s + 1)*gamma(a - s + 1)/(a*(-a + s)))*gamma(-2*s + 1)*gamma(s + 1)/(pi*s*gamma(-a - 1/2)*gamma(a + 3/2)*gamma(-s + 1)*gamma(-s + 3/2)*gamma(s - 1/2)*gamma(-a - s + 1)*gamma(-a + s - 1/2)*gamma(a - s + 1)*gamma(a - s + 3/2))'))",
|
||||
|
||||
'mellin_transform(E1(x), x, s)',
|
||||
'inverse_mellin_transform(gamma(s)/s, s, x, (0, oo))',
|
||||
'mellin_transform(expint(a, x), x, s)',
|
||||
'mellin_transform(Si(x), x, s)',
|
||||
'inverse_mellin_transform(-2**s*sqrt(pi)*gamma((s + 1)/2)/(2*s*gamma(-s/2 + 1)), s, x, (-1, 0))',
|
||||
'mellin_transform(Ci(sqrt(x)), x, s)',
|
||||
'inverse_mellin_transform(-4**s*sqrt(pi)*gamma(s)/(2*s*gamma(-s + S(1)/2)),s, u, (0, 1))',
|
||||
'laplace_transform(Ci(x), x, s)',
|
||||
'laplace_transform(expint(a, x), x, s)',
|
||||
'laplace_transform(expint(1, x), x, s)',
|
||||
'laplace_transform(expint(2, x), x, s)',
|
||||
'inverse_laplace_transform(-log(1 + s**2)/2/s, s, u)',
|
||||
'inverse_laplace_transform(log(s + 1)/s, s, x)',
|
||||
'inverse_laplace_transform((s - log(s + 1))/s**2, s, x)',
|
||||
'laplace_transform(Chi(x), x, s)',
|
||||
'laplace_transform(Shi(x), x, s)',
|
||||
|
||||
'integrate(exp(-z*x)/x, (x, 1, oo), meijerg=True, conds="none")',
|
||||
'integrate(exp(-z*x)/x**2, (x, 1, oo), meijerg=True, conds="none")',
|
||||
'integrate(exp(-z*x)/x**3, (x, 1, oo), meijerg=True,conds="none")',
|
||||
'integrate(-cos(x)/x, (x, tpos, oo), meijerg=True)',
|
||||
'integrate(-sin(x)/x, (x, tpos, oo), meijerg=True)',
|
||||
'integrate(sin(x)/x, (x, 0, z), meijerg=True)',
|
||||
'integrate(sinh(x)/x, (x, 0, z), meijerg=True)',
|
||||
'integrate(exp(-x)/x, x, meijerg=True)',
|
||||
'integrate(exp(-x)/x**2, x, meijerg=True)',
|
||||
'integrate(cos(u)/u, u, meijerg=True)',
|
||||
'integrate(cosh(u)/u, u, meijerg=True)',
|
||||
'integrate(expint(1, x), x, meijerg=True)',
|
||||
'integrate(expint(2, x), x, meijerg=True)',
|
||||
'integrate(Si(x), x, meijerg=True)',
|
||||
'integrate(Ci(u), u, meijerg=True)',
|
||||
'integrate(Shi(x), x, meijerg=True)',
|
||||
'integrate(Chi(u), u, meijerg=True)',
|
||||
'integrate(Si(x)*exp(-x), (x, 0, oo), meijerg=True)',
|
||||
'integrate(expint(1, x)*sin(x), (x, 0, oo), meijerg=True)'
|
||||
]
|
||||
|
||||
from time import time
|
||||
from sympy.core.cache import clear_cache
|
||||
import sys
|
||||
|
||||
timings = []
|
||||
|
||||
if __name__ == '__main__':
|
||||
for n, string in enumerate(bench):
|
||||
clear_cache()
|
||||
_t = time()
|
||||
exec(string)
|
||||
_t = time() - _t
|
||||
timings += [(_t, string)]
|
||||
sys.stdout.write('.')
|
||||
sys.stdout.flush()
|
||||
if n % (len(bench) // 10) == 0:
|
||||
sys.stdout.write('%s' % (10*n // len(bench)))
|
||||
print()
|
||||
|
||||
timings.sort(key=lambda x: -x[0])
|
||||
|
||||
for ti, string in timings:
|
||||
print('%.2fs %s' % (ti, string))
|
||||
@@ -0,0 +1,134 @@
|
||||
#!/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))
|
||||
Reference in New Issue
Block a user