- Timestamp:
- 11/20/15 00:50:47 (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/sources/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Interpreter/SymbolicDataAnalysisExpressionCompiledTreeInterpreter.cs
r13288 r13313 133 133 134 134 public static Func<int, IList<double>[], double> CompileTree(ISymbolicExpressionTree tree, IDataset dataset) { 135 var lambda = CreateDelegate(tree, dataset); 136 return lambda.Compile(); 137 } 138 139 public static Expression<Func<int, IList<double>[], double>> CreateDelegate(ISymbolicExpressionTree tree, IDataset dataset) { 135 140 var row = Expression.Parameter(typeof(int)); 136 141 var columns = Expression.Parameter(typeof(IList<double>[])); … … 138 143 var expr = MakeExpr(tree, variableIndices, row, columns); 139 144 var lambda = Expression.Lambda<Func<int, IList<double>[], double>>(expr, row, columns); 140 return lambda .Compile();145 return lambda; 141 146 } 142 147 … … 243 248 var arg = MakeExpr(node.GetSubtree(0), variableIndices, row, columns); 244 249 var isNaN = Expression.Call(IsNaN, arg); 245 var gamma = Expression.Call(Gamma, arg);246 250 247 251 var result = Expression.Variable(typeof(double)); … … 251 255 isNaN, 252 256 Expression.Assign(result, Expression.Constant(double.NaN)), 253 Expression.Assign(result, gamma)257 Expression.Assign(result, Expression.Call(Gamma, arg)) 254 258 ), 255 259 result … … 260 264 var arg = MakeExpr(node.GetSubtree(0), variableIndices, row, columns); 261 265 var isNaN = Expression.Call(IsNaN, arg); 262 var psi = Expression.Call(Psi, arg);263 266 264 267 var result = Expression.Variable(typeof(double)); … … 274 277 Expression.Call(IsAlmost, Expression.Subtract(floor, arg), Expression.Constant(0.0))), 275 278 Expression.Assign(result, Expression.Constant(double.NaN)), 276 Expression.Assign(result, psi))279 Expression.Assign(result, Expression.Call(Psi, arg))) 277 280 ), 278 281 result); … … 283 286 var arg = MakeExpr(node.GetSubtree(0), variableIndices, row, columns); 284 287 var isNaN = Expression.Call(IsNaN, arg); 285 var exprDawsonIntegral = Expression.Call(DawsonIntegral, arg); 286 var result = Expression.Variable(typeof(double)); 287 288 var result = Expression.Variable(typeof(double)); 288 289 var expr = Expression.Block( 289 290 new[] { result }, 290 291 Expression.IfThenElse(isNaN, 291 292 Expression.Assign(result, Expression.Constant(double.NaN)), 292 Expression.Assign(result, exprDawsonIntegral)),293 Expression.Assign(result, Expression.Call(DawsonIntegral, arg))), 293 294 result 294 295 ); … … 299 300 var arg = MakeExpr(node.GetSubtree(0), variableIndices, row, columns); 300 301 var isNaN = Expression.Call(IsNaN, arg); 301 var expIntegrapEi = Expression.Call(ExponentialIntegralEi, arg);302 302 var result = Expression.Variable(typeof(double)); 303 303 var expr = Expression.Block( … … 305 305 Expression.IfThenElse(isNaN, 306 306 Expression.Assign(result, Expression.Constant(double.NaN)), 307 Expression.Assign(result, expIntegrapEi)),307 Expression.Assign(result, Expression.Call(ExponentialIntegralEi, arg))), 308 308 result 309 309 ); … … 316 316 var si = Expression.Variable(typeof(double)); 317 317 var ci = Expression.Variable(typeof(double)); 318 var sinCosIntegrals = Expression.Call(SineCosineIntegrals, arg, si, ci);319 318 var block = Expression.Block( 320 319 new[] { si, ci }, 321 sinCosIntegrals,320 Expression.Call(SineCosineIntegrals, arg, si, ci), 322 321 si 323 322 ); … … 337 336 var si = Expression.Variable(typeof(double)); 338 337 var ci = Expression.Variable(typeof(double)); 339 var sinCosIntegrals = Expression.Call(SineCosineIntegrals, arg, si, ci);340 338 var block = Expression.Block( 341 339 new[] { si, ci }, 342 sinCosIntegrals,340 Expression.Call(SineCosineIntegrals, arg, si, ci), 343 341 ci 344 342 ); … … 398 396 var s = Expression.Variable(typeof(double)); 399 397 var c = Expression.Variable(typeof(double)); 400 var fresnel = Expression.Call(FresnelIntegral, arg, c, s); 401 var block = Expression.Block(new[] { s, c }, fresnel, s); 398 var block = Expression.Block(new[] { s, c }, Expression.Call(FresnelIntegral, arg, c, s), s); 402 399 var result = Expression.Variable(typeof(double)); 403 400 var expr = Expression.Block(new[] { result }, … … 415 412 var s = Expression.Variable(typeof(double)); 416 413 var c = Expression.Variable(typeof(double)); 417 var fresnel = Expression.Call(FresnelIntegral, arg, c, s); 418 var block = Expression.Block(new[] { s, c }, fresnel, c); 414 var block = Expression.Block(new[] { s, c }, Expression.Call(FresnelIntegral, arg, c, s), c); 419 415 var result = Expression.Variable(typeof(double)); 420 416 var expr = Expression.Block(new[] { result }, … … 434 430 var bi = Expression.Variable(typeof(double)); 435 431 var bip = Expression.Variable(typeof(double)); 436 var airy = Expression.Call(Airy, arg, ai, aip, bi, bip); 437 var block = Expression.Block(new[] { ai, aip, bi, bip }, airy, ai); 432 var block = Expression.Block(new[] { ai, aip, bi, bip }, Expression.Call(Airy, arg, ai, aip, bi, bip), ai); 438 433 var result = Expression.Variable(typeof(double)); 439 434 var expr = Expression.Block(new[] { result }, … … 453 448 var bi = Expression.Variable(typeof(double)); 454 449 var bip = Expression.Variable(typeof(double)); 455 var airy = Expression.Call(Airy, arg, ai, aip, bi, bip); 456 var block = Expression.Block(new[] { ai, aip, bi, bip }, airy, bi); 450 var block = Expression.Block(new[] { ai, aip, bi, bip }, Expression.Call(Airy, arg, ai, aip, bi, bip), bi); 457 451 var result = Expression.Variable(typeof(double)); 458 452 var expr = Expression.Block(new[] { result }, … … 467 461 case OpCodes.Norm: { 468 462 var arg = MakeExpr(node.GetSubtree(0), variableIndices, row, columns); 469 var isNaN = Expression.Call(IsNaN, arg);470 463 var result = Expression.Variable(typeof(double)); 471 464 return Expression.Block( 472 465 new[] { result }, 473 466 Expression.IfThenElse( 474 isNaN,475 Expression.Assign(result, Expression.Constant(double.NaN)),467 Expression.Call(IsNaN, arg), 468 Expression.Assign(result, arg), 476 469 Expression.Assign(result, Expression.Call(NormalDistribution, arg))), 477 470 result);
Note: See TracChangeset
for help on using the changeset viewer.