-
-
Notifications
You must be signed in to change notification settings - Fork 166
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
Address executor and observable incompatibility #2514
Conversation
I believe there are additional unit tests that need to be created to ensure that we cover as many scenarios as possible. This is especially true when we assume the user has defined a compatible executor when passing an observable. I plan to discuss this in more detail with @natestemen to ensure appropriate test coverage. |
Codecov ReportAll modified and coverable lines are covered by tests ✅
Additional details and impacted files@@ Coverage Diff @@
## main #2514 +/- ##
=======================================
Coverage 98.73% 98.73%
=======================================
Files 92 92
Lines 4174 4183 +9
=======================================
+ Hits 4121 4130 +9
Misses 53 53 ☔ View full report in Codecov by Sentry. |
@natestemen @cosenal I ran into a bit of an issue and I was curious how you think I should proceed. I added logic into the executor that will check the scenario where the executor does not have a return type specified and an observable is not passed. In this scenario we assume that the return type is float, therefore I am checking the circuits to make sure that there is a measurement included, if not I check if the return type was passed in (error messaging telling the user to include measurements in their circuit since they meant for it to return a float) or not (error message saying to use type hinting and if meant to return a float then add measurements.) I believe this is what we want, however I found that we have over 200 tests that fail when the code is implemented. The executors in the tests that fail do not use type hinting and also do not include measurement gates (since typically a simple float is return like the length of the circuit or a random number.) I can certainly go through and clean those up, however I am wondering if I should break that out to a new issue/PR because it is a bit involved. We could also let the error come from the backend, however those messages may vary. We also cannot mention using type hinting with this option. Examples of some error messages from cirq and qiskit: |
@natestemen @cosenal With this latest update, I am only checking now for obvious incompatibility. This means that if a user does use type hinting and does/does not include an observable it will throw errors if the following scenarios are not met:
When the return type is After calling I added tests that check the obviously bad scenarios when type hinting is used. Also, I compare the results of typed versus non-typed to make that if we assume the user does things correctly without type hinting that they get the correct answer. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for getting started with this Brian!
Apologies on the long delay for the review. In general since the Executor
is so core to a lot of things in Mitiq, I'm hesitant to make changes when we don't understand the side effects thoroughly. Hopefully we can mitigate some of those worries through good tests and some back and forth :)
Co-authored-by: nate stemen <[email protected]>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It looks good to me!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for the continued effort on this Brian! I know we all want to merge this, but as it stands there are a few blockers (like running more circuits and a user might have anticipated).
Independent of the specifics of this PR, your work has been incredibly valuable in helping me understand the difficulties surrounding the Executor
.
Co-authored-by: nate stemen <[email protected]>
…q_bg into 2449-REM-typehinting
At this point, this PR is checking for explicit incompatibility between the executors and observables. It provides clear error messages and includes additional unit tests. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Woohoo! LGTM!
I just made a few suggestions for the warnings that are raised (modulo formatting). Feel free to iterate on my suggestions if they need more tweaking, and then we can merge!
@natestemen I made the changes (with some formatting adjustments.) Go ahead and give it one more look and then merge. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thank you for all your hard work on this Brian! 🙏🏻 |
Description
Fixes #2449
This PR address code changes in the
Executor
andPauli
classes to account for when anObservable
is passed to an executor along with a circuit that already has a measurement on a qubit effected by theObservable
.Also, I removed a check in the
Executor
class, with the assumption the user is passing a validexecutor
if anobservable
is used.Furthermore, the docs for the
Executor
andObservable
have been updated with the annotation/typehinting requirement.Finally, additional unit testing has been added to ensure that incompatible
Executor
s andObservable
s are caught and an appropriate message is given to the user.License
Before opening the PR, please ensure you have completed the following where appropriate.