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.