diff --git a/Cargo.lock b/Cargo.lock
index e5ca18b7bf44..81ed6660fbf0 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -37,9 +37,9 @@ dependencies = [
[[package]]
name = "allocator-api2"
-version = "0.2.18"
+version = "0.2.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f"
+checksum = "45862d1c77f2228b9e10bc609d5bc203d86ebc9b87ad8d5d5167a6c9abf739d9"
[[package]]
name = "approx"
@@ -126,7 +126,7 @@ checksum = "bcfcc3cd946cb52f0bbfdbbcfa2f4e24f75ebb6c0e1002f7c25904fada18b9ec"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.79",
+ "syn 2.0.87",
]
[[package]]
@@ -181,9 +181,9 @@ checksum = "0570650661aa447e7335f1d5e4f499d8e58796e617bedc9267d971e51c8b49d4"
[[package]]
name = "cpufeatures"
-version = "0.2.14"
+version = "0.2.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "608697df725056feaccfa42cffdaeeec3fccc4ffc38358ecd19b243e716a78e0"
+checksum = "0ca741a962e1b0bff6d724a1a0958b686406e853bb14061f218562e1896f95e6"
dependencies = [
"libc",
]
@@ -276,7 +276,7 @@ dependencies = [
"heck",
"proc-macro2",
"quote",
- "syn 2.0.79",
+ "syn 2.0.87",
]
[[package]]
@@ -305,7 +305,7 @@ checksum = "3bf679796c0322556351f287a51b49e48f7c4986e727b5dd78c972d30e2e16cc"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.79",
+ "syn 2.0.87",
]
[[package]]
@@ -316,7 +316,7 @@ checksum = "5322a90066ddae2b705096eb9e10c465c0498ae93bf9bdd6437415327c88e3bb"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.79",
+ "syn 2.0.87",
]
[[package]]
@@ -558,9 +558,9 @@ dependencies = [
[[package]]
name = "hashbrown"
-version = "0.15.0"
+version = "0.15.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1e087f84d4f86bf4b218b927129862374b72199ae7d8657835f1e89000eea4fb"
+checksum = "3a9bfc1af68b1726ea47d3d5109de126281def866b33970e10fbab11b5dafab3"
[[package]]
name = "heck"
@@ -581,7 +581,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "707907fe3c25f5424cce2cb7e1cbcafee6bdbe735ca90ef77c29e84591e5b9da"
dependencies = [
"equivalent",
- "hashbrown 0.15.0",
+ "hashbrown 0.15.1",
"rayon",
]
@@ -637,15 +637,15 @@ checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe"
[[package]]
name = "libc"
-version = "0.2.159"
+version = "0.2.162"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "561d97a539a36e26a9a5fad1ea11a3039a67714694aaa379433e580854bc3dc5"
+checksum = "18d287de67fe55fd7e1581fe933d965a5a9477b38e949cfa9f8574ef01506398"
[[package]]
name = "libm"
-version = "0.2.8"
+version = "0.2.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058"
+checksum = "8355be11b20d696c8f18f6cc018c4e372165b1fa8126cef092399c9951984ffa"
[[package]]
name = "matrixcompare"
@@ -931,9 +931,9 @@ checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a"
[[package]]
name = "pest"
-version = "2.7.13"
+version = "2.7.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fdbef9d1d47087a895abd220ed25eb4ad973a5e26f6a4367b038c25e28dfc2d9"
+checksum = "879952a81a83930934cbf1786752d6dedc3b1f29e8f8fb2ad1d0a36f377cf442"
dependencies = [
"memchr",
"thiserror",
@@ -942,9 +942,9 @@ dependencies = [
[[package]]
name = "pest_derive"
-version = "2.7.13"
+version = "2.7.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4d3a6e3394ec80feb3b6393c725571754c6188490265c61aaf260810d6b95aa0"
+checksum = "d214365f632b123a47fd913301e14c946c61d1c183ee245fa76eb752e59a02dd"
dependencies = [
"pest",
"pest_generator",
@@ -952,22 +952,22 @@ dependencies = [
[[package]]
name = "pest_generator"
-version = "2.7.13"
+version = "2.7.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "94429506bde1ca69d1b5601962c73f4172ab4726571a59ea95931218cb0e930e"
+checksum = "eb55586734301717aea2ac313f50b2eb8f60d2fc3dc01d190eefa2e625f60c4e"
dependencies = [
"pest",
"pest_meta",
"proc-macro2",
"quote",
- "syn 2.0.79",
+ "syn 2.0.87",
]
[[package]]
name = "pest_meta"
-version = "2.7.13"
+version = "2.7.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ac8a071862e93690b6e34e9a5fb8e33ff3734473ac0245b27232222c4906a33f"
+checksum = "b75da2a70cf4d9cb76833c990ac9cd3923c9a8905a8929789ce347c84564d03d"
dependencies = [
"once_cell",
"pest",
@@ -1036,9 +1036,9 @@ dependencies = [
[[package]]
name = "proc-macro2"
-version = "1.0.87"
+version = "1.0.89"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b3e4daa0dcf6feba26f985457cdf104d4b4256fc5a09547140f3631bb076b19a"
+checksum = "f139b0662de085916d1fb67d2b4169d1addddda1919e696f3252b740b629986e"
dependencies = [
"unicode-ident",
]
@@ -1064,7 +1064,7 @@ checksum = "d315b3197b780e4873bc0e11251cb56a33f65a6032a3d39b8d1405c255513766"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.79",
+ "syn 2.0.87",
]
[[package]]
@@ -1132,7 +1132,7 @@ dependencies = [
"proc-macro2",
"pyo3-macros-backend",
"quote",
- "syn 2.0.79",
+ "syn 2.0.87",
]
[[package]]
@@ -1145,7 +1145,7 @@ dependencies = [
"proc-macro2",
"pyo3-build-config",
"quote",
- "syn 2.0.79",
+ "syn 2.0.87",
]
[[package]]
@@ -1350,9 +1350,9 @@ checksum = "03251193000f4bd3b042892be858ee50e8b3719f2b08e5833ac4353724632430"
[[package]]
name = "regex"
-version = "1.11.0"
+version = "1.11.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "38200e5ee88914975b69f657f0801b6f6dccafd44fd9326302a4aaeecfacb1d8"
+checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191"
dependencies = [
"aho-corasick",
"memchr",
@@ -1362,9 +1362,9 @@ dependencies = [
[[package]]
name = "regex-automata"
-version = "0.4.8"
+version = "0.4.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "368758f23274712b504848e9d5a6f010445cc8b87a7cdb4d7cbee666c1288da3"
+checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908"
dependencies = [
"aho-corasick",
"memchr",
@@ -1409,9 +1409,9 @@ dependencies = [
[[package]]
name = "rustversion"
-version = "1.0.17"
+version = "1.0.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6"
+checksum = "0e819f2bc632f285be6d7cd36e25940d45b2391dd6d9b939e79de557f7014248"
[[package]]
name = "rustworkx-core"
@@ -1450,22 +1450,22 @@ checksum = "a3f0bf26fd526d2a95683cd0f87bf103b8539e2ca1ef48ce002d67aad59aa0b4"
[[package]]
name = "serde"
-version = "1.0.210"
+version = "1.0.215"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c8e3592472072e6e22e0a54d5904d9febf8508f65fb8552499a1abc7d1078c3a"
+checksum = "6513c1ad0b11a9376da888e3e0baa0077f1aed55c17f50e7b2397136129fb88f"
dependencies = [
"serde_derive",
]
[[package]]
name = "serde_derive"
-version = "1.0.210"
+version = "1.0.215"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "243902eda00fad750862fc144cea25caca5e20d615af0a81bee94ca738f1df1f"
+checksum = "ad1e866f866923f252f05c889987993144fb74e722403468a4ebd70c3cd756c0"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.79",
+ "syn 2.0.87",
]
[[package]]
@@ -1507,9 +1507,9 @@ dependencies = [
[[package]]
name = "syn"
-version = "2.0.79"
+version = "2.0.87"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "89132cd0bf050864e1d38dc3bbc07a0eb8e7530af26344d3d2bbbef83499f590"
+checksum = "25aa4ce346d03a6dcd68dd8b4010bcb74e54e62c90c573f394c46eae99aba32d"
dependencies = [
"proc-macro2",
"quote",
@@ -1544,22 +1544,22 @@ checksum = "f18aa187839b2bdb1ad2fa35ead8c4c2976b64e4363c386d45ac0f7ee85c9233"
[[package]]
name = "thiserror"
-version = "1.0.65"
+version = "1.0.69"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5d11abd9594d9b38965ef50805c5e469ca9cc6f197f883f717e0269a3057b3d5"
+checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52"
dependencies = [
"thiserror-impl",
]
[[package]]
name = "thiserror-impl"
-version = "1.0.65"
+version = "1.0.69"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ae71770322cbd277e69d762a16c444af02aa0575ac0d174f0b9562d3b37f8602"
+checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.79",
+ "syn 2.0.87",
]
[[package]]
@@ -1828,5 +1828,5 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.79",
+ "syn 2.0.87",
]
diff --git a/docs/conf.py b/docs/conf.py
index 224fde83a1b7..c2ff621c5dec 100644
--- a/docs/conf.py
+++ b/docs/conf.py
@@ -32,7 +32,7 @@
# The short X.Y version
version = "1.3"
# The full version, including alpha/beta/rc tags
-release = "1.3.0rc2"
+release = "1.3.0"
language = "en"
diff --git a/docs/release_notes.rst b/docs/release_notes.rst
index 37e1127c5d8b..2657defd6672 100644
--- a/docs/release_notes.rst
+++ b/docs/release_notes.rst
@@ -10,4 +10,4 @@ Qiskit |version| release notes
`:earliest-version:` should be set to the rc1 release for the current minor release series. For example, the stable/1.1 branch should set it to 1.1.0rc1. If on `main`, set to the prior minor version's rc1, like `1.0.0rc1`.
.. release-notes::
- :earliest-version: 1.1.0rc1
+ :earliest-version: 1.3.0b1
diff --git a/qiskit/VERSION.txt b/qiskit/VERSION.txt
index 3cc9007eeb05..f0bb29e76388 100644
--- a/qiskit/VERSION.txt
+++ b/qiskit/VERSION.txt
@@ -1 +1 @@
-1.3.0rc2
+1.3.0
diff --git a/releasenotes/notes/1.2/add-generate-preset-pm-global-import-efb12f185f3f738b.yaml b/releasenotes/notes/1.2/add-generate-preset-pm-global-import-efb12f185f3f738b.yaml
deleted file mode 100644
index 98c9f64cf2ae..000000000000
--- a/releasenotes/notes/1.2/add-generate-preset-pm-global-import-efb12f185f3f738b.yaml
+++ /dev/null
@@ -1,14 +0,0 @@
----
-features_transpiler:
- - |
- Added a new import path option for :func:`.generate_preset_pass_manager`, so that it can now be imported as::
-
- from qiskit import generate_preset_pass_manager
-
- instead of having to type the full path::
-
- from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager
-
- The function is also importable from the :mod:`qiskit.transpiler` module as::
-
- from qiskit.transpiler import generate_preset_pass_manager
\ No newline at end of file
diff --git a/releasenotes/notes/1.2/add-qft-gate-fd4e08f6721a9da4.yaml b/releasenotes/notes/1.2/add-qft-gate-fd4e08f6721a9da4.yaml
deleted file mode 100644
index 46b60c8b7025..000000000000
--- a/releasenotes/notes/1.2/add-qft-gate-fd4e08f6721a9da4.yaml
+++ /dev/null
@@ -1,22 +0,0 @@
----
-features:
- - |
- Added a new class :class:`~qiskit.circuit.library.QFTGate` for
- natively representing Quantum Fourier Transforms (QFTs). The older way
- of representing QFTs via quantum circuits, see
- :class:`~qiskit.circuit.library.QFT`, remains for backward compatibility.
- The new way of representing a QFT via a gate avoids synthesizing its
- definition circuit when the gate is declared, delaying the actual synthesis to
- the transpiler. It also allows to easily choose between several different
- algorithms for synthesizing QFTs, which are available as high-level-synthesis
- plugins.
- - |
- Added a synthesis method :func:`.synth_qft_full` for constructing a QFT circuit
- assuming a fully-connected architecture.
- - |
- Added two high-level-synthesis plugins for synthesizing a
- :class:`~qiskit.circuit.library.QFTGate`.
- The class :class:`.QFTSynthesisFull` is based on :func:`.synth_qft_full` and synthesizes
- a QFT gate assuming all-to-all connectivity.
- The class :class:`.QFTSynthesisLine` is based on :func:`.synth_qft_line` and synthesizes
- a QFT gate assuming linear nearest neighbor connectivity.
diff --git a/releasenotes/notes/1.2/add-sabre-all-threads-option-ad4ff7a4d045cb2b.yaml b/releasenotes/notes/1.2/add-sabre-all-threads-option-ad4ff7a4d045cb2b.yaml
deleted file mode 100644
index 24b64a28703e..000000000000
--- a/releasenotes/notes/1.2/add-sabre-all-threads-option-ad4ff7a4d045cb2b.yaml
+++ /dev/null
@@ -1,26 +0,0 @@
----
-features_transpiler:
- - |
- Added a new user config file option ``sabre_all_threads`` and a
- corresponding environment variable ``QISKIT_SABRE_ALL_THREADS``. When this
- flag is set the preset pass managers will run the :class:`.SabreLayout`
- and :class:`.SabreSwap` transpiler passes using all the available
- CPUs on the local system. Using this option is a tradeoff between
- determinism of output between different computers and potentially better
- output with fewer :class:`.SwapGate`\s.
-
- These transpiler passes run multiple random trials in parallel and pick
- the output which results in the fewest :class:`.SwapGate`\s. As a rule of
- thumb, if you run more trials, this provides the algorithm more opportunities
- to find a better result. By default, the preset pass managers use a fixed
- number of trials, in this release 5 trials for levels 0 and 1, and 20
- trials for levels 2 and 3, but these numbers may change in future releases
- (and were different in historical releases). Using a fixed number of
- trials results in deterministic results regardless of the local system,
- because even with a fixed seed if you were to default to the number of
- local CPUs available the results would different when running between
- different computers.
-
- If the default number of trials for a given optimization level is higher
- than the number of local CPUs it will use the optimization level default
- which is higher.
diff --git a/releasenotes/notes/1.2/adjust-neato-settings-3adcc0ae9e245ce9.yaml b/releasenotes/notes/1.2/adjust-neato-settings-3adcc0ae9e245ce9.yaml
deleted file mode 100644
index 9dec5debb2ef..000000000000
--- a/releasenotes/notes/1.2/adjust-neato-settings-3adcc0ae9e245ce9.yaml
+++ /dev/null
@@ -1,6 +0,0 @@
----
-fixes:
- - |
- Fixes an issue with the visualizations of some backends/coupling maps that showed as folded on their own. The
- `default ``neato`` setting `_ works well in most cases. However,
- ``prism`` overlap returns a more regular layout for other scenarios.
diff --git a/releasenotes/notes/1.2/annotated-params-116288d5628f7ee8.yaml b/releasenotes/notes/1.2/annotated-params-116288d5628f7ee8.yaml
deleted file mode 100644
index 2f316a06ae8d..000000000000
--- a/releasenotes/notes/1.2/annotated-params-116288d5628f7ee8.yaml
+++ /dev/null
@@ -1,30 +0,0 @@
----
-features_circuits:
- - |
- Added support for :meth:`.AnnotatedOperation.params` and
- :meth:`.AnnotatedOperation.validate_parameter`, which enable
- circuit-level parameter handling (such as binding parameters) for
- annotated operations.
-fixes:
- - |
- Fixed a series of issues when controlling parameterized standard gates.
- The controlled version of some gates (e.g. :class:`.RXXGate` or
- :class:`.RYGate` for more than 1 control) cannot be synthesized if
- they contain unbound parameters. Previously, calling ``.control()`` but
- now we create an :class:`.AnnotatedOperation` as placeholder. This
- allows to insert the controlled gate into a circuit, bind the parameters
- at a later stage, and then synthesize the operation.
- Fixes `#10311 `_,
- `#10697 `_,
- and `#12135 `_.
- - |
- The :class:`.SGate` and :class:`.SdgGate` now correctly return a
- :class:`.CSGate`, resp. :class:`.CSdgGate`, if they are controlled on
- a single control qubit.
-upgrade_circuits:
- - |
- The ``annotated`` argument of the :meth:`.Gate.control` method is now
- ``None``, which allows Qiskit to choose whether to annotate a controlled operation.
- If the concrete implementation (``annotated=False``) is available, it will be returned by
- default. Otherwise, the annotated implementation will be returned (``annotated=True``).
- This allows, for example, to defer the synthesis of controlled, parameterized gates.
diff --git a/releasenotes/notes/1.2/avoid-op-creation-804c0bed6c408911.yaml b/releasenotes/notes/1.2/avoid-op-creation-804c0bed6c408911.yaml
deleted file mode 100644
index c7f63a45f8cc..000000000000
--- a/releasenotes/notes/1.2/avoid-op-creation-804c0bed6c408911.yaml
+++ /dev/null
@@ -1,17 +0,0 @@
----
-features_circuits:
- - |
- :class:`.CircuitInstruction` and :class:`.DAGOpNode` each have new methods to query various
- properties of their internal :class:`.Operation`, without necessarily needing to access it.
- These methods are:
-
- * :meth:`.CircuitInstruction.is_standard_gate` and :meth:`.DAGOpNode.is_standard_gate`,
- * :meth:`.CircuitInstruction.is_controlled_gate` and :meth:`.DAGOpNode.is_controlled_gate`,
- * :meth:`.CircuitInstruction.is_directive` and :meth:`.DAGOpNode.is_directive`,
- * :meth:`.CircuitInstruction.is_control_flow` and :meth:`.DAGOpNode.is_control_flow`, and
- * :meth:`.CircuitInstruction.is_parameterized` and :meth:`.DAGOpNode.is_parameterized`.
-
- If applicable, using any of these methods is significantly faster than querying
- :attr:`.CircuitInstruction.operation` or :attr:`.DAGOpNode.op` directly, especially if the
- instruction or node represents a Qiskit standard gate. This is because the standard gates are
- stored natively in Rust, and their Python representation is only created when requested.
diff --git a/releasenotes/notes/1.2/backendv1-d0d0642ed38fed3c.yaml b/releasenotes/notes/1.2/backendv1-d0d0642ed38fed3c.yaml
deleted file mode 100644
index 3b19a7ab9a2c..000000000000
--- a/releasenotes/notes/1.2/backendv1-d0d0642ed38fed3c.yaml
+++ /dev/null
@@ -1,14 +0,0 @@
----
-deprecations_providers:
- - |
- The :class:`.BackendV1` class is deprecated and it will be removed not earlier than the next major release.
- There are several migration paths available depending on the main purpose of the backend object::
-
- - To expose backend information with no access to execution (just a hardware description), consider constructing a :class:`.Target` directly.
- - To provides access to execution capabilities, consider relying on the primitives interfaces instead.
- - Alternatively, to continue providing simultaneous :class:`.Target` (hardware information) and ``run`` (execution) capabilities, consider moving to :class:`.BackendV2` (see ).
-
- - |
- The models in :mod:`qiskit.providers.models` are part of the deprecated :class:`.BackendV1` workflow
- and no longer necessary for :class:`.BackendV2`. If a user workflow requires these representations it
- likely relies on deprecated functionality and should be updated to use :class:`.BackendV2`.
diff --git a/releasenotes/notes/1.2/bitarray-postselect-659b8f7801ccaa60.yaml b/releasenotes/notes/1.2/bitarray-postselect-659b8f7801ccaa60.yaml
deleted file mode 100644
index 33ce17bafa8d..000000000000
--- a/releasenotes/notes/1.2/bitarray-postselect-659b8f7801ccaa60.yaml
+++ /dev/null
@@ -1,11 +0,0 @@
----
-features_primitives:
- - |
- Added a new method :meth:`.BitArray.postselect` that returns all shots containing specified bit values.
- Example usage::
-
- from qiskit.primitives.containers import BitArray
-
- ba = BitArray.from_counts({'110': 2, '100': 4, '000': 3})
- print(ba.postselect([0,2], [0,1]).get_counts())
- # {'110': 2, '100': 4}
diff --git a/releasenotes/notes/1.2/circuit-gates-rust-5c6ab6c58f7fd2c9.yaml b/releasenotes/notes/1.2/circuit-gates-rust-5c6ab6c58f7fd2c9.yaml
deleted file mode 100644
index d826bc15e488..000000000000
--- a/releasenotes/notes/1.2/circuit-gates-rust-5c6ab6c58f7fd2c9.yaml
+++ /dev/null
@@ -1,79 +0,0 @@
----
-features_circuits:
- - |
- A native rust representation of Qiskit's standard gate library has been added. When a standard gate
- is added to a :class:`~.QuantumCircuit` or :class:`~.DAGCircuit` it is now represented in a more
- efficient manner directly in Rust seamlessly. Accessing that gate object from a circuit or dag will
- return a new Python object representing the standard gate. This leads to faster and more efficient
- transpilation and manipulation of circuits for functionality written in Rust.
-features_misc:
- - |
- Added a new build-time environment variable ``QISKIT_NO_CACHE_GATES`` which
- when set to a value of ``1`` (i.e. ``QISKIT_NO_CACHE_GATES=1``) which
- decreases the memory overhead of a :class:`.CircuitInstruction` and
- :class:`.DAGOpNode` object at the cost of decreased runtime on multiple
- accesses to :attr:`.CircuitInstruction.operation` and :attr:`.DAGOpNode.op`.
- If this environment variable is set when building the Qiskit python package
- from source the caching of the return of these attributes will be disabled.
-upgrade_circuits:
- - |
- The :class:`.Operation` instances of :attr:`.DAGOpNode.op`
- being returned will not necessarily share a common reference to the
- underlying object anymore. This was never guaranteed to be the case and
- mutating the :attr:`~.DAGOpNode.op` directly by reference
- was unsound and always likely to corrupt the dag's internal state tracking
- Due to the internal refactor of the :class:`.QuantumCircuit` and
- :class:`.DAGCircuit` to store standard gates in rust the output object from
- :attr:`.DAGOpNode.op` will now likely be a copy instead of a shared instance. If you
- need to mutate an element should ensure that you either do::
-
- op = dag_node.op
- op.params[0] = 3.14159
- dag_node.op = op
-
- or::
-
- op = dag_node.op
- op.params[0] = 3.14159
- dag.substitute_node(dag_node, op)
-
- instead of doing something like::
-
- dag_node.op.params[0] = 3.14159
-
- which will not work for any standard gates in this release. It would have
- likely worked by chance in a previous release but was never an API guarantee.
- - |
- The :class:`.Operation` instances of :attr:`.CircuitInstruction.operation`
- being returned will not necessarily share a common reference to the
- underlying object anymore. This was never guaranteed to be the case and
- mutating the :attr:`~.CircuitInstruction.operation` directly by reference
- was unsound and always likely to corrupt the circuit, especially when
- parameters were in use. Due to the internal refactor of the QuantumCircuit
- to store standard gates in rust the output object from
- :attr:`.CircuitInstruction.operation` will now likely be a copy instead
- of a shared instance. If you need to mutate an element in the circuit (which
- is strongly **not** recommended as it's inefficient and error prone) you
- should ensure that you do::
-
- from qiskit.circuit import QuantumCircuit
-
- qc = QuantumCircuit(1)
- qc.p(0)
-
- op = qc.data[0].operation
- op.params[0] = 3.14
-
- qc.data[0] = qc.data[0].replace(operation=op)
-
- instead of doing something like::
-
- from qiskit.circuit import QuantumCircuit
-
- qc = QuantumCircuit(1)
- qc.p(0)
-
- qc.data[0].operation.params[0] = 3.14
-
- which will not work for any standard gates in this release. It would have
- likely worked by chance in a previous release but was never an API guarantee.
diff --git a/releasenotes/notes/1.2/default-level-2-generate-preset-passmanager-ec758ddc896ae2d6.yaml b/releasenotes/notes/1.2/default-level-2-generate-preset-passmanager-ec758ddc896ae2d6.yaml
deleted file mode 100644
index ff5d57797860..000000000000
--- a/releasenotes/notes/1.2/default-level-2-generate-preset-passmanager-ec758ddc896ae2d6.yaml
+++ /dev/null
@@ -1,44 +0,0 @@
----
-features_transpiler:
- - |
- The ``optimization_level`` argument for the :func:`.generate_preset_pass_manager` function is
- now optional. If it's not specified it will default to using optimization level 2. As the argument
- is now optional, the first positional argument has been expanded to enable passing a :class:`.Target`
- or a :class:`.BackendV2` as the first argument for more convenient construction. For example::
-
- from qiskit.transpiler.preset_passmanager import generate_preset_pass_manager
- from qiskit.providers.fake_provider import GenericBackendV2
-
- backend = GenericBackendV2(100)
-
- generate_preset_pass_manager(backend.Target)
-
- will construct a default pass manager for the 100 qubit :class`.GenericBackendV2` instance.
-upgrade_transpiler:
- - |
- The default ``optimization_level`` used by the :func:`.transpile` function when one is not
- specified has been changed to level 2. This makes it consistent with the default used
- by :func:`.generate_preset_pass_manager` which is used internally by :func:`.transpile`. Optimization
- level 2 provides a much better balance between the run time of the function and the optimizations it
- performs, it's a better tradeoff to use by default.
-
- The API of :func:`.transpile` remains unchanged because, fundamentally, level 2 and level 1
- have the same semantics. If you were previously relying on the implicit default of level 1,
- you can simply set the argument ``optimization_level=1`` when you call :func:`.transpile`.
- Similarly you can change the default back in your local environment by using a user config
- file and setting the ``transpile_optimization_level`` field to 1.
-
- The only potential issue is that your transpilation workflow may be relying on an implicit trivial layout (where qubit 0
- in the circuit passed to :func:`.transpile` is mapped to qubit 0 on the target backend/coupling,
- 1->1, 2->2, etc.) without specifying ``optimization_level=1``, ``layout_method="trivial"``, or
- explicitly setting ``initial_layout`` when calling :func:`.transpile`. This behavior was a side
- effect of the preset pass manager construction in optimization level 1 and is not mirrored in
- level 2. If you need this behavior you can use any of the three options listed previously to make
- this behavior explicit.
-
- Similarly, if you were targeting a discrete basis gate set you may encounter an issue using the
- new default with optimization level 2 (or running explicitly optimization level 3), as the additional optimization passes that run in
- level 2 and 3 don't work in all cases with a discrete basis. You can explicitly set
- ``optimization_level=1`` manually in this case. In general the transpiler does not currently
- fully support discrete basis sets and if you're relying on this you should likely construct a
- pass manager manually to build a compilation pipeline that will work with your target.
diff --git a/releasenotes/notes/1.2/deprecate-circuit-internal-helpers-ee65fbac455de47c.yaml b/releasenotes/notes/1.2/deprecate-circuit-internal-helpers-ee65fbac455de47c.yaml
deleted file mode 100644
index 809aa11adc9c..000000000000
--- a/releasenotes/notes/1.2/deprecate-circuit-internal-helpers-ee65fbac455de47c.yaml
+++ /dev/null
@@ -1,11 +0,0 @@
----
-deprecations_circuits:
- - |
- The following circuit methods were not intended for public use, but were accidentally left documented in the
- public API during the 1.0 release. They are now deprecated from Qiskit 1.2 and will be removed in Qiskit 2.0:
-
- * ``QuantumCircuit.cast``
- * ``QuantumCircuit.cls_instances``
- * ``QuantumCircuit.cls_prefix``
- * ``QuantumCircuit.cbit_argument_conversion``
- * ``QuantumCircuit.qbit_argument_conversion``
\ No newline at end of file
diff --git a/releasenotes/notes/1.2/deprecate-legacy-circuit-instruction-8a332ab09de73766.yaml b/releasenotes/notes/1.2/deprecate-legacy-circuit-instruction-8a332ab09de73766.yaml
deleted file mode 100644
index d656ee5cb823..000000000000
--- a/releasenotes/notes/1.2/deprecate-legacy-circuit-instruction-8a332ab09de73766.yaml
+++ /dev/null
@@ -1,23 +0,0 @@
----
-deprecations_circuits:
- - |
- Treating :class:`.CircuitInstruction` as a tuple-like iterable is deprecated, and this legacy
- path way will be removed in Qiskit 2.0. You should use the attribute-access fields
- :attr:`~.CircuitInstruction.operation`, :attr:`~.CircuitInstruction.qubits`, and
- :attr:`~.CircuitInstruction.clbits` instead. For example::
-
- from qiskit.circuit import QuantumCircuit
-
- qc = QuantumCircuit(2, 2)
- qc.h(0)
- qc.cx(0, 1)
- qc.measure([0, 1], [0, 1])
-
- # Deprecated.
- for op, qubits, clbits in qc.data:
- pass
- # New style.
- for instruction in qc.data:
- op = instruction.operation
- qubits = instruction.qubits
- clbits = instruction.clbits
diff --git a/releasenotes/notes/1.2/deprecate-primitives-v1.yaml b/releasenotes/notes/1.2/deprecate-primitives-v1.yaml
deleted file mode 100644
index 3d0335d358cb..000000000000
--- a/releasenotes/notes/1.2/deprecate-primitives-v1.yaml
+++ /dev/null
@@ -1,32 +0,0 @@
----
-deprecations_primitives:
- - |
- Primitive V1 implementations and V1-exclusive non-versioned type aliases are now
- deprecated in favor of their V2 counterparts. The deprecation is extended to the
- following classes implementing V1 interfaces:
-
- * :class:`.Estimator`, in favor of the V2 equivalent, :class:`.StatevectorEstimator`
- * :class:`.Sampler`, in favor of the V2 equivalent, :class:`.StatevectorSampler`
- * :class:`.BackendEstimator`, in favor of the V2 equivalent, :class:`.BackendEstimatorV2`
- * :class:`.BackendSampler`, in favor of the V2 equivalent, :class:`.BackendSamplerV2`
-
- As well as the following non-versioned type aliases:
-
- * :class:`.BaseEstimator`, alias for :class:`.BaseEstimatorV1`
- * :class:`.BaseSampler`, alias for :class:`.BaseSamplerV1`
-
- This deprecation does NOT affect the explicitly-versioned :class:`BaseEstimatorV1`
- and :class:`BaseSamplerV1` abstract
- interface definitions or related result and job classes.
-
- In addition, the following utility functions are deprecated:
-
- * :func:`.init_circuit`, to initialize a circuit from a :class:`.Statevector`,
- use :meth:`.QuantumCircuit.initialize` instead,
- * :func:`.init_observable`, use the constructor of :class:`.SparsePauliOp` instead,
- * :func:`.final_measurement_mapping`, use :meth:`.QuantumCircuit.layout` and
- :meth:`.SparsePauliOp.apply_layout` to adjust an operator for a layout.
- Otherwise, use ``mthree.utils.final_measurement_mapping``.
- See `Mthree Utility functions `__
- for details.
-
diff --git a/releasenotes/notes/1.2/deprecate-visualize_transition-8c1d257b7f37aa58.yaml b/releasenotes/notes/1.2/deprecate-visualize_transition-8c1d257b7f37aa58.yaml
deleted file mode 100644
index 6900dcbd7676..000000000000
--- a/releasenotes/notes/1.2/deprecate-visualize_transition-8c1d257b7f37aa58.yaml
+++ /dev/null
@@ -1,7 +0,0 @@
----
-deprecations_visualization:
- - |
- The :func:`.transition_visualization` function has been deprecated and will
- be removed in the 2.0.0 release. This function had a number of limitations
- which limited it's utility to only very specific use cases and didn't fit in with
- the rest of the Qiskit visualization module.
diff --git a/releasenotes/notes/1.2/deprecate_assemble-67486b4d0a8d4f96.yaml b/releasenotes/notes/1.2/deprecate_assemble-67486b4d0a8d4f96.yaml
deleted file mode 100644
index b7b50d2eb2b2..000000000000
--- a/releasenotes/notes/1.2/deprecate_assemble-67486b4d0a8d4f96.yaml
+++ /dev/null
@@ -1,7 +0,0 @@
----
-deprecations_providers:
- - |
- The `Qobj` structure and related classes are now deprecated, they were introduced as part of the `BackendV1` workflow and are no longer necessary for interacting with :class:`.BackendV2` backends. Remote backend interaction should be done via `QPY` or `OpenQASM` instead.
-deprecations_transpiler:
- - |
- The `assemble` function is now deprecated and will be removed in the 2.0 release. The function was primarily used to create a `Qobj`, which is no longer necessary in :class:`.BackendV2`-based workflows. It was also used for binding parameters, a functionality fully covered by :meth:`~.QuantumCircuit.assign_parameters`.
diff --git a/releasenotes/notes/1.2/extract-standard-parametric-controlled-1a495f6f7ce89397.yaml b/releasenotes/notes/1.2/extract-standard-parametric-controlled-1a495f6f7ce89397.yaml
deleted file mode 100644
index ea4e69dd245f..000000000000
--- a/releasenotes/notes/1.2/extract-standard-parametric-controlled-1a495f6f7ce89397.yaml
+++ /dev/null
@@ -1,8 +0,0 @@
----
-fixes:
- - |
- Parametric controlled standard-library gates (such as :class:`.CRXGate`) will now get correctly
- extracted to a Rust-space standard gate when using :meth:`.QuantumCircuit.append` and the gate
- object. Previously there was a discrepancy where using the :meth:`.QuantumCircuit.crx` method
- would cause a correct extraction in Rust space, but the :meth:`~.QuantumCirucit.append` form
- would not. The bug should generally not have caused any unsoundness from Python.
diff --git a/releasenotes/notes/1.2/fix-2q-basis-decomposer-non-std-kak-gate-edc69ffb5d9ef302.yaml b/releasenotes/notes/1.2/fix-2q-basis-decomposer-non-std-kak-gate-edc69ffb5d9ef302.yaml
deleted file mode 100644
index 903b9ceac2a2..000000000000
--- a/releasenotes/notes/1.2/fix-2q-basis-decomposer-non-std-kak-gate-edc69ffb5d9ef302.yaml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-fixes:
- - |
- Fixed a bug in :class:`.TwoQubitBasisDecomposer` where the Rust-based code
- would panic if the given KAK gate wasn't a Rust-space :class:`StandardGate`.
\ No newline at end of file
diff --git a/releasenotes/notes/1.2/fix-InstructionDurations-b47a9770b424d7a0.yaml b/releasenotes/notes/1.2/fix-InstructionDurations-b47a9770b424d7a0.yaml
deleted file mode 100644
index ce8b789462de..000000000000
--- a/releasenotes/notes/1.2/fix-InstructionDurations-b47a9770b424d7a0.yaml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-fixes:
- - |
- Fixed a bug where :meth:`.InstructionDurations.from_backend` did not work for :class:`.BackendV2` backends.
- Fixed `#12760 `.
\ No newline at end of file
diff --git a/releasenotes/notes/1.2/fix-bitarray-fromcounts-nobits-82958a596b3489ec.yaml b/releasenotes/notes/1.2/fix-bitarray-fromcounts-nobits-82958a596b3489ec.yaml
deleted file mode 100644
index 6be5ea21bdf5..000000000000
--- a/releasenotes/notes/1.2/fix-bitarray-fromcounts-nobits-82958a596b3489ec.yaml
+++ /dev/null
@@ -1,7 +0,0 @@
----
-fixes:
- - |
- Fixed a bug in :meth:`.BitArray.from_counts` and :meth:`.BitArray.from_samples`.
- Previously these would raise an error if given data containing only zeros, and no
- value for the optional argument ``num_bits``. Now they produce a :class:`.BitArray`
- with :attr:`.BitArray.num_bits` set to 1.
diff --git a/releasenotes/notes/1.2/fix-bitarray-slice-bits-shots-c9cb7e5d907722f5.yaml b/releasenotes/notes/1.2/fix-bitarray-slice-bits-shots-c9cb7e5d907722f5.yaml
deleted file mode 100644
index 56fd81012428..000000000000
--- a/releasenotes/notes/1.2/fix-bitarray-slice-bits-shots-c9cb7e5d907722f5.yaml
+++ /dev/null
@@ -1,11 +0,0 @@
----
-upgrade_primitives:
- - |
- :meth:`.BitArray.slice_bits` and :meth:`.BitArray.slice_shots`
- will now raise ``IndexError`` when indices are out of bounds.
- They used to raise ``ValueError`` in the case.
- - |
- :meth:`.BitArray.__getitem__` will now raise ``IndexError``
- when indices are out of bounds or the number of dimensions
- of indices does not match that of BitArray.
- They used to raise ``ValueError`` in the case.
diff --git a/releasenotes/notes/1.2/fix-consolidate-blocks-custom-gate-no-target-e2d1e0b0ee7ace11.yaml b/releasenotes/notes/1.2/fix-consolidate-blocks-custom-gate-no-target-e2d1e0b0ee7ace11.yaml
deleted file mode 100644
index e4cf03778e3a..000000000000
--- a/releasenotes/notes/1.2/fix-consolidate-blocks-custom-gate-no-target-e2d1e0b0ee7ace11.yaml
+++ /dev/null
@@ -1,9 +0,0 @@
----
-fixes:
- - |
- Fixed a bug in the :class:`.ConsolidateBlocks` transpiler pass, when the
- input circuit contains a custom opaque gate and neither the
- ``basis_gates`` or ``target`` options are set the pass would raise a
- ``QiskitError`` and fail. This has been corrected so that the in these
- situations the transpiler pass will not consolidate the block identified
- containing a custom gate instead of failing.
diff --git a/releasenotes/notes/1.2/fix-cu-rust-6464b6893ecca1b3.yaml b/releasenotes/notes/1.2/fix-cu-rust-6464b6893ecca1b3.yaml
deleted file mode 100644
index 406d6052a1df..000000000000
--- a/releasenotes/notes/1.2/fix-cu-rust-6464b6893ecca1b3.yaml
+++ /dev/null
@@ -1,9 +0,0 @@
----
-fixes:
- - |
- Fixed the definition of the :class:`.CUGate` matrix in Rust-space.
- While this was not noticable while handling the :class:`.CUGate` purely on
- Python side, this had knock-on effects when transpiler passes were using the
- Rust representation, such as could happen in :class:`.Consolidate2qBlocks`.
- Fixed `#13118 `__.
-
diff --git a/releasenotes/notes/1.2/fix-dd-misalignment-msg-76fe16e5eb4ae670.yaml b/releasenotes/notes/1.2/fix-dd-misalignment-msg-76fe16e5eb4ae670.yaml
deleted file mode 100644
index 4634fe48ae9b..000000000000
--- a/releasenotes/notes/1.2/fix-dd-misalignment-msg-76fe16e5eb4ae670.yaml
+++ /dev/null
@@ -1,7 +0,0 @@
----
-fixes:
- - |
- Fixed a bug in :class:`.PadDynamicalDecoupling`, which previously
- did not correctly display the error message that a delay is not
- pulse-aligned, if the previous or following node was an input/output
- node. Now, the error message is correctly displayed.
diff --git a/releasenotes/notes/1.2/fix-elide-permutations-1b9e1d10c3abb2a4.yaml b/releasenotes/notes/1.2/fix-elide-permutations-1b9e1d10c3abb2a4.yaml
deleted file mode 100644
index 156960eb7c19..000000000000
--- a/releasenotes/notes/1.2/fix-elide-permutations-1b9e1d10c3abb2a4.yaml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-fixes:
- - |
- Fixed a bug in the transpiler pass :class:`~.ElidePermutations` where the
- qubit mapping was not updated correctly in the presence of :class:`.PermutationGate`\s.
diff --git a/releasenotes/notes/1.2/fix-hoare-opt-56d1ca6a07f07a2d.yaml b/releasenotes/notes/1.2/fix-hoare-opt-56d1ca6a07f07a2d.yaml
deleted file mode 100644
index 7548dcc99564..000000000000
--- a/releasenotes/notes/1.2/fix-hoare-opt-56d1ca6a07f07a2d.yaml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-fixes:
- - |
- Fixed a bug in :class:`.HoareOptimizer` where a controlled gate was simplified
- by removing its controls but the new gate was not handled correctly.
diff --git a/releasenotes/notes/1.2/fix-kwarg-validation-BitArray-1bf542a1fb5c15c6.yaml b/releasenotes/notes/1.2/fix-kwarg-validation-BitArray-1bf542a1fb5c15c6.yaml
deleted file mode 100644
index 41a0fc53261e..000000000000
--- a/releasenotes/notes/1.2/fix-kwarg-validation-BitArray-1bf542a1fb5c15c6.yaml
+++ /dev/null
@@ -1,4 +0,0 @@
----
-fixes:
- - |
- The keyword argument ``order`` of the function :meth:`.BitArray.from_bool_array` should be 'little' or 'big'. Added checks to raise error if an invalid value is entered.
diff --git a/releasenotes/notes/1.2/fix-mcx-performance-de86bcc9f969b81e.yaml b/releasenotes/notes/1.2/fix-mcx-performance-de86bcc9f969b81e.yaml
deleted file mode 100644
index 8cee3356ac4c..000000000000
--- a/releasenotes/notes/1.2/fix-mcx-performance-de86bcc9f969b81e.yaml
+++ /dev/null
@@ -1,6 +0,0 @@
----
-fixes:
- - |
- Improve the decomposition of the gate generated by :meth:`.QuantumCircuit.mcx`
- without using ancilla qubits, so that the number of :class:`.CXGate` will grow
- quadratically in the number of qubits and not exponentially.
diff --git a/releasenotes/notes/1.2/fix-negative-seed-pm-2813a62a020da115.yaml b/releasenotes/notes/1.2/fix-negative-seed-pm-2813a62a020da115.yaml
deleted file mode 100644
index 352f068537e8..000000000000
--- a/releasenotes/notes/1.2/fix-negative-seed-pm-2813a62a020da115.yaml
+++ /dev/null
@@ -1,4 +0,0 @@
----
-fixes:
- - |
- Fixed the behavior of :meth:`.generate_preset_pass_manager` to raise a `ValueError` exception if not provided with a non-negative integer `seed_transpiler` argument.
diff --git a/releasenotes/notes/1.2/fix-potential-non-determinism-dense-layout-da66de0217121146.yaml b/releasenotes/notes/1.2/fix-potential-non-determinism-dense-layout-da66de0217121146.yaml
deleted file mode 100644
index ddf68fc9d49b..000000000000
--- a/releasenotes/notes/1.2/fix-potential-non-determinism-dense-layout-da66de0217121146.yaml
+++ /dev/null
@@ -1,9 +0,0 @@
----
-fixes:
- - |
- Fixed a potential source of non-determinism in :class:`~.DenseLayout` (and
- by extension :class:`~.SabreLayout`) when targeting a
- :class:`.CouplingMap` or :class:`.Target` that has more than one subgraph
- with the same degree of connectivity. In these case the exact output
- layout from the pass could previously fluctuate based on the number of
- local CPUs and thread execution speed.
diff --git a/releasenotes/notes/1.2/fix-qft-plugins-7106029d33c44b96.yaml b/releasenotes/notes/1.2/fix-qft-plugins-7106029d33c44b96.yaml
deleted file mode 100644
index 3024432af714..000000000000
--- a/releasenotes/notes/1.2/fix-qft-plugins-7106029d33c44b96.yaml
+++ /dev/null
@@ -1,9 +0,0 @@
----
-fixes:
- - |
- The ``HighLevelSynthesis`` transpiler pass no longer raises an exception when
- encountering a custom gate that is called "qft" but is not an instance of
- :class:`~qiskit.circuit.library.QFTGate`. Instead, the synthesis plugins for
- QFT gates ignore such a gate, and the gate's definition is used (if provided).
-
-
diff --git a/releasenotes/notes/1.2/fix-qpy-parsing-123-75357c3709e35963.yaml b/releasenotes/notes/1.2/fix-qpy-parsing-123-75357c3709e35963.yaml
deleted file mode 100644
index d911a59879ff..000000000000
--- a/releasenotes/notes/1.2/fix-qpy-parsing-123-75357c3709e35963.yaml
+++ /dev/null
@@ -1,10 +0,0 @@
----
-fixes:
- - |
- Fixed an issue introduced in the now
- `yanked `__ 1.2.3 bugfix release that
- would cause an exception with the error message "Qiskit doesn't support
- loading a symengine payload generated with symengine >= 1.0" to be raised
- whenever loading a QPY file that was generated with a different symengine
- version from the version installed by the loading. This issue could only
- occur in 1.2.3.
diff --git a/releasenotes/notes/1.2/fix-qpy-symengine-compat-858970a9a1d6bc14.yaml b/releasenotes/notes/1.2/fix-qpy-symengine-compat-858970a9a1d6bc14.yaml
deleted file mode 100644
index 782ce85e0b18..000000000000
--- a/releasenotes/notes/1.2/fix-qpy-symengine-compat-858970a9a1d6bc14.yaml
+++ /dev/null
@@ -1,62 +0,0 @@
----
-fixes:
- - |
- Fixed an issue with :func:`.qpy.load` when loading a QPY file containing
- a :class:`.ParameterExpression`, if the versions of ``symengine`` installed
- in the generating and loading environments were not the same. For example,
- if a QPY file containing :class:`.ParameterExpression`\ s was generated
- using Qiskit 1.2.2 with ``symengine==0.11.0`` installed, Qiskit 1.2.2 with
- ``syengine==0.13.0`` installed would be unable to load it.
-
- Previously, an error would have been raised by ``symengine`` around this
- version mismatch. This has been worked around for ``symengine`` 0.11 and
- 0.13 (there was no 0.12), but if you're trying to use different versions of
- ``symengine`` and there is a mismatch, this version of Qiskit still might not
- work.
-issues:
- - |
- Versions of Qiskit before 1.2.4 will not be able to load QPY files dumped
- using :func:`.qpy.dump`, even with ``version`` set appropriately, if:
-
- * there are unbound :class:`.ParameterExpression`\ s in the QPY file,
- * the ``use_symengine=True`` flag was set (which is the default in Qiskit >=
- 1.0.0) in :func:`.qpy.dump`,
- * the version of ``symengine`` installed in the generating and loading
- environments are not within the same minor version.
-
- This applies regardless of the version of Qiskit used in the generation (at
- least up to Qiskit 1.2.4 inclusive).
-
- If you want to maximize compatibility with older versions of Qiskit, you
- should set ``use_symengine=False``. Newer versions of Qiskit should not
- require this.
- - |
- QPY files from the Qiskit 0.45 series can, under a very specific and unlikely
- set of circumstances, fail to load with any newer version of Qiskit,
- including Qiskit 1.2.4. The criteria are:
-
- * the :class:`.QuantumCircuit` or :class:`.ScheduleBlock` to be dumped
- contained unbound :class:`.ParameterExpression` objects,
- * the installed version of ``symengine`` was in the 0.9 series (which was the
- most recent release during the support window of Qiskit 0.45),
- * the ``use_symengine=True`` flag was set (which was *not* the default).
-
- Later versions of Qiskit used during generation are not affected, because
- they required newer versions than ``symengine`` 0.9.
-
- In this case, you can recover the QPY file by reloading it with an environment
- with Qiskit 0.45.3 and ``symengine`` 0.9.2 installed. Then, use
- :func:`.qpy.dump` with ``use_symengine=False`` to re-export the file. This
- will then be readable by any newer version of Qiskit.
-upgrade:
- - |
- The supported versions of `symengine `__
- have been pre-emptively capped at < 0.14.0 (which is expected to be the next
- minor version, as of this release of Qiskit). This has been done to protect
- against a potential incompatibility in :mod:`.qpy` when serializing
- :class:`.ParameterExpression` objects. The serialization used in
- :ref:`qpy_format` versions 10, 11, and 12 for :class:`.ParameterExpression`
- objects is tied to the symengine version used to generate it, and there is the potential
- for a future symengine release to not be compatible. This upper version cap is to prevent
- a future release of symengine causing incompatibilities when trying to load QPY files
- using :class:`.qpy.load`.
diff --git a/releasenotes/notes/1.2/fix-sabre-releasevalve-7f9af9bfc0482e04.yaml b/releasenotes/notes/1.2/fix-sabre-releasevalve-7f9af9bfc0482e04.yaml
deleted file mode 100644
index 17432259be29..000000000000
--- a/releasenotes/notes/1.2/fix-sabre-releasevalve-7f9af9bfc0482e04.yaml
+++ /dev/null
@@ -1,7 +0,0 @@
----
-fixes:
- - |
- Fixed an edge case in :class:`.SabreLayout`, where in rare cases on large
- devices and challenging circuits, the routing would fail. This was due to the
- release valve making more than one two-qubit gate routable, where only one was expected.
- Fixed `#13081 `__.
\ No newline at end of file
diff --git a/releasenotes/notes/1.2/fix-split-2q-unitaries-custom-gate-d10f7670a35548f4.yaml b/releasenotes/notes/1.2/fix-split-2q-unitaries-custom-gate-d10f7670a35548f4.yaml
deleted file mode 100644
index 331156cf6012..000000000000
--- a/releasenotes/notes/1.2/fix-split-2q-unitaries-custom-gate-d10f7670a35548f4.yaml
+++ /dev/null
@@ -1,6 +0,0 @@
----
-fixes:
- - |
- Fixed a bug in :class:`.Split2QUnitaries` where it would fail to run on circuits
- with custom gates that didn't implement :meth:`__array__`.
- See `#12984 `__.
\ No newline at end of file
diff --git a/releasenotes/notes/1.2/fix-stateprep-normalize-a8057c339ba619bd.yaml b/releasenotes/notes/1.2/fix-stateprep-normalize-a8057c339ba619bd.yaml
deleted file mode 100644
index 0175f8c1c026..000000000000
--- a/releasenotes/notes/1.2/fix-stateprep-normalize-a8057c339ba619bd.yaml
+++ /dev/null
@@ -1,6 +0,0 @@
----
-fixes:
- - |
- Fixed a bug in :class:`.StatePreparation` where the ``normalize``
- argument was ignored for input arrays.
- Fixed `#12984 `__.
diff --git a/releasenotes/notes/1.2/fix-statevector-sampler-c_if-9753f8f97a3d0ff5.yaml b/releasenotes/notes/1.2/fix-statevector-sampler-c_if-9753f8f97a3d0ff5.yaml
deleted file mode 100644
index d743b52ee900..000000000000
--- a/releasenotes/notes/1.2/fix-statevector-sampler-c_if-9753f8f97a3d0ff5.yaml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-fixes:
- - |
- Fixed a bug of :class:`.StatevectorSampler` that ignored gates with ``c_if``.
- It will raise an error because :class:`.Statevector` cannot handle ``c_if``.
diff --git a/releasenotes/notes/1.2/fix-synth-qregs-7662681c0ff02511.yaml b/releasenotes/notes/1.2/fix-synth-qregs-7662681c0ff02511.yaml
deleted file mode 100644
index d838032ffaf9..000000000000
--- a/releasenotes/notes/1.2/fix-synth-qregs-7662681c0ff02511.yaml
+++ /dev/null
@@ -1,7 +0,0 @@
----
-fixes:
- - |
- Fixed a bug where various synthesis methods created circuits without quantum or
- classical registers. This also affected functions that internally used the synthesis
- methods, such as :meth:`.Clifford.to_circuit`.
- Fixed `#13041 `__.
diff --git a/releasenotes/notes/1.2/fix_initialize_gates_to_uncompute-d0dba6a642d07f30.yaml b/releasenotes/notes/1.2/fix_initialize_gates_to_uncompute-d0dba6a642d07f30.yaml
deleted file mode 100644
index 3c24569455e2..000000000000
--- a/releasenotes/notes/1.2/fix_initialize_gates_to_uncompute-d0dba6a642d07f30.yaml
+++ /dev/null
@@ -1,4 +0,0 @@
----
-fixes:
- - |
- Fix a bug that caused the method :meth:`Initialize.gates_to_uncompute()` fail.
diff --git a/releasenotes/notes/1.2/improve-quantum-causal-cone-f63eaaa9ab658811.yaml b/releasenotes/notes/1.2/improve-quantum-causal-cone-f63eaaa9ab658811.yaml
deleted file mode 100644
index 5a072f481abc..000000000000
--- a/releasenotes/notes/1.2/improve-quantum-causal-cone-f63eaaa9ab658811.yaml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-features_circuits:
- - |
- Improved performance of the method :meth:`.DAGCircuit.quantum_causal_cone` by not examining
- the same non-directive node multiple times when reached from different paths.
diff --git a/releasenotes/notes/1.2/linear-binary-matrix-utils-rust-c48b5577749c34ab.yaml b/releasenotes/notes/1.2/linear-binary-matrix-utils-rust-c48b5577749c34ab.yaml
deleted file mode 100644
index a8e9ec743808..000000000000
--- a/releasenotes/notes/1.2/linear-binary-matrix-utils-rust-c48b5577749c34ab.yaml
+++ /dev/null
@@ -1,8 +0,0 @@
----
-features_synthesis:
- - |
- Port internal binary matrix utils from Python to Rust, including
- binary matrix multiplication, gaussian elimination, rank calculation,
- binary matrix inversion, and random invertible binary matrix generation.
- These functions are not part of the Qiskit API, and porting them to rust
- improves the performance of certain synthesis methods.
diff --git a/releasenotes/notes/1.2/mcx_recursive_clean_ancilla-2b0f6956e0f4cbbd.yaml b/releasenotes/notes/1.2/mcx_recursive_clean_ancilla-2b0f6956e0f4cbbd.yaml
deleted file mode 100644
index 12ccd09f6e12..000000000000
--- a/releasenotes/notes/1.2/mcx_recursive_clean_ancilla-2b0f6956e0f4cbbd.yaml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-features_synthesis:
- - |
- :class:`.MCXRecursive` with :math:`k` control qubits and a single clean auxiliary qubit
- now requires at most :math:`16k-8` CX gates.
diff --git a/releasenotes/notes/1.2/mcxvchain_dirty_auxiliary-5ea4037557209f6e.yaml b/releasenotes/notes/1.2/mcxvchain_dirty_auxiliary-5ea4037557209f6e.yaml
deleted file mode 100644
index 7a4850370f7f..000000000000
--- a/releasenotes/notes/1.2/mcxvchain_dirty_auxiliary-5ea4037557209f6e.yaml
+++ /dev/null
@@ -1,10 +0,0 @@
----
-features:
- - |
- :class:`.MCXVChain` has two new Boolean parameters `relative_phase` and `action_only`.
- If `action_only` the circuit does not clean the dirty qubits. If `relative_phase`
- the gate is implemented up to a global phase. Both parameters are used to optimize the
- decomposition of MCXVChain.
-fixes:
- - |
- :class:`.MCXVChain` with k controls and k-2 dirty auxiliary qubits now requires 8k-6 cx gates.
diff --git a/releasenotes/notes/1.2/no-elide-routing-none-7c1bebf1283d48c0.yaml b/releasenotes/notes/1.2/no-elide-routing-none-7c1bebf1283d48c0.yaml
deleted file mode 100644
index cc749f62775c..000000000000
--- a/releasenotes/notes/1.2/no-elide-routing-none-7c1bebf1283d48c0.yaml
+++ /dev/null
@@ -1,16 +0,0 @@
----
-fixes:
- - |
- Fixed an issue when running :func:`.transpile` or
- :meth:`~.StagedPassManager.run` on a pass manager generated by
- :func:`.generate_preset_pass_manager` using ``optimization_level`` 2 or 3
- when the ``routing_method`` argument is set to ``"none"`` to explicitly
- disable routing. Previously under these conditions the transpiler would run
- the :class:`.ElidePermutation` pass as part of the init stage as under normal
- conditions this is a useful optimization to remove :class:`.SwapGate`
- and :class:`.PermutationGate` instances from the circuit. But when
- ``routing_method="none"`` this optimization wasn't expected as it permutes
- the circuit in a similar manner to routing which shouldn't be performed
- when ``routing_method="none"``. This has been fixed by no longer
- running :class:`.ElidePermutation` if ``routing_method="none"`` is set.
- Fixed `#13144 `__
diff --git a/releasenotes/notes/1.2/oxidize-acg-0294a87c0d5974fa.yaml b/releasenotes/notes/1.2/oxidize-acg-0294a87c0d5974fa.yaml
deleted file mode 100644
index 532d3e8fa55e..000000000000
--- a/releasenotes/notes/1.2/oxidize-acg-0294a87c0d5974fa.yaml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-features_synthesis:
- - |
- Port :func:`.synth_permutation_acg`, used to synthesize qubit permutations, to Rust.
- This produces an approximate 3x performance improvement on 1000 qubit circuits.
diff --git a/releasenotes/notes/1.2/oxidize-permbasic-be27578187ac472f.yaml b/releasenotes/notes/1.2/oxidize-permbasic-be27578187ac472f.yaml
deleted file mode 100644
index bd8c969be934..000000000000
--- a/releasenotes/notes/1.2/oxidize-permbasic-be27578187ac472f.yaml
+++ /dev/null
@@ -1,4 +0,0 @@
----
-features_synthesis:
- - |
- Port :func:`.synth_permutation_basic`, used to synthesize qubit permutations, to Rust.
diff --git a/releasenotes/notes/1.2/oxidize-pmh-ec74e4002510eaad.yaml b/releasenotes/notes/1.2/oxidize-pmh-ec74e4002510eaad.yaml
deleted file mode 100644
index b25adbec21f9..000000000000
--- a/releasenotes/notes/1.2/oxidize-pmh-ec74e4002510eaad.yaml
+++ /dev/null
@@ -1,17 +0,0 @@
----
-features_synthesis:
- - |
- Port :func:`.synth_cnot_full_pmh`, used to synthesize a linear function
- into a CX network, to Rust. This produces approximately 44x speedup,
- as measured on 100 qubit circuits.
- - |
- The function :func:`.synth_cnot_full_pmh` now allows choosing the
- (heuristically) optimal ``section_size`` by setting it to ``None``. Then, a value is
- chosen which attempts to minimize the upper bound on the number of CX gates, that is
- :math:`\alpha \log_2(n)` where :math:`n` is the number of qubits and :math:`\alpha \approx 0.56`.
-fixes:
- - |
- Fixed a bug in :func:`.synth_cnot_full_pmh` where providing a ``section_size`` that did
- not divide the number of qubits without remainder could lead to wrong results.
- Now any ``section_size`` (at most equal to the number of qubits) synthesizes the correct
- circuit. For a (heuristically) optimal value, set ``section_size=None``.
diff --git a/releasenotes/notes/1.2/oxidize-synth-clifford-bm-91d8b974ca0522b7.yaml b/releasenotes/notes/1.2/oxidize-synth-clifford-bm-91d8b974ca0522b7.yaml
deleted file mode 100644
index d4c08bf7a4b3..000000000000
--- a/releasenotes/notes/1.2/oxidize-synth-clifford-bm-91d8b974ca0522b7.yaml
+++ /dev/null
@@ -1,7 +0,0 @@
----
-features_synthesis:
- - |
- The function :func:`.synth_clifford_bm` was ported to Rust. Recall that this function
- optimally synthesizes :class:`.Clifford` operators on 1, 2 or 3 qubits with respect to the
- number of CX-gates. This leads to a significant increase in performance. For Cliffords
- over 3 qubits, the speedup in on the order of 80 times.
diff --git a/releasenotes/notes/1.2/oxidize-synth-clifford-greedy-0739e9688bc4eedd.yaml b/releasenotes/notes/1.2/oxidize-synth-clifford-greedy-0739e9688bc4eedd.yaml
deleted file mode 100644
index ea492e29a7fc..000000000000
--- a/releasenotes/notes/1.2/oxidize-synth-clifford-greedy-0739e9688bc4eedd.yaml
+++ /dev/null
@@ -1,6 +0,0 @@
----
-features_synthesis:
- - |
- The function :func:`.synth_clifford_greedy` that synthesizes :class:`.Clifford` operators
- was ported to Rust, leading to a significant increase in performance for all numbers of
- qubits. For Cliffords over 50 qubits, the speedup is on the order of 1000 times.
diff --git a/releasenotes/notes/1.2/peephole-before-routing-c3d184b740bb7a8b.yaml b/releasenotes/notes/1.2/peephole-before-routing-c3d184b740bb7a8b.yaml
deleted file mode 100644
index b89a622987d0..000000000000
--- a/releasenotes/notes/1.2/peephole-before-routing-c3d184b740bb7a8b.yaml
+++ /dev/null
@@ -1,20 +0,0 @@
----
-features_transpiler:
- - |
- Added a new pass :class:`.Split2QUnitaries` that iterates over all two-qubit gates or unitaries in a
- circuit and replaces them with two single-qubit unitaries, if possible without introducing errors, i.e.
- the two-qubit gate/unitary is actually a (kronecker) product of single-qubit unitaries.
- - |
- The passes :class:`.Collect2qBlocks`, :class:`.ConsolidateBlocks` and :class:`.Split2QUnitaries` have been
- added to the ``init`` stage of the preset pass managers with optimization level 2 and optimization level 3.
- The modification of the `init` stage should allow for a more efficient routing for quantum circuits that either:
-
- * contain two-qubit unitaries/gates that are actually a product of single-qubit gates
- * contain multiple two-qubit gates in a continuous block of two-qubit gates.
-
- In the former case, the routing of the two-qubit gate can simply be skipped as no real interaction
- between a pair of qubits occurs. In the latter case, the lookahead space of routing algorithms is not
- 'polluted' by superfluous two-qubit gates, i.e. for routing it is sufficient to only consider one single
- two-qubit gate per continuous block of two-qubit gates. These passes are not run if the pass
- managers target a :class:`.Target` that has a discrete basis gate set, i.e. all basis gates have are not
- parameterized.
diff --git a/releasenotes/notes/1.2/port_star_prerouting-13fae3ff78feb5e3.yaml b/releasenotes/notes/1.2/port_star_prerouting-13fae3ff78feb5e3.yaml
deleted file mode 100644
index f8eca807bec6..000000000000
--- a/releasenotes/notes/1.2/port_star_prerouting-13fae3ff78feb5e3.yaml
+++ /dev/null
@@ -1,11 +0,0 @@
----
-features_transpiler:
- - |
- Port part of the logic from the :class:`StarPrerouting`, used to
- find a star graph connectivity subcircuit and replaces it with a
- linear routing equivalent.
- - |
- The function :func:`star_preroute` now performs the heavily lifting
- to transform the dag by in the rust space by taking advantage
- of the functions :func:`_build_sabre_dag` and
- :func:`_apply_sabre_result`.
diff --git a/releasenotes/notes/1.2/qasm2-builtin-gate-d80c2868cdf5f958.yaml b/releasenotes/notes/1.2/qasm2-builtin-gate-d80c2868cdf5f958.yaml
deleted file mode 100644
index bfcf867f2a3b..000000000000
--- a/releasenotes/notes/1.2/qasm2-builtin-gate-d80c2868cdf5f958.yaml
+++ /dev/null
@@ -1,7 +0,0 @@
----
-fixes:
- - |
- The OpenQASM 2 importer previously would output incorrect :class:`.Gate` instances for gate
- calls referring to a ``gate`` definition that followed a prior ``gate`` definition that was
- being treated as a built-in operation by a :class:`~.qasm2.CustomInstruction`. See
- `#13339 `__ for more detail.
diff --git a/releasenotes/notes/1.2/qasm3-basis-gates-keyword-c5998bff1e178715.yaml b/releasenotes/notes/1.2/qasm3-basis-gates-keyword-c5998bff1e178715.yaml
deleted file mode 100644
index 82347fd920fc..000000000000
--- a/releasenotes/notes/1.2/qasm3-basis-gates-keyword-c5998bff1e178715.yaml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-fixes:
- - |
- The OpenQASM 3 exporter will now correctly error when asked to use a keyword or other invalid
- identifier as a "basis gate", as it has no way of putting out correct output in these cases.
diff --git a/releasenotes/notes/1.2/qasm3-includes-ceb56f49b8c190ff.yaml b/releasenotes/notes/1.2/qasm3-includes-ceb56f49b8c190ff.yaml
deleted file mode 100644
index 25270fcb6359..000000000000
--- a/releasenotes/notes/1.2/qasm3-includes-ceb56f49b8c190ff.yaml
+++ /dev/null
@@ -1,11 +0,0 @@
----
-fixes:
- - |
- The OpenQASM 3 exporter has restored its behavior of accepting non-standard-library include
- files in the ``includes`` argument to :func:`.qasm3.dump`, :func:`~.qasm3.dumps`, and
- :class:`~.qasm3.Exporter`. These will insert a suitable ``include`` statement into the output
- as before, and the exporter remains unaware of the intended gates in that include file; you
- should pass the gates you expect it to define in the ``basis_gates`` argument to the same functions.
-
- We expect to improve the export mechanism against non-standard include files in a future release
- of Qiskit.
diff --git a/releasenotes/notes/1.2/qasm3-symbol-table-efad35629639c77d.yaml b/releasenotes/notes/1.2/qasm3-symbol-table-efad35629639c77d.yaml
deleted file mode 100644
index 144e0dee279c..000000000000
--- a/releasenotes/notes/1.2/qasm3-symbol-table-efad35629639c77d.yaml
+++ /dev/null
@@ -1,18 +0,0 @@
----
-features_qasm:
- - |
- The internal symbol table of the OpenQASM 3 exporter (:mod:`qiskit.qasm3`) has been rewritten,
- which should result in cleaner outputs when using Qiskit standard-library gates that are not in
- the OpenQASM 3 standard-library headers, and more deterministic outputs. For example, using
- several :class:`.RZXGate`\ s will now result in only a single parametric definition, and when
- naming collisions occur, the symbol table will assign a deterministic counter to make names
- unique, rather than a non-deterministic integer (previously, the object identity was used).
-fixes:
- - |
- The OpenQASM 3 exporter (:mod:`qiskit.qasm3`) will now correctly export multiple instances of
- :class:`.PauliEvolutionGate` from a circuit. Previously, only a single instance would be exported,
- and all other instances would silently use the same (incorrect) version.
- - |
- The OpenQASM 3 exporter (:mod:`qiskit.qasm3`) will now correctly escape gate names. Previously,
- a gate whose name was an invalid OpenQASM 3 identifier would cause invalid OpenQASM 3 to be
- generated.
diff --git a/releasenotes/notes/1.2/replace-initialization-algorithm-by-isometry-41f9ffa58f72ece5.yaml b/releasenotes/notes/1.2/replace-initialization-algorithm-by-isometry-41f9ffa58f72ece5.yaml
deleted file mode 100644
index 5bf8e7a80b48..000000000000
--- a/releasenotes/notes/1.2/replace-initialization-algorithm-by-isometry-41f9ffa58f72ece5.yaml
+++ /dev/null
@@ -1,7 +0,0 @@
----
-features_circuits:
- - |
- Replacing the internal synthesis algorithm of :class:`~.library.StatePreparation`
- and :class:`~.library.Initialize` of Shende et al. by the algorithm given in
- :class:`~.library.Isometry` of Iten et al.
- The new algorithm reduces the number of CX gates and the circuit depth by a factor of 2.
diff --git a/releasenotes/notes/1.2/restrict-split2q-d51d840cc7a7a482.yaml b/releasenotes/notes/1.2/restrict-split2q-d51d840cc7a7a482.yaml
deleted file mode 100644
index 009a97720e30..000000000000
--- a/releasenotes/notes/1.2/restrict-split2q-d51d840cc7a7a482.yaml
+++ /dev/null
@@ -1,8 +0,0 @@
----
-fixes:
- - |
- Fixed an edge case when transpiling a circuit with ``optimization_level`` 2 or 3 with an
- incomplete 1-qubit basis gate set on a circuit containing 2-qubit gates, that can be
- implemented as a product of single qubit gates. This bug is resolved by restricting
- :class:`.Split2QUnitaries` to consider only :class:`.UnitaryGate` objects.
- Fixed `#12970 `__.
diff --git a/releasenotes/notes/1.2/sabre_level0-1524f01965257f3f.yaml b/releasenotes/notes/1.2/sabre_level0-1524f01965257f3f.yaml
deleted file mode 100644
index c24775d6d096..000000000000
--- a/releasenotes/notes/1.2/sabre_level0-1524f01965257f3f.yaml
+++ /dev/null
@@ -1,13 +0,0 @@
----
-upgrade_transpiler:
- - |
- The default routing pass used by optimization level 0 for :func:`.generate_preset_pass_manager`
- and :func:`.transpile` has been changed from :class:`.StochasticSwap` to :class:`.SabreSwap`.
- The :class:`.SabreSwap` pass performs exactly the same function but performs better in both
- runtime and output quality (in number of swap gates and depth) compared to
- :class:`.StochasticSwap`. For ``optimization_level=0`` this shouldn't matter because it's not
- expected to run routing for the typical use case of level 0.
-
- If you were relying on the previous default routing algorithm for any reason you can use the
- ``routing_method`` argument for :func:`.transpile` and :func:`.generate_preset_pass_manager`
- to ``"stochastic"`` to use the :class:`.StochasticSwap` pass.
diff --git a/releasenotes/notes/1.2/synth_permutation_depth_lnn_kms-c444f3a363f3a903.yaml b/releasenotes/notes/1.2/synth_permutation_depth_lnn_kms-c444f3a363f3a903.yaml
deleted file mode 100644
index 65f81686cd33..000000000000
--- a/releasenotes/notes/1.2/synth_permutation_depth_lnn_kms-c444f3a363f3a903.yaml
+++ /dev/null
@@ -1,4 +0,0 @@
----
-features_synthesis:
- - |
- Port :func:`.synth_permutation_depth_lnn_kms`, used to synthesize permutations for linear connectivity, to Rust.
\ No newline at end of file
diff --git a/releasenotes/notes/1.2/unary_pos_for_parameterexpression-6421421b6dc20fbb.yaml b/releasenotes/notes/1.2/unary_pos_for_parameterexpression-6421421b6dc20fbb.yaml
deleted file mode 100644
index 92fc63d49892..000000000000
--- a/releasenotes/notes/1.2/unary_pos_for_parameterexpression-6421421b6dc20fbb.yaml
+++ /dev/null
@@ -1,4 +0,0 @@
----
-features_circuits:
- - |
- :class:`.ParameterExpression` now supports the unary ``+`` operator.
diff --git a/releasenotes/notes/1.2/update-primitive-v2-metadata-cf1226e2d6477688.yaml b/releasenotes/notes/1.2/update-primitive-v2-metadata-cf1226e2d6477688.yaml
deleted file mode 100644
index 570f5211b080..000000000000
--- a/releasenotes/notes/1.2/update-primitive-v2-metadata-cf1226e2d6477688.yaml
+++ /dev/null
@@ -1,13 +0,0 @@
----
-features_primitives:
- - |
- The metadata of Primitives V2 implementations, i.e., :class:`.StatevectorSampler`,
- :class:`.StatevectorEstimator`, :class:`.BackendSamplerV2` and :class:`.BackendEstimatorV2`,
- has been updated to match that of IBM quantum devices.
-
- * ``version`` and ``circuit_metadata`` are added for all V2 implementations
- * ``shots`` is added for :class:`.BackendSamplerV2` and :class:`.BackendEstimatorV2`
- * ``precision`` is renamed with ``target_precision`` for :class:`.StatevectorEstimator`
-
- Note that metadata of :class:`.StatevectorEstimator` does not have ``shots`` because
- the class computes expectation values with :class:`.Statevector` and shots are not used.
diff --git a/releasenotes/notes/1.2/update-qasm3-lib-40e15bc24234970d.yaml b/releasenotes/notes/1.2/update-qasm3-lib-40e15bc24234970d.yaml
deleted file mode 100644
index 2e65b89637ff..000000000000
--- a/releasenotes/notes/1.2/update-qasm3-lib-40e15bc24234970d.yaml
+++ /dev/null
@@ -1,7 +0,0 @@
----
-features_qasm:
- - |
- The vendored version of the OpenQASM 3.0 standard library has been
- updated to match `the state as of commit 4ca1d79383 `__.
- This should generally have no effect on your use of Qiskit, unless you
- were retrieving our vendored file for your own use.
diff --git a/releasenotes/notes/1.2/update-rustworkx-min-version-4f07aacfebccae80.yaml b/releasenotes/notes/1.2/update-rustworkx-min-version-4f07aacfebccae80.yaml
deleted file mode 100644
index 7661f82aee8b..000000000000
--- a/releasenotes/notes/1.2/update-rustworkx-min-version-4f07aacfebccae80.yaml
+++ /dev/null
@@ -1,7 +0,0 @@
----
-upgrade_misc:
- - |
- The minimum version of rustworkx required to run this release has been
- increased from 0.14.0 to 0.15.0. This is required because Qiskit is now
- using new functionality added in the rustworkx 0.15.0 release which
- improves performance.
diff --git a/releasenotes/notes/1.2/use-target-in-generate-preset-pm-5215e00d22d0205c.yaml b/releasenotes/notes/1.2/use-target-in-generate-preset-pm-5215e00d22d0205c.yaml
deleted file mode 100644
index 0dabc3b48253..000000000000
--- a/releasenotes/notes/1.2/use-target-in-generate-preset-pm-5215e00d22d0205c.yaml
+++ /dev/null
@@ -1,20 +0,0 @@
----
-features_transpiler:
- - |
- A new ``dt`` argument has been added to :func:`.generate_preset_pass_manager` to match
- the set of arguments of :func:`.transpile`. This will allow for the internal conversion
- of transpilation constraints to a :class:`.Target` representation.
-
-upgrade_transpiler:
- - |
- The :func:`.generate_preset_pass_manager` function has been upgraded to, when possible,
- internally convert transpiler constraints into a :class:`.Target` instance.
- If a `backend` input of type :class:`.BackendV1` is provided, it will be
- converted to :class:`.BackendV2` to expose its :class:`.Target`. This change does
- not require any user action.
-
-fixes:
- - |
- A series of input-handling inconsistencies between :func:`.transpile` and :func:`.generate_preset_pass_manager`
- have been fixed. These inconsistencies would lead to different transpilation outputs for the same inputs,
- or :func:`.generate_preset_pass_manager` failing for certain input combinations accepted by :func:`.transpile`.
\ No newline at end of file
diff --git a/releasenotes/notes/1.2/workaroud_12361-994d0ac2d2a6ed41.yaml b/releasenotes/notes/1.2/workaroud_12361-994d0ac2d2a6ed41.yaml
deleted file mode 100644
index 9c19be117ed2..000000000000
--- a/releasenotes/notes/1.2/workaroud_12361-994d0ac2d2a6ed41.yaml
+++ /dev/null
@@ -1,14 +0,0 @@
----
-features_visualization:
- - |
- The user configuration file has a new option ``circuit_idle_wires``, which takes a Boolean
- value. This allows users to set their preferred default behavior of the ``idle_wires`` option
- of the circuit drawers :meth:`.QuantumCircuit.draw` and :func:`.circuit_drawer`. For example,
- adding a section to ``~/.qiskit/settings.conf`` with:
-
- .. code-block:: text
-
- [default]
- circuit_idle_wires = false
-
- will change the default to display the bits in reverse order.
diff --git a/releasenotes/notes/1.3/Parameterized-commutation-checker-8a78a4715bf78b4e.yaml b/releasenotes/notes/1.3/Parameterized-commutation-checker-8a78a4715bf78b4e.yaml
index 72bd9aefe726..796640479e0d 100644
--- a/releasenotes/notes/1.3/Parameterized-commutation-checker-8a78a4715bf78b4e.yaml
+++ b/releasenotes/notes/1.3/Parameterized-commutation-checker-8a78a4715bf78b4e.yaml
@@ -3,12 +3,10 @@ features_circuits:
- |
Improved the functionality of :class:`.CommutationChecker` to include
support for the following parameterized gates with free parameters:
- :class:`.RXXGate`,:class:`.RYYGate`,:class:`.RZZGate`,:class:`.RZXGate`,
- :class:`.RXGate`,:class:`.RYGate`,:class:`.RZGate`,:class:`.PhaseGate`,
- :class:`.U1Gate`,:class:`.CRXGate`,:class:`.CRYGate`,:class:`.CRZGate`,
- :class:`.CPhaseGate`.
-
- Before these were only supported with bound parameters.
+ :class:`.RXXGate`, :class:`.RYYGate`, :class:`.RZZGate`, :class:`.RZXGate`,
+ :class:`.RXGate`, :class:`.RYGate`, :class:`.RZGate`, :class:`.PhaseGate`,
+ :class:`.U1Gate`, :class:`.CRXGate`, :class:`.CRYGate`, :class:`.CRZGate`,
+ :class:`.CPhaseGate`. Before, these were only supported with bound parameters.
diff --git a/releasenotes/notes/1.3/add-gates-to-collect-clifford-af88dd8f7a2a4bf9.yaml b/releasenotes/notes/1.3/add-gates-to-collect-clifford-af88dd8f7a2a4bf9.yaml
index 05de0af70528..d0d4ca9d59ef 100644
--- a/releasenotes/notes/1.3/add-gates-to-collect-clifford-af88dd8f7a2a4bf9.yaml
+++ b/releasenotes/notes/1.3/add-gates-to-collect-clifford-af88dd8f7a2a4bf9.yaml
@@ -1,7 +1,7 @@
---
features_transpiler:
- |
- Add an argument ``matrix_based`` to the :class:`.CollectCliffords()` transpiler pass.
+ Add argument ``matrix_based`` to the :class:`.CollectCliffords` transpiler pass.
If the new parameter ``matrix_based=True``, the :class:`.CollectCliffords()` transpiler pass
can collect :class:`.RZGate(np.pi/2)` gates and other unitary gates that are :class:`.Clifford()`
gates for certain parameters.
diff --git a/releasenotes/notes/1.3/add-identity-pass-builtin-2061b29b53b928d3.yaml b/releasenotes/notes/1.3/add-identity-pass-builtin-2061b29b53b928d3.yaml
index 0cf3d503aeea..bc83ec6bb526 100644
--- a/releasenotes/notes/1.3/add-identity-pass-builtin-2061b29b53b928d3.yaml
+++ b/releasenotes/notes/1.3/add-identity-pass-builtin-2061b29b53b928d3.yaml
@@ -2,7 +2,7 @@
features_transpiler:
- |
The :class:`.RemoveIdentityEquivalent` transpiler pass is now run as part
- of the preset pass managers at optimization levels 2 and 3. The pass is
- run in the ``init`` stage and the ``optimization`` stage, because the
+ of the preset pass managers at optimization levels 2 and 3. The pass runs
+ during the ``init`` and ``optimization`` stages, because the
optimizations it applies are valid in both stages and the pass is
fast to execute.
diff --git a/releasenotes/notes/1.3/add-mcx-plugins-85e5b248692a36db.yaml b/releasenotes/notes/1.3/add-mcx-plugins-85e5b248692a36db.yaml
index 84ec35942d0a..7148eaa83cb0 100644
--- a/releasenotes/notes/1.3/add-mcx-plugins-85e5b248692a36db.yaml
+++ b/releasenotes/notes/1.3/add-mcx-plugins-85e5b248692a36db.yaml
@@ -17,12 +17,15 @@ features_transpiler:
* :class:`.MCXSynthesisNoAuxV24`, based on :func:`.synth_mcx_noaux_v24`.
* :class:`.MCXSynthesisGrayCode`, based on :func:`.synth_mcx_gray_code`.
- As well:
+ As well as:
- * :class:`.MCXSynthesisDefault`, choosing the most efficient synthesis
+ * :class:`.MCXSynthesisDefault`, for choosing the most efficient synthesis
method based on the number of clean and dirty ancilla qubits available.
- As an example, consider how the transpilation of the following circuit::
+ As an example, consider the transpilation of the following circuit:
+
+ .. plot::
+ :include-source:
from qiskit.circuit import QuantumCircuit
from qiskit.compiler import transpile
@@ -33,7 +36,7 @@ features_transpiler:
qc.mcx([0, 1, 2, 3, 4], [5])
qc.mcx([0, 1, 2, 3, 4, 5], [6])
- transpile(qc)
+ transpile(qc).draw('mpl', fold=-1)
For the first MCX gate, qubits ``5`` and ``6`` can be used as clean
ancillas, and the best available synthesis method ``synth_mcx_n_clean_m15``
diff --git a/releasenotes/notes/1.3/add-more-sabre-trials-9b421f05d2f48d18.yaml b/releasenotes/notes/1.3/add-more-sabre-trials-9b421f05d2f48d18.yaml
index c91244c944d6..735380a2eb6f 100644
--- a/releasenotes/notes/1.3/add-more-sabre-trials-9b421f05d2f48d18.yaml
+++ b/releasenotes/notes/1.3/add-more-sabre-trials-9b421f05d2f48d18.yaml
@@ -2,10 +2,11 @@
features_transpiler:
- |
The :class:`.SabreLayout` transpiler pass has been updated to run an
- additional 2 or 3 layout trials by default independently of the
- ``layout_trials`` keyword argument's value. A trivial
- layout and its reverse are included for all backends, just like the :class:`.DenseLayout`
+ additional two or three layout trials by default, independently from the
+ ``layout_trials`` keyword argument's value. A trivial layout and its
+ reverse are included for all backends, just like the :class:`.DenseLayout`
trial that was added in 1.2.0. In addition to this, the largest rings on
- an IBM backend heavy hex connectivity graph are added if the backends are 127,
- 133, or 156 qubits. This can provide a good starting point for some circuits on these commonly run
- backends, while for all others it's just an additional "random trial".
+ an IBM backend heavy hex connectivity graph are added if the backends are
+ 127, 133, or 156 qubits. This can provide a good starting point for some
+ circuits on these commonly run backends, while for all others it's just
+ an additional "random trial".
diff --git a/releasenotes/notes/1.3/add-qpy-v13-3b22ae33045af6c1.yaml b/releasenotes/notes/1.3/add-qpy-v13-3b22ae33045af6c1.yaml
index 3cc80adc0b5c..d1d6ea3e2795 100644
--- a/releasenotes/notes/1.3/add-qpy-v13-3b22ae33045af6c1.yaml
+++ b/releasenotes/notes/1.3/add-qpy-v13-3b22ae33045af6c1.yaml
@@ -5,29 +5,22 @@ features_qpy:
of :class:`.ParameterExpression` objects.
issues:
- |
- When using QPY formats 10, 11, or 12 there is a dependency on the version
- of ``symengine`` installed in the payload for serialized
- :class:`.ParamerExpression` if there is mismatched version of the installed
- ``symengine`` package between the environment that generated the payload with
- :func:`.qpy.dump` and the installed version that is trying to load the payload
- with :func:`.qpy.load`. If this is encountered you will need to install the
- symengine version from the error message emitted to load the payload. QPY
- format version >= 13 (or < 10) will not have this issue and it is recommended
- if you're serializing :class:`.ParameterExpression` objects as part of your
- circuit or any :class:`.ScheduleBlock` objects you use version 13 to avoid
+ When using QPY formats 10, 11, or 12 with circuits that contain
+ :class:`.ParamerExpression`\s, if the version of the ``symengine`` package
+ installed in the environment that generated the payload (:func:`.qpy.dump`) does
+ not match the version of ``symengine`` installed in the enviroment where the
+ payload is loaded (:func:`.qpy.load`), you will get an error. If you encounter
+ this error, install the ``symengine`` version from the error message
+ before calling :func:`.qpy.load`. QPY format versions 13 or later
+ (or prior to 10) will not have this issue. Therefore, if you're serializing
+ :class:`.ParameterExpression` objects as part of your circuit or any
+ :class:`.ScheduleBlock` objects, it is recommended that you use version 13 to avoid
this issue in the future.
upgrade_qpy:
- |
- The :func:`.qpy.dump` function will now emit format version 13 by default.
- This means payloads generated with this function by default will only
- be compatible with Qiskit >= 1.3.0. If you need for the payload to be
- loaded by a older version of Qiskit you can use the ``version`` flag on
- :func:`.qpy.dump` to emit a version compatible with earlier releases of
- Qiskit. You can refer to :ref:`qpy_compatibility` for more details on this.
-# security:
-# - |
-# Add security notes here, or remove this section. All of the list items in
-# this section are combined when the release notes are rendered, so the text
-# needs to be worded so that it does not depend on any information only
-# available in another section, such as the prelude. This may mean repeating
-# some details.
+ The :func:`.qpy.dump` function now emits format version 13 by default.
+ This means payloads generated with this function by default are only
+ compatible with Qiskit 1.3.0 or later. If the payload needs to be
+ loaded by an earlier version of Qiskit, use the ``version`` flag on
+ :func:`.qpy.dump` to emit the appropriate version. Refer to
+ :ref:`qpy_compatibility` for more details.
diff --git a/releasenotes/notes/1.3/add-qv-function-a8990e248d5e7e1a.yaml b/releasenotes/notes/1.3/add-qv-function-a8990e248d5e7e1a.yaml
index 689c5e4623b0..0ed4937c4bce 100644
--- a/releasenotes/notes/1.3/add-qv-function-a8990e248d5e7e1a.yaml
+++ b/releasenotes/notes/1.3/add-qv-function-a8990e248d5e7e1a.yaml
@@ -1,10 +1,9 @@
---
features_circuits:
- |
- Added a new function :func:`.quantum_volume` for generating a quantum volume
+ Added a new function :func:`~qiskit.circuit.library.quantum_volume` for generating a quantum volume
:class:`.QuantumCircuit` object as defined in A. Cross et al. Validating quantum computers
- using randomized model circuits, Phys. Rev. A 100, 032328 (2019)
- `https://link.aps.org/doi/10.1103/PhysRevA.100.032328 `__.
+ using randomized model circuits, `Phys. Rev. A 100, 032328 (2019) `__.
This new function differs from the existing :class:`.QuantumVolume` class in that it returns
a :class:`.QuantumCircuit` object instead of building a subclass object. The second is
that this new function is multithreaded and implemented in rust so it generates the output
@@ -12,8 +11,8 @@ features_circuits:
- |
Improved the runtime performance of constructing the
:class:`.QuantumVolume` class with the ``classical_permutation`` argument set
- to ``True``. Internally it now calls the :func:`.quantum_volume`
- function which is written in Rust which is ~10x faster to generate a
+ to ``True``. Internally it now calls the :func:`~qiskit.circuit.library.quantum_volume`
+ function which is written in Rust and is ~10x faster when generating a
quantum volume circuit.
upgrade_circuits:
diff --git a/releasenotes/notes/1.3/add-random-clifford-util-5358041208729988.yaml b/releasenotes/notes/1.3/add-random-clifford-util-5358041208729988.yaml
deleted file mode 100644
index 7f2e20db6522..000000000000
--- a/releasenotes/notes/1.3/add-random-clifford-util-5358041208729988.yaml
+++ /dev/null
@@ -1,14 +0,0 @@
----
-features_circuits:
- - |
- Added a new function to ``qiskit.circuit.random`` that allows to generate a pseudo-random
- Clifford circuit with gates from the standard library: :func:`.random_clifford_circuit`.
- Example usage:
-
- .. plot::
- :include-source:
-
- from qiskit.circuit.random import random_clifford_circuit
-
- circ = random_clifford_circuit(num_qubits=2, num_gates=6)
- circ.draw(output='mpl')
diff --git a/releasenotes/notes/1.3/assign-parameters-perf-regression-fc8c9db134b1763d.yaml b/releasenotes/notes/1.3/assign-parameters-perf-regression-fc8c9db134b1763d.yaml
index 28f29b63ea2a..53d636da1040 100644
--- a/releasenotes/notes/1.3/assign-parameters-perf-regression-fc8c9db134b1763d.yaml
+++ b/releasenotes/notes/1.3/assign-parameters-perf-regression-fc8c9db134b1763d.yaml
@@ -2,8 +2,8 @@
fixes:
- |
Fixed a performance regression in :meth:`.QuantumCircuit.assign_parameters` introduced in Qiskit
- 1.2.0 when calling the method in a tight loop, binding only a small number of parameters out of
- a heavily parametric circuit on each iteration. If possible, it is still more performant to
- call :meth:`~.QuantumCircuit.assign_parameters` only once, with all assignments at the same
- time, as this reduces the proportion of time spent on input normalization and error-checking
- overhead.
+ 1.2.0 when calling the method in a tight loop, that caused only a small number of
+ parameters from a heavily parametric circuit to be bound on each iteration. If possible, it is still
+ more performant to call :meth:`~.QuantumCircuit.assign_parameters` only once, with all
+ assignments at the same time, as this reduces the proportion of time spent on input normalization
+ and error-checking overhead.
diff --git a/releasenotes/notes/1.3/backend-estimator-v2-variance-905c953415ad0e29.yaml b/releasenotes/notes/1.3/backend-estimator-v2-variance-905c953415ad0e29.yaml
deleted file mode 100644
index ba672a327daa..000000000000
--- a/releasenotes/notes/1.3/backend-estimator-v2-variance-905c953415ad0e29.yaml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-fixes:
- - |
- Changes the way in which the :class:`.BackendEstimatorV2` class calculates the ``std`` to ensure that
- it matches the correct formula.
diff --git a/releasenotes/notes/1.3/backend-sampler-v2-level1-dc13af460cd38454.yaml b/releasenotes/notes/1.3/backend-sampler-v2-level1-dc13af460cd38454.yaml
index 594e610939cf..9e6246d43c2b 100644
--- a/releasenotes/notes/1.3/backend-sampler-v2-level1-dc13af460cd38454.yaml
+++ b/releasenotes/notes/1.3/backend-sampler-v2-level1-dc13af460cd38454.yaml
@@ -1,17 +1,19 @@
---
-features:
+features_primitives:
- |
- Support for level 1 data was added to :class:`~.BackendSamplerV2` as was
+ Support for level 1 data was added to :class:`~.BackendSamplerV2`, as was
support for passing options through to the ``run()`` method of the wrapped
- :class:`~.BackendV2`. The run options can be specified using a
- ``"run_options"`` entry inside of the ``options`` dicitonary passed to
+ :class:`~.BackendV2`. The run options can be specified by using a
+ ``"run_options"`` entry inside the ``options`` dictionary passed to
:class:`~.BackendSamplerV2`. The ``"run_options"`` entry should be a
- dictionary mapping argument names to values for passing to the backend's
- ``run()`` method. When a ``"meas_level"`` option with a value of 1 is set
+ dictionary that maps argument names to values to be passed to the backend's
+ ``run()`` method. When a ``"meas_level = 1 "`` is set
in the run options, the results from the backend will be treated as level 1
- results rather as bit arrays (the level 2 format).
-upgrade:
+ results instead of bit arrays (the level 2 format).
+upgrade_primitives:
- |
When using :class:`~.BackendSamplerV2`, circuit metadata is no longer
cleared before passing circuits to the ``run()`` method of the wrapped
- :class:`~.BackendV2` instance.
+ :class:`~.BackendV2` instance. If you were previously
+ relying on this behavior you can manually clear the metadata before
+ calling :meth:`.BackendSamplerV2.run` by calling ``circuit.metadata.clear()``
diff --git a/releasenotes/notes/1.3/barebone-backend-option-675c86df4382a443.yaml b/releasenotes/notes/1.3/barebone-backend-option-675c86df4382a443.yaml
deleted file mode 100644
index 912970845042..000000000000
--- a/releasenotes/notes/1.3/barebone-backend-option-675c86df4382a443.yaml
+++ /dev/null
@@ -1,8 +0,0 @@
----
-features:
- - |
- Added two parameters to :class:`.GenericBackendV2` to exclude error (`noise_info`) and
- pulse channel information (`pulse_channels`) from the construction of the backend. These parameters
- are true by default, replicating the initial default behavior of the constructor. A memory-sensitive
- user may set these options to `False` to reduce the memory overhead by 40x when transpiling on large-
- scale :class:`.GenericBackendV2`.
diff --git a/releasenotes/notes/1.3/basicsimulator-config-copy-5ecdfdf161e488f2.yaml b/releasenotes/notes/1.3/basicsimulator-config-copy-5ecdfdf161e488f2.yaml
index b5ec0112004e..851ac6644b40 100644
--- a/releasenotes/notes/1.3/basicsimulator-config-copy-5ecdfdf161e488f2.yaml
+++ b/releasenotes/notes/1.3/basicsimulator-config-copy-5ecdfdf161e488f2.yaml
@@ -2,6 +2,6 @@
fixes:
- |
For :class:`~.BasicSimulator`, the ``basis_gates`` entry in the
- configuration instance returned by the ``configuration()`` is now a list
- rather than a ``dict_keys`` instance, matching the expected type and
- allowing for configuration instance to be deep copied.
+ configuration instance returned by the ``configuration()`` method is
+ now a list instead of a ``dict_keys`` instance, matching the expected
+ type and allowing for configuration instance to be deep copied.
diff --git a/releasenotes/notes/1.3/binary-arithmetic-gates-6cd2b1c8112febe0.yaml b/releasenotes/notes/1.3/binary-arithmetic-gates-6cd2b1c8112febe0.yaml
index a082a98389ad..c76e0cb8b041 100644
--- a/releasenotes/notes/1.3/binary-arithmetic-gates-6cd2b1c8112febe0.yaml
+++ b/releasenotes/notes/1.3/binary-arithmetic-gates-6cd2b1c8112febe0.yaml
@@ -1,11 +1,10 @@
---
features_circuits:
- |
- Added binary arithmetic gates for inplace addition two :math:`n`-qubit registers, that is
- :math:`|a\rangle |b\rangle \mapsto |a\rangle |a+b\rangle`.
- The :class:`.ModularAdderGate` implements addition modulo :math:`2^n`, the
- :class:`.AdderGate` implements standard addition including a carry-out, and the
- :class:`.FullAdderGate` includes a carry-in qubit. See the respective documentations for
+ Added binary arithmetic gates for inplace addition of two :math:`n`-qubit registers,
+ that is :math:`|a\rangle |b\rangle \mapsto |a\rangle |a+b\rangle`.
+ The :class:`.ModularAdderGate` implements addition modulo :math:`2^n`, and the
+ :class:`.FullAdderGate` includes a carry-in qubit. See the respective documentation for
details and examples.
In contrast to the existing library circuits, such as :class:`.CDKMRippleCarryAdder`,
@@ -13,13 +12,13 @@ features_circuits:
synthesis, depending on the circuit's context.
- |
Added the :class:`.MultiplierGate` for multiplication of two :math:`n`-qubit registers, that is
- :math:`|a\rangle |b\rangle \mapsto |a\rangle |b\rangle |a \cdot b\rangle`.
- See the class documentations for details and examples.
+ :math:`|a\rangle |b\rangle |0\rangle \mapsto |a\rangle |b\rangle |a \cdot b\rangle`.
+ See the class documentation for details and examples.
features_synthesis:
- |
Added :func:`.adder_qft_d00`, :func:`.adder_ripple_c04`, and :func:`.adder_ripple_v95`
- to synthesize the adder gates, :class:`.ModularAdderGate`, :class:`.AdderGate`, and
+ to synthesize the adder gates, :class:`.ModularAdderGate`, :class:`.HalfAdderGate`, and
:class:`.FullAdderGate`.
- |
Added :func:`.multiplier_cumulative_h18` and :func:`.multiplier_qft_r17`
- to synthesize the :class:`.MultiplierGate`.
\ No newline at end of file
+ to synthesize the :class:`.MultiplierGate`.
diff --git a/releasenotes/notes/1.3/boolean-logic-gates-40add5cf0b20b5e9.yaml b/releasenotes/notes/1.3/boolean-logic-gates-40add5cf0b20b5e9.yaml
index d1de403ab4f7..28b53fd0f6ca 100644
--- a/releasenotes/notes/1.3/boolean-logic-gates-40add5cf0b20b5e9.yaml
+++ b/releasenotes/notes/1.3/boolean-logic-gates-40add5cf0b20b5e9.yaml
@@ -1,8 +1,10 @@
---
features_circuits:
- |
- Quantum circuits in :mod:`qiskit.circuit.library.boolean_logic` now have equivalent
- representations as :class:`.Gate` objects:
+ The boolean logic quantum circuits in :mod:`qiskit.circuit.library`
+ now have equivalent representations as :class:`.Gate` objects enabling
+ their use with :class:`.HighLevelSynthesis` transpiler pass and plugin
+ infrastructure.
* :class:`~qiskit.circuit.library.AndGate`,
representing :class:`~qiskit.circuit.library.AND`,
diff --git a/releasenotes/notes/1.3/circuit-draw-warn-justify-03434d30cccda452.yaml b/releasenotes/notes/1.3/circuit-draw-warn-justify-03434d30cccda452.yaml
deleted file mode 100644
index 9ae15212fd56..000000000000
--- a/releasenotes/notes/1.3/circuit-draw-warn-justify-03434d30cccda452.yaml
+++ /dev/null
@@ -1,13 +0,0 @@
----
-deprecations_visualization:
- - |
- The ``justify`` argument of :func:`circuit_drawer` or :meth:`QuantumCircuit.draw`, will
- no longer support invalid values (previously changing them to the default), and in a future
- release they will error. Valid justify values are ``"left"``, ``"right"`` or ``"none"``.
-fixes:
- - |
- Fixed an issue where :func:`circuit_drawer` or the :meth:`QuantumCircuit.draw` method would
- not raise a warning when an invalid value was passed to the ``justify`` argument, before
- changing it to the default. Now, it will raise a warning if an invalid value is passed.
- Valid justify values are ``"left"``, ``"right"`` or ``"none"``. Refer to
- `#12089 ` for more details.
diff --git a/releasenotes/notes/1.3/clib-evolved-ops-e91c00964c0209ce.yaml b/releasenotes/notes/1.3/clib-evolved-ops-e91c00964c0209ce.yaml
index 64d81b5e01ed..0674ae9b72b9 100644
--- a/releasenotes/notes/1.3/clib-evolved-ops-e91c00964c0209ce.yaml
+++ b/releasenotes/notes/1.3/clib-evolved-ops-e91c00964c0209ce.yaml
@@ -1,13 +1,13 @@
---
features_circuits:
- |
- Added :func:`.evolved_operator_ansatz`, :func:`.hamiltonian_variational_ansatz`, and
- :func:`.qaoa_ansatz` to the circuit library to implement variational circuits based on
- operator evolutions. :func:`.evolved_operator_ansatz` and :func:`.qaoa_ansatz` are
+ Added :func:`~qiskit.circuit.library.evolved_operator_ansatz`, :func:`~qiskit.circuit.library.hamiltonian_variational_ansatz`, and
+ :func:`~qiskit.circuit.library.qaoa_ansatz` into the circuit library to implement variational circuits based on
+ operator evolutions. :func:`~qiskit.circuit.library.evolved_operator_ansatz` and :func:`~qiskit.circuit.library.qaoa_ansatz` are
functionally equivalent to :class:`.EvolvedOperatorAnsatz` and :class:`.QAOAAnsatz`, but
generally more performant.
- The :func:`.hamiltonian_variational_ansatz` is designed to take a single Hamiltonian and
+ The :func:`~qiskit.circuit.library.hamiltonian_variational_ansatz` is designed to take a single Hamiltonian and
automatically split it into commuting terms to implement a Hamiltonian variational ansatz.
This could already be achieved manually by using the :class:`.EvolvedOperatorAnsatz`, but
is now more convenient to use.
diff --git a/releasenotes/notes/1.3/clib-grover-op-cb032144e899ed0d.yaml b/releasenotes/notes/1.3/clib-grover-op-cb032144e899ed0d.yaml
index 93629bb1fa9a..f536d6026ced 100644
--- a/releasenotes/notes/1.3/clib-grover-op-cb032144e899ed0d.yaml
+++ b/releasenotes/notes/1.3/clib-grover-op-cb032144e899ed0d.yaml
@@ -1,14 +1,15 @@
---
features_circuits:
- |
- Added :func:`.grover_operator` to construct a Grover operator circuit, used in e.g.
- Grover's algorithm and amplitude estimation/amplification. This function is similar to
- :class:`.GroverOperator`, but does not require choosing the implementation of the
- multi-controlled X gate a-priori and let's the compiler choose the optimal decomposition
- instead. In addition to this, it does not wrap the circuit into an opaque gate and is
- faster as less decompositions are required to transpile.
+ Added :func:`~qiskit.circuit.library.grover_operator` to construct a Grover operator circuit, used in
+ Grover's algorithm and amplitude estimation/amplification, for example. This function is similar to
+ :class:`.GroverOperator`, but does not require you to choose the implementation of the
+ multi-controlled X gate, but instead lets the compiler determine the optimal decomposition.
+ Additionally, it does not wrap the circuit into an opaque gate and is
+ faster because fewer decompositions are required for transpilation.
- Example::
+ .. plot::
+ :include-source:
from qiskit.circuit import QuantumCircuit
from qiskit.circuit.library import grover_operator
@@ -16,4 +17,4 @@ features_circuits:
oracle = QuantumCircuit(2)
oracle.z(0) # good state = first qubit is |1>
grover_op = grover_operator(oracle, insert_barriers=True)
- print(grover_op.draw())
+ grover_op.draw('mpl')
diff --git a/releasenotes/notes/1.3/dag-oxide-60b3d7219cb21703.yaml b/releasenotes/notes/1.3/dag-oxide-60b3d7219cb21703.yaml
index 090a8226c111..0963c10ed006 100644
--- a/releasenotes/notes/1.3/dag-oxide-60b3d7219cb21703.yaml
+++ b/releasenotes/notes/1.3/dag-oxide-60b3d7219cb21703.yaml
@@ -1,25 +1,23 @@
---
features_transpiler:
- |
- The implementation of the :class:`.DAGCircuit` has been rewritten in Rust. This rewrite of
- the Python class should be fully API compatible with the previous Python implementation of
- the class. While the class was previously implemented using
- `rustworkx `__ and its underlying data graph structure existed
- in Rust, the implementation of the class and all the data was stored in Python. This new
- version of :class:`.DAGCircuit` stores a Rust native representation for all its data and
- is fully implemented in Rust. This new implementation should be more efficient in memory
- usage as it compresses the qubit and clbit representation for instructions at rest.
- It also enables speed up for transpiler passes as they can fully manipulate a
- :class:`.DAGCircuit` from Rust.
+ The :class:`.DAGCircuit` has been reimplemented in Rust. This rewrite of the Python class
+ should be fully API compatible with the previous Python implementation. While the class
+ was previously implemented using `rustworkx `__, for which
+ the underlying data graph structure exists in Rust, the implementation of the class and
+ all the data was lived in Python. This new version of :class:`.DAGCircuit` stores Rust native
+ representations for all its data and is more memory-efficient due to the compressed qubit
+ and clbit representation designed for instructions at rest. It also enables transpiler passes
+ to fully manipulate a :class:`.DAGCircuit` from Rust, enabling improvements in performance.
upgrade_transpiler:
- |
:class:`.DAGNode` objects (and its subclasses :class:`.DAGInNode`, :class:`.DAGOutNode`, and
:class:`.DAGOpNode`) no longer return references to the same underlying object from
:class:`.DAGCircuit` methods. This was never a guarantee before that all returned nodes would
- be shared reference to the same object, but with the migration of the :class:`.DAGCircuit` to
- Rust when a :class:`.DAGNode` a new :class:`.DAGNode` instance is generated on the fly when
- a node is returned to Python. These objects will evaluate as equal using ``==`` or similar
- checks that rely on ``__eq__`` but will no longer identify as the same object.
+ be shared reference to the same object. However, with the migration of the :class:`.DAGCircuit` to
+ Rust, a new :class:`.DAGNode` instance is generated on the fly when a node is returned to Python.
+ These objects will evaluate as equal using ``==`` or similar checks that rely on ``__eq__``
+ but will no longer identify as the same object.
- |
The :class:`.DAGOpNode` instances returned from the :class:`.DAGCircuit` are no longer shared
references to the underlying data stored on the DAG. In previous release it was possible to
diff --git a/releasenotes/notes/1.3/deprecate-basic-simulator-configuration-9d782925196993e9.yaml b/releasenotes/notes/1.3/deprecate-basic-simulator-configuration-9d782925196993e9.yaml
index 59b00df0cf5a..e4f20e549e75 100644
--- a/releasenotes/notes/1.3/deprecate-basic-simulator-configuration-9d782925196993e9.yaml
+++ b/releasenotes/notes/1.3/deprecate-basic-simulator-configuration-9d782925196993e9.yaml
@@ -8,7 +8,7 @@ deprecations_providers:
(``backend.target``).
Here is a quick guide for accessing the most common ``BackendConfiguration`` attributes in the
- :class:`BackendV2` model:""
+ :class:`BackendV2` model::
BackendV1 model (deprecated) ------------> BackendV2 model
---------------------------- ---------------
@@ -25,8 +25,8 @@ deprecations_providers:
backend.configuration().memory No representation
backend.configuration().max_shots No representation
- (*) Note that ``backend.target.operation_names`` includes ``basis_gates`` and additional
+ (*) Note that :attr:`.Backend.target.operation_names` includes ``basis_gates`` and additional
non-gate instructions, in some implementations it might be necessary to filter the output.
See `this guide `__
- for more information on migrating to the ``BackendV2`` model.
+ for more information on migrating to the :class:`.BackendV2` model.
diff --git a/releasenotes/notes/1.3/deprecate-condition_c_if-9548e5522814fe9c.yaml b/releasenotes/notes/1.3/deprecate-condition_c_if-9548e5522814fe9c.yaml
index e096273f3c8e..0676d6f1ad6e 100644
--- a/releasenotes/notes/1.3/deprecate-condition_c_if-9548e5522814fe9c.yaml
+++ b/releasenotes/notes/1.3/deprecate-condition_c_if-9548e5522814fe9c.yaml
@@ -21,9 +21,9 @@ deprecations_circuits:
qc = QuantumCircuit(2, 2)
qc.h(0)
- with expected.if_test((expected.clbits[0], True)):
+ with qc.if_test((qc.clbits[0], True)):
qc.x(0)
- with expected.if_test((expected.clbits[1], False)):
+ with qc.if_test((qc.clbits[1], False)):
qc.z(1)
qc.measure(0, 0)
qc.measure(1, 1)
diff --git a/releasenotes/notes/1.3/deprecate-custom-basis-gates-transpile-e4b5893377f23acb.yaml b/releasenotes/notes/1.3/deprecate-custom-basis-gates-transpile-e4b5893377f23acb.yaml
index e2e794e96708..1ef61ce9a52c 100644
--- a/releasenotes/notes/1.3/deprecate-custom-basis-gates-transpile-e4b5893377f23acb.yaml
+++ b/releasenotes/notes/1.3/deprecate-custom-basis-gates-transpile-e4b5893377f23acb.yaml
@@ -2,7 +2,7 @@
deprecations_transpiler:
- |
Providing custom gates through the ``basis_gates`` argument is deprecated
- for both :func:`.transpile` and :func:`generate_preset_pass_manager`, this functionality
+ for both :func:`.transpile` and :func:`generate_preset_pass_manager`. This functionality
will be removed in Qiskit 2.0. Custom gates are still supported in the :class:`.Target` model,
and can be provided through the ``target`` argument. One can build a :class:`.Target` instance
from scratch or use the :meth:`.Target.from_configuration` method with the ``custom_name_mapping``
diff --git a/releasenotes/notes/1.3/deprecate-mitigation-f5f6ef3233b3d726.yaml b/releasenotes/notes/1.3/deprecate-mitigation-f5f6ef3233b3d726.yaml
index 850b84f1fb17..ea1f30573bef 100644
--- a/releasenotes/notes/1.3/deprecate-mitigation-f5f6ef3233b3d726.yaml
+++ b/releasenotes/notes/1.3/deprecate-mitigation-f5f6ef3233b3d726.yaml
@@ -1,7 +1,7 @@
---
deprecations_misc:
- |
- The ``qiskit.result.mitigation`` module has been deprecated and will be removed in the 2.0 release.
- The deprecation includes the ``LocalReadoutMitigator`` and ``CorrelatedReadoutMitigator`` classes
- as well as the associated utils.
+ The :mod:`qiskit.result.mitigation` module has been deprecated and will be removed in Qiskit 2.0.
+ The deprecation includes the :class:`.LocalReadoutMitigator` and :class:`.CorrelatedReadoutMitigator` classes
+ as well as the associated utility functions.
Their functionality has been superseded by the mthree package, found in https://github.com/Qiskit/qiskit-addon-mthree.
diff --git a/releasenotes/notes/1.3/deprecate-pulse-package-07a621be1db7fa30.yaml b/releasenotes/notes/1.3/deprecate-pulse-package-07a621be1db7fa30.yaml
index 479c31556eb5..ff811d80507c 100644
--- a/releasenotes/notes/1.3/deprecate-pulse-package-07a621be1db7fa30.yaml
+++ b/releasenotes/notes/1.3/deprecate-pulse-package-07a621be1db7fa30.yaml
@@ -1,16 +1,21 @@
---
deprecations:
- |
- The Qiskit Pulse package is being deprecated and will be removed in Qiskit 2.0.0. Pulse-level
- access is currently only supported on a subset of Eagle devices and not supported on the Heron architecture. Furthermore, newer IBM Quantum architectures will not support pulse-level access.
- As a consequence, supporting Pulse as a first-class citizen frontend in the Qiskit SDK itself makes little
- sense going forward. The deprecation includes all pulse code in :mod:`qiskit.pulse` as well as functionality
- dependant or related to pulse such as pulse visualization, serialization and custom calibration support. For
- more details see the deprecation sections.
+ The :mod:`qiskit.pulse` module and all it's associated features is now deprecated and will be removed in Qiskit 2.0.0. This is because primary
+ backend provider with pulse support is IBM and pulse-level access is currently only supported on a subset
+ of IBM's backends is not supported on their newer architectures. Similarly they have announced that
+ `pulse level access will be removed in 2025 `__
+ Without the largest provider using the feature supporting pulse access anymore the importance of the feature to Qiskit is
+ significantly dimished and weighed against the continued maintanence overhead of the package it is beign removed.
+
+ The deprecation includes all pulse code in :mod:`qiskit.pulse` as well as functionality
+ dependent on or related to pulse, such as pulse visualization, serialization, and custom calibration support. For
+ more details see the deprecation sections below.
The Pulse package as a whole, along with directly related components in Qiskit, will be moved to the
`Qiskit Dynamics `__ repository to further enable
- pulse and low-level control simulation.
+ pulse and low-level control simulation. Qiskit 1.x will continue to support the :mod:`qiskit.pulse`
+ until it goes end-of-life.
deprecations_circuits:
- |
As part of the Qiskit Pulse package deprecation, the following dependencies are deprecated as well:
@@ -23,9 +28,9 @@ deprecations_circuits:
* :attr:`qiskit.dagcircuit.DAGDependency.calibrations`
deprecations_qpy:
- |
- As part of the Qiskit Pulse package deprecation, serializing a :class:`qiskit.pulse.ScheduleBlock`-based payloads
- is being deprecated. In particular, passing :class:`qiskit.pulse.ScheduleBlock` objects to the `programs` argument in
- the :func:`qiskit.qpy.dump` function is being deprecated.
+ As part of the Qiskit Pulse package deprecation, serializing :class:`qiskit.pulse.ScheduleBlock`-based payloads
+ is also being deprecated. Particularly the passing of :class:`qiskit.pulse.ScheduleBlock` objects to the `programs`
+ argument in the :func:`qiskit.qpy.dump`.
deprecations_transpiler:
- |
As part of the Qiskit Pulse package deprecation, pulse-related aspects in the :class:`qiskit.transpiler.Target` class are being deprecated. These include:
@@ -35,18 +40,18 @@ deprecations_transpiler:
* :meth:`~qiskit.transpiler.Target.get_calibration`
* :meth:`~qiskit.transpiler.Target.instruction_schedule_map`
- In addition the following transpiler passer are also being deprecated:
+ In addition, the following transpiler passes are also being deprecated:
* :class:`~qiskit.transpiler.passes.PulseGates`
* :class:`~qiskit.transpiler.passes.ValidatePulseGates`
* :class:`~qiskit.transpiler.passes.RXCalibrationBuilder`
* :class:`~qiskit.transpiler.passes.RZXCalibrationBuilder`
* :class:`~qiskit.transpiler.passes.EchoRZXWeylDecomposition`
- |
- The `inst_map` argument in :func:`~qiskit.transpiler.generate_preset_pass_manager`,
+ The ``inst_map`` argument in :func:`~qiskit.transpiler.generate_preset_pass_manager`,
:meth:`~transpiler.target.Target.from_configuration`, :class:`~qiskit.transpiler.PassManagerConfig` initializer
and :func:`~qiskit.transpiler.preset_passmanagers.common.generate_scheduling` is being deprecated.
- |
- The `calibration` argument in :func:`~qiskit.transpiler.target.InstructionProperties` initializer methods is being
+ The ``calibration`` argument in :func:`~qiskit.transpiler.target.InstructionProperties` initializer methods is being
deprecated.
deprecations_visualization:
- |
@@ -64,10 +69,10 @@ deprecations_providers:
Consequently, the corresponding channel methods in the :class:`qiskit.providers.BackendV2Converter` and
:class:`qiskit.providers.fake_provider.GenericBackendV2` classes are being deprecated as well.
- In addition, the `pulse_channels` and `calibrate_instructions` arguments in the :class:`~qiskit.providers.BackendV2`
+ In addition, the ``pulse_channels`` and ``calibrate_instructions`` arguments in the :class:`~qiskit.providers.BackendV2`
initializer method are being deprecated.
- |
- The `defaults` argument is being deprecated from the :func:`qiskit.providers.backend_compat.convert_to_target` function.
+ The ``defaults`` argument is being deprecated from the :func:`qiskit.providers.backend_compat.convert_to_target` function.
deprecations_misc:
- |
As part of the Qiskit Pulse package deprecation, the following functions and class are being deprecated as well:
diff --git a/releasenotes/notes/1.3/extended-random-circuits-049b67cce39003f4.yaml b/releasenotes/notes/1.3/extended-random-circuits-049b67cce39003f4.yaml
deleted file mode 100644
index f4bb585053bc..000000000000
--- a/releasenotes/notes/1.3/extended-random-circuits-049b67cce39003f4.yaml
+++ /dev/null
@@ -1,21 +0,0 @@
----
-features_circuits:
- - |
- The `random_circuit` function from `qiskit.circuit.random.utils` has a new feature where
- users can specify a distribution `num_operand_distribution` (a dict) that specifies the
- ratio of 1-qubit, 2-qubit, 3-qubit, and 4-qubit gates in the random circuit. For example,
- if `num_operand_distribution = {1: 0.25, 2: 0.25, 3: 0.25, 4: 0.25}` is passed to the function
- then the generated circuit will have approximately 25% of 1-qubit, 2-qubit, 3-qubit, and
- 4-qubit gates (The order in which the dictionary is passed does not matter i.e. you can specify
- `num_operand_distribution = {3: 0.5, 1: 0.0, 4: 0.3, 2: 0.2}` and the function will still work
- as expected). Also it should be noted that the if `num_operand_distribution` is not specified
- then `max_operands` will default to 4 and a random circuit with a random gate distribution will
- be generated. If both `num_operand_distribution` and `max_operands` are specified at the same
- time then `num_operand_distribution` will be used to generate the random circuit.
- Example usage::
-
- from qiskit.circuit.random import random_circuit
-
- circ = random_circuit(num_qubits=6, depth=5, num_operand_distribution = {1: 0.25, 2: 0.25, 3: 0.25, 4: 0.25})
- circ.draw(output='mpl')
-
diff --git a/releasenotes/notes/1.3/fix-apply-layout-duplicate-negative-indices-cf5517921fe52706.yaml b/releasenotes/notes/1.3/fix-apply-layout-duplicate-negative-indices-cf5517921fe52706.yaml
deleted file mode 100644
index 9fbe0ffd9c79..000000000000
--- a/releasenotes/notes/1.3/fix-apply-layout-duplicate-negative-indices-cf5517921fe52706.yaml
+++ /dev/null
@@ -1,6 +0,0 @@
----
-fixes:
- - |
- Fixed :meth:`.SparsePauliOp.apply_layout` and :meth:`.Pauli.apply_layout`
- to raise :exc:`.QiskitError` if duplicate indices or negative indices are provided
- as part of a layout.
diff --git a/releasenotes/notes/fix-cached-params-update-4d2814b698fa76b4.yaml b/releasenotes/notes/1.3/fix-cached-params-update-4d2814b698fa76b4.yaml
similarity index 100%
rename from releasenotes/notes/fix-cached-params-update-4d2814b698fa76b4.yaml
rename to releasenotes/notes/1.3/fix-cached-params-update-4d2814b698fa76b4.yaml
diff --git a/releasenotes/notes/1.3/fix-decompose-hls-5019793177136024.yaml b/releasenotes/notes/1.3/fix-decompose-hls-5019793177136024.yaml
index f6161ea72f80..820bd56ea1a9 100644
--- a/releasenotes/notes/1.3/fix-decompose-hls-5019793177136024.yaml
+++ b/releasenotes/notes/1.3/fix-decompose-hls-5019793177136024.yaml
@@ -23,7 +23,7 @@ fixes:
- |
Fixed a bug in :meth:`.QuantumCircuit.decompose` where objects that could be synthesized
with :class:`.HighLevelSynthesis` were first synthesized and then decomposed immediately
- (i.e., they were decomposed twice instead of once). This affected, e.g., :class:`.MCXGate`
+ (i.e., they were decomposed twice instead of once). This affected gates such as :class:`.MCXGate`
or :class:`.Clifford`, among others.
- |
Fixed a bug in :meth:`.QuantumCircuit.decompose`, where high-level objects without a definition
diff --git a/releasenotes/notes/1.3/fix-estimator-reset-9e7539776df4cac4.yaml b/releasenotes/notes/1.3/fix-estimator-reset-9e7539776df4cac4.yaml
index dba0d8f1c22b..d24a56ee02f6 100644
--- a/releasenotes/notes/1.3/fix-estimator-reset-9e7539776df4cac4.yaml
+++ b/releasenotes/notes/1.3/fix-estimator-reset-9e7539776df4cac4.yaml
@@ -3,9 +3,9 @@ features_primitives:
- |
:class:`.Estimator` and :class:`.StatevectorEstimator` return
expectation values in a stochastic way if the input circuit includes
- a reset for a some subsystems.
- The result was not reproducible, but it is now reproducible
- if a random seed is set. For example::
+ a reset for some subsystems.
+ The result was previously not reproducible, but now it can be reproduced if a
+ random seed is set. For example::
from qiskit.primitives import StatevectorEstimator
diff --git a/releasenotes/notes/1.3/fix-inverse-cancellation-c7f4debcde4a705a.yaml b/releasenotes/notes/1.3/fix-inverse-cancellation-c7f4debcde4a705a.yaml
new file mode 100644
index 000000000000..f6b40556287d
--- /dev/null
+++ b/releasenotes/notes/1.3/fix-inverse-cancellation-c7f4debcde4a705a.yaml
@@ -0,0 +1,6 @@
+fixes:
+ - |
+ The transpilation pass :class:`.InverseCancellation` now will recurse into :class:`.ControlFlowOp`
+ operations present in a :class:`.QuantumCircuit`. Previously, the pass would ignore
+ inverse gate pairs inside control flow blocks that could have been cancelled. Refer to
+ `#13437 `__ for more details.
diff --git a/releasenotes/notes/1.3/fix-sparse-pauli-op-apply-layout-zero-43b9e70f0d1536a6.yaml b/releasenotes/notes/1.3/fix-sparse-pauli-op-apply-layout-zero-43b9e70f0d1536a6.yaml
deleted file mode 100644
index 117230aee53c..000000000000
--- a/releasenotes/notes/1.3/fix-sparse-pauli-op-apply-layout-zero-43b9e70f0d1536a6.yaml
+++ /dev/null
@@ -1,10 +0,0 @@
-fixes:
- - |
- Fixed :meth:`.SparsePauliOp.apply_layout` to work correctly with zero-qubit operators.
- For example, if you previously created a 0 qubit and applied a layout like::
-
- op = SparsePauliOp("")
- op.apply_layout(None, 3)
-
- this would have previously raised an error. Now this will correctly return an operator of the form:
- ``SparsePauliOp(['III'], coeffs=[1.+0.j])``
diff --git a/releasenotes/notes/1.3/fix-swap-router-layout-f28cf0a2de7976a8.yaml b/releasenotes/notes/1.3/fix-swap-router-layout-f28cf0a2de7976a8.yaml
deleted file mode 100644
index 834d7986ab85..000000000000
--- a/releasenotes/notes/1.3/fix-swap-router-layout-f28cf0a2de7976a8.yaml
+++ /dev/null
@@ -1,7 +0,0 @@
----
-fixes:
- - |
- Fixed an oversight in the :class:`.Commuting2qGateRouter` transpiler pass where the qreg permutations
- were not added to the pass property set, so they would have to be tracked manually by the user. Now it's
- possible to access the permutation through the output circuit's ``layout`` property and plug the pass
- into any transpilation pipeline without loss of information.
diff --git a/releasenotes/notes/1.3/fix-symbolic-unit-scaling-c3eb4d9be674dfd6.yaml b/releasenotes/notes/1.3/fix-symbolic-unit-scaling-c3eb4d9be674dfd6.yaml
deleted file mode 100644
index 5ca00904a9ae..000000000000
--- a/releasenotes/notes/1.3/fix-symbolic-unit-scaling-c3eb4d9be674dfd6.yaml
+++ /dev/null
@@ -1,8 +0,0 @@
----
-fixes:
- - |
- Fixed a floating-point imprecision when scaling certain pulse units
- between seconds and nanoseconds. If the pulse was symbolically defined,
- an unnecessary floating-point error could be introduced by the scaling
- for certain builds of ``symengine``, which could manifest in unexpected
- results once the symbols were fully bound. See `#12392 `__.
diff --git a/releasenotes/notes/1.3/fix-var-wires-4ebc40e0b19df253.yaml b/releasenotes/notes/1.3/fix-var-wires-4ebc40e0b19df253.yaml
index 7cd1e74806b0..648c6506ab6e 100644
--- a/releasenotes/notes/1.3/fix-var-wires-4ebc40e0b19df253.yaml
+++ b/releasenotes/notes/1.3/fix-var-wires-4ebc40e0b19df253.yaml
@@ -3,6 +3,6 @@ fixes:
- |
Fixed an issue with :func:`.dag_drawer` and :meth:`.DAGCircuit.draw`
when attempting to visualize a :class:`.DAGCircuit` instance that contained
- :class:`.Var` wires. The visualizer would raise an exception trying to
- do this which has been fixed so the expected visualization will be
+ :class:`.Var` wires, for which the visualizer would raise an exception.
+ This behavior has been fixed and the expected visualization will be
generated.
diff --git a/releasenotes/notes/1.3/fixes_GenericBackendV2-668e40596e1f070d.yaml b/releasenotes/notes/1.3/fixes_GenericBackendV2-668e40596e1f070d.yaml
index 9d297125e3c2..ac7955b7cbda 100644
--- a/releasenotes/notes/1.3/fixes_GenericBackendV2-668e40596e1f070d.yaml
+++ b/releasenotes/notes/1.3/fixes_GenericBackendV2-668e40596e1f070d.yaml
@@ -1,4 +1,7 @@
---
fixes:
- |
- The constructor :class:`.GenericBackendV2` was allowing to create malformed backends because it accepted basis gates that couldn't be allocated in the backend size . That is, a backend with a single qubit should not accept a basis with two-qubit gates.
+ The constructor :class:`.GenericBackendV2` was allowing you to create malformed
+ backends because it accepted basis gates that couldn't be allocated in the
+ specified backend size. That is, a backend with a single qubit should not accept a
+ basis with two-qubit gates.
diff --git a/releasenotes/notes/1.3/hls-with-ancillas-d6792b41dfcf4aac.yaml b/releasenotes/notes/1.3/hls-with-ancillas-d6792b41dfcf4aac.yaml
index b70a032733c4..6f4c9eba978c 100644
--- a/releasenotes/notes/1.3/hls-with-ancillas-d6792b41dfcf4aac.yaml
+++ b/releasenotes/notes/1.3/hls-with-ancillas-d6792b41dfcf4aac.yaml
@@ -1,16 +1,23 @@
---
features_transpiler:
- |
- A new argument ``qubits_initially_zero`` has been added to :func:`qiskit.compiler.transpile`,
- :func:`.generate_preset_pass_manager`, and to :class:`~.PassManagerConfig`.
- If set to ``True``, the qubits are assumed to be initially in the state :math:`|0\rangle`,
- potentially allowing additional optimization opportunities for individual transpiler passes.
+ A new argument ``qubits_initially_zero`` has been added to :func:`qiskit.compiler.transpile`,
+ :func:`.generate_preset_pass_manager`, and to :class:`~.PassManagerConfig`.
+ If set to the default value of ``True``, the qubits are assumed to be initially in the state
+ :math:`|0\rangle`, potentially allowing additional optimization opportunities for individual
+ transpiler passes. In particular, the :class:`.HighLevelSynthesis` transpiler pass will choose
+ a better decomposition for each :class:`.MCXGate` gate in a circuit when an idle auxiliary qubit
+ in the state :math:`|0\rangle` is available.
+
+ However, there are cases when ``qubits_initially_zero`` should be set to ``False``, such
+ as when transpiling for backends that do not properly initialize qubits, or when manually
+ calling transpiler passes on subcircuits of a larger quantum circuit.
- |
- The constructor for :class:`.HighLevelSynthesis` transpiler pass now accepts an
- additional argument ``qubits_initially_zero``. If set to ``True``, the pass assumes that the
+ The constructor for the :class:`.HighLevelSynthesis` transpiler pass now accepts an
+ additional argument: ``qubits_initially_zero``. If set to ``True``, the pass assumes that the
qubits are initially in the state :math:`|0\rangle`. In addition, the pass keeps track of
clean and dirty auxiliary qubits throughout the run, and passes this information to plugins
- via kwargs ``num_clean_ancillas`` and ``num_dirty_ancillas``.
+ by using kwargs ``num_clean_ancillas`` and ``num_dirty_ancillas``.
upgrade_transpiler:
- |
The :func:`~qiskit.compiler.transpile` now assumes that the qubits are initially in the state
diff --git a/releasenotes/notes/1.3/improve-hls-qubit-tracking-6b6288d556e3af9d.yaml b/releasenotes/notes/1.3/improve-hls-qubit-tracking-6b6288d556e3af9d.yaml
index f832fed1b72d..881d6794e100 100644
--- a/releasenotes/notes/1.3/improve-hls-qubit-tracking-6b6288d556e3af9d.yaml
+++ b/releasenotes/notes/1.3/improve-hls-qubit-tracking-6b6288d556e3af9d.yaml
@@ -4,5 +4,5 @@ features_transpiler:
Improved handling of ancilla qubits in the :class:`.HighLevelSynthesis`
transpiler pass. For example, a circuit may have custom gates whose
definitions include :class:`.MCXGate`\s. Now the synthesis algorithms
- for the inner MCX-gates can use the ancilla qubits available on the
+ for the inner :class:`.MCXGate`\s can use the ancilla qubits available on the
global circuit but outside the custom gates' definitions.
diff --git a/releasenotes/notes/1.3/iqp-function-6594f7cf1521499c.yaml b/releasenotes/notes/1.3/iqp-function-6594f7cf1521499c.yaml
index a33b70c32a33..4ff64ed8dfcf 100644
--- a/releasenotes/notes/1.3/iqp-function-6594f7cf1521499c.yaml
+++ b/releasenotes/notes/1.3/iqp-function-6594f7cf1521499c.yaml
@@ -4,9 +4,13 @@ features_circuits:
Added the :func:`~qiskit.circuit.library.iqp` function to construct
Instantaneous Quantum Polynomial time (IQP) circuits. In addition to the
existing :class:`.IQP` class, the function also allows construction of random
- IQP circuits::
+ IQP circuits:
+
+ .. plot::
+ :include-source:
+
+ from qiskit.circuit.library import random_iqp
- from qiskit.circuit.library import iqp
-
- random_iqp = iqp(num_qubits=4)
- print(random_iqp.draw())
\ No newline at end of file
+ random_iqp = random_iqp(num_qubits=4)
+ random_iqp.draw('mpl')
+
\ No newline at end of file
diff --git a/releasenotes/notes/1.3/mcmt-gate-a201d516f05c7d56.yaml b/releasenotes/notes/1.3/mcmt-gate-a201d516f05c7d56.yaml
index a9c839e4352c..15530ed95053 100644
--- a/releasenotes/notes/1.3/mcmt-gate-a201d516f05c7d56.yaml
+++ b/releasenotes/notes/1.3/mcmt-gate-a201d516f05c7d56.yaml
@@ -6,7 +6,7 @@ features_circuits:
circuit allows the compiler to select the best available implementation
according to the number and the state of auxiliary qubits present in the circuit.
- Specific implementation can be chosen by specifying the high-level synthesis plugin::
+ The desired implementation can be chosen by specifying the high-level synthesis plugin::
from qiskit import QuantumCircuit, transpile
from qiskit.circuit.library import MCMTGate, HGate
@@ -21,8 +21,8 @@ features_circuits:
synthesized = transpile(circuit, hls_config=config)
- The :class:`.MCMTGate` in addition also supports custom (i.e., open) control states of
- the control qubits.
+ Additionally, the :class:`.MCMTGate` also supports custom (that is, open) control states
+ of the control qubits.
features_synthesis:
- |
diff --git a/releasenotes/notes/1.3/optimize-1q-gates-decomposition-ce111961b6782ee0.yaml b/releasenotes/notes/1.3/optimize-1q-gates-decomposition-ce111961b6782ee0.yaml
index dbb095827b00..eebc80fa586b 100644
--- a/releasenotes/notes/1.3/optimize-1q-gates-decomposition-ce111961b6782ee0.yaml
+++ b/releasenotes/notes/1.3/optimize-1q-gates-decomposition-ce111961b6782ee0.yaml
@@ -6,7 +6,3 @@ features_transpiler:
contain a :class:`.ControlFlowOp`. This was possible before using the
:meth:`.DAGCircuit.op_nodes` method and passing the :class:`.ControlFlowOp` class
as a filter, but this new function will perform the operation faster.
- - |
- Ported the entirety of the :class:`.Optimize1qGatesDecomposition` transpiler
- pass to Rust. This improves the runtime performance of the pass between 5x
- to 10x.
diff --git a/releasenotes/notes/1.3/outcome_bitstring_target_for_probabilities_dict-e53f524d115bbcfc.yaml b/releasenotes/notes/1.3/outcome_bitstring_target_for_probabilities_dict-e53f524d115bbcfc.yaml
deleted file mode 100644
index d0466b8f75d8..000000000000
--- a/releasenotes/notes/1.3/outcome_bitstring_target_for_probabilities_dict-e53f524d115bbcfc.yaml
+++ /dev/null
@@ -1,13 +0,0 @@
----
-features:
- - |
- The :class:`.StabilizerState` class now has a new method
- :meth:`~.StabilizerState.probabilities_dict_from_bitstring` allowing the
- user to pass single bitstring to measure an outcome for. Previouslly the
- :meth:`~.StabilizerState.probabilities_dict` would be utilized and would
- at worst case calculate (2^n) number of probability calculations (depending
- on the state), even if a user wanted a single result. With this new method
- the user can calculate just the single outcome bitstring value a user passes
- to measure the probability for. As the number of qubits increases, the more
- prevelant the performance enhancement may be (depending on the state) as only
- 1 bitstring result is measured.
diff --git a/releasenotes/notes/1.3/oxidize-commutation-analysis-d2fc81feb6ca80aa.yaml b/releasenotes/notes/1.3/oxidize-commutation-analysis-d2fc81feb6ca80aa.yaml
deleted file mode 100644
index 967a65bcebab..000000000000
--- a/releasenotes/notes/1.3/oxidize-commutation-analysis-d2fc81feb6ca80aa.yaml
+++ /dev/null
@@ -1,4 +0,0 @@
----
-features_transpiler:
- - |
- Added a Rust implementation of :class:`.CommutationAnalysis` in :func:`.analyze_commutations`.
diff --git a/releasenotes/notes/1.3/oxidize-transpiler-passes-16f2f1c57612e74a.yaml b/releasenotes/notes/1.3/oxidize-transpiler-passes-16f2f1c57612e74a.yaml
new file mode 100644
index 000000000000..2bf3de2c525b
--- /dev/null
+++ b/releasenotes/notes/1.3/oxidize-transpiler-passes-16f2f1c57612e74a.yaml
@@ -0,0 +1,34 @@
+---
+features_transpiler:
+ - |
+ The majority of the transpiler passes used in the preset pass managers
+ returned by :func:`.generate_preset_pass_manager` and used internally
+ by :func:`.transpile` were ported into Rust. This has significantly
+ improved the runtime performance of each pass which has led to a
+ significant improvement in the overall operational efficiency of the
+ transpiler. The list of passes ported to Rust in this release are:
+
+ * :class:`.ConsolidateBlocks`
+ * :class:`.BasisTranslator`
+ * :class:`.CommutationAnalysis`
+ * :class:`.CommutativeCancellation`
+ * :class:`.ElidePermutations`
+ * :class:`.Optimize1qGatesDecomposition`
+ * :class:`.UnitarySynthesis`
+ * :class:`.GateDirection`
+ * :class:`.CheckGateDirection`
+ * :class:`.RemoveDiagonalGatesBeforeMeasure`
+ * :class:`.CheckMap`
+ * :class:`.Split2QUnitaties`
+ * :class:`.FilterOpNodes`
+ * :class:`.Depth`
+ * :class:`.Size`
+ * :class:`.GatesInBasis`
+ * :class:`.InverseCancellation`
+ * :class:`.BarrierBeforeFinalMeasurements`
+
+features_circuits:
+ - |
+ The :class:`.CommutationChecker` class has been rewritten in Rust.
+ This class retains the same functionality and public API as before
+ but is now significantly faster in most cases.
diff --git a/releasenotes/notes/1.3/parallel-check-8186a8f074774a1f.yaml b/releasenotes/notes/1.3/parallel-check-8186a8f074774a1f.yaml
deleted file mode 100644
index d3266b2aa5f2..000000000000
--- a/releasenotes/notes/1.3/parallel-check-8186a8f074774a1f.yaml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-fixes:
- - |
- :meth:`.PassManager.run` will no longer waste time serializing itself when given multiple inputs
- if it is only going to work in serial.
diff --git a/releasenotes/notes/1.3/pauli-evo-plugins-612850146c3f7d49.yaml b/releasenotes/notes/1.3/pauli-evo-plugins-612850146c3f7d49.yaml
index c84b4a1646af..0b1473bfe763 100644
--- a/releasenotes/notes/1.3/pauli-evo-plugins-612850146c3f7d49.yaml
+++ b/releasenotes/notes/1.3/pauli-evo-plugins-612850146c3f7d49.yaml
@@ -1,8 +1,8 @@
---
features_quantum_info:
- |
- Added :meth:`.SparsePauliOperator.to_sparse_list` to convert an operator into
- a sparse list format. This works inversely to :meth:`.SparsePauliOperator.from_sparse_list`.
+ Added :meth:`.SparsePauliOp.to_sparse_list` to convert an operator into
+ a sparse list format. This works inversely to :meth:`.SparsePauliOp.from_sparse_list`.
For example::
from qiskit.quantum_info import SparsePauliOp
@@ -15,20 +15,41 @@ features_quantum_info:
features_synthesis:
- |
- Added :meth:`.ProductFormula.expand` which allows to view the expansion of a product formula
- in a sparse Pauli format.
+ Added :meth:`.ProductFormula.expand`, which lets you view the expansion of a product formula
+ in a sparse Pauli format. For example, we can query the format of a second-order Trotter expansion
+ of a Hamiltonian as::
+
+ from qiskit.quantum_info import SparsePauliOp
+ from qiskit.circuit.library import PauliEvolutionGate
+ from qiskit.synthesis.evolution import SuzukiTrotter
+
+ hamiltonian = SparsePauliOp(["IX", "XI", "ZZ"], coeffs=[-1, -1, 1])
+ evo = PauliEvolutionGate(hamiltonian, time=3.14)
+ trotter = SuzukiTrotter(order=2)
+ print(trotter.expand(evo))
+
+ which will print
+
+ .. parsed-literal::
+
+ [('X', [0], -3.14), ('X', [1], -3.14), ('ZZ', [0, 1], 6.28),
+ ('X', [1], -3.14), ('X', [0], -3.14)]
+
- |
Added the plugin structure for the :class:`.PauliEvolutionGate`. The default plugin,
- :class:`.PauliEvolutionSynthesisDefault`, constructs circuit as before, but faster as it
- internally uses Rust. The larger the circuit (e.g. by the Hamiltonian size, the number
- of timesteps, or the Suzuki-Trotter order), the higher the speedup. For example,
- a 100-qubit Heisenberg Hamiltonian with 10 timesteps and a 4th-order Trotter formula is
+ :class:`.PauliEvolutionSynthesisDefault`, constructs circuit as before, but faster, as it
+ internally uses Rust. The larger the circuit (for example. by the Hamiltonian size, the number
+ of timesteps, or the Suzuki-Trotter order), the greater the speedup. For example,
+ a 100-qubit Heisenberg Hamiltonian with 10 timesteps and a 4th-order Trotter formula is
now constructed ~9.4x faster.
The new plugin, :class:`.PauliEvolutionSynthesisRustiq`, uses
- the synthesis algorithm that is described in the paper "Faster and shorter synthesis of
- Hamiltonian simulation circuits" by de Brugière and Martiel (https://arxiv.org/abs/2404.03280)
- and is implemented in https://github.com/smartiel/rustiq-core.
- For example::
+ the synthesis algorithm that is described in the paper "`Faster and shorter synthesis of
+ Hamiltonian simulation circuits" by (de) Brugière and Martiel `__"
+ and is implemented in `Rustiq `__.
+ For example:
+
+ .. plot::
+ :include-source:
from qiskit.circuit import QuantumCircuit
from qiskit.quantum_info import SparsePauliOp
@@ -43,17 +64,17 @@ features_synthesis:
tqc = transpile(qc, basis_gates=["cx", "u"], hls_config=config)
tqc.draw(output='mpl')
- This code snippet uses the ``"rustiq"`` plugin to synthesize :class:`.PauliEvolutionGate`
- objects in the quantum circuit `qc`. The plugin is called with the additional option
- ``"upto_phase" = False`` allowing to obtain smaller circuits at the expense of possibly
- not preserving the global phase. For the full list of supported options, see
- documentation for :class:`.PauliEvolutionSynthesisRustiq`.
+ This code snippet uses the `Rustiq `__ plugin
+ to synthesize :class:`.PauliEvolutionGate` objects in the quantum circuit `qc`. The plugin
+ is called with the additional option ``upto_phase = False``, allowing you to obtain
+ smaller circuits at the expense of possibly not preserving the global phase. For the full
+ list of supported options, see the documentation for :class:`.PauliEvolutionSynthesisRustiq`.
upgrade:
- - |
+ - |
The following classes now use the :math:`\sqrt{X}` operation to diagonalize the Pauli-Y
- operator: :class:`.PauliEvolutionGate`, :class:`.EvolvedOperatorAnsatz`,
+ operator: :class:`.PauliEvolutionGate`, :class:`.EvolvedOperatorAnsatz`, and
:class:`.PauliFeatureMap`. Previously, these classes used either :math:`H S` or
- :math:`R_X(-\pi/2)` as basis transformation. Using the :math:`\sqrt{X}` operation,
+ :math:`R_X(-\pi/2)` as basis transformation. Using the :math:`\sqrt{X}` operation,
represented by the :class:`.SXGate` is more efficient as it uses only a single gate
implemented as singleton.
diff --git a/releasenotes/notes/1.3/paulifeaturemap-takes-dictionary-as-entanglement-02037cb2d46e1c41.yaml b/releasenotes/notes/1.3/paulifeaturemap-takes-dictionary-as-entanglement-02037cb2d46e1c41.yaml
index 8acfe5439a50..3bac463541f3 100644
--- a/releasenotes/notes/1.3/paulifeaturemap-takes-dictionary-as-entanglement-02037cb2d46e1c41.yaml
+++ b/releasenotes/notes/1.3/paulifeaturemap-takes-dictionary-as-entanglement-02037cb2d46e1c41.yaml
@@ -1,16 +1,10 @@
---
-fixes:
- - |
- Fixed that the entanglement in :class:`.PauliFeatureMap` and :class:`.ZZFeatureMap`
- could be given as ``List[int]`` or ``List[List[int]]``, which was incompatible with the fact
- that entanglement blocks of different sizes are used. Instead, the entanglement can be
- given as dictionary with ``{block_size: entanglement}`` pairs.
features_circuits:
- |
- :class:`.PauliFeatureMap` and :class:`.ZZFeatureMap` now support specifying the
- entanglement as a dictionary where the keys represent the number of qubits, and
+ :class:`.PauliFeatureMap` and :class:`.ZZFeatureMap` now support specifying the
+ entanglement as a dictionary where the keys represent the number of qubits, and
the values are lists of integer tuples that define which qubits are entangled with one another. This
- allows for more flexibility in constructing feature maps tailored to specific quantum algorithms.
+ allows for more flexibility in constructing feature maps tailored to specific quantum algorithms.
Example usage::
from qiskit.circuit.library import PauliFeatureMap
@@ -21,6 +15,3 @@ features_circuits:
}
qc = PauliFeatureMap(3, reps=2, paulis=['Z', 'ZZ', 'ZZZ'], entanglement=entanglement, insert_barriers=True)
qc.decompose().draw('mpl')
-
-
-
diff --git a/releasenotes/notes/1.3/plot-circuit-layout-5935646107893c12.yaml b/releasenotes/notes/1.3/plot-circuit-layout-5935646107893c12.yaml
deleted file mode 100644
index 72f2c95962a5..000000000000
--- a/releasenotes/notes/1.3/plot-circuit-layout-5935646107893c12.yaml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-fixes:
- - |
- Fixed a bug in :func:`plot_coupling_map` that caused the edges of the coupling map to be colored incorrectly.
- See https://github.com/Qiskit/qiskit/pull/12369 for details.
diff --git a/releasenotes/notes/1.3/port-elide-permutations-ed91c3d9cef2fec6.yaml b/releasenotes/notes/1.3/port-elide-permutations-ed91c3d9cef2fec6.yaml
deleted file mode 100644
index 705e82f0fb6e..000000000000
--- a/releasenotes/notes/1.3/port-elide-permutations-ed91c3d9cef2fec6.yaml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-features_transpiler:
- - |
- Port most of the logic of the transpiler pass :class:`~.ElidePermutations`
- to Rust.
diff --git a/releasenotes/notes/1.3/port-synth-cz-depth-line-mr-to-rust-1376d5a41948112a.yaml b/releasenotes/notes/1.3/port-synth-cz-depth-line-mr-to-rust-1376d5a41948112a.yaml
index ee4c6933a269..12bff129a5ed 100644
--- a/releasenotes/notes/1.3/port-synth-cz-depth-line-mr-to-rust-1376d5a41948112a.yaml
+++ b/releasenotes/notes/1.3/port-synth-cz-depth-line-mr-to-rust-1376d5a41948112a.yaml
@@ -1,6 +1,11 @@
---
features_synthesis:
- |
- Port :func: `.synth_cz_depth_line_mr` to Rust. This function synthesizes a CZ circuit for linear nearest neighbor (LNN) connectivity, based on the Maslov and Roetteler method. On a 350x350 binary matrix, the Rust implementation yields a speedup of about 30 times.
+ Port :func:`.synth_cz_depth_line_mr` to Rust. This function synthesizes a CZ
+ circuit for linear nearest neighbor (LNN) connectivity, based on the Maslov
+ and Roetteler method. On a 350x350 binary matrix, the Rust implementation
+ yields a speedup of about 30x.
- |
- Port :func: `.synth_permutation_reverse_lnn_kms` to Rust, which synthesizes a reverse permutation for linear nearest-neighbor architecture using the Kutin, Moulton, Smithline method.
+ Port :func:`.synth_permutation_reverse_lnn_kms` to Rust, which synthesizes a
+ reverse permutation for LNN architecture using the Kutin,
+ Moulton, Smithline method.
diff --git a/releasenotes/notes/1.3/prepare-1.3.0-7c45598775fc2bbf.yaml b/releasenotes/notes/1.3/prepare-1.3.0-7c45598775fc2bbf.yaml
new file mode 100644
index 000000000000..02e93357cce7
--- /dev/null
+++ b/releasenotes/notes/1.3/prepare-1.3.0-7c45598775fc2bbf.yaml
@@ -0,0 +1,43 @@
+---
+prelude: >
+ Qiskit version 1.3.0 brings in major performance and quality improvements
+ for the transpiler.
+
+ There have been many new features, fixes and improvements introduced in this
+ new version of Qiskit, the highlights are:
+
+ * The core data structures for transpilation in Qiskit have been ported
+ to Rust internally. This includes components such as the
+ :class:`.DAGCircuit`, :class:`.Target`, :class:`.EquivalenceLibrary`,
+ and others. The public APIs for all of these data structures remains
+ unchanged but the performance after the rewrites has improved.
+
+ * The majority of the transpiler passes used by the preset pass
+ manager have been ported into Rust, resulting in an average 6x overall runtime
+ improvement compared to Qiskit 1.2.4 when running the
+ `benchpress benchmarks `__.
+ Some of the particularly impactful passes that greatly benefited from
+ the rewrites were the :class:`.BasisTranslator`,
+ :class:`.CommutationAnalysis`, :class:`.ConsolidateBlocks`, and :class:`.UnitarySynthesis`.
+ You can refer to the feature release notes for a full list of the ported passes.
+
+ * Improvements to the circuit library that increase compilation quality and circuit
+ construction speed. Operations are now distinguished into:
+
+ * Structural operations, that have a unique decomposition, and are represented as
+ functions that return a :class:`.QuantumCircuit` (for example: :func:`.real_amplitudes`).
+ Most of these functions are built in Rust, resulting in significantly faster circuit
+ construction runtime.
+
+ * Abstract operations, that can be implemented using different decompositions, are
+ represented as :class:`.Gate` or :class:`qiskit.circuit.Instruction` (for example:
+ :class:`.PauliEvolutionGate`). This allows building an abstract quantum circuit
+ and letting the compiler choose the optimal decomposition.
+
+ Using an abstract circuit description is especially powerful in combination with
+ improvements to the :class:`.HighLevelSynthesis` transpiler pass, which can now take
+ into account idle auxiliary qubits to find the best available decomposition for a given gate.
+
+ * The minimum supported Python version is now 3.9 as Python 3.8 went end of life in 2024-10.
+ Official support for Python 3.13 support was also added in this release.
+
diff --git a/releasenotes/notes/1.3/product-formula-improvements-1bc40650151cf107.yaml b/releasenotes/notes/1.3/product-formula-improvements-1bc40650151cf107.yaml
deleted file mode 100644
index fc9713e7a436..000000000000
--- a/releasenotes/notes/1.3/product-formula-improvements-1bc40650151cf107.yaml
+++ /dev/null
@@ -1,25 +0,0 @@
----
-features_circuits:
- - |
- Added the ``insert_barriers`` keyword argument to the
- :meth:`~.QuantumCircuit.repeat` method. Setting it to ``True`` will insert
- barriers between circuit repetitions.
-features_synthesis:
- - |
- Added the ``wrap`` keyword argument to the :class:`.ProductFormula` classes
- which (when enabled) wraps individual Pauli evolution terms. This can be
- useful when visualizing circuits.
-upgrade_synthesis:
- - |
- The ``atomic_evolution`` argument to :class:`.ProductFormula` (and its
- subclasses) has a new function signature. Rather than taking some Pauli
- operator and time coefficient and returning the evolution circuit, the new
- function takes in an existing circuit and should append the evolution of the
- provided Pauli and given time to this circuit. This new implementation
- benefits from significantly better performance.
- - |
- :class:`.LieTrotter` and :class:`.SuzukiTrotter` no longer wrap the
- individually evolved Pauli terms into gate definitions. If you rely on a
- certain decomposition level of your circuit, you have to remove one level of
- :meth:`~.QuantumCircuit.decompose` or add the ``wrap=True`` keyword argument
- to your synthesis object.
diff --git a/releasenotes/notes/1.3/qasm2-bigint-8eff42acb67903e6.yaml b/releasenotes/notes/1.3/qasm2-bigint-8eff42acb67903e6.yaml
deleted file mode 100644
index 2fb1b4dcc5a1..000000000000
--- a/releasenotes/notes/1.3/qasm2-bigint-8eff42acb67903e6.yaml
+++ /dev/null
@@ -1,9 +0,0 @@
----
-fixes:
- - |
- The OpenQASM 2.0 parser (:func:`.qasm2.load` and :func:`.qasm2.loads`) can now evaluate
- gate-angle expressions including integer operands that would overflow the system-size integer.
- These will be evaluated in a double-precision floating-point context, just like the rest of the
- expression always has been. Beware: an arbitrarily large integer will not necessarily be
- exactly representable in double-precision floating-point, so there is a chance that however the
- circuit was generated, it had already lost all numerical precision modulo :math:`2\pi`.
diff --git a/releasenotes/notes/1.3/reorder-trotter-terms-c8a6eb3cdb831f77.yaml b/releasenotes/notes/1.3/reorder-trotter-terms-c8a6eb3cdb831f77.yaml
index 4f77f09e7ab2..2b1fc2dd55eb 100644
--- a/releasenotes/notes/1.3/reorder-trotter-terms-c8a6eb3cdb831f77.yaml
+++ b/releasenotes/notes/1.3/reorder-trotter-terms-c8a6eb3cdb831f77.yaml
@@ -18,7 +18,10 @@ features_synthesis:
which will lead to the ``RZZ`` and ``RYY`` rotations being applied in parallel, instead
of three sequential rotations in the first part.
- This option can be set via the plugin interface::
+ This option can be set via the plugin interface:
+
+ .. plot::
+ :include-source:
from qiskit import QuantumCircuit, transpile
from qiskit.circuit.library import PauliEvolutionGate
@@ -36,5 +39,5 @@ features_synthesis:
circuit.append(PauliEvolutionGate(op, time), circuit.qubits)
tqc = transpile(circuit, basis_gates=["u", "cx"], hls_config=hls_config)
- print(tqc.draw())
+ tqc.draw('mpl')
diff --git a/releasenotes/notes/1.3/rust-commutation-checker-c738e67efa9d292f.yaml b/releasenotes/notes/1.3/rust-commutation-checker-c738e67efa9d292f.yaml
deleted file mode 100644
index bcfcbe18caf0..000000000000
--- a/releasenotes/notes/1.3/rust-commutation-checker-c738e67efa9d292f.yaml
+++ /dev/null
@@ -1,6 +0,0 @@
----
-features_transpiler:
- - |
- The the :class:`.CommutationChecker` class has been reimplemented in
- Rust. This retains the same functionality as before but is now
- significantly in most cases.
diff --git a/releasenotes/notes/1.3/rust-consolidation-a791a00380fc78b8.yaml b/releasenotes/notes/1.3/rust-consolidation-a791a00380fc78b8.yaml
index c84128888951..a7cecf92e5c7 100644
--- a/releasenotes/notes/1.3/rust-consolidation-a791a00380fc78b8.yaml
+++ b/releasenotes/notes/1.3/rust-consolidation-a791a00380fc78b8.yaml
@@ -1,13 +1,13 @@
---
features_transpiler:
- |
- The :class:`.ConsolidateGates` pass will now run the equivalent of the
+ The :class:`.ConsolidateBlocks` pass will now run the equivalent of the
:class:`.Collect2qBlocks` pass internally if it was not run in a pass
- manager prior to the pass. Previously it was required that
- :class:`.Collect2qBlocks` or :class:`.Collect1qRuns` were run prior to
+ manager prior to the pass. Previously,
+ :class:`.Collect2qBlocks` or :class:`.Collect1qRuns` had to be run before
:class:`.ConsolidateBlocks` for :class:`.ConsolidateBlocks` to do
- anything. By doing the collection internally the overhead of the pass
+ anything. By doing the collection internally, the overhead from the pass
is reduced. If :class:`.Collect2qBlocks` or :class:`.Collect1qRuns` are
- run prior to :class:`.ConsolidateBlocks` the collected runs by those
+ run prior to :class:`.ConsolidateBlocks,` the collected runs by those
passes from the property set are used and there is no change in behavior
for the pass.
diff --git a/releasenotes/notes/1.3/rust-paulifm-1dc7b1c2dc756614.yaml b/releasenotes/notes/1.3/rust-paulifm-1dc7b1c2dc756614.yaml
index 103e792381ab..508bccc8913f 100644
--- a/releasenotes/notes/1.3/rust-paulifm-1dc7b1c2dc756614.yaml
+++ b/releasenotes/notes/1.3/rust-paulifm-1dc7b1c2dc756614.yaml
@@ -1,8 +1,8 @@
---
features_circuits:
- |
- Added circuit library functions :func:`.pauli_feature_map`, :func:`.z_feature_map`,
- :func:`.zz_feature_map` to construct Pauli feature map circuits. These functions
+ Added circuit library functions :func:`~qiskit.circuit.library.pauli_feature_map`, :func:`~qiskit.circuit.library.z_feature_map`,
+ :func:`~qiskit.circuit.library.zz_feature_map` to construct Pauli feature map circuits. These functions
are approximately 8x faster than the current circuit library objects,
:class:`.PauliFeatureMap`, :class:`.ZFeatureMap`, and :class:`.ZZFeatureMap`,
and will replace them in the future. Note, that the new functions return a plain
diff --git a/releasenotes/notes/1.3/spo-to-matrix-determinism-554389d6fc98627c.yaml b/releasenotes/notes/1.3/spo-to-matrix-determinism-554389d6fc98627c.yaml
index 61961d492e72..401ea31e40b8 100644
--- a/releasenotes/notes/1.3/spo-to-matrix-determinism-554389d6fc98627c.yaml
+++ b/releasenotes/notes/1.3/spo-to-matrix-determinism-554389d6fc98627c.yaml
@@ -1,6 +1,6 @@
---
fixes:
- |
- Fixed a per-process based non-determinism in `SparsePauliOp.to_matrix`. The exact order of the
+ Fixed a per-process based non-determinism in :meth:`.SparsePauliOp.to_matrix`. The exact order of the
floating-point operations in the summation would previously vary per process, but will now be
identical between different invocations of the same script. See `#13413 `__.
diff --git a/releasenotes/notes/1.3/storage-var-a00a33fcf9a71f3f.yaml b/releasenotes/notes/1.3/storage-var-a00a33fcf9a71f3f.yaml
deleted file mode 100644
index b3b18be2fc1a..000000000000
--- a/releasenotes/notes/1.3/storage-var-a00a33fcf9a71f3f.yaml
+++ /dev/null
@@ -1,122 +0,0 @@
----
-features_circuits:
- - |
- :class:`.QuantumCircuit` has several new methods to work with and inspect manual :class:`.Var`
- variables.
-
- See :ref:`circuit-real-time-methods` for more in-depth discussion on all of these.
-
- The new methods are:
-
- * :meth:`~.QuantumCircuit.add_var`
- * :meth:`~.QuantumCircuit.add_input`
- * :meth:`~.QuantumCircuit.add_capture`
- * :meth:`~.QuantumCircuit.add_uninitialized_var`
- * :meth:`~.QuantumCircuit.get_var`
- * :meth:`~.QuantumCircuit.has_var`
- * :meth:`~.QuantumCircuit.iter_vars`
- * :meth:`~.QuantumCircuit.iter_declared_vars`
- * :meth:`~.QuantumCircuit.iter_captured_vars`
- * :meth:`~.QuantumCircuit.iter_input_vars`
- * :meth:`~.QuantumCircuit.store`
-
- In addition, there are several new dynamic attributes on :class:`.QuantumCircuit` surrounding
- these variables:
-
- * :attr:`~.QuantumCircuit.num_vars`
- * :attr:`~.QuantumCircuit.num_input_vars`
- * :attr:`~.QuantumCircuit.num_captured_vars`
- * :attr:`~.QuantumCircuit.num_declared_vars`
- - |
- :class:`.ControlFlowOp` and its subclasses now have a :meth:`~.ControlFlowOp.iter_captured_vars`
- method, which will return an iterator over the unique variables captured in any of its immediate
- blocks.
- - |
- :class:`.DAGCircuit` has several new methods to work with and inspect manual :class:`.Var`
- variables. These are largely equivalent to their :class:`.QuantumCircuit` counterparts, except
- that the :class:`.DAGCircuit` ones are optimized for programmatic access with already defined
- objects, while the :class:`.QuantumCircuit` methods are more focussed on interactive human use.
-
- The new methods are:
-
- * :meth:`~.DAGCircuit.add_input_var`
- * :meth:`~.DAGCircuit.add_captured_var`
- * :meth:`~.DAGCircuit.add_declared_var`
- * :meth:`~.DAGCircuit.has_var`
- * :meth:`~.DAGCircuit.iter_vars`
- * :meth:`~.DAGCircuit.iter_declared_vars`
- * :meth:`~.DAGCircuit.iter_captured_vars`
- * :meth:`~.DAGCircuit.iter_input_vars`
-
- There are also new public attributes:
-
- * :attr:`~.DAGCircuit.num_vars`
- * :attr:`~.DAGCircuit.num_input_vars`
- * :attr:`~.DAGCircuit.num_captured_vars`
- * :attr:`~.DAGCircuit.num_declared_vars`
- - |
- :attr:`.DAGCircuit.wires` will now also contain any :class:`.Var` manual variables in the
- circuit as well, as these are also classical data flow.
- - |
- A new method, :meth:`.Var.new`, is added to manually construct a real-time classical variable
- that owns its memory.
- - |
- :meth:`.QuantumCircuit.compose` has two need keyword arguments, ``var_remap`` and ``inline_captures``
- to better support real-time classical variables.
-
- ``var_remap`` can be used to rewrite :class:`.Var` nodes in the circuit argument as its
- instructions are inlined onto the base circuit. This can be used to avoid naming conflicts.
-
- ``inline_captures`` can be set to ``True`` (defaults to ``False``) to link all :class:`.Var`
- nodes tracked as "captures" in the argument circuit with the same :class:`.Var` nodes in the
- base circuit, without attempting to redeclare the variables. This can be used, in combination
- with :meth:`.QuantumCircuit.copy_empty_like`'s ``vars_mode="captures"`` handling, to build up
- a circuit layer by layer, containing variables.
- - |
- :meth:`.DAGCircuit.compose` has a new keyword argument, ``inline_captures``, which can be set to
- ``True`` to inline "captured" :class:`.Var` nodes on the argument circuit onto the base circuit
- without redeclaring them. In conjunction with the ``vars_mode="captures"`` option to several
- :class:`.DAGCircuit` methods, this can be used to combine DAGs that operate on the same variables.
- - |
- :meth:`.QuantumCircuit.copy_empty_like` and :meth:`.DAGCircuit.copy_empty_like` have a new
- keyword argument, ``vars_mode`` which controls how any memory-owning :class:`.Var` nodes are
- tracked in the output. By default (``"alike"``), the variables are declared in the same
- input/captured/local mode as the source. This can be set to ``"captures"`` to convert all
- variables to captures (useful with :meth:`~.QuantumCircuit.compose`) or ``"drop"`` to remove
- them.
- - |
- A new ``vars_mode`` keyword argument has been added to the :class:`.DAGCircuit` methods:
-
- * :meth:`~.DAGCircuit.separable_circuits`
- * :meth:`~.DAGCircuit.layers`
- * :meth:`~.DAGCircuit.serial_layers`
-
- which has the same meaning as it does for :meth:`~.DAGCircuit.copy_empty_like`.
-features_qasm:
- - |
- The OpenQASM 3 exporter supports manual-storage :class:`.Var` nodes on circuits.
-features_qpy:
- - |
- QPY (:mod:`qiskit.qpy`) format version 12 has been added, which includes support for memory-owning
- :class:`.Var` variables. See :ref:`qpy_version_12` for more detail on the format changes.
-features_visualization:
- - |
- The text and `Matplotlib `__ circuit drawers (:meth:`.QuantumCircuit.draw`)
- have minimal support for displaying expressions involving manual real-time variables. The
- :class:`.Store` operation and the variable initializations are not yet supported; for large-scale
- dynamic circuits, we recommend using the OpenQASM 3 export capabilities (:func:`.qasm3.dumps`) to
- get a textual representation of a circuit.
-upgrade_qpy:
- - |
- The value of :attr:`qiskit.qpy.QPY_VERSION` is now 12. :attr:`.QPY_COMPATIBILITY_VERSION` is
- unchanged at 10.
-upgrade_providers:
- - |
- Implementations of :class:`.BackendV2` (and :class:`.BackendV1`) may desire to update their
- :meth:`~.BackendV2.run` methods to eagerly reject inputs containing typed
- classical variables (see :mod:`qiskit.circuit.classical`) and the :class:`.Store` instruction,
- if they do not have support for them. The new :class:`.Store` instruction is treated by the
- transpiler as an always-available "directive" (like :class:`.Barrier`); if your backends do not
- support this won't be caught by the :mod:`~qiskit.transpiler`.
-
- See :ref:`providers-guide-real-time-variables` for more information.
diff --git a/releasenotes/notes/1.3/uniform-superposition-gate-3bd95ffdf05ef18c.yaml b/releasenotes/notes/1.3/uniform-superposition-gate-3bd95ffdf05ef18c.yaml
deleted file mode 100644
index 6017979748ea..000000000000
--- a/releasenotes/notes/1.3/uniform-superposition-gate-3bd95ffdf05ef18c.yaml
+++ /dev/null
@@ -1,27 +0,0 @@
----
-features:
- - |
- Implemented :class:`.UniformSuperpositionGate` class, which allows
- the creation of a uniform superposition state using
- the Shukla-Vedula algorithm. This feature facilitates the
- creation of quantum circuits that produce a uniform superposition
- state :math:`\frac{1}{\sqrt{M}} \sum_{j=0}^{M-1} |j\rangle`, where
- :math:`M` is a positive integer representing the number of
- computational basis states with an amplitude of
- :math:`\frac{1}{\sqrt{M}}`. This implementation supports the
- efficient creation of uniform superposition states,
- requiring only :math:`O(\log_2 (M))` qubits and
- :math:`O(\log_2 (M))` gates. Usage example:
-
- .. code-block:: python
-
- from qiskit import QuantumCircuit
- from qiskit.circuit.library.data_preparation import UniformSuperpositionGate
-
- M = 5
- num_qubits = 3
- usp_gate = UniformSuperpositionGate(M, num_qubits)
- qc = QuantumCircuit(num_qubits)
- qc.append(usp_gate, list(range(num_qubits)))
-
- qc.draw()
diff --git a/releasenotes/notes/fix-inverse-cancellation-c7f4debcde4a705a.yaml b/releasenotes/notes/fix-inverse-cancellation-c7f4debcde4a705a.yaml
deleted file mode 100644
index 7d6999677b2b..000000000000
--- a/releasenotes/notes/fix-inverse-cancellation-c7f4debcde4a705a.yaml
+++ /dev/null
@@ -1,3 +0,0 @@
-fixes:
- - |
- The transpilation pass :class`.InverseCancellation` now runs inside of flow controlled blocks. Previously, it ignores the pairs of gates in classical blocks that can be cancelled. Refer to `#13437 ` for more details.