-
Notifications
You must be signed in to change notification settings - Fork 603
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[BUG] imaginary part of expectation values of observables with complex coefficients is silently discarded #6076
Comments
While trying to debug the problem that made me notice the behavior above, I also noticed the following unexpected behavior: Some of the asserts in the following code do not work as I/one would expect:
|
The
As for the error from:
That does seem to indeed be a bug. Handling non-hermitian observables has been an ongoing debate. We used to raise a warning when constructing measurments from non-hermitian observables, but found that introduced a substantial performance penalty for a more obscure edge case. The challenge is finding a middle ground between returning always real results for hermitian observables, but also sometimes permitting non-hermitian obs. |
Thanks @cvjjm for reporting this. So far we've not focused too much on taking expectation values of non-Hermitian operators, so it doesn't surprise me too much that we are casting the result to a real value. However, it would be nice to have some limited support for non-Hermitian operators, or to at least not preclude it by casting to reals if otherwise the result would be correct. We can definitely look into this, how blocking is it for you? |
Not high priority. We can work around it. It was just unexpected behavior that cause a hard to debug problem and I though I could save other peoples time by reporting... |
Thanks for reporting this @cvjjm ! It can surely help others in the future. |
Expected behavior
The PL operator arithmetic allows for operators with imaginary/complex coefficients. If such expectation values of such operators are measured I expect to either get a imaginary/complex value (the real expectation value of the Hermitian operator times the complex coefficient) or an exception that only Hermitian observables can be measured.
Actual behavior
Instead PennyLane silently discards the imaginary part, as the attached example code shows.
Additional information
No response
Source code
Tracebacks
No response
System information
Name: PennyLane Version: 0.35.1 Summary: PennyLane is a cross-platform Python library for quantum computing, quantum machine learning, and quantum chemistry. Train a quantum computer the same way as a neural network. Home-page: https://github.com/PennyLaneAI/pennylane Author: Author-email: License: Apache License 2.0 Location: /home/cvjjm/miniforge3/envs/[...]/lib/python3.11/site-packages Requires: appdirs, autograd, autoray, cachetools, networkx, numpy, pennylane-lightning, requests, rustworkx, scipy, semantic-version, toml, typing-extensions Required-by: matchgate_shadows, PennyLane_Lightning Platform info: Linux-5.15.153.1-microsoft-standard-WSL2-x86_64-with-glibc2.31 Python version: 3.11.9 Numpy version: 1.23.5 Scipy version: 1.13.0 Installed devices: - lightning.qubit (PennyLane_Lightning-0.35.1) - default.clifford (PennyLane-0.35.1) - default.gaussian (PennyLane-0.35.1) - default.mixed (PennyLane-0.35.1) - default.qubit (PennyLane-0.35.1) - default.qubit.autograd (PennyLane-0.35.1) - default.qubit.jax (PennyLane-0.35.1) - default.qubit.legacy (PennyLane-0.35.1) - default.qubit.tf (PennyLane-0.35.1) - default.qubit.torch (PennyLane-0.35.1) - default.qutrit (PennyLane-0.35.1) - null.qubit (PennyLane-0.35.1)
Existing GitHub issues
The text was updated successfully, but these errors were encountered: