Quite a number of transformations can be applied if the expression
is known to be positive (negative) (for instance, sqrt(x^2*y^2) = x*y
if x >= 0 and y >= 0). However the check itself might be quite expensive.
Hence a few status_flags are introduced to cache the result.
hash_calculated = 0x0008, ///< .calchash() has already done its job
not_shareable = 0x0010, ///< don't share instances of this object between different expressions unless explicitly asked to (used by ex::compare())
has_indices = 0x0020,
hash_calculated = 0x0008, ///< .calchash() has already done its job
not_shareable = 0x0010, ///< don't share instances of this object between different expressions unless explicitly asked to (used by ex::compare())
has_indices = 0x0020,
- has_no_indices = 0x0040 // ! (has_indices || has_no_indices) means "don't know"
+ has_no_indices = 0x0040, // ! (has_indices || has_no_indices) means "don't know"
+ is_positive = 0x0080,
+ is_negative = 0x0100,
+ purely_indefinite = 0x0200 // If set in a mul, then it does not contains any terms with determined signs, used in power::expand()
idx,
// answered by classes numeric, symbol, add, mul, power
idx,
// answered by classes numeric, symbol, add, mul, power
+ expanded,
+
+ // is meaningful for mul only
+ indefinite