test_egr_python_api.py 44.5 KB
Newer Older
1
# Copyright (c) 2021 PaddlePaddle Authors. All Rights Reserved.
2
#
3 4 5
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
6
#
7
#     http://www.apache.org/licenses/LICENSE-2.0
8
#
9 10 11 12 13 14 15 16 17
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

import paddle.fluid.core as core
import paddle
import numpy as np
18 19 20 21 22 23 24
from paddle.fluid.framework import (
    EagerParamBase,
    _current_expected_place,
    _disable_legacy_dygraph,
    _test_eager_guard,
    in_dygraph_mode,
)
25
import unittest
26
import copy
27 28 29 30


class EagerScaleTestCase(unittest.TestCase):
    def test_scale_base(self):
J
Jiabin Yang 已提交
31
        with _test_eager_guard():
32 33 34 35 36 37 38 39 40 41 42 43
            paddle.set_device("cpu")
            arr = np.ones([4, 16, 16, 32]).astype('float32')
            tensor = paddle.to_tensor(arr, 'float32', core.CPUPlace())
            print(tensor)
            tensor = core.eager.scale(tensor, 2.0, 0.9, True, False)
            for i in range(0, 100):
                tensor = core.eager.scale(tensor, 2.0, 0.9, True, False)
            print(tensor)
            self.assertEqual(tensor.shape, [4, 16, 16, 32])
            self.assertEqual(tensor.stop_gradient, True)

    def test_retain_grad_and_run_backward(self):
J
Jiabin Yang 已提交
44
        with _test_eager_guard():
45 46 47
            paddle.set_device("cpu")

            input_data = np.ones([4, 16, 16, 32]).astype('float32')
48 49 50
            data_eager = paddle.to_tensor(
                input_data, 'float32', core.CPUPlace(), False
            )
51 52 53 54

            grad_data = np.ones([4, 16, 16, 32]).astype('float32')
            grad_eager = paddle.to_tensor(grad_data, 'float32', core.CPUPlace())

55
            data_eager.retain_grads()
56 57

            out_eager = core.eager.scale(data_eager, 1.0, 0.9, True, True)
58
            self.assertIsNone(data_eager.grad)
59
            out_eager.backward(grad_eager, False)
60
            self.assertIsNotNone(data_eager.grad)
61
            np.testing.assert_array_equal(data_eager.grad.numpy(), input_data)
62

63 64 65 66 67
    def test_retain_grad_and_run_backward_raises(self):
        with _test_eager_guard():
            paddle.set_device("cpu")

            input_data = np.ones([4, 16, 16, 32]).astype('float32')
68 69 70
            data_eager = paddle.to_tensor(
                input_data, 'float32', core.CPUPlace(), False
            )
71 72 73 74

            grad_data = np.ones([4, 16, 16, 32]).astype('float32')
            grad_data2 = np.ones([4, 16]).astype('float32')
            grad_eager = paddle.to_tensor(grad_data, 'float32', core.CPUPlace())
75 76 77
            grad_eager2 = paddle.to_tensor(
                grad_data2, 'float32', core.CPUPlace()
            )
78 79 80 81

            data_eager.retain_grads()

            out_eager = core.eager.scale(data_eager, 1.0, 0.9, True, True)
82
            self.assertIsNone(data_eager.grad)
83
            with self.assertRaisesRegexp(
84 85
                AssertionError, "The type of grad_tensor must be paddle.Tensor"
            ):
86 87 88
                out_eager.backward(grad_data, False)

            with self.assertRaisesRegexp(
89 90 91
                AssertionError,
                "Tensor shape not match, Tensor of grad_tensor /*",
            ):
92 93
                out_eager.backward(grad_eager2, False)

94 95

class EagerDtypeTestCase(unittest.TestCase):
J
Jiabin Yang 已提交
96 97
    def check_to_tesnsor_and_numpy(self, dtype, proto_dtype):
        with _test_eager_guard():
98 99
            arr = np.random.random([4, 16, 16, 32]).astype(dtype)
            tensor = paddle.to_tensor(arr, dtype)
J
Jiabin Yang 已提交
100
            self.assertEqual(tensor.dtype, proto_dtype)
101
            np.testing.assert_array_equal(arr, tensor.numpy())
102 103

    def test_dtype_base(self):
J
Jiabin Yang 已提交
104 105 106 107 108 109 110 111 112 113
        print("Test_dtype")
        self.check_to_tesnsor_and_numpy('bool', core.VarDesc.VarType.BOOL)
        self.check_to_tesnsor_and_numpy('int8', core.VarDesc.VarType.INT8)
        self.check_to_tesnsor_and_numpy('uint8', core.VarDesc.VarType.UINT8)
        self.check_to_tesnsor_and_numpy('int16', core.VarDesc.VarType.INT16)
        self.check_to_tesnsor_and_numpy('int32', core.VarDesc.VarType.INT32)
        self.check_to_tesnsor_and_numpy('int64', core.VarDesc.VarType.INT64)
        self.check_to_tesnsor_and_numpy('float16', core.VarDesc.VarType.FP16)
        self.check_to_tesnsor_and_numpy('float32', core.VarDesc.VarType.FP32)
        self.check_to_tesnsor_and_numpy('float64', core.VarDesc.VarType.FP64)
114 115 116 117 118 119
        self.check_to_tesnsor_and_numpy(
            'complex64', core.VarDesc.VarType.COMPLEX64
        )
        self.check_to_tesnsor_and_numpy(
            'complex128', core.VarDesc.VarType.COMPLEX128
        )
120 121


122
class EagerVariablePropertiesAndMethodsTestCase(unittest.TestCase):
123
    def constructor(self, place):
124
        egr_tensor = core.eager.Tensor()
125 126
        self.assertEqual(egr_tensor.persistable, False)
        self.assertTrue("generated" in egr_tensor.name)
127
        self.assertEqual(egr_tensor.shape, [0])
128 129 130
        self.assertEqual(egr_tensor.dtype, core.VarDesc.VarType.FP32)
        self.assertEqual(egr_tensor.stop_gradient, True)

131 132 133 134 135 136 137
        egr_tensor0 = core.eager.Tensor(
            core.VarDesc.VarType.FP32,
            [4, 16, 16, 32],
            "test_eager_tensor",
            core.VarDesc.VarType.LOD_TENSOR,
            True,
        )
138 139 140 141 142 143
        self.assertEqual(egr_tensor0.persistable, True)
        self.assertEqual(egr_tensor0.name, "test_eager_tensor")
        self.assertEqual(egr_tensor0.shape, [4, 16, 16, 32])
        self.assertEqual(egr_tensor0.dtype, core.VarDesc.VarType.FP32)

        arr0 = np.random.rand(4, 16, 16, 32).astype('float32')
144 145 146
        egr_tensor1 = core.eager.Tensor(
            arr0, place, True, False, "numpy_tensor1", False
        )
