Esempio n. 1
0
        /// <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)));
        }
Esempio n. 2
0
 public static string BasisBladeGradeIndexName(this IGMacFrame frame, int basisBladeId)
 {
     return
         (new StringBuilder(32)
          .Append('G')
          .Append(basisBladeId.BasisBladeGrade())
          .Append('I')
          .Append(basisBladeId.BasisBladeIndex())
          .ToString());
 }
Esempio n. 3
0
 public static string BasisBladeGradeIndexName(this IGMacFrame frame, int grade, int index)
 {
     return
         (new StringBuilder(32)
          .Append('G')
          .Append(grade)
          .Append('I')
          .Append(index)
          .ToString());
 }
Esempio n. 4
0
        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);
        }
Esempio n. 5
0
        /// <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));
                }
            }
        }
Esempio n. 6
0
        /// <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));
                }
            }
        }
Esempio n. 7
0
        /// <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);
            }
        }
Esempio n. 8
0
        /// <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);
            }
        }
Esempio n. 9
0
        /// <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);
        }
Esempio n. 10
0
        /// <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);
        }
Esempio n. 11
0
 public static IEnumerable <int> BasisBladeIDsInside(this IGMacFrame frame, int basisBladeId)
 {
     return(basisBladeId.GetSubPatterns());
 }
Esempio n. 12
0
 public static IEnumerable <int> BasisVectorIndexesInside(this IGMacFrame frame, int grade, int index)
 {
     return(BasisBladeId(grade, index).PatternToPositions());
 }
Esempio n. 13
0
 /// <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));
 }
Esempio n. 14
0
 /// <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));
 }
Esempio n. 15
0
 /// <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)));
 }
Esempio n. 16
0
 public static bool IsValidBasisBladeId(this IGMacFrame frame, int basisBladeId)
 {
     return(basisBladeId >= 0 && basisBladeId <= frame.MaxBasisBladeId);
 }
Esempio n. 17
0
 public static bool IsValidBasisVectorId(this IGMacFrame frame, int basisBladeId)
 {
     return(frame.IsValidBasisBladeId(basisBladeId) && basisBladeId.IsBasicPattern());
 }
Esempio n. 18
0
 public static GaNumMapBilinearArray CreateFromOuterProduct(IGMacFrame frame)
 {
     return(new GaNumOp(frame.VSpaceDimension).ToArrayMap());
 }
Esempio n. 19
0
 /// <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]);
 }
Esempio n. 20
0
 /// <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]);
 }
Esempio n. 21
0
 /// <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]);
 }
Esempio n. 22
0
 public static IEnumerable <int> BasisBladeIDsInside(this IGMacFrame frame, int grade, int index)
 {
     return(BasisBladeId(grade, index).GetSubPatterns());
 }
Esempio n. 23
0
 public static IEnumerable <int> BasisBladeIDsContaining(this IGMacFrame frame, int grade, int index)
 {
     return(BasisBladeId(grade, index).GetSuperPatterns(frame.VSpaceDimension));
 }
Esempio n. 24
0
 public static string BasisBladeIndexedName(this IGMacFrame frame, int grade, int index)
 {
     return("E" + BasisBladeId(grade, index));
 }
Esempio n. 25
0
 public static bool IsValidBasisVectorIndex(this IGMacFrame frame, int index)
 {
     return(index >= 0 && index <= frame.VSpaceDimension);
 }
Esempio n. 26
0
 public static string BasisBladeBinaryIndexedName(this IGMacFrame frame, int grade, int index)
 {
     return("B" + BasisBladeId(grade, index).PatternToString(frame.VSpaceDimension));
 }
Esempio n. 27
0
 /// <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);
 }
Esempio n. 28
0
 /// <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)));
 }
Esempio n. 29
0
 public static GaSymMapBilinearTree CreateFromOuterProduct(IGMacFrame frame)
 {
     return(new GaSymOp(frame.VSpaceDimension).ToTreeMap());
 }
Esempio n. 30
0
 public static string BasisBladeIndexedName(this IGMacFrame frame, int basisBladeId)
 {
     return("E" + basisBladeId);
 }