File: TrainerGeneratorTests.cs
Web Access
Project: src\test\Microsoft.ML.CodeGenerator.Tests\Microsoft.ML.CodeGenerator.Tests.csproj (Microsoft.ML.CodeGenerator.Tests)
// 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.Collections.Generic;
using System.Globalization;
using System.Threading;
using Microsoft.ML;
using Microsoft.ML.AutoML;
using Microsoft.ML.CodeGenerator.CSharp;
using Microsoft.ML.TestFramework;
using Microsoft.ML.Trainers;
using Xunit;
using Xunit.Abstractions;
 
namespace mlnet.Tests
{
    public class TrainerGeneratorTests : BaseTestClass
    {
        public TrainerGeneratorTests(ITestOutputHelper output) : base(output)
        {
        }
 
        [Fact]
        public void CultureInvariantTest()
        {
 
            var context = new MLContext();
 
            var elementProperties = new Dictionary<string, object>()
            {
                {"LearningRate", 0.1f },
                {"NumberOfLeaves", 1 },
            };
            PipelineNode node = new PipelineNode("LightGbmBinary", PipelineNodeType.Trainer, default(string[]), default(string), elementProperties);
            Pipeline pipeline = new Pipeline(new PipelineNode[] { node });
 
            //Set culture to deutsch.
            var currentCulture = Thread.CurrentThread.CurrentCulture;
            Thread.CurrentThread.CurrentCulture = new CultureInfo("de-DE");
 
            CodeGenerator codeGenerator = new CodeGenerator(pipeline, null, null);
            var actual = codeGenerator.GenerateTrainerAndUsings();
 
            Thread.CurrentThread.CurrentCulture = currentCulture;
            string expectedTrainerString = "LightGbm(learningRate:0.1f,numberOfLeaves:1,labelColumnName:\"Label\",featureColumnName:\"Features\")";
            Assert.Equal(expectedTrainerString, actual.Item1);
            Assert.Null(actual.Item2);
 
        }
 
        [Fact]
        public void LightGbmBinaryBasicTest()
        {
 
            var context = new MLContext();
 
            var elementProperties = new Dictionary<string, object>()
            {
                {"LearningRate", 0.1f },
                {"NumberOfLeaves", 1 },
            };
            PipelineNode node = new PipelineNode("LightGbmBinary", PipelineNodeType.Trainer, default(string[]), default(string), elementProperties);
            Pipeline pipeline = new Pipeline(new PipelineNode[] { node });
            CodeGenerator codeGenerator = new CodeGenerator(pipeline, null, null);
            var actual = codeGenerator.GenerateTrainerAndUsings();
            string expectedTrainerString = "LightGbm(learningRate:0.1f,numberOfLeaves:1,labelColumnName:\"Label\",featureColumnName:\"Features\")";
            Assert.Equal(expectedTrainerString, actual.Item1);
            Assert.Null(actual.Item2);
 
        }
 
        [Fact]
        public void LightGbmBinaryAdvancedParameterTest()
        {
 
            var context = new MLContext();
 
            var elementProperties = new Dictionary<string, object>()
            {
                {"LearningRate", 0.1f },
                {"NumLeaves", 1 },
                {"UseSoftmax", true }
            };
            PipelineNode node = new PipelineNode("LightGbmBinary", PipelineNodeType.Trainer, default(string[]), default(string), elementProperties);
            Pipeline pipeline = new Pipeline(new PipelineNode[] { node });
            CodeGenerator codeGenerator = new CodeGenerator(pipeline, null, null);
            var actual = codeGenerator.GenerateTrainerAndUsings();
            string expectedTrainerString = "LightGbm(new LightGbmBinaryTrainer.Options(){LearningRate=0.1f,NumLeaves=1,UseSoftmax=true,LabelColumnName=\"Label\",FeatureColumnName=\"Features\"})";
            string expectedUsings = "using Microsoft.ML.Trainers.LightGbm;\r\n";
            Assert.Equal(expectedTrainerString, actual.Item1);
            Assert.Equal(expectedUsings, actual.Item2[0]);
 
        }
 
        [Fact]
        public void SymbolicSgdLogisticRegressionBinaryBasicTest()
        {
 
            var context = new MLContext();
 
            var elementProperties = new Dictionary<string, object>();
            PipelineNode node = new PipelineNode("SymbolicSgdLogisticRegressionBinary", PipelineNodeType.Trainer, default(string[]), default(string), elementProperties);
            Pipeline pipeline = new Pipeline(new PipelineNode[] { node });
            CodeGenerator codeGenerator = new CodeGenerator(pipeline, null, null);
            var actual = codeGenerator.GenerateTrainerAndUsings();
            string expectedTrainerString = "SymbolicSgdLogisticRegression(labelColumnName:\"Label\",featureColumnName:\"Features\")";
            Assert.Equal(expectedTrainerString, actual.Item1);
            Assert.Null(actual.Item2);
 
        }
 
