In [15]:
from pycalphad import Database, Model
from symengine import Lambdify, sympify
from pycalphad.codegen.sympydiff_utils import build_functions
dbf = Database('AlBeCuZrO.tdb')
mod = Model(dbf, ['CU', 'ZR', 'VA'], 'IONIC_LIQ')
In [17]:
sympify(mod.variables)
Out[17]:
In [10]:
%%timeit
func = Lambdify(mod.variables, [mod.GM], backend='llvm', real=True, cse=True, order='C')
In [11]:
import numpy as np
inp = np.array([[300, 0.25, 0.25, 0.25, 0.25]])
n = int(5e5)
inp = np.repeat(inp, n).reshape((-1, 5), order='C')
out = np.zeros((n,), order='C')
In [12]:
mod.variables
Out[12]:
In [13]:
# Suboptimal because this can be done in a Cython loop
func = Lambdify(mod.variables, [mod.GM], backend='llvm', real=True, cse=True, order='C')
flattened_inp = inp.ravel()
for idx in range(inp.shape[0]):
func.unsafe_real(flattened_inp, out, idx*inp.shape[1], idx)
In [14]:
%timeit out = func(inp)
out = func(inp)
In [7]:
%%timeit
func_orig = build_functions(mod.GM, mod.variables, wrt=None,
include_obj=True, include_grad=False, include_hess=False,
parameters=None)
func_orig.func.compile()
In [8]:
func_orig = build_functions(mod.GM, mod.variables, wrt=None,
include_obj=True, include_grad=False, include_hess=False,
parameters=None)
func_orig.func.compile()
%timeit out_orig = func_orig.func.kernel(inp, np.array([0.]))
In [9]:
out_orig = func_orig.func.kernel(inp, np.array([0.]))
np.testing.assert_allclose(out[:,0], out_orig)
In [ ]: