private string GenerateClassCode() { var composer = new LinearComposer(); composer.AppendLineAtNewLine(GenerateDeclareCoefsText()); composer.AppendLineAtNewLine(GenerateAbstractCoefsText()); composer.AppendAtNewLine( MainCodeTemplate, "mv_class_name", ClassData.ClassName, "mv_class_id", ClassData.ClassId, "frame", CurrentFrameName, "double", GMacLanguage.ScalarTypeName, "iszero_code", GenerateIsZeroCode(), "norm2_code", GenerateNorm2Code(), "isequal_cases", GenerateAbstractMethodCases("IsEqual"), "op_cases", GenerateAbstractMethodCases("OP"), "gp_cases", GenerateAbstractMethodCases("GP"), "lcp_cases", GenerateAbstractMethodCases("LCP"), "rcp_cases", GenerateAbstractMethodCases("RCP"), "sp_cases", GenerateAbstractMethodCases("SP"), "add_cases", GenerateAbstractMethodCases("Add"), "subtract_cases", GenerateAbstractMethodCases("Subtract") ); return(composer.ToString()); }
public virtual void Visit(SteEmptyLines code) { for (var i = 0; i < code.LinesCount; i++) { TextComposer.AppendLineAtNewLine(); } }
/// <summary> /// Generate a string containing some statistics about the final text inside /// the files of this composer /// </summary> /// <returns></returns> public string GenerateStatistics() { var composer = new LinearComposer(); composer .AppendLineAtNewLine("Composer Log:") .AppendLineAtNewLine(_log.ToString()) .AppendLine(); var totalLines = 0; var totalCharacters = 0; foreach (var pair in _fileComposersDictionary) { int linesCount, charsCount; composer.AppendAtNewLine( pair.Value.GenerateStatistics(RootFolder, FilesEncoding, out linesCount, out charsCount) ); totalLines += linesCount; totalCharacters += charsCount; } composer .AppendLine() .AppendAtNewLine("Total Files: ") .AppendLine(_fileComposersDictionary.Count.ToString("###,###,###,###")) .AppendAtNewLine("Total Lines: ") .AppendLine(totalLines.ToString("###,###,###,###")) .AppendAtNewLine("Total Characters: ") .AppendLine(totalCharacters.ToString("###,###,###,###")); return(composer.ToString()); }
/// <summary> /// Save all files and their text contents to disk under the given root folder /// </summary> /// <param name="rootFolder"></param> /// <returns>True if saving files resulted in no errors</returns> public bool SaveToFolder(string rootFolder) { var success = true; //Finalize all files without calling the FinalizeAllFiles() method //to prevent un-intended recursion foreach (var fileComposer in Files) { if (!fileComposer.IsFinalized) { fileComposer.FinalizeText(); } } foreach (var pair in _fileComposersDictionary) { try { pair.Value.SaveToDisk(rootFolder, true, FilesEncoding); } catch (Exception e) { success = false; _log .AppendLineAtNewLine($"Error saving file <{pair.Key}>") .AppendLineAtNewLine(e.Message); } } return(success); }
private string GenerateProductMethodCode(string macroName, out string resultClassName) { SetBaseMacro(CurrentFrame.Macro(macroName)); var computationsText = GenerateComputationsCode(); //The result is zero if (MacroCodeGenerator.CodeBlock.NonZeroOutputVariables.Any() == false) { //The result is the zero multivector if (BaseMacro.OutputType.IsValidMultivectorType) { resultClassName = MvLibraryGenerator.MultivectorClassesData[0].ClassName; return("return Zero;"); } //The result is the scalar zero resultClassName = GMacLanguage.ScalarTypeName; return("return " + GMacLanguage.ScalarZero + ";"); } //The result is not zero string resultDeclarationText; if (BaseMacro.OutputType.IsValidMultivectorType) { var grades = MacroCodeGenerator .CodeBlock .NonZeroOutputVariables .Select(v => v.ValueAccess.GetBasisBlade().Grade) .Distinct(); var id = grades.Sum(grade => 1 << grade); resultClassName = MvLibraryGenerator.MultivectorClassesData[id].ClassName; resultDeclarationText = "var result = new " + resultClassName + "();"; } else { resultClassName = GMacLanguage.ScalarTypeName; resultDeclarationText = "var result = " + GMacLanguage.ScalarZero + ";"; } var composer = new LinearComposer(); composer .AppendLineAtNewLine(resultDeclarationText) .AppendLine() .AppendLineAtNewLine(computationsText) .AppendAtNewLine("return result;"); return(composer.ToString()); }
public override string ToString() { var composer = new LinearComposer(); composer .AppendLineAtNewLine(@"<TR>") .IncreaseIndentation(); foreach (var cell in _cells) { composer.AppendLineAtNewLine(cell.ToString()); } composer .DecreaseIndentation() .AppendAtNewLine(@"</TR>"); return(composer.ToString()); }
public override string ToString() { var s = new LinearComposer(); s.Append(ProgressId.ToString("D6")).Append(": ").Append(FullTimingText); s.AppendLineAtNewLine(FullTitle); if (String.IsNullOrEmpty(Details) == false) { s.AppendLineAtNewLine() .AppendLineAtNewLine("Begin Details") .IncreaseIndentation() .AppendAtNewLine(Details) .DecreaseIndentation() .AppendLineAtNewLine("End Details"); } return(s.ToString()); }
public string Execute() { var composer = new LinearComposer(); foreach (var test in this) { composer .AppendLineAtNewLine(test.Execute()) .AppendLine(); } return(composer.ToString()); }
private static string PatternsRangeSample() { Composer.Clear(); Composer.AppendLine("PatternsBetween(3, 12):"); AddPatternsListToComposer(BitUtils.PatternsBetween(3, 12)); Composer.AppendLineAtNewLine(PageSeparator).AppendLine(); Composer.AppendLine("PatternsBetween(12, 3):"); AddPatternsListToComposer(BitUtils.PatternsBetween(12, 3)); Composer.AppendLineAtNewLine(PageSeparator).AppendLine(); Composer.AppendLine("OnesPermutations(5, 2):"); AddPatternsListToComposer(BitUtils.OnesPermutations(5, 2)); Composer.AppendLineAtNewLine(PageSeparator).AppendLine(); Composer.AppendLine("OnesPermutations(5, 3):"); AddPatternsListToComposer(BitUtils.OnesPermutations(5, 3)); Composer.AppendLineAtNewLine(PageSeparator).AppendLine(); Composer.AppendLine("ZerosPermutations(5, 2):"); AddPatternsListToComposer(BitUtils.ZerosPermutations(5, 2)); Composer.AppendLineAtNewLine(PageSeparator).AppendLine(); Composer.AppendLine("ZerosPermutations(5, 3):"); AddPatternsListToComposer(BitUtils.ZerosPermutations(5, 3)); Composer.AppendLineAtNewLine(PageSeparator).AppendLine(); return(Composer.ToString()); }
public string Execute() { var randGen = new GMacRandomGenerator(10); var textComposer = new LinearComposer(); var numFrame = GaNumFrame.CreateConformal(5); var symFrame = GaSymFrame.CreateConformal(5); var numMv1 = randGen.GetNumMultivectorFull(numFrame.GaSpaceDimension); var numMv2 = randGen.GetNumMultivectorFull(numFrame.GaSpaceDimension); var symMv1 = numMv1.ToSymbolic(); var symMv2 = numMv2.ToSymbolic(); var symMvGp = symFrame.Gp[symMv1, symMv2]; //textComposer.AppendLineAtNewLine("Symbolic Multivector 1: ").AppendLine(symMv1); //textComposer.AppendLineAtNewLine("Numeric Multivector 1: ").AppendLine(numMv1); //textComposer.AppendLineAtNewLine("Symbolic Multivector 2: ").AppendLine(symMv2); //textComposer.AppendLineAtNewLine("Numeric Multivector 2: ").AppendLine(numMv2); //textComposer.AppendLineAtNewLine("Symbolic Gp: ").AppendLine(symMvGp); //textComposer.AppendLineAtNewLine("Numeric GP: ").AppendLine(numMvGp); numFrame.SetProductsImplementation(GaBilinearProductImplementation.Computed); GaNumMultivector.ResetAddFactorsCallCount(); var numMvGp = numFrame.Gp[numMv1, numMv2]; var callsCount = GaNumMultivector.AddFactorsCallCount; var diff = symMvGp.ToNumeric() - numMvGp; diff.Simplify(); GaNumMultivector.ResetAddFactorsCallCount(); textComposer .AppendLineAtNewLine("Difference, Computed Tree: ") .AppendLine(callsCount) .AppendLine(diff); numFrame.SetProductsImplementation(GaBilinearProductImplementation.LookupArray); GaNumMultivector.ResetAddFactorsCallCount(); numMvGp = numFrame.Gp[numMv1, numMv2]; callsCount = GaNumMultivector.AddFactorsCallCount; //var factorsCount = ((GaNumMapBilinearArray) numFrame.Gp).FactorsCount; diff = symMvGp.ToNumeric() - numMvGp; diff.Simplify(); GaNumMultivector.ResetAddFactorsCallCount(); textComposer .AppendLineAtNewLine("Difference, Lookup Array: ") .AppendLine(callsCount) //.AppendLine(factorsCount) .AppendLine(diff); numFrame.SetProductsImplementation(GaBilinearProductImplementation.LookupHash); GaNumMultivector.ResetAddFactorsCallCount(); numMvGp = numFrame.Gp[numMv1, numMv2]; callsCount = GaNumMultivector.AddFactorsCallCount; //factorsCount = ((GaNumMapBilinearHash)numFrame.Gp).FactorsCount; diff = symMvGp.ToNumeric() - numMvGp; diff.Simplify(); GaNumMultivector.ResetAddFactorsCallCount(); textComposer .AppendLineAtNewLine("Difference, Lookup Hash: ") .AppendLine(callsCount) //.AppendLine(factorsCount) .AppendLine(diff); numFrame.SetProductsImplementation(GaBilinearProductImplementation.LookupTree); GaNumMultivector.ResetAddFactorsCallCount(); numMvGp = numFrame.Gp[numMv1, numMv2]; callsCount = GaNumMultivector.AddFactorsCallCount; //factorsCount = ((GaNumMapBilinearTree)numFrame.Gp).FactorsCount; diff = symMvGp.ToNumeric() - numMvGp; diff.Simplify(); GaNumMultivector.ResetAddFactorsCallCount(); textComposer .AppendLineAtNewLine("Difference, Lookup Tree: ") .AppendLine(callsCount) //.AppendLine(factorsCount) .AppendLine(diff); numFrame.SetProductsImplementation(GaBilinearProductImplementation.LookupCoefSums); GaNumMultivector.ResetAddFactorsCallCount(); numMvGp = numFrame.Gp[numMv1, numMv2]; callsCount = GaNumMultivector.AddFactorsCallCount; //factorsCount = ((GaNumMapBilinearCoefSums)numFrame.Gp).FactorsCount; diff = symMvGp.ToNumeric() - numMvGp; diff.Simplify(); GaNumMultivector.ResetAddFactorsCallCount(); textComposer .AppendLineAtNewLine("Difference, Lookup CoefSums: ") .AppendLine(callsCount) //.AppendLine(factorsCount) .AppendLine(diff); return(textComposer.ToString()); }
public static void AddTestStartingMessage(string text) { Log.AppendLineAtNewLine("".PadLeft(80, '=')); Log.AppendLine(text); Log.AppendLine(); }