예제 #1
0
    def testEvaluateWithMultipleDevicesContainingTheSameTensorName(self):
        dump = test.mock.MagicMock()

        def fake_get_tensors(node_name,
                             output_slot,
                             debug_op,
                             device_name=None):
            del output_slot, debug_op  # Unused.
            if node_name == "a" and device_name is None:
                raise ValueError(
                    "There are multiple (2) devices with nodes named 'a' but "
                    "device_name is not specified")
            elif (node_name == "a"
                  and device_name == "/job:worker/replica:0/task:0/cpu:0"):
                return [np.array(10.0)]
            elif (node_name == "a"
                  and device_name == "/job:worker/replica:0/task:1/cpu:0"):
                return [np.array(20.0)]

        with test.mock.patch.object(dump,
                                    "get_tensors",
                                    side_effect=fake_get_tensors):
            ev = evaluator.ExpressionEvaluator(dump)
            with self.assertRaisesRegex(ValueError, r"multiple \(2\) devices"):
                ev.evaluate("`a:0` + `a:0`")

            self.assertAllClose(
                30.0,
                ev.evaluate("`/job:worker/replica:0/task:0/cpu:0:a:0` + "
                            "`/job:worker/replica:0/task:1/cpu:0:a:0`"))
예제 #2
0
  def testEvaluateWithMultipleExecIndexes(self):
    dump = test.mock.MagicMock()
    def fake_get_tensors(node_name, output_slot, debug_op, device_name=None):
      del debug_op, device_name  # Unused.
      if node_name == "a" and output_slot == 0:
        return [np.array([[-1.0], [1.0]]), np.array([[-2.0], [2.0]])]

    with test.mock.patch.object(
        dump, "get_tensors", side_effect=fake_get_tensors, autospec=True):
      ev = evaluator.ExpressionEvaluator(dump)
      self.assertAllClose(
          [[4.0]], ev.evaluate("np.matmul(`a:0[1]`.T, `a:0[0]`)"))