Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
机器未来
Paddle
提交
4636d136
P
Paddle
项目概览
机器未来
/
Paddle
与 Fork 源项目一致
Fork自
PaddlePaddle / Paddle
通知
1
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
Paddle
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
未验证
提交
4636d136
编写于
4月 09, 2021
作者:
A
Aurelius84
提交者:
GitHub
4月 09, 2021
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[Dy2Stat] Fix undefined var used in For (#32153)
* fix undefind var in For * fix code style
上级
95122ebe
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
33 addition
and
2 deletion
+33
-2
python/paddle/fluid/dygraph/dygraph_to_static/ifelse_transformer.py
...dle/fluid/dygraph/dygraph_to_static/ifelse_transformer.py
+10
-2
python/paddle/fluid/tests/unittests/dygraph_to_static/test_ifelse.py
...le/fluid/tests/unittests/dygraph_to_static/test_ifelse.py
+23
-0
未找到文件。
python/paddle/fluid/dygraph/dygraph_to_static/ifelse_transformer.py
浏览文件 @
4636d136
...
...
@@ -238,11 +238,16 @@ class NameVisitor(gast.NodeVisitor):
return
new_name_ids
def
_is_call_func_name_node
(
self
,
node
):
white_func_names
=
set
([
'append'
,
'extend'
])
if
len
(
self
.
ancestor_nodes
)
>
1
:
assert
self
.
ancestor_nodes
[
-
1
]
==
node
parent_node
=
self
.
ancestor_nodes
[
-
2
]
if
isinstance
(
parent_node
,
gast
.
Call
)
and
parent_node
.
func
==
node
:
return
True
# e.g: var_list.append(elem), var_list is also a name_id.
should_skip
=
isinstance
(
node
,
gast
.
Attribute
)
and
node
.
attr
in
white_func_names
if
not
should_skip
:
return
True
return
False
def
_update_name_ids
(
self
,
new_name_ids
):
...
...
@@ -398,10 +403,13 @@ def parse_cond_return(parent_vars_dict, if_vars_dict, else_vars_dict,
])
def
_vars_loaded_before_store
(
ids_dict
):
"""
gast.Param is also a kind of `load` semantic.
"""
new_dict
=
defaultdict
(
list
)
for
k
,
ctxs
in
six
.
iteritems
(
ids_dict
):
for
ctx
in
ctxs
:
if
isinstance
(
ctx
,
gast
.
Load
):
if
isinstance
(
ctx
,
(
gast
.
Load
,
gast
.
Param
)
):
new_dict
[
k
].
append
(
ctx
)
elif
isinstance
(
ctx
,
gast
.
Store
):
break
...
...
python/paddle/fluid/tests/unittests/dygraph_to_static/test_ifelse.py
浏览文件 @
4636d136
...
...
@@ -342,5 +342,28 @@ class TestDiffModeNet2(TestDiffModeNet):
self
.
Net
=
DiffModeNet2
class
TestNewVarCreateInOneBranch
(
unittest
.
TestCase
):
def
test_var_used_in_another_for
(
self
):
def
case_func
(
training
):
# targets and targets_list is dynamically defined by training
if
training
:
targets
=
[
1
,
2
,
3
]
targets_list
=
[
targets
]
num_step
=
3
for
i
in
range
(
num_step
):
if
i
>
0
:
rois
,
rosi_num
=
1
,
2
# targets is in loop_vars.
if
training
:
ros
,
rosi_num
,
targets
=
-
1
,
-
2
,
[
-
1
,
-
2
,
-
3
]
targets_list
.
append
(
targets
)
return
rosi_num
self
.
assertEqual
(
paddle
.
jit
.
to_static
(
case_func
)(
False
),
2
)
self
.
assertEqual
(
paddle
.
jit
.
to_static
(
case_func
)(
True
),
-
2
)
if
__name__
==
'__main__'
:
unittest
.
main
()
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录