Esempio n. 1
0
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)
Esempio n. 3
0
 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)
Esempio n. 5
0
def test_yxxy_repr():
    assert repr(YXXYGate(half_turns=1)) == 'YXXY'
    assert repr(YXXYGate(half_turns=0.5)) == 'YXXY**0.5'
Esempio n. 6
0
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))
Esempio n. 7
0
def test_yxxy_init_with_multiple_args_fails():
    with pytest.raises(ValueError):
        _ = YXXYGate(half_turns=1.0, duration=numpy.pi/2)
Esempio n. 8
0
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