diff --git a/python/paddle/fluid/dygraph/dygraph_to_static/tensor_shape_transformer.py b/python/paddle/fluid/dygraph/dygraph_to_static/tensor_shape_transformer.py index 0bc167132e3ed76499457703f7263a60393d3af0..e1df2324889b440737740e443228d0fa69b47b51 100644 --- a/python/paddle/fluid/dygraph/dygraph_to_static/tensor_shape_transformer.py +++ b/python/paddle/fluid/dygraph/dygraph_to_static/tensor_shape_transformer.py @@ -282,6 +282,10 @@ class TensorShapeTransformer(gast.NodeTransformer): return False if isinstance(node, gast.Attribute): + # If node is `paddle.shape`, return False + if (node.attr == 'shape' and isinstance(node.value, gast.Name) and + node.value.id == 'paddle'): + return False if node.attr != 'shape': return False return True diff --git a/python/paddle/fluid/tests/unittests/dygraph_to_static/test_tensor_shape.py b/python/paddle/fluid/tests/unittests/dygraph_to_static/test_tensor_shape.py index f7cdb12a1ab673824dad137cbd2186c08b631d60..06d69daa75d1c755d3c9f2b111e31297c4905d8f 100644 --- a/python/paddle/fluid/tests/unittests/dygraph_to_static/test_tensor_shape.py +++ b/python/paddle/fluid/tests/unittests/dygraph_to_static/test_tensor_shape.py @@ -217,6 +217,12 @@ def dyfunc_change_shape_after_assign(x): return res +def dyfunc_len_paddle_shape(): + x = paddle.to_tensor([1, 2, 3]) + if len(paddle.shape(x)) > 0: + print(x) + + # 1. Basic tests without control flow class TestTensorShapeBasic(unittest.TestCase): def setUp(self): @@ -582,5 +588,11 @@ class TestFindStatiConvertVarShapeSuffixVar(unittest.TestCase): func.concrete_program +class TestPaddleShape(unittest.TestCase): + def test_paddle_shape(self): + func = paddle.jit.to_static(dyfunc_len_paddle_shape) + self.assertEqual('paddle.shape(x)' in func.code, True) + + if __name__ == '__main__': unittest.main()