        [Fact]
        public void SymbolicSgdLogisticRegressionBinaryAdvancedParameterTest()
        {
 
            var context = new MLContext();
 
            var elementProperties = new Dictionary<string, object>()
            {
                {"LearningRate", 0.1f },
            };
            PipelineNode node = new PipelineNode("SymbolicSgdLogisticRegressionBinary", PipelineNodeType.Trainer, default(string[]), default(string), elementProperties);
            Pipeline pipeline = new Pipeline(new PipelineNode[] { node });
            CodeGenerator codeGenerator = new CodeGenerator(pipeline, null, null);
            var actual = codeGenerator.GenerateTrainerAndUsings();
            var expectedUsings = "using Microsoft.ML.Trainers;\r\n";
            string expectedTrainerString = "SymbolicSgdLogisticRegression(new SymbolicSgdLogisticRegressionBinaryTrainer.Options(){LearningRate=0.1f,LabelColumnName=\"Label\",FeatureColumnName=\"Features\"})";
            Assert.Equal(expectedTrainerString, actual.Item1);
            Assert.Equal(expectedUsings, actual.Item2[0]);
 
        }
 
        [Fact]
        public void SgdCalibratedBinaryBasicTest()
        {
            var context = new MLContext();
 
            var elementProperties = new Dictionary<string, object>();
            PipelineNode node = new PipelineNode("SgdCalibratedBinary", PipelineNodeType.Trainer, default(string[]), default(string), elementProperties);
            Pipeline pipeline = new Pipeline(new PipelineNode[] { node });
            CodeGenerator codeGenerator = new CodeGenerator(pipeline, null, null);
            var actual = codeGenerator.GenerateTrainerAndUsings();
            string expectedTrainerString = "SgdCalibrated(labelColumnName:\"Label\",featureColumnName:\"Features\")";
            Assert.Equal(expectedTrainerString, actual.Item1);
            Assert.Null(actual.Item2);
 
        }
 
        [Fact]
        public void SgdCalibratedBinaryAdvancedParameterTest()
        {
 
            var context = new MLContext();
 
            var elementProperties = new Dictionary<string, object>()
            {
                {"Shuffle", true },
            };
            PipelineNode node = new PipelineNode("SgdCalibratedBinary", PipelineNodeType.Trainer, default(string[]), default(string), elementProperties);
            Pipeline pipeline = new Pipeline(new PipelineNode[] { node });
            CodeGenerator codeGenerator = new CodeGenerator(pipeline, null, null);
            var actual = codeGenerator.GenerateTrainerAndUsings();
            var expectedUsings = "using Microsoft.ML.Trainers;\r\n";
            string expectedTrainerString = "SgdCalibrated(new SgdCalibratedTrainer.Options(){Shuffle=true,LabelColumnName=\"Label\",FeatureColumnName=\"Features\"})";
            Assert.Equal(expectedTrainerString, actual.Item1);
            Assert.Equal(expectedUsings, actual.Item2[0]);
 
        }
 
        [Fact]
        public void SdcaLogisticRegressionBinaryBasicTest()
        {
            var context = new MLContext();
 
            var elementProperties = new Dictionary<string, object>();
            PipelineNode node = new PipelineNode("SdcaLogisticRegressionBinary", PipelineNodeType.Trainer, default(string[]), default(string), elementProperties);
            Pipeline pipeline = new Pipeline(new PipelineNode[] { node });
            CodeGenerator codeGenerator = new CodeGenerator(pipeline, null, null);
            var actual = codeGenerator.GenerateTrainerAndUsings();
            string expectedTrainerString = "SdcaLogisticRegression(labelColumnName:\"Label\",featureColumnName:\"Features\")";
            Assert.Equal(expectedTrainerString, actual.Item1);
            Assert.Null(actual.Item2);
 
        }
 
        [Fact]
        public void SdcaLogisticRegressionBinaryAdvancedParameterTest()
        {
 
            var context = new MLContext();
 
            var elementProperties = new Dictionary<string, object>()
            {
                {"BiasLearningRate", 0.1f },
            };
            PipelineNode node = new PipelineNode("SdcaLogisticRegressionBinary", PipelineNodeType.Trainer, default(string[]), default(string), elementProperties);
            Pipeline pipeline = new Pipeline(new PipelineNode[] { node });
            CodeGenerator codeGenerator = new CodeGenerator(pipeline, null, null);
            var actual = codeGenerator.GenerateTrainerAndUsings();
            var expectedUsings = "using Microsoft.ML.Trainers;\r\n";
            string expectedTrainerString = "SdcaLogisticRegression(new SdcaLogisticRegressionBinaryTrainer.Options(){BiasLearningRate=0.1f,LabelColumnName=\"Label\",FeatureColumnName=\"Features\"})";
            Assert.Equal(expectedTrainerString, actual.Item1);
            Assert.Equal(expectedUsings, actual.Item2[0]);
 
        }
 
