def test_LLbar(self): x, y = sp.symbols('x y') Identity = lambda k: k A = lambda k: k.diff(x) A_bar = lambda k: k.diff(y) sigma = 0.1 k = sp.exp(-(x - y)**2 / (2 * sigma**2)) ops = [A, Identity] ops_bar = [A_bar, Identity] oc = bpdes.operator_compilation.compile_sympy(ops, ops_bar, k, [[x], [y]], mode='cython') pts = np.linspace(0, 1, 11) interior = pts[1:-1, None] bdy = pts[[0, -1], None] print(interior.shape, bdy.shape) obs = [(interior, None), (bdy, None)] llbar = bpdes.collocation.calc_LLbar(ops, ops_bar, obs, oc) top_left = llbar[:len(interior), :len(interior)] compare_top_left = pairwise.apply(k_x_x_prime, interior, interior, np.array([sigma])) true_np.testing.assert_almost_equal(top_left, compare_top_left) bottom_right = llbar[len(interior):, len(interior):] compare_bottom_right = pairwise.apply(k_autograd, bdy, bdy, np.array([sigma])) true_np.testing.assert_almost_equal(bottom_right, compare_bottom_right) top_right = llbar[:len(interior), len(interior):] compare_top_right = pairwise.apply(k_x, interior, bdy, np.array([sigma])) true_np.testing.assert_almost_equal(top_right, compare_top_right) bottom_left = llbar[len(interior):, :len(interior)] compare_bottom_left = pairwise.apply(k_x_prime, bdy, interior, np.array([sigma])) true_np.testing.assert_almost_equal(bottom_left, compare_bottom_left)
def test_pairwise_2d(self): def __fun(a, b): assert a.shape == b.shape == (2,) return np.sum(a*b) A = np.array([[0., 1.], [1., 2.]]) B = np.array([[1., 0.], [1., 2.]]) res = pairwise.apply(__fun, A, B) expected = np.array([[0., 2.], [1., 5.]]) np.testing.assert_array_equal(res, expected)
def test_pairwise_1d(self): def __fun(a, b): assert a.shape == b.shape == (1,) return a * b A = np.array([[0., 1.]]).T B = np.array([[-1., 1.]]).T res = pairwise.apply(__fun, A, B) expected = np.array([[0, 0], [-1, 1]]) np.testing.assert_array_equal(res, expected)
def test_timing(self): def __fun(a, b): return np.sum(a*b) A,B = np.mgrid[0:1:100j, 0:1:100j] cython_timing = timeit(lambda: pairwise.apply(__fun, A, B), number=10) print cython_timing python_timing = timeit(lambda: manual_pairwise(__fun, A, B), number=10) print python_timing self.assertLess(cython_timing, python_timing)
def test_LLbar(self): x, y = sp.symbols("x y") Identity = lambda k: k A = lambda k: k.diff(x) A_bar = lambda k: k.diff(y) sigma = 0.1 k = sp.exp(-(x - y) ** 2 / (2 * sigma ** 2)) ops = [A, Identity] ops_bar = [A_bar, Identity] oc = bpdes.operator_compilation.compile_sympy(ops, ops_bar, k, [[x], [y]], mode="cython") pts = np.linspace(0, 1, 11) interior = pts[1:-1, None] bdy = pts[[0, -1], None] print(interior.shape, bdy.shape) obs = [(interior, None), (bdy, None)] llbar = bpdes.collocation.calc_LLbar(ops, ops_bar, obs, oc) top_left = llbar[: len(interior), : len(interior)] compare_top_left = pairwise.apply(k_x_x_prime, interior, interior, np.array([sigma])) true_np.testing.assert_almost_equal(top_left, compare_top_left) bottom_right = llbar[len(interior) :, len(interior) :] compare_bottom_right = pairwise.apply(k_autograd, bdy, bdy, np.array([sigma])) true_np.testing.assert_almost_equal(bottom_right, compare_bottom_right) top_right = llbar[: len(interior), len(interior) :] compare_top_right = pairwise.apply(k_x, interior, bdy, np.array([sigma])) true_np.testing.assert_almost_equal(top_right, compare_top_right) bottom_left = llbar[len(interior) :, : len(interior)] compare_bottom_left = pairwise.apply(k_x_prime, bdy, interior, np.array([sigma])) true_np.testing.assert_almost_equal(bottom_left, compare_bottom_left)
def __return(x_1, x_2, fun_args=None): return pairwise.apply(function, x_1, x_2)
def __ret_function(a, b, extra=None): return pairwise.apply(sympy_fun, a, b, extra)