Beispiel #1
0
 def test_run_with_shots_option_none(self):
     """test with shots=None option. Seed is ignored then."""
     sampler = Sampler()
     result_42 = sampler.run([self._pqc],
                             parameter_values=[[0, 1, 1, 2, 3, 5]],
                             shots=None,
                             seed=42).result()
     result_15 = sampler.run([self._pqc],
                             parameter_values=[[0, 1, 1, 2, 3, 5]],
                             shots=None,
                             seed=15).result()
     self.assertDictAlmostEqual(result_42.quasi_dists,
                                result_15.quasi_dists)
Beispiel #2
0
    def test_run_2qubit(self):
        """test for 2-qubit cases"""
        qc0 = QuantumCircuit(2)
        qc0.measure_all()
        qc1 = QuantumCircuit(2)
        qc1.x(0)
        qc1.measure_all()
        qc2 = QuantumCircuit(2)
        qc2.x(1)
        qc2.measure_all()
        qc3 = QuantumCircuit(2)
        qc3.x([0, 1])
        qc3.measure_all()

        sampler = Sampler()
        result = sampler.run([qc0, qc1, qc2, qc3]).result()
        self.assertIsInstance(result, SamplerResult)
        self.assertEqual(len(result.quasi_dists), 4)

        keys, values = zip(*sorted(result.quasi_dists[0].items()))
        self.assertTupleEqual(keys, tuple(range(4)))
        np.testing.assert_allclose(values, [1, 0, 0, 0])

        keys, values = zip(*sorted(result.quasi_dists[1].items()))
        self.assertTupleEqual(keys, tuple(range(4)))
        np.testing.assert_allclose(values, [0, 1, 0, 0])

        keys, values = zip(*sorted(result.quasi_dists[2].items()))
        self.assertTupleEqual(keys, tuple(range(4)))
        np.testing.assert_allclose(values, [0, 0, 1, 0])

        keys, values = zip(*sorted(result.quasi_dists[3].items()))
        self.assertTupleEqual(keys, tuple(range(4)))
        np.testing.assert_allclose(values, [0, 0, 0, 1])
Beispiel #3
0
 def test_run_with_shots_option(self):
     """test with shots option."""
     params, target = self._generate_params_target([1])
     sampler = Sampler()
     result = sampler.run(circuits=[self._pqc],
                          parameter_values=params,
                          shots=1024,
                          seed=15).result()
     self._compare_probs(result.quasi_dists, target)
Beispiel #4
0
 def test_sampler_run(self):
     """Test Sampler.run()."""
     bell = self._circuit[1]
     sampler = Sampler()
     job = sampler.run(circuits=[bell])
     self.assertIsInstance(job, JobV1)
     result = job.result()
     self.assertIsInstance(result, SamplerResult)
     # print([q.binary_probabilities() for q in result.quasi_dists])
     self._compare_probs(result.quasi_dists, self._target[1])
Beispiel #5
0
 def test_sample_run_multiple_circuits(self):
     """Test Sampler.run() with multiple circuits."""
     # executes three Bell circuits
     # Argument `parameters` is optional.
     bell = self._circuit[1]
     sampler = Sampler()
     result = sampler.run([bell, bell, bell]).result()
     # print([q.binary_probabilities() for q in result.quasi_dists])
     self._compare_probs(result.quasi_dists[0], self._target[1])
     self._compare_probs(result.quasi_dists[1], self._target[1])
     self._compare_probs(result.quasi_dists[2], self._target[1])
Beispiel #6
0
    def test_run_empty_parameter(self):
        """Test for empty parameter"""
        n = 5
        qc = QuantumCircuit(n, n - 1)
        qc.measure(range(n - 1), range(n - 1))
        sampler = Sampler()
        with self.subTest("one circuit"):
            result = sampler.run([qc], shots=1000).result()
            self.assertEqual(len(result.quasi_dists), 1)
            for q_d in result.quasi_dists:
                quasi_dist = {k: v for k, v in q_d.items() if v != 0.0}
                self.assertDictEqual(quasi_dist, {0: 1.0})
            self.assertEqual(len(result.metadata), 1)

        with self.subTest("two circuits"):
            result = sampler.run([qc, qc], shots=1000).result()
            self.assertEqual(len(result.quasi_dists), 2)
            for q_d in result.quasi_dists:
                quasi_dist = {k: v for k, v in q_d.items() if v != 0.0}
                self.assertDictEqual(quasi_dist, {0: 1.0})
            self.assertEqual(len(result.metadata), 2)