        [Fact]
        public void SdcaMaximumEntropyMultiBasicTest()
        {
            var context = new MLContext();
 
            var elementProperties = new Dictionary<string, object>();
            PipelineNode node = new PipelineNode("SdcaMaximumEntropyMulti", PipelineNodeType.Trainer, default(string[]), default(string), elementProperties);
            Pipeline pipeline = new Pipeline(new PipelineNode[] { node });
            CodeGenerator codeGenerator = new CodeGenerator(pipeline, null, null);
            var actual = codeGenerator.GenerateTrainerAndUsings();
            string expectedTrainerString = "SdcaMaximumEntropy(labelColumnName:\"Label\",featureColumnName:\"Features\")";
            Assert.Equal(expectedTrainerString, actual.Item1);
            Assert.Null(actual.Item2);
 
        }
 
        [Fact]
        public void SdcaMaximumEntropyMultiAdvancedParameterTest()
        {
 
            var context = new MLContext();
 
            var elementProperties = new Dictionary<string, object>()
            {
                {"BiasLearningRate", 0.1f },
            };
            PipelineNode node = new PipelineNode("SdcaMaximumEntropyMulti", PipelineNodeType.Trainer, default(string[]), default(string), elementProperties);
            Pipeline pipeline = new Pipeline(new PipelineNode[] { node });
            CodeGenerator codeGenerator = new CodeGenerator(pipeline, null, null);
            var actual = codeGenerator.GenerateTrainerAndUsings();
            var expectedUsings = "using Microsoft.ML.Trainers;\r\n";
            string expectedTrainerString = "SdcaMaximumEntropy(new SdcaMaximumEntropyMulticlassTrainer.Options(){BiasLearningRate=0.1f,LabelColumnName=\"Label\",FeatureColumnName=\"Features\"})";
            Assert.Equal(expectedTrainerString, actual.Item1);
            Assert.Equal(expectedUsings, actual.Item2[0]);
 
        }
 
        [Fact]
        public void SdcaRegressionBasicTest()
        {
            var context = new MLContext();
 
            var elementProperties = new Dictionary<string, object>();
            PipelineNode node = new PipelineNode("SdcaRegression", PipelineNodeType.Trainer, default(string[]), default(string), elementProperties);
            Pipeline pipeline = new Pipeline(new PipelineNode[] { node });
            CodeGenerator codeGenerator = new CodeGenerator(pipeline, null, null);
            var actual = codeGenerator.GenerateTrainerAndUsings();
            string expectedTrainerString = "Sdca(labelColumnName:\"Label\",featureColumnName:\"Features\")";
            Assert.Equal(expectedTrainerString, actual.Item1);
            Assert.Null(actual.Item2);
 
        }
 
        [Fact]
        public void SdcaRegressionAdvancedParameterTest()
        {
 
            var context = new MLContext();
 
            var elementProperties = new Dictionary<string, object>()
            {
                {"BiasLearningRate", 0.1f },
            };
            PipelineNode node = new PipelineNode("SdcaRegression", PipelineNodeType.Trainer, default(string[]), default(string), elementProperties);
            Pipeline pipeline = new Pipeline(new PipelineNode[] { node });
            CodeGenerator codeGenerator = new CodeGenerator(pipeline, null, null);
            var actual = codeGenerator.GenerateTrainerAndUsings();
            var expectedUsings = "using Microsoft.ML.Trainers;\r\n";
            string expectedTrainerString = "Sdca(new SdcaRegressionTrainer.Options(){BiasLearningRate=0.1f,LabelColumnName=\"Label\",FeatureColumnName=\"Features\"})";
            Assert.Equal(expectedTrainerString, actual.Item1);
            Assert.Equal(expectedUsings, actual.Item2[0]);
 
        }
 
        [Fact]
        public void MatrixFactorizationBasicTest()
        {
            var context = new MLContext();
            var elementProperties = new Dictionary<string, object>();
            PipelineNode node = new PipelineNode("MatrixFactorization", PipelineNodeType.Trainer, default(string[]), default(string), elementProperties);
            Pipeline pipeline = new Pipeline(new PipelineNode[] { node });
            CodeGenerator codeGenerator = new CodeGenerator(pipeline, null, null);
            var actual = codeGenerator.GenerateTrainerAndUsings();
            string expectedTrainerString = "MatrixFactorization(labelColumnName:\"Label\")";
            Assert.Equal(expectedTrainerString, actual.Item1);
            Assert.Null(actual.Item2);
        }
 
