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 0bc167132e3ed7..e1df2324889b44 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 @@ def _is_var_shape(self, node): 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 f7cdb12a1ab673..06d69daa75d1c7 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 @@ def test(self): 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()