Sympy lambdify with numexpr and sqrt

I am trying to speed up some numeric code generated lambdify

using numexpr

. Unfortunately the feature numexpr

breaks when using the feature sqrt

, although it is one of the supported features .

This reproduces the problem for me:

import sympy
import numpy as np
import numexpr

from sympy.utilities.lambdify import lambdify

expr = sympy.S('b*sqrt(a) - a**2')
a, b = sorted(expr.free_symbols, key=lambda s:

func_numpy = lambdify((a,b), expr, modules=[np], dummify=False)
func_numexpr = lambdify((a,b), expr, modules=[numexpr], dummify=False)

foo, bar = np.random.random((2, 4))

print sympy.__version__
print func_numpy(foo, bar)
print func_numexpr(foo, bar)


When I run this, the output is:

[-0.02062061  0.08648306 -0.57868128  0.27598245]
Traceback (most recent call last):
  File "", line 17, in <module>
    print func_numexpr(foo, bar)
  File "<string>", line 1, in <lambda>
NameError: global name 'sqrt' is not defined


As a sanity check, I also tried to call numexpr


numexpr.evaluate('b*sqrt(a) - a**2', local_dict=dict(a=foo, b=bar))


which works as expected, producing the same output as func_numpy


EDIT : it works when I use the line:

func_numexpr = lambdify((a,b), expr, modules=['numexpr'], dummify=False)


Is this a pretty bug?


source to share

All Articles