147 148 149 150 151 152
        self.assertEqual(egr_tensor1.persistable, True)
        self.assertEqual(egr_tensor1.name, "numpy_tensor1")
        self.assertEqual(egr_tensor1.shape, [4, 16, 16, 32])
        self.assertEqual(egr_tensor1.dtype, core.VarDesc.VarType.FP32)
        self.assertEqual(egr_tensor1.stop_gradient, False)
        self.assertTrue(egr_tensor1.place._equals(place))
153
        np.testing.assert_array_equal(egr_tensor1.numpy(), arr0)
154 155

        arr1 = np.random.randint(100, size=(4, 16, 16, 32), dtype=np.int64)
156 157 158
        egr_tensor2 = core.eager.Tensor(
            arr1, place, False, True, "numpy_tensor2", True
        )
159 160 161 162 163 164
        self.assertEqual(egr_tensor2.persistable, False)
        self.assertEqual(egr_tensor2.name, "numpy_tensor2")
        self.assertEqual(egr_tensor2.shape, [4, 16, 16, 32])
        self.assertEqual(egr_tensor2.dtype, core.VarDesc.VarType.INT64)
        self.assertEqual(egr_tensor2.stop_gradient, True)
        self.assertTrue(egr_tensor2.place._equals(place))
165
        np.testing.assert_array_equal(egr_tensor2.numpy(), arr1)
166 167

        arr2 = np.random.rand(4, 16, 16, 32, 64).astype('float32')
168
        egr_tensor3 = core.eager.Tensor(arr2)
169 170 171 172 173 174 175
        self.assertEqual(egr_tensor3.persistable, False)
        self.assertTrue("generated_tensor" in egr_tensor3.name)
        self.assertEqual(egr_tensor3.shape, [4, 16, 16, 32, 64])
        self.assertEqual(egr_tensor3.dtype, core.VarDesc.VarType.FP32)
        self.assertEqual(egr_tensor3.stop_gradient, True)
        self.assertTrue(
            egr_tensor3.place._equals(
176 177 178
                paddle.fluid.framework._current_expected_place()
            )
        )
179
        np.testing.assert_array_equal(egr_tensor3.numpy(), arr2)
180 181

        egr_tensor3.stop_gradient = False
182
        egr_tensor4 = core.eager.Tensor(egr_tensor3)
183 184 185 186 187 188 189
        self.assertEqual(egr_tensor4.persistable, False)
        self.assertTrue("generated_tensor" in egr_tensor4.name)
        self.assertEqual(egr_tensor4.shape, egr_tensor3.shape)
        self.assertEqual(egr_tensor4.dtype, egr_tensor3.dtype)
        self.assertEqual(egr_tensor4.stop_gradient, True)
        self.assertTrue(
            egr_tensor4.place._equals(
190 191 192
                paddle.fluid.framework._current_expected_place()
            )
        )
193
        np.testing.assert_array_equal(egr_tensor4.numpy(), egr_tensor3.numpy())
194 195

        arr4 = np.random.rand(4, 16, 16, 32).astype('float32')
196
        egr_tensor5 = core.eager.Tensor(arr4, place)
197 198 199 200 201 202
        self.assertEqual(egr_tensor5.persistable, False)
        self.assertTrue("generated_tensor" in egr_tensor5.name)
        self.assertEqual(egr_tensor5.shape, [4, 16, 16, 32])
        self.assertEqual(egr_tensor5.dtype, core.VarDesc.VarType.FP32)
        self.assertEqual(egr_tensor5.stop_gradient, True)
        self.assertTrue(egr_tensor5.place._equals(place))
203
        np.testing.assert_array_equal(egr_tensor5.numpy(), arr4)
204

205
        egr_tensor6 = core.eager.Tensor(egr_tensor5, core.CPUPlace())
206 207 208 209 210 211
        self.assertEqual(egr_tensor6.persistable, False)
        self.assertTrue("generated_tensor" in egr_tensor6.name)
        self.assertEqual(egr_tensor6.shape, [4, 16, 16, 32])
        self.assertEqual(egr_tensor6.dtype, core.VarDesc.VarType.FP32)
        self.assertEqual(egr_tensor6.stop_gradient, True)
        self.assertEqual(egr_tensor6.place.is_cpu_place(), True)
212
        np.testing.assert_array_equal(egr_tensor6.numpy(), egr_tensor5.numpy())
213

214
        egr_tensor7 = core.eager.Tensor(arr4, place, True)
215 216 217 218 219 220
        self.assertEqual(egr_tensor7.persistable, True)
        self.assertTrue("generated_tensor" in egr_tensor7.name)
        self.assertEqual(egr_tensor7.shape, [4, 16, 16, 32])
        self.assertEqual(egr_tensor7.dtype, core.VarDesc.VarType.FP32)
        self.assertEqual(egr_tensor7.stop_gradient, True)
        self.assertTrue(egr_tensor7.place._equals(place))
221
        np.testing.assert_array_equal(egr_tensor7.numpy(), arr4)
222

223
        egr_tensor8 = core.eager.Tensor(egr_tensor6, place, "egr_tensor8")
224 225 226 227 228 229
        self.assertEqual(egr_tensor8.persistable, False)
        self.assertEqual(egr_tensor8.name, "egr_tensor8")
        self.assertEqual(egr_tensor8.shape, [4, 16, 16, 32])
        self.assertEqual(egr_tensor8.dtype, core.VarDesc.VarType.FP32)
        self.assertEqual(egr_tensor8.stop_gradient, True)
        self.assertTrue(egr_tensor8.place._equals(place))
230
        np.testing.assert_array_equal(egr_tensor8.numpy(), egr_tensor5.numpy())
231

232
        egr_tensor9 = core.eager.Tensor(arr4, place, True, True)
233 234 235 236 237 238
        self.assertEqual(egr_tensor9.persistable, True)
        self.assertTrue("generated_tensor" in egr_tensor9.name)
        self.assertEqual(egr_tensor9.shape, [4, 16, 16, 32])
        self.assertEqual(egr_tensor9.dtype, core.VarDesc.VarType.FP32)
        self.assertEqual(egr_tensor9.stop_gradient, True)
        self.assertTrue(egr_tensor9.place._equals(place))
239
        np.testing.assert_array_equal(egr_tensor9.numpy(), arr4)
240

241 242 243
        x = np.random.rand(3, 3).astype('float32')
        t = paddle.fluid.Tensor()
        t.set(x, paddle.fluid.CPUPlace())
244
        egr_tensor10 = core.eager.Tensor(t, place)
245 246 247 248 249 250
        self.assertEqual(egr_tensor10.persistable, False)
        self.assertTrue("generated_tensor" in egr_tensor10.name)
        self.assertEqual(egr_tensor10.shape, [3, 3])
        self.assertEqual(egr_tensor10.dtype, core.VarDesc.VarType.FP32)
        self.assertEqual(egr_tensor10.stop_gradient, True)
        self.assertTrue(egr_tensor10.place._equals(place))
