Bug 709782 - Undefined symbol
Summary: Undefined symbol
Keywords:
Status: CLOSED NOTABUG
Alias: None
Product: Fedora
Classification: Fedora
Component: scipy
Version: 15
Hardware: i686
OS: Linux
unspecified
low
Target Milestone: ---
Assignee: Jef Spaleta
QA Contact: Fedora Extras Quality Assurance
URL:
Whiteboard:
Depends On:
Blocks:
TreeView+ depends on / blocked
 
Reported: 2011-06-01 15:47 UTC by James Webb
Modified: 2011-06-04 21:00 UTC (History)
4 users (show)

Fixed In Version:
Clone Of:
Environment:
Last Closed: 2011-06-03 15:37:03 UTC
Type: ---
Embargoed:


Attachments (Terms of Use)
ipython traceback (1.76 KB, text/plain)
2011-06-01 15:47 UTC, James Webb
no flags Details

Description James Webb 2011-06-01 15:47:51 UTC
Created attachment 502306 [details]
ipython traceback

Description of problem: Importing scipy under jmodelica leads to:

ImportError: /usr/lib/python2.7/site-packages/scipy/linalg/clapack.so: undefined symbol: clapack_sgesv


Version-Release number of selected component (if applicable): scipy-0.9.0-1.fc15.i686


How reproducible: Always


Steps to Reproduce:
1. From jmodelica python shell issue "from jmodelica.examples import *
  
Actual results: Above import error


Expected results: No errors


Additional info: Could be jmodelica problem

Comment 1 James Webb 2011-06-01 16:19:46 UTC
Comment on attachment 502306 [details]
ipython traceback

>
>In [1]: from jmodelica.examples import *
>JVM started.
>---------------------------------------------------------------------------
>ImportError                               Traceback (most recent call last)
>
>/home/jrwebb/jm_work/<ipython console> in <module>()
>
>/usr/local/jmodelica/Python/jmodelica/examples/cstr_mpc.py in <module>()
>     22 import numpy as N
>     23 import scipy as S
>---> 24 import scipy.optimize as opt
>     25 import ctypes as ct
>     26 import matplotlib.pyplot as plt
>
>/usr/lib/python2.7/site-packages/scipy/optimize/__init__.py in <module>()
>     12 from tnc import fmin_tnc
>     13 from cobyla import fmin_cobyla
>---> 14 from nonlin import *
>     15 from slsqp import fmin_slsqp
>     16 from nnls import nnls
>
>/usr/lib/python2.7/site-packages/scipy/optimize/nonlin.py in <module>()
>    111 import sys
>    112 import numpy as np
>--> 113 from scipy.linalg import norm, solve, inv, qr, svd, lstsq, LinAlgError
>    114 from numpy import asarray, dot, vdot
>    115 import scipy.sparse.linalg
>
>/usr/lib/python2.7/site-packages/scipy/linalg/__init__.py in <module>()
>      7 
>      8 from misc import *
>----> 9 from basic import *
>     10 from decomp import *
>     11 from decomp_lu import *
>
>/usr/lib/python2.7/site-packages/scipy/linalg/basic.py in <module>()
>     12 
>     13 from flinalg import get_flinalg_funcs
>---> 14 from lapack import get_lapack_funcs
>     15 from misc import LinAlgError
>     16 from scipy.linalg import calc_lwork
>
>/usr/lib/python2.7/site-packages/scipy/linalg/lapack.py in <module>()
>     13 
>     14 from scipy.linalg import flapack
>---> 15 from scipy.linalg import clapack
>     16 _use_force_clapack = 1
>     17 if hasattr(clapack,'empty_module'):
>
>ImportError: /usr/lib/python2.7/site-packages/scipy/linalg/clapack.so: undefined symbol: clapack_sgesv
>
I forgot:

