15e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower# Copyright 2017 The TensorFlow Authors. All Rights Reserved.
25e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower#
35e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower# Licensed under the Apache License, Version 2.0 (the "License");
45e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower# you may not use this file except in compliance with the License.
55e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower# You may obtain a copy of the License at
65e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower#
75e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower#     http://www.apache.org/licenses/LICENSE-2.0
85e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower#
95e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower# Unless required by applicable law or agreed to in writing, software
105e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower# distributed under the License is distributed on an "AS IS" BASIS,
115e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
125e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower# See the License for the specific language governing permissions and
135e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower# limitations under the License.
145e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower# ==============================================================================
155e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower"""Test for checking stats accumulator related ops."""
165e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower
175e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlowerfrom __future__ import absolute_import
185e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlowerfrom __future__ import division
195e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlowerfrom __future__ import print_function
205e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower
215e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlowerfrom tensorflow.contrib.boosted_trees.python.ops import stats_accumulator_ops
225e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlowerfrom tensorflow.python.framework import ops
235e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlowerfrom tensorflow.python.framework import tensor_shape
245e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlowerfrom tensorflow.python.framework import test_util
255e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlowerfrom tensorflow.python.platform import googletest
265e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower
275e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower
285e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlowerclass StatsAccumulatorScalarTest(test_util.TensorFlowTestCase):
295e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower  """Tests for scalar gradients and hessians accumulator."""
305e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower
315e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower  def testSimpleAcculumator(self):
325e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower    with self.test_session() as sess:
335e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower      accumulator = stats_accumulator_ops.StatsAccumulator(
345e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower          stamp_token=0,
355e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower          gradient_shape=tensor_shape.scalar(),
365e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower          hessian_shape=tensor_shape.scalar())
375e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower      with ops.control_dependencies([accumulator._create_op]):
385e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower        op1 = accumulator.add(
395e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower            stamp_token=0,
405e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower            partition_ids=[1, 2],
41bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower            feature_ids=[[2, 0], [3, 0]],
425e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower            gradients=[0.1, 0.3],
435e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower            hessians=[0.2, 0.4])
44bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower        op2 = accumulator.add(0, [1], [[2, 0]], [0.1], [0.2])
455e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower
465e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower      with ops.control_dependencies([op1, op2]):
47bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower        num_updates, partition, bucket_ids, grads, hessians = accumulator.flush(
485e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower            stamp_token=0, next_stamp_token=1)
49bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower        num_updates, partition, bucket_ids, grads, hessians = sess.run(
50bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower            [num_updates, partition, bucket_ids, grads, hessians])
515e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower
52bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower      result = _AccumulatorResultToDict(partition, bucket_ids, grads, hessians)
535e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower      self.assertEqual(num_updates, 2)
545e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower      self.assertEqual(len(result), 2)
55bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower      # Key is partion, bucket, dimension
56bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower      self.assertAllClose(result[(1, 2, 0)], [0.2, 0.4])
57bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower      self.assertAllClose(result[(2, 3, 0)], [0.3, 0.4])
58bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower
59bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower  def testMultidimensionalAcculumator(self):
60bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower    with self.test_session() as sess:
61bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower      accumulator = stats_accumulator_ops.StatsAccumulator(
62bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower          stamp_token=0,
63bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower          gradient_shape=tensor_shape.scalar(),
64bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower          hessian_shape=tensor_shape.scalar())
65bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower      with ops.control_dependencies([accumulator._create_op]):
66bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower        op1 = accumulator.add(
67bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower            stamp_token=0,
68bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower            partition_ids=[1, 2, 1],
69bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower            feature_ids=[[2, 2], [3, 0], [2, 2]],
70bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower            gradients=[0.1, 0.3, 0.8],
71bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower            hessians=[0.2, 0.4, -9])
72bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower        op2 = accumulator.add(0, [2, 1], [[3, 1], [2, 2]], [0.1, 1], [0.2, -1])
73bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower
74bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower      with ops.control_dependencies([op1, op2]):
75bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower        num_updates, partition, bucket_ids, grads, hessians = accumulator.flush(
76bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower            stamp_token=0, next_stamp_token=1)
77bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower        num_updates, partition, bucket_ids, grads, hessians = sess.run(
78bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower            [num_updates, partition, bucket_ids, grads, hessians])
79bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower
80bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower      result = _AccumulatorResultToDict(partition, bucket_ids, grads, hessians)
81bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower      self.assertEqual(num_updates, 2)
82bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower      self.assertEqual(len(result), 3)
83bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower      # Key is partion, bucket, dimension.
84bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower      self.assertAllClose(result[(1, 2, 2)], [1.9, -9.8])
85bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower      self.assertAllClose(result[(2, 3, 0)], [0.3, 0.4])
86bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower      self.assertAllClose(result[(2, 3, 1)], [0.1, 0.2])
875e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower
885e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower  def testDropStaleUpdate(self):
895e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower    with self.test_session() as sess:
905e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower      accumulator = stats_accumulator_ops.StatsAccumulator(
915e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower          stamp_token=0,
925e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower          gradient_shape=tensor_shape.scalar(),
935e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower          hessian_shape=tensor_shape.scalar())
945e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower      with ops.control_dependencies([accumulator._create_op]):
955e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower        op1 = accumulator.add(
965e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower            stamp_token=0,
975e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower            partition_ids=[1, 2],
98bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower            feature_ids=[[2, 0], [3, 0]],
995e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower            gradients=[0.1, 0.3],
1005e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower            hessians=[0.2, 0.4])
1015e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower        op2 = accumulator.add(
1025e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower            stamp_token=-1,
1035e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower            partition_ids=[1],
104bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower            feature_ids=[[2, 0]],
1055e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower            gradients=[0.1],
1065e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower            hessians=[0.2])
1075e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower
1085e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower      with ops.control_dependencies([op1, op2]):
1095e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower        num_updates, partition, feature, grads, hessians = accumulator.flush(
1105e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower            stamp_token=0, next_stamp_token=1)
1115e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower        num_updates, partition, feature, grads, hessians = sess.run(
1125e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower            [num_updates, partition, feature, grads, hessians])
1135e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower
1145e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower      result = _AccumulatorResultToDict(partition, feature, grads, hessians)
1155e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower      self.assertEqual(num_updates, 1)
1165e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower      self.assertEqual(len(result), 2)
117bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower      self.assertAllClose(result[(1, 2, 0)], [0.1, 0.2])
118bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower      self.assertAllClose(result[(2, 3, 0)], [0.3, 0.4])
1195e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower
1205e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower  def testSerialize(self):
1215e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower    with self.test_session() as sess:
1225e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower      accumulator = stats_accumulator_ops.StatsAccumulator(
1235e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower          stamp_token=0,
1245e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower          gradient_shape=tensor_shape.scalar(),
1255e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower          hessian_shape=tensor_shape.scalar())
1265e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower      with ops.control_dependencies([accumulator._create_op]):
1275e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower        op1 = accumulator.add(
1285e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower            stamp_token=0,
1295e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower            partition_ids=[1, 2],
130bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower            feature_ids=[[2, 0], [3, 0]],
1315e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower            gradients=[0.1, 0.3],
1325e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower            hessians=[0.2, 0.4])
1335e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower
1345e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower      with ops.control_dependencies([op1]):
1355e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower        (stamp_token, num_updates, partition_1, feature_1, grads_1,
1365e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower         hessians_1) = accumulator.serialize()
1375e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower      # Make sure that the accumulator hasn't changed during serialization.
1385e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower      with ops.control_dependencies([stamp_token]):
1395e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower        num_updates_2, partition_2, feature_2, grads_2, hessians_2 = (
1405e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower            accumulator.flush(stamp_token=0, next_stamp_token=1))
1415e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower        (stamp_token, num_updates, partition_1, feature_1, grads_1, hessians_1,
1425e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower         num_updates_2, partition_2, feature_2, grads_2, hessians_2) = sess.run(
1435e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower             [
1445e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower                 stamp_token, num_updates, partition_1, feature_1, grads_1,
1455e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower                 hessians_1, num_updates_2, partition_2, feature_2, grads_2,
1465e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower                 hessians_2
1475e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower             ])
1485e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower
1495e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower      result_1 = _AccumulatorResultToDict(partition_1, feature_1, grads_1,
1505e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower                                          hessians_1)
1515e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower      result_2 = _AccumulatorResultToDict(partition_2, feature_2, grads_2,
1525e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower                                          hessians_2)
1535e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower      self.assertEqual(num_updates, 1)
1545e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower      self.assertEqual(num_updates_2, 1)
1555e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower      self.assertEqual(len(result_1), 2)
156bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower      self.assertAllClose(result_1[(1, 2, 0)], [0.1, 0.2])
157bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower      self.assertAllClose(result_1[(2, 3, 0)], [0.3, 0.4])
1585e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower      self.assertAllEqual(result_1, result_2)
1595e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower      self.assertEqual(0, stamp_token)
1605e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower
1615e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower  def testDeserialize(self):
1625e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower    with self.test_session() as sess:
1635e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower      accumulator = stats_accumulator_ops.StatsAccumulator(
1645e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower          stamp_token=0,
1655e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower          gradient_shape=tensor_shape.scalar(),
1665e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower          hessian_shape=tensor_shape.scalar())
1675e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower      with ops.control_dependencies([accumulator._create_op]):
1685e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower        # These will be deleted due to deserialize call.
1695e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower        op1 = accumulator.add(
1705e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower            stamp_token=0,
1715e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower            partition_ids=[1, 2],
172bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower            feature_ids=[[2, 0], [3, 1]],
1735e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower            gradients=[0.1, 0.3],
1745e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower            hessians=[0.2, 0.4])
1755e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower
1765e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower      with ops.control_dependencies([op1]):
177bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower        deserialize = (
178bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower            accumulator.deserialize(
179bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower                stamp_token=2,
180bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower                num_updates=3,
181bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower                partition_ids=[3, 4],
182bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower                feature_ids=[[5, 0], [6, 2]],
183bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower                gradients=[0.4, 0.5],
184bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower                hessians=[0.6, 0.7]))
1855e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower      with ops.control_dependencies([deserialize]):
1865e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower        num_updates, partition, feature, grads, hessians = accumulator.flush(
1875e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower            stamp_token=2, next_stamp_token=3)
1885e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower        num_updates, partition, feature, grads, hessians = sess.run(
1895e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower            [num_updates, partition, feature, grads, hessians])
1905e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower
1915e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower      result = _AccumulatorResultToDict(partition, feature, grads,
1925e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower                                        hessians)
1935e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower      self.assertEqual(num_updates, 3)
1945e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower      self.assertEqual(len(result), 2)
195bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower      self.assertAllClose(result[(3, 5, 0)], [0.4, 0.6])
196bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower      self.assertAllClose(result[(4, 6, 2)], [0.5, 0.7])
1975e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower
1985e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower  def testMakeSummary(self):
1995e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower    with self.test_session() as sess:
2005e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower      accumulator = stats_accumulator_ops.StatsAccumulator(
2015e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower          stamp_token=0,
2025e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower          gradient_shape=tensor_shape.scalar(),
2035e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower          hessian_shape=tensor_shape.scalar())
2045e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower      partition, feature, grads, hessians = accumulator._make_summary(
2055e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower          partition_ids=[1, 2, 1],
206bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower          feature_ids=[[2, 0], [3, 1], [2, 0]],
2075e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower          gradients=[0.1, 0.3, 0.1],
2085e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower          hessians=[0.2, 0.4, 0.2])
2095e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower      partition, feature, grads, hessians = sess.run(
2105e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower          [partition, feature, grads, hessians])
2115e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower      result = _AccumulatorResultToDict(partition, feature, grads, hessians)
2125e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower      self.assertEqual(len(result), 2)
213bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower      self.assertAllClose(result[(1, 2, 0)], [0.2, 0.4])
214bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower      self.assertAllClose(result[(2, 3, 1)], [0.3, 0.4])
2155e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower
2165e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower
2175e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlowerclass StatsAccumulatorTensorTest(test_util.TensorFlowTestCase):
2185e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower  """Tests for tensor gradients and hessians accumulator."""
2195e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower
2205e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower  def testSimpleAcculumator(self):
2215e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower    with self.test_session() as sess:
2225e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower      accumulator = stats_accumulator_ops.StatsAccumulator(
2235e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower          stamp_token=0,
2245e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower          gradient_shape=tensor_shape.TensorShape([2]),
2255e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower          hessian_shape=tensor_shape.TensorShape([2, 2]))
2265e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower      with ops.control_dependencies([accumulator._create_op]):
2275e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower        op1 = accumulator.add(
2285e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower            stamp_token=0,
2295e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower            partition_ids=[1, 2],
230bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower            feature_ids=[[2, 0], [3, 0]],
231bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower            # Two values for gradients,
232bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower            gradients=[[0.1, 0.1], [0.2, 0.2]],
233bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower            # A 2x2 matrix for each hessian.
234bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower            hessians=[[[0.01, 0.02], [0.03, 0.04]], [[0.05, 0.06], [0.07,
235bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower                                                                    0.08]]])
236bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower        op2 = accumulator.add(
237bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower            stamp_token=0,
238bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower            partition_ids=[1],
239bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower            feature_ids=[[2, 0]],
240bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower            gradients=[[0.10, 0.11]],
241bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower            hessians=[[[0.011, 0.022], [0.033, 0.044]]])
242bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower
243bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower      with ops.control_dependencies([op1, op2]):
244bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower        num_updates, partition, feature, grads, hessians = accumulator.flush(
245bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower            stamp_token=0, next_stamp_token=1)
246bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower        num_updates, partition, feature, grads, hessians = sess.run(
247bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower            [num_updates, partition, feature, grads, hessians])
248bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower
249bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower      result = _AccumulatorResultToDict(partition, feature, grads, hessians)
250bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower      self.assertEqual(num_updates, 2)
251bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower      self.assertEqual(len(result), 2)
252bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower      self.assertAllClose(result[(1, 2, 0)][0], [0.20, 0.21])
253bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower      self.assertAllClose(result[(1, 2, 0)][1],
254bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower                          [[0.021, 0.042], [0.063, 0.084]])
255bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower      self.assertAllClose(result[(2, 3, 0)][0], [0.2, 0.2])
256bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower      self.assertAllClose(result[(2, 3, 0)][1], [[0.05, 0.06], [0.07, 0.08]])
257bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower
258bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower  def testMultidimensionalAcculumator(self):
259bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower    with self.test_session() as sess:
260bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower      accumulator = stats_accumulator_ops.StatsAccumulator(
261bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower          stamp_token=0,
262bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower          gradient_shape=tensor_shape.TensorShape([2]),
263bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower          hessian_shape=tensor_shape.TensorShape([2, 2]))
264bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower      with ops.control_dependencies([accumulator._create_op]):
265bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower        op1 = accumulator.add(
266bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower            stamp_token=0,
267bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower            partition_ids=[1, 2],
268bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower            feature_ids=[[2, 4], [3, 1]],
2695e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower            # Two values for gradients,
2705e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower            gradients=[[0.1, 0.1], [0.2, 0.2]],
2715e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower            # A 2x2 matrix for each hessian.
272bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower            hessians=[[[0.01, 0.02], [0.03, 0.04]], [[0.05, 0.06], [0.07,
273bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower                                                                    0.08]]])
2745e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower        op2 = accumulator.add(
2755e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower            stamp_token=0,
2765e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower            partition_ids=[1],
277bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower            feature_ids=[[2, 4]],
2785e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower            gradients=[[0.10, 0.11]],
2795e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower            hessians=[[[0.011, 0.022], [0.033, 0.044]]])
2805e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower
2815e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower      with ops.control_dependencies([op1, op2]):
2825e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower        num_updates, partition, feature, grads, hessians = accumulator.flush(
2835e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower            stamp_token=0, next_stamp_token=1)
2845e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower        num_updates, partition, feature, grads, hessians = sess.run(
2855e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower            [num_updates, partition, feature, grads, hessians])
2865e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower
2875e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower      result = _AccumulatorResultToDict(partition, feature, grads, hessians)
2885e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower      self.assertEqual(num_updates, 2)
2895e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower      self.assertEqual(len(result), 2)
290bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower      self.assertAllClose(result[(1, 2, 4)][0], [0.20, 0.21])
291bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower      self.assertAllClose(result[(1, 2, 4)][1],
292bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower                          [[0.021, 0.042], [0.063, 0.084]])
293bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower      self.assertAllClose(result[(2, 3, 1)][0], [0.2, 0.2])
294bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower      self.assertAllClose(result[(2, 3, 1)][1], [[0.05, 0.06], [0.07, 0.08]])
2955e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower
2965e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower  def testDropStaleUpdate(self):
2975e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower    with self.test_session() as sess:
2985e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower      accumulator = stats_accumulator_ops.StatsAccumulator(
2995e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower          stamp_token=0,
3005e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower          gradient_shape=tensor_shape.TensorShape([2]),
3015e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower          hessian_shape=tensor_shape.TensorShape([2, 2]))
3025e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower      with ops.control_dependencies([accumulator._create_op]):
3035e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower        op1 = accumulator.add(
3045e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower            stamp_token=0,
3055e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower            partition_ids=[1, 2],
306bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower            feature_ids=[[2, 5], [3, 0]],
3075e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower            # Two values for gradients,
3085e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower            gradients=[[0.1, 0.1], [0.2, 0.2]],
3095e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower            # A 2x2 matrix for each hessian.
310bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower            hessians=[[[0.01, 0.02], [0.03, 0.04]], [[0.05, 0.06], [0.07,
311bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower                                                                    0.08]]])
3125e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower        op2 = accumulator.add(
3135e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower            stamp_token=-1,
3145e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower            partition_ids=[1],
315bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower            feature_ids=[[2, 5]],
3165e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower            gradients=[[0.10, 0.11]],
3175e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower            hessians=[[[0.011, 0.022], [0.033, 0.044]]])
3185e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower
3195e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower      with ops.control_dependencies([op1, op2]):
3205e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower        num_updates, partition, feature, grads, hessians = accumulator.flush(
3215e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower            stamp_token=0, next_stamp_token=1)
3225e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower        num_updates, partition, feature, grads, hessians = sess.run(
3235e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower            [num_updates, partition, feature, grads, hessians])
3245e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower
3255e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower      result = _AccumulatorResultToDict(partition, feature, grads, hessians)
3265e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower      self.assertEqual(num_updates, 1)
3275e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower      self.assertEqual(len(result), 2)
328bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower      self.assertAllClose(result[(1, 2, 5)][0], [0.1, 0.1])
329bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower      self.assertAllClose(result[(1, 2, 5)][1], [[0.01, 0.02], [0.03, 0.04]])
330bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower      self.assertAllClose(result[(2, 3, 0)][0], [0.2, 0.2])
331bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower      self.assertAllClose(result[(2, 3, 0)][1], [[0.05, 0.06], [0.07, 0.08]])
3325e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower
3335e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower  def testSerialize(self):
3345e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower    with self.test_session() as sess:
3355e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower      accumulator = stats_accumulator_ops.StatsAccumulator(
3365e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower          stamp_token=0,
3375e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower          gradient_shape=tensor_shape.TensorShape([2]),
3385e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower          hessian_shape=tensor_shape.TensorShape([2, 2]))
3395e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower      with ops.control_dependencies([accumulator._create_op]):
3405e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower        op1 = accumulator.add(
3415e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower            stamp_token=0,
3425e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower            partition_ids=[1, 2],
343bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower            feature_ids=[[2, 0], [3, 0]],
3445e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower            # Two values for gradients,
3455e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower            gradients=[[0.1, 0.1], [0.2, 0.2]],
3465e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower            # A 2x2 matrix for each hessian.
347bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower            hessians=[[[0.01, 0.02], [0.03, 0.04]], [[0.05, 0.06], [0.07,
348bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower                                                                    0.08]]])
3495e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower
3505e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower      with ops.control_dependencies([op1]):
3515e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower        (stamp_token, num_updates_1, partition_1, feature_1, grads_1,
3525e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower         hessians_1) = accumulator.serialize()
3535e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower      # Make sure that the accumulator hasn't changed during serialization.
3545e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower      with ops.control_dependencies([stamp_token]):
3555e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower        num_updates_2, partition_2, feature_2, grads_2, hessians_2 = (
3565e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower            accumulator.flush(stamp_token=0, next_stamp_token=1))
3575e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower        (stamp_token, num_updates_1, partition_1, feature_1, grads_1,
3585e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower         hessians_1, num_updates_2, partition_2, feature_2, grads_2,
3595e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower         hessians_2) = sess.run([
3605e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower             stamp_token, num_updates_1, partition_1, feature_1, grads_1,
3615e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower             hessians_1, num_updates_2, partition_2, feature_2, grads_2,
3625e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower             hessians_2
3635e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower         ])
3645e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower
3655e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower      result_1 = _AccumulatorResultToDict(partition_1, feature_1, grads_1,
3665e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower                                          hessians_1)
3675e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower      result_2 = _AccumulatorResultToDict(partition_2, feature_2, grads_2,
3685e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower                                          hessians_2)
3695e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower
3705e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower      self.assertEqual(num_updates_1, 1)
3715e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower      self.assertEqual(num_updates_2, 1)
3725e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower      self.assertEqual(len(result_1), 2)
373bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower      self.assertAllClose(result_1[(1, 2, 0)][0], [0.1, 0.1])
374bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower      self.assertAllClose(result_1[(1, 2, 0)][1], [[0.01, 0.02], [0.03, 0.04]])
375bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower      self.assertAllClose(result_1[(2, 3, 0)][0], [0.2, 0.2])
376bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower      self.assertAllClose(result_1[(2, 3, 0)][1], [[0.05, 0.06], [0.07, 0.08]])
3775e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower
378bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower      self.assertAllEqual(result_1[1, 2, 0][0], result_2[1, 2, 0][0])
379bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower      self.assertAllEqual(result_1[1, 2, 0][1], result_2[1, 2, 0][1])
380bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower      self.assertAllEqual(result_1[2, 3, 0][0], result_2[2, 3, 0][0])
381bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower      self.assertAllEqual(result_1[2, 3, 0][1], result_2[2, 3, 0][1])
3825e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower
3835e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower  def testDeserialize(self):
3845e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower    with self.test_session() as sess:
3855e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower      accumulator = stats_accumulator_ops.StatsAccumulator(
3865e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower          stamp_token=0,
3875e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower          gradient_shape=tensor_shape.TensorShape([2]),
3885e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower          hessian_shape=tensor_shape.TensorShape([2, 2]))
3895e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower      with ops.control_dependencies([accumulator._create_op]):
3905e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower        # These will be deleted due to deserialize call.
3915e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower        op1 = accumulator.add(
3925e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower            stamp_token=0,
3935e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower            partition_ids=[1, 2],
394bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower            feature_ids=[[2, 0], [3, 0]],
3955e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower            # Two values for gradients,
3965e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower            gradients=[[0.1, 0.1], [0.2, 0.2]],
3975e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower            # A 2x2 matrix for each hessian.
398bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower            hessians=[[[0.01, 0.02], [0.03, 0.04]], [[0.05, 0.06], [0.07,
399bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower                                                                    0.08]]])
4005e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower
4015e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower      with ops.control_dependencies([op1]):
4025e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower        deserialize = accumulator.deserialize(
4035e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower            stamp_token=2,
4045e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower            num_updates=3,
4055e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower            partition_ids=[3, 4],
406bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower            feature_ids=[[4, 0], [5, 0]],
4075e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower            # Two values for gradients,
4085e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower            gradients=[[0.3, 0.3], [0.5, 0.5]],
4095e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower            # A 2x2 matrix for each hessian.
4105e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower            hessians=[[[0.03, 0.04], [0.05, 0.06]], [[0.07, 0.08], [0.09,
4115e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower                                                                    0.10]]])
4125e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower      with ops.control_dependencies([deserialize]):
4135e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower        num_updates, partition, feature, grads, hessians = accumulator.flush(
4145e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower            stamp_token=2, next_stamp_token=3)
4155e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower        num_updates, partition, feature, grads, hessians = sess.run(
4165e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower            [num_updates, partition, feature, grads, hessians])
4175e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower
4185e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower      result = _AccumulatorResultToDict(partition, feature, grads,
4195e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower                                        hessians)
4205e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower      self.assertEqual(num_updates, 3)
4215e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower      self.assertEqual(len(result), 2)
422bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower      self.assertAllClose(result[(3, 4, 0)][0], [0.3, 0.3])
423bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower      self.assertAllClose(result[(3, 4, 0)][1], [[0.03, 0.04], [0.05, 0.06]])
424bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower      self.assertAllClose(result[(4, 5, 0)][0], [0.5, 0.5])
425bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower      self.assertAllClose(result[(4, 5, 0)][1], [[0.07, 0.08], [0.09, 0.10]])
4265e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower
4275e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower  def testMakeSummary(self):
4285e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower    with self.test_session() as sess:
4295e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower      accumulator = stats_accumulator_ops.StatsAccumulator(
4305e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower          stamp_token=0,
4315e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower          gradient_shape=tensor_shape.TensorShape([2]),
4325e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower          hessian_shape=tensor_shape.TensorShape([2, 2]))
4335e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower      partition, feature, grads, hessians = accumulator._make_summary(
4345e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower          partition_ids=[1, 2, 1],
435bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower          feature_ids=[[2, 0], [3, 2], [2, 0]],
4365e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower          # Two values for gradients,
4375e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower          gradients=[[0.1, 0.1], [0.2, 0.2], [0.10, 0.11]],
4385e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower          # A 2x2 matrix for each hessian.
4395e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower          hessians=[[[0.01, 0.02], [0.03, 0.04]], [[0.05, 0.06], [0.07, 0.08]],
4405e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower                    [[0.011, 0.022], [0.033, 0.044]]])
4415e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower      partition, feature, grads, hessians = sess.run(
4425e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower          [partition, feature, grads, hessians])
4435e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower
4445e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower      result = _AccumulatorResultToDict(partition, feature, grads, hessians)
4455e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower      self.assertEqual(len(result), 2)
446bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower      self.assertAllClose(result[(1, 2, 0)][0], [0.20, 0.21])
447bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower      self.assertAllClose(result[(1, 2, 0)][1],
448bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower                          [[0.021, 0.042], [0.063, 0.084]])
449bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower      self.assertAllClose(result[(2, 3, 2)][0], [0.2, 0.2])
450bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower      self.assertAllClose(result[(2, 3, 2)][1], [[0.05, 0.06], [0.07, 0.08]])
4515e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower
4525e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower
4535e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlowerdef _AccumulatorResultToDict(partition, feature, grads, hessians):
4545e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower  """Converts the inputs to a dictionary since the ordering changes."""
455bf24cbb36b478fbcb8fb01216cec2052ac5d51aaA. Unique TensorFlower  return {(partition[i], feature[i, 0], feature[i, 1]): (grads[i], hessians[i])
4565e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower          for i in range(len(partition))}
4575e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower
4585e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower
4595e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlowerif __name__ == "__main__":
4605e25a9c215d418fb5431a2cd5ac726d0f155f77fA. Unique TensorFlower  googletest.main()
461