Pauli

class Pauli(z=None, x=None, label=None)[source]

A simple class representing Pauli Operators.

The form is P_zx = (-i)^dot(z,x) Z^z X^x where z and x are elements of Z_2^n. That is, there are 4^n elements (no phases in this group).

For example, for 1 qubit P_00 = Z^0 X^0 = I P_01 = X P_10 = Z P_11 = -iZX = (-i) iY = Y

The overload __mul__ does not track the sign: P1*P2 = Z^(z1+z2) X^(x1+x2) but sgn_prod does __mul__ and track the phase: P1*P2 = (-i)^dot(z1+z2,x1+x2) Z^(z1+z2) X^(x1+x2) where the sums are taken modulo 2.

Pauli vectors z and x are supposed to be defined as boolean numpy arrays.

Ref. Jeroen Dehaene and Bart De Moor Clifford group, stabilizer states, and linear and quadratic operations over GF(2) Phys. Rev. A 68, 042318 – Published 20 October 2003

Make the Pauli object.

Note that, for the qubit index:
  • Order of z, x vectors is q_0 … q_{n-1},

  • Order of pauli label is q_{n-1} … q_0

E.g.,
  • z and x vectors: z = [z_0 … z_{n-1}], x = [x_0 … x_{n-1}]

  • a pauli is $P_{n-1} otimes … otimes P_0$

Parameters
  • z (numpy.ndarray) – boolean, z vector

  • x (numpy.ndarray) – boolean, x vector

  • label (str) – pauli label

Attributes

Pauli.num_qubits

Number of qubits.

Pauli.numberofqubits

Deprecated, use num_qubits instead.

Pauli.x

Getter of x.

Pauli.z

Getter of z.

Methods

Pauli.__len__()

Return number of qubits.

Pauli.__mul__(other)

Multiply two Paulis.

Pauli.append_paulis([paulis, pauli_labels])

Append pauli at the end.

Pauli.delete_qubits(indices)

Delete pauli at the indices.

Pauli.from_label(label)

Take pauli string to construct pauli.

Pauli.insert_paulis([indices, paulis, …])

Insert or append pauli to the targeted indices.

Pauli.kron(other)

Kronecker product of two paulis.

Pauli.pauli_single(num_qubits, index, …)

Generate single qubit pauli at index with pauli_label with length num_qubits.

Pauli.random(num_qubits[, seed])

Return a random Pauli on number of qubits.

Pauli.sgn_prod(p1, p2)

Multiply two Paulis and track the phase.

Pauli.to_instruction()

Convert to Pauli circuit instruction.

Pauli.to_label()

Present the pauli labels in I, X, Y, Z format.

Pauli.to_matrix()

Convert Pauli to a matrix representation.

Pauli.to_operator()

Convert to Operator object.

Pauli.to_spmatrix()

Convert Pauli to a sparse matrix representation (CSR format).

Pauli.update_x(x[, indices])

Update partial or entire x.

Pauli.update_z(z[, indices])

Update partial or entire z.