        [Fact]
        public void MatrixFactorizationAdvancedTest()
        {
            var context = new MLContext();
            var elementProperties = new Dictionary<string, object>()
            {
                {"MatrixColumnIndexColumnName","userId" },
                {"MatrixRowIndexColumnName","movieId" },
                {"LabelColumnName","rating" },
                {nameof(MatrixFactorizationTrainer.Options.NumberOfIterations), 10 },
                {nameof(MatrixFactorizationTrainer.Options.LearningRate), 0.01f },
                {nameof(MatrixFactorizationTrainer.Options.ApproximationRank), 8 },
                {nameof(MatrixFactorizationTrainer.Options.Lambda), 0.01f },
                {nameof(MatrixFactorizationTrainer.Options.LossFunction), MatrixFactorizationTrainer.LossFunctionType.SquareLossRegression },
                {nameof(MatrixFactorizationTrainer.Options.Alpha), 1f },
                {nameof(MatrixFactorizationTrainer.Options.C), 0.00001f },
            };
            PipelineNode node = new PipelineNode("MatrixFactorization", PipelineNodeType.Trainer, default(string[]), default(string), elementProperties);
            Pipeline pipeline = new Pipeline(new PipelineNode[] { node });
            CodeGenerator codeGenerator = new CodeGenerator(pipeline, null, null);
            var actual = codeGenerator.GenerateTrainerAndUsings();
            string expectedTrainerString = "MatrixFactorization(new MatrixFactorizationTrainer.Options(){MatrixColumnIndexColumnName=\"userId\",MatrixRowIndexColumnName=\"movieId\",LabelColumnName=\"rating\",NumberOfIterations=10,LearningRate=0.01f,ApproximationRank=8,Lambda=0.01f,LossFunction=MatrixFactorizationTrainer.LossFunctionType.SquareLossRegression,Alpha=1f,C=1E-05f})";
            Assert.Equal(expectedTrainerString, actual.Item1);
            Assert.Equal(new string[] { "using Microsoft.ML.Trainers;\r\n" }, actual.Item2);
        }
 
        [Fact]
        public void LbfgsPoissonRegressionBasicTest()
        {
            var context = new MLContext();
 
            var elementProperties = new Dictionary<string, object>();
            PipelineNode node = new PipelineNode("LbfgsPoissonRegression", PipelineNodeType.Trainer, default(string[]), default(string), elementProperties);
            Pipeline pipeline = new Pipeline(new PipelineNode[] { node });
            CodeGenerator codeGenerator = new CodeGenerator(pipeline, null, null);
            var actual = codeGenerator.GenerateTrainerAndUsings();
            string expectedTrainerString = "LbfgsPoissonRegression(labelColumnName:\"Label\",featureColumnName:\"Features\")";
            Assert.Equal(expectedTrainerString, actual.Item1);
            Assert.Null(actual.Item2);
 
        }
 
        [Fact]
        public void LbfgsPoissonRegressionAdvancedParameterTest()
        {
 
            var context = new MLContext();
 
            var elementProperties = new Dictionary<string, object>()
            {
                {"MaximumNumberOfIterations", 1 },
            };
            PipelineNode node = new PipelineNode("LbfgsPoissonRegression", PipelineNodeType.Trainer, default(string[]), default(string), elementProperties);
            Pipeline pipeline = new Pipeline(new PipelineNode[] { node });
            CodeGenerator codeGenerator = new CodeGenerator(pipeline, null, null);
            var actual = codeGenerator.GenerateTrainerAndUsings();
            var expectedUsings = "using Microsoft.ML.Trainers;\r\n";
            string expectedTrainerString = "LbfgsPoissonRegression(new LbfgsPoissonRegressionTrainer.Options(){MaximumNumberOfIterations=1,LabelColumnName=\"Label\",FeatureColumnName=\"Features\"})";
            Assert.Equal(expectedTrainerString, actual.Item1);
            Assert.Equal(expectedUsings, actual.Item2[0]);
 
        }
 
        [Fact]
        public void OlsRegressionBasicTest()
        {
            var context = new MLContext();
 
            var elementProperties = new Dictionary<string, object>();
            PipelineNode node = new PipelineNode("OlsRegression", PipelineNodeType.Trainer, default(string[]), default(string), elementProperties);
            Pipeline pipeline = new Pipeline(new PipelineNode[] { node });
            CodeGenerator codeGenerator = new CodeGenerator(pipeline, null, null);
            var actual = codeGenerator.GenerateTrainerAndUsings();
            string expectedTrainerString = "Ols(labelColumnName:\"Label\",featureColumnName:\"Features\")";
            Assert.Equal(expectedTrainerString, actual.Item1);
            Assert.Null(actual.Item2);
 
        }
 
        [Fact]
        public void OlsRegressionAdvancedParameterTest()
        {
 
            var context = new MLContext();
 
            var elementProperties = new Dictionary<string, object>()
            {
                {"L2Regularization", 0.1f },
            };
            PipelineNode node = new PipelineNode("OlsRegression", PipelineNodeType.Trainer, default(string[]), default(string), elementProperties);
            Pipeline pipeline = new Pipeline(new PipelineNode[] { node });
            CodeGenerator codeGenerator = new CodeGenerator(pipeline, null, null);
            var actual = codeGenerator.GenerateTrainerAndUsings();
            var expectedUsings = "using Microsoft.ML.Trainers;\r\n";
            string expectedTrainerString = "Ols(new OlsTrainer.Options(){L2Regularization=0.1f,LabelColumnName=\"Label\",FeatureColumnName=\"Features\"})";
            Assert.Equal(expectedTrainerString, actual.Item1);
            Assert.Equal(expectedUsings, actual.Item2[0]);
 
        }
 
