| File: Data\ISchemaBindableMapper.cs | Web Access |
| Project: src\src\Microsoft.ML.Core\Microsoft.ML.Core.csproj (Microsoft.ML.Core) |
// 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. using System; using System.Collections.Generic; using Microsoft.ML.Runtime; namespace Microsoft.ML.Data; /// <summary> /// A mapper that can be bound to a <see cref="RoleMappedSchema"/> (which encapsulates a <see cref="DataViewSchema"/> and has mappings from column kinds /// to columns of that schema). Binding an <see cref="ISchemaBindableMapper"/> to a <see cref="RoleMappedSchema"/> produces an /// <see cref="ISchemaBoundMapper"/>, which is an interface that has methods to return the names and indices of the input columns /// needed by the mapper to compute its output. The <see cref="ISchemaBoundRowMapper"/> is an extention to this interface, that /// can also produce an output <see cref="DataViewRow"/> given an input <see cref="DataViewRow"/>. The <see cref="DataViewRow"/> produced generally contains only the output columns of the mapper, and not /// the input columns (but there is nothing preventing an <see cref="ISchemaBoundRowMapper"/> from mapping input columns directly to outputs). /// This interface is implemented by wrappers of IValueMapper based predictors, which are predictors that take a single /// features column. New predictors can implement <see cref="ISchemaBindableMapper"/> directly. Implementing <see cref="ISchemaBindableMapper"/> /// includes implementing a corresponding <see cref="ISchemaBoundMapper"/> (or <see cref="ISchemaBoundRowMapper"/>) and a corresponding ISchema /// for the output schema of the <see cref="ISchemaBoundMapper"/>. In case the <see cref="ISchemaBoundRowMapper"/> interface is implemented, /// the SimpleRow class can be used in the <see cref="IRowToRowMapper.GetRow"/> method. /// </summary> [BestFriend] internal interface ISchemaBindableMapper { ISchemaBoundMapper Bind(IHostEnvironment env, RoleMappedSchema schema); } /// <summary> /// This interface is used to map a schema from input columns to output columns. The <see cref="ISchemaBoundMapper"/> should keep track /// of the input columns that are needed for the mapping. /// </summary> [BestFriend] internal interface ISchemaBoundMapper { /// <summary> /// The <see cref="RoleMappedSchema"/> that was passed to the <see cref="ISchemaBoundMapper"/> in the binding process. /// </summary> RoleMappedSchema InputRoleMappedSchema { get; } /// <summary> /// Gets schema of this mapper's output. /// </summary> DataViewSchema OutputSchema { get; } /// <summary> /// A property to get back the <see cref="ISchemaBindableMapper"/> that produced this <see cref="ISchemaBoundMapper"/>. /// </summary> ISchemaBindableMapper Bindable { get; } /// <summary> /// This method returns the binding information: which input columns are used and in what roles. /// </summary> IEnumerable<KeyValuePair<RoleMappedSchema.ColumnRole, string>> GetInputColumnRoles(); } /// <summary> /// This interface extends <see cref="ISchemaBoundMapper"/>. /// </summary> [BestFriend] internal interface ISchemaBoundRowMapper : ISchemaBoundMapper { /// <summary> /// Input schema accepted. /// </summary> DataViewSchema InputSchema { get; } /// <summary> /// Given a set of columns, from the newly generated ones, return the input columns that are needed to generate those output columns. /// </summary> IEnumerable<DataViewSchema.Column> GetDependenciesForNewColumns(IEnumerable<DataViewSchema.Column> dependingColumns); /// <summary> /// Get an <see cref="DataViewRow"/> with the indicated active columns, based on the input <paramref name="input"/>. /// Getting values on inactive columns of the returned row will throw. /// /// The <see cref="DataViewRow.Schema"/> of <paramref name="input"/> should be the same object as /// <see cref="InputSchema"/>. Implementors of this method should throw if that is not the case. Conversely, /// the returned value must have the same schema as <see cref="ISchemaBoundMapper.OutputSchema"/>. /// /// This method creates a live connection between the input <see cref="DataViewRow"/> and the output <see /// cref="DataViewRow"/>. In particular, when the getters of the output <see cref="DataViewRow"/> are invoked, they invoke the /// getters of the input row and base the output values on the current values of the input <see cref="DataViewRow"/>. /// The output <see cref="DataViewRow"/> values are re-computed when requested through the getters. Also, the returned /// <see cref="DataViewRow"/> will dispose <paramref name="input"/> when it is disposed. /// </summary> DataViewRow GetRow(DataViewRow input, IEnumerable<DataViewSchema.Column> activeColumns); }