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 
> <javascript:>> 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-81ec-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 <javascript:>.
>> To post to this group, send email to sy...@googlegroups.com <javascript:>
>> .
>> 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+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/19bb01de-bb28-4b14-ac4a-43f8dbf677c2%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to