Skip to content
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

Merged
merged 12 commits into from
Apr 12, 2024
Merged

refactor!: Merge CustomOp and ExternalOp. #923

merged 12 commits into from
Apr 12, 2024

Conversation

aborgna-q
Copy link
Collaborator

Followup of #922 .

Drops ExternalOp and makes CustomOp an enum with two boxed variants for OpaqueOp and ExtensionOp.
The schema remains the same.

@aborgna-q aborgna-q requested a review from ss2165 April 11, 2024 14:14
@aborgna-q aborgna-q added this to the v0.3.0 milestone Apr 11, 2024
@aborgna-q aborgna-q changed the title refactor: Merge CustomOp and ExternalOp. refactor!: Merge CustomOp and ExternalOp. Apr 11, 2024
Co-authored-by: Seyon Sivarajah <seyon.sivarajah@quantinuum.com>
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.

nice 👍

Comment on lines 353 to 352
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());
Copy link
Member

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.

Copy link
Collaborator Author

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.

Copy link
Member

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

Copy link
Collaborator Author

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?

@aborgna-q aborgna-q mentioned this pull request Apr 12, 2024
Base automatically changed from feat/flatten-leafs to main April 12, 2024 14:17
Copy link

codecov bot commented Apr 12, 2024

Codecov Report

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

Project coverage is 85.47%. Comparing base (3598913) to head (b075dca).

Files Patch % Lines
hugr/src/ops/custom.rs 88.23% 4 Missing and 2 partials ⚠️
hugr/src/hugr/validate.rs 70.00% 1 Missing and 2 partials ⚠️
hugr/src/algorithm/const_fold.rs 0.00% 0 Missing and 1 partial ⚠️
hugr/src/extension/simple_op.rs 0.00% 0 Missing and 1 partial ⚠️
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     
Flag Coverage Δ
rust 85.47% <85.33%> (+0.01%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

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

@aborgna-q aborgna-q added this pull request to the merge queue Apr 12, 2024
Merged via the queue into main with commit c4a5631 Apr 12, 2024
16 of 17 checks passed
@aborgna-q aborgna-q deleted the refactor/customop branch April 12, 2024 14:31
github-merge-queue bot pushed a commit that referenced this pull request Apr 15, 2024
## 🤖 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>
@github-actions github-actions bot mentioned this pull request Apr 15, 2024
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.

2 participants