Skip to main contentIBM Quantum Documentation
You are viewing the API reference for an old version of Qiskit SDK. Switch to latest version

Pauli

Pauli(z=None, x=None, label=None) GitHub(opens in a new tab)

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

num_qubits

Number of qubits.

numberofqubits

Deprecated, use num_qubits instead. Number of qubits.

x

Getter of x.

z

Getter of z.


Methods

__len__

Pauli.__len__()

Return number of qubits.

__mul__

Pauli.__mul__(other)

Multiply two Paulis.

Returns

the multiplied pauli.

Return type

Pauli

Raises

QiskitError – if the number of qubits of two paulis are different.

append_paulis

Pauli.append_paulis(paulis=None, pauli_labels=None)

Append pauli at the end.

Parameters

  • paulis (Pauli) – the to-be-inserted or appended pauli
  • pauli_labels (list[str]) – the to-be-inserted or appended pauli label

Returns

self

Return type

Pauli

delete_qubits

Pauli.delete_qubits(indices)

Delete pauli at the indices.

Parameters

indices (list[int]) – the indices of to-be-deleted paulis

Returns

self

Return type

Pauli

from_label

classmethod Pauli.from_label(label)

Take pauli string to construct pauli.

The qubit index of pauli label is q_{n-1} … q_0. E.g., a pauli is $P_{n-1} otimes … otimes P_0$

Parameters

label (str) – pauli label

Returns

the constructed pauli

Return type

Pauli

Raises

QiskitError – invalid character in the label

insert_paulis

Pauli.insert_paulis(indices=None, paulis=None, pauli_labels=None)

Insert or append pauli to the targeted indices.

If indices is None, it means append at the end.

Parameters

  • indices (list[int]) – the qubit indices to be inserted
  • paulis (Pauli) – the to-be-inserted or appended pauli
  • pauli_labels (list[str]) – the to-be-inserted or appended pauli label
Note

the indices refers to the location of original paulis, e.g. if indices = [0, 2], pauli_labels = [‘Z’, ‘I’] and original pauli = ‘ZYXI’ the pauli will be updated to ZY’I’XI’Z’ ‘Z’ and ‘I’ are inserted before the qubit at 0 and 2.

Returns

self

Return type

Pauli

Raises

QiskitError – provide both paulis and pauli_labels at the same time

kron

Pauli.kron(other)

Kronecker product of two paulis.

Order is $P_2 (other) otimes P_1 (self)$

Parameters

other (Pauli) – P2

Returns

self

Return type

Pauli

pauli_single

classmethod Pauli.pauli_single(num_qubits, index, pauli_label)

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

Parameters

  • num_qubits (int) – the length of pauli
  • index (int) – the qubit index to insert the single qubit
  • pauli_label (str) – pauli

Returns

single qubit pauli

Return type

Pauli

random

classmethod Pauli.random(num_qubits, seed=None)

Return a random Pauli on number of qubits.

Parameters

  • num_qubits (int) – the number of qubits
  • seed (int) – Optional. To set a random seed.

Returns

the random pauli

Return type

Pauli

sgn_prod

static Pauli.sgn_prod(p1, p2)

Multiply two Paulis and track the phase.

$P_3 = P_1 otimes P_2$: X*Y

Parameters

Returns

the multiplied pauli complex: the sign of the multiplication, 1, -1, 1j or -1j

Return type

Pauli

to_instruction

Pauli.to_instruction()

Convert to Pauli circuit instruction.

to_label

Pauli.to_label()

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

Order is $q_{n-1} …. q_0$

Returns

pauli label

Return type

str

to_matrix

Pauli.to_matrix()

Convert Pauli to a matrix representation.

Order is q_{n-1} …. q_0, i.e., $P_{n-1} otimes … P_0$

Returns

a matrix that represents the pauli.

Return type

numpy.array

to_operator

Pauli.to_operator()

Convert to Operator object.

to_spmatrix

Pauli.to_spmatrix()

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

Order is q_{n-1} …. q_0, i.e., $P_{n-1} otimes … P_0$

Returns

a sparse matrix with CSR format that represents the pauli.

Return type

scipy.sparse.csr_matrix

update_x

Pauli.update_x(x, indices=None)

Update partial or entire x.

Parameters

  • x (numpy.ndarray or list) – to-be-updated x
  • indices (numpy.ndarray or list or optional) – to-be-updated qubit indices

Returns

self

Return type

Pauli

Raises

QiskitError – when updating whole x, the number of qubits must be the same.

update_z

Pauli.update_z(z, indices=None)

Update partial or entire z.

Parameters

  • z (numpy.ndarray or list) – to-be-updated z
  • indices (numpy.ndarray or list or optional) – to-be-updated qubit indices

Returns

self

Return type

Pauli

Raises

QiskitError – when updating whole z, the number of qubits must be the same.

Was this page helpful?