[SciPy-User] Wrapping a lapack function (attempt results seg fault)

josef.pktd@gmai... josef.pktd@gmai...
Sat Feb 6 16:45:26 CST 2010


On Sat, Feb 6, 2010 at 3:10 PM, Skipper Seabold <jsseabold@gmail.com> wrote:
> All,
>
> I'm trying to wrap the lapack function dtgsen for the ordered generalized
> Schur decomposition given real valued arrays
> <http://linux.die.net/man/l/dtgsen>.  However, I'm getting a segmentation
> fault, and I have no idea why.  I was hoping someone might look at my work
> and see where I've gone wrong, as this is my first attempt at trying to do
> something like this.  One specific thing I wasn't sure about is when the
> lapack function calls for a LOGICAL type can this just be
>
> from ctypes import c_bool
> logical_true = c_bool(True)
>
> ?
>
> I've attached my functions and arrays that make a self-contained example.
>  Just put the two files in a directory and run.  When I do a gdb backtrace I
> receive the following output.
>
> (gdb) run ordqztest.py
>
> Starting program: /usr/bin/python ordqztest.py
>
> [Thread debugging using libthread_db enabled]
>
>
> Program received signal SIGSEGV, Segmentation fault.
> 0x00007ffff5015d7d in dtgsen_ () from /usr/lib/liblapack.so
> (gdb) backtrace
> #0  0x00007ffff5015d7d in dtgsen_ () from /usr/lib/liblapack.so
> #1  0x00007ffff6da8bec in ffi_call_unix64 ()
>    at
> /build/buildd/python2.6-2.6.4/Modules/_ctypes/libffi/src/x86/unix64.S:75
> #2  0x00007ffff6da82d3 in ffi_call (cif=0x7fffffffd810, fn=<value optimized
> out>,
>    rvalue=<value optimized out>, avalue=<value optimized out>)
>
>    at
> /build/buildd/python2.6-2.6.4/Modules/_ctypes/libffi/src/x86/ffi64.c:430
> #3  0x00007ffff6da2d64 in _call_function_pointer (pProc=<value optimized
> out>,
>    argtuple=<value optimized out>, flags=<value optimized out>,
> argtypes=<value optimized out>,
>    restype=<value optimized out>, checker=<value optimized out>)
>
>    at /build/buildd/python2.6-2.6.4/Modules/_ctypes/callproc.c:816
>
> #4  _CallProc (pProc=<value optimized out>, argtuple=<value optimized out>,
>
>    flags=<value optimized out>, argtypes=<value optimized out>,
> restype=<value optimized out>,
>    checker=<value optimized out>) at
> /build/buildd/python2.6-2.6.4/Modules/_ctypes/callproc.c:1163
> #5  0x00007ffff6d9abf7 in CFuncPtr_call (self=0xc2c2c0, inargs=0x18,
> kwds=<value optimized out>)
>    at /build/buildd/python2.6-2.6.4/Modules/_ctypes/_ctypes.c:3860
>
> #6  0x000000000041d6e7 in PyObject_Call (func=0xc2c2c0, arg=0xcb8360,
> kw=0xc63520)
>    at ../Objects/abstract.c:2492
>
> #7  0x00000000004a199c in do_call (f=0xcb98c0, throwflag=<value optimized
> out>)
>    at ../Python/ceval.c:3924
>
> #8  call_function (f=0xcb98c0, throwflag=<value optimized out>) at
> ../Python/ceval.c:3729
> #9  PyEval_EvalFrameEx (f=0xcb98c0, throwflag=<value optimized out>) at
> ../Python/ceval.c:2389
> #10 0x00000000004a40e0 in PyEval_EvalCodeEx (co=0x7ffff7f01f30,
> globals=<value optimized out>,
>    locals=<value optimized out>, args=0x9, argcount=<value optimized out>,
> kws=<value optimized out>,
>    kwcount=2, defs=0x7ffff7f0a7f8, defcount=4, closure=0x0) at
> ../Python/ceval.c:2968
> #11 0x00000000004a245f in fast_function (f=0xcb9660, throwflag=<value
> optimized out>)
>    at ../Python/ceval.c:3802
>
> #12 call_function (f=0xcb9660, throwflag=<value optimized out>) at
> ../Python/ceval.c:3727
> ---Type <return> to continue, or q <return> to quit---
>
> #13 PyEval_EvalFrameEx (f=0xcb9660, throwflag=<value optimized out>) at
> ../Python/ceval.c:2389
> #14 0x00000000004a40e0 in PyEval_EvalCodeEx (co=0x7ffff7f026c0,
> globals=<value optimized out>,
>    locals=<value optimized out>, args=0x8, argcount=<value optimized out>,
> kws=<value optimized out>,
>    kwcount=2, defs=0x7ffff3ea9e78, defcount=3, closure=0x0) at
> ../Python/ceval.c:2968
> #15 0x00000000004a245f in fast_function (f=0x928e00, throwflag=<value
> optimized out>)
>    at ../Python/ceval.c:3802
> #16 call_function (f=0x928e00, throwflag=<value optimized out>) at
> ../Python/ceval.c:3727
> #17 PyEval_EvalFrameEx (f=0x928e00, throwflag=<value optimized out>) at
> ../Python/ceval.c:2389
> #18 0x00000000004a40e0 in PyEval_EvalCodeEx (co=0x7ffff7f02378,
> globals=<value optimized out>,
>    locals=<value optimized out>, args=0x0, argcount=<value optimized out>,
> kws=<value optimized out>,
>    kwcount=0, defs=0x0, defcount=0, closure=0x0) at ../Python/ceval.c:2968
> #19 0x00000000004a41b2 in PyEval_EvalCode (co=0x0, globals=0xcb8360,
> locals=0xc63520)
>    at ../Python/ceval.c:522
> #20 0x00000000004c33a0 in run_mod (fp=0x919900, filename=<value optimized
> out>,
>    start=<value optimized out>, globals=<value optimized out>,
> locals=0x8b9270, closeit=1,
>    flags=0x7fffffffe100) at ../Python/pythonrun.c:1335
> #21 PyRun_FileExFlags (fp=0x919900, filename=<value optimized out>,
> start=<value optimized out>,
>    globals=<value optimized out>, locals=0x8b9270, closeit=1,
> flags=0x7fffffffe100)
>    at ../Python/pythonrun.c:1321
> #22 0x00000000004c3564 in PyRun_SimpleFileExFlags (fp=<value optimized out>,
>    filename=0x7fffffffe518 "ordqztest.py", closeit=1, flags=0x7fffffffe100)
>    at ../Python/pythonrun.c:931
> #23 0x0000000000418ab7 in Py_Main (argc=-135384960, argv=<value optimized
> out>) at ../Modules/main.c:599
> #24 0x00007ffff6fd0abd in __libc_start_main (main=<value optimized out>,
> argc=<value optimized out>,
>    ubp_av=<value optimized out>, init=<value optimized out>, fini=<value
> optimized out>,
>    rtld_fini=<value optimized out>, stack_end=0x7fffffffe218) at
> libc-start.c:220
> #25 0x0000000000417ca9 in _start () at ../sysdeps/x86_64/elf/start.S:113
>
> Any help or pointers would be appreciated, as I am a bit out of my depth.
>
> -Skipper
>
> _______________________________________________
> SciPy-User mailing list
> SciPy-User@scipy.org
> http://mail.scipy.org/mailman/listinfo/scipy-user
>
>

according to http://www.netlib.org/lapack/double/dtgsen.f  you are
missing alphai  in the argument list.

I don't have (or find) c_bool in python 2.5, so my tries are also unsuccessful.

Maybe wrapping with f2py like the routines in scipy.linalg might be a
better choice than ctypes? However, I haven't seen a recipe how to do
it.

Josef


More information about the SciPy-User mailing list