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.