python numpy read-eval-print-loop memoryview structured-array

python - ¿Por qué crear esta vista de memoria genera un ValueError solo al asignar una variable?



numpy read-eval-print-loop (1)

Hay algo muy extraño aquí.

>>> memoryview(zeros(10, dtype=[("A", "m8[s]")])) <memory at 0x102654348> >>> ValueError: cannot include dtype ''m'' in a buffer

Mi conjetura es que esto está relacionado con https://bugs.python.org/issue23571 . Algunas funciones de C que subyacen a la vista de memoryview devuelven un resultado no nulo y establecen un indicador de error. ¡Esto aparentemente causa que el error se levante cuando se ejecuta la siguiente declaración! En Python 3.5, el intérprete genera un SystemError en SystemError lugar cuando se produce esta condición.

Parece que el error real aquí está con la función de vista de memoryview , no con numpy.

Pythons memoryview no admite datetime64 o timedelta . De acuerdo. Pero cuando intento crear una memoryview de memoryview de una matriz estructurada que incluye datetime64 o timedelta , parece funcionar ... ¡a menos que lo asigne a una variable !

In [19]: memoryview(zeros(10, dtype=[("A", "m8[s]")])) Out[19]: <memory at 0x7f1d455d6048> In [20]: x = memoryview(zeros(10, dtype=[("A", "m8[s]")])) --------------------------------------------------------------------------- ValueError Traceback (most recent call last) ValueError: cannot include dtype ''m'' in a buffer In [21]: x = _19 In [22]: x Out[22]: <memory at 0x7f1d455d6048>

Esto desafía seriamente mi comprensión de la forma en que Python funciona fundamentalmente. ¿Cómo pueden ser diferentes f() x = f() , considerando que (1) IPythons REPL asigna la salida a _19 todos modos, y (2) la función / vista de memoryview clase no tiene forma de saber qué hará la persona que llama? su salida?

Estoy ejecutando el código en Python 3.4.1, numpy 1.10.0.dev + fbcc24f, en Linux 2.6.32-431.23.3.el6.x86_64, Scientific Linux versión 6.6.

EDITAR

En Python 3.5, numpy 1.10.4, obtengo:

In [50]: memoryview(numpy.zeros(10, dtype=[("A", "m8[s]")])) --------------------------------------------------------------------------- ValueError Traceback (most recent call last) ValueError: cannot include dtype ''m'' in a buffer During handling of the above exception, another exception occurred: SystemError Traceback (most recent call last) <ipython-input-50-5d5ac6c085fa> in <module>() ----> 1 memoryview(numpy.zeros(10, dtype=[("A", "m8[s]")])) SystemError: <class ''memoryview''> returned a result with an error set

He archivado un error con numpy , aunque no estoy seguro de que ese sea el problema.