251
        np.testing.assert_array_equal(egr_tensor10.numpy(), x)
252

253
        egr_tensor11 = core.eager.Tensor(t, place, "framework_constructed")
254 255 256 257 258 259
        self.assertEqual(egr_tensor11.persistable, False)
        self.assertTrue("framework_constructed" in egr_tensor11.name)
        self.assertEqual(egr_tensor11.shape, [3, 3])
        self.assertEqual(egr_tensor11.dtype, core.VarDesc.VarType.FP32)
        self.assertEqual(egr_tensor11.stop_gradient, True)
        self.assertTrue(egr_tensor11.place._equals(place))
260
        np.testing.assert_array_equal(egr_tensor11.numpy(), x)
261

262
        egr_tensor12 = core.eager.Tensor(t)
263 264 265 266 267 268
        self.assertEqual(egr_tensor12.persistable, False)
        self.assertTrue("generated_tensor" in egr_tensor12.name)
        self.assertEqual(egr_tensor12.shape, [3, 3])
        self.assertEqual(egr_tensor12.dtype, core.VarDesc.VarType.FP32)
        self.assertEqual(egr_tensor12.stop_gradient, True)
        self.assertTrue(egr_tensor12.place._equals(paddle.fluid.CPUPlace()))
269
        np.testing.assert_array_equal(egr_tensor12.numpy(), x)
270

271 272 273
        zero_dim_param = EagerParamBase(shape=[], dtype="float32")
        self.assertEqual(zero_dim_param.shape, [])

274
        with self.assertRaisesRegexp(
275 276
            ValueError, "The shape of Parameter should not be None"
        ):
277 278 279
            eager_param = EagerParamBase(shape=None, dtype="float32")

        with self.assertRaisesRegexp(
280 281
            ValueError, "The dtype of Parameter should not be None"
        ):
282 283 284
            eager_param = EagerParamBase(shape=[1, 1], dtype=None)

        with self.assertRaisesRegexp(
285 286
            ValueError,
            "Each dimension of shape for Parameter must be greater than 0, but received /*",
287 288 289 290 291 292 293 294
        ):
            eager_param = EagerParamBase(shape=[-1], dtype="float32")

        eager_param = EagerParamBase(shape=[1, 1], dtype="float32")
        self.assertTrue(eager_param.trainable)
        eager_param.trainable = False
        self.assertFalse(eager_param.trainable)
        with self.assertRaisesRegexp(
295 296
            ValueError, "The type of trainable MUST be bool, but the type is /*"
        ):
297 298
            eager_param.trainable = "False"

299 300 301
        eager_param_2 = EagerParamBase(
            shape=paddle.shape(paddle.to_tensor([1, 2, 3, 4])), dtype="float32"
        )
302 303 304 305
        self.assertTrue(eager_param_2.trainable)
        eager_param_2.trainable = False
        self.assertFalse(eager_param_2.trainable)
        with self.assertRaisesRegexp(
306 307
            ValueError, "The type of trainable MUST be bool, but the type is /*"
        ):
308 309
            eager_param_2.trainable = "False"

310 311 312 313 314 315 316 317 318 319
    def test_constructor(self):
        print("Test_constructor")
        paddle.set_device("cpu")
        place_list = [core.CPUPlace()]
        if core.is_compiled_with_cuda():
            place_list.append(core.CUDAPlace(0))
        with _test_eager_guard():
            for p in place_list:
                self.constructor(p)

320
    def constructor_with_kwargs(self, place):
321
        # init Tensor by Python array
322 323
        arr = np.random.rand(4, 16, 16, 32).astype('float32')

324
        egr_tensor0 = core.eager.Tensor(value=arr)
325 326 327 328 329
        self.assertEqual(egr_tensor0.persistable, False)
        self.assertTrue("generated" in egr_tensor0.name)
        self.assertEqual(egr_tensor0.shape, [4, 16, 16, 32])
        self.assertTrue(
            egr_tensor0.place._equals(
330 331 332
                paddle.fluid.framework._current_expected_place()
            )
        )
333 334 335
        self.assertEqual(egr_tensor0.dtype, core.VarDesc.VarType.FP32)
        self.assertEqual(egr_tensor0.stop_gradient, True)

336
        egr_tensor1 = core.eager.Tensor(value=arr, place=place)
337 338 339 340 341 342 343
        self.assertEqual(egr_tensor1.persistable, False)
        self.assertTrue("generated" in egr_tensor1.name)
        self.assertEqual(egr_tensor1.shape, [4, 16, 16, 32])
        self.assertTrue(egr_tensor1.place._equals(place))
        self.assertEqual(egr_tensor1.dtype, core.VarDesc.VarType.FP32)
        self.assertEqual(egr_tensor1.stop_gradient, True)

344
        egr_tensor2 = core.eager.Tensor(arr, place=place)
345 346 347 348 349 350 351
        self.assertEqual(egr_tensor2.persistable, False)
        self.assertTrue("generated" in egr_tensor2.name)
        self.assertEqual(egr_tensor2.shape, [4, 16, 16, 32])
        self.assertTrue(egr_tensor2.place._equals(place))
        self.assertEqual(egr_tensor2.dtype, core.VarDesc.VarType.FP32)
        self.assertEqual(egr_tensor2.stop_gradient, True)

352 353 354
        egr_tensor3 = core.eager.Tensor(
            arr, place=place, name="new_eager_tensor"
        )
355 356 357 358 359 360 361
        self.assertEqual(egr_tensor3.persistable, False)
        self.assertTrue("new_eager_tensor" in egr_tensor3.name)
        self.assertEqual(egr_tensor3.shape, [4, 16, 16, 32])
        self.assertTrue(egr_tensor3.place._equals(place))
        self.assertEqual(egr_tensor3.dtype, core.VarDesc.VarType.FP32)
        self.assertEqual(egr_tensor3.stop_gradient, True)

362 363 364
        egr_tensor4 = core.eager.Tensor(
            arr, place=place, persistable=True, name="new_eager_tensor"
        )
365 366 367 368 369 370 371
        self.assertEqual(egr_tensor4.persistable, True)
        self.assertTrue("new_eager_tensor" in egr_tensor4.name)
        self.assertEqual(egr_tensor4.shape, [4, 16, 16, 32])
        self.assertTrue(egr_tensor4.place._equals(place))
        self.assertEqual(egr_tensor4.dtype, core.VarDesc.VarType.FP32)
        self.assertEqual(egr_tensor4.stop_gradient, True)

372 373 374 375 376 377 378
        egr_tensor5 = core.eager.Tensor(
            arr,
            core.CPUPlace(),
            persistable=True,
            name="new_eager_tensor",
            zero_copy=True,
        )
