Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

add measurement information #1988

Merged
merged 13 commits into from
Oct 4, 2024
4 changes: 4 additions & 0 deletions docs/guides/_toc.json
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,10 @@
"title": "Classical feedforward and control flow",
"url": "/guides/classical-feedforward-and-control-flow"
},
{
"title": "Measure qubits",
"url": "/guides/measure-qubits"
},
{
"title": "Synthesize unitary operators",
"url": "/guides/synthesize-unitary-operators"
Expand Down
1 change: 1 addition & 0 deletions docs/guides/map-problem-to-circuits.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ The output of this step in a Qiskit pattern is normally a collection of circuits
### Build circuits with the Qiskit SDK
* [Circuit library](./circuit-library)
* [Construct circuits](./construct-circuits)
* [Measure qubits](./measure-qubits)
* [Visualize circuits](./visualize-circuits)
* [Classical feedforward and control flow](./classical-feedforward-and-control-flow)
* [Synthesize unitary operators](./synthesize-unitary-operators)
Expand Down
96 changes: 96 additions & 0 deletions docs/guides/measure-qubits.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
---
title: Measure qubits
description: Learn how to measure qubits, including constraints on where measurements can be used.
---

# Measure qubits

To get information about a qubit's state, you can _measure_ it onto a [classical bit](/api/qiskit/circuit#qiskit.circuit.Clbit). In Qiskit, measurements are performed in the computational basis, that is, the single-qubit Pauli-$Z$ basis. Therefore, a measurement yields 0 or 1, depending on the overlap with the Pauli-$Z$ eigenstates $|0\rangle$ and $|1\rangle$:

$$
|q\rangle \xrightarrow{measure}\begin{cases}
0 (\text{outcome}+1), \text{with probability } p_0=|\langle q|0\rangle|^{2}\text{,} \\
1 (\text{outcome}-1), \text{with probability } p_1=|\langle q|1\rangle|^{2}\text{.}
\end{cases}
$$

## Apply a measurement to a circuit

There are several ways to apply measurements to a circuit:

### `QuantumCircuit.measure` method
beckykd marked this conversation as resolved.
Show resolved Hide resolved
Eric-Arellano marked this conversation as resolved.
Show resolved Hide resolved

Use the [`measure`](/api/qiskit/qiskit.circuit.QuantumCircuit#measure) method to measure a [`QuantumCircuit`](/api/qiskit/qiskit.circuit.QuantumCircuit#quantumcircuit-class).

Examples:

```python
from qiskit import QuantumCircuit

qc = QuantumCircuit(5, 5)
qc.x(0)
qc.x(1)
qc.x(4)
qc.measure(range(5), range(5)) # Measures all qubits into the corresponding clbit.
```

```python
from qiskit import QuantumCircuit

qc = QuantumCircuit(3, 1)
qc.x([0, 2])
qc.measure(1, 0) # Measure qubit 1 into the classical bit 0.
```

### `Measure` class

The Qiskit [Measure](/api/qiskit/circuit#qiskit.circuit.Measure) class measures the specified qubits.

```python
from qiskit.circuit import Measure

....
qc.append(Measure(), [0], [0]) # measure qubit 0 into clbit 0
```

### `QuantumCircuit.measure_all` method

To measure all qubits into the corresponding classical bits, use the [`measure_all`](/api/qiskit/qiskit.circuit.QuantumCircuit#measure_all) method. By default, this method adds new classical bits in a `ClassicalRegister` to store these measurements.

```python
from qiskit import QuantumCircuit

qc = QuantumCircuit(3, 1)
qc.x([0, 2])
qc.measure_all() # Measure all qubits.
```

### `QuantumCircuit.measure_active` method

To measure all qubits that are not idle, use the [`measure_active`](/api/qiskit/qiskit.circuit.QuantumCircuit#measure_active) method. This method creates a new `ClassicalRegister` with a size equal to the number of non-idle qubits being measured.

```python
from qiskit import QuantumCircuit

qc = QuantumCircuit(3, 1)
qc.x([0, 2])
qc.measure_active() # Measure qubits that are not idle, i.e., qubits 0 and 2.
```


<Admonition type="attention" title="Important notes">

* Circuits that contain operations _after_ a measurement are called dynamic circuits. Not all QPUs or simulators support these.
* There must be at least one classical register in order to use measurements.
* The Sampler primitive requires circuit measurements. You can add circuit measurements with the Estimator primitive, but they are ignored.

</Admonition>

## Next steps

<Admonition type="tip" title="Recommendations">
- [`Measure`](/api/qiskit/circuit#qiskit.circuit.Measure) class
- [`measure_all`](/api/qiskit/qiskit.circuit.QuantumCircuit#measure_all) method
- [`measure_active`](/api/qiskit/qiskit.circuit.QuantumCircuit#measure_active) method
- [`random_circuit`](/api/qiskit/circuit#random_circuit) method
</Admonition>
2 changes: 2 additions & 0 deletions qiskit_bot.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,8 @@ notifications:
- "`@lerongil`"
- "@jyu00"
- "@beckykd"
"docs/guides/measure-qubits":
- "@beckykd"
"docs/guides/get-qpu-information":
- "@frankharkins"
- "@abbycross"
Expand Down
1 change: 1 addition & 0 deletions scripts/js/commands/checkPatternsIndex.ts
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ const ALLOWLIST_MISSING_FROM_TOC: Set<string> = new Set([
"/guides/post-process-results",
"/guides/q-ctrl-optimization-solver",
"/guides/qunasys-quri-chemistry",
"/guides/circuit-library",
]);

const INDEX_PAGES = [
Expand Down