qml.pauli.pauli_group¶
- pauli_group(n_qubits, wire_map=None)[source]¶
Generate the \(n\)-qubit Pauli group.
This function enables the construction of the \(n\)-qubit Pauli group with no storage involved. The \(n\)-qubit Pauli group has size \(4^n\), thus it may not be desirable to construct it in full and store.
The order of iteration is based on the binary symplectic representation of the Pauli group as \(2n\)-bit strings. Ordering is done by converting the integers \(0\) to \(2^{2n}\) to binary strings, and converting those strings to Pauli operators using the
binary_to_pauli()
method.- Parameters
n_qubits (int) – The number of qubits for which to create the group.
wire_map (dict[Union[str, int], int]) – dictionary containing all wire labels used in the Pauli word as keys, and unique integer labels as their values. If no wire map is provided, wires will be labeled by integers between 0 and
n_qubits
.
- Returns
The next Pauli word in the group.
- Return type
Example
The
pauli_group
generator can be used to loop over the Pauli group as follows. (Note: in the example below, we display only the first 5 elements for brevity.)>>> from pennylane.pauli import pauli_group >>> n_qubits = 3 >>> for p in pauli_group(n_qubits): ... print(p) ... I(0) Z(2) Z(1) Z(1) @ Z(2) Z(0)
The full Pauli group can then be obtained like so:
>>> full_pg = list(pauli_group(n_qubits))
The group can also be created using a custom wire map; if no map is specified, a default map of label \(i\) to wire
i
as in the example above will be created. (Note: in the example below, we display only the first 5 elements for brevity.)>>> wire_map = {'a' : 0, 'b' : 1, 'c' : 2} >>> for p in pauli_group(n_qubits, wire_map=wire_map): ... print(p) ... I('a') Z('c') Z('b') Z('b') @ Z('c') Z('a')