James,
this contribution is just awesome! Great work!
Assuming that no serious issues show up, I'd vote that from 0.7.6, ufuncify
should use your new backend by default.
Øyvind
On Thursday, August 28, 2014 5:07:07 AM UTC+2, James Crist wrote:
>
> I still need to do some cleanups and add tests, but I finally have this
> working and thought I'd share. I'm really happy with this:
>
> In [1]: from sympy import *
>
> In [2]: a, b, c = symbols('a, b, c')
>
> In [3]: expr = (sin(a) + sqrt(b)*c**2)/2
>
> In [4]: from sympy.utilities.autowrap import ufuncify
>
> In [5]: func = ufuncify((a, b, c), expr)
>
> In [6]: func(1, 2, 3)
> Out[6]: 6.7846965230828769
>
> In [7]: func([1, 2, 3, 4, 5], [6, 7, 8, 9, 10], 3)
> Out[7]: array([ 11.44343933, 12.36052961, 12.79848207, 13.12159875,
> 13.75078733])
>
> In [8]: from numpy import arange
>
> In [9]: a = arange(10).reshape((2, 5))
>
> In [10]: c = arange(10, 20).reshape((2, 5))
>
> In [11]: b = 25
>
> In [12]: func(a, b, c)
> Out[12]:
> array([[ 250. , 302.92073549, 360.45464871, 422.57056 ,
> 489.62159875],
> [ 562.02053786, 639.86029225, 722.8284933 , 810.49467912,
> 902.70605924]])
>
> In [13]: type(func)
> Out[13]: numpy.ufunc
>
> This now does everything a numpy `ufunc` does normally, as it *is* a
> ufunc. Codegen is hooked up to numpy api. Type conversion and broadcasting
> are done automagically.
>
> Caveats: only functions with a single output are accepted (this could be
> changed to accept multi-output without much effort though). Also, as with
> all unfuncs, input/outputs must all be scalars (no matrix/Indexed
> operations allowed).
>
--
You received this message because you are subscribed to the Google Groups
"sympy" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/sympy.
To view this discussion on the web visit
https://groups.google.com/d/msgid/sympy/9fb3217b-c2c6-455a-8eca-3ca791bed0f2%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.