379 380 381 382 383 384 385
        self.assertEqual(egr_tensor5.persistable, True)
        self.assertTrue("new_eager_tensor" in egr_tensor5.name)
        self.assertEqual(egr_tensor5.shape, [4, 16, 16, 32])
        self.assertTrue(egr_tensor5.place.is_cpu_place())
        self.assertEqual(egr_tensor5.dtype, core.VarDesc.VarType.FP32)
        self.assertEqual(egr_tensor5.stop_gradient, True)

386 387 388 389 390 391 392
        egr_tensor6 = core.eager.Tensor(
            arr,
            place=core.CPUPlace(),
            persistable=True,
            name="new_eager_tensor",
            zero_copy=True,
        )
393 394 395 396 397 398 399
        self.assertEqual(egr_tensor6.persistable, True)
        self.assertTrue("new_eager_tensor" in egr_tensor6.name)
        self.assertEqual(egr_tensor6.shape, [4, 16, 16, 32])
        self.assertTrue(egr_tensor6.place.is_cpu_place())
        self.assertEqual(egr_tensor6.dtype, core.VarDesc.VarType.FP32)
        self.assertEqual(egr_tensor6.stop_gradient, True)

400 401 402 403 404 405 406
        egr_tensor7 = core.eager.Tensor(
            arr,
            place=place,
            persistable=True,
            name="new_eager_tensor",
            zero_copy=True,
        )
407 408 409 410 411 412 413
        self.assertEqual(egr_tensor7.persistable, True)
        self.assertTrue("new_eager_tensor" in egr_tensor7.name)
        self.assertEqual(egr_tensor7.shape, [4, 16, 16, 32])
        self.assertTrue(egr_tensor7.place._equals(place))
        self.assertEqual(egr_tensor7.dtype, core.VarDesc.VarType.FP32)
        self.assertEqual(egr_tensor7.stop_gradient, True)

414 415 416 417 418 419 420 421
        egr_tensor8 = core.eager.Tensor(
            arr,
            place=place,
            persistable=True,
            name="new_eager_tensor",
            zero_copy=True,
            stop_gradient=False,
        )
422 423 424 425 426 427 428
        self.assertEqual(egr_tensor8.persistable, True)
        self.assertTrue("new_eager_tensor" in egr_tensor8.name)
        self.assertEqual(egr_tensor8.shape, [4, 16, 16, 32])
        self.assertTrue(egr_tensor8.place._equals(place))
        self.assertEqual(egr_tensor8.dtype, core.VarDesc.VarType.FP32)
        self.assertEqual(egr_tensor8.stop_gradient, False)

429 430 431
        egr_tensor9 = core.eager.Tensor(
            arr, place, True, True, "new_eager_tensor", stop_gradient=False
        )
432 433 434 435 436 437 438
        self.assertEqual(egr_tensor9.persistable, True)
        self.assertTrue("new_eager_tensor" in egr_tensor9.name)
        self.assertEqual(egr_tensor9.shape, [4, 16, 16, 32])
        self.assertTrue(egr_tensor9.place._equals(place))
        self.assertEqual(egr_tensor9.dtype, core.VarDesc.VarType.FP32)
        self.assertEqual(egr_tensor9.stop_gradient, False)

439 440 441
        egr_tensor10 = core.eager.Tensor(
            arr, place, True, True, name="new_eager_tensor", stop_gradient=False
        )
442 443 444 445 446 447 448
        self.assertEqual(egr_tensor10.persistable, True)
        self.assertTrue("new_eager_tensor" in egr_tensor10.name)
        self.assertEqual(egr_tensor10.shape, [4, 16, 16, 32])
        self.assertTrue(egr_tensor10.place._equals(place))
        self.assertEqual(egr_tensor10.dtype, core.VarDesc.VarType.FP32)
        self.assertEqual(egr_tensor10.stop_gradient, False)

449 450 451 452 453 454 455 456
        egr_tensor11 = core.eager.Tensor(
            arr,
            place,
            True,
            zero_copy=True,
            name="new_eager_tensor",
            stop_gradient=False,
        )
457 458 459 460 461 462 463
        self.assertEqual(egr_tensor11.persistable, True)
        self.assertTrue("new_eager_tensor" in egr_tensor11.name)
        self.assertEqual(egr_tensor11.shape, [4, 16, 16, 32])
        self.assertTrue(egr_tensor11.place._equals(place))
        self.assertEqual(egr_tensor11.dtype, core.VarDesc.VarType.FP32)
        self.assertEqual(egr_tensor11.stop_gradient, False)

464 465 466 467 468 469 470 471
        egr_tensor12 = core.eager.Tensor(
            arr,
            place,
            persistable=True,
            zero_copy=True,
            name="new_eager_tensor",
            stop_gradient=False,
        )
472 473 474 475 476 477 478
        self.assertEqual(egr_tensor12.persistable, True)
        self.assertTrue("new_eager_tensor" in egr_tensor12.name)
        self.assertEqual(egr_tensor12.shape, [4, 16, 16, 32])
        self.assertTrue(egr_tensor12.place._equals(place))
        self.assertEqual(egr_tensor12.dtype, core.VarDesc.VarType.FP32)
        self.assertEqual(egr_tensor12.stop_gradient, False)

479 480 481 482 483 484 485 486
        egr_tensor13 = core.eager.Tensor(
            value=arr,
            place=place,
            persistable=True,
            zero_copy=True,
            name="new_eager_tensor",
            stop_gradient=False,
        )
487 488 489 490 491 492 493 494
        self.assertEqual(egr_tensor13.persistable, True)
        self.assertTrue("new_eager_tensor" in egr_tensor13.name)
        self.assertEqual(egr_tensor13.shape, [4, 16, 16, 32])
        self.assertTrue(egr_tensor13.place._equals(place))
        self.assertEqual(egr_tensor13.dtype, core.VarDesc.VarType.FP32)
        self.assertEqual(egr_tensor13.stop_gradient, False)

        # special case
495 496 497 498 499 500 501
        egr_tensor14 = core.eager.Tensor(
            dtype=core.VarDesc.VarType.FP32,
            dims=[4, 16, 16, 32],
            name="special_eager_tensor",
            type=core.VarDesc.VarType.LOD_TENSOR,
            persistable=True,
        )
502 503 504 505 506
        self.assertEqual(egr_tensor14.persistable, True)
        self.assertEqual(egr_tensor14.name, "special_eager_tensor")
        self.assertEqual(egr_tensor14.shape, [4, 16, 16, 32])
        self.assertEqual(egr_tensor14.dtype, core.VarDesc.VarType.FP32)

507 508
        # init Tensor by Tensor
        egr_tensor15 = core.eager.Tensor(value=egr_tensor4)
