diff --git a/paddle/fluid/API.spec b/paddle/fluid/API.spec index 70c6e3419217609ab4e48a2f1989f3ac7dceaa0d..764a302d1d73850b7d75171ba91de75c86033ba7 100644 --- a/paddle/fluid/API.spec +++ b/paddle/fluid/API.spec @@ -10,7 +10,7 @@ paddle.fluid.Program.to_string (ArgSpec(args=['self', 'throw_on_error', 'with_de paddle.fluid.default_startup_program (ArgSpec(args=[], varargs=None, keywords=None, defaults=None), ('document', 'f53890b2fb8c0642b6047e4fee2d6d58')) paddle.fluid.default_main_program (ArgSpec(args=[], varargs=None, keywords=None, defaults=None), ('document', '853718df675e59aea7104f3d61bbf11d')) paddle.fluid.program_guard (ArgSpec(args=['main_program', 'startup_program'], varargs=None, keywords=None, defaults=(None,)), ('document', '78fb5c7f70ef76bcf4a1862c3f6b8191')) -paddle.fluid.name_scope (ArgSpec(args=['prefix'], varargs=None, keywords=None, defaults=(None,)), ('document', '917d313881ff990de5fb18d98a9c7b42')) +paddle.fluid.name_scope (ArgSpec(args=['prefix'], varargs=None, keywords=None, defaults=(None,)), ('document', '907a5f877206079d8e67ae69b06bb3ba')) paddle.fluid.cuda_places (ArgSpec(args=['device_ids'], varargs=None, keywords=None, defaults=(None,)), ('document', 'ab9bd2079536114aa7c1488a489ee87f')) paddle.fluid.cpu_places (ArgSpec(args=['device_count'], varargs=None, keywords=None, defaults=(None,)), ('document', 'a7352a3dd39308fde4fbbf6421a4193d')) paddle.fluid.cuda_pinned_places (ArgSpec(args=['device_count'], varargs=None, keywords=None, defaults=(None,)), ('document', '567ac29567716fd8e7432b533337d529')) diff --git a/python/paddle/fluid/framework.py b/python/paddle/fluid/framework.py index 140bcfaa099b721eee3bc2356dadf0194c6a1376..52a8dc61095ed06e1de375d957d13a82e58075a2 100644 --- a/python/paddle/fluid/framework.py +++ b/python/paddle/fluid/framework.py @@ -298,27 +298,46 @@ def name_scope(prefix=None): """ Generate hierarchical name prefix for the operators. - Note: This should only used for debugging and visualization purpose. - Don't use it for serious analysis such as graph/program transformations. + Note: + This should only used for debugging and visualization purpose. + Don't use it for serious analysis such as graph/program transformations. Args: - prefix(str): prefix. + prefix(str, optional): prefix. Default is none. Examples: .. code-block:: python import paddle.fluid as fluid with fluid.name_scope("s1"): - a = fluid.layers.data(name='data', shape=[1], dtype='int32') - b = a + 1 - with fluid.name_scope("s2"): - c = b * 1 - with fluid.name_scope("s3"): - d = c / 1 + a = fluid.data(name='data', shape=[None, 1], dtype='int32') + b = a + 1 + with fluid.name_scope("s2"): + c = b * 1 + with fluid.name_scope("s3"): + d = c / 1 with fluid.name_scope("s1"): - f = fluid.layers.pow(d, 2.0) + f = fluid.layers.pow(d, 2.0) with fluid.name_scope("s4"): - g = f - 1 + g = f - 1 + + # Op are created in the default main program. + for op in fluid.default_main_program().block(0).ops: + # elementwise_add is created in /s1/ + if op.type == 'elementwise_add': + assert op.desc.attr("op_namescope") == '/s1/' + # elementwise_mul is created in '/s1/s2' + elif op.type == 'elementwise_mul': + assert op.desc.attr("op_namescope") == '/s1/s2/' + # elementwise_div is created in '/s1/s3' + elif op.type == 'elementwise_div': + assert op.desc.attr("op_namescope") == '/s1/s3/' + # elementwise_sum is created in '/s4' + elif op.type == 'elementwise_sub': + assert op.desc.attr("op_namescope") == '/s4/' + # pow is created in /s1_1/ + elif op.type == 'pow': + assert op.desc.attr("op_namescope") == '/s1_1/' """ # TODO(panyx0718): Only [0-9a-z]. # in dygraph we don't need namescope since it will cause mem leak