        [Fact]
        public void OnlineGradientDescentRegressionBasicTest()
        {
            var context = new MLContext();
 
            var elementProperties = new Dictionary<string, object>();
            PipelineNode node = new PipelineNode("OnlineGradientDescentRegression", PipelineNodeType.Trainer, default(string[]), default(string), elementProperties);
            Pipeline pipeline = new Pipeline(new PipelineNode[] { node });
            CodeGenerator codeGenerator = new CodeGenerator(pipeline, null, null);
            var actual = codeGenerator.GenerateTrainerAndUsings();
            string expectedTrainerString = "OnlineGradientDescent(labelColumnName:\"Label\",featureColumnName:\"Features\")";
            Assert.Equal(expectedTrainerString, actual.Item1);
            Assert.Null(actual.Item2);
 
        }
 
        [Fact]
        public void OnlineGradientDescentRegressionAdvancedParameterTest()
        {
 
            var context = new MLContext();
 
            var elementProperties = new Dictionary<string, object>()
            {
                {"RecencyGainMulti", true },
            };
            PipelineNode node = new PipelineNode("OnlineGradientDescentRegression", PipelineNodeType.Trainer, default(string[]), default(string), elementProperties);
            Pipeline pipeline = new Pipeline(new PipelineNode[] { node });
            CodeGenerator codeGenerator = new CodeGenerator(pipeline, null, null);
            var actual = codeGenerator.GenerateTrainerAndUsings();
            var expectedUsings = "using Microsoft.ML.Trainers;\r\n";
            string expectedTrainerString = "OnlineGradientDescent(new OnlineGradientDescentTrainer.Options(){RecencyGainMulti=true,LabelColumnName=\"Label\",FeatureColumnName=\"Features\"})";
            Assert.Equal(expectedTrainerString, actual.Item1);
            Assert.Equal(expectedUsings, actual.Item2[0]);
 
        }
 
        [Fact]
        public void LbfgsLogisticRegressionBinaryBasicTest()
        {
            var context = new MLContext();
 
            var elementProperties = new Dictionary<string, object>();
            PipelineNode node = new PipelineNode("LbfgsLogisticRegressionBinary", PipelineNodeType.Trainer, default(string[]), default(string), elementProperties);
            Pipeline pipeline = new Pipeline(new PipelineNode[] { node });
            CodeGenerator codeGenerator = new CodeGenerator(pipeline, null, null);
            var actual = codeGenerator.GenerateTrainerAndUsings();
            string expectedTrainerString = "LbfgsLogisticRegression(labelColumnName:\"Label\",featureColumnName:\"Features\")";
            Assert.Equal(expectedTrainerString, actual.Item1);
            Assert.Null(actual.Item2);
 
        }
 
        [Fact]
        public void LbfgsLogisticRegressionBinaryAdvancedParameterTest()
        {
 
            var context = new MLContext();
 
            var elementProperties = new Dictionary<string, object>()
            {
                {"DenseOptimizer", true },
            };
            PipelineNode node = new PipelineNode("LbfgsLogisticRegressionBinary", PipelineNodeType.Trainer, default(string[]), default(string), elementProperties);
            Pipeline pipeline = new Pipeline(new PipelineNode[] { node });
            CodeGenerator codeGenerator = new CodeGenerator(pipeline, null, null);
            var actual = codeGenerator.GenerateTrainerAndUsings();
            var expectedUsings = "using Microsoft.ML.Trainers;\r\n";
            string expectedTrainerString = "LbfgsLogisticRegression(new LbfgsLogisticRegressionBinaryTrainer.Options(){DenseOptimizer=true,LabelColumnName=\"Label\",FeatureColumnName=\"Features\"})";
            Assert.Equal(expectedTrainerString, actual.Item1);
            Assert.Equal(expectedUsings, actual.Item2[0]);
 
        }
 
        [Fact]
        public void LbfgsMaximumEntropyMultiMultiBasicTest()
        {
            var context = new MLContext();
 
            var elementProperties = new Dictionary<string, object>();
            PipelineNode node = new PipelineNode("LbfgsMaximumEntropyMulti", PipelineNodeType.Trainer, default(string[]), default(string), elementProperties);
            Pipeline pipeline = new Pipeline(new PipelineNode[] { node });
            CodeGenerator codeGenerator = new CodeGenerator(pipeline, null, null);
            var actual = codeGenerator.GenerateTrainerAndUsings();
            string expectedTrainerString = "LbfgsMaximumEntropy(labelColumnName:\"Label\",featureColumnName:\"Features\")";
            Assert.Equal(expectedTrainerString, actual.Item1);
            Assert.Null(actual.Item2);
 
        }
 
