Skip to content

Commit

Permalink
#308 - Add Power Unit
Browse files Browse the repository at this point in the history
  • Loading branch information
sys27 committed Apr 3, 2021
1 parent b499970 commit 8ac07d2
Show file tree
Hide file tree
Showing 150 changed files with 1,985 additions and 166 deletions.
8 changes: 7 additions & 1 deletion xFunc.Maths/Analyzers/Analyzer{TResult,TContext}.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,14 +16,16 @@
using System;
using System.Diagnostics.CodeAnalysis;
using xFunc.Maths.Expressions;
using xFunc.Maths.Expressions.Angles;
using xFunc.Maths.Expressions.ComplexNumbers;
using xFunc.Maths.Expressions.Hyperbolic;
using xFunc.Maths.Expressions.LogicalAndBitwise;
using xFunc.Maths.Expressions.Matrices;
using xFunc.Maths.Expressions.Programming;
using xFunc.Maths.Expressions.Statistical;
using xFunc.Maths.Expressions.Trigonometric;
using xFunc.Maths.Expressions.Units;
using xFunc.Maths.Expressions.Units.AngleUnits;
using xFunc.Maths.Expressions.Units.PowerUnits;

namespace xFunc.Maths.Analyzers
{
Expand Down Expand Up @@ -131,6 +133,10 @@ public virtual TResult Analyze(Number exp, TContext context)
public virtual TResult Analyze(Angle exp, TContext context)
=> Analyze(exp as IExpression, context);

/// <inheritdoc />
public virtual TResult Analyze(Power exp, TContext context)
=> Analyze(exp as IExpression, context);

/// <inheritdoc />
public virtual TResult Analyze(ToDegree exp, TContext context)
=> Analyze(exp as IExpression, context);
Expand Down
8 changes: 7 additions & 1 deletion xFunc.Maths/Analyzers/Analyzer{TResult}.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,14 +16,16 @@
using System;
using System.Diagnostics.CodeAnalysis;
using xFunc.Maths.Expressions;
using xFunc.Maths.Expressions.Angles;
using xFunc.Maths.Expressions.ComplexNumbers;
using xFunc.Maths.Expressions.Hyperbolic;
using xFunc.Maths.Expressions.LogicalAndBitwise;
using xFunc.Maths.Expressions.Matrices;
using xFunc.Maths.Expressions.Programming;
using xFunc.Maths.Expressions.Statistical;
using xFunc.Maths.Expressions.Trigonometric;
using xFunc.Maths.Expressions.Units;
using xFunc.Maths.Expressions.Units.AngleUnits;
using xFunc.Maths.Expressions.Units.PowerUnits;

namespace xFunc.Maths.Analyzers
{
Expand Down Expand Up @@ -130,6 +132,10 @@ public virtual TResult Analyze(Number exp)
public virtual TResult Analyze(Angle exp)
=> Analyze(exp as IExpression);

/// <inheritdoc />
public virtual TResult Analyze(Power exp)
=> Analyze(exp as IExpression);

/// <inheritdoc />
public virtual TResult Analyze(ToDegree exp)
=> Analyze(exp as IExpression);
Expand Down
11 changes: 10 additions & 1 deletion xFunc.Maths/Analyzers/Differentiator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,10 @@
using System;
using System.Diagnostics.CodeAnalysis;
using xFunc.Maths.Expressions;
using xFunc.Maths.Expressions.Angles;
using xFunc.Maths.Expressions.Hyperbolic;
using xFunc.Maths.Expressions.Trigonometric;
using xFunc.Maths.Expressions.Units.AngleUnits;
using xFunc.Maths.Expressions.Units.PowerUnits;
using static xFunc.Maths.ThrowHelpers;

namespace xFunc.Maths.Analyzers
Expand Down Expand Up @@ -235,6 +236,14 @@ public override IExpression Analyze(Angle exp, DifferentiatorContext context)
return Number.Zero;
}

/// <inheritdoc />
public override IExpression Analyze(Power exp, DifferentiatorContext context)
{
ValidateArguments(exp, context);

return Number.Zero;
}

/// <inheritdoc />
public override IExpression Analyze(Pow exp, DifferentiatorContext context)
{
Expand Down
8 changes: 7 additions & 1 deletion xFunc.Maths/Analyzers/Formatters/CommonFormatter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,14 +17,16 @@
using System.Globalization;
using System.Text;
using xFunc.Maths.Expressions;
using xFunc.Maths.Expressions.Angles;
using xFunc.Maths.Expressions.ComplexNumbers;
using xFunc.Maths.Expressions.Hyperbolic;
using xFunc.Maths.Expressions.LogicalAndBitwise;
using xFunc.Maths.Expressions.Matrices;
using xFunc.Maths.Expressions.Programming;
using xFunc.Maths.Expressions.Statistical;
using xFunc.Maths.Expressions.Trigonometric;
using xFunc.Maths.Expressions.Units;
using xFunc.Maths.Expressions.Units.AngleUnits;
using xFunc.Maths.Expressions.Units.PowerUnits;

namespace xFunc.Maths.Analyzers.Formatters
{
Expand Down Expand Up @@ -174,6 +176,10 @@ public virtual string Analyze(Number exp)
public virtual string Analyze(Angle exp)
=> exp.Value.ToString();

/// <inheritdoc />
public virtual string Analyze(Power exp)
=> exp.Value.ToString();

/// <inheritdoc />
public virtual string Analyze(ToDegree exp)
=> ToString(exp, "todegree({0})");
Expand Down
12 changes: 11 additions & 1 deletion xFunc.Maths/Analyzers/IAnalyzer{TResult,TContext}.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,14 +14,16 @@
// limitations under the License.

using xFunc.Maths.Expressions;
using xFunc.Maths.Expressions.Angles;
using xFunc.Maths.Expressions.ComplexNumbers;
using xFunc.Maths.Expressions.Hyperbolic;
using xFunc.Maths.Expressions.LogicalAndBitwise;
using xFunc.Maths.Expressions.Matrices;
using xFunc.Maths.Expressions.Programming;
using xFunc.Maths.Expressions.Statistical;
using xFunc.Maths.Expressions.Trigonometric;
using xFunc.Maths.Expressions.Units;
using xFunc.Maths.Expressions.Units.AngleUnits;
using xFunc.Maths.Expressions.Units.PowerUnits;

namespace xFunc.Maths.Analyzers
{
Expand Down Expand Up @@ -218,6 +220,14 @@ public interface IAnalyzer<out TResult, TContext>
/// <returns>The result of analysis.</returns>
TResult Analyze(Angle exp, TContext context);

/// <summary>
/// Analyzes the specified expression.
/// </summary>
/// <param name="exp">The expression.</param>
/// <param name="context">The context.</param>
/// <returns>The result of analysis.</returns>
TResult Analyze(Power exp, TContext context);

/// <summary>
/// Analyzes the specified expression.
/// </summary>
Expand Down
11 changes: 10 additions & 1 deletion xFunc.Maths/Analyzers/IAnalyzer{TResult}.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,14 +14,16 @@
// limitations under the License.

using xFunc.Maths.Expressions;
using xFunc.Maths.Expressions.Angles;
using xFunc.Maths.Expressions.ComplexNumbers;
using xFunc.Maths.Expressions.Hyperbolic;
using xFunc.Maths.Expressions.LogicalAndBitwise;
using xFunc.Maths.Expressions.Matrices;
using xFunc.Maths.Expressions.Programming;
using xFunc.Maths.Expressions.Statistical;
using xFunc.Maths.Expressions.Trigonometric;
using xFunc.Maths.Expressions.Units;
using xFunc.Maths.Expressions.Units.AngleUnits;
using xFunc.Maths.Expressions.Units.PowerUnits;

namespace xFunc.Maths.Analyzers
{
Expand Down Expand Up @@ -194,6 +196,13 @@ public interface IAnalyzer<out TResult>
/// <returns>The result of analysis.</returns>
TResult Analyze(Angle exp);

/// <summary>
/// Analyzes the specified expression.
/// </summary>
/// <param name="exp">The expression.</param>
/// <returns>The result of analysis.</returns>
TResult Analyze(Power exp);

/// <summary>
/// Analyzes the specified expression.
/// </summary>
Expand Down
3 changes: 2 additions & 1 deletion xFunc.Maths/Analyzers/Simplifier.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,14 +17,15 @@
using System.Diagnostics.CodeAnalysis;
using System.Runtime.CompilerServices;
using xFunc.Maths.Expressions;
using xFunc.Maths.Expressions.Angles;
using xFunc.Maths.Expressions.ComplexNumbers;
using xFunc.Maths.Expressions.Hyperbolic;
using xFunc.Maths.Expressions.LogicalAndBitwise;
using xFunc.Maths.Expressions.Matrices;
using xFunc.Maths.Expressions.Programming;
using xFunc.Maths.Expressions.Statistical;
using xFunc.Maths.Expressions.Trigonometric;
using xFunc.Maths.Expressions.Units;
using xFunc.Maths.Expressions.Units.AngleUnits;
using static xFunc.Maths.ThrowHelpers;

namespace xFunc.Maths.Analyzers
Expand Down
5 changes: 5 additions & 0 deletions xFunc.Maths/Analyzers/TypeAnalyzers/ResultTypes.cs
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,11 @@ public enum ResultTypes
String = 1 << 8,
#pragma warning restore CA1720

/// <summary>
/// The expression returns a power number.
/// </summary>
PowerNumber = 1 << 9,

/// <summary>
/// The expression returns a number or a complex number.
/// </summary>
Expand Down
45 changes: 41 additions & 4 deletions xFunc.Maths/Analyzers/TypeAnalyzers/TypeAnalyzer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,14 +15,16 @@

using System.Diagnostics.CodeAnalysis;
using xFunc.Maths.Expressions;
using xFunc.Maths.Expressions.Angles;
using xFunc.Maths.Expressions.ComplexNumbers;
using xFunc.Maths.Expressions.Hyperbolic;
using xFunc.Maths.Expressions.LogicalAndBitwise;
using xFunc.Maths.Expressions.Matrices;
using xFunc.Maths.Expressions.Programming;
using xFunc.Maths.Expressions.Statistical;
using xFunc.Maths.Expressions.Trigonometric;
using xFunc.Maths.Expressions.Units;
using xFunc.Maths.Expressions.Units.AngleUnits;
using xFunc.Maths.Expressions.Units.PowerUnits;
using static xFunc.Maths.ThrowHelpers;

namespace xFunc.Maths.Analyzers.TypeAnalyzers
Expand Down Expand Up @@ -304,6 +306,7 @@ public virtual ResultTypes Analyze(Abs exp)
ResultTypes.Number or ResultTypes.ComplexNumber or ResultTypes.Vector
=> ResultTypes.Number,
ResultTypes.AngleNumber => ResultTypes.AngleNumber,
ResultTypes.PowerNumber => ResultTypes.PowerNumber,
_ => ResultTypes.NumberOrAngleOrComplexOrVector.ThrowFor(result),
};
}
Expand All @@ -330,6 +333,11 @@ public virtual ResultTypes Analyze(Add exp)
(ResultTypes.AngleNumber, ResultTypes.AngleNumber)
=> ResultTypes.AngleNumber,

(ResultTypes.Number, ResultTypes.PowerNumber) or
(ResultTypes.PowerNumber, ResultTypes.Number) or
(ResultTypes.PowerNumber, ResultTypes.PowerNumber)
=> ResultTypes.PowerNumber,

(ResultTypes.Number, ResultTypes.ComplexNumber) or
(ResultTypes.ComplexNumber, ResultTypes.Number) or
(ResultTypes.ComplexNumber, ResultTypes.ComplexNumber)
Expand Down Expand Up @@ -367,6 +375,7 @@ public virtual ResultTypes Analyze(Ceil exp)
ResultTypes.Undefined => ResultTypes.Undefined,
ResultTypes.Number => ResultTypes.Number,
ResultTypes.AngleNumber => ResultTypes.AngleNumber,
ResultTypes.PowerNumber => ResultTypes.PowerNumber,
_ => ResultTypes.NumberOrAngle.ThrowFor(result),
};
}
Expand Down Expand Up @@ -419,6 +428,11 @@ public virtual ResultTypes Analyze(Div exp)
(ResultTypes.AngleNumber, ResultTypes.AngleNumber)
=> ResultTypes.AngleNumber,

(ResultTypes.Number, ResultTypes.PowerNumber) or
(ResultTypes.PowerNumber, ResultTypes.Number) or
(ResultTypes.PowerNumber, ResultTypes.PowerNumber)
=> ResultTypes.PowerNumber,

(ResultTypes.Number, ResultTypes.ComplexNumber) or
(ResultTypes.ComplexNumber, ResultTypes.Number) or
(ResultTypes.ComplexNumber, ResultTypes.ComplexNumber)
Expand Down Expand Up @@ -477,6 +491,7 @@ public virtual ResultTypes Analyze(Floor exp)
ResultTypes.Undefined => ResultTypes.Undefined,
ResultTypes.Number => ResultTypes.Number,
ResultTypes.AngleNumber => ResultTypes.AngleNumber,
ResultTypes.PowerNumber => ResultTypes.PowerNumber,
_ => ResultTypes.NumberOrAngle.ThrowFor(result),
};
}
Expand All @@ -494,6 +509,7 @@ public virtual ResultTypes Analyze(Trunc exp)
ResultTypes.Undefined => ResultTypes.Undefined,
ResultTypes.Number => ResultTypes.Number,
ResultTypes.AngleNumber => ResultTypes.AngleNumber,
ResultTypes.PowerNumber => ResultTypes.PowerNumber,
_ => ResultTypes.NumberOrAngle.ThrowFor(result),
};
}
Expand All @@ -511,6 +527,7 @@ public virtual ResultTypes Analyze(Frac exp)
ResultTypes.Undefined => ResultTypes.Undefined,
ResultTypes.Number => ResultTypes.Number,
ResultTypes.AngleNumber => ResultTypes.AngleNumber,
ResultTypes.PowerNumber => ResultTypes.PowerNumber,
_ => ResultTypes.NumberOrAngle.ThrowFor(result),
};
}
Expand Down Expand Up @@ -672,6 +689,11 @@ public virtual ResultTypes Analyze(Mul exp)
(ResultTypes.AngleNumber, ResultTypes.AngleNumber)
=> ResultTypes.AngleNumber,

(ResultTypes.Number, ResultTypes.PowerNumber) or
(ResultTypes.PowerNumber, ResultTypes.Number) or
(ResultTypes.PowerNumber, ResultTypes.PowerNumber)
=> ResultTypes.PowerNumber,

(ResultTypes.Number, ResultTypes.ComplexNumber) or
(ResultTypes.ComplexNumber, ResultTypes.Number) or
(ResultTypes.ComplexNumber, ResultTypes.ComplexNumber)
Expand Down Expand Up @@ -706,10 +728,16 @@ public virtual ResultTypes Analyze(Mul exp)
}

/// <inheritdoc />
public virtual ResultTypes Analyze(Number exp) => CheckArgument(exp, ResultTypes.Number);
public virtual ResultTypes Analyze(Number exp)
=> CheckArgument(exp, ResultTypes.Number);

/// <inheritdoc />
public virtual ResultTypes Analyze(Angle exp) => CheckArgument(exp, ResultTypes.AngleNumber);
public virtual ResultTypes Analyze(Angle exp)
=> CheckArgument(exp, ResultTypes.AngleNumber);

/// <inheritdoc />
public virtual ResultTypes Analyze(Power exp)
=> CheckArgument(exp, ResultTypes.PowerNumber);

/// <inheritdoc />
public virtual ResultTypes Analyze(ToDegree exp)
Expand All @@ -733,7 +761,9 @@ public virtual ResultTypes Analyze(ToNumber exp)

