title: Cython Numpy warning about NPY_NO_DEPRECATED_API when using MemoryView
body: <p>I am converting a Cython memoryview to a numpy array (to be able to use it in pure Python code):</p>
  
  <pre><code>from libc.stdlib cimport realloc
  cimport numpy as np
  
  DTYPE = np.float64
  ctypedef np.float64_t DTYPE_t
  
  cpdef np.ndarray[DTYPE_t] compute(DTYPE_t[:,::1] data):
      cdef unsigned int Nchannels = data.shape[0]
      cdef unsigned int Ndata = data.shape[1]
      cdef DTYPE_t* output = NULL
      cdef DTYPE_t[::1] mv
  
      output = &lt;DTYPE_t*&gt;realloc(output, Ndata*sizeof(output))
      if not output:
          raise MemoryError()
      mv = &lt;DTYPE_t[:Ndata]&gt;output
      mv[10:Ndata-10] = 0.0
      # various calculations...
      return np.asarray(mv, dtype=DTYPE, order='C')
  </code></pre>
  
  <p>It compiles, but the compiler gives the following warning:</p>
  
  <pre><code>/Users/vlad/anaconda/lib/python2.7/site-packages/numpy/core/include
  /nump/npy_1_7_deprecated_api.h:15:2: warning:
  "Using deprecated NumPy API, disable it by #defining NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION" [-W#warnings]
  </code></pre>
  
  <p>I added the suggested directive in setup.py:</p>
  
  <pre><code>from distutils.core import setup, Extension
  from Cython.Build import cythonize
  import numpy
  
  filename = 'agents3.pyx'
  
  agents_module = Extension(
      'Agents',
      sources = [filename],
      define_macros = [('NPY_NO_DEPRECATED_API', 'NPY_1_7_API_VERSION')],
      include_dirs = [numpy.get_include()],
  )
  
  setup (name = 'Agents',
      ext_modules = cythonize(agents_module)
  )
  </code></pre>
  
  <p>Now it wouldn't compile, it says:</p>
  
  <pre><code>Vlads-MacBook-Pro:program vlad$ python setup.py build_ext --inplace
  Compiling agents3.pyx because it changed.
  Cythonizing agents3.pyx
  running build_ext
  building 'Agents' extension
  gcc -fno-strict-aliasing -I/Users/vlad/anaconda/include -arch x86_64 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -DNPY_NO_DEPRECATED_API=NPY_1_7_API_VERSION -I/Users/vlad/anaconda/lib/python2.7/site-packages/numpy/core/include -I/Users/vlad/anaconda/include/python2.7 -c agents3.c -o build/temp.macosx-10.5-x86_64-2.7/agents3.o
  agents3.c:2273:52: error: use of undeclared identifier 'NPY_C_CONTIGUOUS'
      __pyx_t_2 = ((!(PyArray_CHKFLAGS(__pyx_v_self, NPY_C_CONTIGUOUS) != 0)) != 0);
                                                     ^
  agents3.c:2311:52: error: use of undeclared identifier 'NPY_F_CONTIGUOUS'
      __pyx_t_1 = ((!(PyArray_CHKFLAGS(__pyx_v_self, NPY_F_CONTIGUOUS) != 0)) != 0);
                                                     ^
  agents3.c:2474:42: error: no member named 'descr' in 'struct tagPyArrayObject'
    __pyx_t_4 = ((PyObject *)__pyx_v_self-&gt;descr);
                             ~~~~~~~~~~~~  ^
  agents3.c:4026:27: error: no member named 'base' in 'struct tagPyArrayObject'
    Py_XDECREF(__pyx_v_arr-&gt;base);
               ~~~~~~~~~~~  ^
  /Users/vlad/anaconda/include/python2.7/object.h:823:34: note: expanded from macro 'Py_XDECREF'
  #define Py_XDECREF(op) do { if ((op) == NULL) ; else Py_DECREF(op); } while (0)
                                   ^
  agents3.c:4026:27: error: no member named 'base' in 'struct tagPyArrayObject'
    Py_XDECREF(__pyx_v_arr-&gt;base);
               ~~~~~~~~~~~  ^
  /Users/vlad/anaconda/include/python2.7/object.h:823:64: note: expanded from macro 'Py_XDECREF'
  #define Py_XDECREF(op) do { if ((op) == NULL) ; else Py_DECREF(op); } while (0)
                                                                 ^
  /Users/vlad/anaconda/include/python2.7/object.h:772:24: note: expanded from macro 'Py_DECREF'
          --((PyObject*)(op))-&gt;ob_refcnt != 0)            \
                         ^
  agents3.c:4026:27: error: no member named 'base' in 'struct tagPyArrayObject'
    Py_XDECREF(__pyx_v_arr-&gt;base);
               ~~~~~~~~~~~  ^
  /Users/vlad/anaconda/include/python2.7/object.h:823:64: note: expanded from macro 'Py_XDECREF'
  #define Py_XDECREF(op) do { if ((op) == NULL) ; else Py_DECREF(op); } while (0)
                                                                 ^
  /Users/vlad/anaconda/include/python2.7/object.h:775:34: note: expanded from macro 'Py_DECREF'
          _Py_Dealloc((PyObject *)(op));                  \
                                   ^
  /Users/vlad/anaconda/include/python2.7/object.h:762:15: note: expanded from macro '_Py_Dealloc'
      (*Py_TYPE(op)-&gt;tp_dealloc)((PyObject *)(op)))
                ^
  /Users/vlad/anaconda/include/python2.7/object.h:115:47: note: expanded from macro 'Py_TYPE'
  #define Py_TYPE(ob)             (((PyObject*)(ob))-&gt;ob_type)
                                                ^
  agents3.c:4026:27: error: no member named 'base' in 'struct tagPyArrayObject'
    Py_XDECREF(__pyx_v_arr-&gt;base);
               ~~~~~~~~~~~  ^
  /Users/vlad/anaconda/include/python2.7/object.h:823:64: note: expanded from macro 'Py_XDECREF'
  #define Py_XDECREF(op) do { if ((op) == NULL) ; else Py_DECREF(op); } while (0)
                                                                 ^
  /Users/vlad/anaconda/include/python2.7/object.h:775:34: note: expanded from macro 'Py_DECREF'
          _Py_Dealloc((PyObject *)(op));                  \
                                   ^
  /Users/vlad/anaconda/include/python2.7/object.h:762:45: note: expanded from macro '_Py_Dealloc'
      (*Py_TYPE(op)-&gt;tp_dealloc)((PyObject *)(op)))
                                              ^
  agents3.c:4035:16: error: no member named 'base' in 'struct tagPyArrayObject'
    __pyx_v_arr-&gt;base = __pyx_v_baseptr;
    ~~~~~~~~~~~  ^
  agents3.c:4070:30: error: no member named 'base' in 'struct tagPyArrayObject'
    __pyx_t_1 = ((__pyx_v_arr-&gt;base == NULL) != 0);
                  ~~~~~~~~~~~  ^
  agents3.c:4093:44: error: no member named 'base' in 'struct tagPyArrayObject'
      __Pyx_INCREF(((PyObject *)__pyx_v_arr-&gt;base));
                                ~~~~~~~~~~~  ^
  agents3.c:1065:37: note: expanded from macro '__Pyx_INCREF'
    #define __Pyx_INCREF(r) Py_INCREF(r)
                                      ^
  /Users/vlad/anaconda/include/python2.7/object.h:767:18: note: expanded from macro 'Py_INCREF'
      ((PyObject*)(op))-&gt;ob_refcnt++)
                   ^
  agents3.c:4094:41: error: no member named 'base' in 'struct tagPyArrayObject'
      __pyx_r = ((PyObject *)__pyx_v_arr-&gt;base);
                             ~~~~~~~~~~~  ^
  11 errors generated.
  error: command 'gcc' failed with exit status 1
  Vlads-MacBook-Pro:program vlad$ 
  </code></pre>
  
  <p>What should I do? Is it OK to leave the deprecated API call as it is? It tries to acces the <code>base</code> field -- but I am not doing it, it's Cython's fault. I simply converted a memoryview to a numpy array. Is there another, cleaner/safer way of doing it?</p>