[SciPy-user] Problems with porting code using weave

Lars Bittrich lars.bittrich at googlemail.com
Mon Mar 27 04:14:25 CST 2006


Hi again,

On Friday 24 March 2006 20:22, Travis Oliphant wrote:
[...]
> Please let us know what trouble you are having.

finally I have isolated a very strange behavior. Sorry about the delay but I 
was not able to answer during the weekend. My code example looks as follows:

------------------------------------------------------------------------------

from scipy import *
from scipy.weave import inline,converters

N = 10
arr = zeros(N, Float)

factor = sqrt(1./pi)
#factor = pi

code= \
"""
double tmp = 1.0;

for (int i=0; i < N; i++) {
    arr(i) = tmp*factor;
}
"""
inline(code, ['arr', 'N', 'factor'], type_converters = converters.blitz)

print arr

------------------------------------------------------------------------------

When I run that file I get:

------------------------------------------------------------------------------
<weave: compiling>
/home/bittrich/.python23_compiled/sc_42e1646ad2085e8e2fc33f53a826fe5a0.cpp: In
   function `PyObject* compiled_func(PyObject*, PyObject*)':
/home/bittrich/.python23_compiled/sc_42e1646ad2085e8e2fc33f53a826fe5a0.cpp:715: 
error: ambiguous
   overload for 'operator*' in 'tmp * factor'
/home/bittrich/.python23_compiled/sc_42e1646ad2085e8e2fc33f53a826fe5a0.cpp:715: 
error: candidates
   are: operator*(double, double) <built-in>
/home/bittrich/.python23_compiled/sc_42e1646ad2085e8e2fc33f53a826fe5a0.cpp:715: 
error:
                  operator*(double, float) <built-in>
/home/bittrich/.python23_compiled/sc_42e1646ad2085e8e2fc33f53a826fe5a0.cpp:715: 
error:
                  operator*(double, int) <built-in>
/home/bittrich/.python23_compiled/sc_42e1646ad2085e8e2fc33f53a826fe5a0.cpp: In
   function `PyObject* compiled_func(PyObject*, PyObject*)':
/home/bittrich/.python23_compiled/sc_42e1646ad2085e8e2fc33f53a826fe5a0.cpp:715: 
error: ambiguous
   overload for 'operator*' in 'tmp * factor'
/home/bittrich/.python23_compiled/sc_42e1646ad2085e8e2fc33f53a826fe5a0.cpp:715: 
error: candidates
   are: operator*(double, double) <built-in>
/home/bittrich/.python23_compiled/sc_42e1646ad2085e8e2fc33f53a826fe5a0.cpp:715: 
error:
                  operator*(double, float) <built-in>
/home/bittrich/.python23_compiled/sc_42e1646ad2085e8e2fc33f53a826fe5a0.cpp:715: 
error:
                  operator*(double, int) <built-in>
Traceback (most recent call last):
  File "test.py", line 18, in ?
    inline(code, ['arr', 'N', 'factor'], type_converters = converters.blitz)
  File "/opt/cp/lib/python2.3/site-packages/scipy/weave/inline_tools.py", line 
334, in inline
    auto_downcast = auto_downcast,
  File "/opt/cp/lib/python2.3/site-packages/scipy/weave/inline_tools.py", line 
442, in compile_function
    verbose=verbose, **kw)
  File "/opt/cp/lib/python2.3/site-packages/scipy/weave/ext_tools.py", line 
353, in compile
    verbose = verbose, **kw)
  File "/opt/cp/lib/python2.3/site-packages/scipy/weave/build_tools.py", line 
274, in build_extension
    setup(name = module_name, ext_modules = [ext],verbose=verb)
  File "/opt/cp/lib/python2.3/site-packages/numpy/distutils/core.py", line 85, 
in setup
    return old_setup(**new_attr)
  File "/usr/lib/python2.3/distutils/core.py", line 166, in setup
    raise SystemExit, "error: " + str(msg)
scipy.weave.build_tools.CompileError: error: Command "g++ -pthread 
-fno-strict-aliasing -DNDEBUG -g -O3 -Wstrict-prototypes -fPIC 
-I/opt/cp/lib/python2.3/site-packages/scipy/weave 
-I/opt/cp/lib/python2.3/site-packages/scipy/weave/scxx 
-I/opt/cp/lib/python2.3/site-packages/scipy/weave/blitz 
-I/opt/cp/lib/python2.3/site-packages/numpy/core/include 
-I/usr/include/python2.3 
-c /home/bittrich/.python23_compiled/sc_42e1646ad2085e8e2fc33f53a826fe5a0.cpp 
-o /tmp/bittrich/python23_intermediate/compiler_cae5f1e251cd037a19f0234c558d6f0e/home/bittrich/.python23_compiled/sc_42e1646ad2085e8e2fc33f53a826fe5a0.o" 
failed with exit status 1

------------------------------------------------------------------------------

Uncommenting 'factor = pi' it simply works fine. Even if I remove that line 
once again and leave the c part unchanged so that there is no recompile 
needed, the program just works. Now I have found a solution for me. I just 
have to add some line like:

double tmpfactor = factor;

and do not use 'factor' again in the code. But that behavior remains odd in my 
eyes. Maybe it has something to do with my compiler. Maybe I can try the 
newest svn-version of scipy during the next few days. I will keep reporting 
anything alike. Thank you for your help.

Best regards,
Lars



More information about the SciPy-user mailing list