[poincare] First version of Simplification with matrix (no tests yet!)

Change-Id: I28ad4750ad31995836b23725f7d715669fcb7ae2
This commit is contained in:
Émilie Feral
2017-11-09 11:14:38 +01:00
parent 8aa4444337
commit d5fc8d139f
145 changed files with 1972 additions and 1331 deletions

View File

@@ -3,6 +3,7 @@
#include <poincare/symbol.h>
#include <poincare/integer.h>
#include <poincare/rational.h>
#include <poincare/complex.h>
#include <ion.h>
#include <iostream>
@@ -17,6 +18,9 @@ void print_expression(const Expression * e, int indentationLevel) {
}
GlobalContext context;
switch (e->type()) {
case Expression::Type::AbsoluteValue:
std::cout << "AbsoluteValue";
break;
case Expression::Type::Addition:
std::cout << "Addition";
break;
@@ -29,35 +33,133 @@ void print_expression(const Expression * e, int indentationLevel) {
case Expression::Type::ArcTangent:
std::cout << "ArcTangent";
break;
case Expression::Type::Multiplication:
std::cout << "Multiplication";
case Expression::Type::BinomialCoefficient:
std::cout << "BinomialCoefficient";
break;
case Expression::Type::NthRoot:
std::cout << "NthRoot";
case Expression::Type::Ceiling:
std::cout << "Ceiling";
break;
case Expression::Type::Complex:
std::cout << "Complex(";
std::cout << static_cast<const Complex<double> *>(e)->a();
std::cout << ", ";
std::cout << static_cast<const Complex<double> *>(e)->b();
std::cout << ")";
break;
case Expression::Type::ComplexArgument:
std::cout << "ComplexArgument";
break;
case Expression::Type::ConfidenceInterval:
std::cout << "ConfidenceInterval";
break;
case Expression::Type::Conjugate:
std::cout << "Conjugate";
break;
case Expression::Type::Cosine:
std::cout << "Cosine";
break;
case Expression::Type::Logarithm:
std::cout << "Log";
case Expression::Type::Decimal:
std::cout << "Decimal(";
std::cout << e->approximate<double>(context, Expression::AngleUnit::Radian);
std::cout << ")";
break;
case Expression::Type::NaperianLogarithm:
std::cout << "Ln";
case Expression::Type::Derivative:
std::cout << "Derivative";
break;
case Expression::Type::Determinant:
std::cout << "Determinant";
break;
case Expression::Type::Division:
std::cout << "Division";
break;
case Expression::Type::DivisionQuotient:
std::cout << "DivisionQuotient";
break;
case Expression::Type::DivisionRemainder:
std::cout << "DivisionRemainder";
break;
case Expression::Type::Factorial:
std::cout << "Factorial";
break;
case Expression::Type::Floor:
std::cout << "Floor";
break;
case Expression::Type::FracPart:
std::cout << "FracPart";
break;
case Expression::Type::GreatCommonDivisor:
std::cout << "GreatCommonDivisor";
break;
case Expression::Type::HyperbolicArcCosine:
std::cout << "HyperbolicArcCosine";
break;
case Expression::Type::HyperbolicArcSine:
std::cout << "HyperbolicArcSine";
break;
case Expression::Type::HyperbolicArcTangent:
std::cout << "HyperbolicArcTangent";
break;
case Expression::Type::HyperbolicCosine:
std::cout << "HyperbolicCosine";
break;
case Expression::Type::HyperbolicSine:
std::cout << "HyperbolicSine";
break;
case Expression::Type::HyperbolicTangent:
std::cout << "HyperbolicTangent";
break;
case Expression::Type::ImaginaryPart:
std::cout << "ImaginaryPart";
break;
case Expression::Type::Integral:
std::cout << "Integral";
break;
case Expression::Type::LeastCommonMultiple:
std::cout << "LeastCommonMultiple";
break;
case Expression::Type::Logarithm:
std::cout << "Logarithm";
break;
case Expression::Type::Matrix:
std::cout << "Matrix(Rows: ";
std::cout << static_cast<const Matrix *>(e)->numberOfRows();
std::cout << ", Columns: ";
std::cout << static_cast<const Matrix *>(e)->numberOfColumns();
std::cout << ")";
break;
case Expression::Type::MatrixDimension:
std::cout << "MatrixDimension";
break;
case Expression::Type::MatrixInverse:
std::cout << "MatrixInverse";
break;
case Expression::Type::MatrixTrace:
std::cout << "MatrixTrace";
break;
case Expression::Type::MatrixTranspose:
std::cout << "MatrixTranspose";
break;
case Expression::Type::Multiplication:
std::cout << "Multiplication";
break;
case Expression::Type::NaperianLogarithm:
std::cout << "NaperianLogarithm";
break;
case Expression::Type::NthRoot:
std::cout << "NthRoot";
break;
case Expression::Type::Opposite:
std::cout << "Opposite";
break;
/*
case Expression::Type::Matrix:
std::cout << "Matrix";
break;
*/
case Expression::Type::Parenthesis:
std::cout << "Parenthesis";
break;
case Expression::Type::PermuteCoefficient:
std::cout << "PermuteCoefficient";
break;
case Expression::Type::PredictionInterval:
std::cout << "PredictionInterval";
break;
case Expression::Type::Power:
std::cout << "Power";
break;
@@ -71,17 +173,32 @@ void print_expression(const Expression * e, int indentationLevel) {
std::cout << static_cast<const Rational * >(e)->denominator().approximate<double>();
std::cout << ")";
break;
case Expression::Type::RealPart:
std::cout << "RealPart";
break;
case Expression::Type::Round:
std::cout << "Round";
break;
case Expression::Type::SimplificationRoot:
std::cout << "SimplificationRoot";
break;
case Expression::Type::Sine:
std::cout << "Sine";
break;
case Expression::Type::SquareRoot:
std::cout << "SquareRoot";
break;
case Expression::Type::Store:
std::cout << "Store";
break;
case Expression::Type::Subtraction:
std::cout << "Subtraction";
break;
case Expression::Type::Sum:
std::cout << "Sum";
break;
case Expression::Type::Symbol:
std::cout << "Symbol(";
std::cout << "Symbol(";
switch (((Symbol*)e)->name()) {
case Ion::Charset::SmallPi:
std::cout << "PI";