def test_kwargs_handling(self): def args_kwargs(a, b, c=None): return 1.0 * a / b * (c or 3) self.assertEqual( specialized_fn(args_kwargs, globals(), locals(), c=4)(1, 2), 1.0 / 2 * 4) self.assertEqual( specialized_fn(args_kwargs, globals(), locals(), 2, c=4)(6), 2.0 / 6 * 4)
def test_args_handling(self): def args_kwargs(a, b, c=None): return 1.0 * a / b * (c or 3) self.assertEqual( specialized_fn(args_kwargs, globals(), locals(), 1)(2), 1.0 / 2 * 3) self.assertEqual( specialized_fn(args_kwargs, globals(), locals(), 1, 2, 1)(), 1.0 / 2 * 1)
def _test_partial_fn(self, base_fn, globals_, locals_, get_partial_kwargs, get_kwargs): ''' Check that partial evaluation of base_fn with partial_args gives the same result on args_list as functools.partial(base_fn, partial_args) ''' fn = specialized_fn(base_fn, globals_, locals_, **get_partial_kwargs()) partial_fn = functools.partial(base_fn, **get_partial_kwargs()) # call two times to check for possible side-effects self.assertFuncEqualOn(partial_fn, fn, **get_kwargs()) # first self.assertFuncEqualOn(partial_fn, fn, **get_kwargs()) # second