Skip to content

Conversation

@CalMacCQ
Copy link
Contributor

@CalMacCQ CalMacCQ commented Apr 8, 2025

Adding some gate definitions and doctests to the qsystem and quantum docs

added docstrings for everything along with matrix definitions of the gates (as in pytket OpType)

Theres quite a lot of freedom in convention for how we respresent this (captialisation etc). Would be interested in your thoughts.

Regarding functional gates I've just mentioned that they are the same as the std.quantum variants with different syntax. Would crosslink to the docs but would rather link to the offfical docs when they are public.

closes #857

@CalMacCQ CalMacCQ requested a review from a team as a code owner April 8, 2025 17:07
@CalMacCQ CalMacCQ requested a review from tatiana-s April 8, 2025 17:07
@CalMacCQ CalMacCQ marked this pull request as draft April 8, 2025 17:07
@codecov-commenter
Copy link

codecov-commenter commented Apr 8, 2025

Codecov Report

Attention: Patch coverage is 83.82353% with 11 lines in your changes missing coverage. Please review.

Project coverage is 92.29%. Comparing base (2217bbc) to head (1188e13).
Report is 27 commits behind head on main.

Files with missing lines Patch % Lines
guppylang/std/quantum/functional.py 18.18% 9 Missing ⚠️
guppylang/std/quantum/__init__.py 95.55% 2 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main     #912      +/-   ##
==========================================
+ Coverage   92.26%   92.29%   +0.03%     
==========================================
  Files         106      112       +6     
  Lines       10406    10909     +503     
==========================================
+ Hits         9601    10069     +468     
- Misses        805      840      +35     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@ss2165
Copy link
Member

ss2165 commented Apr 17, 2025

  1. Increasingly it looks like it would be handy to have a utility that defines and compiles a single function. To be used in exmamples, doc tests, prototyping, etc. @mark-koch are you opposed to adding a dedicated decorator for this? (prompted by having to call compile() at the end of the doctest)
  2. Don't duplicate docs, cross-link to the non-functional one in each case. e.g. "Functional variant of zz_phase, see guppylang.std.qsystem.zz_phase"

@mark-koch
Copy link
Collaborator

are you opposed to adding a dedicated decorator for this?

If we use this in all examples then that's what people will copy and use themselves. So I think we have to be careful that this doesn't become an anti-pattern. In particular, it would be bad if people slapped that decorator on every function.

Also, where would you get the compiled Hugr from? Returning it from the decorator would make it hard to use those functions for comptime

@ss2165
Copy link
Member

ss2165 commented Apr 17, 2025

we have to be careful that this doesn't become an anti-pattern

yes good point, what about a kwarg to @guppy that makes it clear that this is a thing you shouldn't do normally? Or a check kwarg that only does the checking stage and not compilation to hugr?

