Esempio n. 1
0
    def __init__(self, ex: Union[str, Number, sympy.Expr]) -> None:
        """Create an Expression object.

        Receives the mathematical expression which shall be represented by the object as a string
        which will be parsed using py_expression_eval. For available operators, functions and
        constants see SymPy documentation

        Args:
            ex (string): The mathematical expression represented as a string
        """
        super().__init__()

        if isinstance(ex, sympy.Expr):
            self._original_expression = None
            self._sympified_expression = ex
            self._variables = get_variables(self._sympified_expression)
        elif isinstance(ex, ExpressionScalar):
            self._original_expression = ex._original_expression
            self._sympified_expression = ex._sympified_expression
            self._variables = ex._variables
        elif isinstance(ex, (int, float)):
            self._original_expression = ex
            self._sympified_expression = sympify(ex)
            self._variables = ()
        else:
            self._original_expression = ex
            self._sympified_expression = sympify(ex)
            self._variables = get_variables(self._sympified_expression)

        self._exact_rational_lambdified = None
Esempio n. 2
0
 def evaluate(self, expression: Union[sympy.Expr, np.ndarray], parameters):
     if isinstance(expression, np.ndarray):
         variables = set.union(
             *map(set, map(get_variables, expression.flat)))
     else:
         variables = get_variables(expression)
     return evaluate_lamdified_exact_rational(expression,
                                              variables=list(variables),
                                              parameters=parameters,
                                              lambdified=None)[0]
Esempio n. 3
0
 def test_get_variables_indexed(self):
     expr = a_[i] * IndexedBase(a * b)[j]
     self.assertEqual({'a', 'b', 'i', 'j'}, set(get_variables(expr)))
Esempio n. 4
0
 def test_get_variables(self):
     expr = a * b / 5
     self.assertEqual({'a', 'b'}, set(get_variables(expr)))