Skip to content

Commit

Permalink
Future proof release notes and migration guide links before Qiskit 1.0 (
Browse files Browse the repository at this point in the history
Qiskit#804)

When Qiskit 1.0 is released, a bunch of APIs will be removed from our
Qiskit API docs. This breaks internal links we have.

This PR switches all links that will break to point to Qiskit 0.44. Once
1.0 is released, we should switch what we can to 0.46, per
Qiskit#803.

It does not change Qiskit release notes for 0.45 and 0.46, since we
can't safely make manual changes to those, per
Qiskit#755. Those still need to
be dealt with.

## How change was generated

I found the issues by generating 1.0 docs as the current version, then
running `npm run check:links -- --qiskit-release-notes`. I started with
manual fixes, then realized this is easily automatable.

I accidentally `git clean`ed the script, but it looked like this:

```python
from pathlib import Path
from typing import DefaultDict
from collections import defaultdict
import re


def parse_error(error: str, file_to_bad_links: DefaultDict[str, list[str]]) -> None:
    lines = error.splitlines()
    bad_link_line = lines[0]
    file_list_lines = lines[1:]

    bad_link = ""  # Regex that captured the link
    files = [line.split("❓")[0].strip() for line in file_list_lines]

    for file in files:
        file_to_bad_links[file].append(bad_link)


def read_errors() -> DefaultDict[str, list[str]]:
    raw_text = Path("api_errors.txt").read_text()
    file_to_bad_links = defaultdict(list)
    for error in raw_text.split("❌"):
        parse_error(error, file_to_bad_links)
    return file_to_bad_links


def rewrite_file(fp: str, bad_links: list[str]) -> None:
   # code to use `string.replace()`
   pass 

def main() -> None:
    file_to_bad_links = read_errors()
    for file, bad_links in file_to_bad_links.items():
      rewrite_file(file, bad_links)


main()
```

Then I had to fix a few links manually that were only in 0.45 and not
0.44.
  • Loading branch information
Eric-Arellano authored Feb 14, 2024
1 parent a0cba69 commit b2350a7
Show file tree
Hide file tree
Showing 26 changed files with 336 additions and 335 deletions.
4 changes: 2 additions & 2 deletions docs/api/migration-guides/qiskit-algorithms-module.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ This migration guide focuses on the algorithms with migration alternatives withi
## How to choose a primitive configuration for your algorithm

The classes in
[`qiskit.algorithms`](../qiskit/0.44/algorithms) are initialized with any implementation of [`qiskit.primitives.BaseSampler`](../qiskit/qiskit.primitives.BaseSampler) or [`qiskit.primitives.BaseEstimator`](../qiskit/qiskit.primitives.BaseEstimator).
[`qiskit.algorithms`](../qiskit/0.44/algorithms) are initialized with any implementation of [`qiskit.primitives.BaseSampler`](../qiskit/0.44/qiskit.primitives.BaseSampler) or [`qiskit.primitives.BaseEstimator`](../qiskit/0.44/qiskit.primitives.BaseEstimator).

Once you know which primitive you want to use, choose the primitive implementation that meets your needs. For example:

Expand Down Expand Up @@ -648,7 +648,7 @@ In addition to the migration, the module has been substantially expanded to incl
</Admonition>

<Admonition type="note">
In addition to taking in a [`qiskit.primitives.Estimator`](../qiskit/qiskit.primitives.Estimator) instance instead of a [`qiskit.utils.QuantumInstance`](../qiskit/qiskit.utils.QuantumInstance),
In addition to taking in a [`qiskit.primitives.Estimator`](../qiskit/qiskit.primitives.Estimator) instance instead of a [`qiskit.utils.QuantumInstance`](../qiskit/0.44/qiskit.utils.QuantumInstance),
the new [`qiskit.algorithms.eigensolvers.VQD`](../qiskit/0.44/qiskit.algorithms.eigensolvers.VQD) signature has undergone the following changes:

* The `expectation` parameter has been removed, as this functionality is now
Expand Down
14 changes: 7 additions & 7 deletions docs/api/migration-guides/qiskit-opflow-module.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ The functional equivalency can be roughly summarized as follows:
| [`qiskit.opflow.converters`](../qiskit/0.44/qiskit.opflow.converters) | [`qiskit.primitives`](../qiskit/primitives) |
| [`qiskit.opflow.evolutions`](../qiskit/0.44/qiskit.opflow.evolutions) | `qiskit.synthesis` [`Evolution`](../qiskit/synthesis#evolution-synthesis) |
| [`qiskit.opflow.expectations`](../qiskit/0.44/qiskit.opflow.expectations) | [`qiskit.primitives.Estimator`](../qiskit/qiskit.primitives.Estimator) |
| [`qiskit.opflow.gradients`](../qiskit/0.44/qiskit.opflow.gradients) | [`qiskit.algorithms.gradients`](../qiskit/qiskit.algorithms.gradients) |
| [`qiskit.opflow.gradients`](../qiskit/0.44/qiskit.opflow.gradients) | [`qiskit.algorithms.gradients`](../qiskit/0.44/qiskit.algorithms.gradients) |

## Operator base class

Expand Down Expand Up @@ -511,7 +511,7 @@ Examine references to [`qiskit.opflow.state_fns.StateFn`](../qiskit/0.44/qiskit.
| [`qiskit.opflow.state_fns.VectorStateFn`](../qiskit/0.44/qiskit.opflow.state_fns.VectorStateFn) | This class can be replaced with [`qiskit.quantum_info.Statevector`](../qiskit/qiskit.quantum_info.Statevector) or [`qiskit.quantum_info.StabilizerState`](../qiskit/qiskit.quantum_info.StabilizerState), for Clifford-based vectors.|
| [`qiskit.opflow.state_fns.SparseVectorStateFn`](../qiskit/0.44/qiskit.opflow.state_fns.SparseVectorStateFn) | No direct replacement. This class was used for sparse statevector representations. |
| [`qiskit.opflow.state_fns.OperatorStateFn`](../qiskit/0.44/qiskit.opflow.state_fns.OperatorStateFn) | No direct replacement. This class was used to represent measurements against operators. |
| [`qiskit.opflow.state_fns.CVaRMeasurement`](../qiskit/0.44/qiskit.opflow.state_fns.CVaRMeasurement) | Used in [`qiskit.opflow.expectations.CVaRExpectation`](../qiskit/0.44/qiskit.opflow.expectations.CVaRExpectation). This function is now covered by [`qiskit.algorithms.minimum_eigensolvers.SamplingVQE`](../qiskit/qiskit.algorithms.minimum_eigensolvers.SamplingVQE). See the example in [`Expectations`](#expectations). |
| [`qiskit.opflow.state_fns.CVaRMeasurement`](../qiskit/0.44/qiskit.opflow.state_fns.CVaRMeasurement) | Used in [`qiskit.opflow.expectations.CVaRExpectation`](../qiskit/0.44/qiskit.opflow.expectations.CVaRExpectation). This function is now covered by [`qiskit.algorithms.minimum_eigensolvers.SamplingVQE`](../qiskit/0.44/qiskit.algorithms.minimum_eigensolvers.SamplingVQE). See the example in [`Expectations`](#expectations). |

### Example 1: Apply an operator to a state

Expand Down Expand Up @@ -782,7 +782,7 @@ delayed synthesis of the gates or efficient transpilation of the circuits, so th
[`qiskit.synthesis`](../qiskit/synthesis)
and now extend the [`qiskit.synthesis.ProductFormula`](../qiskit/qiskit.synthesis.ProductFormula) base class. They no longer contain a `.convert()` method for
standalone use, but are designed to be plugged into the [`qiskit.circuit.library.PauliEvolutionGate`](../qiskit/qiskit.circuit.library.PauliEvolutionGate) and called by using `.synthesize()`.
In this context, the job of the [`qiskit.opflow.evolutions.PauliTrotterEvolution`](../qiskit/0.44/qiskit.opflow.evolutions.PauliTrotterEvolution) class can now be handled directly by the algorithms, for example, [`qiskit.algorithms.time_evolvers.trotterization.TrotterQRTE`](../qiskit/qiskit.algorithms.time_evolvers.trotterization.TrotterQRTE).
In this context, the job of the [`qiskit.opflow.evolutions.PauliTrotterEvolution`](../qiskit/0.44/qiskit.opflow.evolutions.PauliTrotterEvolution) class can now be handled directly by the algorithms, for example, [`qiskit.algorithms.time_evolvers.trotterization.TrotterQRTE`](../qiskit/0.44/qiskit.algorithms.time_evolvers.trotterization.TrotterQRTE).

Similarly, the [`qiskit.opflow.evolutions.MatrixEvolution`](../qiskit/0.44/qiskit.opflow.evolutions.MatrixEvolution) class performs evolution by classical matrix exponentiation,
constructing a circuit with [`qiskit.extensions.UnitaryGate`s](../qiskit/0.44/qiskit.extensions.UnitaryGate) or [`qiskit.extensions.HamiltonianGate`s](../qiskit/0.44/qiskit.extensions.HamiltonianGate) that contain the exponentiation of the operator.
Expand Down Expand Up @@ -1063,7 +1063,7 @@ print(values_plus)

| Opflow | Alternative |
| --- | --- |
| [`qiskit.opflow.expectations.CVaRExpectation`](../qiskit/0.44/qiskit.opflow.expectations.CVaRExpectation) | Functionality migrated into new VQE algorithm: [`qiskit.algorithms.minimum_eigensolvers.SamplingVQE`](../qiskit/qiskit.algorithms.minimum_eigensolvers.SamplingVQE) |
| [`qiskit.opflow.expectations.CVaRExpectation`](../qiskit/0.44/qiskit.opflow.expectations.CVaRExpectation) | Functionality migrated into new VQE algorithm: [`qiskit.algorithms.minimum_eigensolvers.SamplingVQE`](../qiskit/0.44/qiskit.algorithms.minimum_eigensolvers.SamplingVQE) |

#### Example 1: VQE with CVaR

Expand Down Expand Up @@ -1119,7 +1119,7 @@ print(result.eigenvalue)

## Gradients

The opflow [`qiskit.opflow.gradients`](../qiskit/0.44/qiskit.opflow.gradients) framework has been replaced by the [`qiskit.algorithms.gradients`](../qiskit/qiskit.algorithms.gradients)
The opflow [`qiskit.opflow.gradients`](../qiskit/0.44/qiskit.opflow.gradients) framework has been replaced by the [`qiskit.algorithms.gradients`](../qiskit/0.44/qiskit.algorithms.gradients)
module. The new gradients are **primitive-based subroutines** commonly used by algorithms and applications, which
can also be run standalone. For this reason, they now reside under [`qiskit.algorithms`](../qiskit/0.44/algorithms).

Expand Down Expand Up @@ -1210,9 +1210,9 @@ list:
| Opflow | Alternative |
| --- | --- |
| [`qiskit.opflow.gradients.DerivativeBase`](../qiskit/0.44/qiskit.opflow.gradients.DerivativeBase) | No replacement. This was the base class for the gradient, hessian, and QFI base classes. |
| [`qiskit.opflow.gradients.GradientBase`](../qiskit/0.44/qiskit.opflow.gradients.GradientBase) and [`qiskit.opflow.gradients.Gradient`](../qiskit/0.44/qiskit.opflow.gradients.Gradient) | [`qiskit.algorithms.gradients.BaseSamplerGradient`](../qiskit/qiskit.algorithms.gradients.BaseSamplerGradient) or [`qiskit.algorithms.gradients.BaseEstimatorGradient`](../qiskit/qiskit.algorithms.gradients.BaseEstimatorGradient), and specific subclasses per method, as explained above. |
| [`qiskit.opflow.gradients.GradientBase`](../qiskit/0.44/qiskit.opflow.gradients.GradientBase) and [`qiskit.opflow.gradients.Gradient`](../qiskit/0.44/qiskit.opflow.gradients.Gradient) | [`qiskit.algorithms.gradients.BaseSamplerGradient`](../qiskit/0.44/qiskit.algorithms.gradients.BaseSamplerGradient) or [`qiskit.algorithms.gradients.BaseEstimatorGradient`](../qiskit/0.44/qiskit.algorithms.gradients.BaseEstimatorGradient), and specific subclasses per method, as explained above. |
| [`qiskit.opflow.gradients.HessianBase`](../qiskit/0.44/qiskit.opflow.gradients.HessianBase) and [`qiskit.opflow.gradients.Hessian`](../qiskit/0.44/qiskit.opflow.gradients.Hessian) | No replacement. The new gradient framework does not work with hessians as independent objects. |
| [`qiskit.opflow.gradients.QFIBase`](../qiskit/0.44/qiskit.opflow.gradients.QFIBase) and [`qiskit.opflow.gradients.QFI`](../qiskit/0.44/qiskit.opflow.gradients.QFI) | The new [`qiskit.algorithms.gradients.QFI`](../qiskit/qiskit.algorithms.gradients.QFI) class extends QGT, so the corresponding base class is [`qiskit.algorithms.gradients.BaseQGT`](../qiskit/qiskit.algorithms.gradients.BaseQGT) |
| [`qiskit.opflow.gradients.QFIBase`](../qiskit/0.44/qiskit.opflow.gradients.QFIBase) and [`qiskit.opflow.gradients.QFI`](../qiskit/0.44/qiskit.opflow.gradients.QFI) | The new [`qiskit.algorithms.gradients.QFI`](../qiskit/0.44/qiskit.algorithms.gradients.QFI) class extends QGT, so the corresponding base class is [`qiskit.algorithms.gradients.BaseQGT`](../qiskit/0.44/qiskit.algorithms.gradients.BaseQGT) |
| [`qiskit.opflow.gradients.CircuitGradient`](../qiskit/0.44/qiskit.opflow.gradients.CircuitGradient) | No replacement. This class was used to convert between circuit and gradient [`qiskit.opflow.primitive_ops.PrimitiveOp`](../qiskit/0.44/qiskit.opflow.primitive_ops.PrimitiveOp) and this functionality is no longer necessary. |
| [`qiskit.opflow.gradients.CircuitQFI`](../qiskit/0.44/qiskit.opflow.gradients.CircuitQFI) | No replacement. This class was used to convert between circuit and QFI [`qiskit.opflow.primitive_ops.PrimitiveOp`](../qiskit/0.44/qiskit.opflow.primitive_ops.PrimitiveOp) and this functionality is no longer necessary. |
| [`qiskit.opflow.gradients.NaturalGradient`](../qiskit/0.44/qiskit.opflow.gradients.NaturalGradient) | No replacement. The same functionality can be achieved with the QFI module. |
Expand Down
4 changes: 2 additions & 2 deletions docs/api/migration-guides/qiskit-quantum-instance.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ The remainder of this guide focused on the [`qiskit.utils.QuantumInstance.execut
[`qiskit.primitives.BackendSampler`](../qiskit/qiskit.primitives.BackendSampler) and [`qiskit.primitives.BackendEstimator`](../qiskit/qiskit.primitives.BackendEstimator) are
wrappers for `backend.run()` that follow the primitives interface.

Providers can implement these primitives as subclasses of [`qiskit.primitives.BaseSampler`](../qiskit/qiskit.primitives.BaseSampler) and [`qiskit.primitives.BaseEstimator`](../qiskit/qiskit.primitives.BaseEstimator), respectively.
Providers can implement these primitives as subclasses of [`qiskit.primitives.BaseSampler`](../qiskit/0.44/qiskit.primitives.BaseSampler) and [`qiskit.primitives.BaseEstimator`](../qiskit/0.44/qiskit.primitives.BaseEstimator), respectively.
Qiskit Runtime ([`qiskit_ibm_runtime`](../qiskit-ibm-runtime/qiskit_ibm_runtime.QiskitRuntimeService)) and Aer ([`qiskit_aer.primitives`](https://qiskit.org/ecosystem/aer/apidocs/aer_primitives.html)) are examples of native implementations of primitives.

This guide uses the following naming convention:
Expand All @@ -54,7 +54,7 @@ The remainder of this guide focused on the [`qiskit.utils.QuantumInstance.execut
## Choose the right primitive for your task

The [`qiskit.utils.QuantumInstance`](../qiskit/0.44/qiskit.utils.QuantumInstance) was designed to be an abstraction of transpile and run.
It took inspiration from [`qiskit.execute_function.execute`](../qiskit/execute#qiskit.execute_function.execute) but retained configuration information that could be set
It took inspiration from [`qiskit.execute_function.execute`](../qiskit/0.44/execute#qiskit.execute_function.execute) but retained configuration information that could be set
at the algorithm level to save the user from defining the same parameters for every transpile or execute call.

The [`qiskit.primitives`](../qiskit/primitives) classes share some of these features, but unlike the [`qiskit.utils.QuantumInstance`](../qiskit/0.44/qiskit.utils.QuantumInstance),
Expand Down
4 changes: 2 additions & 2 deletions docs/api/qiskit/release-notes/0.15.md
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,7 @@ The 0.12.0 release includes several new features and bug fixes. The biggest chan
coupling_map.draw()
```

* Introduced a new pass [`qiskit.transpiler.passes.CrosstalkAdaptiveSchedule`](/api/qiskit/qiskit.transpiler.passes.CrosstalkAdaptiveSchedule "qiskit.transpiler.passes.CrosstalkAdaptiveSchedule"). This pass aims to reduce the impact of crosstalk noise on a program. It uses crosstalk characterization data from the backend to schedule gates. When a pair of gates has high crosstalk, they get serialized using a barrier. Naive serialization is harmful because it incurs decoherence errors. Hence, this pass uses a SMT optimization approach to compute a schedule which minimizes the impact of crosstalk as well as decoherence errors.
* Introduced a new pass [`qiskit.transpiler.passes.CrosstalkAdaptiveSchedule`](/api/qiskit/0.44/qiskit.transpiler.passes.CrosstalkAdaptiveSchedule "qiskit.transpiler.passes.CrosstalkAdaptiveSchedule"). This pass aims to reduce the impact of crosstalk noise on a program. It uses crosstalk characterization data from the backend to schedule gates. When a pair of gates has high crosstalk, they get serialized using a barrier. Naive serialization is harmful because it incurs decoherence errors. Hence, this pass uses a SMT optimization approach to compute a schedule which minimizes the impact of crosstalk as well as decoherence errors.

The pass takes as input a circuit which is already transpiled onto the backend i.e., the circuit is expressed in terms of physical qubits and swap gates have been inserted and decomposed into CNOTs if required. Using this circuit and crosstalk characterization data, a [Z3 optimization](https://github.com/Z3Prover/z3) is used to construct a new scheduled circuit as output.

Expand Down Expand Up @@ -349,7 +349,7 @@ The 0.12.0 release includes several new features and bug fixes. The biggest chan

#### Bug Fixes

* Previously, calling [`qiskit.circuit.QuantumCircuit.bind_parameters()`](/api/qiskit/qiskit.circuit.QuantumCircuit#bind_parameters "qiskit.circuit.QuantumCircuit.bind_parameters") prior to decomposing a circuit would result in the bound values not being correctly substituted into the decomposed gates. This has been resolved such that binding and decomposition may occur in any order. Fixes [issue #2482](https://github.com/Qiskit/qiskit-terra/issues/2482) and [issue #3509](https://github.com/Qiskit/qiskit-terra/issues/3509)
* Previously, calling [`qiskit.circuit.QuantumCircuit.bind_parameters()`](/api/qiskit/0.44/qiskit.circuit.QuantumCircuit#bind_parameters "qiskit.circuit.QuantumCircuit.bind_parameters") prior to decomposing a circuit would result in the bound values not being correctly substituted into the decomposed gates. This has been resolved such that binding and decomposition may occur in any order. Fixes [issue #2482](https://github.com/Qiskit/qiskit-terra/issues/2482) and [issue #3509](https://github.com/Qiskit/qiskit-terra/issues/3509)
* The `Collect2qBlocks` pass had previously not considered classical conditions when determining whether to include a gate within an existing block. In some cases, this resulted in classical conditions being lost when transpiling with `optimization_level=3`. This has been resolved so that classically conditioned gates are never included in a block. Fixes [issue #3215](https://github.com/Qiskit/qiskit-terra/issues/3215)
* All the output types for the circuit drawers in [`qiskit.circuit.QuantumCircuit.draw()`](/api/qiskit/qiskit.circuit.QuantumCircuit#draw "qiskit.circuit.QuantumCircuit.draw") and [`qiskit.visualization.circuit_drawer()`](/api/qiskit/qiskit.visualization.circuit_drawer "qiskit.visualization.circuit_drawer") have fixed and/or improved support for drawing controlled custom gates. Fixes [issue #3546](https://github.com/Qiskit/qiskit-terra/issues/3546), [issue #3763](https://github.com/Qiskit/qiskit-terra/issues/3763), and [issue #3764](https://github.com/Qiskit/qiskit-terra/issues/3764)
* Explanation and examples have been added to documentation for the [`qiskit.circuit.QuantumCircuit`](/api/qiskit/qiskit.circuit.QuantumCircuit "qiskit.circuit.QuantumCircuit") methods for adding gates: [`qiskit.circuit.QuantumCircuit.ccx()`](/api/qiskit/qiskit.circuit.QuantumCircuit#ccx "qiskit.circuit.QuantumCircuit.ccx"), [`qiskit.circuit.QuantumCircuit.ch()`](/api/qiskit/qiskit.circuit.QuantumCircuit#ch "qiskit.circuit.QuantumCircuit.ch"), [`qiskit.circuit.QuantumCircuit.crz()`](/api/qiskit/qiskit.circuit.QuantumCircuit#crz "qiskit.circuit.QuantumCircuit.crz"), [`qiskit.circuit.QuantumCircuit.cswap()`](/api/qiskit/qiskit.circuit.QuantumCircuit#cswap "qiskit.circuit.QuantumCircuit.cswap"), `qiskit.circuit.QuantumCircuit.cu1()`, `qiskit.circuit.QuantumCircuit.cu3()`, [`qiskit.circuit.QuantumCircuit.cx()`](/api/qiskit/qiskit.circuit.QuantumCircuit#cx "qiskit.circuit.QuantumCircuit.cx"), [`qiskit.circuit.QuantumCircuit.cy()`](/api/qiskit/qiskit.circuit.QuantumCircuit#cy "qiskit.circuit.QuantumCircuit.cy"), [`qiskit.circuit.QuantumCircuit.cz()`](/api/qiskit/qiskit.circuit.QuantumCircuit#cz "qiskit.circuit.QuantumCircuit.cz"), [`qiskit.circuit.QuantumCircuit.h()`](/api/qiskit/qiskit.circuit.QuantumCircuit#h "qiskit.circuit.QuantumCircuit.h"), `qiskit.circuit.QuantumCircuit.iden()`, [`qiskit.circuit.QuantumCircuit.rx()`](/api/qiskit/qiskit.circuit.QuantumCircuit#rx "qiskit.circuit.QuantumCircuit.rx"), [`qiskit.circuit.QuantumCircuit.ry()`](/api/qiskit/qiskit.circuit.QuantumCircuit#ry "qiskit.circuit.QuantumCircuit.ry"), [`qiskit.circuit.QuantumCircuit.rz()`](/api/qiskit/qiskit.circuit.QuantumCircuit#rz "qiskit.circuit.QuantumCircuit.rz"), [`qiskit.circuit.QuantumCircuit.s()`](/api/qiskit/qiskit.circuit.QuantumCircuit#s "qiskit.circuit.QuantumCircuit.s"), [`qiskit.circuit.QuantumCircuit.sdg()`](/api/qiskit/qiskit.circuit.QuantumCircuit#sdg "qiskit.circuit.QuantumCircuit.sdg"), [`qiskit.circuit.QuantumCircuit.swap()`](/api/qiskit/qiskit.circuit.QuantumCircuit#swap "qiskit.circuit.QuantumCircuit.swap"), [`qiskit.circuit.QuantumCircuit.t()`](/api/qiskit/qiskit.circuit.QuantumCircuit#t "qiskit.circuit.QuantumCircuit.t"), [`qiskit.circuit.QuantumCircuit.tdg()`](/api/qiskit/qiskit.circuit.QuantumCircuit#tdg "qiskit.circuit.QuantumCircuit.tdg"), `qiskit.circuit.QuantumCircuit.u1()`, `qiskit.circuit.QuantumCircuit.u2()`, `qiskit.circuit.QuantumCircuit.u3()`, [`qiskit.circuit.QuantumCircuit.x()`](/api/qiskit/qiskit.circuit.QuantumCircuit#x "qiskit.circuit.QuantumCircuit.x"), [`qiskit.circuit.QuantumCircuit.y()`](/api/qiskit/qiskit.circuit.QuantumCircuit#y "qiskit.circuit.QuantumCircuit.y"), [`qiskit.circuit.QuantumCircuit.z()`](/api/qiskit/qiskit.circuit.QuantumCircuit#z "qiskit.circuit.QuantumCircuit.z"). Fixes [issue #3400](https://github.com/Qiskit/qiskit-terra/issues/3400)
Expand Down
Loading

0 comments on commit b2350a7

Please sign in to comment.