Z2Symmetries
class Z2Symmetries(symmetries, sq_paulis, sq_list, tapering_values=None, tol=1e-14)
Bases: object
Z2 Symmetries
Parameters
- symmetries (
List
[Pauli
]) – the list of Pauli objects representing the Z_2 symmetries - sq_paulis (
List
[Pauli
]) – the list of single - qubit Pauli objects to construct the Clifford operators - sq_list (
List
[int
]) – the list of support of the single-qubit Pauli objects used to build the Clifford operators - tapering_values (
Optional
[List
[int
]]) – values determines the sector. - tol (
float
) – Tolerance threshold for ignoring real and complex parts of a coefficient.
Raises
OpflowError – Invalid paulis
Methods Defined Here
consistent_tapering
Z2Symmetries.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
) – the to-be-tapered operator
Return type
Returns
The tapered operator
Raises
OpflowError – The given operator does not commute with the symmetry
convert_clifford
Z2Symmetries.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
) – to-be-tapered operator
Return type
Returns
PauliSumOp
corresponding to the converted operator.
Raises
OpflowError – Z2 symmetries, single qubit pauli and single qubit list cannot be empty
copy
Z2Symmetries.copy()
Get a copy of self. :rtype: Z2Symmetries
:returns: copy
find_Z2_symmetries
classmethod Z2Symmetries.find_Z2_symmetries(operator)
Finds Z2 Pauli-type symmetries of an Operator.
Return type
Returns
a z2_symmetries object contains symmetries, single-qubit X, single-qubit list.
is_empty
Z2Symmetries.is_empty()
Check the z2_symmetries is empty or not. :rtype: bool
:returns: Empty or not
taper
Z2Symmetries.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
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
) – the to-be-tapered operator
Returns
[PauliSumOp
]; otherwise, PauliSumOp
Return type
If tapering_values is None
Raises
OpflowError – Z2 symmetries, single qubit pauli and single qubit list cannot be empty
taper_clifford
Z2Symmetries.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()
. 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
) – Partially tapered operator resulting from a call to convert_clifford()
Returns
[PauliSumOp
]; otherwise, PauliSumOp
Return type
If tapering_values is None
Raises
OpflowError – Z2 symmetries, single qubit pauli and single qubit list cannot be empty
Attributes
cliffords
Get clifford operators, build based on symmetries and single-qubit X. :rtype: List
[PauliSumOp
] :returns: a list of unitaries used to diagonalize the Hamiltonian.
settings
Return operator settings.
Return type
Dict
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.