Skip to content

Commit 18fc670

Browse files
committed
Add benchmark from pydy (6 links)
1 parent c52d52a commit 18fc670

File tree

3 files changed

+118
-0
lines changed

3 files changed

+118
-0
lines changed

benchmarks/6_links_rhs.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[y0, y1, y2, y3, y4, y5, y6, l0*m1*y1**2*cos(x1) + l0*m2*y1**2*cos(x1) + l0*m3*y1**2*cos(x1) + l0*m4*y1**2*cos(x1) + l0*m5*y1**2*cos(x1) + l0*m6*y1**2*cos(x1) + l1*m2*y2**2*cos(x2) + l1*m3*y2**2*cos(x2) + l1*m4*y2**2*cos(x2) + l1*m5*y2**2*cos(x2) + l1*m6*y2**2*cos(x2) + l2*m3*y3**2*cos(x3) + l2*m4*y3**2*cos(x3) + l2*m5*y3**2*cos(x3) + l2*m6*y3**2*cos(x3) + l3*m4*y4**2*cos(x4) + l3*m5*y4**2*cos(x4) + l3*m6*y4**2*cos(x4) + l4*m5*y5**2*cos(x5) + l4*m6*y5**2*cos(x5) + l5*m6*y6**2*cos(x6), -g*l0*m1*cos(x1) - g*l0*m2*cos(x1) - g*l0*m3*cos(x1) - g*l0*m4*cos(x1) - g*l0*m5*cos(x1) - g*l0*m6*cos(x1) + l0*l1*m2*y2**2*(-sin(x1)*cos(x2) + sin(x2)*cos(x1)) + l0*l1*m3*y2**2*(-sin(x1)*cos(x2) + sin(x2)*cos(x1)) + l0*l1*m4*y2**2*(-sin(x1)*cos(x2) + sin(x2)*cos(x1)) + l0*l1*m5*y2**2*(-sin(x1)*cos(x2) + sin(x2)*cos(x1)) + l0*l1*m6*y2**2*(-sin(x1)*cos(x2) + sin(x2)*cos(x1)) + l0*l2*m3*y3**2*(-sin(x1)*cos(x3) + sin(x3)*cos(x1)) + l0*l2*m4*y3**2*(-sin(x1)*cos(x3) + sin(x3)*cos(x1)) + l0*l2*m5*y3**2*(-sin(x1)*cos(x3) + sin(x3)*cos(x1)) + l0*l2*m6*y3**2*(-sin(x1)*cos(x3) + sin(x3)*cos(x1)) + l0*l3*m4*y4**2*(-sin(x1)*cos(x4) + sin(x4)*cos(x1)) + l0*l3*m5*y4**2*(-sin(x1)*cos(x4) + sin(x4)*cos(x1)) + l0*l3*m6*y4**2*(-sin(x1)*cos(x4) + sin(x4)*cos(x1)) + l0*l4*m5*y5**2*(-sin(x1)*cos(x5) + sin(x5)*cos(x1)) + l0*l4*m6*y5**2*(-sin(x1)*cos(x5) + sin(x5)*cos(x1)) + l0*l5*m6*y6**2*(-sin(x1)*cos(x6) + sin(x6)*cos(x1)), -g*l1*m2*cos(x2) - g*l1*m3*cos(x2) - g*l1*m4*cos(x2) - g*l1*m5*cos(x2) - g*l1*m6*cos(x2) + l0*l1*m2*y1**2*(sin(x1)*cos(x2) - sin(x2)*cos(x1)) + l0*l1*m3*y1**2*(sin(x1)*cos(x2) - sin(x2)*cos(x1)) + l0*l1*m4*y1**2*(sin(x1)*cos(x2) - sin(x2)*cos(x1)) + l0*l1*m5*y1**2*(sin(x1)*cos(x2) - sin(x2)*cos(x1)) + l0*l1*m6*y1**2*(sin(x1)*cos(x2) - sin(x2)*cos(x1)) + l1*l2*m3*y3**2*(-sin(x2)*cos(x3) + sin(x3)*cos(x2)) + l1*l2*m4*y3**2*(-sin(x2)*cos(x3) + sin(x3)*cos(x2)) + l1*l2*m5*y3**2*(-sin(x2)*cos(x3) + sin(x3)*cos(x2)) + l1*l2*m6*y3**2*(-sin(x2)*cos(x3) + sin(x3)*cos(x2)) + l1*l3*m4*y4**2*(-sin(x2)*cos(x4) + sin(x4)*cos(x2)) + l1*l3*m5*y4**2*(-sin(x2)*cos(x4) + sin(x4)*cos(x2)) + l1*l3*m6*y4**2*(-sin(x2)*cos(x4) + sin(x4)*cos(x2)) + l1*l4*m5*y5**2*(-sin(x2)*cos(x5) + sin(x5)*cos(x2)) + l1*l4*m6*y5**2*(-sin(x2)*cos(x5) + sin(x5)*cos(x2)) + l1*l5*m6*y6**2*(-sin(x2)*cos(x6) + sin(x6)*cos(x2)), -g*l2*m3*cos(x3) - g*l2*m4*cos(x3) - g*l2*m5*cos(x3) - g*l2*m6*cos(x3) + l0*l2*m3*y1**2*(sin(x1)*cos(x3) - sin(x3)*cos(x1)) + l0*l2*m4*y1**2*(sin(x1)*cos(x3) - sin(x3)*cos(x1)) + l0*l2*m5*y1**2*(sin(x1)*cos(x3) - sin(x3)*cos(x1)) + l0*l2*m6*y1**2*(sin(x1)*cos(x3) - sin(x3)*cos(x1)) + l1*l2*m3*y2**2*(sin(x2)*cos(x3) - sin(x3)*cos(x2)) + l1*l2*m4*y2**2*(sin(x2)*cos(x3) - sin(x3)*cos(x2)) + l1*l2*m5*y2**2*(sin(x2)*cos(x3) - sin(x3)*cos(x2)) + l1*l2*m6*y2**2*(sin(x2)*cos(x3) - sin(x3)*cos(x2)) + l2*l3*m4*y4**2*(-sin(x3)*cos(x4) + sin(x4)*cos(x3)) + l2*l3*m5*y4**2*(-sin(x3)*cos(x4) + sin(x4)*cos(x3)) + l2*l3*m6*y4**2*(-sin(x3)*cos(x4) + sin(x4)*cos(x3)) + l2*l4*m5*y5**2*(-sin(x3)*cos(x5) + sin(x5)*cos(x3)) + l2*l4*m6*y5**2*(-sin(x3)*cos(x5) + sin(x5)*cos(x3)) + l2*l5*m6*y6**2*(-sin(x3)*cos(x6) + sin(x6)*cos(x3)), -g*l3*m4*cos(x4) - g*l3*m5*cos(x4) - g*l3*m6*cos(x4) + l0*l3*m4*y1**2*(sin(x1)*cos(x4) - sin(x4)*cos(x1)) + l0*l3*m5*y1**2*(sin(x1)*cos(x4) - sin(x4)*cos(x1)) + l0*l3*m6*y1**2*(sin(x1)*cos(x4) - sin(x4)*cos(x1)) + l1*l3*m4*y2**2*(sin(x2)*cos(x4) - sin(x4)*cos(x2)) + l1*l3*m5*y2**2*(sin(x2)*cos(x4) - sin(x4)*cos(x2)) + l1*l3*m6*y2**2*(sin(x2)*cos(x4) - sin(x4)*cos(x2)) + l2*l3*m4*y3**2*(sin(x3)*cos(x4) - sin(x4)*cos(x3)) + l2*l3*m5*y3**2*(sin(x3)*cos(x4) - sin(x4)*cos(x3)) + l2*l3*m6*y3**2*(sin(x3)*cos(x4) - sin(x4)*cos(x3)) + l3*l4*m5*y5**2*(-sin(x4)*cos(x5) + sin(x5)*cos(x4)) + l3*l4*m6*y5**2*(-sin(x4)*cos(x5) + sin(x5)*cos(x4)) + l3*l5*m6*y6**2*(-sin(x4)*cos(x6) + sin(x6)*cos(x4)), -g*l4*m5*cos(x5) - g*l4*m6*cos(x5) + l0*l4*m5*y1**2*(sin(x1)*cos(x5) - sin(x5)*cos(x1)) + l0*l4*m6*y1**2*(sin(x1)*cos(x5) - sin(x5)*cos(x1)) + l1*l4*m5*y2**2*(sin(x2)*cos(x5) - sin(x5)*cos(x2)) + l1*l4*m6*y2**2*(sin(x2)*cos(x5) - sin(x5)*cos(x2)) + l2*l4*m5*y3**2*(sin(x3)*cos(x5) - sin(x5)*cos(x3)) + l2*l4*m6*y3**2*(sin(x3)*cos(x5) - sin(x5)*cos(x3)) + l3*l4*m5*y4**2*(sin(x4)*cos(x5) - sin(x5)*cos(x4)) + l3*l4*m6*y4**2*(sin(x4)*cos(x5) - sin(x5)*cos(x4)) + l4*l5*m6*y6**2*(-sin(x5)*cos(x6) + sin(x6)*cos(x5)), -g*l5*m6*cos(x6) + l0*l5*m6*y1**2*(sin(x1)*cos(x6) - sin(x6)*cos(x1)) + l1*l5*m6*y2**2*(sin(x2)*cos(x6) - sin(x6)*cos(x2)) + l2*l5*m6*y3**2*(sin(x3)*cos(x6) - sin(x6)*cos(x3)) + l3*l5*m6*y4**2*(sin(x4)*cos(x6) - sin(x6)*cos(x4)) + l4*l5*m6*y5**2*(sin(x5)*cos(x6) - sin(x6)*cos(x5))]
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
# Benchmark reference:
2+
cimport numpy as cnp
3+
import numpy as np
4+
from libc.math cimport sin, cos
5+
6+
def _benchmark_reference_for_Lambdify(cnp.ndarray[cnp.float64_t] x):
7+
cdef cnp.ndarray[cnp.float64_t] out = np.empty(14)
8+
cdef double * data = <double *>out.data
9+
data[:] = [x[6], x[7], x[8], x[9], x[10], x[11], x[12], x[13]*x[20]*x[7]**2*cos(x[0]) + x[13]*x[21]*x[7]**2*cos(x[0]) + x[13]*x[22]*x[7]**2*cos(x[0]) + x[13]*x[23]*x[7]**2*cos(x[0]) + x[13]*x[24]*x[7]**2*cos(x[0]) + x[13]*x[25]*x[7]**2*cos(x[0]) + x[14]*x[21]*x[8]**2*cos(x[1]) + x[14]*x[22]*x[8]**2*cos(x[1]) + x[14]*x[23]*x[8]**2*cos(x[1]) + x[14]*x[24]*x[8]**2*cos(x[1]) + x[14]*x[25]*x[8]**2*cos(x[1]) + x[15]*x[22]*x[9]**2*cos(x[2]) + x[15]*x[23]*x[9]**2*cos(x[2]) + x[15]*x[24]*x[9]**2*cos(x[2]) + x[15]*x[25]*x[9]**2*cos(x[2]) + x[16]*x[23]*x[10]**2*cos(x[3]) + x[16]*x[24]*x[10]**2*cos(x[3]) + x[16]*x[25]*x[10]**2*cos(x[3]) + x[17]*x[24]*x[11]**2*cos(x[4]) + x[17]*x[25]*x[11]**2*cos(x[4]) + x[18]*x[25]*x[12]**2*cos(x[5]), -x[19]*x[13]*x[20]*cos(x[0]) - x[19]*x[13]*x[21]*cos(x[0]) - x[19]*x[13]*x[22]*cos(x[0]) - x[19]*x[13]*x[23]*cos(x[0]) - x[19]*x[13]*x[24]*cos(x[0]) - x[19]*x[13]*x[25]*cos(x[0]) + x[13]*x[14]*x[21]*x[8]**2*(-sin(x[0])*cos(x[1]) + sin(x[1])*cos(x[0])) + x[13]*x[14]*x[22]*x[8]**2*(-sin(x[0])*cos(x[1]) + sin(x[1])*cos(x[0])) + x[13]*x[14]*x[23]*x[8]**2*(-sin(x[0])*cos(x[1]) + sin(x[1])*cos(x[0])) + x[13]*x[14]*x[24]*x[8]**2*(-sin(x[0])*cos(x[1]) + sin(x[1])*cos(x[0])) + x[13]*x[14]*x[25]*x[8]**2*(-sin(x[0])*cos(x[1]) + sin(x[1])*cos(x[0])) + x[13]*x[15]*x[22]*x[9]**2*(-sin(x[0])*cos(x[2]) + sin(x[2])*cos(x[0])) + x[13]*x[15]*x[23]*x[9]**2*(-sin(x[0])*cos(x[2]) + sin(x[2])*cos(x[0])) + x[13]*x[15]*x[24]*x[9]**2*(-sin(x[0])*cos(x[2]) + sin(x[2])*cos(x[0])) + x[13]*x[15]*x[25]*x[9]**2*(-sin(x[0])*cos(x[2]) + sin(x[2])*cos(x[0])) + x[13]*x[16]*x[23]*x[10]**2*(-sin(x[0])*cos(x[3]) + sin(x[3])*cos(x[0])) + x[13]*x[16]*x[24]*x[10]**2*(-sin(x[0])*cos(x[3]) + sin(x[3])*cos(x[0])) + x[13]*x[16]*x[25]*x[10]**2*(-sin(x[0])*cos(x[3]) + sin(x[3])*cos(x[0])) + x[13]*x[17]*x[24]*x[11]**2*(-sin(x[0])*cos(x[4]) + sin(x[4])*cos(x[0])) + x[13]*x[17]*x[25]*x[11]**2*(-sin(x[0])*cos(x[4]) + sin(x[4])*cos(x[0])) + x[13]*x[18]*x[25]*x[12]**2*(-sin(x[0])*cos(x[5]) + sin(x[5])*cos(x[0])), -x[19]*x[14]*x[21]*cos(x[1]) - x[19]*x[14]*x[22]*cos(x[1]) - x[19]*x[14]*x[23]*cos(x[1]) - x[19]*x[14]*x[24]*cos(x[1]) - x[19]*x[14]*x[25]*cos(x[1]) + x[13]*x[14]*x[21]*x[7]**2*(sin(x[0])*cos(x[1]) - sin(x[1])*cos(x[0])) + x[13]*x[14]*x[22]*x[7]**2*(sin(x[0])*cos(x[1]) - sin(x[1])*cos(x[0])) + x[13]*x[14]*x[23]*x[7]**2*(sin(x[0])*cos(x[1]) - sin(x[1])*cos(x[0])) + x[13]*x[14]*x[24]*x[7]**2*(sin(x[0])*cos(x[1]) - sin(x[1])*cos(x[0])) + x[13]*x[14]*x[25]*x[7]**2*(sin(x[0])*cos(x[1]) - sin(x[1])*cos(x[0])) + x[14]*x[15]*x[22]*x[9]**2*(-sin(x[1])*cos(x[2]) + sin(x[2])*cos(x[1])) + x[14]*x[15]*x[23]*x[9]**2*(-sin(x[1])*cos(x[2]) + sin(x[2])*cos(x[1])) + x[14]*x[15]*x[24]*x[9]**2*(-sin(x[1])*cos(x[2]) + sin(x[2])*cos(x[1])) + x[14]*x[15]*x[25]*x[9]**2*(-sin(x[1])*cos(x[2]) + sin(x[2])*cos(x[1])) + x[14]*x[16]*x[23]*x[10]**2*(-sin(x[1])*cos(x[3]) + sin(x[3])*cos(x[1])) + x[14]*x[16]*x[24]*x[10]**2*(-sin(x[1])*cos(x[3]) + sin(x[3])*cos(x[1])) + x[14]*x[16]*x[25]*x[10]**2*(-sin(x[1])*cos(x[3]) + sin(x[3])*cos(x[1])) + x[14]*x[17]*x[24]*x[11]**2*(-sin(x[1])*cos(x[4]) + sin(x[4])*cos(x[1])) + x[14]*x[17]*x[25]*x[11]**2*(-sin(x[1])*cos(x[4]) + sin(x[4])*cos(x[1])) + x[14]*x[18]*x[25]*x[12]**2*(-sin(x[1])*cos(x[5]) + sin(x[5])*cos(x[1])), -x[19]*x[15]*x[22]*cos(x[2]) - x[19]*x[15]*x[23]*cos(x[2]) - x[19]*x[15]*x[24]*cos(x[2]) - x[19]*x[15]*x[25]*cos(x[2]) + x[13]*x[15]*x[22]*x[7]**2*(sin(x[0])*cos(x[2]) - sin(x[2])*cos(x[0])) + x[13]*x[15]*x[23]*x[7]**2*(sin(x[0])*cos(x[2]) - sin(x[2])*cos(x[0])) + x[13]*x[15]*x[24]*x[7]**2*(sin(x[0])*cos(x[2]) - sin(x[2])*cos(x[0])) + x[13]*x[15]*x[25]*x[7]**2*(sin(x[0])*cos(x[2]) - sin(x[2])*cos(x[0])) + x[14]*x[15]*x[22]*x[8]**2*(sin(x[1])*cos(x[2]) - sin(x[2])*cos(x[1])) + x[14]*x[15]*x[23]*x[8]**2*(sin(x[1])*cos(x[2]) - sin(x[2])*cos(x[1])) + x[14]*x[15]*x[24]*x[8]**2*(sin(x[1])*cos(x[2]) - sin(x[2])*cos(x[1])) + x[14]*x[15]*x[25]*x[8]**2*(sin(x[1])*cos(x[2]) - sin(x[2])*cos(x[1])) + x[15]*x[16]*x[23]*x[10]**2*(-sin(x[2])*cos(x[3]) + sin(x[3])*cos(x[2])) + x[15]*x[16]*x[24]*x[10]**2*(-sin(x[2])*cos(x[3]) + sin(x[3])*cos(x[2])) + x[15]*x[16]*x[25]*x[10]**2*(-sin(x[2])*cos(x[3]) + sin(x[3])*cos(x[2])) + x[15]*x[17]*x[24]*x[11]**2*(-sin(x[2])*cos(x[4]) + sin(x[4])*cos(x[2])) + x[15]*x[17]*x[25]*x[11]**2*(-sin(x[2])*cos(x[4]) + sin(x[4])*cos(x[2])) + x[15]*x[18]*x[25]*x[12]**2*(-sin(x[2])*cos(x[5]) + sin(x[5])*cos(x[2])), -x[19]*x[16]*x[23]*cos(x[3]) - x[19]*x[16]*x[24]*cos(x[3]) - x[19]*x[16]*x[25]*cos(x[3]) + x[13]*x[16]*x[23]*x[7]**2*(sin(x[0])*cos(x[3]) - sin(x[3])*cos(x[0])) + x[13]*x[16]*x[24]*x[7]**2*(sin(x[0])*cos(x[3]) - sin(x[3])*cos(x[0])) + x[13]*x[16]*x[25]*x[7]**2*(sin(x[0])*cos(x[3]) - sin(x[3])*cos(x[0])) + x[14]*x[16]*x[23]*x[8]**2*(sin(x[1])*cos(x[3]) - sin(x[3])*cos(x[1])) + x[14]*x[16]*x[24]*x[8]**2*(sin(x[1])*cos(x[3]) - sin(x[3])*cos(x[1])) + x[14]*x[16]*x[25]*x[8]**2*(sin(x[1])*cos(x[3]) - sin(x[3])*cos(x[1])) + x[15]*x[16]*x[23]*x[9]**2*(sin(x[2])*cos(x[3]) - sin(x[3])*cos(x[2])) + x[15]*x[16]*x[24]*x[9]**2*(sin(x[2])*cos(x[3]) - sin(x[3])*cos(x[2])) + x[15]*x[16]*x[25]*x[9]**2*(sin(x[2])*cos(x[3]) - sin(x[3])*cos(x[2])) + x[16]*x[17]*x[24]*x[11]**2*(-sin(x[3])*cos(x[4]) + sin(x[4])*cos(x[3])) + x[16]*x[17]*x[25]*x[11]**2*(-sin(x[3])*cos(x[4]) + sin(x[4])*cos(x[3])) + x[16]*x[18]*x[25]*x[12]**2*(-sin(x[3])*cos(x[5]) + sin(x[5])*cos(x[3])), -x[19]*x[17]*x[24]*cos(x[4]) - x[19]*x[17]*x[25]*cos(x[4]) + x[13]*x[17]*x[24]*x[7]**2*(sin(x[0])*cos(x[4]) - sin(x[4])*cos(x[0])) + x[13]*x[17]*x[25]*x[7]**2*(sin(x[0])*cos(x[4]) - sin(x[4])*cos(x[0])) + x[14]*x[17]*x[24]*x[8]**2*(sin(x[1])*cos(x[4]) - sin(x[4])*cos(x[1])) + x[14]*x[17]*x[25]*x[8]**2*(sin(x[1])*cos(x[4]) - sin(x[4])*cos(x[1])) + x[15]*x[17]*x[24]*x[9]**2*(sin(x[2])*cos(x[4]) - sin(x[4])*cos(x[2])) + x[15]*x[17]*x[25]*x[9]**2*(sin(x[2])*cos(x[4]) - sin(x[4])*cos(x[2])) + x[16]*x[17]*x[24]*x[10]**2*(sin(x[3])*cos(x[4]) - sin(x[4])*cos(x[3])) + x[16]*x[17]*x[25]*x[10]**2*(sin(x[3])*cos(x[4]) - sin(x[4])*cos(x[3])) + x[17]*x[18]*x[25]*x[12]**2*(-sin(x[4])*cos(x[5]) + sin(x[5])*cos(x[4])), -x[19]*x[18]*x[25]*cos(x[5]) + x[13]*x[18]*x[25]*x[7]**2*(sin(x[0])*cos(x[5]) - sin(x[5])*cos(x[0])) + x[14]*x[18]*x[25]*x[8]**2*(sin(x[1])*cos(x[5]) - sin(x[5])*cos(x[1])) + x[15]*x[18]*x[25]*x[9]**2*(sin(x[2])*cos(x[5]) - sin(x[5])*cos(x[2])) + x[16]*x[18]*x[25]*x[10]**2*(sin(x[3])*cos(x[5]) - sin(x[5])*cos(x[3])) + x[17]*x[18]*x[25]*x[11]**2*(sin(x[4])*cos(x[5]) - sin(x[5])*cos(x[4]))]
10+
return out

