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)