本文整理汇总了C++中dynd::ndt::type::get_dtype方法的典型用法代码示例。如果您正苦于以下问题:C++ type::get_dtype方法的具体用法?C++ type::get_dtype怎么用?C++ type::get_dtype使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类dynd::ndt::type
的用法示例。
在下文中一共展示了type::get_dtype方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: broadcast_as_scalar
bool pydynd::broadcast_as_scalar(const dynd::ndt::type &tp, PyObject *obj)
{
intptr_t obj_ndim = 0;
// Estimate the number of dimensions in ``obj`` by repeatedly indexing
// along zero
pyobject_ownref v(obj);
Py_INCREF(v);
for (;;) {
// Don't treat these types as sequences
if (PyDict_Check(v)) {
if (tp.get_dtype().get_kind() == struct_kind) {
// If the object to assign to a dynd struct ends in a dict, apply
// the dict as the struct's value
return (tp.get_ndim() > obj_ndim);
}
break;
}
else if (PyUnicode_Check(v) || PyBytes_Check(v)) {
break;
}
PyObject *iter = PyObject_GetIter(v);
if (iter != NULL) {
++obj_ndim;
if (iter == v.get()) {
// This was already an iterator, don't do any broadcasting,
// because we have no visibility into it.
Py_DECREF(iter);
return false;
}
else {
pyobject_ownref iter_owner(iter);
PyObject *item = PyIter_Next(iter);
if (item == NULL) {
if (PyErr_ExceptionMatches(PyExc_StopIteration)) {
PyErr_Clear();
break;
}
else {
throw exception();
}
}
else {
v.reset(item);
}
}
}
else {
PyErr_Clear();
break;
}
}
return (get_leading_dim_count(tp) > obj_ndim);
}
示例2: get_leading_dim_count
/**
* Gets the number of dimensions at index 0, including tuple
* and struct as dimensions.
*/
static intptr_t get_leading_dim_count(const dynd::ndt::type &tp)
{
intptr_t ndim = tp.get_ndim();
if (ndim) {
return ndim + get_leading_dim_count(tp.get_dtype());
}
else if (tp.get_kind() == expr_kind) {
return get_leading_dim_count(tp.value_type());
}
else if (tp.get_kind() == tuple_kind || tp.get_kind() == struct_kind) {
if (tp.extended<ndt::tuple_type>()->get_field_count() == 0) {
return 1;
}
else {
return 1 + get_leading_dim_count(
tp.extended<ndt::tuple_type>()->get_field_type(0));
}
}
else {
return 0;
}
}