QFT¶
The following snippet defines a QFT model:
from sympy import pi
from classiq import (
allocate,
QFunc,
QParam,
QVar,
OutputQVar,
H,
CRZ,
SWAP,
repeat,
create_model,
)
@QFunc
def qft(num_qubits: QParam[int], qbv: QVar["num_qubits"]) -> None:
def outer_loop_body(i: QParam[int], qbv: QVar["num_qubits"]):
H(qbv[i])
def inner_loop_body(j: QParam[int], qbv: QVar["num_qubits"]):
CRZ(pi / 2 ** (j + 1), qbv[i + j + 1], qbv[i])
repeat(
count=num_qubits - i - 1,
port_size=num_qubits,
iteration=inner_loop_body,
qbv=qbv,
)
repeat(count=num_qubits, port_size=num_qubits, iteration=outer_loop_body, qbv=qbv)
repeat(
count=num_qubits // 2,
port_size=num_qubits,
iteration=lambda index, qbv: SWAP(qbv[index], qbv[num_qubits - 1 - index]),
qbv=qbv,
)
@QFunc
def main(result: OutputQVar[6]) -> None:
allocate(6, result)
qft(num_qubits=6, qbv=result)
model = create_model(main)