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