TLDR:如何在纯cython中定义下面的is_float_object
函数?
我正在尝试了解pandas._libs
中.h
中定义并通过pandas/_libs/src/numpy_helper.h公开的一些函数。 AFAICT我的困惑与is_float_object
文件中对名称空间没有直觉有关。
以numpy_helper.h
为例。这在#include "Python.h"
#include "numpy/arrayobject.h"
#include "numpy/arrayscalars.h"
[...]
PANDAS_INLINE int is_float_object(PyObject* obj) {
return (PyFloat_Check(obj) || PyArray_IsScalar(obj, Floating));
}
中定义为
Floating
我无法弄清楚cdef extern from ...
在哪里被定义,它是如何进入命名空间的,以及我需要使用什么类型的PyArray_IsScalar
将它放入cython文件中。
#define PyArray_IsScalar(obj, cls) \
(PyObject_TypeCheck(obj, &Py##cls##ArrType_Type))
在pandas/_libs/src/util.pxd中定义:
# Cannot be supported due to ## ## in macro:
# bint PyArray_IsScalar(object, verbatim work)
pandas / _libs / src / numpy.pxd中有一条评论让我觉得“##”意味着一些特殊的魔法在起作用:
Floating
numpy_helper.h
在哪里定义?在不需要中间function detailsmodal(id)
{
var data = {"id":id};
jQuery.ajax({
url:<?php echo BASEURL;?>+'include/detailsmodal.php',
method: "post",
data: data,
success: function(data){
jQuery('body').append(data);
jQuery('#details-modal').modal('toggle');
},
error: function(){
alert("Error");
}
});
}
文件的情况下直接在cython中定义此函数需要什么?
答案 0 :(得分:2)
visible
是C预处理程序连接。 ##
不在任何名称空间中,而只是由C预处理程序在字符串连接中使用。部分Floating
由C预处理器翻译为:
PyArray_IsScalar(obj, Floating)
如果你想在Cython中定义(PyObject_TypeCheck(obj, &PyFloatingArrType_Type))
,你可以自己做这个连接:
is_float_object
(from cpython cimport PyFloat_Check, PyObject_TypeCheck, PyTypeObject
cdef extern from "numpy/arrayobject.h":
PyTypeObject PyFloatingArrType_Type
cdef int is_float_object(obj):
return (PyFloat_Check(obj) or (PyObject_TypeCheck(obj, &PyFloatingArrType_Type)));
有点猜测,但我认为它来自那里)