509 510 511 512 513 514 515
        self.assertEqual(egr_tensor15.persistable, True)
        self.assertTrue("generated" in egr_tensor15.name)
        self.assertEqual(egr_tensor15.shape, egr_tensor4.shape)
        self.assertEqual(egr_tensor15.dtype, egr_tensor4.dtype)
        self.assertEqual(egr_tensor15.stop_gradient, True)
        self.assertTrue(
            egr_tensor15.place._equals(
516 517 518
                paddle.fluid.framework._current_expected_place()
            )
        )
519
        np.testing.assert_array_equal(egr_tensor15.numpy(), egr_tensor4.numpy())
520

521 522 523
        egr_tensor16 = core.eager.Tensor(
            value=egr_tensor4, name="new_eager_tensor"
        )
524 525 526 527 528 529 530
        self.assertEqual(egr_tensor16.persistable, True)
        self.assertTrue("new_eager_tensor" in egr_tensor16.name)
        self.assertEqual(egr_tensor16.shape, egr_tensor4.shape)
        self.assertEqual(egr_tensor16.dtype, egr_tensor4.dtype)
        self.assertEqual(egr_tensor16.stop_gradient, True)
        self.assertTrue(
            egr_tensor16.place._equals(
531 532 533
                paddle.fluid.framework._current_expected_place()
            )
        )
534
        np.testing.assert_array_equal(egr_tensor16.numpy(), egr_tensor4.numpy())
535

536
        egr_tensor17 = core.eager.Tensor(
537 538
            value=egr_tensor4,
            place=place,
539 540
            name="new_eager_tensor",
        )
541 542 543 544 545 546
        self.assertEqual(egr_tensor17.persistable, True)
        self.assertTrue("new_eager_tensor" in egr_tensor17.name)
        self.assertEqual(egr_tensor17.shape, egr_tensor4.shape)
        self.assertEqual(egr_tensor17.dtype, egr_tensor4.dtype)
        self.assertEqual(egr_tensor17.stop_gradient, True)
        self.assertTrue(egr_tensor17.place._equals(place))
547
        np.testing.assert_array_equal(egr_tensor17.numpy(), egr_tensor4.numpy())
548

549
        egr_tensor18 = core.eager.Tensor(
550 551
            egr_tensor4,
            place=place,
552 553
            name="new_eager_tensor",
        )
554 555 556 557 558 559
        self.assertEqual(egr_tensor18.persistable, True)
        self.assertTrue("new_eager_tensor" in egr_tensor18.name)
        self.assertEqual(egr_tensor18.shape, egr_tensor4.shape)
        self.assertEqual(egr_tensor18.dtype, egr_tensor4.dtype)
        self.assertEqual(egr_tensor18.stop_gradient, True)
        self.assertTrue(egr_tensor18.place._equals(place))
560
        np.testing.assert_array_equal(egr_tensor18.numpy(), egr_tensor4.numpy())
561

562
        egr_tensor19 = core.eager.Tensor(
563 564
            egr_tensor4,
            place,
565 566
            name="new_eager_tensor",
        )
567 568 569 570 571 572
        self.assertEqual(egr_tensor19.persistable, True)
        self.assertTrue("new_eager_tensor" in egr_tensor19.name)
        self.assertEqual(egr_tensor19.shape, egr_tensor4.shape)
        self.assertEqual(egr_tensor19.dtype, egr_tensor4.dtype)
        self.assertEqual(egr_tensor19.stop_gradient, True)
        self.assertTrue(egr_tensor19.place._equals(place))
573
        np.testing.assert_array_equal(egr_tensor19.numpy(), egr_tensor4.numpy())
574 575 576 577 578

        # init eager tensor by framework tensor
        x = np.random.rand(3, 3).astype('float32')
        t = paddle.fluid.Tensor()
        t.set(x, paddle.fluid.CPUPlace())
579
        egr_tensor20 = core.eager.Tensor(value=t)
580 581 582 583 584 585 586
        self.assertEqual(egr_tensor20.persistable, False)
        self.assertTrue("generated_tensor" in egr_tensor20.name)
        self.assertEqual(egr_tensor20.shape, [3, 3])
        self.assertEqual(egr_tensor20.dtype, core.VarDesc.VarType.FP32)
        self.assertEqual(egr_tensor20.stop_gradient, True)
        self.assertTrue(
            egr_tensor20.place._equals(
587 588 589
                paddle.fluid.framework._current_expected_place()
            )
        )
590
        np.testing.assert_array_equal(egr_tensor20.numpy(), x)
591

592
        egr_tensor21 = core.eager.Tensor(value=t, place=place)
593 594 595 596 597 598
        self.assertEqual(egr_tensor21.persistable, False)
        self.assertTrue("generated_tensor" in egr_tensor21.name)
        self.assertEqual(egr_tensor21.shape, [3, 3])
        self.assertEqual(egr_tensor21.dtype, core.VarDesc.VarType.FP32)
        self.assertEqual(egr_tensor21.stop_gradient, True)
        self.assertTrue(egr_tensor21.place._equals(place))
599
        np.testing.assert_array_equal(egr_tensor21.numpy(), x)
600

601
        egr_tensor22 = core.eager.Tensor(t, place=place)
602 603 604 605 606 607
        self.assertEqual(egr_tensor22.persistable, False)
        self.assertTrue("generated_tensor" in egr_tensor22.name)
        self.assertEqual(egr_tensor22.shape, [3, 3])
        self.assertEqual(egr_tensor22.dtype, core.VarDesc.VarType.FP32)
        self.assertEqual(egr_tensor22.stop_gradient, True)
        self.assertTrue(egr_tensor22.place._equals(place))
608
        np.testing.assert_array_equal(egr_tensor22.numpy(), x)
609

610
        egr_tensor23 = core.eager.Tensor(t, place, name="from_framework_tensor")
611 612 613 614 615 616
        self.assertEqual(egr_tensor23.persistable, False)
        self.assertTrue("from_framework_tensor" in egr_tensor23.name)
        self.assertEqual(egr_tensor23.shape, [3, 3])
        self.assertEqual(egr_tensor23.dtype, core.VarDesc.VarType.FP32)
        self.assertEqual(egr_tensor23.stop_gradient, True)
        self.assertTrue(egr_tensor23.place._equals(place))
617
        np.testing.assert_array_equal(egr_tensor23.numpy(), x)
618

619 620 621
        egr_tensor24 = core.eager.Tensor(
            value=t, place=place, name="from_framework_tensor"
        )
622 623 624 625 626 627
        self.assertEqual(egr_tensor24.persistable, False)
        self.assertTrue("from_framework_tensor" in egr_tensor24.name)
        self.assertEqual(egr_tensor24.shape, [3, 3])
        self.assertEqual(egr_tensor24.dtype, core.VarDesc.VarType.FP32)
        self.assertEqual(egr_tensor24.stop_gradient, True)
        self.assertTrue(egr_tensor24.place._equals(place))
628
        np.testing.assert_array_equal(egr_tensor24.numpy(), x)
629 630 631

        # Bad usage
        # SyntaxError: positional argument follows keyword argument
