public override void Generate() { GenerateBladeFileStartCode(); var casesText = new ListComposer(Environment.NewLine); for (var grade = 2; grade <= CurrentFrame.VSpaceDimension; grade++) { _outGrade = grade; GenerateVectorsOpFunction(); casesText.Add( Templates["op_vectors_main_case"].GenerateUsing(grade) ); } TextComposer.Append( Templates["op_vectors_main"], "frame", CurrentFrameName, "op_vectors_main_case", casesText ); GenerateBladeFileFinishCode(); FileComposer.FinalizeText(); }
public override void Generate() { GenerateBladeFileStartCode(); var computationsText = GenerateComputationsCode(); var newVectorsText = new ListComposer("," + Environment.NewLine); for (var i = 0; i < InputGrade; i++) { newVectorsText.Add("new " + CurrentFrameName + "Vector()"); } TextComposer.AppendAtNewLine( Templates["factor"], "frame", CurrentFrameName, "id", InputId, "double", GMacLanguage.ScalarTypeName, "newvectors", newVectorsText, "computations", computationsText ); GenerateBladeFileFinishCode(); FileComposer.FinalizeText(); }
public override void Generate() { GenerateBladeFileStartCode(); var kvSpaceDimList = Enumerable .Range(0, CurrentFrame.VSpaceDimension) .Select(grade => CurrentFrame.KvSpaceDimension(grade)) .Distinct(); foreach (var kvSpaceDim in kvSpaceDimList) { GenerateNegativeFunction(kvSpaceDim); } GenerateMainInvolutionFunction(DefaultMacro.EuclideanUnary.Negative, grade => true); GenerateMainInvolutionFunction(DefaultMacro.EuclideanUnary.Reverse, FrameUtils.GradeHasNegativeReverse); GenerateMainInvolutionFunction(DefaultMacro.EuclideanUnary.GradeInvolution, FrameUtils.GradeHasNegativeGradeInv); GenerateMainInvolutionFunction(DefaultMacro.EuclideanUnary.CliffordConjugate, FrameUtils.GradeHasNegativeClifConj); GenerateBladeFileFinishCode(); FileComposer.FinalizeText(); }
public override void Generate() { GenerateBladeFileStartCode(); var kvdimsText = new ListComposer(", "); var basisnamesText = new ListComposer("," + Environment.NewLine); var basisbladesText = new ListComposer(Environment.NewLine); foreach (var grade in CurrentFrame.Grades()) { kvdimsText.Add(CurrentFrame.KvSpaceDimension(grade)); basisnamesText.Add(GenerateBasisBladesNames(grade)); basisbladesText.Add(GenerateDeclarations(grade)); } TextComposer.Append( Templates["static"], "frame", CurrentFrameName, "grade", CurrentFrame.VSpaceDimension, "double", GMacLanguage.ScalarTypeName, "kvdims", kvdimsText, "basisnames", basisnamesText, "basisblades", basisbladesText ); GenerateBladeFileFinishCode(); FileComposer.FinalizeText(); }
public override void Generate() { GenerateBladeFileStartCode(); var kvSpaceDimList = Enumerable .Range(0, CurrentFrame.VSpaceDimension) .Select(grade => CurrentFrame.KvSpaceDimension(grade)) .Distinct(); foreach (var kvSpaceDim in kvSpaceDimList) { GenerateMiscFunctions(kvSpaceDim); } var selfEgpMacroInfo = CurrentFrame.Macro(DefaultMacro.EuclideanUnary.SelfGeometricProduct); var edualMacroInfo = CurrentFrame.Macro(DefaultMacro.EuclideanUnary.Dual); foreach (var inGrade in CurrentFrame.Grades()) { GenerateEuclideanDualFunction(inGrade, edualMacroInfo); } for (var inGrade = 2; inGrade < CurrentFrame.VSpaceDimension - 1; inGrade++) { GenerateSelfDpGradeFunction(inGrade, selfEgpMacroInfo); } GenerateMainMiscFunctions(); GenerateBladeFileFinishCode(); FileComposer.FinalizeText(); }
public override void Generate() { TextComposer.Append( Templates["factored_blade"], "frame", CurrentFrameName, "double", GMacLanguage.ScalarTypeName ); FileComposer.FinalizeText(); }
public override void Generate() { var textCollection = new ListComposerCollection( "basis_vectors", "members_declare", "init_inputs", "init_assign", "init_assign_array", "members_list", "normalize", "enorm2" ) { ["basis_vectors"] = { Separator = "," + Environment.NewLine }, ["members_declare"] = { Separator = Environment.NewLine }, ["init_inputs"] = { Separator = ", " }, ["init_assign"] = { Separator = Environment.NewLine }, ["init_assign_array"] = { Separator = Environment.NewLine }, ["members_list"] = { Separator = ", " }, ["normalize"] = { Separator = Environment.NewLine }, ["enorm2"] = { Separator = " + " } }; var basisVectorsCoefsText = new ListComposer(", "); for (var idx = 1; idx <= CurrentFrame.VSpaceDimension; idx++) { basisVectorsCoefsText.Clear(); basisVectorsCoefsText.AddRange( (1 << (idx - 1)).PatternToSequence(CurrentFrame.VSpaceDimension, "0.0D", "1.0D") ); textCollection["basis_vectors"].Add("new " + CurrentFrameName + "Vector(" + basisVectorsCoefsText + ")"); textCollection["members_declare"].Add("public double C" + idx + " { get; set; }"); textCollection["init_inputs"].Add(GMacLanguage.ScalarTypeName + " c" + idx); textCollection["init_assign"].Add("C" + idx + " = c" + idx + ";"); textCollection["init_assign_array"].Add("C" + idx + " = c[" + (idx - 1) + "];"); textCollection["members_list"].Add("C" + idx); textCollection["normalize"].Add("C" + idx + " *= invScalar;"); textCollection["enorm2"].Add("C" + idx + " * C" + idx); } Templates["vector"].SetParametersValues(textCollection); TextComposer.Append(Templates["vector"], "frame", CurrentFrameName, "double", GMacLanguage.ScalarTypeName, "norm2", textCollection["enorm2"].ToString() //TODO: This must be computed from the frame ); FileComposer.FinalizeText(); }
public override void Generate() { var classCodeText = GenerateClassCode(); TextComposer.Append( Templates["mv_class_file"], "frame", CurrentFrameName, "mv_class_name", ClassData.ClassName, "mv_class_code", classCodeText ); FileComposer.FinalizeText(); }
public override void Generate() { GenerateBladeFileStartCode(); foreach (var grade in CurrentFrame.Grades()) { GenerateMethods(grade); } GenerateMainMethod(); GenerateBladeFileFinishCode(); FileComposer.FinalizeText(); }
public override void Generate() { GenerateBladeFileStartCode(); TextComposer.Append( Templates["blade"], "frame", CurrentFrameName, "double", GMacLanguage.ScalarTypeName, "norm2_opname", DefaultMacro.MetricUnary.NormSquared ); GenerateBladeFileFinishCode(); FileComposer.FinalizeText(); }
public override void Generate() { var declareCoefsText = GenerateDeclareCoefsText(); var template = new ParametricComposer("#", "#", ClassCodeTemplateText); TextComposer.Append( template, "frame", CurrentFrameName, "double", GMacLanguage.ScalarTypeName, "zero_class_name", MvLibraryGenerator.MultivectorClassesData[0].ClassName, "declare_coefs", declareCoefsText ); FileComposer.FinalizeText(); }
public override void Generate() { var classCodeText = MvLibraryGenerator.MacroGenDefaults.AllowGenerateMacroCode ? GenerateClassCode() : ""; TextComposer.Append( Templates["mv_class_file"], "frame", CurrentFrameName, "mv_class_name", ClassData.ClassName, "mv_class_code", classCodeText ); FileComposer.FinalizeText(); }
public override void Generate() { GenerateBladeFileStartCode(); for (var grade = 2; grade < CurrentFrame.VSpaceDimension; grade++) { GenerateMaxCoefIdFunction(grade); GenerateFactorGradeFunction(grade); } GenerateFactorMainFunction(); GenerateBladeFileFinishCode(); FileComposer.FinalizeText(); }
public override void Generate() { GenerateBladeFileStartCode(); var casesText = GetCasesText(); TextComposer.AppendAtNewLine( Templates["bilinearproduct_main"], "name", OperatorName, "frame", CurrentFrameName, "zerocond", ZeroCondition, "cases", casesText ); GenerateBladeFileFinishCode(); FileComposer.FinalizeText(); }
public override void Generate() { GenerateBladeFileStartCode(); foreach (var grade1 in CurrentFrame.Grades()) { foreach (var grade2 in CurrentFrame.Grades()) { GenerateDeltaProductDualFunctions(grade1, grade2); } } GenerateMainDeltaProductDualFunction(); GenerateBladeFileFinishCode(); FileComposer.FinalizeText(); }
public override void Generate() { GenerateOutermorphismFileStartCode(); var computationsText = GenerateComputationsCode(); TextComposer.Append( Templates["om_apply"], "double", GMacLanguage.ScalarTypeName, "grade", InputGrade, "num", CurrentFrame.KvSpaceDimension(InputGrade), "computations", computationsText ); GenerateOutermorphismFileFinishCode(); FileComposer.FinalizeText(); }
public override void Generate() { GenerateBladeFileStartCode(); var computationsText = GenerateComputationsCode(); var kvSpaceDim = CurrentFrame.KvSpaceDimension(OutputGrade); TextComposer.AppendAtNewLine( Templates["bilinearproduct"], "name", MethodName, "num", kvSpaceDim, "double", GMacLanguage.ScalarTypeName, "computations", computationsText ); GenerateBladeFileFinishCode(); FileComposer.FinalizeText(); }
public override void Generate() { GenerateBladeFileStartCode(); var kvSpaceDimList = Enumerable .Range(0, CurrentFrame.VSpaceDimension) .Select(grade => CurrentFrame.KvSpaceDimension(grade)) .Distinct(); foreach (var kvSpaceDim in kvSpaceDimList) { GenerateIsZeroFunction(kvSpaceDim); } GenerateMainIsZeroFunction(); GenerateBladeFileFinishCode(); FileComposer.FinalizeText(); }
public override void Generate() { GenerateBladeFileStartCode(); var t2 = Templates["applyversor_main_case"]; var casesText = new ListComposer(Environment.NewLine); foreach (var inGrade1 in CurrentFrame.Grades()) { foreach (var inGrade2 in CurrentFrame.Grades()) { var outGrade = inGrade2; var id = inGrade1 + inGrade2 * CurrentFrame.GradesCount; var name = BladesLibraryGenerator.GetBinaryFunctionName(OperatorName, inGrade1, inGrade2, outGrade); casesText.Add(t2, "name", name, "id", id, "g1", inGrade1, "g2", inGrade2, "grade", outGrade, "frame", CurrentFrameName ); } } TextComposer.AppendAtNewLine( Templates["applyversor_main"], "name", OperatorName, "frame", CurrentFrameName, "cases", casesText ); GenerateBladeFileFinishCode(); FileComposer.FinalizeText(); }
public override void Generate() { GenerateBladeFileStartCode(); foreach (var opName in OperatorNames) { GenerateBeginRegion(opName); foreach (var inGrade in CurrentFrame.Grades()) { GenerateNormFunction(opName, inGrade); } GenerateMainNormFunction(opName); GenerateEndRegion(); } GenerateBladeFileFinishCode(); FileComposer.FinalizeText(); }
public override void Generate() { GenerateOutermorphismFileStartCode(); TextComposer.Append( Templates["outermorphism"], "frame", CurrentFrameName, "double", GMacLanguage.ScalarTypeName, "transpose_code", GenerateOutermorphismTranposeCode(), "metric_det_code", GenerateOutermorphismDeterminantCode(DefaultMacro.Outermorphism.MetricDeterminant), "euclidean_det_code", GenerateOutermorphismDeterminantCode(DefaultMacro.Outermorphism.EuclideanDeterminant), "plus_code", GenerateOutermorphismPlusCode(), "subt_code", GenerateOutermorphismSubtCode(), "compose_code", GenerateOutermorphismComposeCode(), "times_code", GenerateOutermorphismTimesCode(), "divide_code", GenerateOutermorphismDivideCode(), "negative_code", GenerateOutermorphismNegativesCode(), "apply_cases_code", GenerateOutermorphismApplyCasesCode() ); GenerateOutermorphismFileFinishCode(); FileComposer.FinalizeText(); }