-
Notifications
You must be signed in to change notification settings - Fork 14
feat: Represent order edges in hugr-model
as metadata.
#2027
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
Conversation
Codecov ReportAttention: Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## main #2027 +/- ##
==========================================
- Coverage 83.17% 83.14% -0.04%
==========================================
Files 217 217
Lines 42034 42130 +96
Branches 38232 38308 +76
==========================================
+ Hits 34962 35027 +65
- Misses 5113 5135 +22
- Partials 1959 1968 +9
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
CodSpeed Performance ReportMerging #2027 will not alter performanceComparing Summary
|
bca1673
to
e4363b6
Compare
This PR contains breaking changes to the public Rust API. cargo-semver-checks summary
|
cd1fef9
to
b20c170
Compare
9cc1bfe
to
9ea72ac
Compare
e13e8d5
to
ff30662
Compare
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.
LGTM 👍
It may be interesting to add order edges to the capnp roundtrip benchmark.
Apparently a big chunk of the export rn is taken by string formatting in make_qualified_name
🫠
hugr-core/src/export.rs
Outdated
.map(|(successor, _)| successor) | ||
.filter(|successor| !self.hugr.get_optype(*successor).is_output()); |
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.
Since order edges are always local, you should be able to cache the output node and avoid fetching the successor's optype here.
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.
(meta (core.order_hint.order 1 2)) | ||
(meta (core.order_hint.order 1 0)) | ||
(meta (core.order_hint.order 2 3)) | ||
(meta (core.order_hint.order 0 3)) |
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.
Mix in some unrelated metadata to test that everything gets preserved.
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 won't since hugr-core
doesn't have the concept of regions, and so only metadata on nodes is preserved so far.
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.
Isn't this part decoding json metadata?
https://github.com/CQCL/hugr/pull/2027/files#diff-0c40879905f98b88123ea815ed5511675c496a53c78b20bf72013447d1185188R217-R238
8d68b5d
to
b034d92
Compare
## 🤖 New release * `hugr-model`: 0.18.1 -> 0.19.0 (⚠ API breaking changes) * `hugr-core`: 0.15.2 -> 0.15.3 ~(⚠ API breaking changes)~ * `hugr-llvm`: 0.15.2 -> 0.15.3 (✓ API compatible changes) * `hugr-passes`: 0.15.2 -> 0.15.3 (✓ API compatible changes) * `hugr`: 0.15.2 -> 0.15.3 (✓ API compatible changes) * `hugr-cli`: 0.15.2 -> 0.15.3 (✓ API compatible changes) ### ⚠ `hugr-model` breaking changes ```text --- failure enum_missing: pub enum removed or renamed --- Description: A publicly-visible enum cannot be imported by its prior path. A `pub use` may have been removed, or the enum itself may have been renamed or removed entirely. ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.40.0/src/lints/enum_missing.ron Failed in: enum hugr_model::v0::table::ExtSetPart, previously in file /tmp/.tmpDqJ3X7/hugr-model/src/v0/table/mod.rs:352 --- failure enum_variant_added: enum variant added on exhaustive enum --- Description: A publicly-visible enum without #[non_exhaustive] has a new variant. ref: https://doc.rust-lang.org/cargo/reference/semver.html#enum-variant-new impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.40.0/src/lints/enum_variant_added.ron Failed in: variant Term:Func in /tmp/.tmpIpZPlW/hugr/hugr-model/src/v0/table/mod.rs:341 --- failure enum_variant_missing: pub enum variant removed or renamed --- Description: A publicly-visible enum has at least one variant that is no longer available under its prior name. It may have been renamed or removed entirely. ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.40.0/src/lints/enum_variant_missing.ron Failed in: variant Term::ExtSet, previously in file /tmp/.tmpDqJ3X7/hugr-model/src/v0/table/mod.rs:316 variant Term::ConstFunc, previously in file /tmp/.tmpDqJ3X7/hugr-model/src/v0/table/mod.rs:321 variant Term::ExtSet, previously in file /tmp/.tmpDqJ3X7/hugr-model/src/v0/ast/mod.rs:237 --- failure pub_module_level_const_missing: pub module-level const is missing --- Description: A public const is missing or renamed ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.40.0/src/lints/pub_module_level_const_missing.ron Failed in: CORE_EXT_SET in file /tmp/.tmpDqJ3X7/hugr-model/src/v0/mod.rs:177 ``` ### ⚠ `hugr-core` breaking changes (⚠️ ignored⚠️ ) ```text --- failure enum_variant_added: enum variant added on exhaustive enum --- Description: A publicly-visible enum without #[non_exhaustive] has a new variant. ref: https://doc.rust-lang.org/cargo/reference/semver.html#enum-variant-new impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.40.0/src/lints/enum_variant_added.ron Failed in: variant ImportError:OrderHint in /tmp/.tmpIpZPlW/hugr/hugr-core/src/import.rs:73 ``` <details><summary><i><b>Changelog</b></i></summary><p> ## `hugr-model` <blockquote> ## [0.19.0](hugr-model-v0.18.1...hugr-model-v0.19.0) - 2025-04-02 ### New Features - Python bindings for `hugr-model`. ([#1959](#1959)) - Remove extension sets from `hugr-model`. ([#2031](#2031)) - Packages in `hugr-model` and envelope support. ([#2026](#2026)) - Represent order edges in `hugr-model` as metadata. ([#2027](#2027)) </blockquote> ## `hugr-core` <blockquote> ## [0.16.0](hugr-core-v0.15.2...hugr-core-v0.16.0) - 2025-04-02 ### Documentation - Provide docs for array ops, fix bad doc for HugrView::poly_func_type ([#2021](#2021)) ### New Features - Expand SimpleReplacement API ([#1920](#1920)) - Python bindings for `hugr-model`. ([#1959](#1959)) - ReplaceTypes pass allows replacing extension types and ops ([#1989](#1989)) - Remove extension sets from `hugr-model`. ([#2031](#2031)) - Packages in `hugr-model` and envelope support. ([#2026](#2026)) - Represent order edges in `hugr-model` as metadata. ([#2027](#2027)) - add `build_expect_sum` to allow specific error messages ([#2032](#2032)) </blockquote> ## `hugr-llvm` <blockquote> ## [0.16.0](hugr-llvm-v0.15.2...hugr-llvm-v0.16.0) - 2025-04-02 ### New Features - *(hugr-llvm)* Add llvm codegen for `arithmetic.float.fpow` ([#2042](#2042)) - *(hugr-llvm)* Emit divmod and mod operations ([#2025](#2025)) </blockquote> ## `hugr-passes` <blockquote> ## [0.16.0](hugr-passes-v0.15.2...hugr-passes-v0.16.0) - 2025-04-02 ### New Features - ReplaceTypes pass allows replacing extension types and ops ([#1989](#1989)) - MakeTuple->UnpackTuple elision pass ([#2012](#2012)) - [**breaking**] Extend LowerTypes pass to linearize by inserting copy/discard ([#2018](#2018)) </blockquote> ## `hugr` <blockquote> ## [0.16.0](hugr-v0.15.2...hugr-v0.16.0) - 2025-04-02 ### Documentation - Provide docs for array ops, fix bad doc for HugrView::poly_func_type ([#2021](#2021)) ### New Features - MakeTuple->UnpackTuple elision pass ([#2012](#2012)) - [**breaking**] Extend LowerTypes pass to linearize by inserting copy/discard ([#2018](#2018)) - Expand SimpleReplacement API ([#1920](#1920)) - Python bindings for `hugr-model`. ([#1959](#1959)) - ReplaceTypes pass allows replacing extension types and ops ([#1989](#1989)) - Remove extension sets from `hugr-model`. ([#2031](#2031)) - Represent order edges in `hugr-model` as metadata. ([#2027](#2027)) - add `build_expect_sum` to allow specific error messages ([#2032](#2032)) - Packages in `hugr-model` and envelope support. ([#2026](#2026)) </blockquote> ## `hugr-cli` <blockquote> ## [0.16.0](hugr-cli-v0.15.2...hugr-cli-v0.16.0) - 2025-04-02 ### Documentation - Add usage info to hugr-cli's rustdocs ([#2044](#2044)) </blockquote> </p></details> --- This PR was generated with [release-plz](https://github.com/release-plz/release-plz/). --------- Co-authored-by: Agustín Borgna <[email protected]>
#2027 ended up being breaking due to adding a new variant to an error enum missing the `non_exhaustive` marker. This (breaking) PR makes sure all error enums have the flag. BREAKING CHANGE: Marked all Error enums as `non_exhaustive`
🤖 I have created a release *beep* *boop* --- ## [0.11.5](hugr-py-v0.11.4...hugr-py-v0.11.5) (2025-04-16) ### Features * **hugr-py:** move in result classes from guppylang ([#2084](#2084)) ([b6efb03](b6efb03)) * Packages in `hugr-model` and envelope support. ([#2026](#2026)) ([a16389f](a16389f)) * Represent order edges in `hugr-model` as metadata. ([#2027](#2027)) ([09de9e3](09de9e3)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please).
## 🤖 New release * `hugr-model`: 0.19.0 -> 0.19.1 (✓ API compatible changes) * `hugr-core`: 0.15.3 -> 0.15.4 (✓ API compatible changes) * `hugr-llvm`: 0.15.3 -> 0.15.4 (~⚠ API breaking changes~ overwriten) * `hugr-passes`: 0.15.3 -> 0.15.4 (✓ API compatible changes) * `hugr`: 0.15.3 -> 0.15.4 (✓ API compatible changes) * `hugr-cli`: 0.15.3 -> 0.15.4 (✓ API compatible changes) ### ⚠ `hugr-llvm` breaking changes ```text --- failure trait_missing: pub trait removed or renamed --- Description: A publicly-visible trait cannot be imported by its prior path. A `pub use` may have been removed, or the trait itself may have been renamed or removed entirely. ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.40.0/src/lints/trait_missing.ron Failed in: trait hugr_llvm::utils::array_op_builder::ArrayOpBuilder, previously in file /tmp/.tmpyTFqSG/hugr-llvm/src/utils/array_op_builder.rs:10 trait hugr_llvm::utils::ArrayOpBuilder, previously in file /tmp/.tmpyTFqSG/hugr-llvm/src/utils/array_op_builder.rs:10 ``` <details><summary><i><b>Changelog</b></i></summary><p> ## `hugr-model` <blockquote> ## [0.19.0](hugr-model-v0.18.1...hugr-model-v0.19.0) - 2025-04-02 ### New Features - Python bindings for `hugr-model`. ([#1959](#1959)) - Remove extension sets from `hugr-model`. ([#2031](#2031)) - Packages in `hugr-model` and envelope support. ([#2026](#2026)) - Represent order edges in `hugr-model` as metadata. ([#2027](#2027)) </blockquote> ## `hugr-core` <blockquote> ## [0.16.0](hugr-core-v0.15.3...hugr-core-v0.16.0) - 2025-04-30 ### New Features - Export the portgraph hierarchy in HugrInternals ([#2057](#2057)) - Implement Debug for generic Wire<N>s ([#2068](#2068)) - Add ExtensionOp helpers ([#2072](#2072)) - ReplaceTypes: handlers for array constants + linearization ([#2023](#2023)) - move `ArrayOpBuilder` to hugr-core ([#2115](#2115)) ### Testing - Disable IO-dependent tests when running miri ([#2123](#2123)) </blockquote> ## `hugr-llvm` <blockquote> ## [0.16.0](hugr-llvm-v0.15.3...hugr-llvm-v0.16.0) - 2025-04-30 ### New Features - move `ArrayOpBuilder` to hugr-core ([#2115](#2115)) </blockquote> ## `hugr-passes` <blockquote> ## [0.16.0](hugr-passes-v0.15.3...hugr-passes-v0.16.0) - 2025-04-30 ### New Features - ReplaceTypes: handlers for array constants + linearization ([#2023](#2023)) </blockquote> ## `hugr` <blockquote> ## [0.16.0](hugr-v0.15.3...hugr-v0.16.0) - 2025-04-30 ### New Features - Export the portgraph hierarchy in HugrInternals ([#2057](#2057)) - Implement Debug for generic Wire<N>s ([#2068](#2068)) - Add ExtensionOp helpers ([#2072](#2072)) - ReplaceTypes: handlers for array constants + linearization ([#2023](#2023)) - move `ArrayOpBuilder` to hugr-core ([#2115](#2115)) ### Testing - Disable IO-dependent tests when running miri ([#2123](#2123)) </blockquote> ## `hugr-cli` <blockquote> ## [0.15.3](hugr-cli-v0.15.2...hugr-cli-v0.15.3) - 2025-04-02 ### Documentation - Add usage info to hugr-cli's rustdocs ([#2044](#2044)) </blockquote> </p></details> --- This PR was generated with [release-plz](https://github.com/release-plz/release-plz/). --------- Co-authored-by: Agustín Borgna <[email protected]>
#2027 ended up being breaking due to adding a new variant to an error enum missing the `non_exhaustive` marker. This (breaking) PR makes sure all error enums have the flag. BREAKING CHANGE: Marked all Error enums as `non_exhaustive`
This PR introduces metadata to encode order edges in
hugr-model
. The children of a dataflow region can be assigned a key viaorder_hint.key
metadata. Thenorder_hint.order
metadata on the dataflow region encodes order edges between keys. The PR includes the necessary import and export code inhugr-core
.