Pauli Operators¶
Represent and manipulate Pauli operators. Evaluate Pauli expectation values using ideal statevector simulation. Refer to these Jupyter Notebook tutorials on Forge:
GettingStarted/Examples/Circuits/quasar_derivatives.ipynbGettingStarted/Examples/Circuits/quasar_parameters.ipynbGettingStarted/Examples/Circuits/quasar_pauli.ipynb
Classes
Class Pauli¶
Math
Pauli Summary Attributes
Hilbert Space Representation
OrderedDict Methods
Pauli Starter Objects
Class PauliExpectation¶
Class PauliOperator¶
Class PauliString¶
-
class
quasar.pauli.Pauli(*args, **kwargs)¶ Class Pauli represents Pauli operators as an
OrderedDictofPauliString : float/complex``pairs. Use ``dictaccess methods to add Pauli strings and access/modify the coefficients of existing strings.-
static
IXYZ()¶ Returns four PauliStarter objects corresponding to the I, X, Y, and Z Pauli operators respectively.
When PauliStarter objects are indexed by the
[]operator, they generate a corresponding Pauli object on the given qubit index. For instance, after generating PauliStarter objects usingI, X, Y, Z = quasar.Pauli.IXYZ(),X[1]generates anXPauli operator object on qubit index 1. Since indices applied toIPauliStarter objects have no effect, it is convention to refer to theIoperator usingI[-`]. Use+,-,*, and/, as well as float and complex coefficients to build linear combinations of products of Pauli operators.- Returns
I, X, Y, Z PauliStarter objects, returned in that order
- Return type
PauliStarter
-
dot(other)¶ Calculate the dot product of coincident Pauli strings in
selfand another Pauli object.- Parameters
other (Pauli) – the other Pauli object in the dot product with
self.- Returns
the dot product of coincident Pauli strings in
selfand other.- Return type
float
-
static
from_matrix(matrix, qubit_indices=None, cutoff=1e-14)¶ Convert a computational-basis Hilbert space operator to an equivalent Pauli form.
- Parameters
param_matrix (
np.ndarray) – matrix representing a computational-basis Hilbert space operator.qubit_indices (list of ints) – qubit indices to be occupied by Pauli operators. If default value None, all qubit indices are included in qubit_indices.
cutoff (float) – remove a Pauli string from the Pauli form if the absolute value of its coefficient is less than cutoff (default - 1.0E-14).
- Returns
matrix expressed in an equivalent Pauli form.
- Return type
-
get(k[, d]) → D[k] if k in D, else d. d defaults to None.¶
-
matrix_vector_product(statevector, min_qubit=None, nqubit=None, dtype=<class 'numpy.complex128'>)¶ Evaluate how a Pauli object acts on a statevector in the computational-basis Hilbert space.
- Parameters
statevector (
np.ndarrayof shape 2**N) – the statevector on which to evaluate how self acts in the computational-basis Hilbert space.min_qubit (int) – the minimum occupied qubit index (default - None).
nqubit (int) – the total number of qubit indices in the circuit, including empty qubiit indices (default - None).
dtype (real or complex dtype) – the dtype to perform the computation at (default - None).
- Returns
the result of self acting on statevector in the computational-basis Hilbert space.
- Return type
np.ndarray, complex dtype
-
property
max_order¶ The maximum number of one-qubit Pauli operators in the Pauli object.
- Type
int
-
property
max_qubit¶ The maximum occupied qubit index (or -1 if no occupied qubits)
- Type
int
-
property
min_qubit¶ The minimum occupied qubit index (or 0 if no occupied qubits)
- Type
int
-
property
norm2¶ Return the square root of the dot product of
selfwithself.- Type
float
-
property
norminf¶ Return the magnitude of the largest coefficient of
self.- Type
float
-
property
nqubit¶ The total number of qubit indices in the circuit (including empty qubit indices).
- Type
int
-
property
nqubit_sparse¶ The total number of occupied qubit indices in the circuit (excluding empty qubit indices).
- Type
int
-
property
nterm¶ The number of Pauli strings in the Pauli object.
- Type
int
-
property
qubits¶ The unique occupied qubit indices over all strings in the Pauli object.
- Type
SortedSet
-
setdefault(key, default=None)¶ Return value for item identified by key in sorted dict.
If key is in the sorted dict then return its value. If key is not in the sorted dict then insert key with value default and return default.
Optional argument default defaults to none.
Runtime complexity: O(log(n)) – approximate.
>>> sd = SortedDict() >>> sd.setdefault('a', 1) 1 >>> sd.setdefault('a', 10) 1 >>> sd SortedDict({'a': 1})
- Parameters
key – key for item
default – value for item (default None)
- Returns
value for item identified by key
-
sieved(cutoff=1e-14)¶ Remove strings which have small or zero coefficients from the
self.
-
property
summary_str¶ A formatted summary string that displays the values of the nqubit, nterm, and max_order attributes of the Pauli object.
- Type
str
-
to_matrix(min_qubit=None, nqubit=None, dtype=<class 'numpy.complex128'>)¶ Convert a Pauli object to the computational-basis Hilbert space.
- Parameters
min_qubit (int) – the minimum occupied qubit index (default - None).
nqubit (int) – the total number of qubit indices in the circuit, including empty qubit indices (default - None).
dtype (complex dtype) – the dtype to perform the computation at (default - None).
- Returns
selfexpressed in the computational-basis Hilbert space.- Return type
np.ndarray, complex dtype
-
update(*args, **kwargs)¶ Update sorted dict with items from args and kwargs.
Overwrites existing items.
Optional arguments args and kwargs may be a mapping, an iterable of pairs or keyword arguments. See
SortedDict.__init__()for details.- Parameters
args – mapping or iterable of pairs
kwargs – keyword arguments mapping
-
static
zeros_like(x)¶ Returns a new Pauli object initialized with the strings of another Pauli object, but with coefficient values initialized to zero.
-
static
-
class
quasar.pauli.PauliExpectation(*args, **kwargs)¶ Class PauliExpectation represents the expectation value of a Pauli-sparse Hermitian operator.
-
static
zero()¶ Returns: Pauli: a new Pauli object initialized with no strings.
-
static
zeros_like(x)¶ Returns a new Pauli object initialized with the strings of another Pauli object, but with coefficient values initialized to zero.
-
static
-
class
quasar.pauli.PauliOperator¶ Class PauliOperator represents a one-qubit Pauli operator with a given character (‘X’, ‘Y’, or ‘Z’) and qubit index.
-
property
char¶ Return the character representing the type of Pauli operator (‘X’,’Y’, or ‘Z’).
- Type
str
-
static
from_string(string)¶ - Parameters
string (str) – string to convert into a PauliOperator object
- Returns
a PauliOperator object from a string composed of the character (‘X’,’Y’, or ‘Z’) representing the type of Pauli operator and the qubit index.
- Return type
-
property
qubit¶ Return qubit index.
- Type
int
-
property
-
class
quasar.pauli.PauliString¶ Class PauliString represents a string of one or more PauliOperator objects as a tuple of PauliOperator objects.
-
property
chars¶ The characters (‘X’, ‘Y’, or ‘Z’) corresponding to all of the PauliOperator objects in the PauliString.
-
static
from_string(string)¶ Return a PauliString object from a string expressing a linear combination of products of one or more PauliOperator objects.
- Parameters
string (str) – string to convert into a PauliOperator object
- Returns
a PauliString object from a string expressing a linear combination of products of one or more PauliOperator objects.
- Return type
-
property
order¶ The number of PauliOperator objects in the PauliString.
- Type
int
-
property
qubits¶ The qubit indices occupied by all of the PauliOperator objects in the PauliString.
- Type
tuple of ints
-
property