[SciPy-user] weave.inline keeps recompling my C++ code (fwd)

Wed Mar 30 00:59:08 CST 2005

```Curtis Cooper wrote:
> Hi,
>
> I'm using weave.inline to compare the performance of weave with several
> other methods of doing the same calculation.  It is simply a matrix
> multiplication: Z = sin(X)*cos(Y).  I have attached my program for you to
> peruse.  I am in general very impressed with the usability and
> performance of weave.  I have two questions, however:
>
> 1) Why does it tell me 'repairing catalog by removing key' every single
> time I run this program using 'python tryweave.py'?  I thought the idea
> was for scipy-weave to only have to recompile the C++ portions if the C++
> source code changes.

I think this is a bug in weave.inline.  Incidentally, I ran into it just
today, and also when trying to use some C code which called sin/cos.  I may
have a look at the weave code to fix it, but I can't make any promises as to
when.  weave is not quite trivial, and the last time I fixed something there,
it took a bit of effort just to wrap my head around enough of the code to
understand what to look for.  If you can fix it quicker, by all means send a
patch.

> 2) How can I use the sin and cos functions with weave.blitz?  Up until
> now, I have had to comment out the weave_blitz version because I can't
> figure out how to add cmath support to my blitz++ expression.

You need to make sure that the math.h header is included, and that libm is
linked in.  Here's a trivial (scalar) example:

def sinC(x):
"""sinC(x) -> sin(x). Implemented using the C sin() function.
"""
support = \
"""
#include <math.h>
"""
code = \
"""
return_val = sin(x);
"""
return inline(code,['x'],
type_converters = converters.blitz,
support_code = support,
libraries = ['m'],
)

Once you do those two things, your looping example with sin(X(i,j)) should
work just fine.

best,

f

```