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

# slicing

`qiskit_addon_utils.slicing`

Utility methods for circuit slicing.

For more information, check out the [how-to guide](https://qiskit.github.io/qiskit-addon-utils/how_tos/create_circuit_slices.html) which discusses this submodule.

### combine\_slices

`combine_slices(slices, include_barriers=False)`

[GitHub](https://github.com/Qiskit/qiskit-addon-utils/tree/stable/0.4/qiskit_addon_utils/slicing/combine_slices.py#L22-L54)

Combine N-qubit slices of a circuit into a single circuit.

**Parameters**

- **slices** ([*Sequence*](https://docs.python.org/3/library/collections.abc.html#collections.abc.Sequence)*\[*[*QuantumCircuit*](/docs/api/qiskit/qiskit.circuit.QuantumCircuit)*]*) – The N-qubit circuit slices.
- **include\_barriers** ([*bool*](https://docs.python.org/3/library/functions.html#bool)) – If `True`, place barriers between each slice.

**Returns**

A [`QuantumCircuit`](/docs/api/qiskit/qiskit.circuit.QuantumCircuit) with the slices appended in sequential order.

**Raises**

[**ValueError**](https://docs.python.org/3/library/exceptions.html#ValueError) – Two input slices were defined on different numbers of qubits.

**Return type**

[*QuantumCircuit*](/docs/api/qiskit/qiskit.circuit.QuantumCircuit) | None

### slice\_by\_barriers

`slice_by_barriers(circuit)`

[GitHub](https://github.com/Qiskit/qiskit-addon-utils/tree/stable/0.4/qiskit_addon_utils/slicing/slice_by_barriers.py#L21-L52)

Split a `QuantumCircuit` into slices around full-circuit barriers.

Barriers which do not act on all circuit qubits will be treated as normal operations and included in the slices. Barriers which act on all qubits will be interpreted as slice locations and will not be included in the output slices.

**Parameters**

**circuit** ([*QuantumCircuit*](/docs/api/qiskit/qiskit.circuit.QuantumCircuit)) – The circuit to be split.

**Returns**

A sequence of [`QuantumCircuit`](/docs/api/qiskit/qiskit.circuit.QuantumCircuit) objects, one for each slice.

**Return type**

[list](https://docs.python.org/3/library/stdtypes.html#list)\[[*QuantumCircuit*](/docs/api/qiskit/qiskit.circuit.QuantumCircuit)]

### slice\_by\_coloring

`slice_by_coloring(circuit, coloring)`

[GitHub](https://github.com/Qiskit/qiskit-addon-utils/tree/stable/0.4/qiskit_addon_utils/slicing/slice_by_coloring.py#L28-L120)

Split a `QuantumCircuit` into slices using the provided edge coloring.

Two-qubit gates acting on identically colored qubit connections (edges) will be grouped greedily into slices using [`CollectOpColor`](/docs/api/qiskit-addon-utils/slicing-transpiler-passes-collect-op-color "qiskit_addon_utils.slicing.transpiler.passes.CollectOpColor"). This will be done in order of increasing color value (the integer values which each edge is mapped to).

> **Warning**
>
> Note, that this does *not* mean that low valued color slices are guaranteed to be left-most in your circuit. Below is an example to emphasize this.

```python
>>> from qiskit import QuantumCircuit

>>> circuit = QuantumCircuit(5)
>>> _ = circuit.cx(0, 1)
>>> _ = circuit.cx(3, 4)
>>> _ = circuit.cx(2, 3)

>>> circuit.draw()
q_0: ──■───────
     ┌─┴─┐
q_1: ┤ X ├─────
     └───┘
q_2: ───────■──
          ┌─┴─┐
q_3: ──■──┤ X ├
     ┌─┴─┐└───┘
q_4: ┤ X ├─────
     └───┘

>>> coloring = {(0, 1): 0, (2, 3): 0, (3, 4): 1}

>>> from qiskit_addon_utils.slicing import combine_slices, slice_by_coloring

>>> slices = slice_by_coloring(circuit, coloring)

# for illustration purposes, we are recombining the slices with barriers
>>> recombined = combine_slices(slices, include_barriers=True)
>>> recombined.draw()
           ░
q_0: ──────░───■──
           ░ ┌─┴─┐
q_1: ──────░─┤ X ├
           ░ └───┘
q_2: ──────░───■──
           ░ ┌─┴─┐
q_3: ──■───░─┤ X ├
     ┌─┴─┐ ░ └───┘
q_4: ┤ X ├─░──────
     └───┘ ░
```

Single-qubit gates will be collected into a single slice using [`CollectOpSize`](/docs/api/qiskit-addon-utils/slicing-transpiler-passes-collect-op-size "qiskit_addon_utils.slicing.transpiler.passes.CollectOpSize").

**Parameters**

- **circuit** ([*QuantumCircuit*](/docs/api/qiskit/qiskit.circuit.QuantumCircuit)) – The circuit to be split.
- **coloring** ([*dict*](https://docs.python.org/3/library/stdtypes.html#dict)*\[*[*tuple*](https://docs.python.org/3/library/stdtypes.html#tuple)*\[*[*int*](https://docs.python.org/3/library/functions.html#int)*,* [*int*](https://docs.python.org/3/library/functions.html#int)*],* [*int*](https://docs.python.org/3/library/functions.html#int)*]*) – A dictionary mapping edges (pairs of integers) to color values.

**Returns**

A sequence of [`QuantumCircuit`](/docs/api/qiskit/qiskit.circuit.QuantumCircuit) objects, one for each slice.

**Raises**

- [**ValueError**](https://docs.python.org/3/library/exceptions.html#ValueError) – The input edge coloring is invalid.
- [**ValueError**](https://docs.python.org/3/library/exceptions.html#ValueError) – Could not assign a color to circuit instruction.

**Return type**

[list](https://docs.python.org/3/library/stdtypes.html#list)\[[*QuantumCircuit*](/docs/api/qiskit/qiskit.circuit.QuantumCircuit)]

### slice\_by\_depth

`slice_by_depth(circuit, max_slice_depth)`

[GitHub](https://github.com/Qiskit/qiskit-addon-utils/tree/stable/0.4/qiskit_addon_utils/slicing/slice_by_depth.py#L21-L57)

Split a `QuantumCircuit` into slices based on depth.

This function transforms the input circuit into a [`DAGCircuit`](/docs/api/qiskit/qiskit.dagcircuit.DAGCircuit) and batches the sequence of depth-1 layers output from [`layers()`](/docs/api/qiskit/qiskit.dagcircuit.DAGCircuit#layers) into slices of depth not exceeding `max_slice_depth`. This is achieved by composing layers into slices until the max slice depth is reached and then starting a new slice with the next layer. The final slice may be composed of fewer than `max_slice_depth` layers.

**Parameters**

- **circuit** ([*QuantumCircuit*](/docs/api/qiskit/qiskit.circuit.QuantumCircuit)) – The circuit to be split.
- **max\_slice\_depth** ([*int*](https://docs.python.org/3/library/functions.html#int)) – The maximum depth of a given slice.

**Returns**

A sequence of [`QuantumCircuit`](/docs/api/qiskit/qiskit.circuit.QuantumCircuit) objects, one for each slice.

**Return type**

[list](https://docs.python.org/3/library/stdtypes.html#list)\[[*QuantumCircuit*](/docs/api/qiskit/qiskit.circuit.QuantumCircuit)]

### slice\_by\_gate\_types

`slice_by_gate_types(circuit)`

[GitHub](https://github.com/Qiskit/qiskit-addon-utils/tree/stable/0.4/qiskit_addon_utils/slicing/slice_by_gate_types.py#L24-L57)

Split a `QuantumCircuit` into depth-1 slices of operations of the same type.

> **Warning**
>
> Note: Adjacent slices sharing no qubits in common may be ordered arbitrarily.

**Parameters**

**circuit** ([*QuantumCircuit*](/docs/api/qiskit/qiskit.circuit.QuantumCircuit)) – The circuit to be split.

**Returns**

A sequence of [`QuantumCircuit`](/docs/api/qiskit/qiskit.circuit.QuantumCircuit) objects, one for each slice.

**Return type**

[list](https://docs.python.org/3/library/stdtypes.html#list)\[[*QuantumCircuit*](/docs/api/qiskit/qiskit.circuit.QuantumCircuit)]
