Cythonize error: failed with exit status 2. numpy and pyvista
Cythonize error: failed with exit status 2. numpy and pyvista
我想对以下代码进行 Cythonize,但收到错误消息。
import numpy as np
cimport numpy as np
import pyvista as pv
from mesh_funcs import *
cimport cython
from libcpp cimport bool
#import matplotlib.pyplot as plt
#Getting mesh points from pyvista unfortunately with a for loop
cdef class pv_cell:
def pv_grid_cell_data(mesh2,bool points_toggle=True,
bool centres_toggle=True,bool volumes_toggle=True, bool areas_toggle=True):
if areas_toggle==True:
points_toggle==True
if centres_toggle==True:
points_toggle==True
cdef np.ndarray gcp=np.zeros([mesh2.n_cells,8,3])
cdef np.ndarray gcc=np.zeros([mesh2.n_cells,3])
cdef np.ndarray gcv=np.zeros([mesh2.n_cells,3])
cdef np.ndarray grid_facets=np.array([[0,1,2,3], [0,1,5,4], [1,2,6,5], [7,6,2,3], [7,3,0,4], [4,5,6,7]])
cdef np.ndarray gca=np.zeros([mesh2.n_cells,6])
for n1 in range(0,mesh2.n_cells):
if points_toggle==True:
gcp[n1]=mesh2.extract_cells(n1).points
if centres_toggle==True:
gcc[n1]=[np.mean(gcp[n1][:,0]),np.mean(gcp[n1][:,1]),np.mean(gcp[n1][:,2])]
if volumes_toggle==True:
gcv[n1]=mesh2.extract_cells(n1).compute_cell_sizes()["Volume"]
if areas_toggle==True:
for n2 in range(0,6):
ph8=gcp[n1][grid_facets[n2]]
gca[n1,n2]=tri_area(ph8[[0,2,3]])+tri_area(ph8[[0,1,3]])
return gcp,gcc,gcv,gca
我的setup.py如下
from setuptools import setup
from Cython.Build import cythonize
import numpy
setup(
ext_modules=cythonize("pv_cell_funcs.pyx"),include_dirs=[numpy.get_include()])
我使用以下内容启动 setup.py。
python setup.py build_ext --inplace
pause
错误很长。它指出 bool 是一个未声明的标识符。然后它列出了很多语法错误。最后一行是
error: command 'C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Tools\MSVC\...x64\cl.exe' failed with exit status 2
因为你是 运行:
from libcpp cimport bool
您应该在 setup.py
中将默认语言 c
更改为 c++
:
from setuptools import setup
from Cython.Build import cythonize
import numpy
setup(
ext_modules=cythonize("pv_cell_funcs.pyx", language='c++'),
include_dirs=[numpy.get_include()])
请参阅 How do I declare an object of type bool? 在 cython 中使用 bool
。
我想对以下代码进行 Cythonize,但收到错误消息。
import numpy as np
cimport numpy as np
import pyvista as pv
from mesh_funcs import *
cimport cython
from libcpp cimport bool
#import matplotlib.pyplot as plt
#Getting mesh points from pyvista unfortunately with a for loop
cdef class pv_cell:
def pv_grid_cell_data(mesh2,bool points_toggle=True,
bool centres_toggle=True,bool volumes_toggle=True, bool areas_toggle=True):
if areas_toggle==True:
points_toggle==True
if centres_toggle==True:
points_toggle==True
cdef np.ndarray gcp=np.zeros([mesh2.n_cells,8,3])
cdef np.ndarray gcc=np.zeros([mesh2.n_cells,3])
cdef np.ndarray gcv=np.zeros([mesh2.n_cells,3])
cdef np.ndarray grid_facets=np.array([[0,1,2,3], [0,1,5,4], [1,2,6,5], [7,6,2,3], [7,3,0,4], [4,5,6,7]])
cdef np.ndarray gca=np.zeros([mesh2.n_cells,6])
for n1 in range(0,mesh2.n_cells):
if points_toggle==True:
gcp[n1]=mesh2.extract_cells(n1).points
if centres_toggle==True:
gcc[n1]=[np.mean(gcp[n1][:,0]),np.mean(gcp[n1][:,1]),np.mean(gcp[n1][:,2])]
if volumes_toggle==True:
gcv[n1]=mesh2.extract_cells(n1).compute_cell_sizes()["Volume"]
if areas_toggle==True:
for n2 in range(0,6):
ph8=gcp[n1][grid_facets[n2]]
gca[n1,n2]=tri_area(ph8[[0,2,3]])+tri_area(ph8[[0,1,3]])
return gcp,gcc,gcv,gca
我的setup.py如下
from setuptools import setup
from Cython.Build import cythonize
import numpy
setup(
ext_modules=cythonize("pv_cell_funcs.pyx"),include_dirs=[numpy.get_include()])
我使用以下内容启动 setup.py。
python setup.py build_ext --inplace
pause
错误很长。它指出 bool 是一个未声明的标识符。然后它列出了很多语法错误。最后一行是
error: command 'C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Tools\MSVC\...x64\cl.exe' failed with exit status 2
因为你是 运行:
from libcpp cimport bool
您应该在 setup.py
中将默认语言 c
更改为 c++
:
from setuptools import setup
from Cython.Build import cythonize
import numpy
setup(
ext_modules=cythonize("pv_cell_funcs.pyx", language='c++'),
include_dirs=[numpy.get_include()])
请参阅 How do I declare an object of type bool? 在 cython 中使用 bool
。