def test_matrix_inner(fn): [xarr, yarr], [x, y] = noise_elements(fn, 2) sparse_mat = _sparse_matrix(fn) sparse_mat_as_dense = np.asarray(sparse_mat.todense()) dense_mat = _dense_matrix(fn) true_inner_sparse = np.vdot(yarr, np.dot(sparse_mat_as_dense, xarr)) true_inner_dense = np.vdot(yarr, np.dot(dense_mat, xarr)) w_sparse = NumpyFnMatrixWeighting(sparse_mat) w_dense = NumpyFnMatrixWeighting(dense_mat) assert almost_equal(w_sparse.inner(x, y), true_inner_sparse) assert almost_equal(w_dense.inner(x, y), true_inner_dense) # With free functions w_sparse_inner = npy_weighted_inner(sparse_mat) w_dense_inner = npy_weighted_inner(dense_mat) assert almost_equal(w_sparse_inner(x, y), true_inner_sparse) assert almost_equal(w_dense_inner(x, y), true_inner_dense) # Exponent != 2 -> no inner w_dense = NumpyFnMatrixWeighting(dense_mat, exponent=1) with pytest.raises(NotImplementedError): w_dense.inner(x, y)
def test_array_inner(fn): [xarr, yarr], [x, y] = noise_elements(fn, 2) weight_arr = _pos_array(fn) weighting_arr = NumpyFnArrayWeighting(weight_arr) true_inner = np.vdot(yarr, xarr * weight_arr) assert almost_equal(weighting_arr.inner(x, y), true_inner) # With free function inner_vec = npy_weighted_inner(weight_arr) assert almost_equal(inner_vec(x, y), true_inner) # Exponent != 2 -> no inner product, should raise with pytest.raises(NotImplementedError): NumpyFnArrayWeighting(weight_arr, exponent=1.0).inner(x, y)