[NumPy-Tickets] [NumPy] #1625: Numpy is ignoring the fact "isfinite" is undefined

NumPy Trac numpy-tickets@scipy....
Tue Oct 5 14:50:23 CDT 2010


#1625: Numpy is ignoring the fact "isfinite" is undefined
----------------------+-----------------------------------------------------
 Reporter:  drkirkby  |       Owner:  somebody
     Type:  defect    |      Status:  new     
 Priority:  normal    |   Milestone:  2.0.0   
Component:  Other     |     Version:  1.5.0   
 Keywords:            |  
----------------------+-----------------------------------------------------
 On Solaris or !OpenSolaris, when Python is built, it is not compiled as a
 C99 application. (That's a choice the Python developers took).

 Therefore, {{{isfinite}}}, which was not defined in the C standard until
 C99, does not exist. Hence when Python builds, the config.log shows:

 {{{
 ac_cv_have_decl_isfinite=no
 }}}

 The latest Numpy, (and this includes the latest snapshot taken only an
 hour or two) ago builds OK on Solaris. However, when one tries to import
 this into Python with:

 {{{
 import numpy
 }}}

 it generates an error:

 {{{
 ImportError: ld.so.1: python: fatal: relocation error: file
 /home/palmieri/fulvia/numpy/sage-4.6.alpha2/local/lib/python2.6/site-
 packages/numpy/core/multiarray.so: symbol isfinite: referenced symbol not
 found
 }}}

 It would appear that Numpy is trying to use {{{isfinite}}}, despite the
 fact that Python is built without adding specific C99 support.

 Linux systems, which I assume is what most Numpy developers use, defines
 {{{isfinite}}} when one includes {{{math.h}}} in a file. But this should
 not happen unless one builds C99 code, as {{{isfinite}}} was not defined
 until the C99 standard. That's a  problem with Linux - it tends not to
 conform to standards too well.

 Solaris in comparison will not define {{{isfinite}}} unless the code is
 C99. {{{isfinite}}} is defined in a header file
 {{{/usr/include/iso/math_c99.h}}} but '''not''' in
 {{{/usr/include/math.h}}}. However, if the compiler is building C99 code,
 then the contents of {{{/usr/include/iso/math_c99.h}}} will be included,
 so {{{isfinite}}} will be defined.

 I believe this is a bug in Numpy, as it should respect the fact the Python
 build has determined {{{isfinite}}} is undefined (so sets
 {{{ac_cv_have_decl_isfinite=no}}}) and so therefore Numpy should not try
 to use {{{isfinite}}}.

 This came up as a bug when we tried to update Numpy in Sage. It is
 documented on

 http://trac.sagemath.org/sage_trac/ticket/9808

 but I believe you will find the information there confusing, as it covers
 many issues associated with upgrading Numpy and Scipy in Sage.

 The basic problem is Numpy is using {{{isfinite}}} even though Python has
 worked out that it is undefined.

 Dave

-- 
Ticket URL: <http://projects.scipy.org/numpy/ticket/1625>
NumPy <http://projects.scipy.org/numpy>
My example project


More information about the NumPy-Tickets mailing list