Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
机器未来
Paddle
提交
53f85df1
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看板
体验新版 GitCode,发现更多精彩内容 >>
提交
53f85df1
编写于
8月 04, 2017
作者:
Y
Yu Yang
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Start doing `python.framework.operator`
上级
636d46a1
变更
1
显示空白变更内容
内联
并排
Showing
1 changed file
with
42 addition
and
26 deletion
+42
-26
python/paddle/v2/framework/operator.py
python/paddle/v2/framework/operator.py
+42
-26
未找到文件。
python/paddle/v2/framework/
create_op_creation_methods
.py
→
python/paddle/v2/framework/
operator
.py
浏览文件 @
53f85df1
...
@@ -216,38 +216,54 @@ def create_op_creation_method(op_proto):
...
@@ -216,38 +216,54 @@ def create_op_creation_method(op_proto):
opdesc
=
method
(
*
args
,
**
kwargs
)
opdesc
=
method
(
*
args
,
**
kwargs
)
return
core
.
Operator
.
create
(
opdesc
.
SerializeToString
())
return
core
.
Operator
.
create
(
opdesc
.
SerializeToString
())
__impl__
.
__doc__
=
get_docstring_from_op_proto
(
op_proto
)
return
{
__impl__
.
all_input_args
=
[
var
.
name
for
var
in
op_proto
.
inputs
]
'method'
:
__impl__
,
__impl__
.
all_output_args
=
[
var
.
name
for
var
in
op_proto
.
outputs
]
'name'
:
op_proto
.
type
,
__impl__
.
all_attr_args
=
[
attr
.
name
for
attr
in
op_proto
.
attrs
]
'all_inputs'
:
[
var
.
name
for
var
in
op_proto
.
inputs
],
__impl__
.
all_not_temp_output_args
=
[
'all_outputs'
:
[
var
.
name
for
var
in
op_proto
.
outputs
],
var
.
name
for
var
in
op_proto
.
outputs
if
not
var
.
temporary
'all_attrs'
:
[
attr
.
name
for
attr
in
op_proto
.
attrs
],
]
'all_no_temp_outputs'
:
[
var
.
name
for
var
in
op_proto
.
outputs
if
not
var
.
temporary
]
return
__impl__
}
class
OperatorFactory
(
object
):
def
__init__
(
self
):
self
.
op_methods
=
dict
()
for
op_proto
in
get_all_op_protos
():
method
=
create_op_creation_method
(
op_proto
)
self
.
op_methods
[
method
.
name
]
=
method
def
__call__
(
self
,
*
args
,
**
kwargs
):
if
'type'
in
kwargs
:
if
len
(
args
)
!=
0
:
raise
ValueError
(
"All Paddle argument should be key-word "
"argument except type"
)
t
=
kwargs
.
pop
(
'type'
)
else
:
if
len
(
args
)
!=
1
:
raise
ValueError
(
"All Paddle argument should be key-word "
"argument except type"
)
t
=
args
[
0
]
class
OpCreationsHolder
(
object
):
return
self
.
get_op_creation_info
(
t
)[
'method'
](
**
kwargs
)
"""
A object will holds all op creation methods.
Use `op_creations.xxx_op` to access them.
def
get_op_creation_info
(
self
,
t
):
"""
if
t
not
in
self
.
op_methods
:
pass
raise
ValueError
(
"operator %s is not registered"
,
t
)
return
self
.
op_methods
.
get
(
t
)
def
get_op_input_names
(
self
,
type
):
return
self
.
get_op_creation_info
(
type
)[
'all_inputs'
]
op_creations
=
OpCreationsHolder
()
def
get_op_output_names
(
self
,
type
):
return
self
.
get_op_creation_info
(
type
)[
'all_outputs'
]
def
get_op_attr_names
(
self
,
type
):
return
self
.
get_op_creation_info
(
type
)[
'all_attrs'
]
def
__bootstrap__
():
def
get_op_no_temp_output_names
(
self
,
type
):
"""
return
self
.
get_op_creation_info
(
type
)[
'all_no_temp_outputs'
]
Bootstrap function for this module. It will dynamic create all op creation
methods in runtime.
"""
for
op_proto
in
get_all_op_protos
():
func
=
create_op_creation_method
(
op_proto
)
func
.
__name__
=
str
(
op_proto
.
type
)
setattr
(
op_creations
,
func
.
__name__
,
func
)
__bootstrap__
()
Operator
=
OperatorFactory
()
# Default global factory
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录