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();
        }
Example #2
0
        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();
        }
Example #3
0
        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();
        }
Example #4
0
        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();
        }
Example #8
0
        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();
        }
Example #9
0
        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();
        }
Example #11
0
        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();
        }
Example #12
0
        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();
        }
Example #15
0
        public override void Generate()
        {
            GenerateBladeFileStartCode();

            foreach (var grade1 in CurrentFrame.Grades())
            {
                foreach (var grade2 in CurrentFrame.Grades())
                {
                    GenerateDeltaProductDualFunctions(grade1, grade2);
                }
            }

            GenerateMainDeltaProductDualFunction();

            GenerateBladeFileFinishCode();

            FileComposer.FinalizeText();
        }
Example #16
0
        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();
        }
Example #17
0
        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();
        }
Example #18
0
        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();
        }