Cython отклоняет float32 в объединенном dtype

#python #c #numpy #cython

#python #c #numpy #cython

Вопрос:

Я пытаюсь написать функцию Cython, которая могла бы использовать объединенный dtype, включающий float32. Однако он отклоняет ввод, если не указано явно. Почему ?

Например:

 cimport numpy as cnp

ctypedef fused floatdtype:
    cnp.npy_float32

@cy.boundscheck(False)
@cy.wraparound(False)
cpdef void test(floatdtype smth):
    print(smth)
 

А затем в Python ниже появляется ошибка «Ошибка типа: не найдена соответствующая подпись»:

 import numpy as np

smth= np.float32(19700101.0)
test(smth)
 

Однако это работает просто отлично:

 cimport numpy as cnp

@cy.boundscheck(False)
@cy.wraparound(False)
cpdef void test( cnp.npy_float32 smth):
    print(smth)
 

Комментарии:

1. Я думаю, что, вероятно, константа интерпретируется как double и ищет точное совпадение. Более типичным использованием для fused types был бы тип с определением как float, так и double .