I'm not sure this is supported. Ideally you'd create a sympy.Sum object representing your summation and then the code printers would print a loop that would look something like:
>>> sum = sympy.Sum(a, (a, 1, 5)) >>> sympy.ccode(sum, b) double b = 0; for (i = 0; i < 5; i++;){ b = b + a[i] } I think Jim Crist is working on this functionality but it doesn't exist now. Jason moorepants.info +01 530-601-9791 On Thu, Sep 25, 2014 at 5:46 PM, David Shin <shin.da...@gmail.com> wrote: > The function is a sum of thousands of summands, where each summand is a > small function of a few of the input parameters. These small summand > functions are composed of basic operations like multiplication, addition, > and exp(). > > On Thursday, September 25, 2014 4:21:32 PM UTC-5, Jason Moore wrote: >> >> I see. What does your function look like? Does it have summations or >> things you want to iterate over? Or is it simply a scalar function? >> >> >> Jason >> moorepants.info >> +01 530-601-9791 >> >> On Thu, Sep 25, 2014 at 5:09 PM, David Shin <shin....@gmail.com> wrote: >> >>> Also, I'd like to pass in the gradient and hessian of my function into >>> scipy.optimize.minimize() to help it along. I don't want to do the calculus >>> by hand, so I'm using sympy to do it for me. >>> >>> >>> On Thursday, September 25, 2014 4:08:02 PM UTC-5, David Shin wrote: >>>> >>>> I'm looking to minimize a complicated function of hundreds of >>>> variables. I want to ufuncify() my function so that I can pass it into >>>> scipy.optimize.minimize(). The summation func I gave is just a toy example, >>>> the actual function is much more complicated. >>>> >>>> Please let me know if I should be doing this some other way. >>>> >>>> On Thursday, September 25, 2014 4:00:04 PM UTC-5, Jason Moore wrote: >>>>> >>>>> First, why do you need sympy to do this? Would NumPy be sufficient? >>>>> >>>>> import numpy as np >>>>> values = np.random.random(100) >>>>> np.sum(values) >>>>> >>>>> >>>>> Jason >>>>> moorepants.info >>>>> +01 530-601-9791 >>>>> >>>>> On Thu, Sep 25, 2014 at 4:52 PM, David Shin <shin....@gmail.com> >>>>> wrote: >>>>> >>>>>> Would you mind showing me how to convert my demo.py to have ufuncify >>>>>> generate code that has a single length-N array argument instead of N >>>>>> separate arguments? >>>>>> >>>>>> On Thursday, September 25, 2014 3:40:25 PM UTC-5, Jason Moore wrote: >>>>>>> >>>>>>> It works for the backend='f2py' in master but fails for the default >>>>>>> backend which is 'numpy'. I get a segmentation fault on the 'numpy' >>>>>>> backend >>>>>>> for values greater than 20 or so. >>>>>>> >>>>>>> This is an odd use of ufuncify, as summing would better be done in a >>>>>>> loop with an array as input to the function. You can probably used the >>>>>>> IndexBased class to set up a loop based sum. If you use the tempdir >>>>>>> kwarg >>>>>>> to ufuncify you can see the code it generates, and you'll basically get >>>>>>> a >>>>>>> Fortran function that has as many input args as your integer value >>>>>>> which is >>>>>>> not very efficient. >>>>>>> >>>>>>> >>>>>>> Jason >>>>>>> moorepants.info >>>>>>> +01 530-601-9791 >>>>>>> >>>>>>> On Thu, Sep 25, 2014 at 4:29 PM, Jason Moore <moore...@gmail.com> >>>>>>> wrote: >>>>>>> >>>>>>>> David, >>>>>>>> >>>>>>>> This is because it wasn't wrapping lines correctly in the generated >>>>>>>> Fortran code. If you use the development version of SymPy it should >>>>>>>> work. >>>>>>>> >>>>>>>> Here is the PR that fixed it: https://github.com/sympy/sympy >>>>>>>> /pull/7968 >>>>>>>> >>>>>>>> >>>>>>>> Jason >>>>>>>> moorepants.info >>>>>>>> +01 530-601-9791 >>>>>>>> >>>>>>>> On Thu, Sep 25, 2014 at 3:42 PM, David Shin <shin....@gmail.com> >>>>>>>> wrote: >>>>>>>> >>>>>>>>> Hi, I recently began trying out sympy and am running into some >>>>>>>>> difficulty. >>>>>>>>> >>>>>>>>> I wrote the following script, called demo.py: >>>>>>>>> >>>>>>>>> import sympyfrom sympy.utilities.autowrap import ufuncifyimport sys >>>>>>>>> >>>>>>>>> N = int(sys.argv[1]) >>>>>>>>> theta = [] >>>>>>>>> values = []for n in range(N): >>>>>>>>> theta.append(sympy.symbols('x%s' % n)) >>>>>>>>> values.append(n) >>>>>>>>> >>>>>>>>> summation = sum(theta) >>>>>>>>> f = ufuncify(theta, summation)print f(*values)[0] >>>>>>>>> >>>>>>>>> >>>>>>>>> Running it for small N, it works fine: >>>>>>>>> >>>>>>>>> $ python demo.py 21 >>>>>>>>> 210.0 >>>>>>>>> >>>>>>>>> >>>>>>>>> But it fails for larger N. Can anyone advise? Thanks in advance. >>>>>>>>> >>>>>>>>> $ python demo.py 22 >>>>>>>>> Traceback (most recent call last): >>>>>>>>> File "demo.py", line 13, in >>>>>>>>> f = ufuncify(theta, summation) >>>>>>>>> File >>>>>>>>> "/opt/user/x86_64/Python-2.7.3/lib/python2.7/site-packages/sympy/utilities/autowrap.py", >>>>>>>>> line 485, in ufuncify >>>>>>>>> return autowrap(C.Equality(y[i], f(*args)), **kwargs) >>>>>>>>> File >>>>>>>>> "/opt/user/x86_64/Python-2.7.3/lib/python2.7/site-packages/sympy/utilities/autowrap.py", >>>>>>>>> line 403, in autowrap >>>>>>>>> return code_wrapper.wrap_code(routine, helpers=helps) >>>>>>>>> File >>>>>>>>> "/opt/user/x86_64/Python-2.7.3/lib/python2.7/site-packages/sympy/utilities/autowrap.py", >>>>>>>>> line 139, in wrap_code >>>>>>>>> self._process_files(routine) >>>>>>>>> File >>>>>>>>> "/opt/user/x86_64/Python-2.7.3/lib/python2.7/site-packages/sympy/utilities/autowrap.py", >>>>>>>>> line 158, in _process_files >>>>>>>>> " ".join(command), e.output)) >>>>>>>>> sympy.utilities.autowrap.CodeWrapError: Error while executing >>>>>>>>> command: f2py -m wrapper_module_0 -c wrapped_code_0.f90. Command >>>>>>>>> output is: >>>>>>>>> running build >>>>>>>>> running config_cc >>>>>>>>> unifing config_cc, config, build_clib, build_ext, build commands >>>>>>>>> --compiler options >>>>>>>>> running config_fc >>>>>>>>> unifing config_fc, config, build_clib, build_ext, build commands >>>>>>>>> --fcompiler options >>>>>>>>> running build_src >>>>>>>>> build_src >>>>>>>>> building extension "wrapper_module_0" sources >>>>>>>>> f2py options: [] >>>>>>>>> f2py:> /tmp/tmpKbJQuO/src.linux-x86_64-2.7/wrapper_module_0module.c >>>>>>>>> creating /tmp/tmpKbJQuO >>>>>>>>> creating /tmp/tmpKbJQuO/src.linux-x86_64-2.7 >>>>>>>>> Reading fortran codes... >>>>>>>>> Reading file 'wrapped_code_0.f90' (format:free) >>>>>>>>> Post-processing... >>>>>>>>> Block: wrapper_module_0 >>>>>>>>> Block: autofunc >>>>>>>>> Post-processing (stage 2)... >>>>>>>>> Building modules... >>>>>>>>> Building module "wrapper_module_0"... >>>>>>>>> Constructing wrapper function "autofunc"... >>>>>>>>> y_15 = >>>>>>>>> autofunc(x_16,x1,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x2,x20,x21,x3,x4,x5,x6,x7,x8,x9,[m_17]) >>>>>>>>> Wrote C/API module "wrapper_module_0" to file >>>>>>>>> "/tmp/tmpKbJQuO/src.linux-x86_64-2.7/wrapper_module_0module.c" >>>>>>>>> adding '/tmp/tmpKbJQuO/src.linux-x86_64-2.7/fortranobject.c' to >>>>>>>>> sources. >>>>>>>>> adding '/tmp/tmpKbJQuO/src.linux-x86_64-2.7' to include_dirs. >>>>>>>>> copying >>>>>>>>> /opt/user/x86_64/Python-2.7.3/lib/python2.7/site-packages/numpy/f2py/src/fortranobject.c >>>>>>>>> -> /tmp/tmpKbJQuO/src.linux-x86_64-2.7 >>>>>>>>> copying >>>>>>>>> /opt/user/x86_64/Python-2.7.3/lib/python2.7/site-packages/numpy/f2py/src/fortranobject.h >>>>>>>>> -> /tmp/tmpKbJQuO/src.linux-x86_64-2.7 >>>>>>>>> build_src: building npy-pkg config files >>>>>>>>> running build_ext >>>>>>>>> customize UnixCCompiler >>>>>>>>> customize UnixCCompiler using build_ext >>>>>>>>> customize Gnu95FCompiler >>>>>>>>> Found executable /opt/user/x86_64/gcc-4.7.2/bin/gfortran >>>>>>>>> customize Gnu95FCompiler >>>>>>>>> customize Gnu95FCompiler using build_ext >>>>>>>>> building 'wrapper_module_0' extension >>>>>>>>> compiling C sources >>>>>>>>> C compiler: gcc -pthread -fno-strict-aliasing -g -O2 -DNDEBUG -g >>>>>>>>> -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC >>>>>>>>> >>>>>>>>> creating /tmp/tmpKbJQuO/tmp >>>>>>>>> creating /tmp/tmpKbJQuO/tmp/tmpKbJQuO >>>>>>>>> creating /tmp/tmpKbJQuO/tmp/tmpKbJQuO/src.linux-x86_64-2.7 >>>>>>>>> compile options: '-I/tmp/tmpKbJQuO/src.linux-x86_64-2.7 >>>>>>>>> -I/opt/user/x86_64/Python-2.7.3/lib/python2.7/site-packages/numpy/core/include >>>>>>>>> -I/opt/user/x86_64/Python-2.7.3/include/python2.7 -c' >>>>>>>>> gcc: /tmp/tmpKbJQuO/src.linux-x86_64-2.7/wrapper_module_0module.c >>>>>>>>> In file included from >>>>>>>>> /opt/user/x86_64/Python-2.7.3/lib/python2.7/site-packages/numpy/core/include/numpy/ndarraytypes.h:1728:0, >>>>>>>>> from >>>>>>>>> /opt/user/x86_64/Python-2.7.3/lib/python2.7/site-packages/numpy/core/include/numpy/ndarrayobject.h:17, >>>>>>>>> from >>>>>>>>> /opt/user/x86_64/Python-2.7.3/lib/python2.7/site-packages/numpy/core/include/numpy/arrayobject.h:15, >>>>>>>>> from >>>>>>>>> /tmp/tmpKbJQuO/src.linux-x86_64-2.7/fortranobject.h:13, >>>>>>>>> from >>>>>>>>> /tmp/tmpKbJQuO/src.linux-x86_64-2.7/wrapper_module_0module.c:18: >>>>>>>>> /opt/user/x86_64/Python-2.7.3/lib/python2.7/site-packages/numpy/core/include/numpy/npy_deprecated_api.h:11:2: >>>>>>>>> warning: #warning "Using deprecated NumPy API, disable it by >>>>>>>>> #defining NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION" [-Wcpp] >>>>>>>>> /tmp/tmpKbJQuO/src.linux-x86_64-2.7/wrapper_module_0module.c:111:12: >>>>>>>>> warning: âpy_sizeâefined but not used [-Wunused-function] >>>>>>>>> gcc: /tmp/tmpKbJQuO/src.linux-x86_64-2.7/fortranobject.c >>>>>>>>> In file included from >>>>>>>>> /opt/user/x86_64/Python-2.7.3/lib/python2.7/site-packages/numpy/core/include/numpy/ndarraytypes.h:1728:0, >>>>>>>>> from >>>>>>>>> /opt/user/x86_64/Python-2.7.3/lib/python2.7/site-packages/numpy/core/include/numpy/ndarrayobject.h:17, >>>>>>>>> from >>>>>>>>> /opt/user/x86_64/Python-2.7.3/lib/python2.7/site-packages/numpy/core/include/numpy/arrayobject.h:15, >>>>>>>>> from >>>>>>>>> /tmp/tmpKbJQuO/src.linux-x86_64-2.7/fortranobject.h:13, >>>>>>>>> from >>>>>>>>> /tmp/tmpKbJQuO/src.linux-x86_64-2.7/fortranobject.c:2: >>>>>>>>> /opt/user/x86_64/Python-2.7.3/lib/python2.7/site-packages/numpy/core/include/numpy/npy_deprecated_api.h:11:2: >>>>>>>>> warning: #warning "Using deprecated NumPy API, disable it by >>>>>>>>> #defining NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION" [-Wcpp] >>>>>>>>> compiling Fortran sources >>>>>>>>> Fortran f77 compiler: /opt/user/x86_64/gcc-4.7.2/bin/gfortran -Wall >>>>>>>>> -ffixed-form -fno-second-underscore -fPIC -O3 -funroll-loops >>>>>>>>> Fortran f90 compiler: /opt/user/x86_64/gcc-4.7.2/bin/gfortran -Wall >>>>>>>>> -fno-second-underscore -fPIC -O3 -funroll-loops >>>>>>>>> Fortran fix compiler: /opt/user/x86_64/gcc-4.7.2/bin/gfortran -Wall >>>>>>>>> -ffixed-form -fno-second-underscore -Wall -fno-second-underscore >>>>>>>>> -fPIC -O3 -funroll-loops >>>>>>>>> compile options: '-I/tmp/tmpKbJQuO/src.linux-x86_64-2.7 >>>>>>>>> -I/opt/user/x86_64/Python-2.7.3/lib/python2.7/site-packages/numpy/core/include >>>>>>>>> -I/opt/user/x86_64/Python-2.7.3/include/python2.7 -c' >>>>>>>>> gfortran:f90: wrapped_code_0.f90 >>>>>>>>> wrapped_code_0.f90:1.133: >>>>>>>>> >>>>>>>>> 4, x15, x16, x17, x18, x19, x2, x20, x21, x3, x4, x5, x6, x7, x8, x9, >>>>>>>>> y_15 >>>>>>>>> >>>>>>>>> 1 >>>>>>>>> Warning: Line truncated at (1) >>>>>>>>> wrapped_code_0.f90:1.132: >>>>>>>>> >>>>>>>>> 14, x15, x16, x17, x18, x19, x2, x20, x21, x3, x4, x5, x6, x7, x8, >>>>>>>>> x9, y_15 >>>>>>>>> >>>>>>>>> 1 >>>>>>>>> Error: Unexpected junk in formal argument list at (1) >>>>>>>>> wrapped_code_0.f90:33.3: >>>>>>>>> >>>>>>>>> end subroutine >>>>>>>>> 1 >>>>>>>>> Error: Expecting END PROGRAM statement at (1) >>>>>>>>> Error: Unexpected end of file in 'wrapped_code_0.f90' >>>>>>>>> wrapped_code_0.f90:1.133: >>>>>>>>> >>>>>>>>> 4, x15, x16, x17, x18, x19, x2, x20, x21, x3, x4, x5, x6, x7, x8, x9, >>>>>>>>> y_15 >>>>>>>>> >>>>>>>>> 1 >>>>>>>>> Warning: Line truncated at (1) >>>>>>>>> wrapped_code_0.f90:1.132: >>>>>>>>> >>>>>>>>> 14, x15, x16, x17, x18, x19, x2, x20, x21, x3, x4, x5, x6, x7, x8, >>>>>>>>> x9, y_15 >>>>>>>>> >>>>>>>>> 1 >>>>>>>>> Error: Unexpected junk in formal argument list at (1) >>>>>>>>> wrapped_code_0.f90:33.3: >>>>>>>>> >>>>>>>>> end subroutine >>>>>>>>> 1 >>>>>>>>> Error: Expecting END PROGRAM statement at (1) >>>>>>>>> Error: Unexpected end of file in 'wrapped_code_0.f90' >>>>>>>>> error: Command "/opt/user/x86_64/gcc-4.7.2/bin/gfortran -Wall >>>>>>>>> -fno-second-underscore -fPIC -O3 -funroll-loops >>>>>>>>> -I/tmp/tmpKbJQuO/src.linux-x86_64-2.7 >>>>>>>>> -I/opt/user/x86_64/Python-2.7.3/lib/python2.7/site-packages/numpy/core/include >>>>>>>>> -I/opt/user/x86_64/Python-2.7.3/include/python2.7 -c -c >>>>>>>>> wrapped_code_0.f90 -o /tmp/tmpKbJQuO/wrapped_code_0.o" failed with >>>>>>>>> exit status 1 >>>>>>>>> >>>>>>>>> >>>>>>>>> -- >>>>>>>>> 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 sympy+un...@googlegroups.com. >>>>>>>>> To post to this group, send email to sy...@googlegroups.com. >>>>>>>>> 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/68af9759-5988-4e85-8 >>>>>>>>> 1ec-7cc303022e46%40googlegroups.com >>>>>>>>> <https://groups.google.com/d/msgid/sympy/68af9759-5988-4e85-81ec-7cc303022e46%40googlegroups.com?utm_medium=email&utm_source=footer> >>>>>>>>> . >>>>>>>>> For more options, visit https://groups.google.com/d/optout. >>>>>>>>> >>>>>>>> >>>>>>>> >>>>>>> -- >>>>>> 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 sympy+un...@googlegroups.com. >>>>>> To post to this group, send email to sy...@googlegroups.com. >>>>>> 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/191c2f57-99c2-44eb-9a9c-959f77ef6811%40googlegroups.com >>>>>> <https://groups.google.com/d/msgid/sympy/191c2f57-99c2-44eb-9a9c-959f77ef6811%40googlegroups.com?utm_medium=email&utm_source=footer> >>>>>> . >>>>>> >>>>>> For more options, visit https://groups.google.com/d/optout. >>>>>> >>>>> >>>>> -- >>> 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 sympy+un...@googlegroups.com. >>> To post to this group, send email to sy...@googlegroups.com. >>> 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/6728544e-2ef8-45b5-8e42-01b0f57dbe1a%40googlegroups.com >>> <https://groups.google.com/d/msgid/sympy/6728544e-2ef8-45b5-8e42-01b0f57dbe1a%40googlegroups.com?utm_medium=email&utm_source=footer> >>> . >>> >>> For more options, visit https://groups.google.com/d/optout. >>> >> >> -- > 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 sympy+unsubscr...@googlegroups.com. > To post to this group, send email to sympy@googlegroups.com. > 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/54f695f9-70c6-4eed-9761-fd39b4a18b8b%40googlegroups.com > <https://groups.google.com/d/msgid/sympy/54f695f9-70c6-4eed-9761-fd39b4a18b8b%40googlegroups.com?utm_medium=email&utm_source=footer> > . > > For more options, visit https://groups.google.com/d/optout. > -- 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 sympy+unsubscr...@googlegroups.com. To post to this group, send email to sympy@googlegroups.com. 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/CAP7f1Ag%3DeL5G9oVV%2BpFTbcFWknYp34WYL%2BZ%2Bh3F-eMqFqZqWYw%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.