-
-
Notifications
You must be signed in to change notification settings - Fork 12.2k
Open
Labels
00 - Bug64 - Good IdeaInactive PR with a good start or idea. Consider studying it if you are working on a related issue.Inactive PR with a good start or idea. Consider studying it if you are working on a related issue.ProjectPossible project, may require specific skills and long commitmentPossible project, may require specific skills and long commitment
Description
Here's converting an array to a memoryview and back (Python 3) where itemsize equals the offsets of the last item plus its size:
>>> d1 = np.dtype({'formats': ['u1'], 'offsets': [0], 'names': ['x']})
>>> a1 = np.empty(0, d1)
>>> memoryview(a1).format
'T{B:x:}'
>>> memoryview(a1).itemsize
1
>>> np.array(memoryview(a1))
array([],
dtype=[('x', 'u1')])If we try to do the same where itemsize is bigger, it fails:
>>> d2 = np.dtype({'formats': ['u1'], 'offsets': [0], 'names': ['x'], 'itemsize': 4})
>>> d2.descr
[('x', '|u1'), ('', '|V3')] # the trailing padding is there
>>> a2 = np.empty(0, d2)
>>> memoryview(a2).format
'T{B:x:}' # shouldn't this be 'T{B:x:3x}'?
>>> memoryview(a2).itemsize
4
# so far so good...
# however:
>>> np.array(memoryview(a2))
RuntimeWarning: Item size computed from the PEP 3118 buffer format string does not match the actual item size.
NotImplementedError: memoryview: unsupported format T{B:x:}This seems quite wrong.
Looking at the code where it fails, _dtype_from_pep3118 only accepts a format string and not the itemsize, so the generated format string is probably wrong and should explicitly contain the trailing bytes?
May be somewhat related: #6361
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
00 - Bug64 - Good IdeaInactive PR with a good start or idea. Consider studying it if you are working on a related issue.Inactive PR with a good start or idea. Consider studying it if you are working on a related issue.ProjectPossible project, may require specific skills and long commitmentPossible project, may require specific skills and long commitment