[Matrix-SIG] PyArray_Free in arrayobject.c
Travis Oliphant
Oliphant.Travis@mayo.edu
Mon, 1 Mar 1999 23:01:17 -0600 (EST)
On Mon, 1 Mar 1999, David Ascher wrote:
>
> > This code admittedly looks a little bit strange. I believe that it
> > should only be called very rarely (at least as originally inteneded)
> > and is supposed to be partnered with the PyArray_As1d and As_2d (or
> > something like that) calls -- the reason for the skipped nd == 3 case
> > is that I had originally planned an As3d function and never got around
> > to implementing it.
I suspected that PyArray_Free was supposed to be partnered with
PyArray_AsXd. I see why there would be an nd == 3 case that would get
skipped. Still, the code there now seems to free a single array of
pointers (exactly what it should do for the n=2 case)
> > The As2d function in particular created a new C-array which isn't
> > referenced by any PyArray objects (so people can do a[0][0] C-style
> > indexing). The Free function handles freeing this.
This is what I thought it was supposed to do. But, as is, this array of
pointers never gets released because ap->nd != 3, and the code to release
this array of pointers is inside of a conditional branch that requires
ap->nd == 3.
> I can't imagine why PyArray_Reshape, PyArray_Transpose,
> PyArray_Repeat, ... would be using this function, but if they are it
> might indicate something peculiar is going on.
Well, they are indeed being used in these functions. I agree that they
are unnecessary though. Is something peculiar going on?
> BTW - A huge motivating factor of JPython was how frustrated I got
> with all these silly refcount issues when building numpy. I wouldn't
> be surprised if you found some mistakes on that score...
Is there a NumPy for JPython?
-- Travis