@PublicEvolving
    public static <IN, OUT> TypeInformation<OUT> getMapReturnTypes(
            MapFunction<IN, OUT> mapInterface, TypeInformation<IN> inType) {
        return getMapReturnTypes(mapInterface, inType, null, false);
    }
@SuppressWarnings({"rawtypes", "unchecked"})
    @Test
    void testFunctionDependingPartialOnInput() {
        RichMapFunction<?, ?> function =
                new OneAppender<DoubleValue>() {
                    private static final long serialVersionUID = 1L;
                };

        TypeInformation<?> ti =
                TypeExtractor.getMapReturnTypes(
                        function,
                        (TypeInformation) TypeInformation.of(new TypeHint<DoubleValue>() {}));

        assertThat(ti.isTupleType()).isTrue();
        assertThat(ti.getArity()).isEqualTo(2);
        TupleTypeInfo<?> tti = (TupleTypeInfo<?>) ti;

        assertThat(tti.getTypeAt(0) instanceof ValueTypeInfo<?>).isTrue();
        ValueTypeInfo<?> vti = (ValueTypeInfo<?>) tti.getTypeAt(0);
        assertThat(vti.getTypeClass()).isEqualTo(DoubleValue.class);

        assertThat(tti.getTypeAt(1).isBasicType()).isTrue();
        assertThat(tti.getTypeAt(1).getTypeClass()).isEqualTo(Integer.class);
    }