/// <summary>
        /// Runs a train-test experiment on the current pipeline, through entrypoints.
        /// </summary>
        public void RunTrainTestExperiment(IDataView trainData, IDataView testData,
                                           AutoInference.SupportedMetric metric, MacroUtils.TrainerKinds trainerKind, out double testMetricValue,
                                           out double trainMetricValue)
        {
            var experiment = CreateTrainTestExperiment(trainData, testData, trainerKind, true, out var trainTestOutput);

            experiment.Run();

            var dataOut         = experiment.GetOutput(trainTestOutput.OverallMetrics);
            var dataOutTraining = experiment.GetOutput(trainTestOutput.TrainingOverallMetrics);

            testMetricValue  = AutoMlUtils.ExtractValueFromIDV(_env, dataOut, metric.Name);
            trainMetricValue = AutoMlUtils.ExtractValueFromIDV(_env, dataOutTraining, metric.Name);
        }
        /// <summary>
        /// Runs a train-test experiment on the current pipeline, through entrypoints.
        /// </summary>
        public double RunTrainTestExperiment(IDataView trainData, IDataView testData, AutoInference.SupportedMetric metric, MacroUtils.TrainerKinds trainerKind)
        {
            var experiment = CreateTrainTestExperiment(trainData, testData, trainerKind, out var trainTestOutput);

            experiment.Run();
            var dataOut = experiment.GetOutput(trainTestOutput.OverallMetrics);
            var schema  = dataOut.Schema;

            schema.TryGetColumnIndex(metric.Name, out var metricCol);

            using (var cursor = dataOut.GetRowCursor(col => col == metricCol))
            {
                var    getter      = cursor.GetGetter <double>(metricCol);
                double metricValue = 0;
                cursor.MoveNext();
                getter(ref metricValue);
                return(metricValue);
            }
        }