Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
05/06/19 14:20:06 (5 years ago)
Author:
msemenki
Message:

#2988: New version of class structure.

Location:
branches/2988_ModelsOfModels2/HeuristicLab.Problems.DataAnalysis.Symbolic
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/2988_ModelsOfModels2/HeuristicLab.Problems.DataAnalysis.Symbolic

  • branches/2988_ModelsOfModels2/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Interpreter/SymbolicDataAnalysisExpressionCompiledTreeInterpreter.cs

    r16722 r16899  
    154154    private static readonly PropertyInfo Indexer = typeof(IList<double>).GetProperty("Item");
    155155    private static Expression MakeExpr(ISymbolicExpressionTreeNode node, Dictionary<string, int> variableIndices, Expression row, Expression columns) {
    156       var opcode = OpCodes.MapSymbolToOpCode(node);
     156      var opcode = OpCode.MapSymbolToOpCode(node);
    157157      #region switch opcode
    158158      switch (opcode) {
    159         case OpCodes.Constant: {
     159        case OpCode.Constant: {
    160160            var constantTreeNode = (ConstantTreeNode)node;
    161161            return Expression.Constant(constantTreeNode.Value);
    162162          }
    163         case OpCodes.Variable: {
     163        case OpCode.Variable: {
    164164            var variableTreeNode = (VariableTreeNode)node;
    165165            var variableWeight = Expression.Constant(variableTreeNode.Weight);
     
    169169            return Expression.Multiply(variableWeight, Expression.Property(valuesExpr, Indexer, row));
    170170          }
    171         case OpCodes.Add: {
     171        case OpCode.Add: {
    172172            Expression result = MakeExpr(node.GetSubtree(0), variableIndices, row, columns);
    173173            for (int i = 1; i < node.SubtreeCount; ++i) {
     
    176176            return result;
    177177          }
    178         case OpCodes.Sub: {
     178        case OpCode.Sub: {
    179179            Expression result = MakeExpr(node.GetSubtree(0), variableIndices, row, columns);
    180180            if (node.SubtreeCount == 1)
     
    185185            return result;
    186186          }
    187         case OpCodes.Mul: {
     187        case OpCode.Mul: {
    188188            Expression result = MakeExpr(node.GetSubtree(0), variableIndices, row, columns);
    189189            for (int i = 1; i < node.SubtreeCount; ++i) {
     
    192192            return result;
    193193          }
    194         case OpCodes.Div: {
     194        case OpCode.Div: {
    195195            Expression result = MakeExpr(node.GetSubtree(0), variableIndices, row, columns);
    196196            if (node.SubtreeCount == 1)
     
    201201            return result;
    202202          }
    203         case OpCodes.Average: {
     203        case OpCode.Average: {
    204204            Expression result = MakeExpr(node.GetSubtree(0), variableIndices, row, columns);
    205205            for (int i = 1; i < node.SubtreeCount; ++i) {
     
    208208            return Expression.Divide(result, Expression.Constant((double)node.SubtreeCount));
    209209          }
    210         case OpCodes.Absolute: {
     210        case OpCode.Absolute: {
    211211            var arg = MakeExpr(node.GetSubtree(0), variableIndices, row, columns);
    212212            return Expression.Call(Abs, arg);
    213213          }
    214         case OpCodes.Cos: {
     214        case OpCode.Cos: {
    215215            var arg = MakeExpr(node.GetSubtree(0), variableIndices, row, columns);
    216216            return Expression.Call(Cos, arg);
    217217          }
    218         case OpCodes.Sin: {
     218        case OpCode.Sin: {
    219219            var arg = MakeExpr(node.GetSubtree(0), variableIndices, row, columns);
    220220            return Expression.Call(Sin, arg);
    221221          }
    222         case OpCodes.Tan: {
     222        case OpCode.Tan: {
    223223            var arg = MakeExpr(node.GetSubtree(0), variableIndices, row, columns);
    224224            return Expression.Call(Tan, arg);
    225225          }
    226         case OpCodes.Tanh: {
     226        case OpCode.Tanh: {
    227227            var arg = MakeExpr(node.GetSubtree(0), variableIndices, row, columns);
    228228            return Expression.Call(Tanh, arg);
    229229          }
    230         case OpCodes.Square: {
     230        case OpCode.Square: {
    231231            var arg = MakeExpr(node.GetSubtree(0), variableIndices, row, columns);
    232232            return Expression.Power(arg, Expression.Constant(2.0));
    233233          }
    234         case OpCodes.Cube: {
     234        case OpCode.Cube: {
    235235            var arg = MakeExpr(node.GetSubtree(0), variableIndices, row, columns);
    236236            return Expression.Power(arg, Expression.Constant(3.0));
    237237          }
    238         case OpCodes.Power: {
     238        case OpCode.Power: {
    239239            var arg = MakeExpr(node.GetSubtree(0), variableIndices, row, columns);
    240240            var power = MakeExpr(node.GetSubtree(1), variableIndices, row, columns);
    241241            return Expression.Power(arg, Expression.Call(Round, power));
    242242          }
    243         case OpCodes.SquareRoot: {
     243        case OpCode.SquareRoot: {
    244244            var arg = MakeExpr(node.GetSubtree(0), variableIndices, row, columns);
    245245            return Expression.Call(Sqrt, arg);
    246246          }
    247         case OpCodes.CubeRoot: {
     247        case OpCode.CubeRoot: {
    248248            var arg = MakeExpr(node.GetSubtree(0), variableIndices, row, columns);
    249249            return Expression.Power(arg, Expression.Constant(1.0 / 3.0));
    250250          }
    251         case OpCodes.Root: {
     251        case OpCode.Root: {
    252252            var arg = MakeExpr(node.GetSubtree(0), variableIndices, row, columns);
    253253            var power = MakeExpr(node.GetSubtree(1), variableIndices, row, columns);
    254254            return Expression.Power(arg, Expression.Divide(Expression.Constant(1.0), Expression.Call(Round, power)));
    255255          }
    256         case OpCodes.Exp: {
     256        case OpCode.Exp: {
    257257            var arg = MakeExpr(node.GetSubtree(0), variableIndices, row, columns);
    258258            return Expression.Call(Exp, arg);
    259259          }
    260         case OpCodes.Log: {
     260        case OpCode.Log: {
    261261            var arg = MakeExpr(node.GetSubtree(0), variableIndices, row, columns);
    262262            return Expression.Call(Log, arg);
    263263          }
    264         case OpCodes.Gamma: {
     264        case OpCode.Gamma: {
    265265            var arg = MakeExpr(node.GetSubtree(0), variableIndices, row, columns);
    266266            var isNaN = Expression.Call(IsNaN, arg);
     
    278278            return expr;
    279279          }
    280         case OpCodes.Psi: {
     280        case OpCode.Psi: {
    281281            var arg = MakeExpr(node.GetSubtree(0), variableIndices, row, columns);
    282282            var isNaN = Expression.Call(IsNaN, arg);
     
    300300            return expr;
    301301          }
    302         case OpCodes.Dawson: {
     302        case OpCode.Dawson: {
    303303            var arg = MakeExpr(node.GetSubtree(0), variableIndices, row, columns);
    304304            var isNaN = Expression.Call(IsNaN, arg);
     
    314314            return expr;
    315315          }
    316         case OpCodes.ExponentialIntegralEi: {
     316        case OpCode.ExponentialIntegralEi: {
    317317            var arg = MakeExpr(node.GetSubtree(0), variableIndices, row, columns);
    318318            var isNaN = Expression.Call(IsNaN, arg);
     
    328328            return expr;
    329329          }
    330         case OpCodes.SineIntegral: {
     330        case OpCode.SineIntegral: {
    331331            var arg = MakeExpr(node.GetSubtree(0), variableIndices, row, columns);
    332332            var isNaN = Expression.Call(IsNaN, arg);
     
    348348            return expr;
    349349          }
    350         case OpCodes.CosineIntegral: {
     350        case OpCode.CosineIntegral: {
    351351            var arg = MakeExpr(node.GetSubtree(0), variableIndices, row, columns);
    352352            var isNaN = Expression.Call(IsNaN, arg);
     
    368368            return expr;
    369369          }
    370         case OpCodes.HyperbolicSineIntegral: {
     370        case OpCode.HyperbolicSineIntegral: {
    371371            var arg = MakeExpr(node.GetSubtree(0), variableIndices, row, columns);
    372372            var isNaN = Expression.Call(IsNaN, arg);
     
    388388            return expr;
    389389          }
    390         case OpCodes.HyperbolicCosineIntegral: {
     390        case OpCode.HyperbolicCosineIntegral: {
    391391            var arg = MakeExpr(node.GetSubtree(0), variableIndices, row, columns);
    392392            var isNaN = Expression.Call(IsNaN, arg);
     
    408408            return expr;
    409409          }
    410         case OpCodes.FresnelSineIntegral: {
     410        case OpCode.FresnelSineIntegral: {
    411411            var arg = MakeExpr(node.GetSubtree(0), variableIndices, row, columns);
    412412            var isNaN = Expression.Call(IsNaN, arg);
     
    424424            return expr;
    425425          }
    426         case OpCodes.FresnelCosineIntegral: {
     426        case OpCode.FresnelCosineIntegral: {
    427427            var arg = MakeExpr(node.GetSubtree(0), variableIndices, row, columns);
    428428            var isNaN = Expression.Call(IsNaN, arg);
     
    440440            return expr;
    441441          }
    442         case OpCodes.AiryA: {
     442        case OpCode.AiryA: {
    443443            var arg = MakeExpr(node.GetSubtree(0), variableIndices, row, columns);
    444444            var isNaN = Expression.Call(IsNaN, arg);
     
    458458            return expr;
    459459          }
    460         case OpCodes.AiryB: {
     460        case OpCode.AiryB: {
    461461            var arg = MakeExpr(node.GetSubtree(0), variableIndices, row, columns);
    462462            var isNaN = Expression.Call(IsNaN, arg);
     
    476476            return expr;
    477477          }
    478         case OpCodes.Norm: {
     478        case OpCode.Norm: {
    479479            var arg = MakeExpr(node.GetSubtree(0), variableIndices, row, columns);
    480480            var result = Expression.Variable(typeof(double));
     
    487487              result);
    488488          }
    489         case OpCodes.Erf: {
     489        case OpCode.Erf: {
    490490            var arg = MakeExpr(node.GetSubtree(0), variableIndices, row, columns);
    491491            var isNaN = Expression.Call(IsNaN, arg);
     
    499499              result);
    500500          }
    501         case OpCodes.Bessel: {
     501        case OpCode.Bessel: {
    502502            var arg = MakeExpr(node.GetSubtree(0), variableIndices, row, columns);
    503503            var isNaN = Expression.Call(IsNaN, arg);
     
    511511              result);
    512512          }
    513         case OpCodes.AnalyticQuotient: {
     513        case OpCode.AnalyticQuotient: {
    514514            var x1 = MakeExpr(node.GetSubtree(0), variableIndices, row, columns);
    515515            var x2 = MakeExpr(node.GetSubtree(1), variableIndices, row, columns);
     
    520520                Expression.Multiply(x2, x2))));
    521521          }
    522         case OpCodes.IfThenElse: {
     522        case OpCode.IfThenElse: {
    523523            var test = MakeExpr(node.GetSubtree(0), variableIndices, row, columns);
    524524            var result = Expression.Variable(typeof(double));
     
    528528            return Expression.Block(new[] { result }, condition, result);
    529529          }
    530         case OpCodes.AND: {
     530        case OpCode.AND: {
    531531            var result = Expression.Variable(typeof(double));
    532532            var expr = MakeExpr(node.GetSubtree(0), variableIndices, row, columns);
     
    553553              );
    554554          }
    555         case OpCodes.OR: {
     555        case OpCode.OR: {
    556556            var result = Expression.Variable(typeof(double));
    557557            var expr = MakeExpr(node.GetSubtree(0), variableIndices, row, columns);
     
    578578              );
    579579          }
    580         case OpCodes.NOT: {
     580        case OpCode.NOT: {
    581581            var value = MakeExpr(node.GetSubtree(0), variableIndices, row, columns);
    582582            var result = Expression.Variable(typeof(double));
     
    586586            return Expression.Block(new[] { result }, condition, result);
    587587          }
    588         case OpCodes.XOR: {
     588        case OpCode.XOR: {
    589589            var ps = Expression.Variable(typeof(int));
    590590            var block = Expression.Block(
     
    617617            return xorExpr;
    618618          }
    619         case OpCodes.GT: {
     619        case OpCode.GT: {
    620620            var left = MakeExpr(node.GetSubtree(0), variableIndices, row, columns);
    621621            var right = MakeExpr(node.GetSubtree(1), variableIndices, row, columns);
     
    629629              result);
    630630          }
    631         case OpCodes.LT: {
     631        case OpCode.LT: {
    632632            var left = MakeExpr(node.GetSubtree(0), variableIndices, row, columns);
    633633            var right = MakeExpr(node.GetSubtree(1), variableIndices, row, columns);
     
    638638            return Expression.Block(new[] { result }, condition, result);
    639639          }
    640         case OpCodes.VariableCondition: {
     640        case OpCode.VariableCondition: {
    641641            var variableConditionTreeNode = (VariableConditionTreeNode)node;
    642642            if (variableConditionTreeNode.Symbol.IgnoreSlope) throw new NotSupportedException("Strict variable conditionals are not supported");
Note: See TracChangeset for help on using the changeset viewer.