1d9df4313a98fdc62187a94c5ab6d8955b699e9f2A. Unique TensorFlower# Copyright 2017 The TensorFlow Authors. All Rights Reserved.
2d9df4313a98fdc62187a94c5ab6d8955b699e9f2A. Unique TensorFlower#
3d9df4313a98fdc62187a94c5ab6d8955b699e9f2A. Unique TensorFlower# Licensed under the Apache License, Version 2.0 (the "License");
4d9df4313a98fdc62187a94c5ab6d8955b699e9f2A. Unique TensorFlower# you may not use this file except in compliance with the License.
5d9df4313a98fdc62187a94c5ab6d8955b699e9f2A. Unique TensorFlower# You may obtain a copy of the License at
6d9df4313a98fdc62187a94c5ab6d8955b699e9f2A. Unique TensorFlower#
7d9df4313a98fdc62187a94c5ab6d8955b699e9f2A. Unique TensorFlower#     http://www.apache.org/licenses/LICENSE-2.0
8d9df4313a98fdc62187a94c5ab6d8955b699e9f2A. Unique TensorFlower#
9d9df4313a98fdc62187a94c5ab6d8955b699e9f2A. Unique TensorFlower# Unless required by applicable law or agreed to in writing, software
10d9df4313a98fdc62187a94c5ab6d8955b699e9f2A. Unique TensorFlower# distributed under the License is distributed on an "AS IS" BASIS,
11d9df4313a98fdc62187a94c5ab6d8955b699e9f2A. Unique TensorFlower# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12d9df4313a98fdc62187a94c5ab6d8955b699e9f2A. Unique TensorFlower# See the License for the specific language governing permissions and
13d9df4313a98fdc62187a94c5ab6d8955b699e9f2A. Unique TensorFlower# limitations under the License.
14d9df4313a98fdc62187a94c5ab6d8955b699e9f2A. Unique TensorFlower# ==============================================================================
15d9df4313a98fdc62187a94c5ab6d8955b699e9f2A. Unique TensorFlower"""Tests for ast_util module."""
16d9df4313a98fdc62187a94c5ab6d8955b699e9f2A. Unique TensorFlower
17d9df4313a98fdc62187a94c5ab6d8955b699e9f2A. Unique TensorFlowerfrom __future__ import absolute_import
18d9df4313a98fdc62187a94c5ab6d8955b699e9f2A. Unique TensorFlowerfrom __future__ import division
19d9df4313a98fdc62187a94c5ab6d8955b699e9f2A. Unique TensorFlowerfrom __future__ import print_function
20d9df4313a98fdc62187a94c5ab6d8955b699e9f2A. Unique TensorFlower
21d9df4313a98fdc62187a94c5ab6d8955b699e9f2A. Unique TensorFlowerimport ast
22d9df4313a98fdc62187a94c5ab6d8955b699e9f2A. Unique TensorFlower
23d9df4313a98fdc62187a94c5ab6d8955b699e9f2A. Unique TensorFlowerfrom tensorflow.contrib.py2tf.pyct import ast_util
24d9df4313a98fdc62187a94c5ab6d8955b699e9f2A. Unique TensorFlowerfrom tensorflow.contrib.py2tf.pyct import qual_names
25d9df4313a98fdc62187a94c5ab6d8955b699e9f2A. Unique TensorFlowerfrom tensorflow.python.platform import test
26d9df4313a98fdc62187a94c5ab6d8955b699e9f2A. Unique TensorFlower
27d9df4313a98fdc62187a94c5ab6d8955b699e9f2A. Unique TensorFlower
28d9df4313a98fdc62187a94c5ab6d8955b699e9f2A. Unique TensorFlowerclass AstUtilTest(test.TestCase):
29d9df4313a98fdc62187a94c5ab6d8955b699e9f2A. Unique TensorFlower
30d9df4313a98fdc62187a94c5ab6d8955b699e9f2A. Unique TensorFlower  def test_rename_symbols(self):
31d9df4313a98fdc62187a94c5ab6d8955b699e9f2A. Unique TensorFlower    node = ast.Tuple([
32d9df4313a98fdc62187a94c5ab6d8955b699e9f2A. Unique TensorFlower        ast.Name('a', ast.Load()),
33d9df4313a98fdc62187a94c5ab6d8955b699e9f2A. Unique TensorFlower        ast.Name('b', ast.Load()),
34d9df4313a98fdc62187a94c5ab6d8955b699e9f2A. Unique TensorFlower        ast.Attribute(ast.Name('b', None), 'c', ast.Store()),
35d9df4313a98fdc62187a94c5ab6d8955b699e9f2A. Unique TensorFlower        ast.Attribute(
36d9df4313a98fdc62187a94c5ab6d8955b699e9f2A. Unique TensorFlower            ast.Attribute(ast.Name('b', None), 'c', ast.Load()), 'd',
37d9df4313a98fdc62187a94c5ab6d8955b699e9f2A. Unique TensorFlower            None)
38d9df4313a98fdc62187a94c5ab6d8955b699e9f2A. Unique TensorFlower    ], None)
39d9df4313a98fdc62187a94c5ab6d8955b699e9f2A. Unique TensorFlower    node = qual_names.resolve(node)
40d9df4313a98fdc62187a94c5ab6d8955b699e9f2A. Unique TensorFlower    node = ast_util.rename_symbols(
41d9df4313a98fdc62187a94c5ab6d8955b699e9f2A. Unique TensorFlower        node,
42d9df4313a98fdc62187a94c5ab6d8955b699e9f2A. Unique TensorFlower        {
43d9df4313a98fdc62187a94c5ab6d8955b699e9f2A. Unique TensorFlower            qual_names.QN('a'): qual_names.QN('renamed_a'),
44d9df4313a98fdc62187a94c5ab6d8955b699e9f2A. Unique TensorFlower            qual_names.QN('b.c'): qual_names.QN('renamed_b_c'),
45d9df4313a98fdc62187a94c5ab6d8955b699e9f2A. Unique TensorFlower        })
46d9df4313a98fdc62187a94c5ab6d8955b699e9f2A. Unique TensorFlower
47d9df4313a98fdc62187a94c5ab6d8955b699e9f2A. Unique TensorFlower    self.assertEqual(node.elts[0].id, 'renamed_a')
48d9df4313a98fdc62187a94c5ab6d8955b699e9f2A. Unique TensorFlower    self.assertTrue(isinstance(node.elts[0].ctx, ast.Load))
49d9df4313a98fdc62187a94c5ab6d8955b699e9f2A. Unique TensorFlower    self.assertEqual(node.elts[1].id, 'b')
50d9df4313a98fdc62187a94c5ab6d8955b699e9f2A. Unique TensorFlower    self.assertEqual(node.elts[2].id, 'renamed_b_c')
51d9df4313a98fdc62187a94c5ab6d8955b699e9f2A. Unique TensorFlower    self.assertTrue(isinstance(node.elts[2].ctx, ast.Store))
52d9df4313a98fdc62187a94c5ab6d8955b699e9f2A. Unique TensorFlower    self.assertEqual(node.elts[3].value.id, 'renamed_b_c')
53d9df4313a98fdc62187a94c5ab6d8955b699e9f2A. Unique TensorFlower    self.assertTrue(isinstance(node.elts[3].value.ctx, ast.Load))
54d9df4313a98fdc62187a94c5ab6d8955b699e9f2A. Unique TensorFlower
55d9df4313a98fdc62187a94c5ab6d8955b699e9f2A. Unique TensorFlower  def test_copy_clean(self):
56d9df4313a98fdc62187a94c5ab6d8955b699e9f2A. Unique TensorFlower    ret = ast.Return(
57d9df4313a98fdc62187a94c5ab6d8955b699e9f2A. Unique TensorFlower        ast.BinOp(
58d9df4313a98fdc62187a94c5ab6d8955b699e9f2A. Unique TensorFlower            op=ast.Add(),
59d9df4313a98fdc62187a94c5ab6d8955b699e9f2A. Unique TensorFlower            left=ast.Name(id='a', ctx=ast.Load()),
60d9df4313a98fdc62187a94c5ab6d8955b699e9f2A. Unique TensorFlower            right=ast.Num(1)))
61d9df4313a98fdc62187a94c5ab6d8955b699e9f2A. Unique TensorFlower    setattr(ret, '__foo', 'bar')
62d9df4313a98fdc62187a94c5ab6d8955b699e9f2A. Unique TensorFlower    node = ast.FunctionDef(
63d9df4313a98fdc62187a94c5ab6d8955b699e9f2A. Unique TensorFlower        name='f',
64d9df4313a98fdc62187a94c5ab6d8955b699e9f2A. Unique TensorFlower        args=ast.arguments(
65d9df4313a98fdc62187a94c5ab6d8955b699e9f2A. Unique TensorFlower            args=[ast.Name(id='a', ctx=ast.Param())],
66d9df4313a98fdc62187a94c5ab6d8955b699e9f2A. Unique TensorFlower            vararg=None,
67d9df4313a98fdc62187a94c5ab6d8955b699e9f2A. Unique TensorFlower            kwarg=None,
68d9df4313a98fdc62187a94c5ab6d8955b699e9f2A. Unique TensorFlower            defaults=[]),
69d9df4313a98fdc62187a94c5ab6d8955b699e9f2A. Unique TensorFlower        body=[ret],
70d9df4313a98fdc62187a94c5ab6d8955b699e9f2A. Unique TensorFlower        decorator_list=[],
71d9df4313a98fdc62187a94c5ab6d8955b699e9f2A. Unique TensorFlower        returns=None)
72d9df4313a98fdc62187a94c5ab6d8955b699e9f2A. Unique TensorFlower    new_node = ast_util.copy_clean(node)
73d9df4313a98fdc62187a94c5ab6d8955b699e9f2A. Unique TensorFlower    self.assertFalse(node is new_node)
74d9df4313a98fdc62187a94c5ab6d8955b699e9f2A. Unique TensorFlower    self.assertFalse(ret is new_node.body[0])
75d9df4313a98fdc62187a94c5ab6d8955b699e9f2A. Unique TensorFlower    self.assertFalse(hasattr(new_node.body[0], '__foo'))
76d9df4313a98fdc62187a94c5ab6d8955b699e9f2A. Unique TensorFlower
77d9df4313a98fdc62187a94c5ab6d8955b699e9f2A. Unique TensorFlower
78d9df4313a98fdc62187a94c5ab6d8955b699e9f2A. Unique TensorFlowerif __name__ == '__main__':
79d9df4313a98fdc62187a94c5ab6d8955b699e9f2A. Unique TensorFlower  test.main()
80