swig: conversion of C double to Python float

Lyle Johnson lyle at users.sourceforge.net
Wed Feb 11 10:30:18 EST 2004


Ernie wrote:

> Here is the swig file mvf.i:
>  %module mvf
>  %include "carrays.i"
>  %array_class(double, doubleArray);
>  %typemap(out) double, float "$result = PyFloat_FromDouble($1);"
>  %include mvf.h

<snip>

> What could have gone wrong?

You need to add a verbatim block near the top of your SWIG interface 
file, e.g.

	%module mvf

	%{
	#include "mvf.h"
	%}

	%include "carrays.i"
	%array_class(double, doubleArray);

	%include mvf.h

Otherwise, there's no declaration of SumSquares() in the SWIG-generated 
mvf_wrap.c file, and the compiler assumes that SumSquares() returns an 
int instead of a double. (You would see a warning about this if you 
added the -Wall flag to your compiler flags when compiling mvf_wrap.c). 
For more information on why this is needed, see the "Input format" 
section of the "SWIG Basics" chapter of the SWIG documentation:

	http://www.swig.org/Doc1.3/SWIG.html#n3

I've also removed the "out" typemap for double and float, since that's 
built in and doesn't need to be explicitly specified.

Hope this helps,

Lyle



More information about the Python-list mailing list