Beispiel #7
0
    def test_run_numpy_params(self):
        """Test for numpy array as parameter values"""
        qc = RealAmplitudes(num_qubits=2, reps=2)
        qc.measure_all()
        k = 5
        params_array = np.random.rand(k, qc.num_parameters)
        params_list = params_array.tolist()
        params_list_array = list(params_array)
        sampler = Sampler()
        target = sampler.run([qc] * k, params_list).result()

        with self.subTest("ndarrary"):
            result = sampler.run([qc] * k, params_array).result()
            self.assertEqual(len(result.metadata), k)
            for i in range(k):
                self.assertDictEqual(result.quasi_dists[i],
                                     target.quasi_dists[i])

        with self.subTest("list of ndarray"):
            result = sampler.run([qc] * k, params_list_array).result()
            self.assertEqual(len(result.metadata), k)
            for i in range(k):
                self.assertDictEqual(result.quasi_dists[i],
                                     target.quasi_dists[i])
Beispiel #8
0
    def test_run_errors(self):
        """Test for errors"""
        qc1 = QuantumCircuit(1)
        qc1.measure_all()
        qc2 = RealAmplitudes(num_qubits=1, reps=1)
        qc2.measure_all()

        sampler = Sampler()
        with self.assertRaises(QiskitError):
            sampler.run([qc1], [[1e2]]).result()
        with self.assertRaises(QiskitError):
            sampler.run([qc2], [[]]).result()
        with self.assertRaises(QiskitError):
            sampler.run([qc2], [[1e2]]).result()
Beispiel #9
0
    def test_run_1qubit(self):
        """test for 1-qubit cases"""
        qc = QuantumCircuit(1)
        qc.measure_all()
        qc2 = QuantumCircuit(1)
        qc2.x(0)
        qc2.measure_all()

        sampler = Sampler()
        result = sampler.run([qc, qc2]).result()
        self.assertIsInstance(result, SamplerResult)
        self.assertEqual(len(result.quasi_dists), 2)

        keys, values = zip(*sorted(result.quasi_dists[0].items()))
        self.assertTupleEqual(keys, tuple(range(2)))
        np.testing.assert_allclose(values, [1, 0])

        keys, values = zip(*sorted(result.quasi_dists[1].items()))
        self.assertTupleEqual(keys, tuple(range(2)))
        np.testing.assert_allclose(values, [0, 1])
Beispiel #10
0
    def test_sampler_run_with_parameterized_circuits(self):
        """Test Sampler.run() with parameterized circuits."""
        # parameterized circuit

        pqc = self._pqc
        pqc2 = self._pqc2
        theta1, theta2, theta3 = self._theta

        sampler = Sampler()
        result = sampler.run([pqc, pqc, pqc2],
                             [theta1, theta2, theta3]).result()

        # result of pqc(theta1)
        prob1 = {
            "00": 0.1309248462975777,
            "01": 0.3608720796028448,
            "10": 0.09324865232050054,
            "11": 0.41495442177907715,
        }
        self.assertDictAlmostEqual(
            result.quasi_dists[0].binary_probabilities(), prob1)

        # result of pqc(theta2)
        prob2 = {
            "00": 0.06282290651933871,
            "01": 0.02877144385576705,
            "10": 0.606654494132085,
            "11": 0.3017511554928094,
        }
        self.assertDictAlmostEqual(
            result.quasi_dists[1].binary_probabilities(), prob2)

        # result of pqc2(theta3)
        prob3 = {
            "00": 0.1880263994380416,
            "01": 0.6881971261189544,
            "10": 0.09326232720582443,
            "11": 0.030514147237179892,
        }
        self.assertDictAlmostEqual(
            result.quasi_dists[2].binary_probabilities(), prob3)
Beispiel #11
0
 def test_primitive_job_status_done(self):
     """test primitive job's status"""
     bell = self._circuit[1]
     sampler = Sampler()
     job = sampler.run(circuits=[bell])
     self.assertEqual(job.status(), JobStatus.DONE)