        [Fact]
        public void LbfgsMaximumEntropyMultiAdvancedParameterTest()
        {
 
            var context = new MLContext();
 
            var elementProperties = new Dictionary<string, object>()
            {
                {"DenseOptimizer", true },
            };
            PipelineNode node = new PipelineNode("LbfgsMaximumEntropyMulti", PipelineNodeType.Trainer, default(string[]), default(string), elementProperties);
            Pipeline pipeline = new Pipeline(new PipelineNode[] { node });
            CodeGenerator codeGenerator = new CodeGenerator(pipeline, null, null);
            var actual = codeGenerator.GenerateTrainerAndUsings();
            var expectedUsings = "using Microsoft.ML.Trainers;\r\n";
            string expectedTrainerString = "LbfgsMaximumEntropy(new LbfgsMaximumEntropyMulticlassTrainer.Options(){DenseOptimizer=true,LabelColumnName=\"Label\",FeatureColumnName=\"Features\"})";
            Assert.Equal(expectedTrainerString, actual.Item1);
            Assert.Equal(expectedUsings, actual.Item2[0]);
 
        }
 
        [Fact]
        public void LinearSvmBinaryBasicTest()
        {
            var context = new MLContext();
 
            var elementProperties = new Dictionary<string, object>();
            PipelineNode node = new PipelineNode("LinearSvmBinary", PipelineNodeType.Trainer, default(string[]), default(string), elementProperties);
            Pipeline pipeline = new Pipeline(new PipelineNode[] { node });
            CodeGenerator codeGenerator = new CodeGenerator(pipeline, null, null);
            var actual = codeGenerator.GenerateTrainerAndUsings();
            string expectedTrainerString = "LinearSvm(labelColumnName:\"Label\",featureColumnName:\"Features\")";
            Assert.Equal(expectedTrainerString, actual.Item1);
            Assert.Null(actual.Item2);
 
        }
 
        [Fact]
        public void LinearSvmBinaryParameterTest()
        {
 
            var context = new MLContext();
 
            var elementProperties = new Dictionary<string, object>()
            {
                {"NoBias", true },
            };
            PipelineNode node = new PipelineNode("LinearSvmBinary", PipelineNodeType.Trainer, default(string[]), default(string), elementProperties);
            Pipeline pipeline = new Pipeline(new PipelineNode[] { node });
            CodeGenerator codeGenerator = new CodeGenerator(pipeline, null, null);
            var actual = codeGenerator.GenerateTrainerAndUsings();
            var expectedUsings = "using Microsoft.ML.Trainers;\r\n ";
            string expectedTrainerString = "LinearSvm(new LinearSvmTrainer.Options(){NoBias=true,LabelColumnName=\"Label\",FeatureColumnName=\"Features\"})";
            Assert.Equal(expectedTrainerString, actual.Item1);
            Assert.Equal(expectedUsings, actual.Item2[0]);
 
        }
 
 
        [Fact]
        public void FastTreeTweedieRegressionBasicTest()
        {
            var context = new MLContext();
 
            var elementProperties = new Dictionary<string, object>();
            PipelineNode node = new PipelineNode("FastTreeTweedieRegression", PipelineNodeType.Trainer, default(string[]), default(string), elementProperties);
            Pipeline pipeline = new Pipeline(new PipelineNode[] { node });
            CodeGenerator codeGenerator = new CodeGenerator(pipeline, null, null);
            var actual = codeGenerator.GenerateTrainerAndUsings();
            string expectedTrainerString = "FastTreeTweedie(labelColumnName:\"Label\",featureColumnName:\"Features\")";
            Assert.Equal(expectedTrainerString, actual.Item1);
            Assert.Null(actual.Item2);
 
        }
 
        [Fact]
        public void FastTreeTweedieRegressionAdvancedParameterTest()
        {
 
            var context = new MLContext();
 
            var elementProperties = new Dictionary<string, object>()
            {
                {"Shrinkage", 0.1f },
            };
            PipelineNode node = new PipelineNode("OnlineGradientDescentRegression", PipelineNodeType.Trainer, default(string[]), default(string), elementProperties);
            Pipeline pipeline = new Pipeline(new PipelineNode[] { node });
            CodeGenerator codeGenerator = new CodeGenerator(pipeline, null, null);
            var actual = codeGenerator.GenerateTrainerAndUsings();
            var expectedUsings = "using Microsoft.ML.Trainers;\r\n";
            string expectedTrainerString = "OnlineGradientDescent(new OnlineGradientDescentTrainer.Options(){Shrinkage=0.1f,LabelColumnName=\"Label\",FeatureColumnName=\"Features\"})";
            Assert.Equal(expectedTrainerString, actual.Item1);
            Assert.Equal(expectedUsings, actual.Item2[0]);
 
        }
 
 
        [Fact]
        public void FastTreeRegressionBasicTest()
        {
            var context = new MLContext();
 
            var elementProperties = new Dictionary<string, object>();
            PipelineNode node = new PipelineNode("FastTreeRegression", PipelineNodeType.Trainer, default(string[]), default(string), elementProperties);
            Pipeline pipeline = new Pipeline(new PipelineNode[] { node });
            CodeGenerator codeGenerator = new CodeGenerator(pipeline, null, null);
            var actual = codeGenerator.GenerateTrainerAndUsings();
            string expectedTrainerString = "FastTree(labelColumnName:\"Label\",featureColumnName:\"Features\")";
            Assert.Equal(expectedTrainerString, actual.Item1);
            Assert.Null(actual.Item2);
 
        }
 
