Skip to content

Conversation

@croyzor
Copy link
Collaborator

@croyzor croyzor commented Jun 17, 2025

Resolves #1037

@croyzor croyzor requested a review from a team as a code owner June 17, 2025 16:43
@croyzor croyzor requested a review from doug-q June 17, 2025 16:43
@codecov-commenter
Copy link

codecov-commenter commented Jun 17, 2025

Codecov Report

All modified and coverable lines are covered by tests ✅

Project coverage is 92.12%. Comparing base (a9a300c) to head (5198302).

Additional details and impacted files
@@           Coverage Diff           @@
##             main    #1039   +/-   ##
=======================================
  Coverage   92.12%   92.12%           
=======================================
  Files         106      106           
  Lines       10417    10418    +1     
=======================================
+ Hits         9597     9598    +1     
  Misses        820      820           

☔ 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.

@aborgna-q
Copy link
Collaborator

Why at the entrypoint rather than the module_root? This should be common to the full hugr

@croyzor
Copy link
Collaborator Author

croyzor commented Jun 18, 2025

Why at the entrypoint rather than the module_root? This should be common to the full hugr

I thought it was the same thing 😅 I'll update it

@croyzor
Copy link
Collaborator Author

croyzor commented Jun 18, 2025

Why at the entrypoint rather than the module_root? This should be common to the full hugr

This is where metadata gets written to by default in the hugr-py api

# Prepare Hugr for this module
graph = hf.Module()
graph.metadata["name"] = "__main__"
graph.metadata["guppy_version"] = guppylang.__version__
Copy link
Member

Choose a reason for hiding this comment

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

We should use a generic field like

Suggested change
graph.metadata["guppy_version"] = guppylang.__version__
graph.metadata["generator"] = f"guppylang@{guppylang.__version__}"

so the hugr tooling can report it with error messages etc.

Copy link
Member

Choose a reason for hiding this comment

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

might be using some indication that this is a reserved metadata keyword with "__generator" or the like

@croyzor croyzor force-pushed the cr/version_metadata branch from 202b65f to 594cd40 Compare June 23, 2025 16:12
@croyzor croyzor requested a review from ss2165 June 23, 2025 16:13
@croyzor croyzor removed the request for review from doug-q June 23, 2025 16:25
@croyzor croyzor enabled auto-merge June 23, 2025 16:32
Copy link
Member

@ss2165 ss2165 left a comment

Choose a reason for hiding this comment

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

I prefer the single string "guppylang@version" (guppylang so we are clear about the compiler rather than the language, and single string so arbitrary extra information can be encoded by different kinds of generators, e.g. hugr-py version, pytket version if loading circuits, etc.)

@croyzor
Copy link
Collaborator Author

croyzor commented Jun 24, 2025

guppylang so we are clear about the compiler rather than the language

👍

and single string so arbitrary extra information can be encoded by different kinds of generators, e.g. hugr-py version, pytket version if loading circuits, etc.)

this seems like an argument in favour of having the schema be "name + version"? The way I see it we're collapsing the structure of the data such that some parties down the line will have to split on "@" to get the information that's relevant to them.

Another advantage of having the "__generator" metadata be a dictionary is that that we can specify some required fields (e.g. "name", "version") and accept whatever others the generator deems relevant - i.e. guppy could encode the hugr-py and pytket versions it used.

Copy link
Member

@ss2165 ss2165 left a comment

Choose a reason for hiding this comment

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

unspecified keys in generator dict for extra info sounds good to me 👍

@croyzor croyzor added this pull request to the merge queue Jun 24, 2025
Merged via the queue into main with commit 0eafbd9 Jun 24, 2025
3 checks passed
@croyzor croyzor deleted the cr/version_metadata branch June 24, 2025 09:23
github-merge-queue bot pushed a commit to CQCL/hugr that referenced this pull request Jun 25, 2025
Introduces two new metadata keys: 
`__generator`: encode the tooling that generated the HUGR. Used in some
decoding errors to provide context if available. Currently only used for
JSON loading, should be extended to model. See also
CQCL/guppylang#1039
`__used_extensions`: encode names and versions of extensions used in the
HUGR, used to detect breaking version mismatch with loaded extensions.
See also CQCL/guppylang#1049

Closes #2351

Recommend reviewing individual commits.
ss2165 added a commit to CQCL/hugr that referenced this pull request Jun 25, 2025
Introduces two new metadata keys: 
`__generator`: encode the tooling that generated the HUGR. Used in some
decoding errors to provide context if available. Currently only used for
JSON loading, should be extended to model. See also
CQCL/guppylang#1039
`__used_extensions`: encode names and versions of extensions used in the
HUGR, used to detect breaking version mismatch with loaded extensions.
See also CQCL/guppylang#1049

Closes #2351

Recommend reviewing individual commits.
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.

Put guppy version in the metadata of the generated hugr

5 participants