Ejemplo n.º 1
0
 internal GMacMultivectorTransform(string transformName, LanguageScope parentScope, GMacFrame sourceFrame, GMacFrame targetFrame, IGaSymMapUnilinear symbolicTransform)
     : base(transformName, parentScope, RoleNames.Transform)
 {
     SourceFrame = sourceFrame;
     TargetFrame = targetFrame;
     AssociatedSymbolicTransform = symbolicTransform;
 }
Ejemplo n.º 2
0
        public GaSymMapUnilinearComposed ResetToMapping(IGaSymMapUnilinear firstMapping)
        {
            _mappingsList.Clear();
            _mappingsList.Add(firstMapping);

            return(this);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Extract the basis vectors mappings from the given linear map and convert them into a
        /// linear map on the base vector space of the frame. This should only be used if basis vectors
        /// of the domain are mapped to vectors of the target domain.
        /// </summary>
        /// <param name="linearMap"></param>
        /// <returns></returns>
        public static Expr[,] BasisVectorMapsToExprScalarsArray(this IGaSymMapUnilinear linearMap)
        {
            var resultArray = new Expr[
                linearMap.TargetVSpaceDimension,
                linearMap.DomainVSpaceDimension
                              ];

            foreach (var basisVectorMap in linearMap.BasisVectorMaps())
            {
                var col   = basisVectorMap.Item1;
                var terms =
                    basisVectorMap
                    .Item2
                    .NonZeroExprTerms
                    .Where(t => t.Key.IsValidBasisVectorId());

                foreach (var term in terms)
                {
                    var row = term.Key;

                    resultArray[row, col] = term.Value;
                }
            }

            return(resultArray);
        }
Ejemplo n.º 4
0
 public static MathematicaMatrix ToMatrix(this IGaSymMapUnilinear linearMap)
 {
     return(MathematicaMatrix.CreateFullMatrix(
                SymbolicUtils.Cas,
                ToExprScalarsArray(linearMap)
                ));
 }
Ejemplo n.º 5
0
        public GaSymMapUnilinearComposed AddMapping(IGaSymMapUnilinear map)
        {
            if (_mappingsList.Count > 0 && TargetVSpaceDimension != map.DomainVSpaceDimension)
            {
                throw new InvalidOperationException("Mapping space dimensions mismatch");
            }

            _mappingsList.Add(map);

            return(this);
        }
Ejemplo n.º 6
0
        public GaSymMapUnilinearCombined AddMapping(MathematicaScalar coef, IGaSymMapUnilinear linearMap)
        {
            if (
                linearMap.DomainVSpaceDimension != DomainVSpaceDimension ||
                linearMap.TargetVSpaceDimension != TargetVSpaceDimension
                )
            {
                throw new InvalidOperationException("Linear map dimensions mismatch");
            }

            _termsList.Add(new GaSymMapUnilinearCombinedTerm(coef.Expression, linearMap));

            return(this);
        }
Ejemplo n.º 7
0
        public static GaSymMapUnilinearCoefSums ToCoefSumsMap(this IGaSymMapUnilinear linearMap)
        {
            var resultMap = GaSymMapUnilinearCoefSums.Create(
                linearMap.DomainVSpaceDimension,
                linearMap.TargetVSpaceDimension
                );

            foreach (var basisBladeMap in linearMap.BasisBladeMaps())
            {
                resultMap.SetBasisBladeMap(basisBladeMap.Item1, basisBladeMap.Item2);
            }

            return(resultMap);
        }
Ejemplo n.º 8
0
        public static GaSymMapUnilinearArray Create(IGaSymMapUnilinear linearMap, IEnumerable <int> idsList)
        {
            var table = new GaSymMapUnilinearArray(
                linearMap.DomainVSpaceDimension,
                linearMap.TargetVSpaceDimension
                );

            foreach (var id1 in idsList)
            {
                var resultMv = linearMap[id1];

                if (!resultMv.IsNullOrZero())
                {
                    table._basisBladeMaps[id1] = resultMv;
                }
            }

            return(table);
        }
Ejemplo n.º 9
0
        public static MathematicaScalar[,] ToScalarsArray(this IGaSymMapUnilinear linearMap)
        {
            var resultArray = new MathematicaScalar[
                linearMap.TargetGaSpaceDimension,
                linearMap.DomainGaSpaceDimension
                              ];

            foreach (var basisBladeMap in linearMap.BasisBladeMaps())
            {
                var col = basisBladeMap.Item1;

                foreach (var term in basisBladeMap.Item2.NonZeroExprTerms)
                {
                    var row = term.Key;

                    resultArray[row, col] = term.Value.ToMathematicaScalar();
                }
            }

            return(resultArray);
        }
Ejemplo n.º 10
0
 internal GaSymMapUnilinearCombinedTerm(Expr coef, IGaSymMapUnilinear linearMap)
 {
     Coef      = coef;
     LinearMap = linearMap;
 }
Ejemplo n.º 11
0
 private GaSymMapUnilinearComposed(IGaSymMapUnilinear firstMapping)
 {
     _mappingsList.Add(firstMapping);
 }
Ejemplo n.º 12
0
 public static GaSymMapUnilinearComposed Create(IGaSymMapUnilinear firstMappings)
 {
     return(new GaSymMapUnilinearComposed(firstMappings));
 }
Ejemplo n.º 13
0
 public static GaSymMapUnilinearMatrix ToMatrixMap(this IGaSymMapUnilinear linearMap)
 {
     return(GaSymMapUnilinearMatrix.Create(linearMap.ToMatrix()));
 }
Ejemplo n.º 14
0
 public static IEnumerable <Expr[]> ToExprScalarColumnsList(this IGaSymMapUnilinear linearMap)
 {
     return(Enumerable
            .Range(0, linearMap.DomainGaSpaceDimension)
            .Select(id => linearMap[id].TermsToExprArray()));
 }
Ejemplo n.º 15
0
 public static IEnumerable <IGaSymMultivector> ToColumnsList(this IGaSymMapUnilinear linearMap)
 {
     return(Enumerable
            .Range(0, linearMap.DomainGaSpaceDimension)
            .Select(id => linearMap[id]));
 }
Ejemplo n.º 16
0
 public static Dictionary <int, IGaSymMultivector> ToDictionary(this IGaSymMapUnilinear linearMap)
 {
     return(linearMap
            .BasisBladeMaps()
            .ToDictionary(t => t.Item1, t => t.Item2));
 }