def test_iO16_default_fp16_output(
        self,
        float32_input_model_add_op,
        int32_input_model,
    ):
        """
        With minimum_deployment_target set >= iOS16, if the compute precision is
        set to fp16. By default, a fp16 i/o model is produced for fp32 models.
        However, if the users specify the dtype, the converter is going to respect that.
        """
        # Case 1: fp32 single output model
        mlmodel = ct.convert(
            float32_input_model_add_op,
            minimum_deployment_target=ct.target.iOS16,
        )
        assert_output_dtype(mlmodel, expected_type_str="fp16")
        verify_prediction(mlmodel)

        # Case 2: int32 single output model. No change made.
        mlmodel = ct.convert(
            int32_input_model,
            minimum_deployment_target=ct.target.iOS16,
        )
        assert_output_dtype(mlmodel, expected_type_str="int32")
        verify_prediction(mlmodel)

        # Case 3: fp32 single output model, with dtype set by the user
        mlmodel = ct.convert(
            float32_input_model_add_op,
            outputs=[ct.TensorType(dtype=np.float32)],
            minimum_deployment_target=ct.target.iOS16,
        )
        assert_output_dtype(mlmodel, expected_type_str="fp32")
        verify_prediction(mlmodel)

        With minimum_deployment_target set >= iOS16, if the compute precision is
        set to fp16. By default, a fp16 i/o model is produced for fp32 models.
        However, if the users specify the dtype, the converter is going to respect that.
        
coremltools/converters/mil/frontend/tensorflow/test/test_tf_conversion_api.py