Cómo pasar una matriz numpy de tipos de cadena a una función en Cython

Pasando una matriz numpy de dtypenp.float64_t funciona bien (abajo), pero no puedo pasar matrices de cadenas.

Esto es lo que funciona:

# cython_testing.pyx
import numpy as np
cimport numpy as np

ctypedef np.float64_t dtype_t 

cdef func1 (np.ndarray[dtype_t, ndim=2] A):
    print A 

def testing():
    chunk = np.array ( [[94.,3.],[44.,4.]], dtype=np.float64)

    func1 (chunk)

Pero no puedo hacer que esto funcione. No puedo encontrar los 'identificadores de tipo' coincidentes para los tipos de cadena numpy.

# cython_testing.pyx
import numpy as np
cimport numpy as np

ctypedef np.string_t dtype_str_t 

cdef func1 (np.ndarray[dtype_str_t, ndim=2] A):
    print A 

def testing():
    chunk = np.array ( [['huh','yea'],['swell','ray']], dtype=np.string_)

    func1 (chunk)

El error de compilación es:

Error compiling Cython file:
------------------------------------------------------------
ctypedef np.string_t dtype_str_t 
    ^
------------------------------------------------------------

cython_testing.pyx:9:9: 'string_t' is not a type identifier

ACTUALIZAR

Per mirando a través denumpy.pxd, Veo lo siguientectypedef declaraciones Tal vez sea suficiente para decir que puedo usaruint8_t ¿Y fingir que todo es normal, siempre que pueda hacer algo de casting?

ctypedef unsigned char      npy_uint8
ctypedef npy_uint8      uint8_t

Solo hay que ver lo caro que será ese casting.

Respuestas a la pregunta(2)

Su respuesta a la pregunta