private void GenerateFrameCode(AstFrame frameInfo) { Progress.Enabled = true; var progressId = this.ReportStart( "Generating code files for frame " + frameInfo.AccessName ); CurrentFrame = frameInfo; CurrentFrameName = GetSymbolTargetName(CurrentFrame); CodeFilesComposer.DownFolder(CurrentFrameName); InitializeMultivectorClassesData(); GenerateBaseMvClassFile(); foreach (var classData in MultivectorClassesData.Values) { GenerateDerivedMvClassFiles(classData); } //GenerateFctoredBladeFiles(); //GenerateOutermorphismFiles(); CodeFilesComposer.UpFolder(); Progress.Enabled = true; this.ReportFinish(progressId); }
private void GenerateFrameCode(AstFrame frameInfo) { Progress.Enabled = true; var progressId = this.ReportStart( "Generating code files for frame " + frameInfo.AccessName ); CurrentFrame = frameInfo; CurrentFrameName = GetSymbolTargetName(CurrentFrame); CodeFilesComposer.DownFolder(CurrentFrameName); GenerateBladeFiles(); GenerateVectorFiles(); GenerateFctoredBladeFiles(); GenerateOutermorphismFiles(); CodeFilesComposer.UpFolder(); Progress.Enabled = true; this.ReportFinish(progressId); }
private void GenerateFctoredBladeFiles() { var progressId = this.ReportStart( "Generating FactoredBlade class code files for frame " + CurrentFrame.AccessName ); CodeFilesComposer.DownFolder("FactoredBlade"); GenerateFctoredBladeClassFile(); CodeFilesComposer.UpFolder(); this.ReportFinish(progressId); }
private void GenerateVectorFiles() { int progressId = this.ReportStart( "Generating Vector class code files for frame " + CurrentFrame.AccessName ); CodeFilesComposer.DownFolder("Vector"); GenerateVectorClassFile(); CodeFilesComposer.UpFolder(); this.ReportFinish(progressId); }
private void GenerateFactorMethod(int inGrade, int inId, AstMacro gmacMacroInfo) { CodeFilesComposer.DownFolder("Factor"); CodeFilesComposer.InitalizeFile("Factor" + inId + ".cs"); var fileGen = new FactorMethodFileGenerator(this, inGrade, inId, gmacMacroInfo); fileGen.Generate(); CodeFilesComposer.UnselectActiveFile(); CodeFilesComposer.UpFolder(); }
protected override void ComposeTextFiles() { var framesList = SelectedSymbols.Cast <AstFrame>(); CodeFilesComposer.DownFolder("GMacDSL"); foreach (var frame in framesList) { CodeFilesComposer.InitalizeFile("frame_" + GetSymbolTargetName(frame) + ".gmac"); GenerateFrameCode(frame); CodeFilesComposer.UnselectActiveFile(); } CodeFilesComposer.UpFolder(); }
private void GenerateNamespaceCode(AstNamespace namespaceInfo) { _currentNamespace = namespaceInfo; CodeFilesComposer.DownFolder(namespaceInfo.Name); CodeFilesComposer.InitalizeFile(namespaceInfo.Name + "Utils.cs", GenerateCodeFileStartCode); ActiveFileTextComposer.AppendLineAtNewLine(@"public static class " + namespaceInfo.Name + "Utils"); ActiveFileTextComposer.AppendLineAtNewLine("{"); ActiveFileTextComposer.IncreaseIndentation(); foreach (var constantInfo in namespaceInfo.ChildConstants) { GenerateConstantCode(constantInfo); } foreach (var macroInfo in namespaceInfo.ChildMacros) { GenerateMacroCode(macroInfo); } ActiveFileTextComposer.DecreaseIndentation(); ActiveFileTextComposer.AppendLineAtNewLine("}"); CodeFilesComposer.UnselectActiveFile(GenerateCodeFileEndCode); foreach (var frameInfo in namespaceInfo.ChildFrames) { GenerateFrameCode(frameInfo); } foreach (var structureInfo in namespaceInfo.ChildStructures) { GenerateStructureCode(structureInfo); } foreach (var childNamespaceInfo in namespaceInfo.ChildNamespaces) { GenerateNamespaceCode(childNamespaceInfo); } CodeFilesComposer.UpFolder(); }
private void GenerateApplyVersorFunction(string opName, string funcName, int inGrade1, int inGrade2, int outGrade) { CodeFilesComposer.DownFolder(opName); CodeFilesComposer.InitalizeFile(funcName + ".cs"); var fileGen = new ApplyVersorMethodFileGenerator( this, opName, funcName, inGrade1, inGrade2, outGrade ); fileGen.Generate(); CodeFilesComposer.UnselectActiveFile(); CodeFilesComposer.UpFolder(); }
private void GenerateDerivedMvClassFiles(MvClassData classData) { CodeFilesComposer.DownFolder(classData.ClassName); CodeFilesComposer.InitalizeFile(classData.ClassName + ".cs"); DerivedMvClassFileGenerator.Generate(this, classData); CodeFilesComposer.UnselectActiveFile(); foreach (var classData2 in MultivectorClassesData.Values) { CodeFilesComposer.InitalizeFile(classData.ClassName + "Calc" + classData2.ClassId + ".cs"); DerivedMvClassCalcFileGenerator.Generate(this, classData, classData2); CodeFilesComposer.UnselectActiveFile(); } CodeFilesComposer.UpFolder(); }
internal void GenerateBilinearProductMethodFile(string opName, string methodName, int inGrade1, int inGrade2, int outGrade) { CodeFilesComposer.DownFolder(opName); CodeFilesComposer.InitalizeFile(methodName + ".cs"); var fileGen = new BilinearProductMethodFileGenerator( this, opName, methodName, inGrade1, inGrade2, outGrade ); fileGen.Generate(); CodeFilesComposer.UnselectActiveFile(); CodeFilesComposer.UpFolder(); }
private void GenerateOutermorphismFiles() { var progressId = this.ReportStart( "Generating Outermorphism class code files for frame " + CurrentFrame.AccessName ); CodeFilesComposer.DownFolder("Outermorphism"); GenerateOutermorphismClassFile(); CodeFilesComposer.DownFolder("Apply"); for (var inGrade = 1; inGrade <= CurrentFrame.VSpaceDimension; inGrade++) { GenerateOutermorphismApplyMethodFile(inGrade); } CodeFilesComposer.UpFolder(); CodeFilesComposer.UpFolder(); this.ReportFinish(progressId); }
//TODO: Meet and join algorithm without factorization //Given blades A and B of grades gA and gB // //EGPDual_gAgBgX is given by ((A gp B) lcp reverse(I)).@GgX@ // //1) find grade of C = (A dp B) call it gC. Use DPGrade() function //2) compute the blade D = EGPDual_gAgBgD(A, B) with grade gD = n - gC //that is, D = dual(A dp B) //3) find grade of S = D dp A call it gS //4) compute the blade S = EGP_gDgAgS(S, A) with grade gS //that is, S = dual(A dp B) dp A //5) Meet = S lcp B //6) Join = S ^ B private void GenerateBladeFiles() { Progress.Enabled = true; var progressId = this.ReportStart( "Generating Blade class code files for frame " + CurrentFrame.AccessName ); CodeFilesComposer.DownFolder("Blade"); GenerateBladeClassFile(); GenerateBladeStaticUtilsFile(); GenerateBladeIsZeroMethodsFile(); GenerateBladeEqualsMethodsFile(); GenerateBladeInvolutionMethodsFile(); GenerateBladeNormMethodsFile(); GenerateBladeMiscMethodsFile(); GenerateOuterProductFiles(); GenerateLeftContractionProductFiles(); GenerateEuclideanLeftContractionProductFiles(); GenerateRightContractionProductFiles(); GenerateEuclideanRightContractionProductFiles(); GenerateScalarProductFiles(); GenerateEuclideanScalarProductFiles(); GenerateGeometricProductFiles(); GenerateEuclideanGeometricProductFiles(); GenerateEuclideanGeometricProductDualFiles(); GenerateDeltaProductFile(); GenerateDeltaProductDualFile(); GenerateSelfEuclideanGeometricProductFile(); GenerateApplyVersorFiles(); GenerateFactorFiles(); //TODO: Create blade subroutines to reflect blades in other blades: /* * If A, B are blades, we can define several blade-redlection GA relations (table 7.1): * * //This relation does not take orientation of resulting blade into consideration * A.ReflectInBlade(B) => B gp A gp reverse(B)/norm2(B) * * //These take the orientation of the result into consideration * A.DirectReflectInDirectBlade(B) => -1 ^ (grade(A) * [grade(B) + 1]) * A.ReflectInBlade(B) * A.DirectReflectInDualBlade(B) => -1 ^ (grade(A) * grade(B)) * A.ReflectInBlade(B) * A.DualReflectInDirectBlade(B) => -1 ^ ([n - 1] * [grade(A) + 1] * [grade(B) + 1]) * A.ReflectInBlade(B) * A.DualReflectInDualBlade(B) => -1 ^ ([grade(A) + 1] * grade(B)) * A.ReflectInBlade(B) */ CodeFilesComposer.UpFolder(); Progress.Enabled = true; this.ReportFinish(progressId); }