def test_iO16_default_fp16_io_with_multiple_inputs(self, float32_two_input_model):
        """
        For the multiple inputs model, the converter only set the default dtype for
        inputs with unspecified dtype.
        """
        # Case 1: first input is set to fp32
        mlmodel = ct.convert(
            float32_two_input_model,
            inputs=[ct.TensorType(shape=(10, 20), dtype=np.float32), ct.TensorType(shape=(10, 20))],
            minimum_deployment_target=ct.target.iOS16,
        )
        assert_input_dtype(mlmodel, expected_type_str="fp32", index=0)
        assert_input_dtype(mlmodel, expected_type_str="fp16", index=1)
        assert_output_dtype(mlmodel, expected_type_str="fp16")
        assert_ops_in_mil_program(mlmodel, expected_op_list=["cast", "add"])

        # Case 2: second input is set to fp32
        mlmodel = ct.convert(
            float32_two_input_model,
            inputs=[ct.TensorType(shape=(10, 20)), ct.TensorType(shape=(10, 20), dtype=np.float32)],
            minimum_deployment_target=ct.target.iOS16,
        )
        assert_input_dtype(mlmodel, expected_type_str="fp16", index=0)
        assert_input_dtype(mlmodel, expected_type_str="fp32", index=1)
        assert_output_dtype(mlmodel, expected_type_str="fp16")
        assert_ops_in_mil_program(mlmodel, expected_op_list=["cast", "add"])

        # Case 3: both inputs are set to fp32
        mlmodel = ct.convert(
            float32_two_input_model,
            inputs=[
                ct.TensorType(shape=(10, 20), dtype=np.float32),
                ct.TensorType(shape=(10, 20), dtype=np.float32),
            ],
            minimum_deployment_target=ct.target.iOS16,
        )
        assert_input_dtype(mlmodel, expected_type_str="fp32", index=0)
        assert_input_dtype(mlmodel, expected_type_str="fp32", index=1)
        assert_output_dtype(mlmodel, expected_type_str="fp16")
        assert_ops_in_mil_program(mlmodel, expected_op_list=["cast", "cast", "add"])

        # Case 4: both inputs are not set
        mlmodel = ct.convert(
            float32_two_input_model,
            inputs=[ct.TensorType(shape=(10, 20)), ct.TensorType(shape=(10, 20))],
            minimum_deployment_target=ct.target.iOS16,
        )
        assert_input_dtype(mlmodel, expected_type_str="fp16", index=0)
        assert_input_dtype(mlmodel, expected_type_str="fp16", index=1)
        assert_output_dtype(mlmodel, expected_type_str="fp16")
        assert_ops_in_mil_program(mlmodel, expected_op_list=["add"])

        For the multiple inputs model, the converter only set the default dtype for
        inputs with unspecified dtype.
        
coremltools/converters/mil/frontend/torch/test/test_torch_conversion_api.py