File: Data\ITransposeDataView.cs
Web Access
Project: src\src\Microsoft.ML.Data\Microsoft.ML.Data.csproj (Microsoft.ML.Data)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
 
namespace Microsoft.ML.Data
{
    // REVIEW: There are a couple problems. Firstly, what to do about cases where
    // the number of rows exceeds int.MaxValue? Right now we just fail. Practically this makes
    // little difference; if we suppose the major user of this is FastTree, it can't handle
    // nearly that many examples anyway, but other applications may arise. (One possible solution:
    // do not return a slot type, but return a row count, and have the getter accessor be able
    // to define a slot range. Or a paged dataview, but that seems more involved.)
 
    /// <summary>
    /// A view of data where columns can optionally be accessed slot by slot, as opposed to row
    /// by row in a typical dataview. A slot-accessible column can be accessed with a slot-by-slot
    /// cursor via an <see cref="SlotCursor"/> returned by <see cref="GetSlotCursor(int)"/>
    /// (naturally, as opposed to row-by-row through an <see cref="DataViewRowCursor"/>). This interface
    /// is intended to be implemented by classes that want to provide an option for an alternate
    /// way of accessing the data stored in a <see cref="IDataView"/>.
    ///
    /// The interface only advertises that columns may be accessible in slot-wise fashion. The i-th column
    /// is accessible in this fashion iff <see cref="GetSlotType"/> with col=i doesn't return <see langword="null"/>.
    /// </summary>
    [BestFriend]
    internal interface ITransposeDataView : IDataView
    {
        /// <summary>
        /// Presents a cursor over the slots of a transposable column, or throws if the column
        /// is not transposable.
        /// </summary>
        SlotCursor GetSlotCursor(int col);
 
        /// <summary>
        /// <see cref="GetSlotType"/> (input argument is named col) specifies the type of all values at the col-th column of
        /// <see cref="IDataView"/>.  For example, if <see cref="IDataView.Schema"/>[i] is a scalar float column, then
        /// <see cref="GetSlotType"/> with col=i may return a <see cref="VectorDataViewType"/> whose <see cref="VectorDataViewType.ItemType"/>
        /// field is <see cref="NumberDataViewType.Single"/>. If the i-th column can't be iterated column-wisely, this function may
        /// return <see langword="null"/>.
        /// </summary>
        VectorDataViewType GetSlotType(int col);
    }
}