def test_UGate_OneQubitGate_combo():
    v, w, f, g = symbols('v w f g')
    uMat1 = ImmutableMatrix([[v, w], [f, g]])
    cMat1 = Matrix([[v, w + 1, 0, 0], [f + 1, g, 0, 0], [0, 0, v, w + 1], [0, 0, f + 1, g]])
    u1 = X(0) + UGate(0, uMat1)
    assert represent(u1, nqubits=2) == cMat1

    uMat2 = ImmutableMatrix([[1/sqrt(2), 1/sqrt(2)], [I/sqrt(2), -I/sqrt(2)]])
    cMat2_1 = Matrix([[Rational(1,2) + I/2, Rational(1, 2) - I/2], [Rational(1, 2) - I/2, Rational(1, 2) + I/2]])
    cMat2_2 = Matrix([[1, 0], [0, I]])
    u2 = UGate(0, uMat2)
    assert represent(H(0)*u2, nqubits=1) == cMat2_1
    assert represent(u2*H(0), nqubits=1) == cMat2_2
def test_UGate():
    a, b, c, d = symbols('a,b,c,d')
    uMat = Matrix([[a, b], [c, d]])

    # Test basic case where gate exists in 1-qubit space
    u1 = UGate((0, ), uMat)
    assert represent(u1, nqubits=1) == uMat
    assert qapply(u1 * Qubit('0')) == a * Qubit('0') + c * Qubit('1')
    assert qapply(u1 * Qubit('1')) == b * Qubit('0') + d * Qubit('1')

    # Test case where gate exists in a larger space
    u2 = UGate((1, ), uMat)
    u2Rep = represent(u2, nqubits=2)
    for i in range(4):
        assert u2Rep*qubit_to_matrix(IntQubit(i, 2)) == \
            qubit_to_matrix(qapply(u2*IntQubit(i, 2)))
Esempio n. 3
0
def test_gate_failing():
    #FIXME: ajgpitch 2019-11-22
    # I don't really understand the point of this test.
    # I removed the XFAIL, as results were not as expected.
    a, b, c, d = symbols('a,b,c,d')
    uMat = Matrix([[a, b], [c, d]])
    g = UGate((0, ), uMat)
    assert str(g) != 'U(0)'
def test_UGate_CGate_combo():
    a, b, c, d = symbols('a,b,c,d')
    uMat = Matrix([[a, b], [c, d]])
    cMat = Matrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, a, b], [0, 0, c, d]])

    # Test basic case where gate exists in 1-qubit space.
    u1 = UGate((0, ), uMat)
    cu1 = CGate(1, u1)
    assert represent(cu1, nqubits=2) == cMat
    assert qapply(cu1 * Qubit('10')) == a * Qubit('10') + c * Qubit('11')
    assert qapply(cu1 * Qubit('11')) == b * Qubit('10') + d * Qubit('11')
    assert qapply(cu1 * Qubit('01')) == Qubit('01')
    assert qapply(cu1 * Qubit('00')) == Qubit('00')

    # Test case where gate exists in a larger space.
    u2 = UGate((1, ), uMat)
    u2Rep = represent(u2, nqubits=2)
    for i in range(4):
        assert u2Rep*qubit_to_matrix(IntQubit(i, 2)) == \
            qubit_to_matrix(qapply(u2*IntQubit(i, 2)))
Esempio n. 5
0
def test_sympy__physics__quantum__gate__UGate():
    from sympy.physics.quantum.gate import UGate
    assert _test_args(UGate())
Esempio n. 6
0
def test_gate():
    a, b, c, d = symbols('a,b,c,d')
    uMat = Matrix([[a, b], [c, d]])
    q = Qubit(1, 0, 1, 0, 1)
    g1 = IdentityGate(2)
    g2 = CGate((3, 0), XGate(1))
    g3 = CNotGate(1, 0)
    g4 = UGate((0, ), uMat)
    assert str(g1) == '1(2)'
    assert pretty(g1) == '1 \n 2'
    assert upretty(g1) == u'1 \n 2'
    assert latex(g1) == r'1_{2}'
    sT(g1, "IdentityGate(Integer(2))")
    assert str(g1 * q) == '1(2)*|10101>'
    ascii_str = \
"""\
1 *|10101>\n\
 2        \
"""
    ucode_str = \
u"""\
1 ⋅❘10101⟩\n\
 2        \
"""
    assert pretty(g1 * q) == ascii_str
    assert upretty(g1 * q) == ucode_str
    assert latex(g1 * q) == r'1_{2} {\left|10101\right\rangle }'
    sT(
        g1 * q,
        "Mul(IdentityGate(Integer(2)), Qubit(Integer(1),Integer(0),Integer(1),Integer(0),Integer(1)))"
    )
    assert str(g2) == 'C((3,0),X(1))'
    ascii_str = \
