Usando código Cython auto-definido de outro código Cython

tualmente, estou tentando otimizar meu programa Python e comecei a usar o Cython para reduzir a sobrecarga de chamada de função e, talvez mais tarde, incluir funções otimizadas de bibliotecas

Então eu corri para o primeiro problema:

Estou usando composição no meu código para criar uma classe maior. Até agora, consegui converter uma das minhas classes Python para Cython (o que já era bastante difícil). Aqui está o código:

import numpy as np
cimport numpy as np
ctypedef np.float64_t dtype_t
ctypedef np.complex128_t cplxtype_t
ctypedef Py_ssize_t index_t

cdef class bendingForcesClass(object):
    cdef dtype_t bendingRigidity
    cdef np.ndarray matrixPrefactor
    cdef np.ndarray bendingForces

    def __init__(self, dtype_t bendingRigidity, np.ndarray[dtype_t, ndim=2] waveNumbersNorm):
        self.bendingRigidity = bendingRigidity
        self.matrixPrefactor = -self.bendingRigidity * waveNumbersNorm ** 2

    cpdef np.ndarray calculate(self, np.ndarray membraneHeight):
        cdef np.ndarray bendingForces
        bendingForces = self.matrixPrefactor * membraneHeight
        return bendingForces

Da minha classe Python / Cython composta, estou chamando o método de classecalculate, para que, na minha classe composta, tenha o seguinte código (reduzido):

from bendingForcesClass import bendingForcesClass

cdef class membraneClass(object):
    def  __init__(self, systemSideLength, lowerCutoffLength, bendingRigidity):
        self.bendingForces = bendingForcesClass(bendingRigidity, self.waveNumbers.norm)

    def calculateForces(self, heightR):
        return self.bendingForces.calculate(heightR)

Eu descobri quecpdef faz com que o método / funções possa ser chamado de Python e Cython, o que é ótimo e funciona, desde que eu não tente definir o tipo deself.bendingForces de antemão - que, de acordo com documentação (Early Binding For Spee é necessário para remover a sobrecarga de chamada de função. Eu tentei o seguinte, que não funciona:

from bendingForcesClass import bendingForcesClass
from bendingForcesClass cimport bendingForcesClass

    cdef class membraneClass(object):
        cdef bendingForcesClass bendingForces

        def  __init__(self, systemSideLength, lowerCutoffLength, bendingRigidity):
            self.bendingForces = bendingForcesClass(bendingRigidity, self.waveNumbers.norm)

        def calculateForces(self, heightR):
            return self.bendingForces.calculate(heightR)

Com isso, recebo esse erro ao tentar criarmembraneClass.pyx com Cython:

membraneClass.pyx:18:6: 'bendingForcesClass' is not a type identifier
building 'membraneClass' extension

Observe que as declarações estão em dois arquivos separados, o que dificulta iss

Então, como faço para fazer isso? Ficaria muito grato se alguém pudesse me dar um ponteiro, pois não consigo encontrar nenhuma informação sobre isso, além do link fornecido acim

Obrigado e cumprimentos

questionAnswers(3)

yourAnswerToTheQuestion