public void AzureImageCodeGeneratorTest()
        {
            (var pipeline, var columnInference) = GetMockedAzureImagePipelineAndInference();
            var setting = new CodeGeneratorSettings()
            {
                TrainDataset           = @"/path/to/dataset",
                ModelPath              = @"/path/to/model",
                MlTask                 = TaskKind.MulticlassClassification,
                OutputName             = @"CodeGenTest",
                OutputBaseDir          = @"/path/to/codegen",
                LabelName              = "Label",
                Target                 = GenerateTarget.ModelBuilder,
                StablePackageVersion   = "stableversion",
                UnstablePackageVersion = "unstableversion",
                OnnxModelPath          = @"/path/to/onnxModel",
                IsAzureAttach          = true,
                IsImage                = true,
                ClassificationLabel    = new string[] { "label1", "label2", "label3" },
            };
            var codeGen = new AzureAttachCodeGenenrator(pipeline, columnInference, setting);

            foreach (var project in codeGen.ToSolution())
            {
                foreach (var projectFile in project)
                {
                    NamerFactory.AdditionalInformation = projectFile.Name;
                    Approvals.Verify(((ICSharpFile)projectFile).File);
                }
            }
        }
        public void AzureCodeGeneratorTest()
        {
            (var pipeline, var columnInference, var mapping) = GetMockedAzurePipelineAndInference();
            var setting = new CodeGeneratorSettings()
            {
                TrainDataset           = @"\path\to\file",
                ModelPath              = @"\path\to\model",
                MlTask                 = TaskKind.MulticlassClassification,
                OutputName             = @"test",
                OutputBaseDir          = @"\path\to\test",
                LabelName              = "label",
                Target                 = GenerateTarget.ModelBuilder,
                StablePackageVersion   = "StablePackageVersion",
                UnstablePackageVersion = "UnstablePackageVersion",
                OnnxModelPath          = @"\path\to\onnx",
                IsAzureAttach          = true,
                IsImage                = false,
                OnnxInputMapping       = mapping,
            };
            var codeGen = new AzureAttachCodeGenenrator(pipeline, columnInference, setting);

            foreach (var project in codeGen.ToSolution())
            {
                foreach (var projectFile in project)
                {
                    NamerFactory.AdditionalInformation = projectFile.Name;
                    Approvals.Verify(((ICSharpFile)projectFile).File);
                }
            }
        }
Beispiel #3
0
        private static void WarnCompileFailed(CodeGeneratorSettings settings, string slnPath, string dialogTitle)
        {
            string logPath = Path.GetFullPath(Path.Combine(settings.GetManagedBinDir(), "PluginInstaller", "build.log"));

            if (string.IsNullOrEmpty(slnPath))
            {
                slnPath = Path.GetFullPath(Path.Combine(settings.GetManagedModulesDir(), "UnrealEngine.sln"));
            }
            FMessage.OpenDialog("Compile failed.\nBuild log: '" + logPath + "'\nsln: '" + slnPath + "'");
        }
        public AzureAttachCodeGenenrator(Pipeline pipeline, ColumnInferenceResults columnInferenceResults, CodeGeneratorSettings options)
        {
            _pipeline = pipeline;
            _settings = options;
            _columnInferenceResult = columnInferenceResults;
            Name = _settings.OutputName;
            var namespaceValue = Utilities.Utils.Normalize(_settings.OutputName);

            AzureAttachConsoleApp = new AzureAttachConsoleAppCodeGenerator(_pipeline, _columnInferenceResult, _settings, namespaceValue);
            AzureAttachModel      = new AzureAttachModelCodeGenerator(_pipeline, _columnInferenceResult, _settings, namespaceValue);
        }
