def xpxp_to_xxpp(S): """Permutes the entries of the input from xpxp ordering to xxpp ordering. Args: S (array): input even dimensional square matrix or vector Returns: (array): permuted matrix or vector """ shape = S.shape n = shape[0] if n % 2 != 0: raise ValueError("The input array is not even-dimensional") n = n // 2 ind = np.arange(2 * n).reshape(-1, 2).T.flatten() if len(shape) == 2: if shape[0] != shape[1]: raise ValueError("The input matrix is not square") return S[:, ind][ind] return S[ind]