-
Notifications
You must be signed in to change notification settings - Fork 14
feat: ReplaceTypes: handlers for array constants + linearization #2023
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 #2023 +/- ##
==========================================
- Coverage 83.31% 83.05% -0.26%
==========================================
Files 217 218 +1
Lines 41864 41783 -81
Branches 38078 37961 -117
==========================================
- Hits 34877 34703 -174
- Misses 5033 5275 +242
+ Partials 1954 1805 -149
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:
|
// If none of the values has changed, assume the Type hasn't (Values have a single known type) | ||
if !ch { | ||
return Ok(None); | ||
}; |
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.
Doesn't this break for empty lists?
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.
Yes, good spot.
list_const
was originally more for checking the framework did the right thing(s) for constants, rather than being a definitive handler for lists, but given it was pub
it should have been better ;-). I've fixed this, although I haven't added a test with an empty list - the array_const test does include such a case and the SUT is identical.... (I did try commoning list_const
and array_const
up but it needed 3 different impl Fn
s so was not worth it!)
#[rstest] | ||
fn array(#[values(2, 3, 4)] num_outports: usize) { |
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.
Are lists constants already tested somewhere?
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 loop_const
does some fairly funky things with them, although is not exhaustive
@@ -0,0 +1,240 @@ | |||
//! Callbacks for use with [ReplaceTypes::replace_consts_parametrized] | |||
//! and [ReplaceTypes::linearize_parametric] |
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.
I think this reference breaks the docs build?
h.signature(h.root()).unwrap().runtime_reqs.clone() | ||
} | ||
|
||
/// Handler for copying/discarding arrays, for use with [ReplaceTypes::linearize_parametric] of |
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.
Also this one
@mark-koch added an Any thoughts on what to do with the handlers? I do feel including them in |
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.
Thanks, looks good 👍
Any thoughts on what to do with the handlers?
I think handlers for std extensions should be included in default()
. Maybe ReplaceTypes::empty()
to get one without any handlers?
That was not quite as neat as I'd have liked, 'coz we can't get the EDIT: so, hmmm, I am considering |
## 🤖 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 <agustin.borgna@quantinuum.com>
Final chapter closes #1948.
default()
includes all the handlers,new_empty()
does not.