Source code for qnetvo.postprocessing
from pennylane import numpy as np
[docs]
def parity_vector(n_qubits):
"""Constructs a vector with elements :math:`\\pm 1` describing the parity of
an :math:`n`-bit string measured from :math:`n`-qubits.
The (+) and (-) elements indicate even and odd parity respectively and are placed in
the index corresponding to the bit string's value.
:param n_qubits: The number of qubits for which to consider the parity vector.
:type n_qubits: int
:raises ValueError: If ``n_qubits < 1``.
"""
if n_qubits < 1:
raise ValueError("Input `n_qubits` must satisfy `n_qubits >= 1`.")
return (
np.array([1, -1], dtype=int)
if n_qubits == 1
else np.kron([1, -1], parity_vector(n_qubits - 1))
)
[docs]
def even_parity_ids(n_qubits):
"""Constructs the list ids corresponding to even parity bit strings with respect
to the vector returned by ``parity_vector``.
:param n_qubits: The number of qubits for which to consider the parity vector.
:type n_qubits: int
"""
p_vec = parity_vector(n_qubits)
return np.argwhere(p_vec == 1).flatten()