qqz.qft

 1"""
 2Uses https://qiskit.org/textbook/ja/ch-algorithms/quantum-counting.html#2.3-%E9%80%86%E9%87%8F%E5%AD%90%E3%83%95%E3%83%BC%E3%83%AA%E3%82%A8%E5%A4%89%E6%8F%9B
 3"""
 4
 5import numpy as np
 6from qiskit import QuantumCircuit
 7from qiskit.circuit import Gate
 8
 9def qft(n: int) -> Gate:
10    """Creates an n-qubit QFT circuit"""
11    circuit = QuantumCircuit(n)
12    def swap_registers(circuit, n):
13        for qubit in range(n//2):
14            circuit.swap(qubit, n-qubit-1)
15        return circuit
16    def qft_rotations(circuit, n):
17        """Performs qft on the first n qubits in circuit (without swaps)"""
18        if n == 0:
19            return circuit
20        n -= 1
21        circuit.h(n)
22        for qubit in range(n):
23            circuit.cp(np.pi/2**(n-qubit), qubit, n)
24        qft_rotations(circuit, n)
25    
26    qft_rotations(circuit, n)
27    swap_registers(circuit, n)
28    return circuit.to_gate()
def qft(n: int) -> qiskit.circuit.gate.Gate:
10def qft(n: int) -> Gate:
11    """Creates an n-qubit QFT circuit"""
12    circuit = QuantumCircuit(n)
13    def swap_registers(circuit, n):
14        for qubit in range(n//2):
15            circuit.swap(qubit, n-qubit-1)
16        return circuit
17    def qft_rotations(circuit, n):
18        """Performs qft on the first n qubits in circuit (without swaps)"""
19        if n == 0:
20            return circuit
21        n -= 1
22        circuit.h(n)
23        for qubit in range(n):
24            circuit.cp(np.pi/2**(n-qubit), qubit, n)
25        qft_rotations(circuit, n)
26    
27    qft_rotations(circuit, n)
28    swap_registers(circuit, n)
29    return circuit.to_gate()

Creates an n-qubit QFT circuit