Пример #1
0
def simulate(sim_type: str,
             num_qubits: int,
             num_gates: int,
             num_prefix_qubits: int = 0,
             use_processes: bool = False) -> None:
    """"Runs the simulator."""
    circuit = cirq.Circuit()
    for _ in range(num_gates):
        which = np.random.choice(['expz', 'expw', 'exp11'])
        if which == 'expw':
            circuit.append(cirq.PhasedXPowGate(
                phase_exponent=np.random.random(),
                exponent=np.random.random()).on(np.random.randint(num_qubits)),
                           strategy=cirq.InsertStrategy.EARLIEST)
        elif which == 'expz':
            circuit.append(cirq.Z(
                np.random.randint(num_qubits))**np.random.random(),
                           strategy=cirq.InsertStrategy.EARLIEST)
        elif which == 'exp11':
            q1, q2 = np.random.choice(num_qubits, 2, replace=False)
            circuit.append(cirq.CZ(q1, q2)**np.random.random(),
                           strategy=cirq.InsertStrategy.EARLIEST)

    if sim_type == _XMON:
        options = cg.XmonOptions(num_shards=2**num_prefix_qubits,
                                 use_processes=use_processes)
        cg.XmonSimulator(options).run(circuit)
    elif sim_type == _UNITARY:
        circuit.apply_unitary_effect_to_state(initial_state=0)
    elif sim_type == _DENSITY:
        cirq.DensityMatrixSimulator().run(circuit)
Пример #2
0
def simulate(sim_type: str,
             num_qubits: int,
             num_gates: int,
             num_prefix_qubits: int = 0,
             use_processes: bool = False) -> None:
    """"Runs the simulator."""
    circuit = cirq.Circuit(device=test_device)

    for _ in range(num_gates):
        which = np.random.choice(['expz', 'expw', 'exp11'])
        if which == 'expw':
            q1 = cirq.GridQubit(0, np.random.randint(num_qubits))
            circuit.append(
                cirq.PhasedXPowGate(phase_exponent=np.random.random(),
                                    exponent=np.random.random()).on(q1))
        elif which == 'expz':
            q1 = cirq.GridQubit(0, np.random.randint(num_qubits))
            circuit.append(cirq.Z(q1)**np.random.random())
        elif which == 'exp11':
            q1 = cirq.GridQubit(0, np.random.randint(num_qubits - 1))
            q2 = cirq.GridQubit(0, q1.col + 1)
            circuit.append(cirq.CZ(q1, q2)**np.random.random())

    if sim_type == _XMON:
        options = cg.XmonOptions(num_shards=2**num_prefix_qubits,
                                 use_processes=use_processes)
        cg.XmonSimulator(options).run(circuit)
    elif sim_type == _UNITARY:
        circuit.apply_unitary_effect_to_state(initial_state=0)
    elif sim_type == _DENSITY:
        cirq.DensityMatrixSimulator().run(circuit)
Пример #3
0
def test_consistent_seeded_run_no_sharding(scheduler):
    circuit = large_circuit()

    simulator = cg.XmonSimulator(
        cg.XmonOptions(num_shards=1))
    result = run(simulator, circuit, scheduler, )
    np.testing.assert_equal(
        result.measurements['meas'],
        [[False, False, True, True, True, True, False, True, False, False]])
Пример #4
0
def test_run_no_sharing_few_qubits(scheduler):
    np.random.seed(0)
    circuit = basic_circuit()
    circuit.append([cirq.measure(Q1, key='a'),
                    cirq.measure(Q2, key='b')],
                   strategy=InsertStrategy.NEW_THEN_INLINE)

    simulator = cg.XmonSimulator(cg.XmonOptions(min_qubits_before_shard=0))
    result = run(simulator, circuit, scheduler)
    np.testing.assert_equal(result.measurements['a'], [[False]])
    np.testing.assert_equal(result.measurements['b'], [[True]])
Пример #5
0
def test_run_no_sharing_few_qubits(scheduler):
    np.random.seed(0)
    circuit = basic_circuit()
    circuit.append(
        [cirq.MeasurementGate(key='a')(Q1),
         cirq.MeasurementGate(key='b')(Q2)])

    simulator = cg.XmonSimulator(cg.XmonOptions(min_qubits_before_shard=0))
    result = run(simulator, circuit, scheduler)
    np.testing.assert_equal(result.measurements['a'], [[True]])
    np.testing.assert_equal(result.measurements['b'], [[False]])
Пример #6
0
def test_run_no_results(scheduler, use_processes):
    options = cg.XmonOptions(use_processes=use_processes)
    simulator = cg.XmonSimulator(options)
    result = run(simulator, basic_circuit(), scheduler)
    assert len(result.measurements) == 0
Пример #7
0
def test_xmon_options():
    options = cg.XmonOptions(num_shards=3, min_qubits_before_shard=0)
    assert options.num_prefix_qubits == 1
    assert options.min_qubits_before_shard == 0
Пример #8
0
def test_xmon_options_negative_min_qubits_before_shard():
    with pytest.raises(AssertionError):
        cg.XmonOptions(min_qubits_before_shard=-1)
Пример #9
0
def test_xmon_options_negative_num_shards():
    with pytest.raises(AssertionError):
        cg.XmonOptions(num_shards=-1)
Пример #10
0
def test_run_no_results(scheduler, use_processes):
    options = cg.XmonOptions(use_processes=use_processes)
    simulator = cg.XmonSimulator(options)
    with pytest.raises(ValueError, match="no measurements"):
        run(simulator, basic_circuit(), scheduler)