summarylogtreecommitdiffstats
diff options
context:
space:
mode:
authorIyán Méndez Veiga2022-11-22 22:51:50 +0100
committerIyán Méndez Veiga2022-11-22 22:51:50 +0100
commit30455f1cc25e6c88b026db9d5875d2f3a1bf75b1 (patch)
treec810c37f63dd6af5407364734316819244c73a92
parent65a219f8ecea74cb55ebdcd4a386eebe746862e9 (diff)
downloadaur-30455f1cc25e6c88b026db9d5875d2f3a1bf75b1.tar.gz
upgpkg: python-qiskit-terra 0.22.2-1
upstream release
-rw-r--r--.SRCINFO10
-rw-r--r--PKGBUILD19
-rw-r--r--rustworkx.patch773
3 files changed, 794 insertions, 8 deletions
diff --git a/.SRCINFO b/.SRCINFO
index c57ab3d3c4de..45aac6fadf3a 100644
--- a/.SRCINFO
+++ b/.SRCINFO
@@ -1,6 +1,6 @@
pkgbase = python-qiskit-terra
pkgdesc = An open-source framework for working with noisy quantum computers at the level of pulses, circuits, and algorithms
- pkgver = 0.22.0
+ pkgver = 0.22.2
pkgrel = 1
url = https://github.com/Qiskit/qiskit-terra
arch = x86_64
@@ -16,7 +16,7 @@ pkgbase = python-qiskit-terra
depends = python-numpy
depends = python-ply
depends = python-psutil
- depends = python-retworkx
+ depends = python-rustworkx
depends = python-scipy
depends = python-stevedore
depends = python-symengine
@@ -32,7 +32,9 @@ pkgbase = python-qiskit-terra
optdepends = python-pygments: syntax highlighter
optdepends = python-pylatexenc: LaTeX support
optdepends = python-seaborn: statistical data visualization
- source = qiskit-terra-0.22.0.tar.gz::https://github.com/Qiskit/qiskit-terra/archive/0.22.0.tar.gz
- b2sums = 208f554de7fd6c11e76879a8c4c08f27859f1dd729494c3ab372e73e5205def0f97a5dac16bd26f632a80428d5ead1797509f67e78983eebdc34d092158a5124
+ source = qiskit-terra-0.22.2.tar.gz::https://github.com/Qiskit/qiskit-terra/archive/0.22.2.tar.gz
+ source = rustworkx.patch
+ b2sums = 2bc25a93e573fa9fa464f3cac5df2fefd0cbb372ff718e4ddc55ea377a1cb532002c1589b1ee551ceeb3fa2b5ba5c49f1a749ec86e85578e64e69e642558ba6a
+ b2sums = 94133e4479ad918a8b40bdb53c91e44f2cd5eb85ed3831b559e643f3cf5b985ad11fa27bb16096995e59af67611902595e0e6b10f2b71e8624ff8eadb9a36a1f
pkgname = python-qiskit-terra
diff --git a/PKGBUILD b/PKGBUILD
index 01b1f19f3161..adeede44b97e 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -1,7 +1,7 @@
# Maintainer: Iyán Méndez Veiga <me (at) iyanmv (dot) com>
_pkgname=qiskit-terra
pkgname=python-${_pkgname}
-pkgver=0.22.0
+pkgver=0.22.2
pkgrel=1
pkgdesc="An open-source framework for working with noisy quantum computers at the level of pulses, circuits, and algorithms"
arch=('x86_64')
@@ -14,7 +14,7 @@ depends=(
'python-numpy'
'python-ply'
'python-psutil'
- 'python-retworkx'
+ 'python-rustworkx'
'python-scipy'
'python-stevedore'
'python-symengine'
@@ -42,8 +42,19 @@ makedepends=(
'python-setuptools-rust'
'python-wheel'
)
-source=("${_pkgname}-${pkgver}.tar.gz::https://github.com/Qiskit/${_pkgname}/archive/${pkgver}.tar.gz")
-b2sums=('208f554de7fd6c11e76879a8c4c08f27859f1dd729494c3ab372e73e5205def0f97a5dac16bd26f632a80428d5ead1797509f67e78983eebdc34d092158a5124')
+source=(
+ "${_pkgname}-${pkgver}.tar.gz::https://github.com/Qiskit/${_pkgname}/archive/${pkgver}.tar.gz"
+ "rustworkx.patch"
+)
+b2sums=(
+ '2bc25a93e573fa9fa464f3cac5df2fefd0cbb372ff718e4ddc55ea377a1cb532002c1589b1ee551ceeb3fa2b5ba5c49f1a749ec86e85578e64e69e642558ba6a'
+ '94133e4479ad918a8b40bdb53c91e44f2cd5eb85ed3831b559e643f3cf5b985ad11fa27bb16096995e59af67611902595e0e6b10f2b71e8624ff8eadb9a36a1f'
+)
+
+prepare() {
+ cd "${srcdir}/${_pkgname}-${pkgver}"
+ patch --forward --strip=1 --input="${srcdir}/rustworkx.patch"
+}
build() {
cd "${srcdir}/${_pkgname}-${pkgver}"
diff --git a/rustworkx.patch b/rustworkx.patch
new file mode 100644
index 000000000000..25ab2d45ed7f
--- /dev/null
+++ b/rustworkx.patch
@@ -0,0 +1,773 @@
+diff --git a/Cargo.lock b/Cargo.lock
+index dcf0546e4..bd99bc8ac 100644
+--- a/Cargo.lock
++++ b/Cargo.lock
+@@ -319,6 +319,16 @@ version = "0.2.16"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ checksum = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872"
+
++[[package]]
++name = "priority-queue"
++version = "1.2.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "cf40e51ccefb72d42720609e1d3c518de8b5800d723a09358d4a6d6245e1f8ca"
++dependencies = [
++ "autocfg",
++ "indexmap",
++]
++
+ [[package]]
+ name = "proc-macro2"
+ version = "1.0.47"
+@@ -407,7 +417,7 @@ dependencies = [
+ "rand_distr",
+ "rand_pcg",
+ "rayon",
+- "retworkx-core",
++ "rustworkx-core",
+ ]
+
+ [[package]]
+@@ -508,15 +518,18 @@ dependencies = [
+ ]
+
+ [[package]]
+-name = "retworkx-core"
+-version = "0.11.0"
++name = "rustworkx-core"
++version = "0.12.0"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "353bcdcdab6c754ea32bce39ee7a763c8a3c16c91a8dd648befd14fbcb0d5b68"
++checksum = "23f8a8866a33f4f8b06ed2a4120d3c08a0be63a9c18a53b4238e53922edfc953"
+ dependencies = [
+ "ahash 0.7.6",
++ "fixedbitset",
+ "hashbrown 0.11.2",
+ "indexmap",
++ "num-traits",
+ "petgraph",
++ "priority-queue",
+ "rayon",
+ ]
+
+diff --git a/Cargo.toml b/Cargo.toml
+index a65bf6dd7..9088c8470 100644
+--- a/Cargo.toml
++++ b/Cargo.toml
+@@ -18,7 +18,7 @@ rand_distr = "0.4.3"
+ ahash = "0.8.0"
+ num-complex = "0.4"
+ num-bigint = "0.4"
+-retworkx-core = "0.11"
++rustworkx-core = "0.12"
+
+ [dependencies.pyo3]
+ version = "0.17.2"
+diff --git a/qiskit/circuit/equivalence.py b/qiskit/circuit/equivalence.py
+index 381297e45..80731a3dc 100644
+--- a/qiskit/circuit/equivalence.py
++++ b/qiskit/circuit/equivalence.py
+@@ -14,8 +14,8 @@
+
+ from collections import namedtuple
+
+-from retworkx.visualization import graphviz_draw # pylint: disable=no-name-in-module,import-error
+-import retworkx as rx
++from rustworkx.visualization import graphviz_draw # pylint: disable=no-name-in-module
++import rustworkx as rx
+
+ from qiskit.exceptions import InvalidFileError
+ from .exceptions import CircuitError
+diff --git a/qiskit/circuit/library/graph_state.py b/qiskit/circuit/library/graph_state.py
+index f811bea83..aeb2e8cb5 100644
+--- a/qiskit/circuit/library/graph_state.py
++++ b/qiskit/circuit/library/graph_state.py
+@@ -44,7 +44,7 @@ class GraphState(QuantumCircuit):
+
+ from qiskit.circuit.library import GraphState
+ import qiskit.tools.jupyter
+- import retworkx as rx
++ import rustworkx as rx
+ G = rx.generators.cycle_graph(5)
+ circuit = GraphState(rx.adjacency_matrix(G))
+ %circuit_library_info circuit
+diff --git a/qiskit/dagcircuit/dagcircuit.py b/qiskit/dagcircuit/dagcircuit.py
+index 721497775..df5ed3cc5 100644
+--- a/qiskit/dagcircuit/dagcircuit.py
++++ b/qiskit/dagcircuit/dagcircuit.py
+@@ -26,7 +26,7 @@ import itertools
+ import math
+
+ import numpy as np
+-import retworkx as rx
++import rustworkx as rx
+
+ from qiskit.circuit import ControlFlowOp, ForLoopOp, IfElseOp, WhileLoopOp
+ from qiskit.circuit.exceptions import CircuitError
+@@ -1289,7 +1289,7 @@ class DAGCircuit:
+ self.global_phase += in_dag.global_phase
+
+ # Add wire from pred to succ if no ops on mapped wire on ``in_dag``
+- # retworkx's substitute_node_with_subgraph lacks the DAGCircuit
++ # rustworkx's substitute_node_with_subgraph lacks the DAGCircuit
+ # context to know what to do in this case (the method won't even see
+ # these nodes because they're filtered) so we manually retain the
+ # edges prior to calling substitute_node_with_subgraph and set the
+@@ -1325,8 +1325,8 @@ class DAGCircuit:
+ wire_output_id = in_dag.output_map[wire]._node_id
+ out_index = in_dag._multi_graph.predecessor_indices(wire_output_id)[0]
+ # Edge directly from from input nodes to output nodes in in_dag are
+- # already handled prior to calling retworkx. Don't map these edges
+- # in retworkx.
++ # already handled prior to calling rustworkx. Don't map these edges
++ # in rustworkx.
+ if not isinstance(in_dag._multi_graph[out_index], DAGOpNode):
+ return None
+ # predecessor edge
+@@ -1334,8 +1334,8 @@ class DAGCircuit:
+ wire_input_id = in_dag.input_map[wire]._node_id
+ out_index = in_dag._multi_graph.successor_indices(wire_input_id)[0]
+ # Edge directly from from input nodes to output nodes in in_dag are
+- # already handled prior to calling retworkx. Don't map these edges
+- # in retworkx.
++ # already handled prior to calling rustworkx. Don't map these edges
++ # in rustworkx.
+ if not isinstance(in_dag._multi_graph[out_index], DAGOpNode):
+ return None
+ return out_index
+diff --git a/qiskit/dagcircuit/dagdependency.py b/qiskit/dagcircuit/dagdependency.py
+index f9fb8b758..b09f92764 100644
+--- a/qiskit/dagcircuit/dagdependency.py
++++ b/qiskit/dagcircuit/dagdependency.py
+@@ -18,7 +18,7 @@ import heapq
+ from collections import OrderedDict, defaultdict
+ import warnings
+
+-import retworkx as rx
++import rustworkx as rx
+
+ from qiskit.circuit.quantumregister import QuantumRegister, Qubit
+ from qiskit.circuit.classicalregister import ClassicalRegister, Clbit
+diff --git a/qiskit/opflow/converters/abelian_grouper.py b/qiskit/opflow/converters/abelian_grouper.py
+index ec27ef523..1b8b51616 100644
+--- a/qiskit/opflow/converters/abelian_grouper.py
++++ b/qiskit/opflow/converters/abelian_grouper.py
+@@ -16,7 +16,7 @@ from collections import defaultdict
+ from typing import List, Tuple, Union, cast
+
+ import numpy as np
+-import retworkx as rx
++import rustworkx as rx
+
+ from qiskit.opflow.converters.converter_base import ConverterBase
+ from qiskit.opflow.evolutions.evolved_op import EvolvedOp
+diff --git a/qiskit/pulse/schedule.py b/qiskit/pulse/schedule.py
+index 9d0561c11..5355c5364 100644
+--- a/qiskit/pulse/schedule.py
++++ b/qiskit/pulse/schedule.py
+@@ -42,7 +42,7 @@ import warnings
+ from typing import List, Tuple, Iterable, Union, Dict, Callable, Set, Optional, Any
+
+ import numpy as np
+-import retworkx as rx
++import rustworkx as rx
+
+ from qiskit.circuit.parameter import Parameter
+ from qiskit.circuit.parameterexpression import ParameterExpression, ParameterValueType
+diff --git a/qiskit/pulse/transforms/dag.py b/qiskit/pulse/transforms/dag.py
+index 4756cb98e..41f354476 100644
+--- a/qiskit/pulse/transforms/dag.py
++++ b/qiskit/pulse/transforms/dag.py
+@@ -11,7 +11,7 @@
+ # that they have been altered from the originals.
+ """A collection of functions to convert ScheduleBlock to DAG representation."""
+
+-import retworkx as rx
++import rustworkx as rx
+
+ from qiskit.pulse.exceptions import UnassignedReferenceError
+
+diff --git a/qiskit/quantum_info/operators/symplectic/pauli_list.py b/qiskit/quantum_info/operators/symplectic/pauli_list.py
+index 293e0a641..3cf7f0399 100644
+--- a/qiskit/quantum_info/operators/symplectic/pauli_list.py
++++ b/qiskit/quantum_info/operators/symplectic/pauli_list.py
+@@ -16,7 +16,7 @@ Optimized list of Pauli operators
+ from collections import defaultdict
+
+ import numpy as np
+-import retworkx as rx
++import rustworkx as rx
+
+ from qiskit.exceptions import QiskitError
+ from qiskit.quantum_info.operators.custom_iterator import CustomIterator
+@@ -1109,7 +1109,7 @@ class PauliList(BasePauli, LinearMixin, GroupMixin):
+ or on a per-qubit basis.
+
+ Returns:
+- retworkx.PyGraph: A class of undirected graphs
++ rustworkx.PyGraph: A class of undirected graphs
+ """
+
+ edges = self._noncommutation_graph(qubit_wise)
+diff --git a/qiskit/quantum_info/operators/symplectic/sparse_pauli_op.py b/qiskit/quantum_info/operators/symplectic/sparse_pauli_op.py
+index dd2ac3bc6..f9b3b50f6 100644
+--- a/qiskit/quantum_info/operators/symplectic/sparse_pauli_op.py
++++ b/qiskit/quantum_info/operators/symplectic/sparse_pauli_op.py
+@@ -18,7 +18,7 @@ from numbers import Number
+ from typing import Dict, Optional
+
+ import numpy as np
+-import retworkx as rx
++import rustworkx as rx
+
+ from qiskit._accelerate.sparse_pauli_op import unordered_unique # pylint: disable=import-error
+ from qiskit.exceptions import QiskitError
+@@ -930,7 +930,7 @@ class SparsePauliOp(LinearOp):
+ or on a per-qubit basis.
+
+ Returns:
+- retworkx.PyGraph: A class of undirected graphs
++ rustworkx.PyGraph: A class of undirected graphs
+ """
+
+ edges = self.paulis._noncommutation_graph(qubit_wise)
+diff --git a/qiskit/transpiler/coupling.py b/qiskit/transpiler/coupling.py
+index ddc93191f..1fac676a4 100644
+--- a/qiskit/transpiler/coupling.py
++++ b/qiskit/transpiler/coupling.py
+@@ -22,8 +22,8 @@ onto a device with this coupling.
+ import warnings
+
+ import numpy as np
+-import retworkx as rx
+-from retworkx.visualization import graphviz_draw # pylint: disable=no-name-in-module,import-error
++import rustworkx as rx
++from rustworkx.visualization import graphviz_draw # pylint: disable=no-name-in-module
+
+ from qiskit.transpiler.exceptions import CouplingError
+
+@@ -409,8 +409,8 @@ class CouplingMap:
+ def draw(self):
+ """Draws the coupling map.
+
+- This function calls the :func:`~retworkx.visualization.graphviz_draw` function from the
+- ``retworkx`` package to draw the :class:`CouplingMap` object.
++ This function calls the :func:`~rustworkx.visualization.graphviz_draw` function from the
++ ``rustworkx`` package to draw the :class:`CouplingMap` object.
+
+ Returns:
+ PIL.Image: Drawn coupling map.
+diff --git a/qiskit/transpiler/passes/basis/basis_translator.py b/qiskit/transpiler/passes/basis/basis_translator.py
+index 004371c12..8cba722ee 100644
+--- a/qiskit/transpiler/passes/basis/basis_translator.py
++++ b/qiskit/transpiler/passes/basis/basis_translator.py
+@@ -21,7 +21,7 @@ from itertools import zip_longest
+ from collections import defaultdict
+ from functools import singledispatch
+
+-import retworkx
++import rustworkx
+
+ from qiskit.circuit import Gate, ParameterVector, QuantumRegister, ControlFlowOp, QuantumCircuit
+ from qiskit.dagcircuit import DAGCircuit
+@@ -365,11 +365,11 @@ def _(circ: QuantumCircuit):
+
+
+ class StopIfBasisRewritable(Exception):
+- """Custom exception that signals `retworkx.dijkstra_search` to stop."""
++ """Custom exception that signals `rustworkx.dijkstra_search` to stop."""
+
+
+-class BasisSearchVisitor(retworkx.visit.DijkstraVisitor): # pylint: disable=no-member
+- """Handles events emitted during `retworkx.dijkstra_search`."""
++class BasisSearchVisitor(rustworkx.visit.DijkstraVisitor): # pylint: disable=no-member
++ """Handles events emitted during `rustworkx.dijkstra_search`."""
+
+ def __init__(self, graph, source_basis, target_basis, num_gates_for_rule):
+ self.graph = graph
+@@ -414,7 +414,7 @@ class BasisSearchVisitor(retworkx.visit.DijkstraVisitor): # pylint: disable=no-
+ # if there are gates in this `rule` that we have not yet generated, we can't apply
+ # this `rule`. if `target` is already in basis, it's not beneficial to use this rule.
+ if self._num_gates_remain_for_rule[index] > 0 or target in self.target_basis:
+- raise retworkx.visit.PruneSearch # pylint: disable=no-member
++ raise rustworkx.visit.PruneSearch # pylint: disable=no-member
+
+ def edge_relaxed(self, edge):
+ _, target, edata = edge
+@@ -480,7 +480,7 @@ def _basis_search(equiv_lib, source_basis, target_basis):
+
+ all_gates_in_lib = set()
+
+- graph = retworkx.PyDiGraph()
++ graph = rustworkx.PyDiGraph()
+ nodes_to_indices = dict()
+ num_gates_for_rule = dict()
+
+@@ -527,7 +527,7 @@ def _basis_search(equiv_lib, source_basis, target_basis):
+ graph.add_edges_from_no_data([(dummy, nodes_to_indices[key]) for key in target_basis_keys])
+ rtn = None
+ try:
+- retworkx.digraph_dijkstra_search(graph, [dummy], vis.edge_cost, vis)
++ rustworkx.digraph_dijkstra_search(graph, [dummy], vis.edge_cost, vis)
+ except StopIfBasisRewritable:
+ rtn = vis.basis_transforms
+
+diff --git a/qiskit/transpiler/passes/layout/dense_layout.py b/qiskit/transpiler/passes/layout/dense_layout.py
+index 6b75b6d09..59be8ad5f 100644
+--- a/qiskit/transpiler/passes/layout/dense_layout.py
++++ b/qiskit/transpiler/passes/layout/dense_layout.py
+@@ -14,7 +14,7 @@
+
+
+ import numpy as np
+-import retworkx
++import rustworkx
+
+ from qiskit.transpiler.layout import Layout
+ from qiskit.transpiler.basepasses import AnalysisPass
+@@ -53,12 +53,12 @@ class DenseLayout(AnalysisPass):
+ num_qubits = target.num_qubits
+ self.coupling_map = target.build_coupling_map()
+ if self.coupling_map is not None:
+- self.adjacency_matrix = retworkx.adjacency_matrix(self.coupling_map.graph)
++ self.adjacency_matrix = rustworkx.adjacency_matrix(self.coupling_map.graph)
+ self.error_mat, self._use_error = _build_error_matrix(num_qubits, target=target)
+ else:
+ if self.coupling_map:
+ num_qubits = self.coupling_map.size()
+- self.adjacency_matrix = retworkx.adjacency_matrix(self.coupling_map.graph)
++ self.adjacency_matrix = rustworkx.adjacency_matrix(self.coupling_map.graph)
+ self.error_mat, self._use_error = _build_error_matrix(
+ num_qubits, backend_prop=self.backend_prop, coupling_map=self.coupling_map
+ )
+diff --git a/qiskit/transpiler/passes/layout/noise_adaptive_layout.py b/qiskit/transpiler/passes/layout/noise_adaptive_layout.py
+index 046452074..f8dcc566d 100644
+--- a/qiskit/transpiler/passes/layout/noise_adaptive_layout.py
++++ b/qiskit/transpiler/passes/layout/noise_adaptive_layout.py
+@@ -14,7 +14,7 @@
+
+ import math
+
+-import retworkx as rx
++import rustworkx as rx
+
+ from qiskit.transpiler.layout import Layout
+ from qiskit.transpiler.basepasses import AnalysisPass
+diff --git a/qiskit/transpiler/passes/layout/vf2_layout.py b/qiskit/transpiler/passes/layout/vf2_layout.py
+index b20ca0cf9..5362b5397 100644
+--- a/qiskit/transpiler/passes/layout/vf2_layout.py
++++ b/qiskit/transpiler/passes/layout/vf2_layout.py
+@@ -15,7 +15,7 @@ from enum import Enum
+ import logging
+ import time
+
+-from retworkx import vf2_mapping
++from rustworkx import vf2_mapping
+
+ from qiskit.transpiler.layout import Layout
+ from qiskit.transpiler.basepasses import AnalysisPass
+diff --git a/qiskit/transpiler/passes/layout/vf2_post_layout.py b/qiskit/transpiler/passes/layout/vf2_post_layout.py
+index fb346d6e5..5b3b8361b 100644
+--- a/qiskit/transpiler/passes/layout/vf2_post_layout.py
++++ b/qiskit/transpiler/passes/layout/vf2_post_layout.py
+@@ -16,7 +16,7 @@ import logging
+ import inspect
+ import time
+
+-from retworkx import PyDiGraph, vf2_mapping, PyGraph
++from rustworkx import PyDiGraph, vf2_mapping, PyGraph
+
+ from qiskit.transpiler.layout import Layout
+ from qiskit.transpiler.basepasses import AnalysisPass
+diff --git a/qiskit/transpiler/passes/layout/vf2_utils.py b/qiskit/transpiler/passes/layout/vf2_utils.py
+index 950b2447d..667a770a0 100644
+--- a/qiskit/transpiler/passes/layout/vf2_utils.py
++++ b/qiskit/transpiler/passes/layout/vf2_utils.py
+@@ -16,7 +16,7 @@ from collections import defaultdict
+ import statistics
+ import random
+
+-from retworkx import PyDiGraph, PyGraph
++from rustworkx import PyDiGraph, PyGraph
+
+ from qiskit.circuit import ControlFlowOp, ForLoopOp
+ from qiskit.converters import circuit_to_dag
+diff --git a/qiskit/transpiler/passes/routing/algorithms/token_swapper.py b/qiskit/transpiler/passes/routing/algorithms/token_swapper.py
+index 7f5f9fcc7..63dd1e1f0 100644
+--- a/qiskit/transpiler/passes/routing/algorithms/token_swapper.py
++++ b/qiskit/transpiler/passes/routing/algorithms/token_swapper.py
+@@ -31,7 +31,7 @@ import logging
+ from typing import Iterator, Mapping, MutableMapping, MutableSet, List, Iterable, Union
+
+ import numpy as np
+-import retworkx as rx
++import rustworkx as rx
+
+ from .types import Swap, Permutation
+ from .util import PermutationCircuit, permutation_circuit
+diff --git a/qiskit/transpiler/passes/routing/sabre_swap.py b/qiskit/transpiler/passes/routing/sabre_swap.py
+index a2d749b69..c5f8bbf90 100644
+--- a/qiskit/transpiler/passes/routing/sabre_swap.py
++++ b/qiskit/transpiler/passes/routing/sabre_swap.py
+@@ -16,7 +16,7 @@ import logging
+ from copy import copy, deepcopy
+
+ import numpy as np
+-import retworkx
++import rustworkx
+
+ from qiskit.circuit.library.standard_gates import SwapGate
+ from qiskit.transpiler.basepasses import TransformationPass
+@@ -148,7 +148,9 @@ class SabreSwap(TransformationPass):
+ self.coupling_map.make_symmetric()
+ self._neighbor_table = None
+ if coupling_map is not None:
+- self._neighbor_table = NeighborTable(retworkx.adjacency_matrix(self.coupling_map.graph))
++ self._neighbor_table = NeighborTable(
++ rustworkx.adjacency_matrix(self.coupling_map.graph)
++ )
+
+ self.heuristic = heuristic
+
+diff --git a/qiskit/transpiler/preset_passmanagers/common.py b/qiskit/transpiler/preset_passmanagers/common.py
+index b44125986..d77c644f7 100644
+--- a/qiskit/transpiler/preset_passmanagers/common.py
++++ b/qiskit/transpiler/preset_passmanagers/common.py
+@@ -510,9 +510,9 @@ def get_vf2_call_limit(
+ vf2_call_limit = None
+ if layout_method is None and initial_layout is None:
+ if optimization_level == 1:
+- vf2_call_limit = int(5e4) # Set call limit to ~100ms with retworkx 0.10.2
++ vf2_call_limit = int(5e4) # Set call limit to ~100ms with rustworkx 0.10.2
+ elif optimization_level == 2:
+- vf2_call_limit = int(5e6) # Set call limit to ~10 sec with retworkx 0.10.2
++ vf2_call_limit = int(5e6) # Set call limit to ~10 sec with rustworkx 0.10.2
+ elif optimization_level == 3:
+- vf2_call_limit = int(3e7) # Set call limit to ~60 sec with retworkx 0.10.2
++ vf2_call_limit = int(3e7) # Set call limit to ~60 sec with rustworkx 0.10.2
+ return vf2_call_limit
+diff --git a/qiskit/transpiler/preset_passmanagers/level1.py b/qiskit/transpiler/preset_passmanagers/level1.py
+index 6268b3dc6..37da850d7 100644
+--- a/qiskit/transpiler/preset_passmanagers/level1.py
++++ b/qiskit/transpiler/preset_passmanagers/level1.py
+@@ -127,7 +127,7 @@ def level_1_pass_manager(pass_manager_config: PassManagerConfig) -> StagedPassMa
+ else VF2Layout(
+ coupling_map,
+ seed=seed_transpiler,
+- call_limit=int(5e4), # Set call limit to ~100ms with retworkx 0.10.2
++ call_limit=int(5e4), # Set call limit to ~100ms with rustworkx 0.10.2
+ properties=backend_properties,
+ target=target,
+ )
+diff --git a/qiskit/transpiler/preset_passmanagers/level2.py b/qiskit/transpiler/preset_passmanagers/level2.py
+index 240869d60..1c11193ef 100644
+--- a/qiskit/transpiler/preset_passmanagers/level2.py
++++ b/qiskit/transpiler/preset_passmanagers/level2.py
+@@ -117,7 +117,7 @@ def level_2_pass_manager(pass_manager_config: PassManagerConfig) -> StagedPassMa
+ else VF2Layout(
+ coupling_map,
+ seed=seed_transpiler,
+- call_limit=int(5e6), # Set call limit to ~10 sec with retworkx 0.10.2
++ call_limit=int(5e6), # Set call limit to ~10 sec with rustworkx 0.10.2
+ properties=backend_properties,
+ target=target,
+ )
+diff --git a/qiskit/transpiler/preset_passmanagers/level3.py b/qiskit/transpiler/preset_passmanagers/level3.py
+index 5e1f5b979..fdb8bec93 100644
+--- a/qiskit/transpiler/preset_passmanagers/level3.py
++++ b/qiskit/transpiler/preset_passmanagers/level3.py
+@@ -123,7 +123,7 @@ def level_3_pass_manager(pass_manager_config: PassManagerConfig) -> StagedPassMa
+ else VF2Layout(
+ coupling_map,
+ seed=seed_transpiler,
+- call_limit=int(3e7), # Set call limit to ~60 sec with retworkx 0.10.2
++ call_limit=int(3e7), # Set call limit to ~60 sec with rustworkx 0.10.2
+ properties=backend_properties,
+ target=target,
+ )
+diff --git a/qiskit/transpiler/target.py b/qiskit/transpiler/target.py
+index ee4f88991..b2fbe90d3 100644
+--- a/qiskit/transpiler/target.py
++++ b/qiskit/transpiler/target.py
+@@ -24,7 +24,7 @@ import io
+ import logging
+ import inspect
+
+-import retworkx as rx
++import rustworkx as rx
+
+ from qiskit.circuit.parameter import Parameter
+ from qiskit.pulse.instruction_schedule_map import InstructionScheduleMap
+diff --git a/qiskit/visualization/dag_visualization.py b/qiskit/visualization/dag_visualization.py
+index a0d0ef7c2..e73e7b34e 100644
+--- a/qiskit/visualization/dag_visualization.py
++++ b/qiskit/visualization/dag_visualization.py
+@@ -15,8 +15,7 @@
+ """
+ Visualization function for DAG circuit representation.
+ """
+-from retworkx.visualization import graphviz_draw # pylint: disable=no-name-in-module,import-error
+-
++from rustworkx.visualization import graphviz_draw # pylint: disable=no-name-in-module
+ from qiskit.dagcircuit.dagnode import DAGOpNode, DAGInNode, DAGOutNode
+ from qiskit.circuit import Qubit
+ from qiskit.utils import optionals as _optionals
+@@ -29,8 +28,8 @@ def dag_drawer(dag, scale=0.7, filename=None, style="color"):
+ """Plot the directed acyclic graph (dag) to represent operation dependencies
+ in a quantum circuit.
+
+- This function calls the :func:`~retworkx.visualization.graphviz_draw` function from the ``retworkx``
+- package to draw the DAG.
++ This function calls the :func:`~rustworkx.visualization.graphviz_draw` function from the
++ ``rustworkx`` package to draw the DAG.
+
+ Args:
+ dag (DAGCircuit): The dag to draw.
+diff --git a/qiskit/visualization/gate_map.py b/qiskit/visualization/gate_map.py
+index 44ce2253f..1c38ef808 100644
+--- a/qiskit/visualization/gate_map.py
++++ b/qiskit/visualization/gate_map.py
+@@ -16,7 +16,7 @@ import math
+ from typing import List
+
+ import numpy as np
+-import retworkx as rx
++import rustworkx as rx
+
+ from qiskit.exceptions import QiskitError
+ from qiskit.utils import optionals as _optionals
+@@ -498,7 +498,7 @@ def plot_gate_map(
+ qubit_coordinates = qubit_coordinates_map.get(num_qubits, None)
+
+ if qubit_coordinates is None:
+- # Replace with planar_layout() when retworkx offers it
++ # Replace with planar_layout() when rustworkx offers it
+ qubit_coordinates_rx = rx.spring_layout(coupling_map.graph, seed=1234)
+ scaling_factor = 10 ** int(math.log10(num_qubits) + 1)
+ qubit_coordinates = [
+diff --git a/releasenotes/notes/rustworkx-not-retworkx-b7c4da600df58701.yaml b/releasenotes/notes/rustworkx-not-retworkx-b7c4da600df58701.yaml
+new file mode 100644
+index 000000000..0a1c5ba44
+--- /dev/null
++++ b/releasenotes/notes/rustworkx-not-retworkx-b7c4da600df58701.yaml
+@@ -0,0 +1,10 @@
++---
++upgrade:
++ - |
++ The ``retworkx`` dependency for Qiskit has been removed and replaced by
++ ``rustworkx`` library. These are the same packages, but ``rustworkx`` is
++ the new name for ``retworkx`` which was renamed as part of their combined
++ 0.12.0 release. If you were previously using retworkx 0.12.0 with Qiskit
++ then you already installed rustworkx (retworkx 0.12.0 was just a redirect
++ shim for backwards compatibility). This change was made to migrate to the
++ new package name which will be the only supported package in the future.
+diff --git a/requirements.txt b/requirements.txt
+index d27187456..eda6daaf6 100644
+--- a/requirements.txt
++++ b/requirements.txt
+@@ -1,4 +1,4 @@
+-retworkx>=0.11.0
++rustworkx>=0.12.0
+ numpy>=1.17
+ ply>=3.10
+ psutil>=5
+diff --git a/src/sabre_swap/mod.rs b/src/sabre_swap/mod.rs
+index 1798a0dd0..eb718fbfc 100644
+--- a/src/sabre_swap/mod.rs
++++ b/src/sabre_swap/mod.rs
+@@ -29,10 +29,10 @@ use rand::prelude::SliceRandom;
+ use rand::prelude::*;
+ use rand_pcg::Pcg64Mcg;
+ use rayon::prelude::*;
+-use retworkx_core::dictmap::*;
+-use retworkx_core::petgraph::prelude::*;
+-use retworkx_core::petgraph::visit::EdgeRef;
+-use retworkx_core::shortest_path::dijkstra;
++use rustworkx_core::dictmap::*;
++use rustworkx_core::petgraph::prelude::*;
++use rustworkx_core::petgraph::visit::EdgeRef;
++use rustworkx_core::shortest_path::dijkstra;
+
+ use crate::getenv_use_multiple_threads;
+ use crate::nlayout::NLayout;
+diff --git a/src/sabre_swap/neighbor_table.rs b/src/sabre_swap/neighbor_table.rs
+index 195875330..7568707da 100644
+--- a/src/sabre_swap/neighbor_table.rs
++++ b/src/sabre_swap/neighbor_table.rs
+@@ -22,7 +22,7 @@ use rayon::prelude::*;
+ /// This object is typically created once from the adjacency matrix of
+ /// a coupling map, for example::
+ ///
+-/// neigh_table = NeighborTable(retworkx.adjacency_matrix(coupling_map.graph))
++/// neigh_table = NeighborTable(rustworkx.adjacency_matrix(coupling_map.graph))
+ ///
+ /// and used solely to represent neighbors of each node in qiskit-terra's rust
+ /// module.
+diff --git a/src/sabre_swap/sabre_dag.rs b/src/sabre_swap/sabre_dag.rs
+index 480dbb003..1992cc3fd 100644
+--- a/src/sabre_swap/sabre_dag.rs
++++ b/src/sabre_swap/sabre_dag.rs
+@@ -13,7 +13,7 @@
+ use hashbrown::{HashMap, HashSet};
+ use numpy::PyReadonlyArray1;
+ use pyo3::prelude::*;
+-use retworkx_core::petgraph::prelude::*;
++use rustworkx_core::petgraph::prelude::*;
+
+ /// A DAG object used to represent the data interactions from a DAGCircuit
+ /// to run the the sabre algorithm. This is structurally identical to the input
+diff --git a/test/python/algorithms/minimum_eigensolvers/test_qaoa.py b/test/python/algorithms/minimum_eigensolvers/test_qaoa.py
+index 8956b7943..071bda4b6 100644
+--- a/test/python/algorithms/minimum_eigensolvers/test_qaoa.py
++++ b/test/python/algorithms/minimum_eigensolvers/test_qaoa.py
+@@ -21,7 +21,7 @@ import numpy as np
+ from scipy.optimize import minimize as scipy_minimize
+ from ddt import ddt, idata, unpack
+
+-import retworkx as rx
++import rustworkx as rx
+
+ from qiskit import QuantumCircuit
+ from qiskit.algorithms.minimum_eigensolvers import QAOA
+diff --git a/test/python/algorithms/test_measure_error_mitigation.py b/test/python/algorithms/test_measure_error_mitigation.py
+index ba9a0d016..39ca299b2 100644
+--- a/test/python/algorithms/test_measure_error_mitigation.py
++++ b/test/python/algorithms/test_measure_error_mitigation.py
+@@ -17,7 +17,7 @@ import unittest
+ from test.python.algorithms import QiskitAlgorithmsTestCase
+ from ddt import ddt, data, unpack
+ import numpy as np
+-import retworkx as rx
++import rustworkx as rx
+ from qiskit import QuantumCircuit, execute
+ from qiskit.quantum_info import Pauli
+ from qiskit.exceptions import QiskitError
+diff --git a/test/python/algorithms/test_qaoa.py b/test/python/algorithms/test_qaoa.py
+index 95064b300..2998c1f17 100644
+--- a/test/python/algorithms/test_qaoa.py
++++ b/test/python/algorithms/test_qaoa.py
+@@ -20,7 +20,7 @@ import math
+ import numpy as np
+ from scipy.optimize import minimize as scipy_minimize
+ from ddt import ddt, idata, unpack
+-import retworkx as rx
++import rustworkx as rx
+
+ from qiskit.algorithms import QAOA
+ from qiskit.algorithms.optimizers import COBYLA, NELDER_MEAD
+diff --git a/test/python/dagcircuit/test_dagcircuit.py b/test/python/dagcircuit/test_dagcircuit.py
+index 3d6fd3f19..ed4e224a7 100644
+--- a/test/python/dagcircuit/test_dagcircuit.py
++++ b/test/python/dagcircuit/test_dagcircuit.py
+@@ -17,7 +17,7 @@ import unittest
+
+ from ddt import ddt, data
+
+-import retworkx as rx
++import rustworkx as rx
+ from numpy import pi
+
+ from qiskit.dagcircuit import DAGCircuit, DAGOpNode, DAGInNode, DAGOutNode
+diff --git a/test/python/dagcircuit/test_dagdependency.py b/test/python/dagcircuit/test_dagdependency.py
+index 0bec2cee3..011584dde 100644
+--- a/test/python/dagcircuit/test_dagdependency.py
++++ b/test/python/dagcircuit/test_dagdependency.py
+@@ -24,7 +24,7 @@ from qiskit.converters import circuit_to_dagdependency
+ from qiskit.test import QiskitTestCase
+
+ try:
+- import retworkx as rx
++ import rustworkx as rx
+ except ImportError:
+ pass
+
+diff --git a/test/python/transpiler/test_token_swapper.py b/test/python/transpiler/test_token_swapper.py
+index d8014614b..24225f4a3 100644
+--- a/test/python/transpiler/test_token_swapper.py
++++ b/test/python/transpiler/test_token_swapper.py
+@@ -28,7 +28,7 @@
+
+ import itertools
+
+-import retworkx as rx
++import rustworkx as rx
+ from numpy import random
+ from qiskit.transpiler.passes.routing.algorithms import ApproximateTokenSwapper
+ from qiskit.transpiler.passes.routing.algorithms import util
+diff --git a/test/python/transpiler/test_vf2_layout.py b/test/python/transpiler/test_vf2_layout.py
+index 15746e2d3..580e1d6fe 100644
+--- a/test/python/transpiler/test_vf2_layout.py
++++ b/test/python/transpiler/test_vf2_layout.py
+@@ -17,7 +17,7 @@ from math import pi
+
+ import ddt
+ import numpy
+-import retworkx
++import rustworkx
+
+ from qiskit import QuantumRegister, QuantumCircuit, ClassicalRegister
+ from qiskit.circuit import ControlFlowOp
+@@ -254,12 +254,12 @@ class TestVF2LayoutLattice(LayoutTestCase):
+
+ def graph_state_from_pygraph(self, graph):
+ """Creates a GraphState circuit from a PyGraph"""
+- adjacency_matrix = retworkx.adjacency_matrix(graph)
++ adjacency_matrix = rustworkx.adjacency_matrix(graph)
+ return GraphState(adjacency_matrix).decompose()
+
+ def test_hexagonal_lattice_graph_20_in_25(self):
+ """A 20x20 interaction map in 25x25 coupling map"""
+- graph_20_20 = retworkx.generators.hexagonal_lattice_graph(20, 20)
++ graph_20_20 = rustworkx.generators.hexagonal_lattice_graph(20, 20)
+ circuit = self.graph_state_from_pygraph(graph_20_20)
+
+ dag = circuit_to_dag(circuit)
+@@ -269,7 +269,7 @@ class TestVF2LayoutLattice(LayoutTestCase):
+
+ def test_hexagonal_lattice_graph_9_in_25(self):
+ """A 9x9 interaction map in 25x25 coupling map"""
+- graph_9_9 = retworkx.generators.hexagonal_lattice_graph(9, 9)
++ graph_9_9 = rustworkx.generators.hexagonal_lattice_graph(9, 9)
+ circuit = self.graph_state_from_pygraph(graph_9_9)
+
+ dag = circuit_to_dag(circuit)
+diff --git a/test/python/transpiler/test_vf2_post_layout.py b/test/python/transpiler/test_vf2_post_layout.py
+index c89dbd8ca..92807ed3e 100644
+--- a/test/python/transpiler/test_vf2_post_layout.py
++++ b/test/python/transpiler/test_vf2_post_layout.py
+@@ -12,7 +12,7 @@
+
+ """Test the VF2Layout pass"""
+
+-import retworkx
++import rustworkx
+
+ from qiskit import QuantumRegister, QuantumCircuit
+ from qiskit.circuit import ControlFlowOp
+@@ -365,7 +365,7 @@ class TestVF2PostLayoutScoring(QiskitTestCase):
+ """Test error rate is 0 for empty circuit."""
+ bit_map = {}
+ reverse_bit_map = {}
+- im_graph = retworkx.PyDiGraph()
++ im_graph = rustworkx.PyDiGraph()
+ backend = FakeYorktownV2()
+ vf2_pass = VF2PostLayout(target=backend.target)
+ layout = Layout()
+@@ -376,7 +376,7 @@ class TestVF2PostLayoutScoring(QiskitTestCase):
+ """Test error rate for all 1q input."""
+ bit_map = {Qubit(): 0, Qubit(): 1}
+ reverse_bit_map = {v: k for k, v in bit_map.items()}
+- im_graph = retworkx.PyDiGraph()
++ im_graph = rustworkx.PyDiGraph()
+ im_graph.add_node({"sx": 1})
+ im_graph.add_node({"sx": 1})
+ backend = FakeYorktownV2()
+@@ -389,7 +389,7 @@ class TestVF2PostLayoutScoring(QiskitTestCase):
+ """Test average scoring for all 1q input."""
+ bit_map = {Qubit(): 0, Qubit(): 1}
+ reverse_bit_map = {v: k for k, v in bit_map.items()}
+- im_graph = retworkx.PyDiGraph()
++ im_graph = rustworkx.PyDiGraph()
+ im_graph.add_node({"sx": 1})
+ im_graph.add_node({"sx": 1})
+ backend = FakeYorktownV2()