File: CodeGenerator\CSharp\TransformGeneratorFactory.cs
Web Access
Project: src\src\Microsoft.ML.CodeGenerator\Microsoft.ML.CodeGenerator.csproj (Microsoft.ML.CodeGenerator)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
 
using System;
using Microsoft.ML.AutoML;
 
namespace Microsoft.ML.CodeGenerator.CSharp
{
    internal interface ITransformGenerator
    {
        string GenerateTransformer();
 
        string[] GenerateUsings();
    }
 
    // For orphan Transformer ( transformer that doesn't exist in AutoML )
    internal enum SpecialTransformer
    {
        ApplyOnnxModel = 0,
        ResizeImage = 1,
        ExtractPixel = 2,
        ObjectDetectionResizeImage = 3,
    }
 
    internal static class TransformGeneratorFactory
    {
        internal static ITransformGenerator GetInstance(PipelineNode node)
        {
            ITransformGenerator result = null;
            if (Enum.TryParse(node.Name, out EstimatorName trainer))
            {
                switch (trainer)
                {
                    case EstimatorName.Normalizing:
                        result = new Normalizer(node);
                        break;
                    case EstimatorName.OneHotEncoding:
                        result = new OneHotEncoding(node);
                        break;
                    case EstimatorName.ColumnConcatenating:
                        result = new ColumnConcat(node);
                        break;
                    case EstimatorName.ColumnCopying:
                        result = new ColumnCopying(node);
                        break;
                    case EstimatorName.KeyToValueMapping:
                        result = new KeyToValueMapping(node);
                        break;
                    case EstimatorName.Hashing:
                        result = new Hashing(node);
                        break;
                    case EstimatorName.MissingValueIndicating:
                        result = new MissingValueIndicator(node);
                        break;
                    case EstimatorName.MissingValueReplacing:
                        result = new MissingValueReplacer(node);
                        break;
                    case EstimatorName.OneHotHashEncoding:
                        result = new OneHotHashEncoding(node);
                        break;
                    case EstimatorName.TextFeaturizing:
                        result = new TextFeaturizing(node);
                        break;
                    case EstimatorName.TypeConverting:
                        result = new TypeConverting(node);
                        break;
                    case EstimatorName.ValueToKeyMapping:
                        result = new ValueToKeyMapping(node);
                        break;
                    case EstimatorName.RawByteImageLoading:
                        result = new ImageLoadingRawBytes(node);
                        break;
                    case EstimatorName.ImageLoading:
                        result = new ImageLoading(node);
                        break;
                    default:
                        // see if node is one of those Transformer
                        return null;
                }
            }
 
            // For  the AzureAttach
            if (Enum.TryParse(node.Name, out SpecialTransformer transformer))
            {
                switch (transformer)
                {
                    case SpecialTransformer.ExtractPixel:
                        result = new PixelExtract(node);
                        break;
                    case SpecialTransformer.ResizeImage:
                        result = new ImageResizing(node);
                        break;
                    case SpecialTransformer.ApplyOnnxModel:
                        result = new ApplyOnnxModel(node);
                        break;
                    case SpecialTransformer.ObjectDetectionResizeImage:
                        result = new ObjectDetectionImageResizing(node);
                        break;
                    default:
                        return null;
                }
            }
            return result;
        }
    }
}