mirror of
https://github.com/UpsilonNumworks/Upsilon.git
synced 2026-01-18 16:27:34 +01:00
[poincare] Better simplification of sequences
This commit is contained in:
@@ -24,6 +24,7 @@ public:
|
||||
|
||||
// Properties
|
||||
Type type() const override { return Type::Addition; }
|
||||
virtual ExpressionNode::IntegerStatus integerStatus(Context * context) const override;
|
||||
int polynomialDegree(Context * context, const char * symbolName) const override;
|
||||
int getPolynomialCoefficients(Context * context, const char * symbolName, Expression coefficients[], ExpressionNode::SymbolicComputation symbolicComputation) const override;
|
||||
|
||||
|
||||
@@ -152,6 +152,7 @@ public:
|
||||
bool isOfType(ExpressionNode::Type * types, int length) const { return node()->isOfType(types, length); }
|
||||
ExpressionNode::Sign sign(Context * context) const { return node()->sign(context); }
|
||||
ExpressionNode::NullStatus nullStatus(Context * context) const { return node()->nullStatus(context); }
|
||||
ExpressionNode::IntegerStatus integerStatus(Context * context) const { return node()->integerStatus(context); }
|
||||
bool isStrictly(ExpressionNode::Sign s, Context * context) const { return s == node()->sign(context) && node()->nullStatus(context) == ExpressionNode::NullStatus::NonNull; }
|
||||
bool isUndefined() const { return node()->type() == ExpressionNode::Type::Undefined || node()->type() == ExpressionNode::Type::Unreal; }
|
||||
bool isNumber() const { return node()->isNumber(); }
|
||||
|
||||
@@ -162,7 +162,10 @@ public:
|
||||
NonNull = 0,
|
||||
Null = 1,
|
||||
};
|
||||
|
||||
enum class IntegerStatus {
|
||||
Unknown = -1,
|
||||
Integer = 1,
|
||||
};
|
||||
class ComputationContext {
|
||||
public:
|
||||
ComputationContext(
|
||||
@@ -233,6 +236,7 @@ public:
|
||||
|
||||
virtual Sign sign(Context * context) const { return Sign::Unknown; }
|
||||
virtual NullStatus nullStatus(Context * context) const { return NullStatus::Unknown; }
|
||||
virtual IntegerStatus integerStatus(Context * context) const { return IntegerStatus::Unknown; }
|
||||
virtual bool isNumber() const { return false; }
|
||||
virtual bool isRandom() const { return false; }
|
||||
virtual bool isParameteredExpression() const { return false; }
|
||||
|
||||
@@ -21,6 +21,7 @@ public:
|
||||
|
||||
// Properties
|
||||
Type type() const override { return Type::Multiplication; }
|
||||
virtual IntegerStatus integerStatus(Context * context) const override;
|
||||
Sign sign(Context * context) const override;
|
||||
int polynomialDegree(Context * context, const char * symbolName) const override;
|
||||
int getPolynomialCoefficients(Context * context, const char * symbolName, Expression coefficients[], ExpressionNode::SymbolicComputation symbolicComputation) const override;
|
||||
|
||||
@@ -18,6 +18,7 @@ public:
|
||||
void setNegative(bool negative) { m_negative = negative; }
|
||||
bool isInteger() const { return denominator().isOne(); }
|
||||
NullStatus nullStatus(Context * context) const override { return isZero() ? NullStatus::Null : NullStatus::NonNull; }
|
||||
virtual IntegerStatus integerStatus(Context * context) const { return isInteger() ? IntegerStatus::Integer : IntegerStatus::Unknown; }
|
||||
|
||||
// TreeNode
|
||||
size_t size() const override;
|
||||
|
||||
@@ -21,6 +21,7 @@ public:
|
||||
|
||||
// Expression Properties
|
||||
Type type() const override { return Type::Symbol; }
|
||||
virtual IntegerStatus integerStatus(Context * context) const { return context->expressionTypeForIdentifier(m_name, strlen(m_name)) == Context::SymbolAbstractType::Integer ? IntegerStatus::Integer : IntegerStatus::Unknown; }
|
||||
Expression replaceSymbolWithExpression(const SymbolAbstract & symbol, const Expression & expression) override;
|
||||
int polynomialDegree(Context * context, const char * symbolName) const override;
|
||||
int getPolynomialCoefficients(Context * context, const char * symbolName, Expression coefficients[], ExpressionNode::SymbolicComputation symbolicComputation) const override;
|
||||
|
||||
Reference in New Issue
Block a user