Table of Contents

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

e Expression
expressions Expression[]

Returns

Expression

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

e Expression
expressions Expression[]

Returns

Expression

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

e Expression
expressions Expression[]

Returns

Expression

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

e Expression
expressions Expression[]

Returns

Expression

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

e Expression
expressions Expression[]

Returns

Expression

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

e Expression
expressions Expression[]

Returns

Expression

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

e Expression
expressions Expression[]

Returns

Expression

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

e BinaryExpression
left ConstantExpression
right ConstantExpression

Returns

Expression

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

e Expression

The original addition expression.

left BinaryExpression

Left power expression.

right BinaryExpression

Right 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

e BinaryExpression
left Expression
right Expression

Returns

Expression

AdditionWithNegate(BinaryExpression, Expression, UnaryExpression)

Rewrites left + (-right) as left - right.

[ExpressionSignature(ExpressionType.Add)]
protected Expression AdditionWithNegate(BinaryExpression e, Expression left, UnaryExpression right)

Parameters

e BinaryExpression
left Expression
right UnaryExpression

Returns

Expression

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

e BinaryExpression
left UnaryExpression
right Expression

Returns

Expression

AdditionWithZero(BinaryExpression, ConstantExpression, Expression)

Simplifies 0 + right to right.

[ExpressionSignature(ExpressionType.Add)]
public Expression AdditionWithZero(BinaryExpression e, ConstantExpression left, Expression right)

Parameters

e BinaryExpression
left ConstantExpression
right Expression

Returns

Expression

AdditionWithZero(BinaryExpression, Expression, ConstantExpression)

Simplifies left + 0 to left.

[ExpressionSignature(ExpressionType.Add)]
public Expression AdditionWithZero(BinaryExpression e, Expression left, ConstantExpression right)

Parameters

e BinaryExpression
left Expression
right ConstantExpression

Returns

Expression

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

e Expression
expressions Expression[]

Returns

Expression

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

e Expression
expressions Expression[]

Returns

Expression

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

e Expression
expressions Expression[]

Returns

Expression

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

e Expression
expressions Expression[]

Returns

Expression

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

e Expression
expressions Expression[]

Returns

Expression

DivideWithZero(BinaryExpression, ConstantExpression, Expression)

Simplifies 0 / x to 0.

[ExpressionSignature(ExpressionType.Divide)]
public Expression DivideWithZero(BinaryExpression e, ConstantExpression left, Expression right)

Parameters

e BinaryExpression
left ConstantExpression
right Expression

Returns

Expression

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

e BinaryExpression
left Expression
right ConstantExpression

Returns

Expression

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

e BinaryExpression
left ConstantExpression
right ConstantExpression

Returns

Expression

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

e Expression

The original division expression.

left MethodCallExpression

Sine call in the numerator.

right MethodCallExpression

Cosine 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

e BinaryExpression
left BinaryExpression
right BinaryExpression

Returns

Expression

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

e BinaryExpression
left BinaryExpression
right Expression

Returns

Expression

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

e BinaryExpression
left Expression
right BinaryExpression

Returns

Expression

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

e Expression

The original division expression.

left MethodCallExpression

Cosine call in the numerator.

right MethodCallExpression

Sine 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

e Expression

The original division expression.

left MethodCallExpression

Sine call.

right MethodCallExpression

Tangent 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

e BinaryExpression
left Expression
right UnaryExpression

Returns

Expression

DivisionWithNegate(BinaryExpression, UnaryExpression, Expression)

Rewrites (-left) / right as -(left / right).

[ExpressionSignature(ExpressionType.Divide)]
protected Expression DivisionWithNegate(BinaryExpression e, UnaryExpression left, Expression right)

Parameters

e BinaryExpression
left UnaryExpression
right Expression

Returns

Expression

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

e Expression

The expression to finalize.

parameters Expression[]

Sub-expressions or operands.

Returns

Expression

A copy of e with sub-expressions replaced by parameters.

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

e Expression
expressions Expression[]

Returns

Expression

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

expression InvocationExpression

Returns

Expression

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

e Expression
expressions Expression[]

Returns

Expression

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

e Expression
expressions Expression[]

Returns

Expression

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

e Expression
expressions Expression[]

Returns

Expression

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

e Expression

The original binary addition expression.

left MethodCallExpression

Left base-10 logarithm call.

right MethodCallExpression

Right 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

e Expression

The original binary subtraction expression.

left MethodCallExpression

Left base-10 logarithm call.

right MethodCallExpression

Right 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

e Expression

The original binary addition expression.

left MethodCallExpression

Left logarithm call.

right MethodCallExpression

Right 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

e Expression

The original binary subtraction expression.

left MethodCallExpression

Left logarithm call.

right MethodCallExpression

Right 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

e Expression
expressions Expression[]

Returns

Expression

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

e Expression
expressions Expression[]

Returns

Expression

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

