Actually, wrt my previous message on cobjects for communicating between
extension modules, we can do one better!
This is an idea I've been toying with for the MacPython extension
types, and I think it's applicable to Numeric too. It goes as follows.
Each Numeric object has an attribute with a well-known name, lets call
it "__Numeric_C_interface". This is a Cobject, and it is shared among
all Numeric objects of the same type. The value of this C object is a
pointer to a C structure with pointers to all the C routines you might
want to call on the object, basically the PyArray_API structure (I
think). The descr of the C object is a string with the version number
of this particular PyArray_API structure.
An extension module that knows about this protocol and gets passed an
object that it think might be a Numeric array checks whether the object
has an __Numeric_C_interface attribute. If so it retrieves it, checks
that it is a Cobject, gets the descriptor and tests it for
compatibility and if it is compatible gets the cobject pointer and
happily calls all the Numeric routines it needs.
--
- Jack Jansen