def test_sample_2q_xeb_circuits_error(): qubits = cirq.LineQubit.range(3) circuits = [cirq.testing.random_circuit(qubits, n_moments=5, op_density=0.8, random_state=52)] cycle_depths = np.arange(3, 50, 9) with pytest.raises(ValueError): # three qubit circuits _ = sample_2q_xeb_circuits( sampler=cirq.Simulator(), circuits=circuits, cycle_depths=cycle_depths, )
def test_sample_2q_xeb_circuits_no_progress(capsys): qubits = cirq.LineQubit.range(2) circuits = [cirq.testing.random_circuit(qubits, n_moments=7, op_density=0.8, random_state=52)] cycle_depths = np.arange(3, 4) _ = sample_2q_xeb_circuits( sampler=cirq.Simulator(), circuits=circuits, cycle_depths=cycle_depths, progress_bar=None, ) captured = capsys.readouterr() assert captured.out == '' assert captured.err == ''
def test_benchmark_2q_xeb_fidelities(): q0, q1 = cirq.LineQubit.range(2) circuits = [ rqcg.random_rotations_between_two_qubit_circuit( q0, q1, depth=50, two_qubit_op_factory=lambda a, b, _: SQRT_ISWAP(a, b), seed=52 ) for _ in range(2) ] cycle_depths = np.arange(3, 50, 9) sampled_df = sample_2q_xeb_circuits( sampler=cirq.Simulator(seed=53), circuits=circuits, cycle_depths=cycle_depths ) fid_df = benchmark_2q_xeb_fidelities(sampled_df, circuits, cycle_depths) assert len(fid_df) == len(cycle_depths) for _, row in fid_df.iterrows(): assert row['cycle_depth'] in cycle_depths assert row['fidelity'] > 0.98
def test_characterize_phased_fsim_parameters_with_xeb(): q0, q1 = cirq.LineQubit.range(2) rs = np.random.RandomState(52) circuits = [ rqcg.random_rotations_between_two_qubit_circuit( q0, q1, depth=20, two_qubit_op_factory=lambda a, b, _: SQRT_ISWAP(a, b), seed=rs, ) for _ in range(2) ] cycle_depths = np.arange(3, 20, 6) sampled_df = sample_2q_xeb_circuits( sampler=cirq.Simulator(seed=rs), circuits=circuits, cycle_depths=cycle_depths, progress_bar=None, ) # only optimize theta so it goes faster. options = SqrtISwapXEBOptions( characterize_theta=True, characterize_gamma=False, characterize_chi=False, characterize_zeta=False, characterize_phi=False, ) p_circuits = [parameterize_phased_fsim_circuit(circuit, options) for circuit in circuits] with multiprocessing.Pool() as pool: result = characterize_phased_fsim_parameters_with_xeb( sampled_df=sampled_df, parameterized_circuits=p_circuits, cycle_depths=cycle_depths, phased_fsim_options=options, # speed up with looser tolerances: fatol=1e-2, xatol=1e-2, pool=pool, ) assert np.abs(result.x[0] + np.pi / 4) < 0.1 assert np.abs(result.fun) < 0.1 # noiseless simulator
def test_sample_2q_xeb_circuits(): q0, q1 = cirq.LineQubit.range(2) circuits = [ rqcg.random_rotations_between_two_qubit_circuit( q0, q1, depth=20, two_qubit_op_factory=lambda a, b, _: SQRT_ISWAP(a, b), ) for _ in range(2) ] cycle_depths = np.arange(3, 20, 6) df = sample_2q_xeb_circuits( sampler=cirq.Simulator(), circuits=circuits, cycle_depths=cycle_depths, ) assert len(df) == len(cycle_depths) * len(circuits) for (circuit_i, cycle_depth), row in df.iterrows(): assert 0 <= circuit_i < len(circuits) assert cycle_depth in cycle_depths assert len(row['sampled_probs']) == 4 assert np.isclose(np.sum(row['sampled_probs']), 1)