def test_pointwise_inner_adjoint(): # 1d fspace = odl.uniform_discr([0, 0], [1, 1], (2, 2), dtype=complex) vfspace = ProductSpace(fspace, 1) array = np.array([[[-1, -3], [2, 0]]]) pwinner = PointwiseInner(vfspace, vecfield=array) testarr = np.array([[1 + 1j, 2], [3, 4 - 2j]]) true_inner_adj = testarr[None, :, :] * array testfunc = fspace.element(testarr) testfunc_pwinner_adj = pwinner.adjoint(testfunc) assert all_almost_equal(testfunc_pwinner_adj, true_inner_adj.reshape([1, -1])) out = vfspace.element() pwinner.adjoint(testfunc, out=out) assert all_almost_equal(out, true_inner_adj.reshape([1, -1])) # 3d fspace = odl.uniform_discr([0, 0], [1, 1], (2, 2), dtype=complex) vfspace = ProductSpace(fspace, 3) array = np.array([[[-1 - 1j, -3], [2, 2j]], [[-1j, 0], [0, 1]], [[-1, 1 + 2j], [1, 1]]]) pwinner = PointwiseInner(vfspace, vecfield=array) testarr = np.array([[1 + 1j, 2], [3, 4 - 2j]]) true_inner_adj = testarr[None, :, :] * array testfunc = fspace.element(testarr) testfunc_pwinner_adj = pwinner.adjoint(testfunc) assert all_almost_equal(testfunc_pwinner_adj, true_inner_adj.reshape([3, -1])) out = vfspace.element() pwinner.adjoint(testfunc, out=out) assert all_almost_equal(out, true_inner_adj.reshape([3, -1]))
def test_pointwise_inner_adjoint_weighted(): # Weighted product space only fspace = odl.uniform_discr([0, 0], [1, 1], (2, 2), dtype=complex) vfspace = ProductSpace(fspace, 3, weight=[2, 4, 6]) array = np.array([[[-1 - 1j, -3], [2, 2j]], [[-1j, 0], [0, 1]], [[-1, 1 + 2j], [1, 1]]]) pwinner = PointwiseInner(vfspace, vecfield=array) testarr = np.array([[1 + 1j, 2], [3, 4 - 2j]]) true_inner_adj = testarr[None, :, :] * array # same as unweighted case testfunc = fspace.element(testarr) testfunc_pwinner_adj = pwinner.adjoint(testfunc) assert all_almost_equal(testfunc_pwinner_adj, true_inner_adj.reshape([3, -1])) out = vfspace.element() pwinner.adjoint(testfunc, out=out) assert all_almost_equal(out, true_inner_adj.reshape([3, -1])) # Using different weighting in the inner product pwinner = PointwiseInner(vfspace, vecfield=array, weight=[4, 8, 12]) testarr = np.array([[1 + 1j, 2], [3, 4 - 2j]]) true_inner_adj = 2 * testarr[None, :, :] * array # w / v = (2, 2, 2) testfunc = fspace.element(testarr) testfunc_pwinner_adj = pwinner.adjoint(testfunc) assert all_almost_equal(testfunc_pwinner_adj, true_inner_adj.reshape([3, -1])) out = vfspace.element() pwinner.adjoint(testfunc, out=out) assert all_almost_equal(out, true_inner_adj.reshape([3, -1]))