Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
MegEngine 天元
MegEngine
提交
97d12b3e
MegEngine
项目概览
MegEngine 天元
/
MegEngine
1 年多 前同步成功
通知
403
Star
4705
Fork
582
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
MegEngine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
97d12b3e
编写于
12月 19, 2020
作者:
M
Megvii Engine Team
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
refactor(mge/imperative): fix compilation for Python 3.5
GitOrigin-RevId: edd49d01716a91231802afb601da1ffd3ce251a5
上级
87f4b46e
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
45 addition
and
13 deletion
+45
-13
imperative/python/src/numpy_dtypes.cpp
imperative/python/src/numpy_dtypes.cpp
+21
-6
imperative/python/src/tensor.cpp
imperative/python/src/tensor.cpp
+24
-7
未找到文件。
imperative/python/src/numpy_dtypes.cpp
浏览文件 @
97d12b3e
...
...
@@ -117,6 +117,12 @@ struct _wrap {
}
}();
static
PyObject
*
impl_py35
(
PyObject
*
self
,
PyObject
*
args
)
{
auto
*
arr
=
&
PyTuple_GET_ITEM
(
args
,
0
);
auto
size
=
PyTuple_GET_SIZE
(
args
);
return
impl
(
self
,
arr
,
size
);
}
static
PyObject
*
impl
(
PyObject
*
self
,
PyObject
*
const
*
args
,
size_t
nargs
)
{
if
(
nargs
!=
n_args
)
{
PyErr_Format
(
PyExc_ValueError
,
"expected %lu arguments"
,
n_args
);
...
...
@@ -159,14 +165,21 @@ struct _wrap {
}
// anonymous namespace
#ifdef METH_FASTCALL
#define MGE_PY_INTERFACE(NAME, FUN) \
{ #NAME, (PyCFunction)_wrap < &(FUN) > ::impl, METH_FASTCALL, nullptr }
#else
#define MGE_PY_INTERFACE(NAME, FUN) \
{ #NAME, (PyCFunction)_wrap < &(FUN) > ::impl_py35, METH_VARARGS, nullptr }
#endif
void
init_dtypes
(
py
::
module
m
)
{
static
PyMethodDef
method_defs
[]
=
{
{
"is_quantize"
,
(
PyCFunction
)
_wrap
<&
_is_quantize
>::
impl
,
METH_FASTCALL
,
nullptr
},
{
"get_scale"
,
(
PyCFunction
)
_wrap
<&
_get_scale
>::
impl
,
METH_FASTCALL
,
nullptr
},
{
"get_zero_point"
,
(
PyCFunction
)
_wrap
<&
_get_zero_point
>::
impl
,
METH_FASTCALL
,
nullptr
},
{
"is_dtype_equal"
,
(
PyCFunction
)
_wrap
<&
_is_dtype_equal
>::
impl
,
METH_FASTCALL
,
nullptr
},
{
nullptr
,
nullptr
,
0
,
nullptr
}
};
MGE_PY_INTERFACE
(
is_quantize
,
_is_quantize
),
MGE_PY_INTERFACE
(
get_scale
,
_get_scale
),
MGE_PY_INTERFACE
(
get_zero_point
,
_get_zero_point
),
MGE_PY_INTERFACE
(
is_dtype_equal
,
_is_dtype_equal
),
{
nullptr
,
nullptr
,
0
,
nullptr
}};
for
(
auto
&&
def
:
method_defs
)
{
if
(
def
.
ml_meth
!=
nullptr
)
{
auto
*
func
=
PyCFunction_NewEx
(
&
def
,
nullptr
,
nullptr
);
...
...
@@ -176,4 +189,6 @@ void init_dtypes(py::module m) {
}
}
#undef MGE_PY_INTERFACE
}
// namespace mgb
imperative/python/src/tensor.cpp
浏览文件 @
97d12b3e
...
...
@@ -404,8 +404,6 @@ void TensorWrapper::setscalar() {
}
PyMethodDef
apply_def
{
"apply"
,
(
PyCFunction
)
py_apply
,
METH_FASTCALL
,
nullptr
};
struct
TensorWeakRef
{
std
::
weak_ptr
<
Tensor
>
wptr
;
...
...
@@ -612,6 +610,24 @@ PyObject* get_device(PyObject* self, PyObject*const* args, size_t nargs) {
}
}
#ifdef METH_FASTCALL
#define MGE_PY_INTERFACE(NAME, FUNC) \
{ #NAME, (PyCFunction)FUNC, METH_FASTCALL, nullptr }
#else
#define WRAP_FUNC_PY35(FUNC) \
PyObject* py35_##FUNC(PyObject* self, PyObject* args) { \
auto* arr = &PyTuple_GET_ITEM(args, 0); \
auto size = PyTuple_GET_SIZE(args); \
return FUNC(self, arr, size); \
}
WRAP_FUNC_PY35
(
py_apply
);
WRAP_FUNC_PY35
(
dtype_promotion
);
WRAP_FUNC_PY35
(
get_device
);
#undef WRAP_FUNC_PY35
#define MGE_PY_INTERFACE(NAME, FUNC) \
{ #NAME, (PyCFunction)py35_##FUNC, METH_VARARGS, nullptr }
#endif
void
init_tensor
(
py
::
module
m
)
{
interpreter_for_py
=
interpreter
::
Interpreter
::
inst
().
create_channel
();
...
...
@@ -643,11 +659,10 @@ void init_tensor(py::module m) {
.
def
(
"__call__"
,
&
TensorWeakRef
::
operator
());
static
PyMethodDef
method_defs
[]
=
{
{
"apply"
,
(
PyCFunction
)
py_apply
,
METH_FASTCALL
,
nullptr
},
{
"dtype_promotion"
,
(
PyCFunction
)
dtype_promotion
,
METH_FASTCALL
,
nullptr
},
{
"get_device"
,
(
PyCFunction
)
get_device
,
METH_FASTCALL
,
nullptr
},
{
nullptr
,
nullptr
,
0
,
nullptr
}
};
MGE_PY_INTERFACE
(
apply
,
py_apply
),
MGE_PY_INTERFACE
(
dtype_promotion
,
dtype_promotion
),
MGE_PY_INTERFACE
(
get_device
,
get_device
),
{
nullptr
,
nullptr
,
0
,
nullptr
}};
for
(
auto
&&
def
:
method_defs
)
{
if
(
def
.
ml_meth
!=
nullptr
)
{
auto
*
func
=
PyCFunction_NewEx
(
&
def
,
nullptr
,
nullptr
);
...
...
@@ -698,4 +713,6 @@ void init_tensor(py::module m) {
}
#undef MGE_PY_INTERFACE
}
// namespace mgb::imperative::python
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录