public Impl(IHostEnvironment env, string name, IDataView input, OneToOneColumn col,
                        DataViewType typeDst, ValueMapper <T1, T2> map1, ValueMapper <T2, T3> map2 = null,
                        ValueGetter <VBuffer <ReadOnlyMemory <char> > > keyValueGetter             = null, ValueGetter <VBuffer <ReadOnlyMemory <char> > > slotNamesGetter = null)
                : base(env, name, new[] { col }, input, x => null)
            {
                Host.Assert(typeDst.RawType == typeof(T3));
                Host.AssertValue(map1);
                Host.Assert(map2 != null || typeof(T2) == typeof(T3));

                _typeDst = typeDst;
                _map1    = map1;
                _map2    = map2;

                if (keyValueGetter != null || slotNamesGetter != null)
                {
                    using (var bldr = Metadata.BuildMetadata(0))
                    {
                        if (keyValueGetter != null)
                        {
                            AnnotationUtils.AnnotationGetter <VBuffer <ReadOnlyMemory <char> > > mdGetter =
                                (int c, ref VBuffer <ReadOnlyMemory <char> > dst) => keyValueGetter(ref dst);
                            bldr.AddGetter(AnnotationUtils.Kinds.KeyValues, new VectorType(TextDataViewType.Instance, _typeDst.GetItemType().GetKeyCountAsInt32(Host)), mdGetter);
                        }
                        if (slotNamesGetter != null)
                        {
                            int vectorSize = _typeDst.GetVectorSize();
                            Host.Assert(vectorSize > 0);
                            AnnotationUtils.AnnotationGetter <VBuffer <ReadOnlyMemory <char> > > mdGetter =
                                (int c, ref VBuffer <ReadOnlyMemory <char> > dst) => slotNamesGetter(ref dst);
                            bldr.AddGetter(AnnotationUtils.Kinds.SlotNames, new VectorType(TextDataViewType.Instance, vectorSize), mdGetter);
                        }
                    }
                }
                Metadata.Seal();
            }
 private static DataViewType GetPredColType(DataViewType scoreType, ISchemaBoundRowMapper mapper) => new KeyDataViewType(typeof(uint), scoreType.GetVectorSize());
 /// <summary>
 /// Whether this is a vector type with known size. Returns false for non-vector types.
 /// Equivalent to <c><see cref="GetVectorSize"/> &gt; 0</c>.
 /// </summary>
 public static bool IsKnownSizeVector(this DataViewType columnType) => columnType.GetVectorSize() > 0;