---
title: Z2Symmetries (v0.46)
description: API reference for qiskit.opflow.primitive_ops.Z2Symmetries in qiskit v0.46
source: https://eu-de.quantum.cloud.ibm.com/docs/en/api/qiskit/0.46/qiskit.opflow.primitive_ops.Z2Symmetries
---

# Z2Symmetries

*class* `qiskit.opflow.primitive_ops.Z2Symmetries(symmetries, sq_paulis, sq_list, tapering_values=None, tol=1e-14)`

[GitHub](https://github.com/qiskit/qiskit/tree/stable/0.46/qiskit/opflow/primitive_ops/tapered_pauli_sum_op.py)

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

Deprecated: Z2 Symmetries

> **Deprecated since version 0.24.0**
>
> The class `qiskit.opflow.primitive_ops.tapered_pauli_sum_op.Z2Symmetries` is deprecated as of qiskit-terra 0.24.0. It will be removed in the Qiskit 1.0 release. For code migration guidelines, visit [https://qisk.it/opflow\_migration](https://qisk.it/opflow_migration).

**Parameters**

- **symmetries** ([*List*](https://docs.python.org/3/library/typing.html#typing.List)*\[*[*Pauli*](/docs/api/qiskit/0.46/qiskit.quantum_info.Pauli "qiskit.quantum_info.operators.symplectic.pauli.Pauli")*]*) – the list of Pauli objects representing the Z\_2 symmetries
- **sq\_paulis** ([*List*](https://docs.python.org/3/library/typing.html#typing.List)*\[*[*Pauli*](/docs/api/qiskit/0.46/qiskit.quantum_info.Pauli "qiskit.quantum_info.operators.symplectic.pauli.Pauli")*]*) – the list of single - qubit Pauli objects to construct the Clifford operators
- **sq\_list** ([*List*](https://docs.python.org/3/library/typing.html#typing.List)*\[*[*int*](https://docs.python.org/3/library/functions.html#int)*]*) – the list of support of the single-qubit Pauli objects used to build the Clifford operators
- **tapering\_values** ([*List*](https://docs.python.org/3/library/typing.html#typing.List)*\[*[*int*](https://docs.python.org/3/library/functions.html#int)*] | None*) – values determines the sector.
- **tol** ([*float*](https://docs.python.org/3/library/functions.html#float)) – Tolerance threshold for ignoring real and complex parts of a coefficient.

**Raises**

[**OpflowError**](/docs/api/qiskit/0.46/opflow#qiskit.opflow.OpflowError "qiskit.opflow.OpflowError") – Invalid paulis

## Attributes

### cliffords

Get clifford operators, build based on symmetries and single-qubit X. :returns: a list of unitaries used to diagonalize the Hamiltonian.

### settings

Return operator settings.

### sq\_list

returns sq list

### sq\_paulis

returns sq paulis

### symmetries

return symmetries

### tapering\_values

returns tapering values

### tol

Tolerance threshold for ignoring real and complex parts of a coefficient.

## Methods

### consistent\_tapering

`consistent_tapering(operator)`

Tapering the operator with the same manner of how this tapered operator is created. i.e., using the same Cliffords and tapering values.

**Parameters**

**operator** ([*PauliSumOp*](/docs/api/qiskit/0.46/qiskit.opflow.primitive_ops.PauliSumOp "qiskit.opflow.primitive_ops.pauli_sum_op.PauliSumOp")) – the to-be-tapered operator

**Returns**

The tapered operator

**Raises**

[**OpflowError**](/docs/api/qiskit/0.46/opflow#qiskit.opflow.OpflowError "qiskit.opflow.OpflowError") – The given operator does not commute with the symmetry

**Return type**

[*OperatorBase*](/docs/api/qiskit/0.46/qiskit.opflow.OperatorBase "qiskit.opflow.operator_base.OperatorBase")

### convert\_clifford

`convert_clifford(operator)`

This method operates the first part of the tapering. It converts the operator by composing it with the clifford unitaries defined in the current symmetry.

**Parameters**

**operator** ([*PauliSumOp*](/docs/api/qiskit/0.46/qiskit.opflow.primitive_ops.PauliSumOp "qiskit.opflow.primitive_ops.pauli_sum_op.PauliSumOp")) – to-be-tapered operator

**Returns**

[`PauliSumOp`](/docs/api/qiskit/0.46/qiskit.opflow.primitive_ops.PauliSumOp "qiskit.opflow.primitive_ops.PauliSumOp") corresponding to the converted operator.

**Raises**

[**OpflowError**](/docs/api/qiskit/0.46/opflow#qiskit.opflow.OpflowError "qiskit.opflow.OpflowError") – Z2 symmetries, single qubit pauli and single qubit list cannot be empty

**Return type**

[*OperatorBase*](/docs/api/qiskit/0.46/qiskit.opflow.OperatorBase "qiskit.opflow.operator_base.OperatorBase")

### copy

`copy()`

Get a copy of self. :returns: copy

**Return type**

[*Z2Symmetries*](#qiskit.opflow.primitive_ops.Z2Symmetries "qiskit.opflow.primitive_ops.tapered_pauli_sum_op.Z2Symmetries")

### find\_Z2\_symmetries

*classmethod* `find_Z2_symmetries(operator)`

Finds Z2 Pauli-type symmetries of an Operator.

**Returns**

a z2\_symmetries object contains symmetries, single-qubit X, single-qubit list.

**Return type**

[*Z2Symmetries*](#qiskit.opflow.primitive_ops.Z2Symmetries "qiskit.opflow.primitive_ops.tapered_pauli_sum_op.Z2Symmetries")

### is\_empty

`is_empty()`

Check the z2\_symmetries is empty or not. :returns: Empty or not

**Return type**

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

### taper

`taper(operator)`

Taper an operator based on the z2\_symmetries info and sector defined by tapering\_values. The tapering\_values will be stored into the resulted operator for a record.

The tapering is a two-step algorithm which first converts the operator into a [`PauliSumOp`](/docs/api/qiskit/0.46/qiskit.opflow.primitive_ops.PauliSumOp "qiskit.opflow.primitive_ops.PauliSumOp") with same eigenvalues but where some qubits are only acted upon with the Pauli operators I or X. The number M of these redundant qubits is equal to the number M of identified symmetries.

The second step of the reduction consists in replacing these qubits with the possible eigenvalues of the corresponding Pauli X, giving 2^M new operators with M less qubits. If an eigenvalue sector was previously identified for the solution, then this reduces to 1 new operator with M less qubits.

**Parameters**

**operator** ([*PauliSumOp*](/docs/api/qiskit/0.46/qiskit.opflow.primitive_ops.PauliSumOp "qiskit.opflow.primitive_ops.pauli_sum_op.PauliSumOp")) – the to-be-tapered operator

**Returns**

\[[`PauliSumOp`](/docs/api/qiskit/0.46/qiskit.opflow.primitive_ops.PauliSumOp "qiskit.opflow.primitive_ops.PauliSumOp")]; otherwise, [`PauliSumOp`](/docs/api/qiskit/0.46/qiskit.opflow.primitive_ops.PauliSumOp "qiskit.opflow.primitive_ops.PauliSumOp")

**Return type**

If tapering\_values is None

**Raises**

[**OpflowError**](/docs/api/qiskit/0.46/opflow#qiskit.opflow.OpflowError "qiskit.opflow.OpflowError") – Z2 symmetries, single qubit pauli and single qubit list cannot be empty

### taper\_clifford

`taper_clifford(operator)`

This method operates the second part of the tapering. This function assumes that the input operators have already been transformed using [`convert_clifford()`](#qiskit.opflow.primitive_ops.Z2Symmetries.convert_clifford "qiskit.opflow.primitive_ops.Z2Symmetries.convert_clifford"). The redundant qubits due to the symmetries are dropped and replaced by their two possible eigenvalues. The tapering\_values will be stored into the resulted operator for a record.

**Parameters**

**operator** ([*PauliSumOp*](/docs/api/qiskit/0.46/qiskit.opflow.primitive_ops.PauliSumOp "qiskit.opflow.primitive_ops.pauli_sum_op.PauliSumOp")) – Partially tapered operator resulting from a call to [`convert_clifford()`](#qiskit.opflow.primitive_ops.Z2Symmetries.convert_clifford "qiskit.opflow.primitive_ops.Z2Symmetries.convert_clifford")

**Returns**

\[[`PauliSumOp`](/docs/api/qiskit/0.46/qiskit.opflow.primitive_ops.PauliSumOp "qiskit.opflow.primitive_ops.PauliSumOp")]; otherwise, [`PauliSumOp`](/docs/api/qiskit/0.46/qiskit.opflow.primitive_ops.PauliSumOp "qiskit.opflow.primitive_ops.PauliSumOp")

**Return type**

If tapering\_values is None

**Raises**

[**OpflowError**](/docs/api/qiskit/0.46/opflow#qiskit.opflow.OpflowError "qiskit.opflow.OpflowError") – Z2 symmetries, single qubit pauli and single qubit list cannot be empty
