Exemple #1
0
def test_QubitBra():
    assert Qubit(0).dual_class() == QubitBra
    assert QubitBra(0).dual_class() == Qubit
    assert represent(Qubit(1,1,0), nqubits=3).H ==\
           represent(QubitBra(1,1,0), nqubits=3)
    assert Qubit(0,1)._eval_innerproduct_QubitBra(QubitBra(1,0)) == Integer(0)
    assert Qubit(0,1)._eval_innerproduct_QubitBra(QubitBra(0,1)) == Integer(1)
Exemple #2
0
def test_measure_all():
    assert measure_all(Qubit('11')) == [(Qubit('11'), 1)]
    state = Qubit('11') + Qubit('10')
    assert sorted(measure_all(state)) == sorted([(Qubit('11'), Rational(1,2)),\
           (Qubit('10'), Rational(1,2))])
    state2 = Qubit('11') / sqrt(5) + 2 * Qubit('00') / sqrt(5)
    assert sorted(measure_all(state2)) == sorted([(Qubit('11'), Rational(1,5)), \
           (Qubit('00'), Rational(4,5))])
Exemple #3
0
def test_superposition_of_states():
    assert qapply(CNOT(0,1)*HadamardGate(0)*(1/sqrt(2)*Qubit('01') + 1/sqrt(2)*Qubit('10'))).expand() == (Qubit('01')/2 + Qubit('00')/2 - Qubit('11')/2 +\
     Qubit('10')/2)

    assert matrix_to_qubit(represent(CNOT(0,1)*HadamardGate(0)\
    *(1/sqrt(2)*Qubit('01') + 1/sqrt(2)*Qubit('10')), nqubits=2))\
     == (Qubit('01')/2 + Qubit('00')/2 - Qubit('11')/2 + Qubit('10')/2)
Exemple #4
0
def test_Qubit():
    array = [0, 0, 1, 1, 0]
    qb = Qubit('00110')
    assert qb.flip(0) == Qubit('00111')
    assert qb.flip(1) == Qubit('00100')
    assert qb.flip(4) == Qubit('10110')
    assert qb.dimension == 5
    for i in range(5):
        assert qb[i] == array[4 - i]
    assert len(qb) == 5
    qb = Qubit('110')
Exemple #5
0
def test_Qubit():
    array = [0, 0, 1, 1, 0]
    qb = Qubit('00110')
    assert qb.flip(0) == Qubit('00111')
    assert qb.flip(1) == Qubit('00100')
    assert qb.flip(4) == Qubit('10110')
    assert qb.dimension == 5
    for i in range(5):
        assert qb[i] == array[4 - i]
    assert len(qb) == 5
    qb = Qubit('110')
Exemple #6
0
def test_Qubit():
    array = [0, 0, 1, 1, 0]
    qb = Qubit("00110")
    assert qb.flip(0) == Qubit("00111")
    assert qb.flip(1) == Qubit("00100")
    assert qb.flip(4) == Qubit("10110")
    assert qb.qubit_values == (0, 0, 1, 1, 0)
    assert qb.dimension == 5
    for i in range(5):
        assert qb[i] == array[4 - i]
    assert len(qb) == 5
    qb = Qubit("110")