Beispiel #5
0
        internal ViewModel(GraphQLDocument query, CodeGeneratorSettings settings)
        {
            this.query      = query;
            this.Namespace  = settings.Namespace;
            this.ClassName  = settings.ClassName;
            this.OutputPath = settings.OutputPath;
            this.RootPath   = settings.RootPath;

            this.typeLookup      = new Dictionary <string, TypeViewModel>();
            this.inputTypeLookup = new Dictionary <IGraphQLType, string>();
            this.typeCollection  = new List <TypeViewModel>();
            // lets name each set

            this.operationCollection = new List <OperationViewModel>();
            foreach (Operation op in query.Operations)
            {
                List <NamedTypeViewModel> argCollection = new List <NamedTypeViewModel>();
                foreach (KeyValuePair <string, ValueTypeReference> arg in op.Paramaters)
                {
                    argCollection.Add(new NamedTypeViewModel
                    {
                        Name = arg.Key,
                        Type = GenerateTypeReference(arg.Value)
                    });
                }

                string             name   = Path.GetFileNameWithoutExtension(op.Path);
                string             opName = $"{name}_{op.Name }".Trim('_');
                OperationViewModel opVM   = new OperationViewModel()
                {
                    Name          = opName,
                    OperationName = op.Name ?? opName,
                    Arguments     = argCollection,
                    QueryFragment = op.Query,
                    NamedQuery    = op.Name ?? string.Empty,
                    ResultType    = new TypeReferenceModel
                    {
                        IsCollection        = false,
                        CanCollectionBeNull = false,
                        CanValueBeNull      = false,
                        TypeName            = GenerateType(op.Selection, opName)
                    }
                };
                // collect all fragments reference from this query and grab thier nodes query strings too
                opVM.Query = FullQuery(opVM);
                this.operationCollection.Add(opVM);
            }
        }
Beispiel #6
0
        internal ViewModel(GraphQLDocument query, CodeGeneratorSettings settings)
        {
            Namespace = settings.Namespace;
            ClassName = settings.ClassName;

            this.typeLookup      = new Dictionary <string, TypeViewModel>();
            this.inputTypeLookup = new Dictionary <IGraphQLType, string>();
            this.typeCollection  = new List <TypeViewModel>();
            // lets name each set

            this.operationCollection = new List <OperationViewModel>();
            foreach (var op in query.Operations)
            {
                List <NamedTypeViewModel> argCollection = new List <NamedTypeViewModel>();
                foreach (var arg in op.Paramaters)
                {
                    argCollection.Add(new NamedTypeViewModel
                    {
                        Name = arg.Key,
                        Type = GenerateTypeReference(arg.Value)
                    });
                }

                var name   = Path.GetFileNameWithoutExtension(op.Path);
                var opName = $"{name}_{op.Name }".Trim('_');
                var opVM   = new OperationViewModel()
                {
                    Name       = opName,
                    Arguments  = argCollection,
                    Query      = op.Query,
                    NamedQuery = op.Name ?? string.Empty,
                    ResultType = new TypeReferenceModel
                    {
                        IsCollection        = false,
                        CanCollectionBeNull = false,
                        CanValueBeNull      = false,
                        TypeName            = GenerateType(op.Selection, opName)
                    }
                };

                operationCollection.Add(opVM);
            }

            // lets convert each to a type with a back track to lookup a type based on unique reference

            // I need type definitions for Operation Result and Argument types graphs
        }