e BinaryExpression
left BinaryExpression
right BinaryExpression

Returns

Expression

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

e BinaryExpression
left ConstantExpression
right BinaryExpression

Returns

Expression

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

e BinaryExpression
left Expression
right ConstantExpression

Returns

Expression

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

e BinaryExpression
left ConstantExpression
right ConstantExpression

Returns

Expression

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

e Expression

The original multiplication expression.

left MethodCallExpression

Cosine call.

right MethodCallExpression

Tangent 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

e BinaryExpression
left BinaryExpression
right Expression

Returns

Expression

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

e BinaryExpression
left Expression
right BinaryExpression

Returns

Expression

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

e BinaryExpression
left Expression
right Expression

Returns

Expression

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

e Expression

The original multiplication expression.

left MethodCallExpression

Tangent call.

right MethodCallExpression

Cosine 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

e BinaryExpression
left Expression
right UnaryExpression

Returns

Expression

MultiplicationWithNegate(BinaryExpression, UnaryExpression, Expression)

Rewrites (-left) * right as -(left * right).

[ExpressionSignature(ExpressionType.Multiply)]
protected Expression MultiplicationWithNegate(BinaryExpression e, UnaryExpression left, Expression right)

Parameters

e BinaryExpression
left UnaryExpression
right Expression

Returns

Expression

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

e BinaryExpression
left ConstantExpression
right Expression

Returns

Expression

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

e BinaryExpression
left Expression
right ConstantExpression

Returns

Expression

NegateWithSubstraction(UnaryExpression, BinaryExpression)

Rewrites -(left - right) as -right + left.

[ExpressionSignature(ExpressionType.Negate)]
protected Expression NegateWithSubstraction(UnaryExpression e, BinaryExpression operand)

Parameters

e UnaryExpression
operand BinaryExpression

Returns

Expression

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

e BinaryExpression
left Expression
right ConstantExpression

Returns

Expression

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

e Expression

The original expression containing the call.

left Expression

An Expression representing the base.

right Expression

An 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

e Expression

Original call expression.

left Expression

Base argument of the power operation.

right Expression

Exponent 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

e Expression

Original call expression.

left Expression

Base argument of the power operation.

right Expression

Exponent 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

e BinaryExpression
left ConstantExpression
right ConstantExpression

Returns

Expression

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

e BinaryExpression
left ConstantExpression
right Expression

Returns

Expression

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

e Expression

The 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

e Expression
expressions Expression[]

Returns

Expression

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

e Expression

The original expression node containing the double.Sign call.

expressions Expression[]

The argument expressions extracted from the call.

Returns

Expression

A call to INumber<double>.Sign wrapped in the transformation pipeline.

Simplify(Expression)

Simplifies the given e by calling Transform(Expression).

public Expression Simplify(Expression e)

Parameters

e Expression

The 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

e Expression
expressions Expression[]

Returns

Expression

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

e Expression
expressions Expression[]

Returns

Expression

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

e Expression
expressions Expression[]

Returns

Expression

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

e BinaryExpression
left ConstantExpression
right ConstantExpression

Returns

Expression

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

e BinaryExpression
left Expression
right Expression

Returns

Expression

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

e BinaryExpression
left Expression
right BinaryExpression

Returns

Expression

SubstractionWithNegate(BinaryExpression, Expression, UnaryExpression)

Rewrites left - (-right) as left + right.

[ExpressionSignature(ExpressionType.Subtract)]
protected Expression SubstractionWithNegate(BinaryExpression e, Expression left, UnaryExpression right)

Parameters

e BinaryExpression
left Expression
right UnaryExpression

Returns

Expression

SubstractionWithNegate(BinaryExpression, UnaryExpression, Expression)

Rewrites (-left) - right as -(left + right).

[ExpressionSignature(ExpressionType.Subtract)]
protected Expression SubstractionWithNegate(BinaryExpression e, UnaryExpression left, Expression right)

Parameters

e BinaryExpression
left UnaryExpression
right Expression

Returns

Expression

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

e BinaryExpression
left Expression
right BinaryExpression

Returns

Expression

SubstractionWithZero(BinaryExpression, ConstantExpression, Expression)

Simplifies 0 - right to -right.

[ExpressionSignature(ExpressionType.Subtract)]
public Expression SubstractionWithZero(BinaryExpression e, ConstantExpression left, Expression right)

Parameters

e BinaryExpression
left ConstantExpression
right Expression

Returns

Expression

SubstractionWithZero(BinaryExpression, Expression, ConstantExpression)

Simplifies left - 0 to left.

[ExpressionSignature(ExpressionType.Subtract)]
public Expression SubstractionWithZero(BinaryExpression e, Expression left, ConstantExpression right)

Parameters

e BinaryExpression
left Expression
right ConstantExpression

Returns

Expression

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

e Expression
expressions Expression[]

Returns

Expression

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

e Expression
expressions Expression[]

Returns

Expression