aboutsummaryrefslogtreecommitdiff
path: root/python_src/xpxp_to_xxpp.py
blob: 01d0bf2ff0f40a06e1460317532e6f9924017124 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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]