Beispiel #7
0
        private static void GenerateAndCompileMissingAssemblies()
        {
            string projectFileName = FPaths.ProjectFilePath;

            if (!FBuild.WithEditor || string.IsNullOrEmpty(projectFileName))
            {
                return;
            }

            // NOTE: This is called before ManagedUnrealModuleInfo.Load / ManagedUnrealTypes.Load so some things may not be accessible.
            //       Maybe call load then unload after this is finished?

            // NOTE: Most of the functions called here use FSlowTask but the UI isn't available until the engine is fully initialized.
            //       Instead use FFeedbackContext to display a progress bar (FDesktopPlatformModule::Get()->GetNativeFeedbackContext())
            // TODO: Redirect some of the FSlowTask messages to the log, so that the "show log" button displays useful info?
            codeGenContext = FFeedbackContext.GetGetDesktopFeedbackContext();

            string dialogTitle = "USharp";

            CodeGeneratorSettings settings = new CodeGeneratorSettings();

            string engineWrapperDllPath     = Path.Combine(settings.GetManagedModulesDir(), "bin", "Debug", "UnrealEngine.dll");
            string engineWrapperSlnPath     = Path.Combine(settings.GetManagedModulesDir(), "UnrealEngine.sln");
            bool   compileEngineWrapperCode = false;

            if (!File.Exists(engineWrapperSlnPath))
            {
                if (FMessage.OpenDialog(EAppMsgType.YesNo, "C# engine wrapper code not found. Generate it now?", dialogTitle) == EAppReturnType.Yes)
                {
                    codeGenContext.BeginSlowTask("Generating C# engine wrapper code (this might take a while...)", true);
                    CodeGenerator.GenerateCode(new string[] { "modules" });
                    codeGenContext.EndSlowTask();
                    compileEngineWrapperCode = true;
                }
            }
            if (compileEngineWrapperCode || (!File.Exists(engineWrapperDllPath) && File.Exists(engineWrapperSlnPath)))
            {
                if (compileEngineWrapperCode ||
                    FMessage.OpenDialog(EAppMsgType.YesNo, "C# engine wrapper code isn't compiled. Compile it now?", dialogTitle) == EAppReturnType.Yes)
                {
                    codeGenContext.BeginSlowTask("Compiling C# engine wrapper code (this might take a while...)", true);
                    bool compiled = CodeGenerator.CompileGeneratedCode();
                    codeGenContext.EndSlowTask();

                    if (!compiled)
                    {
                        WarnCompileFailed(settings, null, dialogTitle);
                    }
                }
            }

            string projectName = Path.GetFileNameWithoutExtension(projectFileName);
            string gameSlnPath = Path.Combine(settings.GetManagedDir(), projectName + ".Managed.sln");
            string gameDllPath = Path.Combine(FPaths.ProjectDir, "Binaries", "Managed", projectName + ".Managed.dll");

            if (!File.Exists(gameSlnPath) &&
                FMessage.OpenDialog(EAppMsgType.YesNo, "USharp is enabled but the C# game project files weren't found. Generate them now?", dialogTitle) == EAppReturnType.Yes)
            {
                TemplateProjectGenerator.Generate();
            }

            if (File.Exists(gameSlnPath) && !File.Exists(gameDllPath) &&
                FMessage.OpenDialog(EAppMsgType.YesNo, "C# game project code isn't compiled. Compile it now?", dialogTitle) == EAppReturnType.Yes)
            {
                codeGenContext.BeginSlowTask("Compiling C# game project code (this might take a while...)", true);
                bool compiled = CodeGenerator.CompileCode(gameSlnPath, null);
                codeGenContext.EndSlowTask();

                if (!compiled)
                {
                    WarnCompileFailed(settings, null, dialogTitle);
                }
            }

            codeGenContext = null;
        }
        public AzureAttachConsoleAppCodeGenerator(Pipeline pipeline, ColumnInferenceResults columnInferenceResults, CodeGeneratorSettings options, string namespaceValue)
        {
            _pipeline = pipeline;
            _settings = options;
            _columnInferenceResult = columnInferenceResults;
            _nameSpaceValue        = namespaceValue;
            Name = $"{_settings.OutputName}.ConsoleApp";

            var(_, _, PreTrainerTransforms, _) = _pipeline.GenerateTransformsAndTrainers();

            ModelBuilder = new CSharpCodeFile()
            {
                File = new AzureModelBuilder()
                {
                    Path                 = _settings.TrainDataset,
                    HasHeader            = _columnInferenceResult.TextLoaderOptions.HasHeader,
                    Separator            = _columnInferenceResult.TextLoaderOptions.Separators.FirstOrDefault(),
                    PreTrainerTransforms = PreTrainerTransforms,
                    AllowQuoting         = _columnInferenceResult.TextLoaderOptions.AllowQuoting,
                    AllowSparse          = _columnInferenceResult.TextLoaderOptions.AllowSparse,
                    Namespace            = _nameSpaceValue,
                    Target               = _settings.Target,
                    OnnxModelPath        = _settings.OnnxModelPath,
                    MLNetModelpath       = _settings.ModelPath,
                }.TransformText(),
                Name = "ModelBuilder.cs",
            };

            PredictProject = new CSharpProjectFile()
            {
                File = new PredictProject()
                {
                    Namespace = _nameSpaceValue,
                    IncludeMklComponentsPackage       = false,
                    IncludeLightGBMPackage            = false,
                    IncludeFastTreePackage            = false,
                    IncludeImageTransformerPackage    = _settings.IsImage,
                    IncludeImageClassificationPackage = false,
                    IncludeOnnxPackage        = true,
                    IncludeResNet18Package    = false,
                    IncludeRecommenderPackage = false,
                    StablePackageVersion      = _settings.StablePackageVersion,
                    UnstablePackageVersion    = _settings.UnstablePackageVersion,
                }.TransformText(),
                Name = $"{_settings.OutputName}.ConsoleApp.csproj",
            };

            var columns      = _columnInferenceResult.TextLoaderOptions.Columns;
            var featuresList = columns.Where((str) => str.Name != _settings.LabelName).Select((str) => str.Name).ToList();
            var sampleResult = Utils.GenerateSampleData(_settings.TrainDataset, _columnInferenceResult);

            PredictProgram = new CSharpCodeFile()
            {
                File = new PredictProgram()
                {
                    TaskType     = _settings.MlTask.ToString(),
                    LabelName    = _settings.LabelName,
                    Namespace    = _nameSpaceValue,
                    AllowQuoting = _columnInferenceResult.TextLoaderOptions.AllowQuoting,
                    AllowSparse  = _columnInferenceResult.TextLoaderOptions.AllowSparse,
                    HasHeader    = _columnInferenceResult.TextLoaderOptions.HasHeader,
                    Separator    = _columnInferenceResult.TextLoaderOptions.Separators.FirstOrDefault(),
                    Target       = _settings.Target,
                    Features     = featuresList,
                    SampleData   = sampleResult,
                }.TransformText(),
                Name = "Program.cs",
            };
        }
        public AzureAttachModelCodeGenerator(Pipeline pipeline, ColumnInferenceResults columnInferenceResults, CodeGeneratorSettings options, string namespaceValue)
        {
            _pipeline = pipeline;
            _settings = options;
            _columnInferenceResult = columnInferenceResults;
            _nameSpaceValue        = namespaceValue;
            Name = $"{_settings.OutputName}.Model";

            ModelInputClass = new CSharpCodeFile()
            {
                File = new ModelInputClass()
                {
                    Namespace   = _nameSpaceValue,
                    ClassLabels = Utilities.Utils.GenerateClassLabels(_columnInferenceResult, _settings.OnnxInputMapping),
                    Target      = _settings.Target
                }.TransformText(),
                Name = "ModelInput.cs",
            };

            var  labelType       = _columnInferenceResult.TextLoaderOptions.Columns.Where(t => t.Name == _settings.LabelName).First().DataKind;
            Type labelTypeCsharp = Utils.GetCSharpType(labelType);

            AzureImageModelOutputClass = new CSharpCodeFile()
            {
                File = new AzureImageModelOutputClass()
                {
                    Namespace = _nameSpaceValue,
                    Target    = _settings.Target,
                    Labels    = _settings.ClassificationLabel,
                }.TransformText(),
                Name = "ModelOutput.cs",
            };

            AzureObjectDetectionModelOutputClass = new CSharpCodeFile()
            {
                File = new AzureObjectDetectionModelOutputClass()
                {
                    Namespace = _nameSpaceValue,
                    Target    = _settings.Target,
                    Labels    = _settings.ObjectLabel,
                }.TransformText(),
                Name = "ModelOutput.cs",
            };

            ModelProject = new CSharpProjectFile()
            {
                File = new ModelProject()
                {
                    IncludeFastTreePackage            = false,
                    IncludeImageClassificationPackage = false,
                    IncludeImageTransformerPackage    = _settings.IsImage,
                    IncludeLightGBMPackage            = false,
                    IncludeMklComponentsPackage       = false,
                    IncludeOnnxModel          = true,
                    IncludeOnnxRuntime        = _settings.IsObjectDetection,
                    IncludeRecommenderPackage = false,
                    StablePackageVersion      = _settings.StablePackageVersion,
                    UnstablePackageVersion    = _settings.UnstablePackageVersion,
                    OnnxRuntimePackageVersion = _settings.OnnxRuntimePacakgeVersion,
                    Target = _settings.Target,
                }.TransformText(),
                Name = $"{ _settings.OutputName }.Model.csproj",
            };

            ConsumeModel = new CSharpCodeFile()
            {
                File = new ConsumeModel()
                {
                    Namespace              = _nameSpaceValue,
                    Target                 = _settings.Target,
                    MLNetModelName         = _settings.ModelName,
                    OnnxModelName          = _settings.OnnxModelName,
                    IsAzureImage           = _settings.IsAzureAttach && _settings.IsImage,
                    IsAzureObjectDetection = _settings.IsObjectDetection && _settings.IsAzureAttach,
                }.TransformText(),
                Name = "ConsumeModel.cs",
            };
        }
