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)