Aggregate

com.phasmidsoftware.number.expression.expr.Aggregate
See theAggregate companion object
case class Aggregate(function: ExpressionBiFunction, xs: Seq[Expression]) extends Multiple

Represents a composite expression that computes the total of a sequence of expressions. The sequence must be non-empty.

Value parameters

xs

A non-empty sequence of expressions to be totaled.

Attributes

Constructor

Constructs an Aggregate instance with a sequence of expressions.

Companion
object
Graph
Supertypes
trait Serializable
trait Product
trait Equals
trait Multiple
trait Expression
trait Approximate
trait Lazy
trait Valuable
trait TypeSafe
trait Exactitude
trait Unitary
trait Zeroable
trait Numeric
trait Renderable
class Object
trait Matchable
class Any
Show all

Members list

Value members

Concrete methods

Adds a new expression to the current aggregate.

Adds a new expression to the current aggregate.

Value parameters

x

the expression to be added

Attributes

Returns

a new Aggregate instance with the updated list of expressions

def addAll(ys: Seq[Expression]): Aggregate

Adds a sequence of expressions to the current aggregate.

Adds a sequence of expressions to the current aggregate.

Value parameters

ys

the sequence of expressions to be added

Attributes

Returns

a new Aggregate instance with the updated list of expressions

def approximation(force: Boolean): Option[Real]

Provides an approximation of this Aggregate, if applicable.

Provides an approximation of this Aggregate, if applicable.

This method attempts to compute an approximate representation of the number in the form of a Real, which encapsulates uncertainty or imprecision in its value. If no meaningful approximation is possible for the number, it returns None.

Attributes

Returns

an Option[Real] containing the approximate representation of this Number, or None if no approximation is available.

def contains[E >: Expression](elem: E): Boolean

Checks if the given element is contained within the collection of expressions.

Checks if the given element is contained within the collection of expressions.

Value parameters

elem

the element of type E to be checked for presence in the collection. The type E must be a supertype of Expression.

Attributes

Returns

true if the element is present in the collection, otherwise false.

def eliminateComplementaryTerms(complementaryPredicate: (ExpressionBiFunction, Expression, Expression) => Boolean): Try[List[Expression]]

Eliminates complementary terms from the current aggregate based on a specified predicate.

Eliminates complementary terms from the current aggregate based on a specified predicate.

The method identifies pairs of expressions within the aggregate that satisfy the provided complementaryPredicate function and removes them, returning the remaining expressions.

CONSIDER This is currently called only once so it could be converted to a lazy def by fixing the parameter.

Value parameters

complementaryPredicate

a function that determines whether two expressions within the context of a provided aggregate function are complementary. The predicate takes three arguments: - The aggregate function (ExpressionBiFunction: e.g., Sum or Product). - The first expression to evaluate (Expression). - The second expression to evaluate (Expression). It returns a Boolean indicating if the expressions are complementary.

Attributes

Returns

a Try[List[Expression]] containing the list of expressions after removing complementary pairs identified by the predicate. If an error occurs (e.g., unsupported operation), a Failure is returned.

def evaluate(context: Context): Option[Eager]

Evaluates the given context to produce an optional field, leveraging the aggregate function and associated evaluation logic. The method employs an iterative process to evaluate a sequence of terms within the provided context while considering identity elements and context transformation rules.

Evaluates the given context to produce an optional field, leveraging the aggregate function and associated evaluation logic. The method employs an iterative process to evaluate a sequence of terms within the provided context while considering identity elements and context transformation rules.

Value parameters

context

the context in which the evaluation should take place. This defines the constraints and qualifications for the terms involved in the evaluation process.

Attributes

Returns

an Option[Field] representing the result of the evaluation. Returns None if the evaluation cannot produce a valid field or if an invalid context is encountered.

def maybeFactor(context: Context): Option[Factor]

Attempts to retrieve a factor based on the provided context. This method evaluates whether there is an applicable factor within the given context.

Attempts to retrieve a factor based on the provided context. This method evaluates whether there is an applicable factor within the given context.

Value parameters

context

the context in which the factor is evaluated.

Attributes

Returns

an optional Factor if one qualifies under the provided context; otherwise, None.

Inherited methods

Computes an approximate representation of the current value.

Computes an approximate representation of the current value.

This method utilizes the approximation mechanism to derive the most likely value in the form of a Real. Should the approximation fail, an AlgebraException will be raised to indicate the error.

Attributes

Returns

the approximate value as a Real if successful; throws an AlgebraException otherwise.

Inherited from:
Approximate
def approximationComplex(force: Boolean = ...): Option[Eager]

Attempts to compute an approximate complex representation of the current value.

Attempts to compute an approximate complex representation of the current value.

This method provides an optional approximation in the form of an Eager type. By default, it does not perform the computation unless explicitly requested through the force flag. The method may return None if no approximation can be computed or if the operation fails.

Value parameters

force

a boolean flag indicating whether to force computation of the approximation. If true, the method will attempt to perform a complex approximation even if it is resource-intensive or otherwise unwarranted.

Attributes

Returns

an Option containing the approximate value as an Eager if successful, or None if no approximation is available.

Inherited from:
Approximate
def category: String

Returns the category of this value in the Valuable type hierarchy.

Returns the category of this value in the Valuable type hierarchy.

Attributes

Returns

a string indicating the high-level category (e.g., "Expression", "Structure", "Nat", "Complex")

Inherited from:
TypeSafe
def describe: String

Returns a descriptive string combining category and type name. Useful for debugging to understand both the hierarchy level and concrete type.

Returns a descriptive string combining category and type name. Useful for debugging to understand both the hierarchy level and concrete type.

Attributes

Returns

a string in the format "Category.TypeName" (e.g., "Structure.WholeNumber")

Inherited from:
TypeSafe
def leaveOperandsAsIs: Boolean

Indicates whether the operands of this CompositeExpression should remain unaltered during processing.

Indicates whether the operands of this CompositeExpression should remain unaltered during processing.

This property determines whether simplification or transformations should be applied to the operands of the expression, or if they are to be left unchanged. The exact behavior is specific to the context of the CompositeExpression.

Attributes

Returns

true if the operands are to remain as is; false otherwise.

Inherited from:
CompositeExpression
def multiply(other: Lazy): Lazy

Multiplies this Expression with another Lazy instance. If the other instance is of type Expression, a product operation is performed, and the result is simplified. If the other instance is not of type Expression, an ExpressionException is thrown.

Multiplies this Expression with another Lazy instance. If the other instance is of type Expression, a product operation is performed, and the result is simplified. If the other instance is not of type Expression, an ExpressionException is thrown.

Value parameters

other

the Lazy instance to multiply with this Expression

Attributes

Returns

a new Lazy instance representing the product of this Expression and the supplied Lazy instance

Throws
ExpressionException

if the provided other is not of type Expression

Inherited from:
Expression
def product(other: Valuable): Valuable

Obtains the product of this Valuable instance and another Valuable instance. The behavior of the method is determined by whether the instances are of type Lazy or Eager. If the provided instances do not conform to the expected types, an AlgebraException is thrown. CONSIDER supporting sum also.

Obtains the product of this Valuable instance and another Valuable instance. The behavior of the method is determined by whether the instances are of type Lazy or Eager. If the provided instances do not conform to the expected types, an AlgebraException is thrown. CONSIDER supporting sum also.

CONSIDER using lazify

Value parameters

other

the other Valuable instance to compute the product with

Attributes

Returns

a Valuable instance representing the product of this and the other instance

Note

throws AlgebraException if the computation involves unsupported Valuable types

Inherited from:
Valuable
def productElementNames: Iterator[String]

An iterator over the names of all the elements of this product.

An iterator over the names of all the elements of this product.

Attributes

Inherited from:
Product
def productIterator: Iterator[Any]

An iterator over all the elements of this product.

An iterator over all the elements of this product.

Attributes

Returns

in the default implementation, an Iterator[Any]

Inherited from:
Product
def shouldStaySymbolic: Boolean

Determines if all components within a given Expression are named.

Determines if all components within a given Expression are named.

TODO handle the specific cases at their proper level in the type hierarchy.

This method recursively checks whether each component of the provided Expression either has a name (in the case of a Nameable expression) or, if it is a composite expression (CompositeExpression), ensures that all of its terms also have names.

Attributes

Returns

true if all components of the expression are named, otherwise false.

Inherited from:
CompositeExpression
def show: String

Renders and returns a string representation of the object. By default, this is the same as render but it can be overridden in subclasses.

Renders and returns a string representation of the object. By default, this is the same as render but it can be overridden in subclasses.

Attributes

Returns

a string representing the object

Inherited from:
Valuable
def typeName: String

Returns a simple string representation of the runtime type. Useful for debugging and logging.

Returns a simple string representation of the runtime type. Useful for debugging and logging.

Attributes

Returns

the simple class name (e.g., "WholeNumber", "RationalNumber")

Inherited from:
TypeSafe
def unit(x: Eager): Lazy

Transforms an instance of the Eager type into a Lazy instance, allowing for deferred computation or evaluation. NOTE that this method ignores this.

Transforms an instance of the Eager type into a Lazy instance, allowing for deferred computation or evaluation. NOTE that this method ignores this.

Value parameters

x

an instance of Eager that is to be converted into a Lazy representation

Attributes

Returns

a Lazy instance representing the deferred computation or evaluation of the input

Inherited from:
Expression

Concrete fields

lazy val depth: Int

Method to determine the depth of this Expression.

Method to determine the depth of this Expression.

Attributes

Returns

the depth (an atomic expression has depth of 1).

lazy val identitiesMatcher: em.AutoMatcher[Expression]

Simplifies a given Expression by removing trivial components or replacing grouped terms with their corresponding higher-level mathematical function (if applicable).

Simplifies a given Expression by removing trivial components or replacing grouped terms with their corresponding higher-level mathematical function (if applicable).

This method uses pattern matching to identify and transform instances of Aggregate:

  • Removes identity elements for the aggregate function.
  • Groups identical terms and replaces them with a new aggregate expression using the next higher mathematical function.

Attributes

Returns

an AutoMatcher for Expression capable of identifying and performing simplifications of trivial aggregates.

lazy val isExact: Boolean

Determines whether this Valuable is exact, i.e., has no approximation.

Determines whether this Valuable is exact, i.e., has no approximation.

CONSIDER it may be possible that there are non-approximatable entities that are not exact either.

The method returns true if there is no approximate representation available (i.e., approximation is None), indicating that the entity is exact. Otherwise, it returns false.

Attributes

Returns

a Boolean indicating whether the entity is exact (true) or has an approximation (false).

lazy val operandsMatcher: em.AutoMatcher[Expression]

Simplifies the components of this CompositeExpression using a matching mechanism to identify and transform sub-expressions into simpler forms if possible.

Simplifies the components of this CompositeExpression using a matching mechanism to identify and transform sub-expressions into simpler forms if possible.

Attributes

Returns

the result of the simplification attempt encapsulated in a MatchResult, which either contains a simplified Expression or indicates that no simplification was possible.

lazy val renderAsExpression: String

Renders the CompositeExpression as a string representation of the expression itself, typically in a structured or human-readable mathematical format.

Renders the CompositeExpression as a string representation of the expression itself, typically in a structured or human-readable mathematical format.

Attributes

Returns

a string representation of the CompositeExpression as an expression.

lazy val structuralMatcher: em.AutoMatcher[Expression]

Simplifies a composite Expression by leveraging the simplifyAggregate method. This is typically used to reduce composite mathematical expressions into their simplest form when possible.

Simplifies a composite Expression by leveraging the simplifyAggregate method. This is typically used to reduce composite mathematical expressions into their simplest form when possible.

Attributes

Returns

an AutoMatcher for Expression that applies the simplification logic defined in simplifyAggregate.

lazy val terms: Seq[Expression]

Provides the terms that comprise this CompositeExpression.

Provides the terms that comprise this CompositeExpression.

Attributes

Returns

xs.

lazy override val toString: String

Method to render this Structure in a presentable manner.

Method to render this Structure in a presentable manner.

Attributes

Returns

a String

Inherited fields

lazy val approximation: Option[Real]

A lazily evaluated optional approximation of this Expression.

A lazily evaluated optional approximation of this Expression.

This field holds the result of simplifying the Expression with the approximation flag set to true. If the approximation is possible, it will store the approximated Real value; otherwise, it will remain None.

This approximation is computed based on the context of the simplify method, which determines how the expression should be approximated.

Attributes

Inherited from:
Expression
lazy val approximationComplex: Option[Eager]

Represents the optional approximate evaluation of a complex Expression. The property retrieves the result of invoking the approximationComplex method on the simplify field, passing true as an argument to indicate that the result should be computed for complex approximations.

Represents the optional approximate evaluation of a complex Expression. The property retrieves the result of invoking the approximationComplex method on the simplify field, passing true as an argument to indicate that the result should be computed for complex approximations.

This lazy value ensures that the computation is deferred until accessed, and only computed once for performance optimization.

Attributes

Returns

An Option of type Eager, containing the approximate complex representation of this Expression, if available. Otherwise, None.

Inherited from:
Expression
lazy val asCoreNumber: Option[Number]

Method to determine if the materialized value of this Expression is defined and corresponds to a Number. If this expression is exact, then evaluate as is and convert the result to a Number. Otherwise, we simply materialize this expression and convert the result to a Number.

Method to determine if the materialized value of this Expression is defined and corresponds to a Number. If this expression is exact, then evaluate as is and convert the result to a Number. Otherwise, we simply materialize this expression and convert the result to a Number.

Attributes

Returns

a Some(x) if this materializes as a Number; otherwise None.

Inherited from:
Expression
lazy val asMonotone: Structure

Casts this Valuable instance into a Structure type if it already is a Structure. If the instance is not a Structure, an AlgebraException is thrown. CONSIDER returning Option[Structure] instead.

Casts this Valuable instance into a Structure type if it already is a Structure. If the instance is not a Structure, an AlgebraException is thrown. CONSIDER returning Option[Structure] instead.

Attributes

Returns

the current instance as a Structure

Note

Throws com.phasmidsoftware.number.algebra.util.AlgebraException if the instance is not of type Structure

Inherited from:
Valuable
lazy val asNumber: Option[Number]

Attempts to cast this instance to a Number. If the instance is of type Number, it is wrapped in an Option and returned. Otherwise, returns None.

Attempts to cast this instance to a Number. If the instance is of type Number, it is wrapped in an Option and returned. Otherwise, returns None.

Attributes

Returns

an Option containing the instance as a Number if applicable, or None if not.

Inherited from:
Valuable
lazy val containsI: Boolean

Determines if the current Expression or any of its sub-expressions contains the constant I.

Determines if the current Expression or any of its sub-expressions contains the constant I.

For Expression instances:

  • If the Expression is exactly the constant I, returns true.
  • If the Expression is a composite of other expressions (CompositeExpression), recursively searches through the terms to check if any of them contains the constant I.
  • For all other cases, returns false.

Attributes

Returns

true if the constant I is present in the Expression or its components, false otherwise.

Inherited from:
Expression
lazy val debug: String

Method to use when debugging to know exactly what an Expression is in tree form. This is needed because toString and other renderers all use some sort of syntactic sugar to make things look nice for us humans.

Method to use when debugging to know exactly what an Expression is in tree form. This is needed because toString and other renderers all use some sort of syntactic sugar to make things look nice for us humans.

Creates a string representation of this Expression for debugging purposes. Depending on the type of this Expression, the output format varies:

  • For atomic Product instances (arity 0), the productPrefix is returned.
  • For non-atomic Product instances, the productPrefix is combined with the debug representation of contained sub-expressions (if they are Expressions) or their toString representation otherwise.
  • For all other cases, the default toString implementation is used.

Attributes

Returns

a String representation useful for debugging.

Inherited from:
Expression
lazy val evaluateAsIs: Option[Eager]

Evaluates this Expression in the context of AnyContext without simplification or factor-based conversion. This allows obtaining a direct evaluation of the Expression as a Eager, if possible. NOTE: no simplification or factor-based conversion occurs here.

Evaluates this Expression in the context of AnyContext without simplification or factor-based conversion. This allows obtaining a direct evaluation of the Expression as a Eager, if possible. NOTE: no simplification or factor-based conversion occurs here.

Attributes

Returns

either a Some[Eager] containing the value if evaluation is successful, or None otherwise.

Inherited from:
Expression
lazy val fuzzy: Eager

Computes the fuzzy (approximate) value of this Expression. If the current Expression can be matched to a simpler form via matchSimpler, its fuzzy value is derived from the simplified expression. Otherwise, the fuzzy result is delegated to the superclass implementation.

Computes the fuzzy (approximate) value of this Expression. If the current Expression can be matched to a simpler form via matchSimpler, its fuzzy value is derived from the simplified expression. Otherwise, the fuzzy result is delegated to the superclass implementation.

Attributes

Returns

an eager.Real representing the approximate value of this Expression

Inherited from:
Expression
val isAtomic: Boolean

Indicates whether this expression is atomic.

Indicates whether this expression is atomic.

Attributes

Returns

false as the default value, indicating the expression is not atomic.

Inherited from:
CompositeExpression
lazy val isEager: Boolean

Method to determine if this Expression can be evaluated as is. If so, then materialize will not lose any precision because no approximation will be required. NOTE that, it is conceivable that simplifying this Expression first might result in an eager value even though this method would return false.

Method to determine if this Expression can be evaluated as is. If so, then materialize will not lose any precision because no approximation will be required. NOTE that, it is conceivable that simplifying this Expression first might result in an eager value even though this method would return false.

Attributes

Returns

true if evaluateAsIs is defined.

Inherited from:
Expression
lazy val isUnity: Boolean

Determines whether this object represents unity.

Determines whether this object represents unity.

Attributes

Returns

true if the object represents unity, false otherwise

Inherited from:
CompositeExpression
lazy val isZero: Boolean

Determines if the current number is equal to zero.

Determines if the current number is equal to zero.

Attributes

Returns

true if the number is zero, false otherwise

Inherited from:
CompositeExpression
lazy val materialize: Eager

Materializes this Expression into an Eager object by simplifying it, evaluating as-is, optionally approximating it, and recovering with a defined exception in case of failure.

Materializes this Expression into an Eager object by simplifying it, evaluating as-is, optionally approximating it, and recovering with a defined exception in case of failure.

This method should be the final step when dealing with an Expression. Do not materialize early because that defeats the entire purpose of lazy evaluation.

The method first simplifies the expression, attempts to evaluate it directly, and then tries an approximation if necessary. Ultimately, it ensures the resulting materialized object is an instance of Eager.

The Eager result will be normalized if appropriate.

Attributes

Returns

an Eager representation of this Expression achieved through evaluation and/or approximation.

Inherited from:
Expression
lazy val maybeDouble: Option[Double]

If this Valuable is exact, it returns the exact value as a Double. Otherwise, it returns None. NOTE: do NOT implement this method to return a Double for a fuzzy Real--only for exact numbers.

If this Valuable is exact, it returns the exact value as a Double. Otherwise, it returns None. NOTE: do NOT implement this method to return a Double for a fuzzy Real--only for exact numbers.

Attributes

Returns

Some(x) where x is a Double if this is exact, else None.

Inherited from:
CompositeExpression
lazy val normalize: Valuable

Normalizes the current Lazy instance to its simplest Valuable equivalent. The method first attempts to simplify the instance using the simplify method. If the simplified result is exact, the method materializes it and normalizes the resulting value. Otherwise, the simplified value is returned as is.

Normalizes the current Lazy instance to its simplest Valuable equivalent. The method first attempts to simplify the instance using the simplify method. If the simplified result is exact, the method materializes it and normalizes the resulting value. Otherwise, the simplified value is returned as is.

Attributes

Returns

the simplest Valuable representation of this value after normalization

Inherited from:
Lazy
lazy val render: String

Provides a lazy string representation of the CompositeExpression, delegating the rendering logic to the renderAsExpression method.

Provides a lazy string representation of the CompositeExpression, delegating the rendering logic to the renderAsExpression method.

This value is computed only once, upon its first access, and caches the result for subsequent accesses. It is intended to present the CompositeExpression in a structured or human-readable mathematical format by reusing the string output generated by renderAsExpression.

Attributes

Returns

the string representation of this CompositeExpression.

Inherited from:
CompositeExpression
lazy val signum: Int

Determines the sign of the Structure value represented by this instance. Returns an integer indicating whether the value is positive, negative, or zero.

Determines the sign of the Structure value represented by this instance. Returns an integer indicating whether the value is positive, negative, or zero.

Attributes

Returns

1 if the value is positive, -1 if the value is negative, and 0 if the value is zero

Inherited from:
CompositeExpression
lazy val simplify: Expression

Simplifies the current Expression instance. If a simpler representation of the Expression can be determined, it returns that representation. Otherwise, it returns the current Expression unchanged. NOTE: be careful not to invoke recursively.

Simplifies the current Expression instance. If a simpler representation of the Expression can be determined, it returns that representation. Otherwise, it returns the current Expression unchanged. NOTE: be careful not to invoke recursively.

Attributes

Returns

the simplified Expression, or the current Expression if no simplification is possible

Inherited from:
Expression
lazy val simplifyLazy: em.AutoMatcher[Expression]

Simplifies the exact form of a CompositeExpression by identifying and transforming sub-expressions into their precise, simplified forms. This method focuses on exact mathematical simplifications that can be performed without introducing approximations.

Simplifies the exact form of a CompositeExpression by identifying and transforming sub-expressions into their precise, simplified forms. This method focuses on exact mathematical simplifications that can be performed without introducing approximations.

TODO try to merge this method with Expression.simplifyByEvaluation.

Attributes

Returns

an em.AutoMatcher[Expression] that encapsulates the logic for simplifying exact expressions. The result contains the simplified Expression if successful, or indicates no simplification was possible.

Inherited from:
CompositeExpression
lazy val toDouble: Double

Converts the approximate representation of this number into a Double.

Converts the approximate representation of this number into a Double.

This method attempts to approximate the value of this number by invoking the approximation method with force = true. If the approximation exists, it is converted to a Double. If no approximation can be obtained, an AlgebraException is thrown to indicate a logic error.

Attributes

Returns

the approximate value as a Double.

Note

Throws an com.phasmidsoftware.number.algebra.util.AlgebraException if no approximation can be obtained.

Inherited from:
Approximate