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"/> > 0</c>. /// </summary> public static bool IsKnownSizeVector(this DataViewType columnType) => columnType.GetVectorSize() > 0;