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)
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)
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]])
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]])
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]])
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
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
def test_xmon_options_negative_min_qubits_before_shard(): with pytest.raises(AssertionError): cg.XmonOptions(min_qubits_before_shard=-1)
def test_xmon_options_negative_num_shards(): with pytest.raises(AssertionError): cg.XmonOptions(num_shards=-1)
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)