コード例 #1
0
ファイル: GMacScalarBinding.cs プロジェクト: phreed/GMac
 /// <summary>
 /// Create a symbolic scalar from this pattern. If the pattern is a constant its internal
 /// expression is returned, else a symbolic expression with a single variable is created and returned
 /// </summary>
 /// <param name="varNameTemplate"></param>
 /// <returns></returns>
 internal MathematicaScalar ToMathematicaScalar(StringSequenceTemplate varNameTemplate)
 {
     return
         (IsConstant
         ? ConstantSymbolicScalar
         : MathematicaScalar.Create(SymbolicUtils.Cas, varNameTemplate.GenerateNextString()));
 }
コード例 #2
0
ファイル: GMacScalarBinding.cs プロジェクト: phreed/GMac
 /// <summary>
 /// Create a symbolic expression from this pattern. If the pattern is a constant its internal
 /// expression is returned, else a symbolic expression with a single variable is created and returned
 /// </summary>
 /// <param name="varNameTemplate"></param>
 /// <returns></returns>
 public Expr ToExpr(StringSequenceTemplate varNameTemplate)
 {
     return
         (IsConstant
         ? ConstantExpr
         : SymbolicUtils.Cas[varNameTemplate.GenerateNextString()]);
 }
コード例 #3
0
ファイル: GMacStructureBinding.cs プロジェクト: phreed/GMac
        public ValueStructureSparse ToValue(StringSequenceTemplate varNameTemplate)
        {
            var structValue = ValueStructureSparse.Create(BaseStructure.AssociatedStructure);

            foreach (var pair in _patternDictionary)
            {
                var scalarPattern = pair.Value as GMacScalarBinding;

                if (scalarPattern != null)
                {
                    structValue[pair.Key] = scalarPattern.ToValue(varNameTemplate).AssociatedValue;

                    continue;
                }

                var mvPattern = pair.Value as GMacMultivectorBinding;

                if (mvPattern != null)
                {
                    structValue[pair.Key] = mvPattern.ToValue(varNameTemplate).AssociatedValue;

                    continue;
                }

                var structPattern = pair.Value as GMacStructureBinding;

                if (structPattern != null)
                {
                    structValue[pair.Key] = structPattern.ToValue(varNameTemplate);
                }
            }

            return(structValue);
        }
コード例 #4
0
ファイル: GMacScalarBinding.cs プロジェクト: phreed/GMac
 /// <summary>
 /// Create a symbolic value from this pattern. If the pattern is a constant its internal
 /// expression is returned, else a symbolic expression with a single variable is created and returned
 /// </summary>
 /// <param name="varNameTemplate"></param>
 /// <returns></returns>
 public AstValueScalar ToValue(StringSequenceTemplate varNameTemplate)
 {
     return
         (IsConstant
         ? ConstantValue
         : new AstValueScalar(
              ValuePrimitive <MathematicaScalar> .Create(
                  GMacType.AssociatedPrimitiveType,
                  MathematicaScalar.Create(SymbolicUtils.Cas, varNameTemplate.GenerateNextString())
                  )
              ));
 }
コード例 #5
0
ファイル: AstVisitorDotGraph.cs プロジェクト: phreed/GMac
        internal AstVisitorDotGraph()
            : base(DotGraphType.Directed, String.Empty)
        {
            IconsPath = Path.Combine(
                Path.GetDirectoryName(Application.ExecutablePath) ?? "",
                "Icons\\64"
                );

            _nodeNamesTemplate = new StringSequenceTemplate()
            {
                NameParamValue = "gvNode"
            };
        }
コード例 #6
0
        public AstValueMultivector SubspaceToMultivector(string subspaceName, StringSequenceTemplate varNameTemplate)
        {
            var subspaceInfo = Subspace(subspaceName);

            if (subspaceInfo.IsNullOrInvalid())
            {
                return(null);
            }

            var pattern = GMacMultivectorBinding.Create(subspaceInfo);

            return(pattern.ToValue(varNameTemplate));
        }
コード例 #7
0
ファイル: GMacMultivectorBinding.cs プロジェクト: phreed/GMac
        /// <summary>
        /// Convert this binding pattern into a multivector value
        /// </summary>
        /// <param name="varNameTemplate"></param>
        /// <returns></returns>
        public AstValueMultivector ToValue(StringSequenceTemplate varNameTemplate)
        {
            var mv = GaMultivector.CreateZero(BaseFrameMultivector.AssociatedFrameMultivector.ParentFrame.GaSpaceDimension);

            foreach (var pair in _patternDictionary)
            {
                mv[pair.Key] = pair.Value.ToMathematicaScalar(varNameTemplate);
            }

            return(new AstValueMultivector(
                       GMacValueMultivector.Create(
                           BaseFrameMultivector.AssociatedFrameMultivector,
                           mv
                           )
                       ));
        }