def test_eval(self): self.assertEqual( Symbol('some_symbol')._eval({'some_symbol': 'value'}), 'value') self.assertEqual( Symbol('some_symbol')._eval( {'some_symbol': 'value', 'other_symbol': 'irrelevant'}), 'value') with self.assertRaises(KeyError): Symbol('some_symbol')._eval({'other_symbol': 'irrelevant'}),
def test_pythagoras(self): from math import sqrt X = Symbol('X') Y = Symbol('Y') expr = sym_call(sqrt, X ** 2 + Y ** 2) func = to_callable(expr) self.assertEqual(func(X=3, Y=4), 5)
def test_ops(self): expr = Symbol('some_symbol') + 1 self.assertEqual( repr(expr), "getattr(Symbol('some_symbol'), '__add__')(*(1,), **{})") expr = 1 + Symbol('some_symbol') self.assertEqual( repr(expr), "getattr(Symbol('some_symbol'), '__radd__')(*(1,), **{})") expr = Symbol('some_symbol')['key'] self.assertEqual( repr(expr), "getattr(Symbol('some_symbol'), '__getitem__')(*('key',), **{})")
def test_sym_call(self): expr = sym_call( 'func', Symbol('some_symbol'), 'arg1', 'arg2', kwarg_name='kwarg value') self.assertEqual( repr(expr), "'func'(*(Symbol('some_symbol'), 'arg1', 'arg2'), " + "**{'kwarg_name': 'kwarg value'})")
def test_eval_with_symbolic_object(self): some_obj = mock.Mock() del some_obj._eval some_obj.some_attr = 'attribute value' expr = GetAttr(Symbol('some_symbol'), 'some_attr') self.assertEqual( expr._eval({'some_symbol': some_obj}), 'attribute value')
def test_eval_if_symbolic(self): self.assertEqual( eval_if_symbolic( 'nonsymbolic', {'some_symbol': 'symbol_value'}), 'nonsymbolic') self.assertEqual( eval_if_symbolic( Symbol('some_symbol'), {'some_symbol': 'symbol_value'}), 'symbol_value')
def test_eval_with_symbol_kwarg(self): func = mock.Mock(return_value='return value') del func._eval # So it doesn't pretend to be symbolic expr = Call( func, ('arg1', 'arg2'), {'kwarg_name': Symbol('some_symbol')}) result = expr._eval({'some_symbol': 'kwarg value'}) func.assert_called_once_with('arg1', 'arg2', kwarg_name='kwarg value') self.assertEqual(result, 'return value')
def test_repr(self): self.assertEqual(repr(Symbol('some_symbol')), "Symbol('some_symbol')")
def test_call(self): expr = Symbol('some_symbol')('arg1', 'arg2', kwarg_name='kwarg value') self.assertEqual( repr(expr), "Symbol('some_symbol')(*('arg1', 'arg2'), " + "**{'kwarg_name': 'kwarg value'})")
def test_getattr(self): expr = Symbol('some_symbol').some_attr self.assertEqual( repr(expr), "getattr(Symbol('some_symbol'), 'some_attr')")