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.

Reply via email to