Exemplo n.º 1
0
def test_is_zeron():
    with pytest.raises(TypeError):
        is_zero(1)

    p_term = PauliTerm("X", 0)
    ps_term = p_term + PauliTerm("Z", 1)

    assert not is_zero(p_term)
    assert is_zero(p_term + -1 * p_term)
    assert not is_zero(ps_term)
def test_is_zeron():
    q = QubitPlaceholder.register(8)
    with pytest.raises(TypeError):
        is_zero(1)

    p_term = PauliTerm("X", q[0])
    ps_term = p_term + PauliTerm("Z", q[1])

    assert not is_zero(p_term)
    assert is_zero(p_term + -1 * p_term)
    assert not is_zero(ps_term)
def test_check_commutation_rigorous():
    # more rigorous test.  Get all operators in Pauli group
    p_n_group = ("I", "X", "Y", "Z")
    pauli_list = list(product(p_n_group, repeat=3))
    pauli_ops = [
        list(zip(x, QubitPlaceholder.register(3))) for x in pauli_list
    ]
    pauli_ops_pq = [
        reduce(mul, (PauliTerm(*x) for x in op)) for op in pauli_ops
    ]

    non_commuting_pairs = []
    commuting_pairs = []
    for x in range(len(pauli_ops_pq)):
        for y in range(x, len(pauli_ops_pq)):

            tmp_op = _commutator(pauli_ops_pq[x], pauli_ops_pq[y])
            assert len(tmp_op.terms) == 1
            if is_zero(tmp_op.terms[0]):
                commuting_pairs.append((pauli_ops_pq[x], pauli_ops_pq[y]))
            else:
                non_commuting_pairs.append((pauli_ops_pq[x], pauli_ops_pq[y]))

    # now that we have our sets let's check against our code.
    for t1, t2 in non_commuting_pairs:
        assert not check_commutation([t1], t2)

    for t1, t2 in commuting_pairs:
        assert check_commutation([t1], t2)