8

I am compiling this Cython code in Sage Cell Server and I get the following error.

undeclared name not builtin: array

It displays the same error in Sage Notebook. I think it is not recognizing numpy array but it is strange cause I have imported numpy already.

 cython('''
  cimport numpy as np
  ctypedef np.int DTYPE
  def computeDetCy(np.ndarray[DTYPE, ndim=2] matrix):      
      return determ(matrix,len(matrix))

cdef inline int determ(np.ndarray[DTYPE, ndim=2] matrix, int n):
cdef int det = 0
cdef int p=0
cdef int h
cdef int k
cdef int i=0
cdef int j=0
cdef np.ndarray[DTYPE, ndim=2] temp=np.zeros(4,4)
if n == 1:
    return matrix[0][0]
elif  n == 2:
    return matrix[0][0]*matrix[1][1] - matrix[0][1]*matrix[1][0]
else:
    for p in range(0, n):
        h = 0
        k = 0
        for i in range(1, n):
            for j in range(0, n):
                if j==p:
                    continue 
                temp[h][k] = matrix[i][j]
                k+=1
                if k ==(n-1):
                    h+=1
                    k=0
        det= det + matrix[0][p] * (-1)**p * determ(temp, n-1)

    return det

computeDetCy(array([[13,42,43,22],[12,67,45,98],[23,91,18,54],[34,56,82,76]]))

''')
ucMedia
  • 4,105
  • 4
  • 38
  • 46
jmishra
  • 2,086
  • 2
  • 24
  • 38

1 Answers1

3

Yeah, but you imported it as np, not importing * (which would be a bad idea anyway) and didn't do a regular Python import. (Sometimes you have to do both a cimport and import, see this SO question for an example.)

However, even after

import numpy as np

and using np.array, I still get some errors

ValueError: Buffer dtype mismatch, expected 'DTYPE' but got 'long'

So this solves your question, but isn't the whole story, and the things I tried didn't work to fix this new issue.

Community
  • 1
  • 1
kcrisman
  • 4,374
  • 20
  • 41
  • 2
    Your answer fixes the problem reported. The second problem should be fixed by changing the definition of `DTYPE` to `ctypedef np.int_t DTYPE` (i.e. replace `np.int` with `np.int_t` in the `ctypedef`). – Warren Weckesser Apr 23 '13 at 19:29