632
        # egr_tensor25 = core.eager.Tensor(value=t, place)
633 634 635 636 637 638 639 640 641 642 643

    def test_constructor_with_kwargs(self):
        print("Test_constructor_with_kwargs")
        paddle.set_device("cpu")
        place_list = [core.CPUPlace()]
        if core.is_compiled_with_cuda():
            place_list.append(core.CUDAPlace(0))
        with _test_eager_guard():
            for p in place_list:
                self.constructor_with_kwargs(p)

644 645 646 647 648 649 650
    def test_copy_and_copy_to(self):
        print("Test_copy_and_copy_to")
        with _test_eager_guard():
            paddle.set_device("cpu")
            arr = np.ones([4, 16, 16, 32]).astype('float32')
            arr1 = np.zeros([4, 16]).astype('float32')
            arr2 = np.ones([4, 16, 16, 32]).astype('float32') + np.ones(
651 652 653 654 655
                [4, 16, 16, 32]
            ).astype('float32')
            tensor = paddle.to_tensor(
                arr, core.VarDesc.VarType.FP32, core.CPUPlace()
            )
656 657 658 659
            self.assertEqual(tensor.stop_gradient, True)
            tensor.stop_gradient = False
            print("Set persistable")
            tensor.persistable = False
660 661 662
            tensor1 = paddle.to_tensor(
                arr1, core.VarDesc.VarType.FP32, core.CPUPlace()
            )
663 664
            tensor1.persistable = True
            self.assertEqual(tensor1.stop_gradient, True)
665
            np.testing.assert_array_equal(tensor.numpy(), arr)
666 667
            print("Test copy_")
            tensor.copy_(tensor1, True)
668
            self.assertEqual(tensor.persistable, False)
669 670
            self.assertEqual(tensor.shape, [4, 16])
            self.assertEqual(tensor.dtype, core.VarDesc.VarType.FP32)
671
            np.testing.assert_array_equal(tensor.numpy(), arr1)
672 673

            print("Test _copy_to")
674 675 676
            tensor2 = paddle.to_tensor(
                arr2, core.VarDesc.VarType.FP32, core.CPUPlace()
            )
677
            np.testing.assert_array_equal(tensor2.numpy(), arr2)
678 679 680 681
            self.assertTrue(tensor2.place.is_cpu_place())
            tensor2.persistable = True
            tensor2.stop_gradient = False
            if core.is_compiled_with_cuda():
682
                tensor3 = tensor2._copy_to(core.CUDAPlace(0), True)
683
                np.testing.assert_array_equal(tensor3.numpy(), arr2)
J
Jiabin Yang 已提交
684 685
                self.assertEqual(tensor3.persistable, True)
                self.assertEqual(tensor3.stop_gradient, True)
686
                self.assertTrue(tensor3.place.is_gpu_place())
J
Jiabin Yang 已提交
687 688

                tensor4 = tensor2.cuda(0, True)
689
                np.testing.assert_array_equal(tensor4.numpy(), arr2)
J
Jiabin Yang 已提交
690 691 692 693 694
                self.assertEqual(tensor4.persistable, True)
                self.assertEqual(tensor4.stop_gradient, False)
                self.assertTrue(tensor4.place.is_gpu_place())

                tensor5 = tensor4.cpu()
695
                np.testing.assert_array_equal(tensor5.numpy(), arr2)
J
Jiabin Yang 已提交
696 697 698 699 700 701
                self.assertEqual(tensor5.persistable, True)
                self.assertEqual(tensor5.stop_gradient, False)
                self.assertTrue(tensor5.place.is_cpu_place())

                tensor10 = paddle.to_tensor([1, 2, 3], place='gpu_pinned')
                tensor11 = tensor10._copy_to(core.CUDAPlace(0), True)
702 703 704
                np.testing.assert_array_equal(
                    tensor10.numpy(), tensor11.numpy()
                )
705
            else:
706
                tensor3 = tensor2._copy_to(core.CPUPlace(), True)
707
                np.testing.assert_array_equal(tensor3.numpy(), arr2)
J
Jiabin Yang 已提交
708 709
                self.assertEqual(tensor3.persistable, True)
                self.assertEqual(tensor3.stop_gradient, True)
710 711
                self.assertTrue(tensor3.place.is_cpu_place())

J
Jiabin Yang 已提交
712
                tensor4 = tensor2.cpu()
713
                np.testing.assert_array_equal(tensor4.numpy(), arr2)
J
Jiabin Yang 已提交
714 715 716 717
                self.assertEqual(tensor4.persistable, True)
                self.assertEqual(tensor4.stop_gradient, False)
                self.assertTrue(tensor4.place.is_cpu_place())

718 719
    def test_share_buffer_to(self):
        with _test_eager_guard():
720 721 722
            arr = np.ones([4, 16, 16, 32]).astype('float32')
            arr1 = np.zeros([4, 16]).astype('float32')
            arr2 = np.ones([4, 16, 16, 32]).astype('float32') + np.ones(
723 724
                [4, 16, 16, 32]
            ).astype('float32')
725 726
            tensor = None
            tensor2 = None
727 728 729
            tensor = paddle.to_tensor(
                arr, core.VarDesc.VarType.FP32, core.CPUPlace()
            )
B
Baibaifan 已提交
730
            tensor3 = core.eager.Tensor(value=tensor, place=core.CPUPlace())
731
            if core.is_compiled_with_cuda():
732 733 734
                tensor2 = paddle.to_tensor(
                    arr2, core.VarDesc.VarType.FP32, core.CUDAPlace(0)
                )
735
            else:
736 737 738
                tensor2 = paddle.to_tensor(
                    arr2, core.VarDesc.VarType.FP32, core.CPUPlace()
                )
739 740
            np.testing.assert_array_equal(tensor.numpy(), arr)
            np.testing.assert_array_equal(tensor2.numpy(), arr2)
741
            tensor2._share_buffer_to(tensor)
742 743
            np.testing.assert_array_equal(tensor.numpy(), arr2)
            np.testing.assert_array_equal(tensor2.numpy(), arr2)
744 745 746
            self.assertTrue(tensor._is_shared_buffer_with(tensor2))
            self.assertTrue(tensor2._is_shared_buffer_with(tensor))
            tensor._share_buffer_to(tensor3)
747
            np.testing.assert_array_equal(tensor3.numpy(), arr2)
748 749
            self.assertTrue(tensor3._is_shared_buffer_with(tensor))

750 751 752 753 754
    def test_share_underline_tensor_to(self):
        with _test_eager_guard():
            arr = np.ones([4, 16, 16, 32]).astype('float32')
            arr1 = np.zeros([4, 16]).astype('float32')
            arr2 = np.ones([4, 16, 16, 32]).astype('float32') + np.ones(
755 756
                [4, 16, 16, 32]
            ).astype('float32')
757 758
            tensor = None
            tensor2 = None
