diff --git a/src/Microsoft.ML.CpuMath/ProbabilityFunctions.cs b/src/Microsoft.ML.CpuMath/ProbabilityFunctions.cs
index db3e304379..3ce463f574 100644
--- a/src/Microsoft.ML.CpuMath/ProbabilityFunctions.cs
+++ b/src/Microsoft.ML.CpuMath/ProbabilityFunctions.cs
@@ -119,6 +119,8 @@ public static double Erfinv(double x)
/// One intepretation is, the value at which the standard normal CDF evaluates to p.
public static double Probit(double p)
{
+ Contracts.CheckParam(0 <= p && p <= 1, nameof(p), "Input probability should be in range 0 to 1.");
+
double q = p - 0.5;
double r = 0.0;
if (Math.Abs(q) <= 0.425)
@@ -135,8 +137,6 @@ public static double Probit(double p)
else
r = 1 - p;
- Contracts.CheckParam(r >= 0, nameof(p), "Illegal input value");
-
r = Math.Sqrt(-Math.Log(r));
double retval = 0.0;
if (r < 5)
diff --git a/src/Microsoft.ML.Data/DataLoadSave/DataOperationsCatalog.cs b/src/Microsoft.ML.Data/DataLoadSave/DataOperationsCatalog.cs
index 9d4e1292ca..60cce3a5b7 100644
--- a/src/Microsoft.ML.Data/DataLoadSave/DataOperationsCatalog.cs
+++ b/src/Microsoft.ML.Data/DataLoadSave/DataOperationsCatalog.cs
@@ -87,7 +87,7 @@ public IDataView FilterByKeyColumnFraction(IDataView input, string columnName, d
var type = input.Schema[columnName].Type;
if (type.GetKeyCount() == 0)
- throw Environment.ExceptSchemaMismatch(nameof(columnName), "filter", columnName, "a known cardinality key", type.ToString());
+ throw Environment.ExceptSchemaMismatch(nameof(columnName), "filter", columnName, "KeyType", type.ToString());
return new RangeFilter(Environment, input, columnName, lowerBound, upperBound, false);
}
}
diff --git a/src/Microsoft.ML.Data/DataView/TypedCursor.cs b/src/Microsoft.ML.Data/DataView/TypedCursor.cs
index 29437cce5b..2631fb2162 100644
--- a/src/Microsoft.ML.Data/DataView/TypedCursor.cs
+++ b/src/Microsoft.ML.Data/DataView/TypedCursor.cs
@@ -103,7 +103,7 @@ private TypedCursorable(IHostEnvironment env, IDataView data, bool ignoreMissing
{
if (ignoreMissingColumns)
continue;
- throw _host.Except("Column '{0}' not found in the data view", col.ColumnName);
+ throw _host.ExceptSchemaMismatch(nameof(_data.Schema), "", col.ColumnName);
}
var realColType = _data.Schema[colIndex].Type;
if (!IsCompatibleType(realColType, col.MemberInfo))
diff --git a/src/Microsoft.ML.Data/Evaluators/AnomalyDetectionEvaluator.cs b/src/Microsoft.ML.Data/Evaluators/AnomalyDetectionEvaluator.cs
index 143ecb44b5..e5fbc720bf 100644
--- a/src/Microsoft.ML.Data/Evaluators/AnomalyDetectionEvaluator.cs
+++ b/src/Microsoft.ML.Data/Evaluators/AnomalyDetectionEvaluator.cs
@@ -96,11 +96,11 @@ private protected override void CheckScoreAndLabelTypes(RoleMappedSchema schema)
var score = schema.GetUniqueColumn(MetadataUtils.Const.ScoreValueKind.Score);
var t = score.Type;
if (t != NumberType.Float)
- throw Host.Except("Score column '{0}' has type '{1}' but must be R4", score, t).MarkSensitive(MessageSensitivity.Schema);
+ throw Host.ExceptSchemaMismatch(nameof(schema), "score", score.Name, "float", t.ToString());
Host.Check(schema.Label.HasValue, "Could not find the label column");
t = schema.Label.Value.Type;
if (t != NumberType.Float && t.GetKeyCount() != 2)
- throw Host.Except("Label column '{0}' has type '{1}' but must be R4 or a 2-value key", schema.Label.Value.Name, t).MarkSensitive(MessageSensitivity.Schema);
+ throw Host.ExceptSchemaMismatch(nameof(schema), "label", schema.Label.Value.Name, "float or a KeyType with cardinality 2", t.ToString());
}
private protected override Aggregator GetAggregatorCore(RoleMappedSchema schema, string stratName)
@@ -631,13 +631,13 @@ private protected override void PrintFoldResultsCore(IChannel ch, Dictionary>(index);
if (!top.Schema.TryGetColumnIndex(AnomalyDetectionEvaluator.TopKResultsColumns.AnomalyScore, out index))
- throw Host.Except("Data view does not contain the 'Anomaly Score' column");
+ throw Host.ExceptSchemaMismatch(nameof(top.Schema), "anomaly score", AnomalyDetectionEvaluator.TopKResultsColumns.AnomalyScore);
var scoreGetter = cursor.GetGetter(index);
if (!top.Schema.TryGetColumnIndex(AnomalyDetectionEvaluator.TopKResultsColumns.Label, out index))
- throw Host.Except("Data view does not contain the 'Label' column");
+ throw Host.ExceptSchemaMismatch(nameof(top.Schema), "label", AnomalyDetectionEvaluator.TopKResultsColumns.Label);
var labelGetter = cursor.GetGetter(index);
bool hasRows = false;
@@ -671,7 +671,7 @@ private protected override void PrintFoldResultsCore(IChannel ch, Dictionary= 0)
{
Host.Assert(!string.IsNullOrEmpty(_probCol));
t = schema[_probIndex].Type;
if (t != NumberType.Float)
- throw Host.Except("Probability column '{0}' has type '{1}' but must be R4", _probCol, t);
+ throw Host.ExceptSchemaMismatch(nameof(schema), "probability", _probCol, "float", t.ToString());
}
else if (!_useRaw)
throw Host.Except("Cannot compute the predicted label from the probability column because it does not exist");
diff --git a/src/Microsoft.ML.Data/Evaluators/ClusteringEvaluator.cs b/src/Microsoft.ML.Data/Evaluators/ClusteringEvaluator.cs
index c81fab91d7..0229e422a6 100644
--- a/src/Microsoft.ML.Data/Evaluators/ClusteringEvaluator.cs
+++ b/src/Microsoft.ML.Data/Evaluators/ClusteringEvaluator.cs
@@ -100,13 +100,13 @@ private protected override void CheckScoreAndLabelTypes(RoleMappedSchema schema)
if (type != null && type != NumberType.Float && !(type is KeyType keyType && keyType.Count > 0))
{
throw Host.ExceptSchemaMismatch(nameof(schema), "label", schema.Label.Value.Name,
- "R4 or key of known cardinality", type.ToString());
+ "float or KeyType", type.ToString());
}
var score = schema.GetUniqueColumn(MetadataUtils.Const.ScoreValueKind.Score);
type = score.Type;
if (!(type is VectorType vectorType) || !vectorType.IsKnownSize || vectorType.ItemType != NumberType.Float)
- throw Host.ExceptSchemaMismatch(nameof(schema), "score", score.Name, "R4 vector of known size", type.ToString());
+ throw Host.ExceptSchemaMismatch(nameof(schema), "score", score.Name, "known-size vector of float", type.ToString());
}
private protected override void CheckCustomColumnTypesCore(RoleMappedSchema schema)
@@ -754,7 +754,7 @@ private void CheckInputColumnTypes(Schema schema)
var type = schema[(int) ScoreIndex].Type;
if (!(type is VectorType vectorType) || !vectorType.IsKnownSize || vectorType.ItemType != NumberType.Float)
- throw Host.Except("Score column '{0}' has type {1}, but must be a float vector of known-size", ScoreCol, type);
+ throw Host.ExceptSchemaMismatch(nameof(schema), "score", ScoreCol, "known-size vector of float", type.ToString());
}
}
diff --git a/src/Microsoft.ML.Data/Evaluators/EvaluatorBase.cs b/src/Microsoft.ML.Data/Evaluators/EvaluatorBase.cs
index a757daaab4..c7a547d367 100644
--- a/src/Microsoft.ML.Data/Evaluators/EvaluatorBase.cs
+++ b/src/Microsoft.ML.Data/Evaluators/EvaluatorBase.cs
@@ -486,9 +486,9 @@ protected PerInstanceEvaluatorBase(IHostEnvironment env, Schema schema, string s
LabelCol = labelCol;
if (!string.IsNullOrEmpty(LabelCol) && !schema.TryGetColumnIndex(LabelCol, out LabelIndex))
- throw Host.Except("Did not find the label column '{0}'", LabelCol);
+ throw Host.ExceptSchemaMismatch(nameof(schema), "label", LabelCol);
if (!schema.TryGetColumnIndex(ScoreCol, out ScoreIndex))
- throw Host.Except("Did not find column '{0}'", ScoreCol);
+ throw Host.ExceptSchemaMismatch(nameof(schema), "score", ScoreCol);
}
protected PerInstanceEvaluatorBase(IHostEnvironment env, ModelLoadContext ctx, Schema schema)
@@ -502,9 +502,9 @@ protected PerInstanceEvaluatorBase(IHostEnvironment env, ModelLoadContext ctx,
ScoreCol = ctx.LoadNonEmptyString();
LabelCol = ctx.LoadStringOrNull();
if (!string.IsNullOrEmpty(LabelCol) && !schema.TryGetColumnIndex(LabelCol, out LabelIndex))
- throw Host.Except($"Did not find the label column '{LabelCol}'");
+ throw Host.ExceptSchemaMismatch(nameof(schema), "label", LabelCol);
if (!schema.TryGetColumnIndex(ScoreCol, out ScoreIndex))
- throw Host.Except($"Did not find column '{ScoreCol}'");
+ throw Host.ExceptSchemaMismatch(nameof(schema), "score", ScoreCol);
}
public virtual void Save(ModelSaveContext ctx)
diff --git a/src/Microsoft.ML.Data/Evaluators/MultiClassClassifierEvaluator.cs b/src/Microsoft.ML.Data/Evaluators/MultiClassClassifierEvaluator.cs
index c6447281a4..448ee88e53 100644
--- a/src/Microsoft.ML.Data/Evaluators/MultiClassClassifierEvaluator.cs
+++ b/src/Microsoft.ML.Data/Evaluators/MultiClassClassifierEvaluator.cs
@@ -77,11 +77,11 @@ private protected override void CheckScoreAndLabelTypes(RoleMappedSchema schema)
var score = schema.GetUniqueColumn(MetadataUtils.Const.ScoreValueKind.Score);
var scoreType = score.Type as VectorType;
if (scoreType == null || scoreType.Size < 2 || scoreType.ItemType != NumberType.Float)
- throw Host.ExceptSchemaMismatch(nameof(schema), "score", score.Name, "vector of two or more items of type R4", scoreType.ToString());
+ throw Host.ExceptSchemaMismatch(nameof(schema), "score", score.Name, "vector of two or more items of type float", scoreType.ToString());
Host.CheckParam(schema.Label.HasValue, nameof(schema), "Could not find the label column");
var labelType = schema.Label.Value.Type;
if (labelType != NumberType.Float && labelType.GetKeyCount() <= 0)
- throw Host.ExceptSchemaMismatch(nameof(schema), "label", schema.Label.Value.Name, "float or a known-cardinality key", labelType.ToString());
+ throw Host.ExceptSchemaMismatch(nameof(schema), "label", schema.Label.Value.Name, "float or KeyType", labelType.ToString());
}
private protected override Aggregator GetAggregatorCore(RoleMappedSchema schema, string stratName)
@@ -815,10 +815,10 @@ private void CheckInputColumnTypes(Schema schema)
var scoreType = schema[ScoreIndex].Type as VectorType;
if (scoreType == null || scoreType.Size < 2 || scoreType.ItemType != NumberType.Float)
- throw Host.Except("Score column '{0}' has type '{1}' but must be a vector of two or more items of type R4", ScoreCol, scoreType);
+ throw Host.ExceptSchemaMismatch(nameof(schema), "score", ScoreCol, "vector of two or more items of type float", scoreType.ToString());
var labelType = schema[LabelIndex].Type;
if (labelType != NumberType.Float && labelType.GetKeyCount() <= 0)
- throw Host.Except("Label column '{0}' has type '{1}' but must be a float or a known-cardinality key", LabelCol, labelType);
+ throw Host.ExceptSchemaMismatch(nameof(schema), "label", LabelCol, "float or KeyType", labelType.ToString());
}
}
@@ -1000,7 +1000,7 @@ private protected override IDataView GetPerInstanceMetricsCore(IDataView perInst
// text file, since if there are different key counts the columns cannot be appended.
string labelName = schema.Label.Value.Name;
if (!perInst.Schema.TryGetColumnIndex(labelName, out int labelCol))
- throw Host.Except("Could not find column '{0}'", labelName);
+ throw Host.ExceptSchemaMismatch(nameof(schema), "label", labelName);
var labelType = perInst.Schema[labelCol].Type;
if (labelType is KeyType keyType && (!perInst.Schema[labelCol].HasKeyValues(keyType) || labelType.RawType != typeof(uint)))
{
diff --git a/src/Microsoft.ML.Data/Evaluators/MultiOutputRegressionEvaluator.cs b/src/Microsoft.ML.Data/Evaluators/MultiOutputRegressionEvaluator.cs
index 7be7cdae8c..5de03bcf8a 100644
--- a/src/Microsoft.ML.Data/Evaluators/MultiOutputRegressionEvaluator.cs
+++ b/src/Microsoft.ML.Data/Evaluators/MultiOutputRegressionEvaluator.cs
@@ -60,11 +60,11 @@ private protected override void CheckScoreAndLabelTypes(RoleMappedSchema schema)
var score = schema.GetUniqueColumn(MetadataUtils.Const.ScoreValueKind.Score);
var t = score.Type as VectorType;
if (t == null || !t.IsKnownSize || t.ItemType != NumberType.Float)
- throw Host.ExceptSchemaMismatch(nameof(schema), "score", score.Name, "known size vector of R4", t.ToString());
+ throw Host.ExceptSchemaMismatch(nameof(schema), "score", score.Name, "known-size vector of float", t.ToString());
Host.Check(schema.Label.HasValue, "Could not find the label column");
t = schema.Label.Value.Type as VectorType;
if (t == null || !t.IsKnownSize || (t.ItemType != NumberType.R4 && t.ItemType != NumberType.R8))
- throw Host.ExceptSchemaMismatch(nameof(schema), "label", schema.Label.Value.Name, "known size vector of R4 or R8", t.ToString());
+ throw Host.ExceptSchemaMismatch(nameof(schema), "label", schema.Label.Value.Name, "known-size vector of float or double", t.ToString());
}
private protected override Aggregator GetAggregatorCore(RoleMappedSchema schema, string stratName)
@@ -548,7 +548,7 @@ private void CheckInputColumnTypes(Schema schema, out VectorType labelType, out
var t = schema[LabelIndex].Type as VectorType;
if (t == null || !t.IsKnownSize || (t.ItemType != NumberType.R4 && t.ItemType != NumberType.R8))
- throw Host.Except("Label column '{0}' has type '{1}' but must be a known-size vector of R4 or R8", LabelCol, t);
+ throw Host.ExceptSchemaMismatch(nameof(schema), "label", LabelCol, "known-size vector of float or double", t.ToString());
labelType = new VectorType((PrimitiveType)t.ItemType, t.Size);
var slotNamesType = new VectorType(TextType.Instance, t.Size);
var builder = new MetadataBuilder();
@@ -557,7 +557,7 @@ private void CheckInputColumnTypes(Schema schema, out VectorType labelType, out
t = schema[ScoreIndex].Type as VectorType;
if (t == null || !t.IsKnownSize || t.ItemType != NumberType.Float)
- throw Host.Except("Score column '{0}' has type '{1}' but must be a known length vector of type R4", ScoreCol, t);
+ throw Host.ExceptSchemaMismatch(nameof(schema), "score", ScoreCol, "known-size vector of float", t.ToString());
scoreType = new VectorType((PrimitiveType)t.ItemType, t.Size);
builder = new MetadataBuilder();
builder.AddSlotNames(t.Size, CreateSlotNamesGetter(schema, ScoreIndex, scoreType.Size, "Predicted"));
diff --git a/src/Microsoft.ML.Data/Evaluators/QuantileRegressionEvaluator.cs b/src/Microsoft.ML.Data/Evaluators/QuantileRegressionEvaluator.cs
index 32e2f75d3a..01e1f2f70a 100644
--- a/src/Microsoft.ML.Data/Evaluators/QuantileRegressionEvaluator.cs
+++ b/src/Microsoft.ML.Data/Evaluators/QuantileRegressionEvaluator.cs
@@ -58,11 +58,11 @@ private protected override void CheckScoreAndLabelTypes(RoleMappedSchema schema)
var score = schema.GetUniqueColumn(MetadataUtils.Const.ScoreValueKind.Score);
var t = score.Type as VectorType;
if (t == null || t.Size == 0 || (t.ItemType != NumberType.R4 && t.ItemType != NumberType.R8))
- throw Host.ExceptSchemaMismatch(nameof(schema), "score", score.Name, "vector of type R4 or R8", t.ToString());
+ throw Host.ExceptSchemaMismatch(nameof(schema), "score", score.Name, "vector of float or double", t.ToString());
Host.CheckParam(schema.Label.HasValue, nameof(schema), "Must contain a label column");
var labelType = schema.Label.Value.Type;
if (labelType != NumberType.R4)
- throw Host.ExceptSchemaMismatch(nameof(schema), "label", schema.Label.Value.Name, "R4", t.ToString());
+ throw Host.ExceptSchemaMismatch(nameof(schema), "label", schema.Label.Value.Name, "float", t.ToString());
}
private protected override Aggregator GetAggregatorCore(RoleMappedSchema schema, string stratName)
@@ -446,13 +446,13 @@ private void CheckInputColumnTypes(Schema schema)
var t = schema[(int)LabelIndex].Type;
if (t != NumberType.R4)
- throw Host.Except("Label column '{0}' has type '{1}' but must be R4", LabelCol, t);
+ throw Host.ExceptSchemaMismatch(nameof(schema), "label", LabelCol, "float", t.ToString());
VectorType scoreType = schema[ScoreIndex].Type as VectorType;
if (scoreType == null || scoreType.Size == 0 || (scoreType.ItemType != NumberType.R4 && scoreType.ItemType != NumberType.R8))
{
- throw Host.Except(
- "Score column '{0}' has type '{1}' but must be a known length vector of type R4 or R8", ScoreCol, t);
+ throw Host.ExceptSchemaMismatch(nameof(schema), "score", ScoreCol, "known-size vector of float or double", t.ToString());
+
}
}
}
diff --git a/src/Microsoft.ML.Data/Evaluators/RegressionEvaluator.cs b/src/Microsoft.ML.Data/Evaluators/RegressionEvaluator.cs
index b04634b2c3..bbf5ed84d1 100644
--- a/src/Microsoft.ML.Data/Evaluators/RegressionEvaluator.cs
+++ b/src/Microsoft.ML.Data/Evaluators/RegressionEvaluator.cs
@@ -57,11 +57,11 @@ private protected override void CheckScoreAndLabelTypes(RoleMappedSchema schema)
var score = schema.GetUniqueColumn(MetadataUtils.Const.ScoreValueKind.Score);
var t = score.Type;
if (t != NumberType.Float)
- throw Host.ExceptSchemaMismatch(nameof(schema), "score", score.Name, "R4", t.ToString());
+ throw Host.ExceptSchemaMismatch(nameof(schema), "score", score.Name, "float", t.ToString());
Host.CheckParam(schema.Label.HasValue, nameof(schema), "Could not find the label column");
t = schema.Label.Value.Type;
if (t != NumberType.R4)
- throw Host.ExceptSchemaMismatch(nameof(schema), "label", schema.Label.Value.Name, "R4", t.ToString());
+ throw Host.ExceptSchemaMismatch(nameof(schema), "label", schema.Label.Value.Name, "float", t.ToString());
}
private protected override Aggregator GetAggregatorCore(RoleMappedSchema schema, string stratName)
@@ -319,11 +319,11 @@ private void CheckInputColumnTypes(Schema schema)
var t = schema[(int) LabelIndex].Type;
if (t != NumberType.R4)
- throw Host.Except("Label column '{0}' has type '{1}' but must be R4", LabelCol, t);
+ throw Host.ExceptSchemaMismatch(nameof(schema), "label", LabelCol, "float", t.ToString());
t = schema[ScoreIndex].Type;
if (t != NumberType.Float)
- throw Host.Except("Score column '{0}' has type '{1}' but must be R4", ScoreCol, t);
+ throw Host.ExceptSchemaMismatch(nameof(schema), "score", ScoreCol, "float", t.ToString());
}
}
diff --git a/src/Microsoft.ML.Data/Prediction/CalibratorCatalog.cs b/src/Microsoft.ML.Data/Prediction/CalibratorCatalog.cs
index f4b3a74e61..ca384c0e4e 100644
--- a/src/Microsoft.ML.Data/Prediction/CalibratorCatalog.cs
+++ b/src/Microsoft.ML.Data/Prediction/CalibratorCatalog.cs
@@ -94,14 +94,14 @@ protected CalibratorEstimatorBase(IHostEnvironment env,
/// The input .
SchemaShape IEstimator>.GetOutputSchema(SchemaShape inputSchema)
{
- Action checkColumnValid = (SchemaShape.Column column, string expected) =>
+ Action checkColumnValid = (SchemaShape.Column column, string columnRole) =>
{
if (column.IsValid)
{
if (!inputSchema.TryFindColumn(column.Name, out var outCol))
- throw Host.Except($"{expected} column '{column.Name}' is not found");
+ throw Host.ExceptSchemaMismatch(nameof(inputSchema), columnRole, column.Name);
if (!column.IsCompatibleWith(outCol))
- throw Host.Except($"{expected} column '{column.Name}' is not compatible");
+ throw Host.ExceptSchemaMismatch(nameof(inputSchema), columnRole, column.Name, column.GetTypeString(), outCol.GetTypeString());
}
};
diff --git a/src/Microsoft.ML.Data/Scorers/PredictionTransformer.cs b/src/Microsoft.ML.Data/Scorers/PredictionTransformer.cs
index d7b3eda05d..78c17c857c 100644
--- a/src/Microsoft.ML.Data/Scorers/PredictionTransformer.cs
+++ b/src/Microsoft.ML.Data/Scorers/PredictionTransformer.cs
@@ -177,7 +177,7 @@ public SingleFeaturePredictionTransformerBase(IHost host, TModel model, Schema t
if (featureColumn == null)
FeatureColumnType = null;
else if (!trainSchema.TryGetColumnIndex(featureColumn, out int col))
- throw Host.ExceptSchemaMismatch(nameof(featureColumn), RoleMappedSchema.ColumnRole.Feature.Value, featureColumn);
+ throw Host.ExceptSchemaMismatch(nameof(featureColumn), "feature", featureColumn);
else
FeatureColumnType = trainSchema[col].Type;
@@ -192,7 +192,7 @@ internal SingleFeaturePredictionTransformerBase(IHost host, ModelLoadContext ctx
if (FeatureColumn == null)
FeatureColumnType = null;
else if (!TrainSchema.TryGetColumnIndex(FeatureColumn, out int col))
- throw Host.ExceptSchemaMismatch(nameof(FeatureColumn), RoleMappedSchema.ColumnRole.Feature.Value, FeatureColumn);
+ throw Host.ExceptSchemaMismatch(nameof(FeatureColumn), "feature", FeatureColumn);
else
FeatureColumnType = TrainSchema[col].Type;
@@ -206,9 +206,9 @@ public override Schema GetOutputSchema(Schema inputSchema)
if (FeatureColumn != null)
{
if (!inputSchema.TryGetColumnIndex(FeatureColumn, out int col))
- throw Host.ExceptSchemaMismatch(nameof(inputSchema), RoleMappedSchema.ColumnRole.Feature.Value, FeatureColumn, FeatureColumnType.ToString(), null);
+ throw Host.ExceptSchemaMismatch(nameof(inputSchema), "feature", FeatureColumn);
if (!inputSchema[col].Type.Equals(FeatureColumnType))
- throw Host.ExceptSchemaMismatch(nameof(inputSchema), RoleMappedSchema.ColumnRole.Feature.Value, FeatureColumn, FeatureColumnType.ToString(), inputSchema[col].Type.ToString());
+ throw Host.ExceptSchemaMismatch(nameof(inputSchema), "feature", FeatureColumn, FeatureColumnType.ToString(), inputSchema[col].Type.ToString());
}
return Transform(new EmptyDataView(Host, inputSchema)).Schema;
diff --git a/src/Microsoft.ML.Data/Training/TrainerEstimatorBase.cs b/src/Microsoft.ML.Data/Training/TrainerEstimatorBase.cs
index eb6af5f57f..7db8d2e47d 100644
--- a/src/Microsoft.ML.Data/Training/TrainerEstimatorBase.cs
+++ b/src/Microsoft.ML.Data/Training/TrainerEstimatorBase.cs
@@ -95,16 +95,18 @@ private void CheckInputSchema(SchemaShape inputSchema)
{
// Verify that all required input columns are present, and are of the same type.
if (!inputSchema.TryFindColumn(FeatureColumn.Name, out var featureCol))
- throw Host.Except($"Feature column '{FeatureColumn.Name}' is not found");
+ throw Host.ExceptSchemaMismatch(nameof(inputSchema), "feature", FeatureColumn.Name);
if (!FeatureColumn.IsCompatibleWith(featureCol))
- throw Host.Except($"Feature column '{FeatureColumn.Name}' is not compatible");
+ throw Host.ExceptSchemaMismatch(nameof(inputSchema), "feature", FeatureColumn.Name,
+ FeatureColumn.GetTypeString(), featureCol.GetTypeString());
if (WeightColumn.IsValid)
{
if (!inputSchema.TryFindColumn(WeightColumn.Name, out var weightCol))
- throw Host.Except($"Weight column '{WeightColumn.Name}' is not found");
+ throw Host.ExceptSchemaMismatch(nameof(inputSchema), "weight", WeightColumn.Name);
if (!WeightColumn.IsCompatibleWith(weightCol))
- throw Host.Except($"Weight column '{WeightColumn.Name}' is not compatible");
+ throw Host.ExceptSchemaMismatch(nameof(inputSchema), "weight", WeightColumn.Name,
+ WeightColumn.GetTypeString(), weightCol.GetTypeString());
}
// Special treatment for label column: we allow different types of labels, so the trainers
@@ -112,7 +114,7 @@ private void CheckInputSchema(SchemaShape inputSchema)
if (LabelColumn.IsValid)
{
if (!inputSchema.TryFindColumn(LabelColumn.Name, out var labelCol))
- throw Host.Except($"Label column '{LabelColumn.Name}' is not found");
+ throw Host.ExceptSchemaMismatch(nameof(inputSchema), "label", LabelColumn.Name);
CheckLabelCompatible(labelCol);
}
}
@@ -123,7 +125,8 @@ protected virtual void CheckLabelCompatible(SchemaShape.Column labelCol)
Host.Assert(LabelColumn.IsValid);
if (!LabelColumn.IsCompatibleWith(labelCol))
- throw Host.Except($"Label column '{LabelColumn.Name}' is not compatible");
+ throw Host.ExceptSchemaMismatch(nameof(labelCol), "label", WeightColumn.Name,
+ LabelColumn.GetTypeString(), labelCol.GetTypeString());
}
protected TTransformer TrainTransformer(IDataView trainSet,
diff --git a/src/Microsoft.ML.Data/Transforms/FeatureContributionCalculationTransform.cs b/src/Microsoft.ML.Data/Transforms/FeatureContributionCalculationTransform.cs
index 66f3f92aca..dd49ed484c 100644
--- a/src/Microsoft.ML.Data/Transforms/FeatureContributionCalculationTransform.cs
+++ b/src/Microsoft.ML.Data/Transforms/FeatureContributionCalculationTransform.cs
@@ -225,7 +225,7 @@ public Mapper(FeatureContributionCalculatingTransformer parent, Schema schema)
throw Host.ExceptSchemaMismatch(nameof(schema), "input", _parent.ColumnPairs[0].inputColumnName);
_featureColumnType = schema[_featureColumnIndex].Type as VectorType;
if (_featureColumnType == null || _featureColumnType.ItemType != NumberType.R4)
- throw Host.ExceptSchemaMismatch(nameof(schema), "feature column", _parent.ColumnPairs[0].inputColumnName, "Expected type is vector of float.", _featureColumnType.ItemType.ToString());
+ throw Host.ExceptSchemaMismatch(nameof(schema), "feature", _parent.ColumnPairs[0].inputColumnName, "vector of float.", _featureColumnType.ItemType.ToString());
if (InputSchema[_featureColumnIndex].HasSlotNames(_featureColumnType.Size))
InputSchema[_featureColumnIndex].Metadata.GetValue(MetadataUtils.Kinds.SlotNames, ref _slotNames);
@@ -320,7 +320,7 @@ public override SchemaShape GetOutputSchema(SchemaShape inputSchema)
throw Host.ExceptSchemaMismatch(nameof(inputSchema), "input", _featureColumn);
// Check that the feature column is of the correct type: a vector of float.
if (col.ItemType != NumberType.R4 || col.Kind != SchemaShape.Column.VectorKind.Vector)
- throw Host.ExceptSchemaMismatch(nameof(inputSchema), "feature column", _featureColumn, "Expected type is vector of float.", col.GetTypeString());
+ throw Host.ExceptSchemaMismatch(nameof(inputSchema), "column", _featureColumn, "vector of float.", col.GetTypeString());
// Build output schemaShape.
var result = inputSchema.ToDictionary(x => x.Name);
diff --git a/src/Microsoft.ML.Data/Transforms/KeyToValue.cs b/src/Microsoft.ML.Data/Transforms/KeyToValue.cs
index f0bba8d894..0fb1ca6e75 100644
--- a/src/Microsoft.ML.Data/Transforms/KeyToValue.cs
+++ b/src/Microsoft.ML.Data/Transforms/KeyToValue.cs
@@ -524,7 +524,7 @@ public override SchemaShape GetOutputSchema(SchemaShape inputSchema)
if (!inputSchema.TryFindColumn(colInfo.inputColumnName, out var col))
throw Host.ExceptSchemaMismatch(nameof(inputSchema), "input", colInfo.inputColumnName);
if (!col.IsKey)
- throw Host.ExceptSchemaMismatch(nameof(inputSchema), "input", colInfo.inputColumnName, "key type", col.GetTypeString());
+ throw Host.ExceptSchemaMismatch(nameof(inputSchema), "input", colInfo.inputColumnName, "KeyType", col.GetTypeString());
if (!col.Metadata.TryFindColumn(MetadataUtils.Kinds.KeyValues, out var keyMetaCol))
throw Host.ExceptParam(nameof(inputSchema), $"Input column '{colInfo.inputColumnName}' doesn't contain key values metadata");
diff --git a/src/Microsoft.ML.Data/Transforms/NAFilter.cs b/src/Microsoft.ML.Data/Transforms/NAFilter.cs
index d44dd36e4c..f682a8da6d 100644
--- a/src/Microsoft.ML.Data/Transforms/NAFilter.cs
+++ b/src/Microsoft.ML.Data/Transforms/NAFilter.cs
@@ -146,13 +146,13 @@ public NAFilter(IHost host, ModelLoadContext ctx, IDataView input)
string src = ctx.LoadNonEmptyString();
int index;
if (!schema.TryGetColumnIndex(src, out index))
- throw Host.Except("Source column '{0}' not found", src);
+ throw Host.ExceptSchemaMismatch(nameof(schema), "source", src);
if (_srcIndexToInfoIndex.ContainsKey(index))
throw Host.Except("Source column '{0}' specified multiple times", src);
var type = schema[index].Type;
if (!TestType(type))
- throw Host.Except($"Column '{src}' has type {type} which does not support missing values, so we cannot filter on them", src);
+ throw Host.ExceptSchemaMismatch(nameof(schema), "source", src, "scalar or vector of float, double or KeyType", type.ToString());
_infos[i] = new ColInfo(index, type);
_srcIndexToInfoIndex.Add(index, i);
diff --git a/src/Microsoft.ML.Data/Transforms/Normalizer.cs b/src/Microsoft.ML.Data/Transforms/Normalizer.cs
index e5091f30cf..76626fe7e9 100644
--- a/src/Microsoft.ML.Data/Transforms/Normalizer.cs
+++ b/src/Microsoft.ML.Data/Transforms/Normalizer.cs
@@ -255,10 +255,10 @@ public SchemaShape GetOutputSchema(SchemaShape inputSchema)
if (!inputSchema.TryFindColumn(colInfo.InputColumnName, out var col))
throw _host.ExceptSchemaMismatch(nameof(inputSchema), "input", colInfo.InputColumnName);
if (col.Kind == SchemaShape.Column.VectorKind.VariableVector)
- throw _host.ExceptSchemaMismatch(nameof(inputSchema), "input", colInfo.InputColumnName, "fixed-size vector or scalar", col.GetTypeString());
+ throw _host.ExceptSchemaMismatch(nameof(inputSchema), "input", colInfo.InputColumnName, "known-size vector or scalar", col.GetTypeString());
if (!col.ItemType.Equals(NumberType.R4) && !col.ItemType.Equals(NumberType.R8))
- throw _host.ExceptSchemaMismatch(nameof(inputSchema), "input", colInfo.InputColumnName, "vector or scalar of R4 or R8", col.GetTypeString());
+ throw _host.ExceptSchemaMismatch(nameof(inputSchema), "input", colInfo.InputColumnName, "vector or scalar of float or double", col.GetTypeString());
var isNormalizedMeta = new SchemaShape.Column(MetadataUtils.Kinds.IsNormalized, SchemaShape.Column.VectorKind.Scalar,
BoolType.Instance, false);
diff --git a/src/Microsoft.ML.Data/Transforms/RangeFilter.cs b/src/Microsoft.ML.Data/Transforms/RangeFilter.cs
index ce3e21bd70..8191de206e 100644
--- a/src/Microsoft.ML.Data/Transforms/RangeFilter.cs
+++ b/src/Microsoft.ML.Data/Transforms/RangeFilter.cs
@@ -152,11 +152,11 @@ private RangeFilter(IHost host, ModelLoadContext ctx, IDataView input)
var column = ctx.LoadNonEmptyString();
var schema = Source.Schema;
if (!schema.TryGetColumnIndex(column, out _index))
- throw Host.Except("column", "Source column '{0}' not found", column);
+ throw Host.ExceptSchemaMismatch(nameof(schema), "source", column);
_type = schema[_index].Type;
if (_type != NumberType.R4 && _type != NumberType.R8 && _type.GetKeyCount() == 0)
- throw Host.Except("column", "Column '{0}' does not have compatible type", column);
+ throw Host.ExceptSchemaMismatch(nameof(schema), "source", column, "float, double or KeyType", _type.ToString());
_min = ctx.Reader.ReadDouble();
_max = ctx.Reader.ReadDouble();
diff --git a/src/Microsoft.ML.Data/Transforms/TransformBase.cs b/src/Microsoft.ML.Data/Transforms/TransformBase.cs
index 8a34204b1e..ec8dec1af9 100644
--- a/src/Microsoft.ML.Data/Transforms/TransformBase.cs
+++ b/src/Microsoft.ML.Data/Transforms/TransformBase.cs
@@ -373,7 +373,7 @@ public static Bindings Create(OneToOneTransformBase parent, ModelLoadContext ctx
int colSrc;
if (!inputSchema.TryGetColumnIndex(src, out colSrc))
- throw host.Except("Source column '{0}' is required but not found", src);
+ throw host.ExceptSchemaMismatch(nameof(inputSchema), "source", src);
var type = inputSchema[colSrc].Type;
if (testType != null)
{
diff --git a/src/Microsoft.ML.EntryPoints/FeatureCombiner.cs b/src/Microsoft.ML.EntryPoints/FeatureCombiner.cs
index 10a724c327..006f990b7f 100644
--- a/src/Microsoft.ML.EntryPoints/FeatureCombiner.cs
+++ b/src/Microsoft.ML.EntryPoints/FeatureCombiner.cs
@@ -234,7 +234,7 @@ public static CommonOutputs.TransformOutput PrepareClassificationLabel(IHostEnvi
var labelCol = input.Data.Schema.GetColumnOrNull(input.LabelColumn);
if (!labelCol.HasValue)
- throw host.ExceptSchemaMismatch(nameof(input), "Label", input.LabelColumn);
+ throw host.ExceptSchemaMismatch(nameof(input), "predicted label", input.LabelColumn);
var labelType = labelCol.Value.Type;
if (labelType is KeyType || labelType is BoolType)
@@ -270,7 +270,7 @@ public static CommonOutputs.TransformOutput ConvertPredictedLabel(IHostEnvironme
var predictedLabelCol = input.Data.Schema.GetColumnOrNull(input.PredictedLabelColumn);
if (!predictedLabelCol.HasValue)
- throw host.ExceptSchemaMismatch(nameof(input), "PredictedLabel",input.PredictedLabelColumn);
+ throw host.ExceptSchemaMismatch(nameof(input), "label", input.PredictedLabelColumn);
var predictedLabelType = predictedLabelCol.Value.Type;
if (predictedLabelType is NumberType || predictedLabelType is BoolType)
{
diff --git a/src/Microsoft.ML.FastTree/FastTreeRanking.cs b/src/Microsoft.ML.FastTree/FastTreeRanking.cs
index 591b16d326..2cca0b0add 100644
--- a/src/Microsoft.ML.FastTree/FastTreeRanking.cs
+++ b/src/Microsoft.ML.FastTree/FastTreeRanking.cs
@@ -101,7 +101,7 @@ protected override void CheckLabelCompatible(SchemaShape.Column labelCol)
Contracts.Assert(labelCol.IsValid);
Action error =
- () => throw Host.ExceptSchemaMismatch(nameof(labelCol), RoleMappedSchema.ColumnRole.Label.Value, labelCol.Name, "R4 or a Key", labelCol.GetTypeString());
+ () => throw Host.ExceptSchemaMismatch(nameof(labelCol), "label", labelCol.Name, "float or KeyType", labelCol.GetTypeString());
if (labelCol.Kind != SchemaShape.Column.VectorKind.Scalar)
error();
diff --git a/src/Microsoft.ML.FastTree/TreeEnsembleFeaturizer.cs b/src/Microsoft.ML.FastTree/TreeEnsembleFeaturizer.cs
index b1cb260163..2a400d034d 100644
--- a/src/Microsoft.ML.FastTree/TreeEnsembleFeaturizer.cs
+++ b/src/Microsoft.ML.FastTree/TreeEnsembleFeaturizer.cs
@@ -720,7 +720,7 @@ private static IDataView AppendLabelTransform(IHostEnvironment env, IChannel ch,
var col = input.Schema.GetColumnOrNull(labelName);
if (!col.HasValue)
- throw ch.ExceptSchemaMismatch(nameof(input), "Label", labelName);
+ throw ch.ExceptSchemaMismatch(nameof(input), "label", labelName);
ColumnType labelType = col.Value.Type;
if (!(labelType is KeyType))
diff --git a/src/Microsoft.ML.LightGBM/LightGbmRankingTrainer.cs b/src/Microsoft.ML.LightGBM/LightGbmRankingTrainer.cs
index a1860d569f..6c36cf390f 100644
--- a/src/Microsoft.ML.LightGBM/LightGbmRankingTrainer.cs
+++ b/src/Microsoft.ML.LightGBM/LightGbmRankingTrainer.cs
@@ -141,7 +141,7 @@ protected override void CheckLabelCompatible(SchemaShape.Column labelCol)
Contracts.Assert(labelCol.IsValid);
Action error =
- () => throw Host.ExceptSchemaMismatch(nameof(labelCol), RoleMappedSchema.ColumnRole.Label.Value, labelCol.Name, "R4 or a Key", labelCol.GetTypeString());
+ () => throw Host.ExceptSchemaMismatch(nameof(labelCol), "label", labelCol.Name, "float or KeyType", labelCol.GetTypeString());
if (labelCol.Kind != SchemaShape.Column.VectorKind.Scalar)
error();
diff --git a/src/Microsoft.ML.OnnxTransform/OnnxTransform.cs b/src/Microsoft.ML.OnnxTransform/OnnxTransform.cs
index a46e7c963e..79d7894db3 100644
--- a/src/Microsoft.ML.OnnxTransform/OnnxTransform.cs
+++ b/src/Microsoft.ML.OnnxTransform/OnnxTransform.cs
@@ -559,7 +559,7 @@ public override SchemaShape GetOutputSchema(SchemaShape inputSchema)
if (!inputSchema.TryFindColumn(input, out var col))
throw Host.ExceptSchemaMismatch(nameof(inputSchema), "input", input);
if (!(col.Kind == SchemaShape.Column.VectorKind.VariableVector || col.Kind == SchemaShape.Column.VectorKind.Vector))
- throw Host.ExceptSchemaMismatch(nameof(inputSchema), "input", input, nameof(VectorType), col.GetTypeString());
+ throw Host.ExceptSchemaMismatch(nameof(inputSchema), "input", input, "vector", col.GetTypeString());
var inputsInfo = Transformer.Model.ModelInfo.InputsInfo;
var idx = Transformer.Model.InputNames.IndexOf(input);
diff --git a/src/Microsoft.ML.PCA/PcaTransformer.cs b/src/Microsoft.ML.PCA/PcaTransformer.cs
index ec8704c5c7..0fbce95ffd 100644
--- a/src/Microsoft.ML.PCA/PcaTransformer.cs
+++ b/src/Microsoft.ML.PCA/PcaTransformer.cs
@@ -551,7 +551,7 @@ internal static void ValidatePcaInput(IExceptionContext ectx, string name, Colum
string inputSchema; // just used for the excpections
if (!(type is VectorType vectorType && vectorType.Size > 1 && vectorType.ItemType.Equals(NumberType.R4)))
- throw ectx.ExceptSchemaMismatch(nameof(inputSchema), "input", name, "vector of floats with fixed size greater than 1", type.ToString());
+ throw ectx.ExceptSchemaMismatch(nameof(inputSchema), "input", name, "known-size vector of float of two or more items", type.ToString());
}
private sealed class Mapper : OneToOneMapperBase
diff --git a/src/Microsoft.ML.Recommender/MatrixFactorizationPredictor.cs b/src/Microsoft.ML.Recommender/MatrixFactorizationPredictor.cs
index a967692747..e40740e2e0 100644
--- a/src/Microsoft.ML.Recommender/MatrixFactorizationPredictor.cs
+++ b/src/Microsoft.ML.Recommender/MatrixFactorizationPredictor.cs
@@ -407,10 +407,10 @@ public MatrixFactorizationPredictionTransformer(IHostEnvironment env, MatrixFact
MatrixRowIndexColumnName = matrixRowIndexColumnName;
if (!trainSchema.TryGetColumnIndex(MatrixColumnIndexColumnName, out int xCol))
- throw Host.ExceptSchemaMismatch(nameof(MatrixColumnIndexColumnName), RecommenderUtils.MatrixColumnIndexKind.Value, MatrixColumnIndexColumnName);
+ throw Host.ExceptSchemaMismatch(nameof(MatrixColumnIndexColumnName), "matrixColumnIndex", MatrixColumnIndexColumnName);
MatrixColumnIndexColumnType = trainSchema[xCol].Type;
if (!trainSchema.TryGetColumnIndex(MatrixRowIndexColumnName, out int yCol))
- throw Host.ExceptSchemaMismatch(nameof(yCol), RecommenderUtils.MatrixRowIndexKind.Value, MatrixRowIndexColumnName);
+ throw Host.ExceptSchemaMismatch(nameof(yCol), "matrixRowIndex", MatrixRowIndexColumnName);
MatrixRowIndexColumnType = trainSchema[yCol].Type;
BindableMapper = ScoreUtils.GetSchemaBindableMapper(Host, model);
@@ -445,11 +445,11 @@ public MatrixFactorizationPredictionTransformer(IHostEnvironment host, ModelLoad
MatrixRowIndexColumnName = ctx.LoadString();
if (!TrainSchema.TryGetColumnIndex(MatrixColumnIndexColumnName, out int xCol))
- throw Host.ExceptSchemaMismatch(nameof(MatrixColumnIndexColumnName), RecommenderUtils.MatrixColumnIndexKind.Value, MatrixColumnIndexColumnName);
+ throw Host.ExceptSchemaMismatch(nameof(MatrixColumnIndexColumnName), "matrixColumnIndex", MatrixColumnIndexColumnName);
MatrixColumnIndexColumnType = TrainSchema[xCol].Type;
if (!TrainSchema.TryGetColumnIndex(MatrixRowIndexColumnName, out int yCol))
- throw Host.ExceptSchemaMismatch(nameof(MatrixRowIndexColumnName), RecommenderUtils.MatrixRowIndexKind.Value, MatrixRowIndexColumnName);
+ throw Host.ExceptSchemaMismatch(nameof(MatrixRowIndexColumnName), "matrixRowIndex", MatrixRowIndexColumnName);
MatrixRowIndexColumnType = TrainSchema[yCol].Type;
BindableMapper = ScoreUtils.GetSchemaBindableMapper(Host, Model);
@@ -462,9 +462,9 @@ public MatrixFactorizationPredictionTransformer(IHostEnvironment host, ModelLoad
public override Schema GetOutputSchema(Schema inputSchema)
{
if (!inputSchema.TryGetColumnIndex(MatrixColumnIndexColumnName, out int xCol))
- throw Host.ExceptSchemaMismatch(nameof(inputSchema), RecommenderUtils.MatrixColumnIndexKind.Value, MatrixColumnIndexColumnName);
+ throw Host.ExceptSchemaMismatch(nameof(inputSchema), "matrixColumnIndex", MatrixColumnIndexColumnName);
if (!inputSchema.TryGetColumnIndex(MatrixRowIndexColumnName, out int yCol))
- throw Host.ExceptSchemaMismatch(nameof(inputSchema), RecommenderUtils.MatrixRowIndexKind.Value, MatrixRowIndexColumnName);
+ throw Host.ExceptSchemaMismatch(nameof(inputSchema), "matrixRowIndex", MatrixRowIndexColumnName);
return Transform(new EmptyDataView(Host, inputSchema)).Schema;
}
diff --git a/src/Microsoft.ML.Recommender/MatrixFactorizationTrainer.cs b/src/Microsoft.ML.Recommender/MatrixFactorizationTrainer.cs
index f7a47cd31c..c3696d22bf 100644
--- a/src/Microsoft.ML.Recommender/MatrixFactorizationTrainer.cs
+++ b/src/Microsoft.ML.Recommender/MatrixFactorizationTrainer.cs
@@ -431,24 +431,25 @@ public SchemaShape GetOutputSchema(SchemaShape inputSchema)
{
Host.CheckValue(inputSchema, nameof(inputSchema));
- void CheckColumnsCompatible(SchemaShape.Column cachedColumn, string expectedColumnName)
+ void CheckColumnsCompatible(SchemaShape.Column cachedColumn, string columnRole)
{
if (!inputSchema.TryFindColumn(cachedColumn.Name, out var col))
- throw Host.ExceptSchemaMismatch(nameof(col), expectedColumnName, expectedColumnName);
+ throw Host.ExceptSchemaMismatch(nameof(col), columnRole, cachedColumn.Name);
if (!cachedColumn.IsCompatibleWith(col))
- throw Host.Except($"{expectedColumnName} column '{cachedColumn.Name}' is not compatible");
+ throw Host.ExceptSchemaMismatch(nameof(inputSchema), columnRole, cachedColumn.Name,
+ cachedColumn.GetTypeString(), col.GetTypeString());
}
// Check if label column is good.
var labelColumn = new SchemaShape.Column(LabelName, SchemaShape.Column.VectorKind.Scalar, NumberType.R4, false);
- CheckColumnsCompatible(labelColumn, LabelName);
+ CheckColumnsCompatible(labelColumn, "label");
// Check if columns of matrix's row and column indexes are good. Note that column of IDataView and column of matrix are two different things.
var matrixColumnIndexColumn = new SchemaShape.Column(MatrixColumnIndexName, SchemaShape.Column.VectorKind.Scalar, NumberType.U4, true);
var matrixRowIndexColumn = new SchemaShape.Column(MatrixRowIndexName, SchemaShape.Column.VectorKind.Scalar, NumberType.U4, true);
- CheckColumnsCompatible(matrixColumnIndexColumn, MatrixColumnIndexName);
- CheckColumnsCompatible(matrixRowIndexColumn, MatrixRowIndexName);
+ CheckColumnsCompatible(matrixColumnIndexColumn, "matrixColumnIndex");
+ CheckColumnsCompatible(matrixRowIndexColumn, "matrixRowIndex");
// Input columns just pass through so that output column dictionary contains all input columns.
var outColumns = inputSchema.ToDictionary(x => x.Name);
diff --git a/src/Microsoft.ML.StandardLearners/FactorizationMachine/FactorizationMachineTrainer.cs b/src/Microsoft.ML.StandardLearners/FactorizationMachine/FactorizationMachineTrainer.cs
index dfd474dc78..aa6a122329 100644
--- a/src/Microsoft.ML.StandardLearners/FactorizationMachine/FactorizationMachineTrainer.cs
+++ b/src/Microsoft.ML.StandardLearners/FactorizationMachine/FactorizationMachineTrainer.cs
@@ -518,25 +518,26 @@ public SchemaShape GetOutputSchema(SchemaShape inputSchema)
Host.CheckValue(inputSchema, nameof(inputSchema));
- void CheckColumnsCompatible(SchemaShape.Column column, string defaultName)
+ void CheckColumnsCompatible(SchemaShape.Column column, string columnRole)
{
if (!inputSchema.TryFindColumn(column.Name, out var col))
- throw Host.ExceptSchemaMismatch(nameof(col), defaultName, defaultName);
+ throw Host.ExceptSchemaMismatch(nameof(inputSchema), columnRole, column.Name);
if (!column.IsCompatibleWith(col))
- throw Host.Except($"{defaultName} column '{column.Name}' is not compatible");
+ throw Host.ExceptSchemaMismatch(nameof(inputSchema), columnRole, column.Name,
+ column.GetTypeString(), col.GetTypeString());
}
- CheckColumnsCompatible(LabelColumn, DefaultColumnNames.Label);
+ CheckColumnsCompatible(LabelColumn, "label");
foreach (var feat in FeatureColumns)
{
- CheckColumnsCompatible(feat, DefaultColumnNames.Features);
+ CheckColumnsCompatible(feat, "feature");
}
if (WeightColumn.IsValid)
- CheckColumnsCompatible(WeightColumn, DefaultColumnNames.Weight);
+ CheckColumnsCompatible(WeightColumn, "weight");
var outColumns = inputSchema.ToDictionary(x => x.Name);
foreach (var col in GetOutputColumnsCore(inputSchema))
diff --git a/src/Microsoft.ML.StandardLearners/FactorizationMachine/FieldAwareFactorizationMachineModelParameters.cs b/src/Microsoft.ML.StandardLearners/FactorizationMachine/FieldAwareFactorizationMachineModelParameters.cs
index 43006d4b24..675c3d2799 100644
--- a/src/Microsoft.ML.StandardLearners/FactorizationMachine/FieldAwareFactorizationMachineModelParameters.cs
+++ b/src/Microsoft.ML.StandardLearners/FactorizationMachine/FieldAwareFactorizationMachineModelParameters.cs
@@ -321,7 +321,7 @@ public FieldAwareFactorizationMachinePredictionTransformer(IHostEnvironment host
foreach (var feat in featureColumns)
{
if (!trainSchema.TryGetColumnIndex(feat, out int col))
- throw Host.ExceptSchemaMismatch(nameof(featureColumns), RoleMappedSchema.ColumnRole.Feature.Value, feat);
+ throw Host.ExceptSchemaMismatch(nameof(featureColumns), "feature", feat);
FeatureColumnTypes[i++] = trainSchema[col].Type;
}
@@ -351,7 +351,7 @@ public FieldAwareFactorizationMachinePredictionTransformer(IHostEnvironment host
{
FeatureColumns[i] = ctx.LoadString();
if (!TrainSchema.TryGetColumnIndex(FeatureColumns[i], out int col))
- throw Host.ExceptSchemaMismatch(nameof(FeatureColumns), RoleMappedSchema.ColumnRole.Feature.Value, FeatureColumns[i]);
+ throw Host.ExceptSchemaMismatch(nameof(FeatureColumns), "feature", FeatureColumns[i]);
FeatureColumnTypes[i] = TrainSchema[col].Type;
}
@@ -376,10 +376,10 @@ public override Schema GetOutputSchema(Schema inputSchema)
{
var feat = FeatureColumns[i];
if (!inputSchema.TryGetColumnIndex(feat, out int col))
- throw Host.ExceptSchemaMismatch(nameof(inputSchema), RoleMappedSchema.ColumnRole.Feature.Value, feat, FeatureColumnTypes[i].ToString(), null);
+ throw Host.ExceptSchemaMismatch(nameof(inputSchema), "feature", feat, FeatureColumnTypes[i].ToString(), null);
if (!inputSchema[col].Type.Equals(FeatureColumnTypes[i]))
- throw Host.ExceptSchemaMismatch(nameof(inputSchema), RoleMappedSchema.ColumnRole.Feature.Value, feat, FeatureColumnTypes[i].ToString(), inputSchema[col].Type.ToString());
+ throw Host.ExceptSchemaMismatch(nameof(inputSchema), "feature", feat, FeatureColumnTypes[i].ToString(), inputSchema[col].Type.ToString());
}
return Transform(new EmptyDataView(Host, inputSchema)).Schema;
diff --git a/src/Microsoft.ML.StandardLearners/Standard/MultiClass/MetaMulticlassTrainer.cs b/src/Microsoft.ML.StandardLearners/Standard/MultiClass/MetaMulticlassTrainer.cs
index 42e6de63d7..eac950e68a 100644
--- a/src/Microsoft.ML.StandardLearners/Standard/MultiClass/MetaMulticlassTrainer.cs
+++ b/src/Microsoft.ML.StandardLearners/Standard/MultiClass/MetaMulticlassTrainer.cs
@@ -153,10 +153,10 @@ public SchemaShape GetOutputSchema(SchemaShape inputSchema)
if (LabelColumn.IsValid)
{
if (!inputSchema.TryFindColumn(LabelColumn.Name, out var labelCol))
- throw Host.ExceptSchemaMismatch(nameof(labelCol), DefaultColumnNames.PredictedLabel, DefaultColumnNames.PredictedLabel);
+ throw Host.ExceptSchemaMismatch(nameof(labelCol), "label", LabelColumn.Name);
if (!LabelColumn.IsCompatibleWith(labelCol))
- throw Host.Except($"Label column '{LabelColumn.Name}' is not compatible");
+ throw Host.ExceptSchemaMismatch(nameof(inputSchema), "label", LabelColumn.Name, LabelColumn.GetTypeString(), labelCol.GetTypeString());
}
var outColumns = inputSchema.ToDictionary(x => x.Name);
diff --git a/src/Microsoft.ML.StandardLearners/Standard/Online/AveragedPerceptron.cs b/src/Microsoft.ML.StandardLearners/Standard/Online/AveragedPerceptron.cs
index 9c9275d06f..f79c7c1e10 100644
--- a/src/Microsoft.ML.StandardLearners/Standard/Online/AveragedPerceptron.cs
+++ b/src/Microsoft.ML.StandardLearners/Standard/Online/AveragedPerceptron.cs
@@ -164,7 +164,7 @@ protected override void CheckLabelCompatible(SchemaShape.Column labelCol)
Contracts.Assert(labelCol.IsValid);
Action error =
- () => throw Host.ExceptSchemaMismatch(nameof(labelCol), RoleMappedSchema.ColumnRole.Label.Value, labelCol.Name, "BL, R8, R4 or a Key", labelCol.GetTypeString());
+ () => throw Host.ExceptSchemaMismatch(nameof(labelCol), "label", labelCol.Name, "float, double, bool or KeyType", labelCol.GetTypeString());
if (labelCol.Kind != SchemaShape.Column.VectorKind.Scalar)
error();
diff --git a/src/Microsoft.ML.StandardLearners/Standard/SdcaBinary.cs b/src/Microsoft.ML.StandardLearners/Standard/SdcaBinary.cs
index 3b4d23c022..4b1d2515bf 100644
--- a/src/Microsoft.ML.StandardLearners/Standard/SdcaBinary.cs
+++ b/src/Microsoft.ML.StandardLearners/Standard/SdcaBinary.cs
@@ -1538,7 +1538,7 @@ protected override void CheckLabelCompatible(SchemaShape.Column labelCol)
Contracts.Assert(labelCol.IsValid);
Action error =
- () => throw Host.ExceptSchemaMismatch(nameof(labelCol), RoleMappedSchema.ColumnRole.Label.Value, labelCol.Name, "BL, R8, R4 or a Key", labelCol.GetTypeString());
+ () => throw Host.ExceptSchemaMismatch(nameof(labelCol), "label", labelCol.Name, "float, double, bool or KeyType", labelCol.GetTypeString());
if (labelCol.Kind != SchemaShape.Column.VectorKind.Scalar)
error();
diff --git a/src/Microsoft.ML.StandardLearners/Standard/SdcaMultiClass.cs b/src/Microsoft.ML.StandardLearners/Standard/SdcaMultiClass.cs
index 8d187923a2..ce0490b973 100644
--- a/src/Microsoft.ML.StandardLearners/Standard/SdcaMultiClass.cs
+++ b/src/Microsoft.ML.StandardLearners/Standard/SdcaMultiClass.cs
@@ -110,7 +110,7 @@ protected override void CheckLabelCompatible(SchemaShape.Column labelCol)
Contracts.Assert(labelCol.IsValid);
Action error =
- () => throw Host.ExceptSchemaMismatch(nameof(labelCol), RoleMappedSchema.ColumnRole.Label.Value, labelCol.Name, "R8, R4 or a Key", labelCol.GetTypeString());
+ () => throw Host.ExceptSchemaMismatch(nameof(labelCol), "label", labelCol.Name, "float, double or KeyType", labelCol.GetTypeString());
if (labelCol.Kind != SchemaShape.Column.VectorKind.Scalar)
error();
diff --git a/src/Microsoft.ML.TensorFlow/TensorflowTransform.cs b/src/Microsoft.ML.TensorFlow/TensorflowTransform.cs
index d804375d52..5c3949ebb8 100644
--- a/src/Microsoft.ML.TensorFlow/TensorflowTransform.cs
+++ b/src/Microsoft.ML.TensorFlow/TensorflowTransform.cs
@@ -818,7 +818,7 @@ public Mapper(TensorFlowTransformer parent, Schema inputSchema) :
for (int i = 0; i < _parent.Inputs.Length; i++)
{
if (!inputSchema.TryGetColumnIndex(_parent.Inputs[i], out _inputColIndices[i]))
- throw Host.Except($"Column {_parent.Inputs[i]} doesn't exist");
+ throw Host.ExceptSchemaMismatch(nameof(InputSchema), "source", _parent.Inputs[i]);
var type = inputSchema[_inputColIndices[i]].Type;
if (type is VectorType vecType && vecType.Size == 0)
@@ -1135,7 +1135,7 @@ public SchemaShape GetOutputSchema(SchemaShape inputSchema)
if (!inputSchema.TryFindColumn(input, out var col))
throw _host.ExceptSchemaMismatch(nameof(inputSchema), "input", input);
if (!(col.Kind == SchemaShape.Column.VectorKind.Vector))
- throw _host.ExceptSchemaMismatch(nameof(inputSchema), "input", input, nameof(VectorType), col.GetTypeString());
+ throw _host.ExceptSchemaMismatch(nameof(inputSchema), "input", input, "vector", col.GetTypeString());
var expectedType = TensorFlowUtils.Tf2MlNetType(_tfInputTypes[i]);
if (col.ItemType != expectedType)
throw _host.ExceptSchemaMismatch(nameof(inputSchema), "input", input, expectedType.ToString(), col.ItemType.ToString());
diff --git a/src/Microsoft.ML.TimeSeries/AdaptiveSingularSpectrumSequenceModeler.cs b/src/Microsoft.ML.TimeSeries/AdaptiveSingularSpectrumSequenceModeler.cs
index 60b906a5f0..4a3593ca14 100644
--- a/src/Microsoft.ML.TimeSeries/AdaptiveSingularSpectrumSequenceModeler.cs
+++ b/src/Microsoft.ML.TimeSeries/AdaptiveSingularSpectrumSequenceModeler.cs
@@ -1230,7 +1230,7 @@ internal override void Train(RoleMappedData data)
_host.CheckParam(data.Schema.Feature.HasValue, nameof(data), "Must have features column.");
var featureCol = data.Schema.Feature.Value;
if (featureCol.Type != NumberType.Float)
- throw _host.ExceptSchemaMismatch(nameof(data), "feature", featureCol.Name, "R4", featureCol.Type.ToString());
+ throw _host.ExceptSchemaMismatch(nameof(data), "feature", featureCol.Name, "float", featureCol.Type.ToString());
Single[] dataArray = new Single[_trainSize];
diff --git a/src/Microsoft.ML.TimeSeries/IidAnomalyDetectionBase.cs b/src/Microsoft.ML.TimeSeries/IidAnomalyDetectionBase.cs
index 7599b1dcaa..eeff5db3d2 100644
--- a/src/Microsoft.ML.TimeSeries/IidAnomalyDetectionBase.cs
+++ b/src/Microsoft.ML.TimeSeries/IidAnomalyDetectionBase.cs
@@ -43,7 +43,7 @@ public override Schema GetOutputSchema(Schema inputSchema)
var colType = inputSchema[col].Type;
if (colType != NumberType.R4)
- throw Host.ExceptSchemaMismatch(nameof(inputSchema), "input", InputColumnName, NumberType.R4.ToString(), colType.ToString());
+ throw Host.ExceptSchemaMismatch(nameof(inputSchema), "input", InputColumnName, "float", colType.ToString());
return Transform(new EmptyDataView(Host, inputSchema)).Schema;
}
diff --git a/src/Microsoft.ML.TimeSeries/IidChangePointDetector.cs b/src/Microsoft.ML.TimeSeries/IidChangePointDetector.cs
index 1735d6a4dd..cb0874e2ce 100644
--- a/src/Microsoft.ML.TimeSeries/IidChangePointDetector.cs
+++ b/src/Microsoft.ML.TimeSeries/IidChangePointDetector.cs
@@ -247,7 +247,7 @@ public override SchemaShape GetOutputSchema(SchemaShape inputSchema)
if (!inputSchema.TryFindColumn(Transformer.InputColumnName, out var col))
throw Host.ExceptSchemaMismatch(nameof(inputSchema), "input", Transformer.InputColumnName);
if (col.ItemType != NumberType.R4)
- throw Host.ExceptSchemaMismatch(nameof(inputSchema), "input", Transformer.InputColumnName, NumberType.R4.ToString(), col.GetTypeString());
+ throw Host.ExceptSchemaMismatch(nameof(inputSchema), "input", Transformer.InputColumnName, "float", col.GetTypeString());
var metadata = new List() {
new SchemaShape.Column(MetadataUtils.Kinds.SlotNames, SchemaShape.Column.VectorKind.Vector, TextType.Instance, false)
diff --git a/src/Microsoft.ML.TimeSeries/IidSpikeDetector.cs b/src/Microsoft.ML.TimeSeries/IidSpikeDetector.cs
index dabbf45d22..20cecfc285 100644
--- a/src/Microsoft.ML.TimeSeries/IidSpikeDetector.cs
+++ b/src/Microsoft.ML.TimeSeries/IidSpikeDetector.cs
@@ -222,7 +222,7 @@ public override SchemaShape GetOutputSchema(SchemaShape inputSchema)
if (!inputSchema.TryFindColumn(Transformer.InputColumnName, out var col))
throw Host.ExceptSchemaMismatch(nameof(inputSchema), "input", Transformer.InputColumnName);
if (col.ItemType != NumberType.R4)
- throw Host.ExceptSchemaMismatch(nameof(inputSchema), "input", Transformer.InputColumnName, NumberType.R4.ToString(), col.GetTypeString());
+ throw Host.ExceptSchemaMismatch(nameof(inputSchema), "input", Transformer.InputColumnName, "float", col.GetTypeString());
var metadata = new List() {
new SchemaShape.Column(MetadataUtils.Kinds.SlotNames, SchemaShape.Column.VectorKind.Vector, TextType.Instance, false)
diff --git a/src/Microsoft.ML.TimeSeries/SequentialAnomalyDetectionTransformBase.cs b/src/Microsoft.ML.TimeSeries/SequentialAnomalyDetectionTransformBase.cs
index 7e82cc889f..91a554b96d 100644
--- a/src/Microsoft.ML.TimeSeries/SequentialAnomalyDetectionTransformBase.cs
+++ b/src/Microsoft.ML.TimeSeries/SequentialAnomalyDetectionTransformBase.cs
@@ -594,7 +594,7 @@ public Mapper(IHostEnvironment env, SequentialAnomalyDetectionTransformBase() {
new SchemaShape.Column(MetadataUtils.Kinds.SlotNames, SchemaShape.Column.VectorKind.Vector, TextType.Instance, false)
diff --git a/src/Microsoft.ML.TimeSeries/SsaSpikeDetector.cs b/src/Microsoft.ML.TimeSeries/SsaSpikeDetector.cs
index 976a223a5a..02b81458b3 100644
--- a/src/Microsoft.ML.TimeSeries/SsaSpikeDetector.cs
+++ b/src/Microsoft.ML.TimeSeries/SsaSpikeDetector.cs
@@ -262,7 +262,7 @@ public SchemaShape GetOutputSchema(SchemaShape inputSchema)
if (!inputSchema.TryFindColumn(_args.Source, out var col))
throw _host.ExceptSchemaMismatch(nameof(inputSchema), "input", _args.Source);
if (col.ItemType != NumberType.R4)
- throw _host.ExceptSchemaMismatch(nameof(inputSchema), "input", _args.Source, NumberType.R4.ToString(), col.GetTypeString());
+ throw _host.ExceptSchemaMismatch(nameof(inputSchema), "input", _args.Source, "float", col.GetTypeString());
var metadata = new List() {
new SchemaShape.Column(MetadataUtils.Kinds.SlotNames, SchemaShape.Column.VectorKind.Vector, TextType.Instance, false)
diff --git a/src/Microsoft.ML.Transforms/MissingValueDroppingTransformer.cs b/src/Microsoft.ML.Transforms/MissingValueDroppingTransformer.cs
index ddc4b69a22..1ce692a343 100644
--- a/src/Microsoft.ML.Transforms/MissingValueDroppingTransformer.cs
+++ b/src/Microsoft.ML.Transforms/MissingValueDroppingTransformer.cs
@@ -105,7 +105,7 @@ protected override void CheckInputColumn(Schema inputSchema, int col, int srcCol
{
var inType = inputSchema[srcCol].Type;
if (!(inType is VectorType))
- throw Host.ExceptSchemaMismatch(nameof(inputSchema), "input", inputSchema[srcCol].Name, "Vector", inType.ToString());
+ throw Host.ExceptSchemaMismatch(nameof(inputSchema), "input", inputSchema[srcCol].Name, "vector", inType.ToString());
}
// Factory method for SignatureLoadModel
@@ -377,7 +377,7 @@ public override SchemaShape GetOutputSchema(SchemaShape inputSchema)
if (!inputSchema.TryFindColumn(colPair.inputColumnName, out var col) || !Data.Conversion.Conversions.Instance.TryGetIsNAPredicate(col.ItemType, out Delegate del))
throw Host.ExceptSchemaMismatch(nameof(inputSchema), "input", colPair.inputColumnName);
if (!(col.Kind == SchemaShape.Column.VectorKind.Vector || col.Kind == SchemaShape.Column.VectorKind.VariableVector))
- throw Host.ExceptSchemaMismatch(nameof(inputSchema), "input", colPair.inputColumnName, "Vector", col.GetTypeString());
+ throw Host.ExceptSchemaMismatch(nameof(inputSchema), "input", colPair.inputColumnName, "known-size vector", col.GetTypeString());
var metadata = new List();
if (col.Metadata.TryFindColumn(MetadataUtils.Kinds.KeyValues, out var keyMeta))
metadata.Add(keyMeta);
diff --git a/src/Microsoft.ML.Transforms/Text/LdaTransform.cs b/src/Microsoft.ML.Transforms/Text/LdaTransform.cs
index bd312b55fe..8d70d1b252 100644
--- a/src/Microsoft.ML.Transforms/Text/LdaTransform.cs
+++ b/src/Microsoft.ML.Transforms/Text/LdaTransform.cs
@@ -717,7 +717,7 @@ public Mapper(LatentDirichletAllocationTransformer parent, Schema inputSchema)
var srcCol = inputSchema[_srcCols[i]];
var srcType = srcCol.Type as VectorType;
if (srcType == null || !srcType.IsKnownSize || !(srcType.ItemType is NumberType))
- throw Host.ExceptSchemaMismatch(nameof(inputSchema), "input", _parent.ColumnPairs[i].inputColumnName, "a fixed vector of floats", srcCol.Type.ToString());
+ throw Host.ExceptSchemaMismatch(nameof(inputSchema), "input", _parent.ColumnPairs[i].inputColumnName, "known-size vector of float", srcCol.Type.ToString());
}
}
@@ -950,7 +950,7 @@ private static List>> Train(IHostEnvironment env, I
var srcColType = inputSchema[srcCol].Type as VectorType;
if (srcColType == null || !srcColType.IsKnownSize || !(srcColType.ItemType is NumberType))
- throw env.ExceptSchemaMismatch(nameof(inputSchema), "input", columns[i].InputColumnName, "a fixed vector of floats", srcColType.ToString());
+ throw env.ExceptSchemaMismatch(nameof(inputSchema), "input", columns[i].InputColumnName, "known-size vector of float", srcColType.ToString());
srcCols[i] = srcCol;
activeColumns.Add(inputData.Schema[srcCol]);
@@ -1161,7 +1161,7 @@ public SchemaShape GetOutputSchema(SchemaShape inputSchema)
if (!inputSchema.TryFindColumn(colInfo.InputColumnName, out var col))
throw _host.ExceptSchemaMismatch(nameof(inputSchema), "input", colInfo.InputColumnName);
if (col.ItemType.RawType != typeof(float) || col.Kind == SchemaShape.Column.VectorKind.Scalar)
- throw _host.ExceptSchemaMismatch(nameof(inputSchema), "input", colInfo.InputColumnName, "a vector of floats", col.GetTypeString());
+ throw _host.ExceptSchemaMismatch(nameof(inputSchema), "input", colInfo.InputColumnName, "vector of float", col.GetTypeString());
result[colInfo.Name] = new SchemaShape.Column(colInfo.Name, SchemaShape.Column.VectorKind.Vector, NumberType.R4, false);
}
diff --git a/src/Microsoft.ML.Transforms/Text/StopWordsRemovingTransformer.cs b/src/Microsoft.ML.Transforms/Text/StopWordsRemovingTransformer.cs
index e8690253a2..6c12f5a865 100644
--- a/src/Microsoft.ML.Transforms/Text/StopWordsRemovingTransformer.cs
+++ b/src/Microsoft.ML.Transforms/Text/StopWordsRemovingTransformer.cs
@@ -406,7 +406,7 @@ public Mapper(StopWordsRemovingTransformer parent, Schema inputSchema)
if (!string.IsNullOrEmpty(_parent._columns[i].LanguageColumn))
{
if (!inputSchema.TryGetColumnIndex(_parent._columns[i].LanguageColumn, out int langCol))
- throw Host.ExceptSchemaMismatch(nameof(inputSchema), "language column", _parent._columns[i].LanguageColumn);
+ throw Host.ExceptSchemaMismatch(nameof(inputSchema), "language", _parent._columns[i].LanguageColumn);
_languageColumns[i] = langCol;
}
else