---
title: observable_grouping (latest version)
description: API reference for qiskit_addon_cutting.utils.observable_grouping in the latest version of qiskit-addon-cutting
source: https://eu-de.quantum.cloud.ibm.com/docs/en/api/qiskit-addon-cutting/utils-observable-grouping
---

# Observable grouping

`qiskit_addon_cutting.utils.observable_grouping`

Module for conducting Pauli observable grouping.

### observables\_restricted\_to\_subsystem

`observables_restricted_to_subsystem(qubits, global_observables, /)`

[GitHub](https://github.com/Qiskit/qiskit-addon-cutting/tree/stable/0.10/qiskit_addon_cutting/utils/observable_grouping.py)

Restrict each observable to its support on a given subsystem.

A [`PauliList`](/docs/api/qiskit/qiskit.quantum_info.PauliList) will be returned if a [`PauliList`](/docs/api/qiskit/qiskit.quantum_info.PauliList) is provided; otherwise, a `list[Pauli]` will be returned.

Any phase information will be discarded, consistent with the standard behavior when slicing a Pauli.

**Parameters**

- **qubits** (Sequence\[int]) – The qubits in a subsystem
- **global\_observables** (Sequence\[Pauli] | PauliList) – The list of observables

**Return type**

list\[Pauli] | PauliList

**Returns**

Each [`Pauli`](/docs/api/qiskit/qiskit.quantum_info.Pauli) restricted to the subsystem.

```python
>>> observables_restricted_to_subsystem([1, 3], PauliList(["IXYZ", "iZZXX"]))
PauliList(['IY', 'ZX'])
```

### CommutingObservableGroup

*class* `CommutingObservableGroup(general_observable, commuting_observables)`

[GitHub](https://github.com/Qiskit/qiskit-addon-cutting/tree/stable/0.10/qiskit_addon_cutting/utils/observable_grouping.py)

Bases: [`object`](https://docs.python.org/3/library/functions.html#object)

Set of mutually qubit-wise commuting observables.

**Parameters**

- **general\_observable** ([*Pauli*](/docs/api/qiskit/qiskit.quantum_info.Pauli))
- **commuting\_observables** ([*list*](https://docs.python.org/3/library/stdtypes.html#list)*\[*[*Pauli*](/docs/api/qiskit/qiskit.quantum_info.Pauli)*]*)

#### commuting\_observables

Type: `list[Pauli]`

Observables that can be measured simultaneously.

#### general\_observable

Type: `Pauli`

A single Pauli string that contains all qubit-wise measurements needed to measure everything in `commuting_observables`.

#### pauli\_bitmasks

Type: `list[int]`

A bitmask for each observable in `commuting_observables`; given an element, each bit corresponds to whether the corresponding entry in `pauli_indices` is relevant to that observable.

#### pauli\_indices

Type: `list[int]`

The indices of non-identity [`Pauli`](/docs/api/qiskit/qiskit.quantum_info.Pauli)s in `general_observable`.

### ObservableCollection

*class* `ObservableCollection(observables, /)`

[GitHub](https://github.com/Qiskit/qiskit-addon-cutting/tree/stable/0.10/qiskit_addon_cutting/utils/observable_grouping.py)

Bases: [`object`](https://docs.python.org/3/library/functions.html#object)

Collection of observables organized for efficient taking of measurements.

The observables are automatically organized into sets of mutually qubit-wise commuting observables, each represented by a [`CommutingObservableGroup`](#qiskit_addon_cutting.utils.observable_grouping.CommutingObservableGroup "qiskit_addon_cutting.utils.observable_grouping.CommutingObservableGroup").

Assign member variables.

**Parameters**

**observables** (PauliList | Iterable\[Pauli]) – Observables of interest

#### construct\_general\_observables

*static* `construct_general_observables(commuting_subobservables, /)`

Construct the most general observable from each set of mutually commuting observables.

In special cases, advanced users may want to subclass and override this `staticmethod` in order to measure additional qubits than the default for each general observable.

**Return type**

[`list`](https://docs.python.org/3/library/stdtypes.html#list)\[[`Pauli`](/docs/api/qiskit/qiskit.quantum_info.Pauli)]

**Parameters**

**commuting\_subobservables** ([*list*](https://docs.python.org/3/library/stdtypes.html#list)*\[*[*list*](https://docs.python.org/3/library/stdtypes.html#list)*\[*[*Pauli*](/docs/api/qiskit/qiskit.quantum_info.Pauli)*]]*)

#### groups

Type: `list[CommutingObservableGroup]`

List of [`CommutingObservableGroup`](#qiskit_addon_cutting.utils.observable_grouping.CommutingObservableGroup "qiskit_addon_cutting.utils.observable_grouping.CommutingObservableGroup")s which, together, contain all desired observables.

#### lookup

Type: `dict[Pauli, list[tuple[int, int]]]`

Get dict which maps each [`Pauli`](/docs/api/qiskit/qiskit.quantum_info.Pauli) observable to a list of indices, `(i, j)`, to commuting observables in `groups`.

For each element of the list, it means that the [`Pauli`](/docs/api/qiskit/qiskit.quantum_info.Pauli) is given by the `j`-th commuting observable in the `i`-th group.

This list will be of length 1 at minimum, but may potentially be longer if multiple [`CommutingObservableGroup`](#qiskit_addon_cutting.utils.observable_grouping.CommutingObservableGroup "qiskit_addon_cutting.utils.observable_grouping.CommutingObservableGroup") objects are compatible with the given [`Pauli`](/docs/api/qiskit/qiskit.quantum_info.Pauli).