759 760 761
            tensor = paddle.to_tensor(
                arr, core.VarDesc.VarType.FP32, core.CPUPlace()
            )
762
            tensor3 = core.eager.Tensor()
763
            if core.is_compiled_with_cuda():
764 765 766
                tensor2 = paddle.to_tensor(
                    arr2, core.VarDesc.VarType.FP32, core.CUDAPlace(0)
                )
767
            else:
768 769 770
                tensor2 = paddle.to_tensor(
                    arr2, core.VarDesc.VarType.FP32, core.CPUPlace()
                )
771 772
            np.testing.assert_array_equal(tensor.numpy(), arr)
            np.testing.assert_array_equal(tensor2.numpy(), arr2)
773
            tensor2._share_underline_tensor_to(tensor)
774 775
            np.testing.assert_array_equal(tensor.numpy(), arr2)
            np.testing.assert_array_equal(tensor2.numpy(), arr2)
776 777 778
            self.assertTrue(tensor._is_shared_underline_tensor_with(tensor2))
            self.assertTrue(tensor2._is_shared_underline_tensor_with(tensor))
            tensor._share_underline_tensor_to(tensor3)
779
            np.testing.assert_array_equal(tensor3.numpy(), arr2)
780 781
            self.assertTrue(tensor3._is_shared_underline_tensor_with(tensor))

782
    def test_properties(self):
J
Jiabin Yang 已提交
783 784
        print("Test_properties")
        with _test_eager_guard():
785 786
            paddle.set_device("cpu")
            arr = np.ones([4, 16, 16, 32]).astype('float32')
787 788 789
            tensor = paddle.to_tensor(
                arr, core.VarDesc.VarType.FP32, core.CPUPlace()
            )
790 791 792 793 794 795 796 797 798
            self.assertEqual(tensor.shape, [4, 16, 16, 32])
            tensor.name = 'tensor_name_test'
            self.assertEqual(tensor.name, 'tensor_name_test')
            self.assertEqual(tensor.persistable, False)
            tensor.persistable = True
            self.assertEqual(tensor.persistable, True)
            tensor.persistable = False
            self.assertEqual(tensor.persistable, False)
            self.assertTrue(tensor.place.is_cpu_place())
799
            self.assertEqual(tensor._place_str, 'Place(cpu)')
800 801 802 803 804
            self.assertEqual(tensor.stop_gradient, True)
            tensor.stop_gradient = False
            self.assertEqual(tensor.stop_gradient, False)
            tensor.stop_gradient = True
            self.assertEqual(tensor.stop_gradient, True)
805
            self.assertEqual(tensor.type, core.VarDesc.VarType.LOD_TENSOR)
806

J
Jiabin Yang 已提交
807 808
    def test_global_properties(self):
        print("Test_global_properties")
J
Jiabin Yang 已提交
809 810
        _disable_legacy_dygraph()
        self.assertTrue(in_dygraph_mode())
J
Jiabin Yang 已提交
811
        with _test_eager_guard():
J
Jiabin Yang 已提交
812 813
            self.assertTrue(in_dygraph_mode())
        self.assertFalse(in_dygraph_mode())
J
Jiabin Yang 已提交
814 815 816 817 818

    def test_place_guard(self):
        if core.is_compiled_with_cuda():
            paddle.set_device("gpu:0")
            with paddle.fluid.framework._dygraph_place_guard(core.CPUPlace()):
J
Jiabin Yang 已提交
819
                self.assertTrue(
820 821
                    isinstance(_current_expected_place(), type(core.CPUPlace()))
                )
J
Jiabin Yang 已提交
822 823 824
        else:
            paddle.set_device("cpu")
            with paddle.fluid.framework._dygraph_place_guard(core.CPUPlace()):
J
Jiabin Yang 已提交
825
                self.assertTrue(
826 827
                    isinstance(_current_expected_place(), type(core.CPUPlace()))
                )
J
Jiabin Yang 已提交
828

829 830 831 832
    def test_value(self):
        with _test_eager_guard():
            arr = np.random.rand(4, 16, 16, 32).astype('float64')

833
            egr_tensor0 = core.eager.Tensor(value=arr)
834 835 836 837 838
            self.assertEqual(egr_tensor0.persistable, False)
            self.assertTrue("generated" in egr_tensor0.name)
            self.assertEqual(egr_tensor0.shape, [4, 16, 16, 32])
            self.assertTrue(
                egr_tensor0.place._equals(
839 840 841
                    paddle.fluid.framework._current_expected_place()
                )
            )
842 843
            self.assertEqual(egr_tensor0.dtype, core.VarDesc.VarType.FP64)
            self.assertEqual(egr_tensor0.stop_gradient, True)
844 845 846 847 848 849 850 851
            self.assertTrue(
                egr_tensor0.value().get_tensor()._dtype(),
                core.VarDesc.VarType.FP64,
            )
            self.assertTrue(
                egr_tensor0.value().get_tensor()._place(),
                paddle.fluid.framework._current_expected_place(),
            )
852 853
            self.assertTrue(egr_tensor0.value().get_tensor()._is_initialized())

854 855 856
    def test_set_value(self):
        with _test_eager_guard():
            ori_arr = np.random.rand(4, 16, 16, 32).astype('float32')
857
            egr_tensor = core.eager.Tensor(value=ori_arr)
858 859
            self.assertEqual(egr_tensor.stop_gradient, True)
            self.assertEqual(egr_tensor.shape, [4, 16, 16, 32])
860
            np.testing.assert_array_equal(egr_tensor.numpy(), ori_arr)
861 862
            ori_place = egr_tensor.place

J
Jiabin Yang 已提交
863
            new_arr = np.random.rand(4, 16, 16, 32).astype('float32')
864 865
            self.assertFalse(np.array_equal(egr_tensor.numpy(), new_arr))

J
Jiabin Yang 已提交
866
            egr_tensor.set_value(new_arr)
867 868
            self.assertEqual(egr_tensor.stop_gradient, True)
            self.assertTrue(egr_tensor.place._equals(ori_place))
J
Jiabin Yang 已提交
869
            self.assertEqual(egr_tensor.shape, [4, 16, 16, 32])
870
            np.testing.assert_array_equal(egr_tensor.numpy(), new_arr)
871

J
Jiabin Yang 已提交
872 873 874
    def test_sharding_related_api(self):
        with _test_eager_guard():
            arr0 = np.random.rand(4, 16, 16, 32).astype('float32')
875 876 877
            egr_tensor1 = core.eager.Tensor(
                arr0, core.CPUPlace(), True, False, "numpy_tensor1", False
            )
