Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Remove quantum_info deprecated code in 0.22 #10861

Merged
merged 3 commits into from
Sep 20, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 0 additions & 2 deletions qiskit/quantum_info/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,6 @@
.. autofunction:: random_cnotdihedral
.. autofunction:: random_pauli_table
.. autofunction:: random_pauli_list
.. autofunction:: random_stabilizer_table

Analysis
=========
Expand Down Expand Up @@ -152,7 +151,6 @@
random_pauli_list,
random_pauli_table,
random_quantum_channel,
random_stabilizer_table,
random_statevector,
random_unitary,
)
Expand Down
1 change: 0 additions & 1 deletion qiskit/quantum_info/operators/random.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,6 @@
random_pauli,
random_pauli_list,
random_pauli_table,
random_stabilizer_table,
)

DEFAULT_RNG = default_rng()
Expand Down
13 changes: 1 addition & 12 deletions qiskit/quantum_info/operators/symplectic/pauli_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,30 +15,19 @@

from __future__ import annotations
from qiskit.quantum_info.operators.symplectic.pauli_list import PauliList
from qiskit.utils.deprecation import deprecate_arg


@deprecate_arg(
"pauli_basis",
since="0.22",
additional_msg=(
"The argument ``pauli_list`` has no effect as the function always returns a PauliList."
),
)
def pauli_basis(num_qubits: int, weight: bool = False, pauli_list=None) -> PauliList:
def pauli_basis(num_qubits: int, weight: bool = False) -> PauliList:
"""Return the ordered PauliTable or PauliList for the n-qubit Pauli basis.

Args:
num_qubits (int): number of qubits
weight (bool): if True optionally return the basis sorted by Pauli weight
rather than lexicographic order (Default: False)
pauli_list (bool): [Deprecated] This argument is deprecated and remains
for backwards compatability. It has no effect.

Returns:
PauliList: the Paulis for the basis
"""
del pauli_list
pauli_1q = PauliList(["I", "X", "Y", "Z"])
if num_qubits == 1:
return pauli_1q
Expand Down
30 changes: 0 additions & 30 deletions qiskit/quantum_info/operators/symplectic/random.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,11 @@
import numpy as np
from numpy.random import default_rng

from qiskit.utils.deprecation import deprecate_func

from .clifford import Clifford
from .pauli import Pauli
from .pauli_list import PauliList
from .pauli_table import PauliTable
from .stabilizer_table import StabilizerTable


def random_pauli(
Expand Down Expand Up @@ -113,34 +111,6 @@ def random_pauli_table(
return PauliTable(table)


@deprecate_func(
additional_msg="Instead, use the function ``random_pauli_list``.",
since="0.22.0",
)
def random_stabilizer_table(num_qubits, size=1, seed=None):
"""DEPRECATED: Return a random StabilizerTable.

Args:
num_qubits (int): the number of qubits.
size (int): Optional. The number of rows of the table (Default: 1).
seed (int or np.random.Generator): Optional. Set a fixed seed or
generator for RNG.

Returns:
PauliTable: a random StabilizerTable.
"""
if seed is None:
rng = np.random.default_rng()
elif isinstance(seed, np.random.Generator):
rng = seed
else:
rng = default_rng(seed)

table = rng.integers(2, size=(size, 2 * num_qubits)).astype(bool)
phase = rng.integers(2, size=size).astype(bool)
return StabilizerTable(table, phase)


def random_clifford(num_qubits: int, seed: int | np.random.Generator | None = None):
"""Return a random Clifford operator.

Expand Down
1 change: 0 additions & 1 deletion qiskit/quantum_info/random.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@
random_pauli_list,
random_pauli_table,
random_quantum_channel,
random_stabilizer_table,
random_unitary,
)
from qiskit.quantum_info.states.random import random_density_matrix, random_statevector
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
---
upgrade:
- |
The method :meth:`qiskit.quantum_info.pauli_basis`
does not accept `pauli_list` argument any more.
It was deprecated in Qiskit 0.39 (with Terra 0.22), released on Oct 2022.

- |
The function ``random_stabilizer_table``
in the class :class:`qiskit.quantum_info.random` is removed.
It was deprecated in Qiskit 0.39 (with Terra 0.22), released on Oct 2022.
Instead, use :func:``qiskit.quantum_info.random.random_pauli_list``.
39 changes: 0 additions & 39 deletions test/python/quantum_info/operators/test_random.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@
Operator,
PauliList,
PauliTable,
StabilizerTable,
Stinespring,
)
from qiskit.quantum_info.operators.predicates import is_hermitian_matrix
Expand All @@ -34,7 +33,6 @@
random_pauli_list,
random_pauli_table,
random_quantum_channel,
random_stabilizer_table,
random_unitary,
)
from qiskit.test import QiskitTestCase
Expand Down Expand Up @@ -284,42 +282,5 @@ def test_not_global_seed(self):
self.assertFalse(np.all(rng_before == rng_after))


@ddt
class TestRandomStabilizerTable(QiskitTestCase):
"""Testing random_stabilizer_table function."""

@combine(num_qubits=[1, 2, 3, 4, 5, 10, 50, 100, 200, 250], size=[1, 10, 100])
def test_valid(self, num_qubits, size):
"""Test random_stabilizer_table {num_qubits}-qubits, size {size}."""
with self.assertWarns(DeprecationWarning):
value = random_stabilizer_table(num_qubits, size=size)
with self.subTest(msg="Test type"):
self.assertIsInstance(value, StabilizerTable)
with self.subTest(msg="Test num_qubits"):
self.assertEqual(value.num_qubits, num_qubits)
with self.subTest(msg="Test type"):
self.assertEqual(len(value), size)

def test_fixed_seed(self):
"""Test fixing seed fixes output"""
seed = 1532
with self.assertWarns(DeprecationWarning):
value1 = random_stabilizer_table(10, size=10, seed=seed)
value2 = random_stabilizer_table(10, size=10, seed=seed)
self.assertEqual(value1, value2)

def test_not_global_seed(self):
"""Test fixing random_hermitian seed is locally scoped."""
seed = 314159
test_cases = 100
with self.assertWarns(DeprecationWarning):
random_stabilizer_table(10, size=10, seed=seed)
rng_before = np.random.randint(1000, size=test_cases)
with self.assertWarns(DeprecationWarning):
random_stabilizer_table(10, seed=seed)
rng_after = np.random.randint(1000, size=test_cases)
self.assertFalse(np.all(rng_before == rng_after))


if __name__ == "__main__":
unittest.main()