qml.operation.Observable

class Observable(*params, wires=None, do_queue=True)[source]

Bases: pennylane.operation.Operator

Base class for observables supported by a device.

Observable is used to describe Hermitian quantum observables.

As with Operator, the following class attributes must be defined for all observables:

Parameters

params (tuple[float, int, array, Variable]) – observable parameters

Keyword Arguments
  • wires (Sequence[int]) – subsystems it acts on. Currently, only one subsystem is supported.

  • do_queue (bool) – Indicates whether the operation should be immediately pushed into the Operator queue.

do_check_domain

eigvals

Eigenvalues of an instantiated observable.

matrix

Matrix representation of an instantiated operator in the computational basis.

name

String for the name of the operator.

num_params

Number of parameters the operator takes.

num_wires

Number of wires the operator acts on.

par_domain

Domain of the gate parameters.

parameters

Current parameter values.

return_type

wires

Wires of this operator.

do_check_domain = True
eigvals

Eigenvalues of an instantiated observable.

The order of the eigenvalues needs to match the order of the computational basis vectors when the observable is diagonalized using diagonalizing_gates. This is a requirement for using qubit observables in quantum functions.

Example:

>>> U = qml.PauliZ(wires=1)
>>> U.eigvals
>>> array([1, -1])
Returns

eigvals representation

Return type

array

matrix

Matrix representation of an instantiated operator in the computational basis.

Example:

>>> U = qml.RY(0.5, wires=1)
>>> U.matrix
>>> array([[ 0.96891242+0.j, -0.24740396+0.j],
           [ 0.24740396+0.j,  0.96891242+0.j]])
Returns

matrix representation

Return type

array

name

String for the name of the operator.

num_params

Number of parameters the operator takes.

num_wires

Number of wires the operator acts on.

par_domain

Domain of the gate parameters.

  • 'N': natural numbers (including zero).

  • 'R': floats.

  • 'A': arrays of real or complex values.

  • 'L': list of arrays of real or complex values.

  • None: if there are no parameters.

parameters

Current parameter values.

Fixed parameters are returned as is, free parameters represented by Variable instances are replaced by their current numerical value.

Returns

parameter values

Return type

list[Any]

return_type = None
wires

Wires of this operator.

Returns

wires

Return type

Wires

check_domain(p[, flattened])

Check the validity of a parameter.

compare(other)

Compares with another Hamiltonian, Tensor, or Observable, to determine if they are equivalent.

diagonalizing_gates()

Returns the list of operations such that they diagonalize the observable in the computational basis.

queue()

Append the operator to the Operator queue.

check_domain(p, flattened=False)

Check the validity of a parameter.

Variable instances can represent any real scalars (but not arrays).

Parameters
  • p (Number, array, Variable) – parameter to check

  • flattened (bool) – True means p is an element of a flattened parameter sequence (affects the handling of ‘A’ parameters)

Raises
  • TypeError – parameter is not an element of the expected domain

  • ValueError – parameter is an element of an unknown domain

Returns

p

Return type

Number, array, Variable

compare(other)[source]

Compares with another Hamiltonian, Tensor, or Observable, to determine if they are equivalent.

Observables/Hamiltonians are equivalent if they represent the same operator (their matrix representations are equal), and they are defined on the same wires.

Warning

The compare method does not check if the matrix representation of a Hermitian observable is equal to an equivalent observable expressed in terms of Pauli matrices. To do so would require the matrix form of Hamiltonians and Tensors be calculated, which would drastically increase runtime.

Returns

True if equivalent.

Return type

(bool)

Examples

>>> ob1 = qml.PauliX(0) @ qml.Identity(1)
>>> ob2 = qml.Hamiltonian([1], [qml.PauliX(0)])
>>> ob1.compare(ob2)
True
>>> ob1 = qml.PauliX(0)
>>> ob2 = qml.Hermitian(np.array([[0, 1], [1, 0]]), 0)
>>> ob1.compare(ob2)
False
diagonalizing_gates()[source]

Returns the list of operations such that they diagonalize the observable in the computational basis.

Returns

A list of gates that diagonalize the observable in the computational basis.

Return type

list(qml.Operation)

queue()

Append the operator to the Operator queue.