def qr(self, tensor: Tensor, pivot_axis: int = -1, non_negative_diagonal: bool = False) -> Tuple[Tensor, Tensor]: if non_negative_diagonal: errstr = "Can't specify non_negative_diagonal with BlockSparse." raise NotImplementedError(errstr) return decompositions.qr(self.bs, tensor, pivot_axis)
def test_qr(dtype, R, R1): np.random.seed(10) D = 30 charges = [ U1Charge.random(dimension=D, minval=-5, maxval=5) for n in range(R) ] flows = [True] * R A = BlockSparseTensor.random( [Index(charges[n], flows[n]) for n in range(R)], dtype=dtype) q, r = decompositions.qr(bs, A, R1) res = bs.tensordot(q, r, 1) q_dense, r_dense = np_decompositions.qr(np, A.todense(), R1, False) res2 = np.tensordot(q_dense, r_dense, 1) np.testing.assert_almost_equal(res.todense(), res2)