internal static IEnumerable <ILanguageType> Types(this GMacFrame parentFrame) { return (Enumerable .Repeat(parentFrame.MultivectorType as ILanguageType, 1) .Concat(parentFrame.Structures)); }
internal GMacMultivectorTransform(string transformName, LanguageScope parentScope, GMacFrame sourceFrame, GMacFrame targetFrame, GaLinearTransform symbolicTransform) : base(transformName, parentScope, RoleNames.Transform) { SourceFrame = sourceFrame; TargetFrame = targetFrame; AssociatedSymbolicTransform = symbolicTransform; }
internal GMacAstSymbolsCache(GMacFrame rootSymbol) { GMacRootAst = rootSymbol.GMacRootAst; RootSymbol = rootSymbol; InitializeDictionaries(rootSymbol.MainSymbols()); }
internal GMacFrameBasisVector(string basisVectorName, GMacFrame parentFrame, int basisVectorIndex, MathematicaScalar signature) : base(basisVectorName, parentFrame.ChildScope, RoleNames.FrameBasisVector, parentFrame.MultivectorType) { BasisVectorIndex = basisVectorIndex; Signature = signature; MultivectorValue = GMacValueMultivector.CreateBasisBlade(ParentFrame.MultivectorType, BasisVectorId); }
/// <summary> /// Create a child frame /// </summary> /// <param name="frameName"></param> /// <param name="basisVectorsNames"></param> /// <param name="attachedSymbolicFrame"></param> /// <returns></returns> internal GMacFrame DefineFrame(string frameName, string[] basisVectorsNames, GaSymFrame attachedSymbolicFrame) { var newFrame = new GMacFrame(frameName, ChildSymbolScope, attachedSymbolicFrame); GMacRootAst.FramesCount++; newFrame.DefineFrameMultivector(); newFrame.DefineBasisVectors(basisVectorsNames); return(newFrame); }
internal static IEnumerable <LanguageSymbol> MainSymbols(this GMacFrame parentFrame) { var roleNames = new[] { RoleNames.FrameMultivector, RoleNames.FrameSubspace, RoleNames.Constant, RoleNames.Macro, RoleNames.Structure, RoleNames.Transform }; return(parentFrame.ChildScope.Symbols(roleNames)); }
/// <summary> /// Set the basis frame and transformations between frames for this derived frame /// </summary> /// <param name="baseFrame"></param> /// <param name="d2BOm"></param> /// <param name="b2DOm"></param> internal void SetDfs(GMacFrame baseFrame, GMacMultivectorTransform d2BOm, GMacMultivectorTransform b2DOm) { BaseFrame = baseFrame; DerivedToBaseTransform = d2BOm; BaseToDerivedTransform = b2DOm; }
internal bool LookupFrame(string symbolName, out GMacFrame outSymbol) { return(ChildSymbolScope.LookupSymbol(symbolName, RoleNames.Frame, out outSymbol)); }
/// <summary> /// Create a child transform /// </summary> /// <param name="transformName"></param> /// <param name="sourceFrame"></param> /// <param name="targetFrame"></param> /// <param name="baseTransform"></param> /// <returns></returns> internal GMacMultivectorTransform DefineTransform(string transformName, GMacFrame sourceFrame, GMacFrame targetFrame, GaSymMapUnilinear baseTransform) { return(new GMacMultivectorTransform(transformName, ChildSymbolScope, sourceFrame, targetFrame, baseTransform)); }
//TODO: Make more overloads for other GMacAST symbols internal static void SetSymbolicMathName(this GMacFrame frame, string mathName) { frame.GMacRootAst.SymbolicMathNames[frame] = mathName; }
internal static IEnumerable <GMacMacro> Macros(this GMacFrame parentFrame) { return (parentFrame.ChildMacros .Concat(parentFrame.Structures.SelectMany(s => s.Macros))); }
internal static IEnumerable <SymbolNamedValue> NamedValues(this GMacFrame parentFrame) { return (parentFrame.FrameBasisVectors.Cast <SymbolNamedValue>() .Concat(parentFrame.ChildConstants)); }