Beispiel #1
0
    def test_qpe_Z1(self, backend_type):
        """eigenproblem Z, |1>"""
        backend = qiskit.BasicAer.get_backend(backend_type)

        unitary_circuit = Z.to_circuit()
        state_preparation = X.to_circuit()  # prepare |1>
        phase = self.one_phase(unitary_circuit,
                               state_preparation,
                               backend=backend)
        self.assertEqual(phase, 0.5)
Beispiel #2
0
 def test_qpe_Z(self, state_preparation, expected_phase, backend_type,
                phase_estimator):
     """eigenproblem Z, |0> and |1>"""
     unitary_circuit = Z.to_circuit()
     phase = self.one_phase(
         unitary_circuit,
         state_preparation,
         backend_type=backend_type,
         phase_estimator=phase_estimator,
     )
     self.assertEqual(phase, expected_phase)
Beispiel #3
0
    def test_qpe_Zplus(self):
        """superposition eigenproblem Z, |+>"""
        unitary_circuit = Z.to_circuit()
        state_preparation = H.to_circuit()  # prepare |+>
        result = self.phase_estimation(
            unitary_circuit,
            state_preparation,
            backend=qiskit.BasicAer.get_backend('statevector_simulator'))

        phases = result.filter_phases(1e-15, as_float=True)
        with self.subTest('test phases has correct values'):
            self.assertEqual(list(phases.keys()), [0.0, 0.5])

        with self.subTest('test phases has correct probabilities'):
            np.testing.assert_allclose(list(phases.values()), [0.5, 0.5])

        with self.subTest('test bitstring representation'):
            phases = result.filter_phases(1e-15, as_float=False)
            self.assertEqual(list(phases.keys()), ['000000', '100000'])