$ ldd /usr/lib/python2.7/site-packages/scipy/linalg/clapack.so
	linux-gate.so.1 =>  (0x00ac3000)
	liblapack.so.3 => /usr/lib/atlas/liblapack.so.3 (0x00110000)
	libptf77blas.so.3 => /usr/lib/atlas/libptf77blas.so.3 (0x00b81000)
	libptcblas.so.3 => /usr/lib/atlas/libptcblas.so.3 (0x006a5000)
	libatlas.so.3 => /usr/lib/atlas/libatlas.so.3 (0x00777000)
	libpython2.7.so.1.0 => /usr/lib/libpython2.7.so.1.0 (0x00b9c000)
	libgfortran.so.3 => /usr/lib/libgfortran.so.3 (0x00d32000)
	libm.so.6 => /lib/libm.so.6 (0x006c5000)
	libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x00ed2000)
	libquadmath.so.0 => /usr/lib/libquadmath.so.0 (0x00a4f000)
	libc.so.6 => /lib/libc.so.6 (0x00eef000)
	libf77blas.so.3 => /usr/lib/atlas/libf77blas.so.3 (0x006f0000)
	libcblas.so.3 => /usr/lib/atlas/libcblas.so.3 (0x0070b000)
	libpthread.so.0 => /lib/libpthread.so.0 (0x0072b000)
	libdl.so.2 => /lib/libdl.so.2 (0x00746000)
	libutil.so.1 => /lib/libutil.so.1 (0x0074b000)
	/lib/ld-linux.so.2 (0x461ac000)

Comment 2 Thomas Spura 2011-06-01 23:58:37 UTC
Hmm, should be possible to reproduce this with:
python -c "from scipy.linalg import clapack"

Could you check that please?

But didn't work here on x86_64, but the symbol is there:
$ strings -a /usr/lib64/python2.7/site-packages/scipy/linalg/clapack.so | grep clapack_sgesv
clapack_sgesv

Don't know where this error comes from (or it's too late right now^^).

Comment 3 James Webb 2011-06-02 06:18:30 UTC
python -c "from scipy.linalg import clapack" works fine

>>> from scipy.linalg import clapack
>>> dir()
['__builtins__', '__doc__', '__name__', '__package__', 'clapack']
>>>

Comment 4 James Webb 2011-06-02 06:29:08 UTC
Seems to be related to ipython:

In [1]: from scipy.linalg import clapack
---------------------------------------------------------------------------
ImportError                               Traceback (most recent call last)

/home/jrwebb/jm_work/<ipython console> in <module>()

/usr/lib/python2.7/site-packages/scipy/linalg/__init__.py in <module>()
      7 
      8 from misc import *
----> 9 from basic import *
     10 from decomp import *
     11 from decomp_lu import *

/usr/lib/python2.7/site-packages/scipy/linalg/basic.py in <module>()
     12 
     13 from flinalg import get_flinalg_funcs
---> 14 from lapack import get_lapack_funcs
     15 from misc import LinAlgError
     16 from scipy.linalg import calc_lwork

/usr/lib/python2.7/site-packages/scipy/linalg/lapack.py in <module>()
     13 
     14 from scipy.linalg import flapack
---> 15 from scipy.linalg import clapack
     16 _use_force_clapack = 1
     17 if hasattr(clapack,'empty_module'):

ImportError: /usr/lib/python2.7/site-packages/scipy/linalg/clapack.so: undefined symbol: clapack_sgesv

Comment 5 James Webb 2011-06-02 06:35:56 UTC
Same thing happens using straight python shell jm_python.sh:

$ cat /usr/local/bin/jm_python.sh 
#!/bin/sh

if test "${JAVA_HOME}" = ""; then
  export JAVA_HOME=/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0/
fi
JMODELICA_HOME=/usr/local/jmodelica \
IPOPT_HOME=/usr \
CPPAD_HOME=/home/jrwebb/src/JModelica/ThirdParty/CppAD/cppad-20100325/ \
SUNDIALS_HOME=/usr/local \
PYTHONPATH=:/usr/local/jmodelica/Python/ \
LD_LIBRARY_PATH=:/usr/lib:/usr/local/lib \
python $@

