Esempio n. 1
0
 internal TensorIndexExpression(TensorExpression expr) : base(expr.LinqExpression)
 {
     if (!(expr.LinqExpression is UnaryExpression || expr.LinqExpression is BinaryExpression ||
           expr.LinqExpression is MethodCallExpression))
     {
         throw new ArgumentException("This tensor expression cannot be used as a tensor index expression");
     }
     ExpressionShape = expr.Shape;
 }
Esempio n. 2
0
        public TensorExpression GetDimensionProductExpression()
        {
            Shape            exprShape = this.IndexSet != null ? this.IndexSet.Tensor.Shape : this.ExpressionShape;
            TensorExpression mulExpr   = exprShape.Count() > 1 ?
                                         (Scalar)exprShape[0] * (Scalar)exprShape[1] : (Scalar)exprShape[0];

            for (int i = 2; i < exprShape.Count(); i++)
            {
                mulExpr = mulExpr * (Scalar)exprShape[i];
            }
            return(mulExpr);
        }
Esempio n. 3
0
 private static MethodCallExpression GetOpMethodCall(string op, params TensorIndexExpression[] args)
 {
     return(Expression.Call(TensorExpression.GetOpMethodInfo <TensorIndexExpression>("Op_" + op, args.Length),
                            args.Select(a => Expression.Convert(a, typeof(TensorIndexExpression))).ToArray()));
 }
Esempio n. 4
0
 public TensorExpressionException(TensorExpression expr, string message) : base(message)
 {
     TensorExpression = expr;
 }
Esempio n. 5
0
 public static TensorIndexExpression Min(TensorExpression l) =>
 new TensorIndexExpression(GetOpMethodCall("Min", (TensorIndexExpression)l), new Dimension(0));
Esempio n. 6
0
 public static TensorIndexExpression Product(TensorExpression l) =>
 new TensorIndexExpression(GetOpMethodCall("Product", (TensorIndexExpression)l), new Dimension(0));
Esempio n. 7
0
 public TensorIndexExpression this[TensorExpression e] => Operation(new TensorIndexExpression(e));
Esempio n. 8
0
 public static TensorExpression Square(TensorExpression l) => l * l;
Esempio n. 9
0
 private static TensorExpression Op_Sqrt(TensorExpression l) => null;
Esempio n. 10
0
 public static TensorExpression Sqrt(TensorExpression l) =>
 new TensorExpression(Expression.Call(TensorExpression.GetOpMethodInfo <TensorExpression>("Op_Sqrt", 1),
                                      Expression.Convert(l.LinqExpression, typeof(TensorExpression))));
Esempio n. 11
0
 private static TensorIndexExpression DummyBinary(TensorIndexExpression l, TensorExpression r) => null;