Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
MegEngine 天元
MegEngine
提交
9fb8444d
MegEngine
项目概览
MegEngine 天元
/
MegEngine
大约 1 年 前同步成功
通知
399
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看板
提交
9fb8444d
编写于
1月 20, 2021
作者:
M
Megvii Engine Team
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix(imperative): catch python exception in c++
GitOrigin-RevId: 16a2abfdad35c52d50f34783d29c2d503ab29568
上级
e3a3e0cd
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
10 addition
and
9 deletion
+10
-9
imperative/python/src/tensor.cpp
imperative/python/src/tensor.cpp
+6
-4
imperative/python/src/trace.cpp
imperative/python/src/trace.cpp
+4
-5
未找到文件。
imperative/python/src/tensor.cpp
浏览文件 @
9fb8444d
...
...
@@ -240,10 +240,10 @@ TensorWrapper::TensorWrapper(PyObject* args, PyObject* kwargs) {
pyf
=
cpp_apply_const_with_tracing
;
}
auto
ret
=
py
::
reinterpret_steal
<
py
::
object
>
(
PyObject_Call
(
pyf
,
tup
.
ptr
(),
nullptr
)
);
auto
py_
ret
=
py
::
reinterpret_borrow
<
py
::
list
>
(
ret
);
if
(
auto
*
t
=
try_cast
(
py_
re
t
[
0
].
ptr
()))
{
auto
py_ret
=
PyObject_Call
(
pyf
,
tup
.
ptr
(),
nullptr
);
if
(
!
py_ret
)
throw
py
::
error_already_set
(
);
auto
py_
list
=
py
::
reinterpret_steal
<
py
::
list
>
(
py_
ret
);
if
(
auto
*
t
=
try_cast
(
py_
lis
t
[
0
].
ptr
()))
{
m_tensor
=
t
->
m_tensor
;
}
return
;
...
...
@@ -389,6 +389,7 @@ PyObject* TensorWrapper::device() {
PyObject
*
TensorWrapper
::
numpy
()
{
if
(
m_tensor
->
m_trace_info
.
compiled_info
!=
nullptr
)
{
PyObject
*
np_val
=
PyObject_CallMethod
(
m_tensor
->
m_trace_info
.
compiled_info
,
"numpy"
,
nullptr
);
if
(
!
np_val
)
throw
py
::
error_already_set
();
if
(
np_val
==
Py_None
)
{
throw
TraceReadError
(
"value of this tensor is not read in trace"
);
}
...
...
@@ -478,6 +479,7 @@ PyObject* TensorWrapper::detach() {
PyObject
*
TensorWrapper
::
_dev_tensor
(){
if
(
m_tensor
->
m_trace_info
.
compiled_info
!=
nullptr
)
{
auto
*
dev_tensor
=
PyObject_CallMethod
(
m_tensor
->
m_trace_info
.
compiled_info
,
"_dev_tensor"
,
nullptr
);
if
(
!
dev_tensor
)
throw
py
::
error_already_set
();
if
(
dev_tensor
==
Py_None
)
{
throw
TraceReadError
(
"raw data of this tensor is not read in trace"
);
}
...
...
imperative/python/src/trace.cpp
浏览文件 @
9fb8444d
...
...
@@ -31,9 +31,7 @@ apply_result_t apply_trace(ApplyContext& ctx) {
}
py
::
object
ret
=
py
::
reinterpret_steal
<
py
::
object
>
(
PyObject_Call
(
cpp_apply_backward_varnode
,
args
.
ptr
(),
nullptr
));
if
(
!
ret
)
{
throw
py
::
value_error
(
"invalid py object call"
);
}
if
(
!
ret
)
throw
py
::
error_already_set
();
// assumption: python function always returns PyList
auto
tup
=
py
::
reinterpret_borrow
<
py
::
list
>
(
ret
);
...
...
@@ -58,8 +56,9 @@ apply_result_t apply_trace(ApplyContext& ctx) {
for
(
size_t
i
=
0
;
i
<
ctx
.
nargs
;
i
++
)
{
args
[
i
+
1
]
=
TensorWrapper
::
make
(
ctx
.
args
[
i
]
->
shared_from_this
());
}
auto
ret
=
py
::
reinterpret_steal
<
py
::
object
>
(
PyObject_Call
(
pyf
,
args
.
ptr
(),
nullptr
));
auto
pyout
=
PyObject_Call
(
pyf
,
args
.
ptr
(),
nullptr
);
if
(
!
pyout
)
throw
py
::
error_already_set
();
auto
ret
=
py
::
reinterpret_steal
<
py
::
object
>
(
pyout
);
// assumption: python function always returns PyList
auto
tup
=
py
::
reinterpret_borrow
<
py
::
list
>
(
ret
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录