Сбой Jupyter из-за использования PyArray_ENABLEFLAGS

Возможно, вам лучше с конфигурацией, которая предоставляет сервисный компонент в зависимости от результата вашего запроса?

@Configuration
public class ServiceProvider {
  @Autowired  private SystemSettingRepository settingsRepo;

  @Bean
  public MyInterface myIneterface(){
      boolean cmis = settingsRepo.useCMIS() ;
      if(cmis){
        return xMyService();
      } else {
        return yMyService();
      }
  }

  private XMyService xMyService(){
      return new XMyService();
  }

  private YMyService yMyService(){
      return new YMyService();
  }

}
0
задан pdzx 19 January 2019 в 23:53
поделиться

2 ответа

Хорошо, благодаря вам, все готово, все, что мне нужно было сделать, это изменить файл .pyx следующим образом:

cimport c_test
import numpy as np
cimport numpy as np
from libc.stdlib cimport free

np.import_array()

ctypedef void (*PyCapsule_Destructor)(void*)

cdef extern from "numpy/arrayobject.h":
    void* PyCapsule_GetPointer(void* capsule, const char *name)
    void* PyCapsule_New(void *pointer, const char *name, PyCapsule_Destructor destructor)
    int PyArray_SetBaseObject(np.ndarray arr, void* obj)


cdef void capsule_cleanup(void* capsule):
    cdef void *memory = PyCapsule_GetPointer(capsule, NULL)
    free(memory)

def test(n):
  cdef np.ndarray arr
  cdef int nd = 1
  cdef np.npy_intp shape[1]
  shape[0] = <np.npy_intp> n
  cdef double *data = c_test.test1(n)
  arr = np.PyArray_SimpleNewFromData(nd, shape, np.NPY_DOUBLE, data)
  cdef void* capsule = PyCapsule_New(data, NULL, capsule_cleanup)
  PyArray_SetBaseObject( arr, capsule)
  return(arr)
0
ответ дан pdzx 19 January 2019 в 23:53
поделиться

Как объясняется в проблеме Github , которую вы связали, NPY_OWNDATA безопасно использовать только с памятью, выделенной через тот же распределитель, который использует сама NumPy. К этому распределителю можно получить доступ через функции PyDataMem_* . Если ваша память не исходит от этого распределителя, вы не можете использовать NPY_OWNDATA.

Не пытайтесь заставить массив принять владение произвольной памятью, которую вы ему даете. Вместо этого установите base массива для объекта, который знает, как выполнить правильную очистку, используя PyArray_SetBaseObject . Капсула может быть удобным объектом для использования.

0
ответ дан user2357112 19 January 2019 в 23:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: