package_name_to_import_with.simplify module#
Evaluate simplification expressions.
- clean_and_tokenise_expression(raw_expression)[source]#
Extract tokens from arithmetic expression after pre-processing.
- Parameters:
raw_expression (
str
) -- infix expression- Returns:
tokens in standard arithmetic expression
- Return type:
collections.abc.Iterator[re.Match[str]]
- Raises:
ValueError -- if unsupported characters are passed
- convert_infix_expression(infix_expression_tokens)[source]#
Convert standard arithmetic expression into reverse Polish notation.
This implements shunting yard algorithm following pseudocode section in Wikipedia.
- Parameters:
infix_expression_tokens (
collections.abc.Iterator[re.Match[str]]
) -- tokens in standard arithmetic expression- Returns:
postfix arithmetic expression
- Return type:
list[BinaryArithmeticOperator | float]
- Raises:
ValueError -- if brackets are not matching
Notes
Initiate operator stack and output queue.
Modify based on token type.
Number
Convert to number (using
float
).Add to
output_queue
.
Operator
Convert to operator (using
BinaryArithmeticOperator
).Move top lower precedence operators from
operator_stack
intooutput_queue
.Add to
operator_stack
.
Left Parenthesis
Convert to bracket (using
Parentheses
).
Right Parenthesis
Convert to bracket (using
Parentheses
).Move operators from
operator_stack
intooutput_queue
till left bracket.Discard left bracket from top of
operator_stack
.
References
- evaluate_postfix_expression(postfix_expression)[source]#
Evaluate postfix arithmetic expression in reverse Polish notation.
- Parameters:
postfix_expression (
list[BinaryArithmeticOperator | float]
) -- elements of arithmetic expression in postfix format- Returns:
result of arithmetic expression
- Return type:
- solve_simplification(expression)[source]#
Evaluate arithmetic expression.
- Parameters:
expression (
str
) -- standard arithmetic expression- Returns:
result of arithmetic expression
- Return type:
Examples
>>> from package_name_to_import_with import solve_simplification >>> solve_simplification("0 + 1 - 2 * 3 / 4") -0.5 >>> solve_simplification("5 * 6 / (7 + 8) - 9") -7.0