return result switch
{
ResultTypes.Undefined or ResultTypes.AngleNumber
ResultTypes.Undefined or
ResultTypes.AngleNumber or
ResultTypes.PowerNumber
=> ResultTypes.Number,
_ => ResultTypes.AngleNumber.ThrowFor(result),
};
Expand Down Expand Up @@ -839,6 +869,11 @@ public virtual ResultTypes Analyze(Sub exp)
(ResultTypes.AngleNumber, ResultTypes.AngleNumber)
=> ResultTypes.AngleNumber,

(ResultTypes.Number, ResultTypes.PowerNumber) or
(ResultTypes.PowerNumber, ResultTypes.Number) or
(ResultTypes.PowerNumber, ResultTypes.PowerNumber)
=> ResultTypes.PowerNumber,

(ResultTypes.Number, ResultTypes.ComplexNumber) or
(ResultTypes.ComplexNumber, ResultTypes.Number) or
(ResultTypes.ComplexNumber, ResultTypes.ComplexNumber)
Expand Down Expand Up @@ -876,6 +911,7 @@ public virtual ResultTypes Analyze(UnaryMinus exp)
ResultTypes.Undefined => ResultTypes.Undefined,
ResultTypes.Number => ResultTypes.Number,
ResultTypes.AngleNumber => ResultTypes.AngleNumber,
ResultTypes.PowerNumber => ResultTypes.PowerNumber,
ResultTypes.ComplexNumber => ResultTypes.ComplexNumber,
_ => ResultTypes.NumberOrComplex.ThrowFor(result),
};
Expand Down Expand Up @@ -910,6 +946,7 @@ public virtual ResultTypes Analyze(Sign exp)
ResultTypes.Undefined => ResultTypes.Undefined,
ResultTypes.Number => ResultTypes.Number,
ResultTypes.AngleNumber => ResultTypes.AngleNumber,
ResultTypes.PowerNumber => ResultTypes.PowerNumber,
_ => ResultTypes.Number.ThrowFor(result),
};
}
Expand Down
5 changes: 4 additions & 1 deletion xFunc.Maths/Expressions/Abs.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,10 @@
using System.Collections.Immutable;
using System.Numerics;
using xFunc.Maths.Analyzers;
using xFunc.Maths.Expressions.Angles;
using xFunc.Maths.Expressions.Matrices;
using xFunc.Maths.Expressions.Units;
using xFunc.Maths.Expressions.Units.AngleUnits;
using xFunc.Maths.Expressions.Units.PowerUnits;
using Vector = xFunc.Maths.Expressions.Matrices.Vector;

namespace xFunc.Maths.Expressions
Expand Down Expand Up @@ -56,6 +58,7 @@ public override object Execute(ExpressionParameters? parameters)
{
NumberValue number => NumberValue.Abs(number),
AngleValue angle => AngleValue.Abs(angle),
PowerValue power => PowerValue.Abs(power),
Complex complex => Complex.Abs(complex),
Vector vector => vector.Abs(parameters),
_ => throw new ResultIsNotSupportedException(this, result),
Expand Down

0 comments on commit 8ac07d2

Please sign in to comment.