benchmarks/Lambdify_6_links_rhs.py

Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
#!/usr/bin/env python
2+
import os
3+
from time import clock
4+
import numpy as np
5+
import sympy as sp
6+
from sympy.parsing.sympy_parser import parse_expr
7+
from sympy.parsing.sympy_parser import standard_transformations
8+
import symengine as se
9+
import warnings
10+
11+
exprs_s = open(os.path.join(os.path.dirname(__file__), '6_links_rhs.txt'), 'tr').read()
12+
exprs = parse_expr(exprs_s, transformations=standard_transformations)
13+
args = sp.Matrix(1, 14, exprs).free_symbols
14+
inp = np.ones(len(args))
15+
assert inp.size == 26
16+
print([expr.subs(dict(zip(args, [1]*len(args)))) for expr in exprs])
17+
18+
# Real-life example (ion speciation problem in water chemistry)
19+
20+
21+
lmb_sp = sp.lambdify(args, exprs, modules='math')
22+
lmb_se = se.Lambdify(args, exprs)
23+
# lmb_se_cse = se.LambdifyCSE(args, exprs)
24+
lmb_se_llvm = se.Lambdify(args, exprs, backend='llvm')
25+
26+
27+
lmb_sp(*inp)
28+
tim_sympy = clock()
29+
for i in range(500):
30+
res_sympy = lmb_sp(*inp)
31+
tim_sympy = clock() - tim_sympy
32+
33+
lmb_se(inp)
34+
tim_se = clock()
35+
res_se = np.empty(len(exprs))
36+
for i in range(500):
37+
res_se = lmb_se(inp)
38+
tim_se = clock() - tim_se
39+
40+
# lmb_se_cse(inp)
41+
# tim_se_cse = clock()
42+
# res_se_cse = np.empty(len(exprs))
43+
# for i in range(500):
44+
# res_se_cse = lmb_se_cse(inp)
45+
# tim_se_cse = clock() - tim_se_cse
46+
47+
lmb_se_llvm(inp)
48+
tim_se_llvm = clock()
49+
res_se_llvm = np.empty(len(exprs))
50+
for i in range(500):
51+
res_se_llvm = lmb_se_llvm(inp)
52+
tim_se_llvm = clock() - tim_se_llvm
53+
54+
55+
print('SymEngine (lambda double) speed-up factor (higher is better) vs sympy: %12.5g' %
56+
(tim_sympy/tim_se))
57+
58+
# print('symengine (lambda double + CSE) speed-up factor (higher is better) vs sympy: %12.5g' %
59+
# (tim_sympy/tim_se_cse))
60+
61+
print('symengine (LLVM) speed-up factor (higher is better) vs sympy: %12.5g' %
62+
(tim_sympy/tim_se_llvm))
63+
64+
import itertools
65+
from functools import reduce
66+
from operator import mul
67+
68+
def ManualLLVM(inputs, *outputs):
69+
outputs_ravel = list(itertools.chain(*outputs))
70+
cb = se.Lambdify(inputs, outputs_ravel, backend="llvm")
71+
def func(*args):
72+
result = []
73+
n = np.empty(len(outputs_ravel))
74+
t = cb.unsafe_real(np.concatenate([arg.ravel() for arg in args]), n)
75+
start = 0
76+
for output in outputs:
77+
elems = reduce(mul, output.shape)
78+
result.append(n[start:start+elems].reshape(output.shape))
79+
start += elems
80+
return result
81+
return func
82+
83+
lmb_se_llvm_manual = ManualLLVM(args, np.array(exprs))
84+
lmb_se_llvm_manual(inp)
85+
tim_se_llvm_manual = clock()
86+
res_se_llvm_manual = np.empty(len(exprs))
87+
for i in range(500):
88+
res_se_llvm_manual = lmb_se_llvm_manual(inp)
89+
tim_se_llvm_manual = clock() - tim_se_llvm_manual
90+
print('symengine (ManualLLVM) speed-up factor (higher is better) vs sympy: %12.5g' %
91+
(tim_sympy/tim_se_llvm_manual))
92+
93+
if tim_se_llvm_manual < tim_se_llvm:
94+
warnings.warn("Cython code for Lambdify.__call__ is slow.")
95+
96+
import setuptools
97+
import pyximport
98+
pyximport.install()
99+
from Lambdify_6_links_reference import _benchmark_reference_for_Lambdify as lmb_ref
100+
101+
lmb_ref(inp)
102+
tim_ref = clock()
103+
for i in range(500):
104+
res_ref = lmb_ref(inp)
105+
tim_ref = clock() - tim_ref
106+
print('Hard-coded Cython code speed-up factor (higher is better) vs sympy: %12.5g' %
107+
(tim_sympy/tim_ref))

0 commit comments

Comments
 (0)