Fixing the ctypes implementation of the PEP3118 buffer interface

I've recently been adding better support to Numpy 1.16 for interoperability with ctypes. In doing so, I came across two bugs in the implementation of the PEP3118 buffer interface within ctypes, affecting `Structure`s and arrays. Rather than repeating the issue summaries here, I've linked their tracker issues below, and the patches I filed to fix them. * https://bugs.python.org/issue32782 (patch: https://github.com/python/cpython/pull/5576) * https://bugs.python.org/issue32780 (patch: https://github.com/python/cpython/pull/5561) I've seen little to no response on either the bug tracker or the github PRs regarding these, so at the recommendation of the "Lifecycle of a Pull Request" am emailing this list. Without these fixes, numpy has no choice but to ignore the broken buffer interface that ctypes provides, and instead try to parse the ctypes types manually. The sooner this makes a CPython release, the sooner numpy can remove those workarounds. Thanks, Eric

On 4/14/2019 2:54 AM, Eric Wieser wrote:
I've recently been adding better support to Numpy 1.16 for interoperability with ctypes.
In doing so, I came across two bugs in the implementation of the PEP3118 buffer interface within ctypes, affecting `Structure`s and arrays. Rather than repeating the issue summaries here, I've linked their tracker issues below, and the patches I filed to fix them.
* https://bugs.python.org/issue32782 (patch: https://github.com/python/cpython/pull/5576)
memoryview(object).itemsize is 0 when object is ctypes structure and format. C expert needed to review 30-line patch, most of which is error handling. Patch includes new tests and blurb.
* https://bugs.python.org/issue32780 (patch: https://github.com/python/cpython/pull/5561)
A partial fix for a more complicated memoryview, ctypes structure and format, and itemsize situation.
I've seen little to no response on either the bug tracker or the github PRs regarding these, so at the recommendation of the "Lifecycle of a Pull Request" am emailing this list.
The problem is that the currently listed ctypes and memoryview experts are not currently active.
Without these fixes, numpy has no choice but to ignore the broken buffer interface that ctypes provides, and instead try to parse the ctypes types manually. The sooner this makes a CPython release, the sooner numpy can remove those workarounds.
-- Terry Jan Reedy
participants (2)
-
Eric Wieser
-
Terry Reedy