def test_matrix_to_qubits():
    qb = Qubit(0, 0, 0, 0)
    mat = Matrix([1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
    assert matrix_to_qubit(mat) == qb
    assert qubit_to_matrix(qb) == mat

    state = 2 * sqrt(2) * (Qubit(0, 0, 0) + Qubit(0, 0, 1) + Qubit(0, 1, 0) +
                           Qubit(0, 1, 1) + Qubit(1, 0, 0) + Qubit(1, 0, 1) +
                           Qubit(1, 1, 0) + Qubit(1, 1, 1))
    ones = sqrt(2) * 2 * Matrix([1, 1, 1, 1, 1, 1, 1, 1])
    assert matrix_to_qubit(ones) == state.expand()
    assert qubit_to_matrix(state) == ones
Exemple #8
0
def test_apply_represent_equality():
    gates = [
        HadamardGate(int(3 * random.random())),
        XGate(int(3 * random.random())),
        ZGate(int(3 * random.random())),
        YGate(int(3 * random.random())),
        ZGate(int(3 * random.random())),
        PhaseGate(int(3 * random.random())),
    ]

    circuit = Qubit(
        int(random.random() * 2),
        int(random.random() * 2),
        int(random.random() * 2),
        int(random.random() * 2),
        int(random.random() * 2),
        int(random.random() * 2),
    )
    for i in range(int(random.random() * 6)):
        circuit = gates[int(random.random() * 6)] * circuit

    mat = represent(circuit, nqubits=6)
    states = qapply(circuit)
    state_rep = matrix_to_qubit(mat)
    states = states.expand()
    state_rep = state_rep.expand()
    assert state_rep == states
Exemple #9
0
def test_matrix_to_density():
    mat = Matrix([[0, 0], [0, 1]])
    assert matrix_to_density(mat) == Density([Qubit('1'), 1])

    mat = Matrix([[1, 0], [0, 0]])
    assert matrix_to_density(mat) == Density([Qubit('0'), 1])

    mat = Matrix([[0, 0], [0, 0]])
    assert matrix_to_density(mat) == 0

    mat = Matrix([[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 1, 0], [0, 0, 0, 0]])

    assert matrix_to_density(mat) == Density([Qubit('10'), 1])

    mat = Matrix([[1, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]])

    assert matrix_to_density(mat) == Density([Qubit('00'), 1])
Exemple #10
0
def test_matrix_to_density():
    mat = Matrix([[0, 0], [0, 1]])
    assert matrix_to_density(mat) == Density([Qubit("1"), 1])

    mat = Matrix([[1, 0], [0, 0]])
    assert matrix_to_density(mat) == Density([Qubit("0"), 1])

    mat = Matrix([[0, 0], [0, 0]])
    assert matrix_to_density(mat) == 0

    mat = Matrix([[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 1, 0], [0, 0, 0, 0]])

    assert matrix_to_density(mat) == Density([Qubit("10"), 1])

    mat = Matrix([[1, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]])

    assert matrix_to_density(mat) == Density([Qubit("00"), 1])
def test_IntQubit():
    # issue 9136
    iqb = IntQubit(0, nqubits=1)
    assert qubit_to_matrix(Qubit('0')) == qubit_to_matrix(iqb)

    qb = Qubit('1010')
    assert qubit_to_matrix(IntQubit(qb)) == qubit_to_matrix(qb)

    iqb = IntQubit(1, nqubits=1)
    assert qubit_to_matrix(Qubit('1')) == qubit_to_matrix(iqb)
    assert qubit_to_matrix(IntQubit(1)) == qubit_to_matrix(iqb)

    iqb = IntQubit(7, nqubits=4)
    assert qubit_to_matrix(Qubit('0111')) == qubit_to_matrix(iqb)
    assert qubit_to_matrix(IntQubit(7, 4)) == qubit_to_matrix(iqb)

    iqb = IntQubit(8)
    assert iqb.as_int() == 8
    assert iqb.qubit_values == (1, 0, 0, 0)

    iqb = IntQubit(7, 4)
    assert iqb.qubit_values == (0, 1, 1, 1)
    assert IntQubit(3) == IntQubit(3, 2)

    #test Dual Classes
    iqb = IntQubit(3)
    iqb_bra = IntQubitBra(3)
    assert iqb.dual_class() == IntQubitBra
    assert iqb_bra.dual_class() == IntQubit

    iqb = IntQubit(5)
    iqb_bra = IntQubitBra(5)
    assert iqb._eval_innerproduct_IntQubitBra(iqb_bra) == Integer(1)

    iqb = IntQubit(4)
    iqb_bra = IntQubitBra(5)
    assert iqb._eval_innerproduct_IntQubitBra(iqb_bra) == Integer(0)
    raises(ValueError, lambda: IntQubit(4, 1))

    raises(ValueError, lambda: IntQubit('5'))
    raises(ValueError, lambda: IntQubit(5, '5'))
    raises(ValueError, lambda: IntQubit(5, nqubits='5'))
    raises(TypeError, lambda: IntQubit(5, bad_arg=True))
def test_QubitBra():
    qb = Qubit(0)
    qb_bra = QubitBra(0)
    assert qb.dual_class() == QubitBra
    assert qb_bra.dual_class() == Qubit

    qb = Qubit(1, 1, 0)
    qb_bra = QubitBra(1, 1, 0)
    assert represent(qb, nqubits=3).H == represent(qb_bra, nqubits=3)

    qb = Qubit(0, 1)
    qb_bra = QubitBra(1, 0)
    assert qb._eval_innerproduct_QubitBra(qb_bra) == Integer(0)

    qb_bra = QubitBra(0, 1)
    assert qb._eval_innerproduct_QubitBra(qb_bra) == Integer(1)
Exemple #13
0
def test_measure_normalize():
    a, b = symbols('a b')
    state = a * Qubit('110') + b * Qubit('111')
    assert measure_partial(state, (0,), normalize=False) ==\
     [(a*Qubit('110'), a*a.conjugate()), (b*Qubit('111'),b*b.conjugate())]
    assert measure_all(state, normalize=False) ==\
    [(Qubit('110'), a*a.conjugate()),(Qubit('111'), b*b.conjugate())]
def test_superposition_of_states():
    state = 1 / sqrt(2) * Qubit('01') + 1 / sqrt(2) * Qubit('10')
    state_gate = CNOT(0, 1) * HadamardGate(0) * state
    state_expanded = Qubit('01') / 2 + Qubit('00') / 2 - Qubit(
        '11') / 2 + Qubit('10') / 2
    assert qapply(state_gate).expand() == state_expanded
    assert matrix_to_qubit(represent(state_gate, nqubits=2)) == state_expanded
Exemple #15
0
def test_superposition_of_states():
    state = 1 / sqrt(2) * Qubit("01") + 1 / sqrt(2) * Qubit("10")
    state_gate = CNOT(0, 1) * HadamardGate(0) * state
    state_expanded = (
        Qubit("01") / 2 + Qubit("00") / 2 - Qubit("11") / 2 + Qubit("10") / 2
    )
    assert qapply(state_gate).expand() == state_expanded
    assert matrix_to_qubit(represent(state_gate, nqubits=2)) == state_expanded
Exemple #16
0
def test_measure_normalize():
    a, b = symbols("a b")
    state = a * Qubit("110") + b * Qubit("111")
    assert measure_partial(state, (0,), normalize=False) == [
        (a * Qubit("110"), a * a.conjugate()),
        (b * Qubit("111"), b * b.conjugate()),
    ]
    assert measure_all(state, normalize=False) == [
        (Qubit("110"), a * a.conjugate()),
        (Qubit("111"), b * b.conjugate()),
    ]
Exemple #17
0
def test_QubitBra():
    qb = Qubit(0)
    qb_bra = QubitBra(0)
    assert qb.dual_class() == QubitBra
    assert qb_bra.dual_class() == Qubit

    qb = Qubit(1, 1, 0)
    qb_bra = QubitBra(1, 1, 0)
    assert represent(qb, nqubits=3).H == represent(qb_bra, nqubits=3)

    qb = Qubit(0, 1)
    qb_bra = QubitBra(1,0)
    assert qb._eval_innerproduct_QubitBra(qb_bra) == Integer(0)

    qb_bra = QubitBra(0, 1)
    assert qb._eval_innerproduct_QubitBra(qb_bra) == Integer(1)
Exemple #18
0
def test_eval_trace():

    q1 = Qubit('10110')
    q2 = Qubit('01010')
    d = Density([q1, 0.6], [q2, 0.4])

    t = Tr(d)
    assert t.doit() == 1

    # extreme bits
    t = Tr(d, 0)
    assert t.doit() == (0.4 * Density([Qubit('0101'), 1]) +
                        0.6 * Density([Qubit('1011'), 1]))
    t = Tr(d, 4)
    assert t.doit() == (0.4 * Density([Qubit('1010'), 1]) +
                        0.6 * Density([Qubit('0110'), 1]))
    # index somewhere in between
    t = Tr(d, 2)
    assert t.doit() == (0.4 * Density([Qubit('0110'), 1]) +
                        0.6 * Density([Qubit('1010'), 1]))
    #trace all indices
    t = Tr(d, [0, 1, 2, 3, 4])
    assert t.doit() == 1

    # trace some indices, initialized in
    # non-canonical order
    t = Tr(d, [2, 1, 3])
    assert t.doit() == (0.4 * Density([Qubit('00'), 1]) +
                        0.6 * Density([Qubit('10'), 1]))

    # mixed states
    q = (1 / sqrt(2)) * (Qubit('00') + Qubit('11'))
    d = Density([q, 1.0])
    t = Tr(d, 0)
    assert t.doit() == (0.5 * Density([Qubit('0'), 1]) +
                        0.5 * Density([Qubit('1'), 1]))
Exemple #19
0
def test_measure_partial():
    #Basic test of collapse of entangled two qubits (Bell States)
    state = Qubit('01') + Qubit('10')
    assert sorted(measure_partial(state, (0,))) ==\
           [(Qubit('01'), Rational(1,2)), (Qubit('10'), Rational(1,2))]
    assert sorted(measure_partial(state, (0,))) ==\
           sorted(measure_partial(state, (1,)))

    #Test of more complex collapse and probability calculation
    state1 = sqrt(2) / sqrt(3) * Qubit('00001') + 1 / sqrt(3) * Qubit('11111')
    assert measure_partial(state1, (0,)) ==\
           [(sqrt(2)/sqrt(3)*Qubit('00001') + 1/sqrt(3)*Qubit('11111'), 1)]
    assert measure_partial(state1, (1, 2)) == measure_partial(state1, (3, 4))
    assert measure_partial(state1, (1,2,3)) ==\
           [(Qubit('00001'), Rational(2,3)), (Qubit('11111'), Rational(1,3))]

    #test of measuring multiple bits at once
    state2 = Qubit('1111') + Qubit('1101') + Qubit('1011') + Qubit('1000')
    assert sorted(measure_partial(state2, (0,1,3))) ==\
           sorted([(Qubit('1011')/sqrt(2) + Qubit('1111')/sqrt(2), Rational(1,2)), \
           (Qubit('1101'), Rational(1,4)), (Qubit('1000'), Rational(1,4))])
    assert sorted(measure_partial(state2, (0,))) ==\
           sorted([(Qubit('1111')/sqrt(3) + Qubit('1101')/sqrt(3) + Qubit('1011')/sqrt(3), Rational(3,4)),\
           (Qubit('1000'), Rational(1,4))])
Exemple #20
0
def test_measure_partial():
    # Basic test of collapse of entangled two qubits (Bell States)
    state = Qubit("01") + Qubit("10")
    assert measure_partial(state, (0,)) == [
        (Qubit("10"), S.Half),
        (Qubit("01"), S.Half),
    ]
    assert measure_partial(state, long(0)) == [
        (Qubit("10"), S.Half),
        (Qubit("01"), S.Half),
    ]
    assert measure_partial(state, (0,)) == measure_partial(state, (1,))[::-1]

    # Test of more complex collapse and probability calculation
    state1 = sqrt(2) / sqrt(3) * Qubit("00001") + 1 / sqrt(3) * Qubit("11111")
    assert measure_partial(state1, (0,)) == [
        (sqrt(2) / sqrt(3) * Qubit("00001") + 1 / sqrt(3) * Qubit("11111"), 1)
    ]
    assert measure_partial(state1, (1, 2)) == measure_partial(state1, (3, 4))
    assert measure_partial(state1, (1, 2, 3)) == [
        (Qubit("00001"), Rational(2, 3)),
        (Qubit("11111"), Rational(1, 3)),
    ]

    # test of measuring multiple bits at once
    state2 = Qubit("1111") + Qubit("1101") + Qubit("1011") + Qubit("1000")
    assert measure_partial(state2, (0, 1, 3)) == [
        (Qubit("1000"), Rational(1, 4)),
        (Qubit("1101"), Rational(1, 4)),
        (Qubit("1011") / sqrt(2) + Qubit("1111") / sqrt(2), S.Half),
    ]
    assert measure_partial(state2, (0,)) == [
        (Qubit("1000"), Rational(1, 4)),
        (
            Qubit("1111") / sqrt(3) + Qubit("1101") / sqrt(3) + Qubit("1011") / sqrt(3),
            Rational(3, 4),
        ),
    ]
Exemple #21
0
def test_measure_all():
    assert measure_all(Qubit("11")) == [(Qubit("11"), 1)]
    state = Qubit("11") + Qubit("10")
    assert measure_all(state) == [(Qubit("10"), S.Half), (Qubit("11"), S.Half)]
    state2 = Qubit("11") / sqrt(5) + 2 * Qubit("00") / sqrt(5)
    assert measure_all(state2) == [
        (Qubit("00"), Rational(4, 5)),
        (Qubit("11"), Rational(1, 5)),
    ]

    # from issue #12585
    assert measure_all(qapply(Qubit("0"))) == [(Qubit("0"), 1)]
Exemple #22
0
def test_matrix_to_qubits():
    assert matrix_to_qubit(Matrix([1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]))\
    == Qubit(0,0,0,0)
    assert qubit_to_matrix(Qubit(0,0,0,0)) ==\
    Matrix([1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0])
    assert matrix_to_qubit(sqrt(2)*2*Matrix([1,1,1,1,1,1,1,1])) ==\
    (2*sqrt(2)*(Qubit(0,0,0) + Qubit(0,0,1) + Qubit(0,1,0) + Qubit(0,1,1)\
    + Qubit(1,0,0) + Qubit(1,0,1) + Qubit(1,1,0) + Qubit(1,1,1))).expand()
    assert qubit_to_matrix(2*sqrt(2)*(Qubit(0,0,0) + Qubit(0,0,1) + Qubit(0,1,0)\
    + Qubit(0,1,1) + Qubit(1,0,0) + Qubit(1,0,1) + Qubit(1,1,0) + Qubit(1,1,1)))\
    == sqrt(2)*2*Matrix([1,1,1,1,1,1,1,1])
def test_measure_all():
    assert measure_all(Qubit('11')) == [(Qubit('11'), 1)]
    state = Qubit('11') + Qubit('10')
    assert measure_all(state) == [(Qubit('10'), S.Half), (Qubit('11'), S.Half)]
    state2 = Qubit('11') / sqrt(5) + 2 * Qubit('00') / sqrt(5)
    assert measure_all(state2) == \
        [(Qubit('00'), Rational(4, 5)), (Qubit('11'), Rational(1, 5))]

    # from issue #12585
    assert measure_all(qapply(Qubit('0'))) == [(Qubit('0'), 1)]