def test_symbolic_evaluation(self): e = ExpressionVector([['a * b + c', 'a + d'], ['a', 3]]) params = {'a': 2, 'b': 1.5, 'c': -7, 'd': 9} expected = ExpressionVector([[2 * 1.5 - 7, 2 + 9], [2, 3]]) evaluated = e.evaluate_symbolic(params) np.testing.assert_equal(evaluated.underlying_expression, expected.underlying_expression)
def test_evaluate_numeric_2d(self) -> None: e = ExpressionVector([['a * b + c', 'a + d'], ['a', 3]]) params = {'a': 2, 'b': 1.5, 'c': -7, 'd': 9} np.testing.assert_equal(np.array([[2 * 1.5 - 7, 2 + 9], [2, 3]]), e.evaluate_numeric(**params)) with self.assertRaises(NonNumericEvaluation): params['a'] = sympify('h') e.evaluate_numeric(**params)
def test_partial_evaluation(self): e = ExpressionVector(['a * b + c', 'a + d']) params = {'a': 2, 'b': 1.5, 'c': -7} expected = ExpressionVector([2 * 1.5 - 7, '2 + d']) evaluated = e.evaluate_symbolic(params) np.testing.assert_equal(evaluated.underlying_expression, expected.underlying_expression)
def test_make(self): self.assertTrue(Expression.make('a') == 'a') self.assertTrue(Expression.make('a + b') == 'a + b') self.assertTrue(Expression.make(9) == 9) self.assertIsInstance(Expression.make([1, 'a']), ExpressionVector) self.assertIsInstance(ExpressionScalar.make('a'), ExpressionScalar) self.assertIsInstance(ExpressionVector.make(['a']), ExpressionVector)
def test_partial_evaluation_vectorized(self) -> None: e = ExpressionScalar('a[i] * c') params = {'c': np.array([[1, 2], [3, 4]])} evaluated = e.evaluate_symbolic(params) expected = ExpressionVector([['a[i] * 1', 'a[i] * 2'], ['a[i] * 3', 'a[i] * 4']]) np.testing.assert_equal(evaluated.underlying_expression, expected.underlying_expression)
def test_eq(self): e1 = ExpressionVector([1, 2]) e2 = ExpressionVector(['1', '2']) e3 = ExpressionVector(['1', 'a']) e4 = ExpressionVector([1, 'a']) e5 = ExpressionVector([1, 'a', 3]) e6 = ExpressionVector([1, 1, '1']) e7 = ExpressionVector(['a']) self.assertEqual(e1, e2) self.assertEqual(e3, e4) self.assertNotEqual(e4, e5) self.assertEqual(e1, [1, 2]) self.assertNotEqual(e6, 1) self.assertEqual(e7, ExpressionScalar('a'))
def test_numeric_expression(self): numbers = np.linspace(1, 2, num=5) e = ExpressionVector(numbers) np.testing.assert_equal(e.underlying_expression, numbers)