        [Fact]
        public void FastTreeRegressionAdvancedParameterTest()
        {
 
            var context = new MLContext();
 
            var elementProperties = new Dictionary<string, object>()
            {
                {"Shrinkage", 0.1f },
            };
            PipelineNode node = new PipelineNode("FastTreeRegression", PipelineNodeType.Trainer, default(string[]), default(string), elementProperties);
            Pipeline pipeline = new Pipeline(new PipelineNode[] { node });
            CodeGenerator codeGenerator = new CodeGenerator(pipeline, null, null);
            var actual = codeGenerator.GenerateTrainerAndUsings();
            var expectedUsings = "using Microsoft.ML.Trainers.FastTree;\r\n";
            string expectedTrainerString = "FastTree(new FastTreeRegressionTrainer.Options(){Shrinkage=0.1f,LabelColumnName=\"Label\",FeatureColumnName=\"Features\"})";
            Assert.Equal(expectedTrainerString, actual.Item1);
            Assert.Equal(expectedUsings, actual.Item2[0]);
 
        }
 
 
        [Fact]
        public void FastTreeBinaryBasicTest()
        {
            var context = new MLContext();
 
            var elementProperties = new Dictionary<string, object>();
            PipelineNode node = new PipelineNode("FastTreeBinary", PipelineNodeType.Trainer, default(string[]), default(string), elementProperties);
            Pipeline pipeline = new Pipeline(new PipelineNode[] { node });
            CodeGenerator codeGenerator = new CodeGenerator(pipeline, null, null);
            var actual = codeGenerator.GenerateTrainerAndUsings();
            string expectedTrainerString = "FastTree(labelColumnName:\"Label\",featureColumnName:\"Features\")";
            Assert.Equal(expectedTrainerString, actual.Item1);
            Assert.Null(actual.Item2);
 
        }
 
        [Fact]
        public void FastTreeBinaryAdvancedParameterTest()
        {
 
            var context = new MLContext();
 
            var elementProperties = new Dictionary<string, object>()
            {
                {"Shrinkage", 0.1f },
            };
            PipelineNode node = new PipelineNode("FastTreeBinary", PipelineNodeType.Trainer, default(string[]), default(string), elementProperties);
            Pipeline pipeline = new Pipeline(new PipelineNode[] { node });
            CodeGenerator codeGenerator = new CodeGenerator(pipeline, null, null);
            var actual = codeGenerator.GenerateTrainerAndUsings();
            var expectedUsings = "using Microsoft.ML.Trainers.FastTree;\r\n";
            string expectedTrainerString = "FastTree(new FastTreeBinaryTrainer.Options(){Shrinkage=0.1f,LabelColumnName=\"Label\",FeatureColumnName=\"Features\"})";
            Assert.Equal(expectedTrainerString, actual.Item1);
            Assert.Equal(expectedUsings, actual.Item2[0]);
 
        }
 
 
        [Fact]
        public void FastForestRegressionBasicTest()
        {
            var context = new MLContext();
 
            var elementProperties = new Dictionary<string, object>();
            PipelineNode node = new PipelineNode("FastForestRegression", PipelineNodeType.Trainer, default(string[]), default(string), elementProperties);
            Pipeline pipeline = new Pipeline(new PipelineNode[] { node });
            CodeGenerator codeGenerator = new CodeGenerator(pipeline, null, null);
            var actual = codeGenerator.GenerateTrainerAndUsings();
            string expectedTrainerString = "FastForest(labelColumnName:\"Label\",featureColumnName:\"Features\")";
            Assert.Equal(expectedTrainerString, actual.Item1);
            Assert.Null(actual.Item2);
 
        }
 
