Source code for qolumbina.programs.parity.parity_qubit

# This code is developed through cross-language conversion from 
# https://github.com/MgcosA/Code_of_Testing_Oracle_Quantum_Program_Article/blob/master/qolumbina/programs/Parity.qs
# 
# In detail, the raw program is written in Q#, and we rewrite it in Qiskit.

from qiskit import QuantumCircuit, QuantumRegister


# ---------- benchmark registration ----------
from ..benchmark_registry import register_benchmark
from pathlib import Path
@register_benchmark(
    Path(__file__).stem,
    family=Path(__file__).resolve().parent.name,
    description="Parity oracle (qubit version)",
    class_name="ParityQubit",
    source={
        "repo": "https://github.com/MgcosA/Code_of_Testing_Oracle_Quantum_Program_Article/blob/master/",
        "file": "qolumbina/programs/Parity.qs",
        "sdk": "Q#",
        "available_doc": True
    },
    testability_refactoring=[
        "Cross-language translation", 
        "Structure reorganization"
    ] 
)
def create_parity_qubit(input_qubits):
    return ParityQubit(input_qubits=input_qubits)   

[docs] class ParityQubit(QuantumCircuit): r""" Qubit version of the parity oracle. """ def __init__(self, input_qubits: int, name: str | None = None): r""" Args: input_qubits: Number of input qubits :math:`n`. name: Optional name of the circuit. """ # ---------- registers ---------- q_input = QuantumRegister(input_qubits, "q") q_target = QuantumRegister(1, "target") super().__init__(q_input, q_target, name=name or "ParityQubit") self._input_qubits = input_qubits self._build() def _build(self): qs = self.qregs[0] qtarget = self.qregs[1][0] for q in qs: # Correpsond to CNOT(qs[i], qtarget) self.cx(q, qtarget)