def test_gesvdj_no_uv(self): a = cupy.array(self.a, order=self.order) s = cusolver.gesvdj(a, full_matrices=self.full_matrices, compute_uv=False, overwrite_a=self.overwrite_a) expect = numpy.linalg.svd(self.a, full_matrices=self.full_matrices, compute_uv=False) if self.dtype in (numpy.float32, numpy.complex64): decimal = 5 else: decimal = 10 testing.assert_array_almost_equal(s, expect, decimal=decimal)
def test_gesvdj(self): a = cupy.array(self.a, order=self.order) u, s, v = cusolver.gesvdj(a, full_matrices=self.full_matrices, overwrite_a=self.overwrite_a) # sigma = diag(s) shape = self.shape mn = min(shape[-2:]) if self.full_matrices: sigma_shape = shape else: sigma_shape = shape[:-2] + (mn, mn) sigma = cupy.zeros(sigma_shape, self.dtype) ix = numpy.arange(mn) sigma[..., ix, ix] = s vh = v.swapaxes(-2, -1).conjugate() aa = cupy.matmul(cupy.matmul(u, sigma), vh) if self.dtype in (numpy.float32, numpy.complex64): decimal = 5 else: decimal = 10 testing.assert_array_almost_equal(aa, self.a, decimal=decimal)