コード例 #1
0
def test_init_errors():
    line = cirq.LineQubit.range(3)
    us = cirq.Duration(nanos=10**3)
    ms = cirq.Duration(nanos=10**6)
    with pytest.raises(ValueError, match="Unsupported qubit type"):
        with cirq.testing.assert_deprecated(
            "Use cirq_pasqal.PasqalDevice", deadline='v0.16', count=2
        ):
            _ = neutral_atoms.NeutralAtomDevice(
                measurement_duration=50 * ms,
                gate_duration=100 * us,
                control_radius=1.5,
                max_parallel_z=3,
                max_parallel_xy=3,
                max_parallel_c=3,
                qubits=line,
            )
    with pytest.raises(ValueError, match="max_parallel_c must be less"):
        with cirq.testing.assert_deprecated(
            "Use cirq_pasqal.PasqalDevice", deadline='v0.16', count=1
        ):
            _ = neutral_atoms.NeutralAtomDevice(
                measurement_duration=50 * ms,
                gate_duration=100 * us,
                control_radius=1.5,
                max_parallel_z=3,
                max_parallel_xy=3,
                max_parallel_c=4,
                qubits=[cirq.GridQubit(0, 0)],
            )
コード例 #2
0
def test_init_errors():
    line = cirq.LineQubit.range(3)
    us = cirq.Duration(nanos=10**3)
    ms = cirq.Duration(nanos=10**6)
    with pytest.raises(ValueError, match="Unsupported qubit type"):
        _ = neutral_atoms.NeutralAtomDevice(measurement_duration=50 * ms,
                                            gate_duration=100 * us,
                                            control_radius=1.5,
                                            max_parallel_z=3,
                                            max_parallel_xy=3,
                                            max_parallel_c=3,
                                            qubits=line)
    with pytest.raises(ValueError, match="max_parallel_c must be less"):
        _ = neutral_atoms.NeutralAtomDevice(measurement_duration=50 * ms,
                                            gate_duration=100 * us,
                                            control_radius=1.5,
                                            max_parallel_z=3,
                                            max_parallel_xy=3,
                                            max_parallel_c=4,
                                            qubits=[cirq.GridQubit(0, 0)])
コード例 #3
0
def square_device(width: int, height: int, holes=(),
                  max_controls=2) -> neutral_atoms.NeutralAtomDevice:
    us = cirq.Duration(nanos=10**3)
    ms = cirq.Duration(nanos=10**6)
    return neutral_atoms.NeutralAtomDevice(measurement_duration=50 * ms,
                              gate_duration=100 * us,
                              control_radius=1.5,
                              max_parallel_z=3,
                              max_parallel_xy=3,
                              max_parallel_c=max_controls,
                              qubits=[cirq.GridQubit(row, col)
                              for col in range(width)
                              for row in range(height)
                              if cirq.GridQubit(row, col) not in holes])
コード例 #4
0
def square_device(
    width: int, height: int, holes=(), max_controls=2, use_timedelta=False
) -> neutral_atoms.NeutralAtomDevice:
    us = cirq.Duration(nanos=10 ** 3) if not use_timedelta else timedelta(microseconds=1)
    ms = cirq.Duration(nanos=10 ** 6) if not use_timedelta else timedelta(microseconds=1000)
    return neutral_atoms.NeutralAtomDevice(  # type: ignore
        measurement_duration=50 * ms,  # type: ignore
        gate_duration=100 * us,  # type: ignore
        control_radius=1.5,
        max_parallel_z=3,
        max_parallel_xy=3,
        max_parallel_c=max_controls,
        qubits=[
            cirq.GridQubit(row, col)
            for col in range(width)
            for row in range(height)
            if cirq.GridQubit(row, col) not in holes
        ],
    )
