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.da...@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-
>>>>>>> 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.
>>>> 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+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/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/CAP7f1AjVqyxiiX%2BQeJieRQC7O9Hg%2B4dKvnPHUtVX-_eKFSEY%2BQ%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to