def test_run_1qubit(self): """Test for 1-qubit cases""" qc = QuantumCircuit(1) qc2 = QuantumCircuit(1) qc2.x(0) op = SparsePauliOp.from_list([("I", 1)]) op2 = SparsePauliOp.from_list([("Z", 1)]) est = Estimator() result = est.run([qc], [op], [[]]).result() self.assertIsInstance(result, EstimatorResult) np.testing.assert_allclose(result.values, [1]) result = est.run([qc], [op2], [[]]).result() self.assertIsInstance(result, EstimatorResult) np.testing.assert_allclose(result.values, [1]) result = est.run([qc2], [op], [[]]).result() self.assertIsInstance(result, EstimatorResult) np.testing.assert_allclose(result.values, [1]) result = est.run([qc2], [op2], [[]]).result() self.assertIsInstance(result, EstimatorResult) np.testing.assert_allclose(result.values, [-1])
def test_estiamtor_run_no_params(self): """test for estimator without parameters""" circuit = self.ansatz.bind_parameters([0, 1, 1, 2, 3, 5]) est = Estimator() result = est.run([circuit], [self.observable]).result() self.assertIsInstance(result, EstimatorResult) np.testing.assert_allclose(result.values, [-1.284366511861733])
def test_run_with_shots_option(self): """test with shots option.""" est = Estimator() result = est.run( [self.ansatz], [self.observable], parameter_values=[[0, 1, 1, 2, 3, 5]], shots=1024, seed=15, ).result() self.assertIsInstance(result, EstimatorResult) np.testing.assert_allclose(result.values, [-1.307397243478641])
def test_run_numpy_params(self): """Test for numpy array as parameter values""" qc = RealAmplitudes(num_qubits=2, reps=2) op = SparsePauliOp.from_list([("IZ", 1), ("XI", 2), ("ZY", -1)]) k = 5 params_array = np.random.rand(k, qc.num_parameters) params_list = params_array.tolist() params_list_array = list(params_array) estimator = Estimator() target = estimator.run([qc] * k, [op] * k, params_list).result() with self.subTest("ndarrary"): result = estimator.run([qc] * k, [op] * k, params_array).result() self.assertEqual(len(result.metadata), k) np.testing.assert_allclose(result.values, target.values) with self.subTest("list of ndarray"): result = estimator.run([qc] * k, [op] * k, params_list_array).result() self.assertEqual(len(result.metadata), k) np.testing.assert_allclose(result.values, target.values)
def test_run_2qubits(self): """Test for 2-qubit cases (to check endian)""" qc = QuantumCircuit(2) qc2 = QuantumCircuit(2) qc2.x(0) op = SparsePauliOp.from_list([("II", 1)]) op2 = SparsePauliOp.from_list([("ZI", 1)]) op3 = SparsePauliOp.from_list([("IZ", 1)]) est = Estimator() result = est.run([qc], [op], [[]]).result() self.assertIsInstance(result, EstimatorResult) np.testing.assert_allclose(result.values, [1]) result = est.run([qc2], [op], [[]]).result() self.assertIsInstance(result, EstimatorResult) np.testing.assert_allclose(result.values, [1]) result = est.run([qc], [op2], [[]]).result() self.assertIsInstance(result, EstimatorResult) np.testing.assert_allclose(result.values, [1]) result = est.run([qc2], [op2], [[]]).result() self.assertIsInstance(result, EstimatorResult) np.testing.assert_allclose(result.values, [1]) result = est.run([qc], [op3], [[]]).result() self.assertIsInstance(result, EstimatorResult) np.testing.assert_allclose(result.values, [1]) result = est.run([qc2], [op3], [[]]).result() self.assertIsInstance(result, EstimatorResult) np.testing.assert_allclose(result.values, [-1])
def test_estimator_run(self): """Test Estimator.run()""" psi1, psi2 = self.psi hamiltonian1, hamiltonian2, hamiltonian3 = self.hamiltonian theta1, theta2, theta3 = self.theta estimator = Estimator() # Specify the circuit and observable by indices. # calculate [ <psi1(theta1)|H1|psi1(theta1)> ] job = estimator.run([psi1], [hamiltonian1], [theta1]) self.assertIsInstance(job, JobV1) result = job.result() self.assertIsInstance(result, EstimatorResult) np.testing.assert_allclose(result.values, [1.5555572817900956]) # Objects can be passed instead of indices. # Note that passing objects has an overhead # since the corresponding indices need to be searched. # User can append a circuit and observable. # calculate [ <psi2(theta2)|H2|psi2(theta2)> ] result2 = estimator.run([psi2], [hamiltonian1], [theta2]).result() np.testing.assert_allclose(result2.values, [2.97797666]) # calculate [ <psi1(theta1)|H2|psi1(theta1)>, <psi1(theta1)|H3|psi1(theta1)> ] result3 = estimator.run([psi1, psi1], [hamiltonian2, hamiltonian3], [theta1] * 2).result() np.testing.assert_allclose(result3.values, [-0.551653, 0.07535239]) # calculate [ <psi1(theta1)|H1|psi1(theta1)>, # <psi2(theta2)|H2|psi2(theta2)>, # <psi1(theta3)|H3|psi1(theta3)> ] result4 = estimator.run([psi1, psi2, psi1], [hamiltonian1, hamiltonian2, hamiltonian3], [theta1, theta2, theta3]).result() np.testing.assert_allclose(result4.values, [1.55555728, 0.17849238, -1.08766318])
def test_run_errors(self): """Test for errors""" qc = QuantumCircuit(1) qc2 = QuantumCircuit(2) op = SparsePauliOp.from_list([("I", 1)]) op2 = SparsePauliOp.from_list([("II", 1)]) est = Estimator() with self.assertRaises(QiskitError): est.run([qc], [op2], [[]]).result() with self.assertRaises(QiskitError): est.run([qc2], [op], [[]]).result() with self.assertRaises(QiskitError): est.run([qc], [op], [[1e4]]).result() with self.assertRaises(QiskitError): est.run([qc2], [op2], [[1, 2]]).result() with self.assertRaises(QiskitError): est.run([qc, qc2], [op2], [[1]]).result() with self.assertRaises(QiskitError): est.run([qc], [op, op2], [[1]]).result()