Comment 6 Thomas Spura 2011-06-02 09:41:07 UTC
I still have no chance to reproduce this (also not in ipython):
$ ipython 
Python 2.7.1 (r271:86832, Apr 12 2011, 16:15:16) 
Type "copyright", "credits" or "license" for more information.

IPython 0.10.2 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object'. ?object also works, ?? prints more.

In [1]: from scipy.linalg import clapack

In [2]: dir()
Out[2]: 
['In',
 'Out',
 '_',
 '__',
 '__IP',
 '___',
 '__builtins__',
 '__name__',
 '__package__',
 '_dh',
 '_i',
 '_i1',
 '_i2',
 '_ih',
 '_ii',
 '_iii',
 '_ip',
 '_oh',
 '_sh',
 'clapack',
 'help']

In [3]: 

The symbol is defined here in atlas/liblapack.so, maybe you have another liblapack.so that's found first, where it's not defined.

Could you please run:
$ rpm -qa | grep atlas
$ rpm -qa | grep lapack

Comment 7 James Webb 2011-06-02 18:21:09 UTC
$ rpm -qa|grep atlas
atlas-sse3-3.8.3-18.fc15.i686
atlas-sse3-devel-3.8.3-18.fc15.i686
$ rpm -qa|grep lapack
lapack-devel-3.2.2-3.fc15.i686
lapack-static-3.2.2-3.fc15.i686
lapack-3.2.2-3.fc15.i686

scipy requires atlas. ld.so.conf is pulling atlas in over lapack.

$ ldd /usr/lib/python2.7/site-packages/scipy/linalg/clapack.so
	linux-gate.so.1 =>  (0x00336000)
	liblapack.so.3 => /usr/lib/atlas-sse3/liblapack.so.3 (0x007f3000)
	libptf77blas.so.3 => /usr/lib/atlas-sse3/libptf77blas.so.3 (0x0036a000)
	libptcblas.so.3 => /usr/lib/atlas-sse3/libptcblas.so.3 (0x001e5000)
	libatlas.so.3 => /usr/lib/atlas-sse3/libatlas.so.3 (0x003a4000) ...

If module is looking for clapack routine, why is module only linking in lapack instead of clapack library?

$ rpm -ql atlas-sse3
/etc/ld.so.conf.d/atlas-i386-sse3.conf
/usr/lib/atlas-sse3
/usr/lib/atlas-sse3/libatlas.so.3
/usr/lib/atlas-sse3/libatlas.so.3.0
/usr/lib/atlas-sse3/libcblas.so.3
/usr/lib/atlas-sse3/libcblas.so.3.0
/usr/lib/atlas-sse3/libclapack.so.3
/usr/lib/atlas-sse3/libclapack.so.3.0
/usr/lib/atlas-sse3/libf77blas.so.3
/usr/lib/atlas-sse3/libf77blas.so.3.0
/usr/lib/atlas-sse3/liblapack.so.3
/usr/lib/atlas-sse3/liblapack.so.3.0 ...

Comment 8 Thomas Spura 2011-06-03 07:57:53 UTC
Well, in /usr/lib/atlas-sse3/liblapack.so.3 there is also a clapack_sgesv.

Maybe jmodelica changes the search path, so lapack directly is found first?
It's strange, that pure python can import it correctly, but nothing else works for you...

Comment 9 James Webb 2011-06-03 15:36:32 UTC
You are right. It was staring me in the face the whole time. The startup script  sets LD_LIBRARY_PATH=:/usr/lib:/usr/local/lib. I added /usr/lib/atlas-sse3 before /usr/lib and problem went away. Thanks for help. This ticket can be closed. Not a problem with packages. Problem with the user.

Comment 10 Thomas Spura 2011-06-04 21:00:02 UTC
No problem :)

Could have seen it too in comment #5^^


Note You need to log in before you can comment on or make changes to this bug.