code: def ctypes2numpy(cptr, length, dtype):
      
      NUMPY_TO_CTYPES_MAPPING = {
          np.float32: ctypes.c_float,
          np.uint32: ctypes.c_uint,
      }
      if dtype not in NUMPY_TO_CTYPES_MAPPING:
          raise RuntimeError('Supported types: {}'.format(NUMPY_TO_CTYPES_MAPPING.keys()))
      ctype = NUMPY_TO_CTYPES_MAPPING[dtype]
      if not isinstance(cptr, ctypes.POINTER(ctype)):
          raise RuntimeError('expected {} pointer'.format(ctype))
      res = np.zeros(length, dtype=dtype)
      if not ctypes.memmove(res.ctypes.data, cptr, length * res.strides[0]):
          raise RuntimeError('memmove failed')
      return res
docs: Convert a ctypes pointer array to a numpy array.