J
Jiabin Yang 已提交
878 879 880 881 882 883 884 885 886 887 888 889
            self.assertEqual(egr_tensor1._numel(), 32768)
            self.assertEqual(egr_tensor1._slice(0, 2)._numel(), 16384)

    def test_copy_gradient_from(self):
        with _test_eager_guard():
            np_x = np.random.random((2, 2))
            np_y = np.random.random((2, 2))
            x = paddle.to_tensor(np_x, dtype="float64", stop_gradient=False)
            y = paddle.to_tensor(np_y, dtype="float64")
            out = x + x
            out.backward()
            x._copy_gradient_from(y)
890
            np.testing.assert_array_equal(x.grad.numpy(), np_y)
J
Jiabin Yang 已提交
891 892 893 894 895 896 897 898 899

    def test_clear(self):
        with _test_eager_guard():
            np_x = np.random.random((3, 8, 8))
            x = paddle.to_tensor(np_x, dtype="float64")
            self.assertTrue(x._is_initialized())
            x._clear()
            self.assertFalse(x._is_initialized())

900 901 902 903 904 905 906 907 908 909 910 911 912 913 914
    def test_use_cudnn(self):
        np_x = np.random.random((3, 8, 8))
        with _test_eager_guard():
            self.assertTrue(in_dygraph_mode())
            x = paddle.to_tensor(np_x, dtype="float64")
            y = x._use_cudnn(False)
            np.testing.assert_array_equal(x.numpy(), y.numpy())
            y = x._use_cudnn(True)
            np.testing.assert_array_equal(x.numpy(), y.numpy())

        self.assertFalse(in_dygraph_mode())
        x = paddle.to_tensor(np_x, dtype="float64")
        with self.assertRaises(AttributeError):
            x = x._use_cudnn(False)

915

916 917 918 919 920 921 922 923 924 925 926
class EagerParamBaseUsageTestCase(unittest.TestCase):
    def test_print(self):
        with _test_eager_guard():
            linear = paddle.nn.Linear(3, 3, bias_attr=False)
            print(linear.weight)

    def test_copy(self):
        with _test_eager_guard():
            linear = paddle.nn.Linear(1, 3)
            linear_copy = copy.deepcopy(linear)
            linear_copy2 = linear.weight._copy_to(core.CPUPlace(), True)
927 928 929 930 931 932
            np.testing.assert_array_equal(
                linear.weight.numpy(), linear_copy.weight.numpy()
            )
            np.testing.assert_array_equal(
                linear.weight.numpy(), linear_copy2.numpy()
            )
933 934 935 936 937 938 939 940

    def func_fp16_initilaizer(self):
        paddle.set_default_dtype("float16")
        linear1 = paddle.nn.Linear(1, 3, bias_attr=False)
        linear2 = paddle.nn.Linear(
            1,
            3,
            bias_attr=False,
941 942
            weight_attr=paddle.fluid.initializer.Uniform(),
        )
943 944 945 946
        linear3 = paddle.nn.Linear(
            1,
            3,
            bias_attr=False,
947 948
            weight_attr=paddle.fluid.initializer.TruncatedNormalInitializer(),
        )
949 950 951 952
        linear4 = paddle.nn.Linear(
            1,
            3,
            bias_attr=False,
953 954
            weight_attr=paddle.fluid.initializer.MSRAInitializer(),
        )
955
        res = [
956 957 958
            linear1.weight.numpy(),
            linear2.weight.numpy(),
            linear3.weight.numpy(),
959
            linear4.weight.numpy(),
960 961 962 963 964 965 966 967 968 969 970 971 972 973
        ]
        paddle.set_default_dtype("float32")
        return res

    def test_fp16_initializer(self):
        res1 = list()
        res2 = list()
        paddle.seed(102)
        paddle.framework.random._manual_program_seed(102)
        with _test_eager_guard():
            res1 = self.func_fp16_initilaizer()
        res2 = self.func_fp16_initilaizer()

        for i in range(len(res1)):
974
            np.testing.assert_array_equal(res1[i], res2[i])
975 976

    def func_layer_helper_base(self, value):
977
        base = paddle.fluid.layer_helper_base.LayerHelperBase(
978 979
            "test_layer", "test_layer"
        )
980 981 982 983 984 985 986 987 988 989 990 991 992 993
        return base.to_variable(value).numpy()

    def func_base_to_variable(self, value):
        paddle.fluid.dygraph.base.to_variable(value)

    def test_to_variable(self):
        value = np.random.rand(4, 16, 16, 32).astype('float32')
        res1 = None
        res3 = None
        with _test_eager_guard():
            res1 = self.func_layer_helper_base(value)
            res3 = self.func_base_to_variable(value)
        res2 = self.func_layer_helper_base(value)
        res4 = self.func_base_to_variable(value)
994 995
        np.testing.assert_array_equal(res1, res2)
        np.testing.assert_array_equal(res3, res4)
996

997
    def test_backward_with_single_tensor(self):
998 999
        with _test_eager_guard():
            arr4 = np.random.rand(4, 16, 16, 32).astype('float32')
1000
            egr_tensor12 = core.eager.Tensor(arr4, core.CPUPlace())
1001 1002 1003 1004 1005 1006 1007 1008
            egr_tensor12.retain_grads()
            arr = np.ones([4, 16, 16, 32]).astype('float32')
            self.assertEqual(egr_tensor12.persistable, False)
            self.assertTrue("generated_tensor" in egr_tensor12.name)
            self.assertEqual(egr_tensor12.shape, [4, 16, 16, 32])
            self.assertEqual(egr_tensor12.dtype, core.VarDesc.VarType.FP32)
            self.assertEqual(egr_tensor12.stop_gradient, True)
            self.assertTrue(egr_tensor12.place._equals(paddle.fluid.CPUPlace()))
1009 1010
            np.testing.assert_array_equal(egr_tensor12.numpy(), arr4)
            np.testing.assert_array_equal(egr_tensor12.gradient(), None)
1011
            egr_tensor12.stop_gradient = False
1012
            egr_tensor12.backward()
1013
            np.testing.assert_array_equal(egr_tensor12.gradient(), arr)
1014

1015 1016 1017 1018 1019 1020 1021
    def test_set_value(self):
        with _test_eager_guard():
            linear = paddle.nn.Linear(1, 3)
            ori_place = linear.weight.place
            new_weight = np.ones([1, 3]).astype('float32')
            self.assertFalse(np.array_equal(linear.weight.numpy(), new_weight))

J
Jiabin Yang 已提交
1022
            linear.weight.set_value(new_weight)
1023
            np.testing.assert_array_equal(linear.weight.numpy(), new_weight)
1024 1025
            self.assertTrue(linear.weight.place._equals(ori_place))

1026

1027 1028 1029 1030
class EagerGuardTestCase(unittest.TestCase):
    def test__test_eager_guard(self):
        tracer = paddle.fluid.dygraph.tracer.Tracer()
        with _test_eager_guard(tracer):
J
Jiabin Yang 已提交
1031
            self.assertTrue(in_dygraph_mode())
1032 1033


1034 1035
if __name__ == "__main__":
    unittest.main()