Beispiel #1
0
    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),
            )
Beispiel #2
0
    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)
Beispiel #4
0
    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)