Anders and Briegel in Python
25'ten fazla konu seçemezsiniz Konular bir harf veya rakamla başlamalı, kısa çizgiler ('-') içerebilir ve en fazla 35 karakter uzunluğunda olabilir.

62 satır
1.8KB

  1. import clifford as lc
  2. from numpy import *
  3. from scipy.linalg import sqrtm
  4. from qi import *
  5. from tqdm import tqdm
  6. def identify_pauli(m):
  7. """ Given a signed Pauli matrix, name it. """
  8. for sign in (+1, -1):
  9. for pauli_label, pauli in zip("xyz", paulis):
  10. if allclose(sign * pauli, m):
  11. return sign, pauli_label
  12. def test_find_up_to_phase():
  13. """ Test that slightly suspicious function """
  14. assert lc.find_up_to_phase(id) == (0, 0)
  15. assert lc.find_up_to_phase(px) == (1, 0)
  16. assert lc.find_up_to_phase(exp(1j*pi/4.)*ha) == (4, 7)
  17. def get_action(u):
  18. """ What does this unitary operator do to the Paulis? """
  19. return [identify_pauli(u * p * u.H) for p in paulis]
  20. def format_action(action):
  21. return "".join("{}{}".format("+" if s >= 0 else "-", p) for s, p in action)
  22. def test_we_have_24_matrices():
  23. """ Check that we have 24 unique actions on the Bloch sphere """
  24. actions = set(tuple(get_action(u)) for u in lc.unitaries)
  25. assert len(set(actions)) == 24
  26. def test_we_have_all_useful_gates():
  27. """ Check that all the interesting gates are included up to a global phase """
  28. common_us = id, px, py, pz, ha, ph, sqz, msqz, sqy, msqy, sqx, msqx
  29. for u in common_us:
  30. lc.find_up_to_phase(u)
  31. def test_group():
  32. """ Test we are really in a group """
  33. matches = set()
  34. for a in tqdm(lc.unitaries, "Testing this is a group"):
  35. for b in lc.unitaries:
  36. i, phase = lc.find_up_to_phase(a*b)
  37. matches.add(i)
  38. assert len(matches)==24
  39. def test_conjugation_table():
  40. """ Check that the table of Hermitian conjugates is okay """
  41. assert len(set(lc.conjugation_table))==24
  42. def test_times_table():
  43. """ Check the times table """
  44. assert lc.times_table[0][4]==4