Opened 4 years ago

Closed 4 years ago

#758 closed defect (fixed)

Cython and NumPy record dtypes breaks with NumPy 1.6

Reported by: dagss Owned by: somebody
Priority: major Milestone: 1.0
Component: Code Generation Keywords:

Description (last modified by mark)

From ML. The breakage is due to upgrading to NumPy? 1.6.

Upon upgrading to Ubuntu Oneiric (with Cython 1.14.1), I was extremely
disappointed when I found that my data analysis tools would refuse to
run. In particular, numpy array creation of some dtypes would fail with
the perplexing error,

  Traceback (most recent call last):
    File "photon_tools/", line 4, in <module>
      b = bp.bin_photons(a['t'], 1)
    File "bin_photons.pyx", line 21, in photon_tools.bin_photons.bin_photons (photon_tools/bin_photons.c:1179)
      cdef np.ndarray[Bin] chunk
  ValueError: Buffer packing mode currently only allowed at beginning of format string (this is a defect)

This, despite the fact that I have not specified any explicit packing
modes in my dtypes. I am also able to reproduce this with the latest
Cython release. Strangely enough, a similar datatype had no such
issue. While allocations of the type strobe_event_dtype,

  cdef packed struct StrobeEvent:
          np.uint64_t time
          np.uint8_t channels

  strobe_event_dtype = np.dtype([('t', np.uint64), ('chs', np.uint8)])

succeed, allocations of type bin_dtype,

  cdef packed struct Bin:
          np.uint64_t start_t
          np.uint16_t count

  bin_dtype = np.dtype([('start_t', np.uint64), ('count', np.uint16)])

consistently fail with the above error. Looking at the resulting dtype
objects, the only difference I can see is the type of the 'chs' field is
translated into '|u1' whereas 'count' is translated into '<u2'. Perhaps
this '<' modifier is the cause of the failure.

It seems to me that my code is quite idiomatic, yet I've seen no other
reports of this failure. What am I doing wrong?

Change History (1)

comment:1 in reply to: ↑ description Changed 4 years ago by mark

  • Description modified (diff)
  • Resolution set to fixed
  • Status changed from new to closed

Fixed in 56b88ec4de208be0e327c218893519963273cb1c by Pauli.

Note: See TracTickets for help on using tickets.