[Numpy-discussion] Re: Trouble installing numarray on Solaris

Todd Miller jmiller at stsci.edu
Mon Jul 4 17:27:54 CDT 2005


On Mon, 2005-07-04 at 18:59 +0200, Thomas Heller wrote:
> Todd Miller <jmiller at stsci.edu> writes:
> 
> > On Mon, 2005-07-04 at 13:40 +0200, Thomas Heller wrote:
> >> Todd Miller <jmiller at stsci.edu> writes:
> >> 
> >> > On Fri, 2005-07-01 at 15:02 -0700, Russell E. Owen wrote:
> >> >> A user of my application reports that installing numarray 1.3.2 on 
> >> >> Solaris using Python 2.3.1 has run into trouble:
> >> >> 
> >> >>   prompt> python
> >> >>   Python 2.3.1 (#1, Sep 30 2003, 20:29:58) [C] on sunos5
> >> >>   Type "help", "copyright", "credits" or "license" for more information.
> >> >>   >>> import numarray
> >> >>   Fatal Python error: Call to API function without first calling
> >> >>   import_libnumarray() in Src/_convmodule.c
> >> >>   Abort (core dumped)
> >> >
> >> > It looks vaguely like an binary API mismatch of some kind... or one of
> >> > you numarray modules is stale or broken.  To restate the obvious,   it's
> >> > likely that numarray won't import (in C!) because import_libnumarray()
> >> > is very defintely in _convmodule.c.  Since it's there and the API
> >> > pointer was not initialized,  the libnumarray import failed.
> >> 
> >> To the numarray authors/maintainers: Isn't it a bit harsh to call
> >> Py_FatalError() in the init function?
> >
> > That's an interesting observation...  the old recourse was to dump core
> > by calling through a NULL function pointer.  :-)
> >
> > Since this error can occur in the context of any API function, possibly
> > called from any sub-function within an extension function,  I'm not sure
> > there is a soft & general way to handle it:  getting it implies the
> > function must fail but that can't always be reported.  I'm open to
> > suggestions... it's just not obvious to me how to handle it better.
> 
> Maybe I was confusing numarray and numeric.  In numeric's
> _numpymodule.c, function init_numpy(), there is this
> 
>     [...]
>     if (PyErr_Occurred()) goto err;
>     return;
> err:
> 	Py_FatalError("can't initialize module _numpy");
> }
> 
> Sorry for the confusion.
> 
> > I've concluded that the message is overly specific and may shorten it to
> > just the facts:  "call through NULL numarray C-API pointer in <module>."
> 
> Wouldn't it be possible to raise an exception - that would make it
> easier to find the bug?

The two cases where this error have been triggered are:

1.  A bug in a C extension module which an author will catch before
release.  An exception is not worth much there.

2.  A corrupted numarray installation which will no longer import.  I
agree it would be nice there.

But... it's hard to raise an exception because the failure macro would
have to handle a variety of different return values,  even no return
value.  I don't see how to do it without too much extra complexity for a
relatively rare problem.

Regards,
Todd







More information about the Numpy-discussion mailing list