def test_so4_to_magic_su2s_known_factors(a, b): m = recompose_so4(a, b) a2, b2 = cirq.so4_to_magic_su2s(m) m2 = recompose_so4(a2, b2) assert np.allclose(m2, m) # Account for kron(A, B) = kron(-A, -B). if np.linalg.norm(a + a2) > np.linalg.norm(a - a2): assert np.allclose(a2, a) assert np.allclose(b2, b) else: assert np.allclose(a2, -a) assert np.allclose(b2, -b)
def test_so4_to_magic_su2s_fail(mat): with pytest.raises(ValueError): _ = cirq.so4_to_magic_su2s(mat)
def test_so4_to_magic_su2s(m): a, b = cirq.so4_to_magic_su2s(m) m2 = recompose_so4(a, b) assert_magic_su2_within_tolerance(m2, a, b) assert np.allclose(m, m2)
def test_so4_to_magic_su2s_fail(mat): with pytest.raises(ValueError): cirq.so4_to_magic_su2s(mat)
def test_so4_to_magic_su2s(m): a, b = cirq.so4_to_magic_su2s(m) m2 = recompose_so4(a, b) assert np.allclose(m, m2)