public TreeNode Visit(AstFrameSubspace item) { var node = new TreeNode(item.Name) { Tag = item, ImageKey = @"Subspace64.png", SelectedImageKey = @"Subspace64.png" }; return(node); }
/// <summary> /// Create a multivector pattern binding all IDs in the given subspace to variables /// </summary> /// <param name="subspace"></param> /// <returns></returns> public static GMacMultivectorBinding Create(AstFrameSubspace subspace) { var mvPattern = new GMacMultivectorBinding(subspace.FrameMultivector); foreach (var id in subspace.AssociatedSubspace.SubspaceSignaturePattern.TrueIndexes) { mvPattern.BindCoefToVariable(id); } return(mvPattern); }
public void Visit(AstFrameSubspace subspace) { Graph .AddNode("Subspace " + subspace.Name) .SetLabel( Graph.Table( "Subspace", "Subspace: " + subspace.Name, subspace.BasisBlades.Select(item => item.Name).ToArray() ) ) .AddEdgeFrom("Basis Blades"); }
public string Visit(AstFrameSubspace item) { var composer = CreateColumnsComposer(); composer .AppendToColumns("Subspace Name:", item.AccessName) .AppendEmptyStringsToColumns() .AppendToColumns( "Basis Blades:", BasisBladesInformationTable(item.BasisBlades.OrderBy(b => b.Grade).ThenBy(b => b.Index)) ); return composer.GenerateText(); }
/// <summary> /// Find a frame subspace given a text reference starting at the current scope information /// </summary> /// <param name="symbolName"></param> /// <returns></returns> public AstFrameSubspace Subspace(string symbolName) { symbolName = symbolName.Trim(); AstFrameSubspace symbolInfo; LanguageSymbol symbol; if (_symbolsCache.TryGetValue(symbolName, out symbol)) { symbolInfo = new AstFrameSubspace(symbol as GMacFrameSubspace); } else { symbolInfo = _expressionCompiler.GetSubspace(symbolName); AddToSymbolsCache(symbolName, symbolInfo.AssociatedSubspace); } this.ReportNormal("Request Frame Subspace " + symbolName.DoubleQuote(), symbolInfo.IsNotNullAndValid()); return(symbolInfo); }
/// <summary> /// If this value access is a multivector this selects components belonging to the given subspace /// into a new value access of the same multivector type /// </summary> /// <param name="subspace"></param> /// <returns></returns> public AstDatastoreValueAccess SelectMultivectorComponents(AstFrameSubspace subspace) { return(SelectMultivectorComponents(subspace.BasisBladeIDs)); }
/// <summary> /// Sets the target variables names for a multivector input\output variable parameter in the code block /// </summary> /// <param name="valueAccessName"></param> /// <param name="subspace"></param> /// <param name="getTargetVarName"></param> /// <returns></returns> public GMacTargetVariablesNaming SetMultivectorParameters(string valueAccessName, AstFrameSubspace subspace, Func <int, string> getTargetVarName) { return(SetMultivectorParameters(BaseMacro.Parameter(valueAccessName), subspace.BasisBladeIDs, getTargetVarName)); }
/// <summary> /// Sets the target variables names for a multivector input\output variable parameter in the code block /// </summary> /// <param name="valueAccess"></param> /// <param name="subspace"></param> /// <param name="getTargetVarName"></param> /// <returns></returns> public GMacTargetVariablesNaming SetMultivectorParameters(AstDatastoreValueAccess valueAccess, AstFrameSubspace subspace, Func <int, string> getTargetVarName) { if (valueAccess.IsNullOrInvalid()) { return(this); } return(SetMultivectorParameters(valueAccess, subspace.BasisBladeIDs, getTargetVarName)); }
/// <summary> /// If the given value access is a multivector this binds a given subspace to variables /// </summary> /// <param name="valueAccessName"></param> /// <param name="subspace"></param> /// <returns></returns> public GMacMacroBinding BindMultivectorPartToVariables(string valueAccessName, AstFrameSubspace subspace) { return(BindMultivectorPartToVariables(ToValueAccess(valueAccessName), subspace)); }
/// <summary> /// If the given value access is a multivector this binds a given subspace to variables /// </summary> /// <param name="valueAccess"></param> /// <param name="subspace"></param> /// <returns></returns> public GMacMacroBinding BindMultivectorPartToVariables(AstDatastoreValueAccess valueAccess, AstFrameSubspace subspace) { if (valueAccess.IsNullOrInvalid()) { throw new ArgumentNullException(nameof(valueAccess)); } if (subspace.IsNullOrInvalid()) { throw new ArgumentNullException(nameof(subspace)); } return(BindToVariables(valueAccess.SelectMultivectorComponents(subspace))); }