        [Fact]
        public void FastForestRegressionAdvancedParameterTest()
        {
            var context = new MLContext();
 
            var elementProperties = new Dictionary<string, object>()
            {
                {"Shrinkage", 0.1f },
            };
            PipelineNode node = new PipelineNode("FastForestRegression", PipelineNodeType.Trainer, default(string[]), default(string), elementProperties);
            Pipeline pipeline = new Pipeline(new PipelineNode[] { node });
            CodeGenerator codeGenerator = new CodeGenerator(pipeline, null, null);
            var actual = codeGenerator.GenerateTrainerAndUsings();
            var expectedUsings = "using Microsoft.ML.Trainers.FastTree;\r\n";
            string expectedTrainerString = "FastForest(new FastForestRegression.Options(){Shrinkage=0.1f,LabelColumnName=\"Label\",FeatureColumnName=\"Features\"})";
            Assert.Equal(expectedTrainerString, actual.Item1);
            Assert.Equal(expectedUsings, actual.Item2[0]);
 
        }
 
 
        [Fact]
        public void FastForestBinaryBasicTest()
        {
            var context = new MLContext();
 
            var elementProperties = new Dictionary<string, object>();
            PipelineNode node = new PipelineNode("FastForestBinary", PipelineNodeType.Trainer, default(string[]), default(string), elementProperties);
            Pipeline pipeline = new Pipeline(new PipelineNode[] { node });
            CodeGenerator codeGenerator = new CodeGenerator(pipeline, null, null);
            var actual = codeGenerator.GenerateTrainerAndUsings();
            string expectedTrainerString = "FastForest(labelColumnName:\"Label\",featureColumnName:\"Features\")";
            Assert.Equal(expectedTrainerString, actual.Item1);
            Assert.Null(actual.Item2);
 
        }
 
        [Fact]
        public void FastForestBinaryAdvancedParameterTest()
        {
 
            var context = new MLContext();
 
            var elementProperties = new Dictionary<string, object>()
            {
                {"Shrinkage", 0.1f },
            };
            PipelineNode node = new PipelineNode("FastForestBinary", PipelineNodeType.Trainer, default(string[]), default(string), elementProperties);
            Pipeline pipeline = new Pipeline(new PipelineNode[] { node });
            CodeGenerator codeGenerator = new CodeGenerator(pipeline, null, null);
            var actual = codeGenerator.GenerateTrainerAndUsings();
            var expectedUsings = "using Microsoft.ML.Trainers.FastTree;\r\n";
            string expectedTrainerString = "FastForest(new FastForestClassification.Options(){Shrinkage=0.1f,LabelColumnName=\"Label\",FeatureColumnName=\"Features\"})";
            Assert.Equal(expectedTrainerString, actual.Item1);
            Assert.Equal(expectedUsings, actual.Item2[0]);
 
        }
 
 
        [Fact]
        public void AveragedPerceptronBinaryBasicTest()
        {
            var context = new MLContext();
 
            var elementProperties = new Dictionary<string, object>();
            PipelineNode node = new PipelineNode("AveragedPerceptronBinary", PipelineNodeType.Trainer, default(string[]), default(string), elementProperties);
            Pipeline pipeline = new Pipeline(new PipelineNode[] { node });
            CodeGenerator codeGenerator = new CodeGenerator(pipeline, null, null);
            var actual = codeGenerator.GenerateTrainerAndUsings();
            string expectedTrainerString = "AveragedPerceptron(labelColumnName:\"Label\",featureColumnName:\"Features\")";
            Assert.Equal(expectedTrainerString, actual.Item1);
            Assert.Null(actual.Item2);
 
        }
 
        [Fact]
        public void AveragedPerceptronBinaryAdvancedParameterTest()
        {
 
            var context = new MLContext();
 
            var elementProperties = new Dictionary<string, object>()
            {
                {"Shuffle", true },
            };
            PipelineNode node = new PipelineNode("AveragedPerceptronBinary", PipelineNodeType.Trainer, default(string[]), default(string), elementProperties);
            Pipeline pipeline = new Pipeline(new PipelineNode[] { node });
            CodeGenerator codeGenerator = new CodeGenerator(pipeline, null, null);
            var actual = codeGenerator.GenerateTrainerAndUsings();
            var expectedUsings = "using Microsoft.ML.Trainers;\r\n ";
            string expectedTrainerString = "AveragedPerceptron(new AveragedPerceptronTrainer.Options(){Shuffle=true,LabelColumnName=\"Label\",FeatureColumnName=\"Features\"})";
            Assert.Equal(expectedTrainerString, actual.Item1);
            Assert.Equal(expectedUsings, actual.Item2[0]);
 
        }
 
        [Fact]
        public void ImageClassificationTrainerBasicTest()
        {
            var elementProperties = new Dictionary<string, object>();
            PipelineNode node = new PipelineNode("ImageClassification", PipelineNodeType.Trainer, default(string[]), default(string), elementProperties);
            Pipeline pipeline = new Pipeline(new PipelineNode[] { node });
            CodeGenerator codeGenerator = new CodeGenerator(pipeline, null, null);
            var actual = codeGenerator.GenerateTrainerAndUsings();
            string expectedTrainerString = "ImageClassification(LabelColumnName:\"Label\",FeatureColumnName:\"Features\")";
            Assert.Equal(expectedTrainerString, actual.Item1);
            Assert.Null(actual.Item2);
        }
    }
}