Class ExpressionSimplifier
- Namespace
- Utils.Mathematics.Expressions
- Assembly
- Utils.dll
Provides methods to simplify or rewrite expression trees by applying various transformations, typically related to arithmetic identities or constant folding. This partial class works alongside other parts of ExpressionSimplifier to compose a complete transformation pipeline.
public class ExpressionSimplifier : ExpressionTransformer
- Inheritance
-
ExpressionSimplifier
- Inherited Members
- Extension Methods
Methods
ACosConversionMath(Expression, Expression[])
Converts a call to Acos(double) into a call to Acos(TSelf).
[ExpressionCallSignature(typeof(double), "Acos")]
protected Expression ACosConversionMath(Expression e, Expression[] expressions)
Parameters
eExpressionexpressionsExpression[]
Returns
ACoshConversionMath(Expression, Expression[])
Converts a call to Acosh(double) into a call to Acosh(TSelf).
[ExpressionCallSignature(typeof(double), "Acosh")]
protected Expression ACoshConversionMath(Expression e, Expression[] expressions)
Parameters
eExpressionexpressionsExpression[]
Returns
ASinConversionMath(Expression, Expression[])
Converts a call to Asin(double) into a call to Asin(TSelf).
[ExpressionCallSignature(typeof(double), "Asin")]
protected Expression ASinConversionMath(Expression e, Expression[] expressions)
Parameters
eExpressionexpressionsExpression[]
Returns
ASinhConversionMath(Expression, Expression[])
Converts a call to Asinh(double) into a call to Asinh(TSelf).
[ExpressionCallSignature(typeof(double), "Asinh")]
protected Expression ASinhConversionMath(Expression e, Expression[] expressions)
Parameters
eExpressionexpressionsExpression[]
Returns
ATanConversionMath(Expression, Expression[])
Converts a call to Atan(double) into a call to Atan(TSelf).
[ExpressionCallSignature(typeof(double), "Atan")]
protected Expression ATanConversionMath(Expression e, Expression[] expressions)
Parameters
eExpressionexpressionsExpression[]
Returns
ATanhConversionMath(Expression, Expression[])
Converts a call to Atanh(double) into a call to Atanh(TSelf).
[ExpressionCallSignature(typeof(double), "Atanh")]
protected Expression ATanhConversionMath(Expression e, Expression[] expressions)
Parameters
eExpressionexpressionsExpression[]
Returns
AbsConversionMath(Expression, Expression[])
Converts a call to Abs(double) into a call to IFloatingPoint{T}.Abs(T).
[ExpressionCallSignature(typeof(double), "Abs")]
protected Expression AbsConversionMath(Expression e, Expression[] expressions)
Parameters
eExpressionexpressionsExpression[]
Returns
AdditionOfConstants(BinaryExpression, ConstantExpression, ConstantExpression)
Simplifies constant addition (a + b) where both are numeric constants.
[ExpressionSignature(ExpressionType.Add)]
protected Expression AdditionOfConstants(BinaryExpression e, ConstantExpression left, ConstantExpression right)
Parameters
eBinaryExpressionleftConstantExpressionrightConstantExpression
Returns
AdditionOfCos2andSin2Number(Expression, BinaryExpression, BinaryExpression)
Applies the trigonometric identity sin²(x) + cos²(x) = 1 when possible.
[ExpressionSignature(ExpressionType.Add)]
protected Expression AdditionOfCos2andSin2Number(Expression e, BinaryExpression left, BinaryExpression right)
Parameters
eExpressionThe original addition expression.
leftBinaryExpressionLeft power expression.
rightBinaryExpressionRight power expression.
Returns
- Expression
A constant expression representing one when the identity applies; otherwise null.
AdditionOfEqualsElements(BinaryExpression, Expression, Expression)
Attempts to factor out common elements in left + right if possible.
E.g., rewriting ax + bx as (a+b)*x.
[ExpressionSignature(ExpressionType.Add)]
protected Expression AdditionOfEqualsElements(BinaryExpression e, Expression left, Expression right)
Parameters
eBinaryExpressionleftExpressionrightExpression
Returns
AdditionWithNegate(BinaryExpression, Expression, UnaryExpression)
Rewrites left + (-right) as left - right.
[ExpressionSignature(ExpressionType.Add)]
protected Expression AdditionWithNegate(BinaryExpression e, Expression left, UnaryExpression right)
Parameters
eBinaryExpressionleftExpressionrightUnaryExpression
Returns
AdditionWithNegate(BinaryExpression, UnaryExpression, Expression)
Simplifies (-left) + right to 0 when both operands are equal.
Otherwise rewrites it as right - left.
[ExpressionSignature(ExpressionType.Add)]
protected Expression AdditionWithNegate(BinaryExpression e, UnaryExpression left, Expression right)
Parameters
eBinaryExpressionleftUnaryExpressionrightExpression
Returns
AdditionWithZero(BinaryExpression, ConstantExpression, Expression)
Simplifies 0 + right to right.
[ExpressionSignature(ExpressionType.Add)]
public Expression AdditionWithZero(BinaryExpression e, ConstantExpression left, Expression right)
Parameters
eBinaryExpressionleftConstantExpressionrightExpression
Returns
AdditionWithZero(BinaryExpression, Expression, ConstantExpression)
Simplifies left + 0 to left.
[ExpressionSignature(ExpressionType.Add)]
public Expression AdditionWithZero(BinaryExpression e, Expression left, ConstantExpression right)
Parameters
eBinaryExpressionleftExpressionrightConstantExpression
Returns
CbrtConversionMath(Expression, Expression[])
Converts a call to Cbrt(double) into a call to Cbrt(TSelf).
[ExpressionCallSignature(typeof(double), "Cbrt")]
protected Expression CbrtConversionMath(Expression e, Expression[] expressions)
Parameters
eExpressionexpressionsExpression[]
Returns
CeilingConversionMath(Expression, Expression[])
Converts a call to Ceiling(double) into a call to Ceiling(TSelf).
[ExpressionCallSignature(typeof(double), "Ceiling")]
protected Expression CeilingConversionMath(Expression e, Expression[] expressions)
Parameters
eExpressionexpressionsExpression[]
Returns
ClampConversionMath(Expression, Expression[])
Converts a call to Clamp(double, double, double) into a call to Clamp(TSelf, TSelf, TSelf).
[ExpressionCallSignature(typeof(double), "Clamp")]
protected Expression ClampConversionMath(Expression e, Expression[] expressions)
Parameters
eExpressionexpressionsExpression[]
Returns
CosConversionMath(Expression, Expression[])
Converts a call to Cos(double) into a call to Cos(TSelf).
[ExpressionCallSignature(typeof(double), "Cos")]
protected Expression CosConversionMath(Expression e, Expression[] expressions)
Parameters
eExpressionexpressionsExpression[]
Returns
CoshConversionMath(Expression, Expression[])
Converts a call to Cosh(double) into a call to Cosh(TSelf).
[ExpressionCallSignature(typeof(double), "Cosh")]
protected Expression CoshConversionMath(Expression e, Expression[] expressions)
Parameters
eExpressionexpressionsExpression[]
Returns
DivideWithZero(BinaryExpression, ConstantExpression, Expression)
Simplifies 0 / x to 0.
[ExpressionSignature(ExpressionType.Divide)]
public Expression DivideWithZero(BinaryExpression e, ConstantExpression left, Expression right)
Parameters
eBinaryExpressionleftConstantExpressionrightExpression
Returns
DivideWithZeroOrOne(BinaryExpression, Expression, ConstantExpression)
Simplifies division by 0, 1, or -1 (throwing if 0).
[ExpressionSignature(ExpressionType.Divide)]
public Expression DivideWithZeroOrOne(BinaryExpression e, Expression left, ConstantExpression right)
Parameters
eBinaryExpressionleftExpressionrightConstantExpression
Returns
DivisionOfConstants(BinaryExpression, ConstantExpression, ConstantExpression)
Simplifies constant division (a / b) when both are numeric constants.
[ExpressionSignature(ExpressionType.Divide)]
protected Expression DivisionOfConstants(BinaryExpression e, ConstantExpression left, ConstantExpression right)
Parameters
eBinaryExpressionleftConstantExpressionrightConstantExpression
Returns
DivisionOfCosAndSinNumber(Expression, MethodCallExpression, MethodCallExpression)
Rewrites sin(x) / cos(x) into tan(x) when the arguments match.
[ExpressionSignature(ExpressionType.Divide)]
protected Expression DivisionOfCosAndSinNumber(Expression e, MethodCallExpression left, MethodCallExpression right)
Parameters
eExpressionThe original division expression.
leftMethodCallExpressionSine call in the numerator.
rightMethodCallExpressionCosine call in the denominator.
Returns
- Expression
An expression that calls tangent when possible; otherwise null.
DivisionOfDivision(BinaryExpression, BinaryExpression, BinaryExpression)
Simplifies nested divisions, e.g. (x / y) / (z / w) => (xw) / (yz).
[ExpressionSignature(ExpressionType.Divide)]
protected Expression DivisionOfDivision(BinaryExpression e, BinaryExpression left, BinaryExpression right)
Parameters
eBinaryExpressionleftBinaryExpressionrightBinaryExpression
Returns
DivisionOfDivision(BinaryExpression, BinaryExpression, Expression)
Simplifies nested divisions, e.g. (x / y) / z => x / (y*z).
[ExpressionSignature(ExpressionType.Divide)]
protected Expression DivisionOfDivision(BinaryExpression e, BinaryExpression left, Expression right)
Parameters
eBinaryExpressionleftBinaryExpressionrightExpression
Returns
DivisionOfDivision(BinaryExpression, Expression, BinaryExpression)
Simplifies nested divisions, e.g. x / (y / z) => (x*z) / y.
[ExpressionSignature(ExpressionType.Divide)]
protected Expression DivisionOfDivision(BinaryExpression e, Expression left, BinaryExpression right)
Parameters
eBinaryExpressionleftExpressionrightBinaryExpression
Returns
DivisionOfSinAndCosNumber(Expression, MethodCallExpression, MethodCallExpression)
Rewrites cos(x) / sin(x) into cot(x) (expressed as 1 / tan(x)) when the arguments match.
[ExpressionSignature(ExpressionType.Divide)]
protected Expression DivisionOfSinAndCosNumber(Expression e, MethodCallExpression left, MethodCallExpression right)
Parameters
eExpressionThe original division expression.
leftMethodCallExpressionCosine call in the numerator.
rightMethodCallExpressionSine call in the denominator.
Returns
- Expression
An expression rewriting the division when possible; otherwise null.
DivisionOfSinAndTanNumber(Expression, MethodCallExpression, MethodCallExpression)
Rewrites sin(x) / tan(x) into cos(x) when the arguments match.
[ExpressionSignature(ExpressionType.Divide)]
protected Expression DivisionOfSinAndTanNumber(Expression e, MethodCallExpression left, MethodCallExpression right)
Parameters
eExpressionThe original division expression.
leftMethodCallExpressionSine call.
rightMethodCallExpressionTangent call.
Returns
- Expression
A cosine call when possible; otherwise null.
DivisionWithNegate(BinaryExpression, Expression, UnaryExpression)
Rewrites left / (-right) as -(left / right).
[ExpressionSignature(ExpressionType.Divide)]
protected Expression DivisionWithNegate(BinaryExpression e, Expression left, UnaryExpression right)
Parameters
eBinaryExpressionleftExpressionrightUnaryExpression
Returns
DivisionWithNegate(BinaryExpression, UnaryExpression, Expression)
Rewrites (-left) / right as -(left / right).
[ExpressionSignature(ExpressionType.Divide)]
protected Expression DivisionWithNegate(BinaryExpression e, UnaryExpression left, Expression right)
Parameters
eBinaryExpressionleftUnaryExpressionrightExpression
Returns
FinalizeExpression(Expression, Expression[])
Called when no custom transformation method matches. In this partial class, it copies the expression structure using CopyExpression(Expression, params Expression[]) as the default final step.
protected override Expression FinalizeExpression(Expression e, Expression[] parameters)
Parameters
eExpressionThe expression to finalize.
parametersExpression[]Sub-expressions or operands.
Returns
- Expression
A copy of
ewith sub-expressions replaced byparameters.
FloorConversionMath(Expression, Expression[])
Converts a call to Floor(double) into a call to Floor(TSelf).
[ExpressionCallSignature(typeof(double), "Floor")]
protected Expression FloorConversionMath(Expression e, Expression[] expressions)
Parameters
eExpressionexpressionsExpression[]
Returns
InvokeExpression(InvocationExpression)
Inlines or transforms an InvocationExpression that calls a lambda by substituting the lambda parameters with the invocation arguments and re-transforming the result.
[ExpressionSignature(ExpressionType.Invoke)]
protected Expression InvokeExpression(InvocationExpression expression)
Parameters
expressionInvocationExpression
Returns
Log10ConversionMath(Expression, Expression[])
Converts a call to Log10(double) into a call to Log10(TSelf).
[ExpressionCallSignature(typeof(double), "Log10")]
protected Expression Log10ConversionMath(Expression e, Expression[] expressions)
Parameters
eExpressionexpressionsExpression[]
Returns
Log2ConversionMath(Expression, Expression[])
Converts a call to Log2(double) into a call to Log2(TSelf).
[ExpressionCallSignature(typeof(double), "Log2")]
protected Expression Log2ConversionMath(Expression e, Expression[] expressions)
Parameters
eExpressionexpressionsExpression[]
Returns
LogConversionMath(Expression, Expression[])
Converts a call to Log(double) into a call to Log(TSelf).
[ExpressionCallSignature(typeof(double), "Log")]
protected Expression LogConversionMath(Expression e, Expression[] expressions)
Parameters
eExpressionexpressionsExpression[]
Returns
Logarithm10SimplificationAddNumber(Expression, MethodCallExpression, MethodCallExpression)
Simplifies the addition of two base-10 logarithms by turning it into a single logarithm of a product.
protected Expression Logarithm10SimplificationAddNumber(Expression e, MethodCallExpression left, MethodCallExpression right)
Parameters
eExpressionThe original binary addition expression.
leftMethodCallExpressionLeft base-10 logarithm call.
rightMethodCallExpressionRight base-10 logarithm call.
Returns
- Expression
A combined logarithm expression when the arguments are compatible; otherwise null.
Logarithm10SimplificationSubstractNumber(Expression, MethodCallExpression, MethodCallExpression)
Simplifies the subtraction of two base-10 logarithms by turning it into a single logarithm of a quotient.
[ExpressionSignature(ExpressionType.Subtract)]
protected Expression Logarithm10SimplificationSubstractNumber(Expression e, MethodCallExpression left, MethodCallExpression right)
Parameters
eExpressionThe original binary subtraction expression.
leftMethodCallExpressionLeft base-10 logarithm call.
rightMethodCallExpressionRight base-10 logarithm call.
Returns
- Expression
A combined logarithm expression when the arguments are compatible; otherwise null.
LogarithmSimplificationAddNumber(Expression, MethodCallExpression, MethodCallExpression)
Simplifies the addition of two natural logarithms by turning it into a single logarithm of a product.
[ExpressionSignature(ExpressionType.Add)]
protected Expression LogarithmSimplificationAddNumber(Expression e, MethodCallExpression left, MethodCallExpression right)
Parameters
eExpressionThe original binary addition expression.
leftMethodCallExpressionLeft logarithm call.
rightMethodCallExpressionRight logarithm call.
Returns
- Expression
A combined logarithm expression when the arguments are compatible; otherwise null.
LogarithmSimplificationSubstractNumber(Expression, MethodCallExpression, MethodCallExpression)
Simplifies the subtraction of two natural logarithms by turning it into a single logarithm of a quotient.
[ExpressionSignature(ExpressionType.Subtract)]
protected Expression LogarithmSimplificationSubstractNumber(Expression e, MethodCallExpression left, MethodCallExpression right)
Parameters
eExpressionThe original binary subtraction expression.
leftMethodCallExpressionLeft logarithm call.
rightMethodCallExpressionRight logarithm call.
Returns
- Expression
A combined logarithm expression when the arguments are compatible; otherwise null.
MaxConversionMath(Expression, Expression[])
Converts a call to Max(double, double) into a call to Max(TSelf, TSelf).
[ExpressionCallSignature(typeof(double), "Max")]
protected Expression MaxConversionMath(Expression e, Expression[] expressions)
Parameters
eExpressionexpressionsExpression[]
Returns
MinConversionMath(Expression, Expression[])
Converts a call to Min(double, double) into a call to Min(TSelf, TSelf).
[ExpressionCallSignature(typeof(double), "Min")]
protected Expression MinConversionMath(Expression e, Expression[] expressions)
Parameters
eExpressionexpressionsExpression[]
Returns
Multiplication(BinaryExpression, BinaryExpression, BinaryExpression)
Combines two multiply expressions if both have a constant factor,
e.g. (c1 * x) * (c2 * y) => (c1c2) * (xy).
[ExpressionSignature(ExpressionType.Multiply)]
protected Expression Multiplication(BinaryExpression e, BinaryExpression left, BinaryExpression right)
Parameters
eBinaryExpressionleftBinaryExpressionrightBinaryExpression
Returns
Multiplication(BinaryExpression, ConstantExpression, BinaryExpression)
Combines a constant with another multiply expression, e.g., c * (c2 * rest) => (c*c2) * rest.
[ExpressionSignature(ExpressionType.Multiply)]
protected Expression Multiplication(BinaryExpression e, ConstantExpression left, BinaryExpression right)
Parameters
eBinaryExpressionleftConstantExpressionrightBinaryExpression
Returns
Multiplication(BinaryExpression, Expression, ConstantExpression)
Commutes left * constant to constant * left for consistent transformations.
[ExpressionSignature(ExpressionType.Multiply)]
protected Expression Multiplication(BinaryExpression e, Expression left, ConstantExpression right)
Parameters
eBinaryExpressionleftExpressionrightConstantExpression
Returns
MultiplicationOfConstants(BinaryExpression, ConstantExpression, ConstantExpression)
Simplifies constant multiplication (a * b) where both are numeric constants.
[ExpressionSignature(ExpressionType.Multiply)]
protected Expression MultiplicationOfConstants(BinaryExpression e, ConstantExpression left, ConstantExpression right)
Parameters
eBinaryExpressionleftConstantExpressionrightConstantExpression
Returns
MultiplicationOfCosAndTanNumber(Expression, MethodCallExpression, MethodCallExpression)
Rewrites cos(x) * tan(x) into sin(x) when the arguments match.
[ExpressionSignature(ExpressionType.Multiply)]
protected Expression MultiplicationOfCosAndTanNumber(Expression e, MethodCallExpression left, MethodCallExpression right)
Parameters
eExpressionThe original multiplication expression.
leftMethodCallExpressionCosine call.
rightMethodCallExpressionTangent call.
Returns
- Expression
A sine call when possible; otherwise null.
MultiplicationOfEqualsElements(BinaryExpression, BinaryExpression, Expression)
Distributes multiplication if one side is (constant * part), e.g.,
(c * x) * y => c * (x * y).
[ExpressionSignature(ExpressionType.Multiply)]
protected Expression MultiplicationOfEqualsElements(BinaryExpression e, BinaryExpression left, Expression right)
Parameters
eBinaryExpressionleftBinaryExpressionrightExpression
Returns
MultiplicationOfEqualsElements(BinaryExpression, Expression, BinaryExpression)
Distributes multiplication if one side is (constant * part), e.g.,
x * (c * y) => c * (x * y).
[ExpressionSignature(ExpressionType.Multiply)]
protected Expression MultiplicationOfEqualsElements(BinaryExpression e, Expression left, BinaryExpression right)
Parameters
eBinaryExpressionleftExpressionrightBinaryExpression
Returns
MultiplicationOfEqualsElements(BinaryExpression, Expression, Expression)
Attempts to combine exponent factors if they share a common base, e.g.
(x^a) * (x^b) => x^(a+b).
[ExpressionSignature(ExpressionType.Multiply)]
protected Expression MultiplicationOfEqualsElements(BinaryExpression e, Expression left, Expression right)
Parameters
eBinaryExpressionleftExpressionrightExpression
Returns
MultiplicationOfTanAndCosNumber(Expression, MethodCallExpression, MethodCallExpression)
Rewrites tan(x) * cos(x) into sin(x) when the arguments match.
[ExpressionSignature(ExpressionType.Multiply)]
protected Expression MultiplicationOfTanAndCosNumber(Expression e, MethodCallExpression left, MethodCallExpression right)
Parameters
eExpressionThe original multiplication expression.
leftMethodCallExpressionTangent call.
rightMethodCallExpressionCosine call.
Returns
- Expression
A sine call when possible; otherwise null.
MultiplicationWithNegate(BinaryExpression, Expression, UnaryExpression)
Rewrites left * (-right) as -(left * right).
[ExpressionSignature(ExpressionType.Multiply)]
protected Expression MultiplicationWithNegate(BinaryExpression e, Expression left, UnaryExpression right)
Parameters
eBinaryExpressionleftExpressionrightUnaryExpression
Returns
MultiplicationWithNegate(BinaryExpression, UnaryExpression, Expression)
Rewrites (-left) * right as -(left * right).
[ExpressionSignature(ExpressionType.Multiply)]
protected Expression MultiplicationWithNegate(BinaryExpression e, UnaryExpression left, Expression right)
Parameters
eBinaryExpressionleftUnaryExpressionrightExpression
Returns
MultiplicationWithZeroOrOne(BinaryExpression, ConstantExpression, Expression)
Simplifies multiplication by 0, 1, or -1 (e.g., 0 * x, 1 * x, -1 * x).
[ExpressionSignature(ExpressionType.Multiply)]
public Expression MultiplicationWithZeroOrOne(BinaryExpression e, ConstantExpression left, Expression right)
Parameters
eBinaryExpressionleftConstantExpressionrightExpression
Returns
MultiplicationWithZeroOrOne(BinaryExpression, Expression, ConstantExpression)
Simplifies multiplication by 0, 1, or -1 (e.g., x * 0 to 0, x * 1 to x, etc.).
[ExpressionSignature(ExpressionType.Multiply)]
public Expression MultiplicationWithZeroOrOne(BinaryExpression e, Expression left, ConstantExpression right)
Parameters
eBinaryExpressionleftExpressionrightConstantExpression
Returns
NegateWithSubstraction(UnaryExpression, BinaryExpression)
Rewrites -(left - right) as -right + left.
[ExpressionSignature(ExpressionType.Negate)]
protected Expression NegateWithSubstraction(UnaryExpression e, BinaryExpression operand)
Parameters
eUnaryExpressionoperandBinaryExpression
Returns
PowerByZeroOrOne(BinaryExpression, Expression, ConstantExpression)
Simplifies x^0 or x^1 to 1 or x respectively.
[ExpressionSignature(ExpressionType.Power)]
public Expression PowerByZeroOrOne(BinaryExpression e, Expression left, ConstantExpression right)
Parameters
eBinaryExpressionleftExpressionrightConstantExpression
Returns
PowerConversionMath(Expression, Expression, Expression)
Transforms a call to Pow(double, double) into an Power(Expression, Expression) node.
[ExpressionCallSignature(typeof(double), "Pow")]
protected Expression PowerConversionMath(Expression e, Expression left, Expression right)
Parameters
eExpressionThe original expression containing the call.
leftExpressionAn Expression representing the base.
rightExpressionAn Expression representing the exponent.
Returns
- Expression
A new Expression node representing
left^right, potentially simplified further.
PowerConvertionNumber1(Expression, Expression, Expression)
Replaces calls to Pow(TSelf, TSelf) with the equivalent Power(Expression, Expression) node.
[ExpressionCallSignature(typeof(double), "Pow")]
protected Expression PowerConvertionNumber1(Expression e, Expression left, Expression right)
Parameters
eExpressionOriginal call expression.
leftExpressionBase argument of the power operation.
rightExpressionExponent argument of the power operation.
Returns
- Expression
The transformed power expression.
PowerConvertionNumber2(Expression, Expression, Expression)
Replaces calls to Pow(double, double) with an Power(Expression, Expression) node.
[ExpressionCallSignature(typeof(Math), "Pow")]
protected Expression PowerConvertionNumber2(Expression e, Expression left, Expression right)
Parameters
eExpressionOriginal call expression.
leftExpressionBase argument of the power operation.
rightExpressionExponent argument of the power operation.
Returns
- Expression
The transformed power expression.
PowerOfConstants(BinaryExpression, ConstantExpression, ConstantExpression)
Simplifies power expressions when both base and exponent are numeric constants,
e.g. (2)^(3) => 8.
[ExpressionSignature(ExpressionType.Power)]
protected Expression PowerOfConstants(BinaryExpression e, ConstantExpression left, ConstantExpression right)
Parameters
eBinaryExpressionleftConstantExpressionrightConstantExpression
Returns
PowerOfZeroOrOne(BinaryExpression, ConstantExpression, Expression)
Simplifies 0^x or 1^x to 0 or 1 respectively.
[ExpressionSignature(ExpressionType.Power)]
public Expression PowerOfZeroOrOne(BinaryExpression e, ConstantExpression left, Expression right)
Parameters
eBinaryExpressionleftConstantExpressionrightExpression
Returns
PrepareExpression(Expression)
Prepares an expression for transformation by calling Transform(Expression) Subclasses can override for custom logic, but here it simply re-applies Transform(Expression)
protected override Expression PrepareExpression(Expression e)
Parameters
eExpressionThe expression to prepare.
Returns
- Expression
The transformed expression.
RoundConversionMath(Expression, Expression[])
Converts a call to Round(double) into a call to Round(TSelf).
[ExpressionCallSignature(typeof(double), "Round")]
protected Expression RoundConversionMath(Expression e, Expression[] expressions)
Parameters
eExpressionexpressionsExpression[]
Returns
SignConversionMath(Expression, Expression[])
Converts a call to Sign(double) into a call to Sign(TSelf).
[ExpressionCallSignature(typeof(double), "Sign")]
protected Expression SignConversionMath(Expression e, Expression[] expressions)
Parameters
eExpressionThe original expression node containing the
double.Signcall.expressionsExpression[]The argument expressions extracted from the call.
Returns
- Expression
A call to
INumber<double>.Signwrapped in the transformation pipeline.
Simplify(Expression)
Simplifies the given e by calling Transform(Expression).
public Expression Simplify(Expression e)
Parameters
eExpressionThe Expression to simplify.
Returns
- Expression
A simplified version of
e, if any transformation rules match.
SinConversionMath(Expression, Expression[])
Converts a call to Sin(double) into a call to Sin(TSelf).
[ExpressionCallSignature(typeof(double), "Sin")]
protected Expression SinConversionMath(Expression e, Expression[] expressions)
Parameters
eExpressionexpressionsExpression[]
Returns
SinhConversionMath(Expression, Expression[])
Converts a call to Sinh(double) into a call to Sinh(TSelf).
[ExpressionCallSignature(typeof(double), "Sinh")]
protected Expression SinhConversionMath(Expression e, Expression[] expressions)
Parameters
eExpressionexpressionsExpression[]
Returns
SqrtConversionMath(Expression, Expression[])
Converts a call to Sqrt(double) into a call to Sqrt(TSelf).
[ExpressionCallSignature(typeof(double), "Sqrt")]
protected Expression SqrtConversionMath(Expression e, Expression[] expressions)
Parameters
eExpressionexpressionsExpression[]
Returns
SubstractionOfConstants(BinaryExpression, ConstantExpression, ConstantExpression)
Simplifies constant subtraction (a - b) where both are numeric constants.
[ExpressionSignature(ExpressionType.Subtract)]
protected Expression SubstractionOfConstants(BinaryExpression e, ConstantExpression left, ConstantExpression right)
Parameters
eBinaryExpressionleftConstantExpressionrightConstantExpression
Returns
SubstractionOfEqualsElements(BinaryExpression, Expression, Expression)
Attempts to factor out common elements in left - right if possible.
E.g., rewriting ax - bx as (a-b)*x.
[ExpressionSignature(ExpressionType.Subtract)]
protected Expression SubstractionOfEqualsElements(BinaryExpression e, Expression left, Expression right)
Parameters
eBinaryExpressionleftExpressionrightExpression
Returns
SubstractionWithAddition(BinaryExpression, Expression, BinaryExpression)
Simplifies left - (right1 + right2) to (left - right1) - right2.
[ExpressionSignature(ExpressionType.Subtract)]
protected Expression SubstractionWithAddition(BinaryExpression e, Expression left, BinaryExpression right)
Parameters
eBinaryExpressionleftExpressionrightBinaryExpression
Returns
SubstractionWithNegate(BinaryExpression, Expression, UnaryExpression)
Rewrites left - (-right) as left + right.
[ExpressionSignature(ExpressionType.Subtract)]
protected Expression SubstractionWithNegate(BinaryExpression e, Expression left, UnaryExpression right)
Parameters
eBinaryExpressionleftExpressionrightUnaryExpression
Returns
SubstractionWithNegate(BinaryExpression, UnaryExpression, Expression)
Rewrites (-left) - right as -(left + right).
[ExpressionSignature(ExpressionType.Subtract)]
protected Expression SubstractionWithNegate(BinaryExpression e, UnaryExpression left, Expression right)
Parameters
eBinaryExpressionleftUnaryExpressionrightExpression
Returns
SubstractionWithSubstraction(BinaryExpression, Expression, BinaryExpression)
Simplifies left - (right1 - right2) to (left + right2) - right1.
[ExpressionSignature(ExpressionType.Subtract)]
protected Expression SubstractionWithSubstraction(BinaryExpression e, Expression left, BinaryExpression right)
Parameters
eBinaryExpressionleftExpressionrightBinaryExpression
Returns
SubstractionWithZero(BinaryExpression, ConstantExpression, Expression)
Simplifies 0 - right to -right.
[ExpressionSignature(ExpressionType.Subtract)]
public Expression SubstractionWithZero(BinaryExpression e, ConstantExpression left, Expression right)
Parameters
eBinaryExpressionleftConstantExpressionrightExpression
Returns
SubstractionWithZero(BinaryExpression, Expression, ConstantExpression)
Simplifies left - 0 to left.
[ExpressionSignature(ExpressionType.Subtract)]
public Expression SubstractionWithZero(BinaryExpression e, Expression left, ConstantExpression right)
Parameters
eBinaryExpressionleftExpressionrightConstantExpression
Returns
TanConversionMath(Expression, Expression[])
Converts a call to Tan(double) into a call to Tan(TSelf).
[ExpressionCallSignature(typeof(double), "Tan")]
protected Expression TanConversionMath(Expression e, Expression[] expressions)
Parameters
eExpressionexpressionsExpression[]
Returns
TanhConversionMath(Expression, Expression[])
Converts a call to Tanh(double) into a call to Tanh(TSelf).
[ExpressionCallSignature(typeof(double), "Tanh")]
protected Expression TanhConversionMath(Expression e, Expression[] expressions)
Parameters
eExpressionexpressionsExpression[]