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.