def test_regression_output_tensors_roundtrip(self):
        value = array_ops.placeholder(dtypes.float32, 1, name='value')
        regression_output = export_lib.RegressionOutput(value)
        self.assertSequenceEqual(
            [value],
            tpu_estimator._export_output_to_tensors(regression_output))

        value_new = array_ops.placeholder(dtypes.float32, 1, name='value_new')
        regression_output_new = (
            tpu_estimator._clone_export_output_with_tensors(
                regression_output, [value_new]))
        self.assertEqual(value_new, regression_output_new.value)
    def test_classification_output_tensors_roundtrip_scores_only(self):
        scores = array_ops.placeholder(dtypes.float32, 1, name='scores')
        classification_output = export_lib.ClassificationOutput(scores=scores)

        classification_output_tensors = (
            tpu_estimator._export_output_to_tensors(classification_output))
        self.assertEqual(classification_output_tensors, [scores, None])

        scores_new = array_ops.placeholder(dtypes.float32,
                                           1,
                                           name='scores_new')
        classification_output_new = (
            tpu_estimator._clone_export_output_with_tensors(
                classification_output, [scores_new, None]))
        self.assertEqual(classification_output_new.scores, scores_new)
    def test_classification_output_tensors_roundtrip_classes_only(self):
        classes = array_ops.placeholder(dtypes.string, 1, name='classes')
        classification_output = export_lib.ClassificationOutput(
            classes=classes)

        classification_output_tensors = (
            tpu_estimator._export_output_to_tensors(classification_output))
        self.assertEqual(classification_output_tensors, [None, classes])

        classes_new = array_ops.placeholder(dtypes.string,
                                            1,
                                            name='classes_new')
        classification_output_new = (
            tpu_estimator._clone_export_output_with_tensors(
                classification_output, [None, classes_new]))
        self.assertEqual(classification_output_new.classes, classes_new)
    def test_classification_output_tensors_roundtrip_classify_both(self):
        classes = array_ops.placeholder(dtypes.string, 1, name='classes')
        scores = array_ops.placeholder(dtypes.float32, 1, name='scores')
        classification_output = export_lib.ClassificationOutput(
            scores, classes)

        classification_output_tensors = (
            tpu_estimator._export_output_to_tensors(classification_output))
        self.assertSequenceEqual(classification_output_tensors,
                                 [scores, classes])

        classes_new = array_ops.placeholder(dtypes.string,
                                            1,
                                            name='classes_new')
        scores_new = array_ops.placeholder(dtypes.float32,
                                           1,
                                           name='scores_new')
        classification_output_new = (
            tpu_estimator._clone_export_output_with_tensors(
                classification_output, [scores_new, classes_new]))
        self.assertEqual(classification_output_new.classes, classes_new)
        self.assertEqual(classification_output_new.scores, scores_new)
    def test_predict_output_tensors_roundtrip(self):
        value1 = array_ops.placeholder(dtypes.float32, 1, name='value1')
        value2 = array_ops.placeholder(dtypes.float32, 1, name='value2')
        predict_output = export_lib.PredictOutput({
            'value1': value1,
            'value2': value2
        })
        export_output_tensors = tpu_estimator._export_output_to_tensors(
            predict_output)
        self.assertSameElements([value1, value2], export_output_tensors)
        self.assertLen(export_output_tensors, 2)

        tensors_new = [
            array_ops.identity(t, name=t.name.split(':')[0] + '_new')
            for t in export_output_tensors
        ]
        predict_output_new = tpu_estimator._clone_export_output_with_tensors(
            predict_output, tensors_new)
        outputs = predict_output_new.outputs
        self.assertLen(outputs, 2)
        self.assertEqual(outputs['value1'].name, 'value1_new:0')
        self.assertEqual(outputs['value2'].name, 'value2_new:0')