def test_clbits_parameter(self): """Test whether the clbits parameter is handled correctly""" shots = 10000 assignment_matrices = self.assignment_matrices() mitigators = self.mitigators(assignment_matrices) circuit, _, _ = self.first_qubit_h_3_circuit() counts_ideal, counts_noise, _ = self.counts_data(circuit, assignment_matrices, shots) counts_ideal_12 = marginal_counts(counts_ideal, [1, 2]) counts_ideal_02 = marginal_counts(counts_ideal, [0, 2]) for mitigator in mitigators: mitigated_probs_12 = ( mitigator.quasi_probabilities(counts_noise, qubits=[1, 2], clbits=[1, 2]) .nearest_probability_distribution() .binary_probabilities(num_bits=2) ) mitigated_error = self.compare_results(counts_ideal_12, mitigated_probs_12) self.assertLess( mitigated_error, 0.001, "Mitigator {} did not correctly marganalize for qubits 1,2".format(mitigator), ) mitigated_probs_02 = ( mitigator.quasi_probabilities(counts_noise, qubits=[0, 2], clbits=[0, 2]) .nearest_probability_distribution() .binary_probabilities(num_bits=2) ) mitigated_error = self.compare_results(counts_ideal_02, mitigated_probs_02) self.assertLess( mitigated_error, 0.001, "Mitigator {} did not correctly marganalize for qubits 0,2".format(mitigator), )
def __init__( self, job_sim, job_delay_before, job_delay_after, delay_duration_list, nseed, initial_layout: Union[List[int], Union[Dict[str, int], Dict[int, str]]], ): self.result_sim = job_sim.result() self.delay_duration_list = delay_duration_list self.nseed = nseed self.initial_layout = [initial_layout for _ in range(self.nseed)] indices = self.parse_initial_layout() self.result_delay_before = [ marginal_counts(job.result(), ind) for job, ind in zip(job_delay_before, indices) ] self.result_delay_after = [ marginal_counts(job.result(), ind) for job, ind in zip(job_delay_after, indices) ] self.num_clbits_list = [len(ind) for ind in indices]
def test_marginal_int_counts(self): raw_counts = {0: 4, 1: 7, 2: 10, 6: 5, 9: 11, 13: 9, 14: 8} expected = {'00': 4, '01': 27, '10': 23} counts_obj = counts.Counts(raw_counts, creg_sizes=[['c0', 4]], memory_slots=4) result = utils.marginal_counts(counts_obj, [0, 1]) self.assertEqual(expected, result)
def test_qubits_subset_parameter(self): """Tests mitigation on a subset of the initial set of qubits.""" shots = 10000 assignment_matrices = self.assignment_matrices() mitigators = self.mitigators(assignment_matrices, qubits=[2, 4, 6]) circuit, _, _ = self.first_qubit_h_3_circuit() counts_ideal, counts_noise, _ = self.counts_data(circuit, assignment_matrices, shots) counts_ideal_2 = marginal_counts(counts_ideal, [0]) counts_ideal_6 = marginal_counts(counts_ideal, [2]) for mitigator in mitigators: mitigated_probs_2 = ( mitigator.quasi_probabilities(counts_noise, qubits=[2]) .nearest_probability_distribution() .binary_probabilities(num_bits=1) ) mitigated_error = self.compare_results(counts_ideal_2, mitigated_probs_2) self.assertLess( mitigated_error, 0.001, "Mitigator {} did not correctly handle qubit subset".format(mitigator), ) mitigated_probs_6 = ( mitigator.quasi_probabilities(counts_noise, qubits=[6]) .nearest_probability_distribution() .binary_probabilities(num_bits=1) ) mitigated_error = self.compare_results(counts_ideal_6, mitigated_probs_6) self.assertLess( mitigated_error, 0.001, "Mitigator {} did not correctly handle qubit subset".format(mitigator), ) diagonal = str2diag("ZZ") ideal_expectation = 0 mitigated_expectation, _ = mitigator.expectation_value( counts_noise, diagonal, qubits=[2, 6] ) mitigated_error = np.abs(ideal_expectation - mitigated_expectation) self.assertLess( mitigated_error, 0.1, "Mitigator {} did not improve circuit expectation".format(mitigator), )
def test_marginal_0b_string_counts(self): raw_counts = { "0b0": 4, "0b1": 7, "0b10": 10, "0b110": 5, "0b1001": 11, "0b1101": 9, "0b1110": 8, } expected = {"00": 4, "01": 27, "10": 23} counts_obj = counts.Counts(raw_counts, creg_sizes=[["c0", 4]], memory_slots=4) result = utils.marginal_counts(counts_obj, [0, 1]) self.assertEqual(expected, result)
def test_marginal_counts(self): raw_counts = { '0x0': 4, '0x1': 7, '0x2': 10, '0x6': 5, '0x9': 11, '0xD': 9, '0xE': 8 } expected = {'00': 4, '01': 27, '10': 23} counts_obj = counts.Counts(raw_counts, creg_sizes=[['c0', 4]], memory_slots=4) result = utils.marginal_counts(counts_obj, [0, 1]) self.assertEqual(expected, result)
def test_marginal_counts(self): raw_counts = { "0x0": 4, "0x1": 7, "0x2": 10, "0x6": 5, "0x9": 11, "0xD": 9, "0xE": 8 } expected = {"00": 4, "01": 27, "10": 23} counts_obj = counts.Counts(raw_counts, creg_sizes=[["c0", 4]], memory_slots=4) result = utils.marginal_counts(counts_obj, [0, 1]) self.assertEqual(expected, result)