-
Notifications
You must be signed in to change notification settings - Fork 3
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
feat: add qubit
discard/measure methods
#580
Conversation
I think this could be nicer to use in examples than the current inout usage. benefits: - importing qubits gets you all the methods - with an LSP you get auto complete on `qubit.` - Extends nicely to other qubit types that might have different interfaces
Codecov ReportAttention: Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## main #580 +/- ##
==========================================
- Coverage 91.64% 91.58% -0.06%
==========================================
Files 59 59
Lines 6269 6311 +42
==========================================
+ Hits 5745 5780 +35
- Misses 524 531 +7 ☔ View full report in Codecov by Sentry. |
@@ -17,7 +17,7 @@ def test_basic(validate): | |||
def foo(q: qubit) -> None: ... | |||
|
|||
@guppy(module) | |||
def test(q: qubit @owned) -> qubit: | |||
def test(q: qubit @ owned) -> qubit: |
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 appears my formatter has been at all the decorators. I can undo this if necessary
guppylang/prelude/quantum.py
Outdated
|
||
@guppy | ||
@no_type_check | ||
def cx(self: "qubit", target: "qubit") -> None: |
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.
I would suggesttarget.cx(control)
instead,
so the n-controlled cases keep the same structure.
target.toffoli(control0, control1)
target.ncx(*controls)
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.
Whichever way round it is, I see a lot of potential for bugs caused by people getting it the wrong way round.
In general I'm not so keen on forcing multi-qubit operations to have a "distinguished" qubit in this way: in general there's no natural way to select which qubit it should be.
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.
I think that's very valid. How about we restrict it a specific set of special single qubit operations: alloc (already the case), discard, measure (non destructive), reset, and any variants of those above (e.g. measure_reset, destructive measure). These special set can be implemented in terms of the existing inout functions as in this PR currently.
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.
Happy with that.
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.
Done
qubit
discard/measure methods
🤖 I have created a release *beep* *boop* --- ## [0.13.0](v0.12.2...v0.13.0) (2024-11-12) ### ⚠ BREAKING CHANGES * `prelude` module renamed to `std` ### Features * add `qubit` discard/measure methods ([#580](#580)) ([242fa44](242fa44)) * Add `SizedIter` wrapper type ([#611](#611)) ([2e9da6b](2e9da6b)) * conventional results post processing ([#593](#593)) ([db96224](db96224)) * Improve compiler diagnostics ([#547](#547)) ([90d465d](90d465d)), closes [#551](#551) [#553](#553) [#586](#586) [#588](#588) [#587](#587) [#590](#590) [#600](#600) [#601](#601) [#606](#606) * restrict result tag sizes to 256 bytes ([#596](#596)) ([4e8e00f](4e8e00f)), closes [#595](#595) ### Bug Fixes * Mock guppy decorator during sphinx builds ([#622](#622)) ([1cccc04](1cccc04)) ### Documentation * Add DEVELOPMENT.md ([#584](#584)) ([1d29d39](1d29d39)) * Fix docs build ([#639](#639)) ([bd6011c](bd6011c)) ### Miscellaneous Chores * Manually set last release commit ([#643](#643)) ([b2d569b](b2d569b)) ### Code Refactoring * rename prelude to std ([#642](#642)) ([1a68e8e](1a68e8e)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). --------- Co-authored-by: Agustín Borgna <agustin.borgna@quantinuum.com>
Extends the fact that allocation is tied to the
qubit
type by implementing measure/discard methods.Note this includes a drive-by
measure_reset
operation which avoids resetting the qubit and just flip, might not be something to add in this PR.