Beispiel #10
0
        public AzureAttachModelCodeGenerator(Pipeline pipeline, ColumnInferenceResults columnInferenceResults, CodeGeneratorSettings options, string namespaceValue)
        {
            _pipeline = pipeline;
            _settings = options;
            _columnInferenceResult = columnInferenceResults;
            _nameSpaceValue        = namespaceValue;
            Name = $"{_settings.OutputName}.Model";

            ModelInputClass = new CSharpCodeFile()
            {
                File = new ModelInputClass()
                {
                    Namespace   = _nameSpaceValue,
                    ClassLabels = Utilities.Utils.GenerateClassLabels(_columnInferenceResult, _settings.OnnxInputMapping),
                    Target      = _settings.Target
                }.TransformText(),
                Name = "ModelInput.cs",
            };

            var  labelType       = _columnInferenceResult.TextLoaderOptions.Columns.Where(t => t.Name == _settings.LabelName).First().DataKind;
            Type labelTypeCsharp = Utils.GetCSharpType(labelType);

            ModelOutputClass = new CSharpCodeFile()
            {
                File = new ModelOutputClass()
                {
                    Namespace           = _nameSpaceValue,
                    Target              = _settings.Target,
                    TaskType            = _settings.MlTask.ToString(),
                    PredictionLabelType = labelTypeCsharp.Name,
                }.TransformText(),
                Name = "ModelOutput.cs",
            };

            NormalizeMapping = new CSharpCodeFile()
            {
                File = new NormalizeMapping()
                {
                    Target    = _settings.Target,
                    Namespace = _nameSpaceValue,
                }.TransformText(),
                Name = "NormalizeMapping.cs",
            };

            ModelProject = new CSharpProjectFile()
            {
                File = new ModelProject()
                {
                    IncludeFastTreePackage            = false,
                    IncludeImageClassificationPackage = false,
                    IncludeImageTransformerPackage    = _settings.IsImage,
                    IncludeLightGBMPackage            = false,
                    IncludeMklComponentsPackage       = false,
                    IncludeOnnxModel          = true,
                    IncludeRecommenderPackage = false,
                    StablePackageVersion      = _settings.StablePackageVersion,
                    UnstablePackageVersion    = _settings.UnstablePackageVersion,
                }.TransformText(),
                Name = $"{ _settings.OutputName }.Model.csproj",
            };

            LabelMapping = new CSharpCodeFile()
            {
                File = new LabelMapping()
                {
                    Target    = _settings.Target,
                    Namespace = _nameSpaceValue,
                    LabelMappingInputLabelType = typeof(Int64).Name,
                    PredictionLabelType        = labelTypeCsharp.Name,
                    TaskType = _settings.MlTask.ToString(),
                }.TransformText(),
                Name = "LabelMapping.cs",
            };

            ImageLabelMapping = new CSharpCodeFile()
            {
                File = new ImageLabelMapping()
                {
                    Target    = _settings.Target,
                    Namespace = _nameSpaceValue,
                    Labels    = _settings.ClassificationLabel,
                }.TransformText(),
                Name = "LabelMapping.cs",
            };

            ConsumeModel = new CSharpCodeFile()
            {
                File = new ConsumeModel()
                {
                    Namespace           = _nameSpaceValue,
                    Target              = _settings.Target,
                    HasLabelMapping     = true,
                    HasNormalizeMapping = _settings.IsImage,
                    MLNetModelpath      = _settings.ModelPath,
                }.TransformText(),
                Name = "ConsumeModel.cs",
            };
        }
        public GraphQLDocument(GraphQLParser.AST.GraphQLDocument ast, IEnumerable <LocatedNamedSource> queryParts, CodeGeneratorSettings settings)
        {
            this.ast = ast;

            this.QueryParts = queryParts;
            this.settings   = settings;
            List <object> items = ast.Definitions.Select(this.Visit).ToList();

            this.Operations = items.OfType <Operation>().ToList();
            this.types      = items.OfType <IGraphQLType>().GroupBy(x => x.Name).Select(x => x.First()).ToList();
            this.astPrinter = new AstPrinter(settings.TypeNameDirective);
            foreach (IGraphQLInitter i in items.OfType <IGraphQLInitter>().Where(x => !(x is Operation)))
            {
                i.Resolve(this);
            }
            foreach (Operation i in items.OfType <Operation>())
            {
                i.Resolve(this);
            }
        }
 public static void InitializeApplication()
 {
     CodeGeneratorSettings.AddGlobalImport("QuickCodeLearning.Customers.Utilities");
 }