Sat, 26 Jun 2010 17:51:52 +0100, Francesc Alted wrote: [clip]
Well, I'd say that this support can be faked in numexpr easily. For example, if one want to compute a certain ufunc called, say, sincos(x) defined as sin(cos(x)) (okay, that's very simple, but it will suffice for demonstration purposes), he can express that as sincos = "sin(cos(%s))", and then use it in a more complex expression like:
"%s+1*cos(%s)" % (sincos % 'x', 'y')
that will be expanded as:
"sin(cos(x))+1*cos(y)"
Of course, this is a bit crude, but I'd say that's more than enough for allowing the evaluation of moderately complex expressions.
But what if such an expression does not exist? For example, there is no finite closed form expression for the Bessel functions in terms of elementary functions. An accurate implementation is rather complicated, and usually piecewise defined. For convenience reasons, it could be useful if one could do something like numexpr.evaluate("cos(iv(0, x))", functions=dict(iv=scipy.special.iv)) and this would be translated to numexpr bytecode that would make a Python function call to obtain "iv(0, x)" for each block of data required, assuming "iv" is a vectorized function. It's of course possible to precompute the value of "iv(0, x)", but this is extra hassle and requires additional memory. -- Pauli Virtanen