mirror of https://github.com/Qiskit/qiskit.git
fix statevector handling global phase (#5239)
Co-authored-by: Matthew Treinish <mtreinish@kortar.org>
This commit is contained in:
parent
2dbe7760c3
commit
cf0b039e32
|
@ -676,7 +676,7 @@ class Statevector(QuantumState):
|
|||
raise QiskitError('{} instruction definition is {}; expected QuantumCircuit'.format(
|
||||
obj.name, type(obj.definition)))
|
||||
if obj.definition.global_phase:
|
||||
statevec._data *= np.exp(1j * obj.definition.global_phase)
|
||||
statevec._data *= np.exp(1j * float(obj.definition.global_phase))
|
||||
for instr, qregs, cregs in obj.definition:
|
||||
if cregs:
|
||||
raise QiskitError(
|
||||
|
|
|
@ -22,6 +22,7 @@ from numpy.testing import assert_allclose
|
|||
from qiskit.test import QiskitTestCase
|
||||
from qiskit import QiskitError
|
||||
from qiskit import QuantumRegister, QuantumCircuit
|
||||
from qiskit import transpile
|
||||
from qiskit.circuit.library import HGate
|
||||
|
||||
from qiskit.quantum_info.random import random_unitary
|
||||
|
@ -866,6 +867,17 @@ class TestStatevector(QiskitTestCase):
|
|||
expval = psi.expectation_value(op)
|
||||
self.assertAlmostEqual(expval, target)
|
||||
|
||||
def test_global_phase(self):
|
||||
"""Test global phase is handled correctly when evolving statevector."""
|
||||
|
||||
qc = QuantumCircuit(1)
|
||||
qc.rz(0.5, 0)
|
||||
qc2 = transpile(qc, basis_gates=['p'])
|
||||
sv = Statevector.from_instruction(qc2)
|
||||
expected = np.array([0.96891242-0.24740396j, 0])
|
||||
self.assertEqual(float(qc2.global_phase), -1/4)
|
||||
self.assertEqual(sv, Statevector(expected))
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
||||
|
|
Loading…
Reference in New Issue