def test_yxxy_matrix(): numpy.testing.assert_allclose(YXXYGate(half_turns=2).matrix(), numpy.array([[1, 0, 0, 0], [0, -1, 0, 0], [0, 0, -1, 0], [0, 0, 0, 1]]), atol=1e-8) numpy.testing.assert_allclose(YXXYGate(half_turns=1).matrix(), numpy.array([[1, 0, 0, 0], [0, 0, -1, 0], [0, 1, 0, 0], [0, 0, 0, 1]]), atol=1e-8) numpy.testing.assert_allclose(YXXYGate(half_turns=0).matrix(), numpy.array([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]), atol=1e-8) numpy.testing.assert_allclose(YXXYGate(half_turns=-1).matrix(), numpy.array([[1, 0, 0, 0], [0, 0, 1, 0], [0, -1, 0, 0], [0, 0, 0, 1]]), atol=1e-8) X = numpy.array([[0, 1], [1, 0]]) Y = numpy.array([[0, -1j], [1j, 0]]) YX = kron(Y, X) XY = kron(X, Y) numpy.testing.assert_allclose(YXXYGate(half_turns=0.25).matrix(), expm(-1j * numpy.pi * 0.25 * (YX - XY) / 4))
def one_and_two_body_interaction(p, q, a, b) -> cirq.OP_TREE: yield XXYYGate(duration=self.hamiltonian.one_body[p, q].real * time).on(a, b) yield YXXYGate(duration=self.hamiltonian.one_body[p, q].imag * time).on(a, b) yield cirq.Rot11Gate(rads=-2 * self.hamiltonian.two_body[p, q] * time).on(a, b)
def one_and_two_body_interaction(p, q, a, b) -> cirq.OP_TREE: t_symbol = LetterWithSubscripts('T', p, q, i) w_symbol = LetterWithSubscripts('W', p, q, i) v_symbol = LetterWithSubscripts('V', p, q, i) if t_symbol in param_set: yield XXYYGate(half_turns=t_symbol).on(a, b) if w_symbol in param_set: yield YXXYGate(half_turns=w_symbol).on(a, b) if v_symbol in param_set: yield cirq.Rot11Gate(half_turns=v_symbol).on(a, b)
def one_and_two_body_interaction(p, q, a, b) -> cirq.OP_TREE: if 'T{}_{}'.format(p, q) + suffix in self.params: yield XXYYGate(half_turns=self.params[ 'T{}_{}'.format(p, q) + suffix]).on(a, b) if 'W{}_{}'.format(p, q) + suffix in self.params: yield YXXYGate(half_turns=self.params[ 'W{}_{}'.format(p, q) + suffix]).on(a, b) if 'V{}_{}'.format(p, q) + suffix in self.params: yield cirq.Rot11Gate(half_turns=self.params[ 'V{}_{}'.format(p, q) + suffix]).on(a, b)
def test_yxxy_repr(): assert repr(YXXYGate(half_turns=1)) == 'YXXY' assert repr(YXXYGate(half_turns=0.5)) == 'YXXY**0.5'
def test_yxxy_eq(): eq = EqualsTester() eq.add_equality_group(YXXYGate(half_turns=3.5), YXXYGate(half_turns=-0.5), YXXYGate(rads=-0.5 * numpy.pi), YXXYGate(degs=-90), YXXYGate(duration=-0.5 * numpy.pi / 2)) eq.add_equality_group(YXXYGate(half_turns=1.5), YXXYGate(half_turns=-2.5), YXXYGate(rads=1.5 * numpy.pi), YXXYGate(degs=-450), YXXYGate(duration=-2.5 * numpy.pi / 2)) eq.make_equality_group(lambda: YXXYGate(half_turns=0)) eq.make_equality_group(lambda: YXXYGate(half_turns=0.5))
def test_yxxy_init_with_multiple_args_fails(): with pytest.raises(ValueError): _ = YXXYGate(half_turns=1.0, duration=numpy.pi/2)
def test_yxxy_init(): assert YXXYGate(half_turns=0.5).half_turns == 0.5 assert YXXYGate(half_turns=1.5).half_turns == 1.5 assert YXXYGate(half_turns=5).half_turns == 1