コード例 #5
0
def test_validate_moment_errors():
    d = square_device(3, 3)
    q00 = cirq.GridQubit(0, 0)
    q01 = cirq.GridQubit(0, 1)
    q10 = cirq.GridQubit(1, 0)
    q11 = cirq.GridQubit(1, 1)
    q12 = cirq.GridQubit(1, 2)
    q02 = cirq.GridQubit(0, 2)
    q04 = cirq.GridQubit(0, 4)
    q03 = cirq.GridQubit(0, 3)
    q20 = cirq.GridQubit(2, 0)
    q21 = cirq.GridQubit(2, 1)

    m = cirq.Moment([cirq.Z.on(q00), (cirq.Z**2).on(q01)])
    with pytest.raises(ValueError, match="Non-identical simultaneous "):
        d.validate_moment(m)
    m = cirq.Moment([cirq.X.on(q00), cirq.Y.on(q01)])
    with pytest.raises(ValueError, match="Non-identical simultaneous "):
        d.validate_moment(m)
    m = cirq.Moment([cirq.CNOT.on(q00, q01), cirq.CZ.on(q12, q02)])
    with pytest.raises(ValueError, match="Non-identical simultaneous "):
        d.validate_moment(m)
    m = cirq.Moment([cirq.CNOT.on(q00, q01), cirq.CNOT.on(q12, q02)])
    with pytest.raises(ValueError,
                       match="Too many qubits acted on by "
                       "controlled gates"):
        d.validate_moment(m)
    m = cirq.Moment([cirq.CNOT.on(q00, q01), cirq.Z.on(q02)])
    with pytest.raises(ValueError,
                       match="Can't perform non-controlled "
                       "operations at same time as controlled operations"):
        d.validate_moment(m)
    m = cirq.Moment(cirq.Z.on_each(*d.qubits))
    with pytest.raises(ValueError, match="Too many simultaneous Z gates"):
        d.validate_moment(m)
    m = cirq.Moment(cirq.X.on_each(*(d.qubit_list()[1:])))
    with pytest.raises(ValueError,
                       match="Bad number of simultaneous XY gates"):
        d.validate_moment(m)
    m = cirq.Moment([cirq.MeasurementGate(1).on(q00), cirq.Z.on(q01)])
    with pytest.raises(ValueError,
                       match="Measurements can't be simultaneous "
                       "with other operations"):
        d.validate_moment(m)
    d.validate_moment(cirq.Moment([cirq.X.on(q00), cirq.Z.on(q01)]))
    us = cirq.Duration(nanos=10**3)
    ms = cirq.Duration(nanos=10**6)
    d2 = neutral_atoms.NeutralAtomDevice(measurement_duration=50 * ms,
                                         gate_duration=100 * us,
                                         control_radius=1.5,
                                         max_parallel_z=4,
                                         max_parallel_xy=4,
                                         max_parallel_c=4,
                                         qubits=[
                                             cirq.GridQubit(row, col)
                                             for col in range(2)
                                             for row in range(2)
                                         ])
    m = cirq.Moment([cirq.CNOT.on(q00, q01), cirq.CNOT.on(q10, q11)])
    with pytest.raises(ValueError, match="Interacting controlled operations"):
        d2.validate_moment(m)
    d2 = neutral_atoms.NeutralAtomDevice(measurement_duration=50 * ms,
                                         gate_duration=100 * us,
                                         control_radius=1.1,
                                         max_parallel_z=6,
                                         max_parallel_xy=6,
                                         max_parallel_c=6,
                                         qubits=[
                                             cirq.GridQubit(row, col)
                                             for col in range(5)
                                             for row in range(5)
                                         ])
    m = cirq.Moment(
        [cirq.CZ.on(q00, q01),
         cirq.CZ.on(q03, q04),
         cirq.CZ.on(q20, q21)])
    d2.validate_moment(m)
    m = cirq.Moment(
        [cirq.CZ.on(q00, q01),
         cirq.CZ.on(q02, q03),
         cirq.CZ.on(q10, q11)])
    with pytest.raises(ValueError, match="Interacting controlled operations"):
        d2.validate_moment(m)