Skip to content

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)