/// <summary> /// Find all basis blade IDs with the given grade in a given frame /// </summary> /// <param name="frame"></param> /// <param name="grade"></param> /// <returns></returns> public static IEnumerable <int> BasisBladeIDsOfGrade(this IGMacFrame frame, int grade) { var kvDim = frame.KvSpaceDimension(grade); return (Enumerable .Range(0, kvDim) .Select(index => BasisBladeId(grade, index))); }
public static string BasisBladeGradeIndexName(this IGMacFrame frame, int basisBladeId) { return (new StringBuilder(32) .Append('G') .Append(basisBladeId.BasisBladeGrade()) .Append('I') .Append(basisBladeId.BasisBladeIndex()) .ToString()); }
public static string BasisBladeGradeIndexName(this IGMacFrame frame, int grade, int index) { return (new StringBuilder(32) .Append('G') .Append(grade) .Append('I') .Append(index) .ToString()); }
public static bool IsValidBasisBladeGradeIndex(this IGMacFrame frame, int grade, int index) { if (grade < 0 || grade > frame.VSpaceDimension) { return(false); } var kvDim = KvSpaceDimension(frame.VSpaceDimension, grade); return(index >= 0 && index <= kvDim); }
/// <summary> /// Returns the basis blade IDs of having the given grades /// </summary> /// <param name="frame"></param> /// <param name="gradesSeq"></param> /// <returns></returns> public static IEnumerable <int> BasisBladeIDsOfGrades(this IGMacFrame frame, params int[] gradesSeq) { foreach (var grade in gradesSeq.OrderBy(g => g)) { var kvSpaceDim = frame.KvSpaceDimension(grade); for (var index = 0; index < kvSpaceDim; index++) { yield return(BasisBladeId(grade, index)); } } }
/// <summary> /// The basis blade IDs of the given frame sorted by their grade and index /// </summary> /// <param name="frame"></param> /// <param name="startGrade"></param> /// <returns></returns> public static IEnumerable <int> BasisBladeIDsSortedByGrade(this IGMacFrame frame, int startGrade = 0) { for (var grade = startGrade; grade <= frame.VSpaceDimension; grade++) { var kvSpaceDim = frame.KvSpaceDimension(grade); for (var index = 0; index < kvSpaceDim; index++) { yield return(BasisBladeId(grade, index)); } } }
/// <summary> /// Get all possible grades of the meet of two blades grades /// </summary> /// <param name="frame"></param> /// <param name="grade1"></param> /// <param name="grade2"></param> /// <returns></returns> public static IEnumerable <int> GradesOfMeet(this IGMacFrame frame, int grade1, int grade2) { if (grade1 > frame.VSpaceDimension || grade2 > frame.VSpaceDimension || grade1 < 0 || grade2 < 0) { yield break; } var maxGrade = Math.Min(grade1, grade2); //TODO: Should this be grade++ instead of grade += 2 ? for (var grade = 0; grade <= maxGrade; grade += 2) { yield return(grade); } }
/// <summary> /// Return a list of all possible grades in the geometric product of two k-vectors with /// the given grades /// </summary> /// <param name="frame"></param> /// <param name="grade1"></param> /// <param name="grade2"></param> /// <returns></returns> public static IEnumerable <int> GradesOfEGp(this IGMacFrame frame, int grade1, int grade2) { if (grade1 > frame.VSpaceDimension || grade2 > frame.VSpaceDimension || grade1 < 0 || grade2 < 0) { yield break; } var minGrade = Math.Abs(grade1 - grade2); var maxGrade = Math.Min(frame.VSpaceDimension, grade1 + grade2); for (var grade = minGrade; grade <= maxGrade; grade += 2) { yield return(grade); } }
/// <summary> /// Returns the basis blade IDs of having the given grades grouped by their grade /// </summary> /// <param name="frame"></param> /// <param name="gradesSeq"></param> /// <returns></returns> public static Dictionary <int, List <int> > BasisBladeIDsGroupedByGrade(this IGMacFrame frame, params int[] gradesSeq) { var result = new Dictionary <int, List <int> >(); foreach (var grade in gradesSeq) { var kvSpaceDim = frame.KvSpaceDimension(grade); var newList = new List <int>(kvSpaceDim); for (var index = 0; index < kvSpaceDim; index++) { newList.Add(BasisBladeId(grade, index)); } result.Add(grade, newList); } return(result); }
/// <summary> /// Returns the basis blade IDs of having the given grades grouped by their grade /// </summary> /// <param name="frame"></param> /// <param name="startGrade"></param> /// <returns></returns> public static Dictionary <int, List <int> > BasisBladeIDsGroupedByGrade(this IGMacFrame frame, int startGrade = 0) { var result = new Dictionary <int, List <int> >(); for (var grade = startGrade; grade <= frame.VSpaceDimension; grade++) { var kvSpaceDim = frame.KvSpaceDimension(grade); var newList = new List <int>(kvSpaceDim); for (var index = 0; index < kvSpaceDim; index++) { newList.Add(BasisBladeId(grade, index)); } result.Add(grade, newList); } return(result); }
public static IEnumerable <int> BasisBladeIDsInside(this IGMacFrame frame, int basisBladeId) { return(basisBladeId.GetSubPatterns()); }
public static IEnumerable <int> BasisVectorIndexesInside(this IGMacFrame frame, int grade, int index) { return(BasisBladeId(grade, index).PatternToPositions()); }
/// <summary> /// The grades of k-vectors in the given frame /// </summary> /// <param name="frame"></param> /// <returns></returns> public static IEnumerable <int> Grades(this IGMacFrame frame) { return(Enumerable.Range(0, frame.VSpaceDimension + 1)); }
/// <summary> /// The Basis blade IDs of the given frame /// </summary> /// <param name="frame"></param> /// <returns></returns> public static IEnumerable <int> BasisBladeIDs(this IGMacFrame frame) { return(Enumerable.Range(0, frame.GaSpaceDimension)); }
/// <summary> /// The basis vectors IDs of the given frame /// </summary> /// <param name="frame"></param> /// <returns></returns> public static IEnumerable <int> BasisVectorIDs(this IGMacFrame frame) { return(Enumerable.Range(0, frame.VSpaceDimension).Select(i => (1 << i))); }
public static bool IsValidBasisBladeId(this IGMacFrame frame, int basisBladeId) { return(basisBladeId >= 0 && basisBladeId <= frame.MaxBasisBladeId); }
public static bool IsValidBasisVectorId(this IGMacFrame frame, int basisBladeId) { return(frame.IsValidBasisBladeId(basisBladeId) && basisBladeId.IsBasicPattern()); }
public static GaNumMapBilinearArray CreateFromOuterProduct(IGMacFrame frame) { return(new GaNumOp(frame.VSpaceDimension).ToArrayMap()); }
/// <summary> /// Find the index of a basis blade given its ID /// </summary> /// <param name="frame"></param> /// <param name="basisBladeId"></param> /// <returns></returns> public static int BasisBladeIndex(this IGMacFrame frame, int basisBladeId) { return(GMacLookupTables.IdToIndexTable[basisBladeId]); }
/// <summary> /// Find the ID of a basis vector given its index /// </summary> /// <param name="frame"></param> /// <param name="index"></param> /// <returns></returns> public static int BasisVectorId(this IGMacFrame frame, int index) { return(GMacLookupTables.GradeIndexToIdTable[1][index]); }
/// <summary> /// Find the ID of a basis blade given its grade and index /// </summary> /// <param name="frame"></param> /// <param name="grade"></param> /// <param name="index"></param> /// <returns></returns> public static int BasisBladeId(this IGMacFrame frame, int grade, int index) { return(GMacLookupTables.GradeIndexToIdTable[grade][index]); }
public static IEnumerable <int> BasisBladeIDsInside(this IGMacFrame frame, int grade, int index) { return(BasisBladeId(grade, index).GetSubPatterns()); }
public static IEnumerable <int> BasisBladeIDsContaining(this IGMacFrame frame, int grade, int index) { return(BasisBladeId(grade, index).GetSuperPatterns(frame.VSpaceDimension)); }
public static string BasisBladeIndexedName(this IGMacFrame frame, int grade, int index) { return("E" + BasisBladeId(grade, index)); }
public static bool IsValidBasisVectorIndex(this IGMacFrame frame, int index) { return(index >= 0 && index <= frame.VSpaceDimension); }
public static string BasisBladeBinaryIndexedName(this IGMacFrame frame, int grade, int index) { return("B" + BasisBladeId(grade, index).PatternToString(frame.VSpaceDimension)); }
/// <summary> /// Find the grade and index of a basis blade given its ID /// </summary> /// <param name="frame"></param> /// <param name="basisBladeId"></param> /// <param name="grade"></param> /// <param name="index"></param> public static void BasisBladeGradeIndex(this IGMacFrame frame, int basisBladeId, out int grade, out int index) { basisBladeId.BasisBladeGradeIndex(out grade, out index); }
/// <summary> /// Find all basis blade IDs with the given grade and indexes in a given frame /// </summary> /// <param name="frame"></param> /// <param name="grade"></param> /// <param name="indexSeq"></param> /// <returns></returns> public static IEnumerable <int> BasisBladeIDsOfGrade(this IGMacFrame frame, int grade, params int[] indexSeq) { return(indexSeq.Select(index => BasisBladeId(grade, index))); }
public static GaSymMapBilinearTree CreateFromOuterProduct(IGMacFrame frame) { return(new GaSymOp(frame.VSpaceDimension).ToTreeMap()); }
public static string BasisBladeIndexedName(this IGMacFrame frame, int basisBladeId) { return("E" + basisBladeId); }