-
Notifications
You must be signed in to change notification settings - Fork 7
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
refactor!: Merge CustomOp
and ExternalOp
.
#923
Conversation
CustomOp
and ExternalOp
.CustomOp
and ExternalOp
.
Co-authored-by: Seyon Sivarajah <seyon.sivarajah@quantinuum.com>
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.
nice 👍
hugr/src/hugr/serialize.rs
Outdated
new_op.as_ref().clone().into_opaque(), | ||
old_op.as_ref().clone().into_opaque() | ||
); | ||
assert_eq!(new_op.clone().into_opaque(), old_op.clone().into_opaque()); |
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.
not doing the "into_opaque" here could address the lack of coverage of PartialEq in the other PR. Maybe that change should be in this PR?
I do worry if that PartialEq implementation is a good idea though, seems likely to induce hard to find bugs.
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.
The main idea of the PartialEq
impl is that we can replace this hacky test with just ==
9936294
In general, a serialization roundtrip should preserve equality. Resolving / unresolving a custom operation is an internal operation that doesn't impact the semantics of the hugr.
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.
ok I'm convinced, but scared
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.
Perhaps I should add some is_opaque
/is_extension
methods?
Codecov ReportAttention: Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## main #923 +/- ##
==========================================
+ Coverage 85.45% 85.47% +0.01%
==========================================
Files 78 78
Lines 14276 14257 -19
Branches 14276 14257 -19
==========================================
- Hits 12200 12186 -14
+ Misses 1442 1436 -6
- Partials 634 635 +1
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Sentry. |
## 🤖 New release * `hugr`: 0.3.0-alpha.1 -> 0.3.0-alpha.2 (⚠️ API breaking changes) ###⚠️ `hugr` breaking changes ``` --- 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.30.0/src/lints/enum_missing.ron Failed in: enum hugr::ops::custom::ExternalOp, previously in file /tmp/.tmpZslYkR/hugr/src/ops/custom.rs:20 enum hugr::ops::leaf::LeafOp, previously in file /tmp/.tmpZslYkR/hugr/src/ops/leaf.rs:21 enum hugr::ops::LeafOp, previously in file /tmp/.tmpZslYkR/hugr/src/ops/leaf.rs:21 --- 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.30.0/src/lints/enum_variant_added.ron Failed in: variant ConstTypeError:NotMonomorphicFunction in /tmp/.tmpoZAGEw/hugr/hugr/src/ops/constant.rs:98 variant ConstTypeError:NotMonomorphicFunction in /tmp/.tmpoZAGEw/hugr/hugr/src/ops/constant.rs:98 variant SignatureError:CallIncorrectlyAppliesType in /tmp/.tmpoZAGEw/hugr/hugr/src/extension.rs:172 --- 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.30.0/src/lints/enum_variant_missing.ron Failed in: variant InterGraphEdgeError::InvalidConstSrc, previously in file /tmp/.tmpZslYkR/hugr/src/hugr/validate.rs:774 variant OpType::LeafOp, previously in file /tmp/.tmpZslYkR/hugr/src/ops.rs:30 variant SignatureError::TypeApplyIncorrectCache, previously in file /tmp/.tmpZslYkR/hugr/src/extension.rs:171 variant EdgeKind::Static, previously in file /tmp/.tmpZslYkR/hugr/src/types.rs:44 variant ConstTypeError::FunctionTypeMissing, previously in file /tmp/.tmpZslYkR/hugr/src/ops/constant.rs:99 variant ConstTypeError::FunctionTypeMissing, previously in file /tmp/.tmpZslYkR/hugr/src/ops/constant.rs:99 --- failure inherent_method_missing: pub method removed or renamed --- Description: A publicly-visible method or associated fn 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.30.0/src/lints/inherent_method_missing.ron Failed in: OpType::as_leaf_op, previously in file /tmp/.tmpZslYkR/hugr/src/ops.rs:103 OpType::is_leaf_op, previously in file /tmp/.tmpZslYkR/hugr/src/ops.rs:103 --- failure method_parameter_count_changed: pub method parameter count changed --- Description: A publicly-visible method now takes a different number of parameters. ref: https://doc.rust-lang.org/cargo/reference/semver.html#fn-change-arity impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.30.0/src/lints/method_parameter_count_changed.ron Failed in: hugr::types::PolyFuncType::validate now takes 2 parameters instead of 3, in /tmp/.tmpoZAGEw/hugr/hugr/src/types/poly_func.rs:76 --- failure struct_missing: pub struct removed or renamed --- Description: A publicly-visible struct cannot be imported by its prior path. A `pub use` may have been removed, or the struct 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.30.0/src/lints/struct_missing.ron Failed in: struct hugr::ops::leaf::TypeApplication, previously in file /tmp/.tmpZslYkR/hugr/src/ops/leaf.rs:82 ``` <details><summary><i><b>Changelog</b></i></summary><p> <blockquote> ## 0.3.0-alpha.2 (2024-04-15) ### Documentation - Specify direct children in `HugrView::children` ([#921](#921)) - Add logo svg to readme and spec ([#925](#925)) ### Features - [**breaking**] No polymorphic closures ([#906](#906)) - [**breaking**] Flatten `LeafOp` ([#922](#922)) ### Refactor - Combine ExtensionSolutions (no separate closure) ([#884](#884)) - [**breaking**] Merge `CustomOp` and `ExternalOp`. ([#923](#923)) </blockquote> </p></details> --- This PR was generated with [release-plz](https://github.com/MarcoIeni/release-plz/). --------- Signed-off-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Agustin Borgna <agustin.borgna@quantinuum.com>
Followup of #922 .
Drops
ExternalOp
and makesCustomOp
an enum with two boxed variants forOpaqueOp
andExtensionOp
.The schema remains the same.