[Numpy-discussion] test code for user defined types in numpy

Charles R Harris charlesr.harris at gmail.com
Wed Dec 21 18:55:38 EST 2011


On Wed, Dec 21, 2011 at 1:37 PM, Geoffrey Irving <irving at naml.us> wrote:

> On Wed, Dec 21, 2011 at 3:56 AM, Charles R Harris
> <charlesr.harris at gmail.com> wrote:
> > Hi Geoffrey,
> >
> > On Tue, Dec 20, 2011 at 7:24 PM, Geoffrey Irving <irving at naml.us> wrote:
> >>
> >> Hello,
> >>
> >> As a followup to the prior thread on bugs in user defined types in
> >> numpy, I converted my rational number class from C++ to C and switched
> >> to 32 bits to remove the need for unportable 128 bit numbers.  It
> >> should be usable as a fairly thorough test case for user defined types
> >> now.  It does rather more than a minimal test case would need to do,
> >> but that isn't a problem unless you're concerned about code size.  Let
> >> me know if any further changes are needed before it's suitable for
> >> inclusion in numpy as a test case.  The repository is here:
> >>
> >>    https://github.com/girving/rational
> >>
> >> The tests run under either py.test or nose.
> >>
> >> For completeness, my branch fixing all but one of the bugs I found in
> >> numpy user defined types is here:
> >>
> >>    https://github.com/girving/numpy/tree/fixuserloops
> >>
> >> The remaining bug is that numpy incorrectly releases the GIL during
> >> casts even though NPY_NEEDS_API is set.  The resulting crash goes away
> >> if the line defining ACQUIRE_GIL is uncommented.  With the necessary
> >> locks in place, all my tests pass with my branch of numpy.  I haven't
> >> tracked this one down and fixed it yet, but it shouldn't be hard to do
> >> so.
> >>
> >
> > A few preliminary comments on the C code (since I can't comment directly
> on
> > github)
> >
> > 1) The C++ style comments aren't portable.
> >
> > 2) The trailing comments would (IMHO) look better on the line above.
> >
> > 3) The inline keyword isn't portable, use NPY_INLINE instead.
> >
> > 4) We've mostly used the
> >
> >     int
> >     foo(void)
> >     {
> >     }
> >
> > style of function definition.
> >
> > 5) And for if statements
> >
> >     if (is_toohot) {
> >         change_seats();
> >     }
> >     else if (is_toocold) {
> >         change_seats();
> >     }
> >     else {
> >         eat_cereal();
> >     }
> >
> > 6) Because Python assert disappears in release code, the tests need to
> use
> > assert_(...) imported from numpy.testing
>
> All fixed.
>
>
Mark, I'm ready to merge pull-175, is there any reason not to?

Chuck
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/numpy-discussion/attachments/20111221/8d44a785/attachment.html>


More information about the NumPy-Discussion mailing list