| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 | from sympy.core.numbers import (I, pi)from sympy.core.symbol import Symbolfrom sympy.functions.elementary.exponential import expfrom sympy.functions.elementary.miscellaneous import sqrtfrom sympy.matrices.dense import Matrixfrom sympy.physics.quantum.qft import QFT, IQFT, RkGatefrom sympy.physics.quantum.gate import (ZGate, SwapGate, HadamardGate, CGate,                                        PhaseGate, TGate)from sympy.physics.quantum.qubit import Qubitfrom sympy.physics.quantum.qapply import qapplyfrom sympy.physics.quantum.represent import representdef test_RkGate():    x = Symbol('x')    assert RkGate(1, x).k == x    assert RkGate(1, x).targets == (1,)    assert RkGate(1, 1) == ZGate(1)    assert RkGate(2, 2) == PhaseGate(2)    assert RkGate(3, 3) == TGate(3)    assert represent(        RkGate(0, x), nqubits=1) == Matrix([[1, 0], [0, exp(2*I*pi/2**x)]])def test_quantum_fourier():    assert QFT(0, 3).decompose() == \        SwapGate(0, 2)*HadamardGate(0)*CGate((0,), PhaseGate(1)) * \        HadamardGate(1)*CGate((0,), TGate(2))*CGate((1,), PhaseGate(2)) * \        HadamardGate(2)    assert IQFT(0, 3).decompose() == \        HadamardGate(2)*CGate((1,), RkGate(2, -2))*CGate((0,), RkGate(2, -3)) * \        HadamardGate(1)*CGate((0,), RkGate(1, -2))*HadamardGate(0)*SwapGate(0, 2)    assert represent(QFT(0, 3), nqubits=3) == \        Matrix([[exp(2*pi*I/8)**(i*j % 8)/sqrt(8) for i in range(8)] for j in range(8)])    assert QFT(0, 4).decompose()  # non-trivial decomposition    assert qapply(QFT(0, 3).decompose()*Qubit(0, 0, 0)).expand() == qapply(        HadamardGate(0)*HadamardGate(1)*HadamardGate(2)*Qubit(0, 0, 0)    ).expand()def test_qft_represent():    c = QFT(0, 3)    a = represent(c, nqubits=3)    b = represent(c.decompose(), nqubits=3)    assert a.evalf(n=10) == b.evalf(n=10)
 |