"""\
C   /X \\\n\
 3,0\\ 1/\
"""
    ucode_str = \
u"""\
C   ⎛X ⎞\n\
 3,0⎝ 1⎠\
"""
    assert pretty(g2) == ascii_str
    assert upretty(g2) == ucode_str
    assert latex(g2) == r'C_{3,0}{\left(X_{1}\right)}'
    sT(g2, "CGate(Tuple(Integer(3), Integer(0)),XGate(Integer(1)))")
    assert str(g3) == 'CNOT(1,0)'
    ascii_str = \
"""\
CNOT   \n\
    1,0\
"""
    ucode_str = \
u"""\
CNOT   \n\
    1,0\
"""
    assert pretty(g3) == ascii_str
    assert upretty(g3) == ucode_str
    assert latex(g3) == r'CNOT_{1,0}'
    sT(g3, "CNotGate(Integer(1),Integer(0))")
    # str(g4) Fails
    #assert str(g4) == ''
    ascii_str = \
"""\
U \n\
 0\
"""
    ucode_str = \
u"""\
U \n\
 0\
"""
    assert pretty(g4) == ascii_str
    assert upretty(g4) == ucode_str
    assert latex(g4) == r'U_{0}'
    sT(
        g4,
        "UGate(Tuple(Integer(0)),MutableDenseMatrix([[Symbol('a'), Symbol('b')], [Symbol('c'), Symbol('d')]]))"
    )
Esempio n. 7
0
def test_gate_failing():
    a, b, c, d = symbols('a,b,c,d')
    uMat = Matrix([[a, b], [c, d]])
    g = UGate((0, ), uMat)
    assert str(g) == 'U(0)'
Esempio n. 8
0
def test_gate():
    a, b, c, d = symbols("a,b,c,d")
    uMat = Matrix([[a, b], [c, d]])
    q = Qubit(1, 0, 1, 0, 1)
    g1 = IdentityGate(2)
    g2 = CGate((3, 0), XGate(1))
    g3 = CNotGate(1, 0)
    g4 = UGate((0, ), uMat)
    assert str(g1) == "1(2)"
    assert pretty(g1) == "1 \n 2"
    assert upretty(g1) == u"1 \n 2"
    assert latex(g1) == r"1_{2}"
    sT(g1, "IdentityGate(Integer(2))")
    assert str(g1 * q) == "1(2)*|10101>"
    ascii_str = """\
1 *|10101>\n\
 2        \
"""
    ucode_str = u("""\
1 ⋅❘10101⟩\n\
 2        \
""")
    assert pretty(g1 * q) == ascii_str
    assert upretty(g1 * q) == ucode_str
    assert latex(g1 * q) == r"1_{2} {\left|10101\right\rangle }"
    sT(
        g1 * q,
        "Mul(IdentityGate(Integer(2)), Qubit(Integer(1),Integer(0),Integer(1),Integer(0),Integer(1)))",
    )
    assert str(g2) == "C((3,0),X(1))"
    ascii_str = """\
C   /X \\\n\
 3,0\\ 1/\
"""
    ucode_str = u("""\
C   ⎛X ⎞\n\
 3,0⎝ 1⎠\
""")
    assert pretty(g2) == ascii_str
    assert upretty(g2) == ucode_str
    assert latex(g2) == r"C_{3,0}{\left(X_{1}\right)}"
    sT(g2, "CGate(Tuple(Integer(3), Integer(0)),XGate(Integer(1)))")
    assert str(g3) == "CNOT(1,0)"
    ascii_str = """\
CNOT   \n\
    1,0\
"""
    ucode_str = u("""\
CNOT   \n\
    1,0\
""")
    assert pretty(g3) == ascii_str
    assert upretty(g3) == ucode_str
    assert latex(g3) == r"CNOT_{1,0}"
    sT(g3, "CNotGate(Integer(1),Integer(0))")
    ascii_str = """\
U \n\
 0\
"""
    ucode_str = u("""\
U \n\
 0\
""")
    assert (str(g4) == """\
U((0,),Matrix([\n\
[a, b],\n\
[c, d]]))\
""")
    assert pretty(g4) == ascii_str
    assert upretty(g4) == ucode_str
    assert latex(g4) == r"U_{0}"
    sT(
        g4,
        "UGate(Tuple(Integer(0)),MutableDenseMatrix([[Symbol('a'), Symbol('b')], [Symbol('c'), Symbol('d')]]))",
    )