Skip to content

Commit 0b7ebd3

Browse files
doc: adding examples for is_diagonal
1 parent f549099 commit 0b7ebd3

File tree

1 file changed

+23
-3
lines changed

1 file changed

+23
-3
lines changed

mpqp/core/instruction/measurement/expectation_value.py

+23-3
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,8 @@ class Observable:
4646
4747
Args:
4848
observable : can be either a Hermitian matrix representing the
49-
observable or PauliString representing the observable.
49+
observable, or PauliString representing the observable, or a list
50+
of diagonal elements of the matrix when the observable is diagonal.
5051
5152
Raises:
5253
ValueError: If the input matrix is not Hermitian or does not have a
@@ -70,14 +71,13 @@ class Observable:
7071
7172
"""
7273

73-
def __init__(self, observable: Matrix | list[Real] | PauliString):
74+
def __init__(self, observable: Matrix | PauliString | list[Real]):
7475
self._matrix = None
7576
self._pauli_string = None
7677
self._is_diagonal = None
7778
self._diag_elements = None
7879

7980
if isinstance(observable, PauliString):
80-
# TODO: add some checks, if all the coefficients of the pauli string are real ? (or obviously not necessary?)
8181
self.nb_qubits = observable.nb_qubits
8282
self._pauli_string = observable.simplify()
8383
else:
@@ -179,6 +179,26 @@ def diagonal_elements(self, diag_elements: list[Real] | npt.NDArray[np.float64])
179179

180180
@property
181181
def is_diagonal(self) -> bool:
182+
"""Returns True if this observable is diagonal.
183+
184+
Examples:
185+
>>> Observable(np.array([[3, 0], [0, 8]])).is_diagonal
186+
True
187+
>>> Observable(np.array([[3, -1], [-1, 8]])).is_diagonal
188+
False
189+
>>> Observable(np.diag([-1,8,4,5])).is_diagonal
190+
True
191+
>>> Observable([0, 5, 6, 9, 7, 4, 3, 6]).is_diagonal
192+
True
193+
>>> Observable(np.array([7, 4, 3, 6])).is_diagonal
194+
True
195+
>>> from mpqp.measures import I, X, Y, Z
196+
>>> Observable(I @ Z - 3 * Z @ Z + 2* Z @ I).is_diagonal
197+
True
198+
>>> Observable(I @ X - 3* Z @ Z + 2 * Y @ I).is_diagonal
199+
False
200+
201+
"""
182202
if self._is_diagonal is None:
183203
# We first check if the pauli string is already known, we use it for efficiency
184204
if self._pauli_string is not None:

0 commit comments

Comments
 (0)