@CalMacCQ CalMacCQ removed the request for review from tatiana-s July 2, 2025 14:15
@CalMacCQ CalMacCQ marked this pull request as ready for review July 2, 2025 14:15
@CalMacCQ CalMacCQ requested review from cqc-alec and ss2165 July 2, 2025 14:15
@CalMacCQ CalMacCQ changed the title docs: add qsystem gate definitions docs: add quantum and qsystem gate definitions Jul 2, 2025
"""Guppy standard module for functional qsystem native operations. For the mathematical
definitions of these gates, see the guppylang.std.qsystem documentation.
These gates are the same as those in the std.qsystem but use functional syntax.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
These gates are the same as those in the std.qsystem but use functional syntax.
These gates are the same as those in std.qsystem but use functional syntax.

Copy link
Contributor

@cqc-alec cqc-alec left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I started going through the changes but found that my comments had been marked as resolved but not addressed. Is this due to git issues?

@CalMacCQ
Copy link
Contributor Author

I started going through the changes but found that my comments had been marked as resolved but not addressed. Is this due to git issues?

Hmm strange. I don't know why the changes were not applied. Will fix, sorry.

@CalMacCQ CalMacCQ requested a review from cqc-alec July 17, 2025 11:14
Copy link
Contributor

@cqc-alec cqc-alec left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Still some not-addressed things.

@CalMacCQ CalMacCQ requested a review from cqc-alec July 17, 2025 13:12
Copy link
Contributor

@cqc-alec cqc-alec left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just one correction missed I think.

@CalMacCQ CalMacCQ enabled auto-merge July 17, 2025 13:26
@CalMacCQ CalMacCQ disabled auto-merge July 17, 2025 14:12
@CalMacCQ CalMacCQ enabled auto-merge July 17, 2025 14:35
@CalMacCQ CalMacCQ added this pull request to the merge queue Jul 17, 2025
Merged via the queue into main with commit 32a4bbc Jul 17, 2025
5 checks passed
@CalMacCQ CalMacCQ deleted the cm/qsystem_gates branch July 17, 2025 17:26
github-merge-queue bot pushed a commit that referenced this pull request Aug 4, 2025
🤖 I have created a release *beep* *boop*
---


##
[0.21.0](guppylang-v0.20.0...guppylang-v0.21.0)
(2025-08-04)


### ⚠ BREAKING CHANGES

* All compiler-internal and non-userfacing functionality is moved into a
new `guppylang_internals` package
* `guppy.compile(foo)` and `guppy.check(foo)` replaced with
`foo.check()` and `foo.compile()`
* default HUGR output uses compressed binary encoding.
* `guppylang.tracing.object.GuppyDefinition` moved to
`guppylang.defs.GuppyDefinition`
`guppylang.tracing.object.TypeVarGuppyDefinition` moved and renamed to
`guppylang.defs.GuppyTypeVarDefinition`
* All `to_hugr` methods on types, arguments, and parameters now require
a `ToHugrContext` `CompileableDef.compile_outer` now requires a
`ToHugrContext` `guppy.hugr_op` now passes the compiler context to the
function generating the op `CheckedFunctionDef` now implements
`MonomorphizableDef` instead of `CompileableDef`
`CompilerContext.build_compiled_def` now requires an instantiation for
the definition's type parameters The `ToHugrContext` protocol now
requires two additional methods: `type_var_to_hugr` and
`const_var_to_hugr` `CompilerContext.{compiled, worklist}` and
`CompilationEngine.compiled` are now indexed by a tuple of `DefId` and
optional `PartiallyMonomorphizedArgs`
* comptime code that previously used constant integers outside i64 will
now fail to compile.
* Capturing closures are now disabled by default. Enabling them requires
calling `guppylang.enable_experimental_features()`, however note that
they are not supported throughout the stack.

### Features

* Add `Future` type
([#1075](#1075))
([5ad7673](5ad7673))
* add error when constant integer out of bounds
([#1084](#1084))
([eee77ae](eee77ae))
* Add guppy version metadata to hugr entrypoint
([#1039](#1039))
([0eafbd9](0eafbd9)),
closes [#1037](#1037)
* Add manual registration of extensions
([#1045](#1045))
([4b42936](4b42936))
* add qsystem op for measure leaked
([#1057](#1057))
([c555727](c555727))
* add selene via optional feature and use for testing
([#1081](#1081))
([cefc70e](cefc70e))
* Add support for V and Vdg.
([#1094](#1094))
([6b0d44a](6b0d44a))
* Allow indexing on tuples
([#1038](#1038))
([0e9097e](0e9097e)),
closes [#711](#711)
* Declare WASM modules in guppy
([#942](#942))
([e1240fb](e1240fb))
* Extend comptime arguments to arbitrary non-linear types
([#1110](#1110))
([384dd8c](384dd8c))
* Make decorator return types more precise
([#1115](#1115))
([c84e8b1](c84e8b1))
* set hugr entrypoint to compiled function
([#1063](#1063))
([16bd267](16bd267))
* store used extensions and versions in HUGR metadata
([#1049](#1049))
([a9a300c](a9a300c)),
closes [#1048](#1048)
* Support arbitrary const generics via monomorphisation
([#1033](#1033))
([bcf9865](bcf9865))
* Support Python 3.12 generic syntax
([#1051](#1051))
([ab2e118](ab2e118)),
closes [#823](#823)
* Top level compile + emulate Interface
([#1127](#1127))
([5e2f595](5e2f595))
* update to hugr-py v0.13
([#1083](#1083))
([8f071c8](8f071c8))
* use `core.` prefix for metadata keys
([#1055](#1055))
([2bf0d68](2bf0d68))


### Bug Fixes

* Allow array comprehension syntax in comptime functions
([#1068](#1068))
([da8f04a](da8f04a)),
closes [#1067](#1067)
* Allow struct redefinitions for Python < 3.13
([#1108](#1108))
([959a4e4](959a4e4)),
closes [#1107](#1107)
* Correctly detect
`[@Custom](https://github.com/custom)_guppy_decorator` in nested scopes
([#1086](#1086))
([678583c](678583c))
* Fix diagnostics rendering for comptime entrypoints
([#1099](#1099))
([fdd2676](fdd2676)),
closes [#1097](#1097)
* Fix frame lookup for Python 3.12 annotation scopes
([#1120](#1120))
([a69e489](a69e489)),
closes [#1116](#1116)
* Fix hugr conversion and bounds checks on numeric literals
([#1100](#1100))
([73d5e92](73d5e92))
* Fix Jupyter notebook diagnostic rendering
([#1109](#1109))
([6002474](6002474))
* Fix nested function definitions in Python 3.12
([#1064](#1064))
([090f920](090f920))
* Stop showing temporary variables in comptime diagnostics
([#1112](#1112))
([63854c5](63854c5)),
closes [#1111](#1111)
* support comptime entrypoint
([#1079](#1079))
([721e3dd](721e3dd))
* Turn capturing closures into experimental feature
([#1065](#1065))
([a959b18](a959b18))


### Documentation

* add docstrings for emulator module
([#1131](#1131))
([b33e065](b33e065))
* add quantum and qsystem gate definitions
([#912](#912))
([32a4bbc](32a4bbc))
* Fix docstrings
([#1128](#1128))
([0aded85](0aded85))
* Improve RNG docs
([#1043](#1043))
([8640f06](8640f06))
* replace `compile_module` usage in README
([#1041](#1041))
([03ccf3a](03ccf3a))
* Update guppy examples
([#1121](#1121))
([b994655](b994655))


### Code Refactoring

* Split up into `guppylang_internals` package
([#1126](#1126))
([81d50c0](81d50c0))

---
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: Seyon Sivarajah <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add matrix definitions to guppy.std.quantum and guppy.std.qsystem docstrings

7 participants