Skip to content

Commit

Permalink
Prepare 1.0.0 release (#11760)
Browse files Browse the repository at this point in the history
* Prepare 1.0.0 release

This commit prepares the repo for the 1.0.0 release. It migrates all the
release notes to a dedicated directory to differentiate those notes from
future notes (this will need to be forward ported to the main branch),
updates the version numbers to indicate it is the final 1.0.0 release,
and updates the release notes to prepare them for publishing. Once this
merges this commit should be used to tag the 1.0.0 release.

* Apply suggestions from code review

Co-authored-by: Elena Peña Tapia <[email protected]>

* Update releasenotes/notes/1.0/prepare-1.0-e13b9b8273055775.yaml

* Apply suggestions from code review

Co-authored-by: Sebastian Brandhofer <[email protected]>

* typos in 1.0 renos (#20)

* InverseModifier

* add-commutation-library

* Update add-commutation-library-88b7ff65b3d35f9a.yaml

---------

Co-authored-by: Matthew Treinish <[email protected]>

* Update release notes

* Prepare 1.0 typos - part 2 (#21)

* InverseModifier

* add-commutation-library

* Update add-commutation-library-88b7ff65b3d35f9a.yaml

* add-commutation-library

* .

* .

* .

* .

* Use iso8601 for dates

---------

Co-authored-by: Matthew Treinish <[email protected]>

* Fix docs build

* Apply suggestions from code review

Co-authored-by: Luciano Bello <[email protected]>

* Update releasenotes/notes/1.0/prepare-1.0-e13b9b8273055775.yaml

Co-authored-by: Jake Lishman <[email protected]>

* Update release notes rst file

* Various fixes, up to deprecation notes

* Update "deprecation" release notes

* Update qiskit/circuit/__init__.py

* Add missing link

* Fix typo

* Update releasenotes/notes/1.0/prepare-1.0-e13b9b8273055775.yaml

Co-authored-by: Sebastian Brandhofer <[email protected]>

* Tweak wording on backwards compatibility guarantees

* Fix broken link

Co-authored-by: Eric Arellano <[email protected]>

* Fix bullet misinterpreted as definition

Co-authored-by: Eric Arellano <[email protected]>

* Fix earliest version for 0.46.0

* Add release note subsections

* Categorize release notes

* Add missing subsections to qinfo synthesis release note

* Copy edit release notes

* Move new release notes

* Apply suggestions from code review

* Remove duplicated release note

---------

Co-authored-by: Elena Peña Tapia <[email protected]>
Co-authored-by: Sebastian Brandhofer <[email protected]>
Co-authored-by: Luciano Bello <[email protected]>
Co-authored-by: Jake Lishman <[email protected]>
Co-authored-by: Elena Peña Tapia <[email protected]>
Co-authored-by: Eric Arellano <[email protected]>
Co-authored-by: Jake Lishman <[email protected]>
  • Loading branch information
8 people authored Feb 15, 2024
1 parent b86d60b commit 21b11b9
Show file tree
Hide file tree
Showing 174 changed files with 832 additions and 767 deletions.
2 changes: 1 addition & 1 deletion docs/conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
# The short X.Y version
version = "1.0"
# The full version, including alpha/beta/rc tags
release = "1.0.0rc1"
release = "1.0.0"

language = "en"

Expand Down
6 changes: 2 additions & 4 deletions docs/release_notes.rst
Original file line number Diff line number Diff line change
Expand Up @@ -4,18 +4,16 @@
Release Notes
=============

This page contains the release notes for Qiskit, starting from Qiskit 0.45, the first time that Qiskit and Qiskit Terra had the same versions.

..
These release notes get converted into Markdown files via the infrastructure at https://github.com/Qiskit/documentation, which then gets deployed to https://docs.quantum.ibm.com/api/qiskit/release-notes. Changes to these release notes will update those release notes the next time the API docs are generated.
To change release notes prior to Qiskit 0.45, update the Qiskit/documentation repository directly.

.. release-notes::
:earliest-version: 0.45.0rc1
:earliest-version: 1.0.0rc1

.. release-notes::
:earliest-version: 0.45.0
:earliest-version: 0.46.0
:branch: stable/0.46

.. release-notes::
Expand Down
2 changes: 1 addition & 1 deletion qiskit/VERSION.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
1.0.0rc1
1.0.0
21 changes: 21 additions & 0 deletions qiskit/circuit/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -282,6 +282,18 @@
Operation
EquivalenceLibrary
Annotated Operations
--------------------
.. autosummary::
:toctree: ../stubs/
AnnotatedOperation
InverseModifier
ControlModifier
PowerModifier
Control Flow Operations
-----------------------
Expand Down Expand Up @@ -344,6 +356,15 @@
ParameterVector
ParameterExpression
Gate Commutation
----------------
.. autosummary::
:toctree: ../stubs/
CommutationChecker
Random Circuits
---------------
Expand Down
45 changes: 45 additions & 0 deletions releasenotes/config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,48 @@ default_branch: main
collapse_pre_releases: true
pre_release_tag_re: (?P<pre_release>(?:[ab]|rc|pre)+\d*)$
unreleased_version_title: Unreleased Notes Preview
sections:
- [features, New Features]
- [features_algorithms, Algorithms Features]
- [features_circuits, Circuits Features]
- [features_primitives, Primitives Features]
- [features_providers, Providers Features]
- [features_pulse, Pulse Features]
- [features_qasm, OpenQASM Features]
- [features_qpy, QPY Features]
- [features_quantum_info, Quantum Information Features]
- [features_synthesis, Synthesis Features]
- [features_transpiler, Transpiler Features]
- [features_visualization, Visualization Features]
- [features_misc, Misc. Features]
- [issues, Known Issues]
- [upgrade, Upgrade Notes]
- [upgrade_algorithms, Algorithms Upgrade Notes]
- [upgrade_circuits, Circuits Upgrade Notes]
- [upgrade_primitives, Primitives Upgrade Notes]
- [upgrade_providers, Providers Upgrade Notes]
- [upgrade_pulse, Pulse Upgrade Notes]
- [upgrade_qasm, OpenQASM Upgrade Notes]
- [upgrade_qpy, QPY Upgrade Notes]
- [upgrade_quantum_info, Quantum Information Upgrade Notes]
- [upgrade_synthesis, Synthesis Upgrade Notes]
- [upgrade_transpiler, Transpiler Upgrade Notes]
- [upgrade_visualization, Visualization Upgrade Notes]
- [upgrade_misc, Misc. Upgrade Notes]
- [deprecations, Deprecation Notes]
- [deprecations_algorithms, Algorithms Deprecations]
- [deprecations_circuits, Circuits Deprecations]
- [deprecations_primitives, Primitives Deprecations]
- [deprecations_providers, Providers Deprecations]
- [deprecations_pulse, Pulse Deprecations]
- [deprecations_qasm, OpenQASM Deprecations]
- [deprecations_qpy, QPY Deprecations]
- [deprecations_quantum_info, Quantum Information Deprecations]
- [deprecations_synthesis, Synthesis Deprecations]
- [deprecations_transpiler, Transpiler Deprecations]
- [deprecations_visualization, Visualization Deprecations]
- [deprecations_misc, Misc. Deprecations]
- [critical, Critical Issues]
- [security, Security Issues]
- [fixes, Bug Fixes]
- [other, Other Notes]
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
upgrade_circuits:
- |
The property ``IntegerComparator.num_ancilla_qubits`` is removed, which was
deprecated in Qiskit 0.23 (released in 2020-10). Its functionality is fully covered
by :attr:`.IntegerComparator.num_ancilla`.
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
---
upgrade_providers:
- |
Changed default value of two arguments (:code:`add_delay` and :code:`filter_faulty`) in
the :func:`.convert_to_target` function.
This conversion function now adds delay instructions and removes faulty instructions by default.
fixes:
- |
Fixed the return of improper measurement schedules when only a subset of qubits was requested.
Previously, a measurement schedule for all qubits would be returned.
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
---
upgrade:
upgrade_misc:
- |
The variable ``qiskit.__qiskit_version__`` is removed as it was deprecated since
Qiskit 0.44 (released on July 2023).
Qiskit 0.44 (released in 2023-07).
Instead, you should use ``qiskit.__version__``. The other packages listed in the
former ``qiskit.__qiskit_version__`` have their own ``__version__`` module level dunder,
as standard in PEP 8.
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
---
features_circuit:
- |
Added a new argument, ``annotated``, to the methods :meth:`.QuantumCircuit.control`, :meth:`.Gate.control`
and ``.control()`` methods of :class:`.Gate` subclasses (such as :class:`.UnitaryGate` or :class:`.SwapGate`)
to optionally return an :class:`.AnnotatedOperation`.
The default value of ``annotated`` is ``False`` and corresponds to the pre-existing behavior of the method,
for example::
SwapGate().control(1, annotated=False)
returns a :class:`.CSwapGate` while::
SwapGate().control(2, annotated=False)
returns a ``ControlledGate``. When ``annotated=True``, the methods return an object of
type :class:`~.AnnotatedOperation` instead, avoiding the eager construction of the controlled gate's definition.
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
---
features_circuits:
- |
Added a new argument, ``annotated``, to the methods :meth:`.QuantumCircuit.inverse`, :meth:`.circuit.Instruction.inverse`
and ``.inverse()`` methods of :class:`~qiskit.circuit.Instruction` subclasses (such as :class:`.SwapGate` or :class:`.SGate`)
to optionally return an :class:`.AnnotatedOperation`.
The default value of ``annotated`` is ``False`` and corresponds to the pre-existing behavior of the method.
Furthermore, for standard gates with an explicitly defined ``inverse`` method,
the argument ``annotated`` has no effect, for example, both::
SwapGate().inverse(annotated=False)
SwapGate().inverse(annotated=True)
return a :class:`.SwapGate`, and both::
SGate().inverse(annotated=False)
SGate().inverse(annotated=True)
return an :class:`.SdgGate`. The difference manifests for custom instructions without an explicitly defined
inverse. With ``annotated=False``, the method returns a fresh instruction with the recursively inverted definition,
just as before. While ``annotated=True`` returns an :class:`.AnnotatedOperation` that represents the instruction
modified with the :class:`.InverseModifier`.
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
---
fixes:
- |
Fixed an issue in the ``text`` circuit drawer when displaying operations
that were not :class:`.circuit.instruction.Instruction` class. These operations
would cause the drawer to fail. Examples were :class:`.Clifford` and
:class:`.AnnotatedOperation`.
features_visualization:
- |
The ``text`` and ``mpl`` outputs for the :meth:`.QuantumCircuit.draw` and
:func:`.circuit_drawer` circuit drawer functions will now display detailed
information for operations of :class:`.AnnotatedOperation`. If the
:attr:`.AnnotatedOperation.modifiers` contains a :class:`.ControlModifier`,
the operation will be displayed the same way as controlled gates. If
the :class:`.InverseModifier` or :class:`.PowerModifier` is used,
these will be indicated with the base operation name. For example:
.. plot::
:include-source:
from qiskit.circuit import (
AnnotatedOperation,
ControlModifier,
PowerModifier,
InverseModifier,
QuantumCircuit
)
from qiskit.circuit.library import SGate
annotated_op = AnnotatedOperation(SGate(), [PowerModifier(3.4), ControlModifier(3), InverseModifier()])
qc = QuantumCircuit(4)
qc.append(annotated_op, range(4))
qc.draw("mpl")
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
---
features_circuits:
- |
Added a commutation library to the :class:`.CommutationChecker`. This library stores all the
commutation relations of unparameterizable standard gates into a dictionary that allows
for efficient lookup at runtime. This speeds up the execution of the :class:`.CommutationChecker`
class and, by extension, the :class:`.CommutationAnalysis` transpiler pass, as instead of
computing whether two unparameterizable standard gates commute it just has to look it up
from the library.
Additionally, the :class:`.CommutationChecker` was refactored and now has an upper limit
set on the number of cached commutation relations that are not in the commutation library.
This addressed: `#8020 <https://github.com/Qiskit/qiskit/issues/8020>`__ and
`#7101 <https://github.com/Qiskit/qiskit/issues/7101>`__
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
---
features:
features_transpiler:
- |
Added a new transpiler pass :class:`.FilterOpNodes` which is used to filter
:class:`.DAGOpNode`\s in a :class:`.DAGCircuit`.
- |
Added a new keyword argument, ``label``, to the constructor on the
:class:`.BarrierBeforeFinalMeasurements` transpiler pass. If specified the
inserted barrier will be assigned the specified label. This also prevents
the inserted barrier from being merged with any any other pre-existing
the inserted barrier from being merged with any other pre-existing
adjacent barriers.
other:
- |
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
---
features:
features_providers:
- |
A new class, :class:`.GenericBackendV2` has been added to the :mod:`qiskit.providers.fake_provider`
Added a new class, :class:`.GenericBackendV2`, to the :mod:`qiskit.providers.fake_provider`
module. This class is configurable, and builds a :class:`~.BackendV2` backend instance that can
be run locally (in the spirit of fake backends). Users can configure the number of qubits, basis gates,
coupling map, ability to run dynamic circuits (control flow instructions), instruction calibrations and
dtm of the backend without having to deal with manual target construction.
Qubit and gate properties are generated by randomly sampling from default ranges. The seed for this
measurement timestep of the backend without having to deal with manual target construction.
Qubit and gate properties (duration, error) are generated by randomly sampling from default ranges.
The seed for this
random generation can be fixed to ensure the reproducibility of the backend output.
It's important to note that this backend only supports gates in the standard
library. If you need a more flexible backend, there is always the option to directly instantiate a
Expand Down Expand Up @@ -46,10 +47,15 @@ features:
qc.cx(0, i + 1)
for i in range(18):
qc.measure(i, creg[i])
qc.ecr(20, 21).c_if(creg, 0)
with qc.if_test((creg, 0)):
qc.ecr(20, 21)
# Define backend with custom basis gates and control flow instructions
backend = GenericBackendV2(num_qubits=25, basis_gates = ["ecr","id","rz","sx","x"], control_flow=True)
backend = GenericBackendV2(
num_qubits=25,
basis_gates=["ecr", "id", "rz", "sx", "x"],
control_flow=True,
)
#Transpile
transpiled_qc = transpile(qc, backend)
Expand All @@ -60,4 +66,4 @@ features:
not be used to measure any concrete behaviors. They are "reasonable defaults" that can be used to
test backend-interfacing functionality not tied specific noise values of real quantum systems.
For a more accurate simulation of existing devices, you can manually build a noise model from the
real backend using the functionality offered in ``qiskit-aer``.
real backend using the functionality offered in :mod:`qiskit_aer`.
Original file line number Diff line number Diff line change
@@ -1,19 +1,21 @@
---
features:
features_providers:
- |
The :mod:`qiskit.providers.fake_provider` module now includes a series of generic fake backends
following the :class:`.BackendV1` interface. They have been introduced as an alternative to the
snapshot-based fake backends exposed in the deprecated ``FakeProvider``
(``FakeVigo``, ``FakeTokyo``, etc). The list of new fake backends includes:
* Backends without pulse capabilities:
* :class:`.Fake5QV1`
* :class:`.Fake20QV1`
* Backends with pulse capabilities:
* :class:`.Fake7QPulseV1`
* :class:`.Fake27QPulseV1`
* :class:`.Fake127QPulseV1`
The can be imported following the pattern: ``from qiskit.providers.fake_provider import Fake5QV1``.
They can be imported following the pattern: ``from qiskit.providers.fake_provider import Fake5QV1``.
More details on the backend properties can be found on each backend's API documentation.
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
---
features:
features_transpiler:
- |
Added a new exception class :class:`.InvalidLayoutError` that is a :class:`.TranspilerError`
Added a new exception class: :class:`.InvalidLayoutError`. This is a :class:`.TranspilerError`
subclass which is raised when a user provided layout is invalid (mismatched size, duplicate
qubits, etc).
fixes:
- |
Fixed an issue with the :class:`.SetLayout` transpiler pass where an invalid integer list input
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
---
features_transpiler:
- |
Added a new keyword argument, ``num_processes``, to :func:`.transpile` and
the :meth:`.PassManager.run` method. This allows for overriding both
``QISKIT_NUM_PROCS`` and the ``num_processes`` field in user configuration files
on a per-transpile basis. For example::
from qiskit import transpile, QuantumCircuit
qc = QuantumCircuit(2)
qc.h(0)
qc.cx(0, 1)
qc.measure_all()
transpile([qc]*10, basis_gates=['u', 'cz'], num_processes=2)
will run the transpile over the 10 input circuits using only 2 processes
and will override the system default, environment variable, or user
configuration file for that :func:`.transpile` call.
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
---
features:
features_transpiler:
- |
Added a new transpiler pass, :class:`.OptimizeAnnotated` that optimizes annotated
Added a new transpiler pass, :class:`.OptimizeAnnotated`, that optimizes annotated
operations on a quantum circuit.
Consider the following example::
Expand Down Expand Up @@ -48,20 +48,20 @@ features:
assert qc_optimized == qc_expected
In the case of ``gate1``, the modifiers of the annotated swap gate are brought
into the canonical form: the two ``InverseModifier`` s cancel out, and the two
``ControlModifier`` s are combined. In the case of ``gate2``, all the modifiers
into the canonical form: the two :class:`.InverseModifier`\s cancel out, and the two
:class:`.ControlModifier`\s are combined. In the case of ``gate2``, all the modifiers
get removed and the annotated operation is replaced by its base operation.
In the case of ``gate3``, multiple layers of annotations are combined into one.
The constructor of :class:`.OptimizeAnnotated` pass accepts optional
The constructor of the :class:`.OptimizeAnnotated` pass accepts optional
arguments ``target``, ``equivalence_library``, ``basis_gates`` and ``recurse``.
When ``recurse`` is ``True`` (the default value) and when either ``target``
or ``basis_gates`` are specified, the pass recursively descends into the gates
or ``basis_gates`` are specified, the pass recursively descends into the gate's
``definition`` circuits, with the exception of gates that are already supported
by the target or that belong to the equivalence library. On the other hand, when
neither ``target`` nor ``basis_gates`` are specified,
or when ``recurse`` is set to ``False``,
the pass synthesizes only the "top-level" annotated operations, i.e. does not
recursively descend into the ``definition`` circuits. This behavior is consistent
with that of :class:`.HighLevelSynthesis` transpiler pass that needs to be called
with that of the :class:`.HighLevelSynthesis` transpiler pass, which needs to be called
in order to "unroll" the annotated operations into 1-qubit and 2-qubits gates.
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
features:
features_circuits:
- |
:class:`~qiskit.circuit.ParameterExpression` (and thus also
:class:`~qiskit.circuit.Parameter`) now support powering: :code:`x**y`
Expand Down
Loading

0 comments on commit 21b11b9

Please sign in to comment.