|
|
|
@ -1038,7 +1038,26 @@ class Block(object):
|
|
|
|
|
global_block = self.program.global_block()
|
|
|
|
|
param = Parameter(global_block, *args, **kwargs)
|
|
|
|
|
if 'initializer' in kwargs:
|
|
|
|
|
kwargs['initializer'](param, self)
|
|
|
|
|
|
|
|
|
|
def _is_inited_by(block, var):
|
|
|
|
|
init_ops = []
|
|
|
|
|
for op in block.ops:
|
|
|
|
|
if var.name in op.output_arg_names:
|
|
|
|
|
init_ops.append(op)
|
|
|
|
|
return init_ops
|
|
|
|
|
|
|
|
|
|
initializer = kwargs['initializer']
|
|
|
|
|
init_ops = _is_inited_by(global_block, param)
|
|
|
|
|
init_ops_len = len(init_ops)
|
|
|
|
|
if init_ops_len > 1:
|
|
|
|
|
raise RuntimeError("param " + param.name +
|
|
|
|
|
" is inited by multiple init ops " + str(
|
|
|
|
|
init_ops))
|
|
|
|
|
elif init_ops_len == 1:
|
|
|
|
|
#TODO already inited, do nothing, should log a warning
|
|
|
|
|
pass
|
|
|
|
|
else:
|
|
|
|
|
initializer(param, self)
|
|
|
|
|
return param
|
|
|
|
|
|
|
|
|
|
def append_op(self, *args, **kwargs):
|
|
|
|
|