in src/braket/default_simulator/observables.py [0:0]
def _compute_eigenvalues(factors: List[Observable], qubits: Tuple[int, ...]) -> np.ndarray:
# Check if there are any non-standard observables, namely Hermitian and Identity
if any({not observable.is_standard for observable in factors}):
# Tensor product of observables contains a mixture
# of standard and nonstandard observables
factors_sorted = sorted(factors, key=lambda x: x.measured_qubits)
eigenvalues = np.ones(1)
for is_standard, group in itertools.groupby(factors_sorted, lambda x: x.is_standard):
# Group observables by whether or not they are standard
group_eigenvalues = (
# `group` contains only standard observables, so eigenvalues
# are simply Pauli eigenvalues
pauli_eigenvalues(len(list(group)))
if is_standard
# `group` contains only nonstandard observables, so eigenvalues
# must be calculated
else functools.reduce(
np.kron, tuple(nonstandard.eigenvalues for nonstandard in group)
)
)
eigenvalues = np.kron(eigenvalues, group_eigenvalues)
else:
eigenvalues = pauli_eigenvalues(len(qubits))
return eigenvalues