/// <summary> /// Evaluate a cast to multivector value operation /// </summary> /// <param name="expr"></param> /// <returns></returns> private ILanguageValue EvaluateBasicUnaryCastToMultivector(BasicUnary expr) { var value1 = expr.Operand.AcceptVisitor(this); var mvType = (GMacFrameMultivector)expr.Operator; if (value1.ExpressionType.IsNumber()) { var scalarValue = ((ValuePrimitive <MathematicaScalar>)value1).Value; return(GMacValueMultivector.Create( mvType, GaSymMultivector.CreateScalar( mvType.ParentFrame.GaSpaceDimension, scalarValue ) )); } if (value1.ExpressionType.IsFrameMultivector() && value1.ExpressionType.GetFrame().VSpaceDimension == mvType.ParentFrame.VSpaceDimension) { var mvValue = (GMacValueMultivector)value1; return(GMacValueMultivector.Create( mvType, GaSymMultivector.CreateCopy(mvValue.SymbolicMultivector) )); } throw new InvalidOperationException("Invalid cast operation"); }
public IEnumerable <GaSymMultivector> GetSymIntegerLidVectors(int gaSpaceDim, int count, int minValue, int maxValue) { var vSpaceDim = gaSpaceDim.ToVSpaceDimension(); if (count < 1 || count > vSpaceDim) { yield break; } var mv = GaSymMultivector.CreateScalar(gaSpaceDim, Expr.INT_ONE); while (count > 0) { var v = GetSymIntegerVector(gaSpaceDim, minValue, maxValue); var mv1 = mv.Op(v); if (mv1.IsZero()) { continue; } mv = mv1; count--; yield return(v); } }
public override GaSymMultivector BasisBladeSignature(int id) { if (id >= 0 && id < GaSpaceDimension) { return(GaSymMultivector.CreateScalar(GaSpaceDimension, CasConstants.One)); } throw new IndexOutOfRangeException(); }
public override GaSymMultivector BasisBladeSignature(int id) { if (id < 0 || id >= GaSpaceDimension) { throw new IndexOutOfRangeException(); } return(GaSymMultivector.CreateScalar( GaSpaceDimension, OrthonormalMetric[id] < 0 ? CasConstants.MinusOne : CasConstants.One )); }
internal static GMacValueMultivector CreateScalar(GMacFrameMultivector mvType, MathematicaScalar coef) { var mvCoefs = GaSymMultivector.CreateScalar(mvType.ParentFrame.GaSpaceDimension, coef); return(new GMacValueMultivector(mvType, mvCoefs)); }
public override GaSymMultivector BasisBladeSignature(int id) { return(GaSymMultivector.CreateScalar(GaSpaceDimension, OrthogonalMetric[id])); }