def test_numeric_evaluation(self): symbolic = Broadcast(a, (b, )) arguments = {'a': (1, 2., 3), 'b': 3} expected = np.asarray([1, 2., 3]) result, _ = evaluate_lambdified(symbolic, ['a', 'b'], arguments, None) np.testing.assert_array_equal(expected, result) with self.assertRaises(ValueError): arguments = {'a': (1, 2., 3), 'b': 4} evaluate_lambdified(symbolic, ['a', 'b'], arguments, None) arguments = {'a': 1, 'b': 3} expected = np.asarray([1, 1, 1]) result, _ = evaluate_lambdified(symbolic, ['a', 'b'], arguments, None) np.testing.assert_array_equal(expected, result)
def evaluate_numeric(self, **kwargs) -> Union[Number, numpy.ndarray]: parsed_kwargs = self._parse_evaluate_numeric_arguments(kwargs) result, self._expression_lambda = evaluate_lambdified(self.underlying_expression, self.variables, parsed_kwargs, lambdified=self._expression_lambda) return self._parse_evaluate_numeric_result(result, kwargs)
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_lambdified(expression, variables=list(variables), parameters=parameters, lambdified=None)[0]
def evaluate_numeric(self, **kwargs) -> Union[numpy.ndarray, Number]: parsed_kwargs = self._parse_evaluate_numeric_arguments(kwargs) result, self._expression_lambda = evaluate_lambdified(self.underlying_expression, self.variables, parsed_kwargs, lambdified=self._expression_lambda) if isinstance(result, (list, tuple)): result = numpy.array(result) return self._parse_evaluate_numeric_result(numpy.array(result), kwargs)
def test_numeric_evaluation(self): with self.assertWarns(UnsupportedBroadcastArgumentWarning): # use c (and not b as above) # here because sympy caches function call results and we want the warning everytime symbolic = Broadcast(a, (c, )) arguments = {'a': (1, 2., 3), 'c': 3} expected = np.asarray([1, 2., 3]) result, _ = evaluate_lambdified(symbolic, ['a', 'c'], arguments, None) np.testing.assert_array_equal(expected, result) with self.assertRaises(ValueError): arguments = {'a': (1, 2., 3), 'c': 4} evaluate_lambdified(symbolic, ['a', 'c'], arguments, None) arguments = {'a': 1, 'c': 3} expected = np.asarray([1, 1, 1]) result, _ = evaluate_lambdified(symbolic, ['a', 'c'], arguments, None) np.testing.assert_array_equal(expected, result)
def evaluate_in_scope(self, scope: Mapping) -> Union[Number, numpy.ndarray]: """Evaluate the expression by taking the variables from the given scope (typically of type Scope but it can be any mapping.) Args: scope: Returns: """ parsed_kwargs = self._parse_evaluate_numeric_arguments(scope) result, self._expression_lambda = evaluate_lambdified(self.underlying_expression, self.variables, parsed_kwargs, lambdified=self._expression_lambda) return self._parse_evaluate_numeric_result(result, scope)