Beispiel #1
0
        public static GaSymMultivectorHash ToHashMultivector(this IGaSymMultivector mv)
        {
            var sparseMv = GaSymMultivectorHash.CreateZero(mv.GaSpaceDimension);

            foreach (var term in mv.NonZeroTerms)
            {
                sparseMv.Add(term.Key, term.Value);
            }

            return(sparseMv);
        }
Beispiel #2
0
        public static GaTreeMultivector ToTreeMultivector(this GaSymMultivectorHash sparseMv)
        {
            var treeMv = GaTreeMultivector.CreateZero(sparseMv.GaSpaceDimension);

            foreach (var term in sparseMv.NonZeroExprTerms)
            {
                treeMv[term.Key] = term.Value;
            }

            return(treeMv);
        }
Beispiel #3
0
            public MultivectorSizeInfo(int gaSpaceDim, IEnumerable <int> idsList)
            {
                //Construct a multivector and set all its selected terms to the same symbolic scalar
                var mv = GaSymMultivectorHash.CreateZero(gaSpaceDim);

                foreach (var id in idsList)
                {
                    mv.Add(id, SymbolicUtils.Constants.One);
                }

                TermsCount = mv.Count;

                //The overhead size is equal to the total size of the multivector minus the single symbolic scalar size
                ScalarsSize = SymbolicUtils.Constants.One.SizeInBytes();

                HashSize = mv.SizeInBytes();

                NewTreeSize = mv.ToMultivector().SizeInBytes();

                TreeSize = mv.ToTreeMultivector().SizeInBytes();

                ArraySize = mv.TermsToArray().SizeInBytes();
            }