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
6 changes: 4 additions & 2 deletions docs/guides/_toc.json
Original file line number Diff line number Diff line change
Expand Up @@ -126,8 +126,6 @@
"title": "Circuits and operators",
"children": [
{
"title": "Circuit library",
"url": "/guides/circuit-library"
},
{
"title": "Construct circuits",
Expand All @@ -137,6 +135,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
97 changes: 97 additions & 0 deletions docs/guides/measure-qubits.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
---
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. A measurement will thus yield 0 or 1, depending on the overlap with the Pauli-$Z$ eigenstates $|0\rangle$ and $|1\rangle$:

$$
|q\rangle \xrightarrow{measure}\begin{cases}
|0\rangle (\text{outcome}+1), \text{with probability } p_0=|\langle q|0\rangle|^{2}\text{,} \\
|1\rangle (\text{outcome}-1), \text{with probability } p_1=|\langle q|1\rangle|^{2}\text{.}
beckykd marked this conversation as resolved.
Show resolved Hide resolved
\end{cases}
$$

## Apply a measurement to a circuit

There are several ways to apply measurement 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
```

### `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.
```

### `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.
beckykd marked this conversation as resolved.
Show resolved Hide resolved
```


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

* Circuits that contain operations _after_ a measurement are called dynamic circuits. Note, that not all backends or simulators might support these.
* Each qubit can be measured only once, except when using dynamic circuits.
beckykd marked this conversation as resolved.
Show resolved Hide resolved
* 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
Loading