-
Notifications
You must be signed in to change notification settings - Fork 13
feat: Add HugrMut::insert(_view)_forest #2518
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 Report❌ Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## main #2518 +/- ##
==========================================
+ Coverage 82.66% 82.76% +0.09%
==========================================
Files 252 252
Lines 46801 47065 +264
Branches 42330 42581 +251
==========================================
+ Hits 38689 38952 +263
+ Misses 6061 6055 -6
- Partials 2051 2058 +7
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:
|
This reverts commit caecc43.
1d23bc8 to
cb92e0c
Compare
hugr/benches/benchmarks/hugr.rs
Outdated
| // Note it would be better to use iter_batched to avoid cloning nodes/roots. | ||
| let nodes = insert.entry_descendants().chain([defn.node(), decl.node()]); | ||
| let roots = [ | ||
| (insert.entrypoint(), h.entrypoint()), | ||
| (defn.node(), h.module_root()), | ||
| (decl.node(), h.module_root()), | ||
| ]; | ||
| b.iter(|| black_box(h.insert_view_forest(&insert, nodes.clone(), roots.iter().cloned()))) |
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.
You are modifying h on each iteration, so it becomes bigger and bigger each time!
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, but I don't think that should matter - we are not, e.g., copying h (or validating it) on each iteration; it's only if resizing nodes arrays etc. where this might hurt....and that should be amortized, right?
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 can change it if you think this is important??
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.
Each benchmark run should ideally have the same context, to avoid noise.
Re-using the hugr has implications in vector allocations, and cache hits/misses.
We can just use a Hugr::new() here.
| #[display( | ||
| "Subtree rooted at {subtree} is already being copied as part of that rooted at {parent}" | ||
| )] | ||
| SubtreeAlreadyCopied { |
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.
Possibly this would be better called SubtreesNotDisjoint or SubtreesOverlap or something like that
aborgna-q
left a comment
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, just fix the benchmark before merging
|
Ok after updating benchmarks and making the other factors the same on both sides, this comparison shows the improvement that could be gained by requiring the |
## 🤖 New release * `hugr-model`: 0.22.2 -> 0.22.3 (✓ API compatible changes) * `hugr-core`: 0.22.2 -> 0.22.3 (✓ API compatible changes) * `hugr-llvm`: 0.22.2 -> 0.22.3 (✓ API compatible changes) * `hugr-passes`: 0.22.2 -> 0.22.3 (✓ API compatible changes) * `hugr-persistent`: 0.2.2 -> 0.2.3 (✓ API compatible changes) * `hugr`: 0.22.2 -> 0.22.3 (✓ API compatible changes) * `hugr-cli`: 0.22.2 -> 0.22.3 (✓ API compatible changes) <details><summary><i><b>Changelog</b></i></summary><p> ## `hugr-model` <blockquote> ## [0.22.2](hugr-model-v0.22.1...hugr-model-v0.22.2) - 2025-08-06 ### New Features - Type of constants in `core` `Term`s. ([#2411](#2411)) </blockquote> ## `hugr-core` <blockquote> ## [0.22.3](hugr-core-v0.22.2...hugr-core-v0.22.3) - 2025-09-11 ### Bug Fixes - SiblingSubgraph::try_from_nodes not including disconnected components ([#2549](#2549)) ### Documentation - Clarify docs for SiblingSubgraph::{inputs, outputs} ([#2508](#2508)) ### New Features - SiblingSubgraph supports function calls ([#2528](#2528)) - Add unchecked constructor for SiblingSubgraph ([#2526](#2526)) - Add HugrMut::insert(_view)_forest ([#2518](#2518)) - Add extend_inputs function for DFGs ([#2536](#2536)) - Loosen bound on Patch trait ([#2545](#2545)) </blockquote> ## `hugr-llvm` <blockquote> ## [0.22.2](hugr-llvm-v0.22.1...hugr-llvm-v0.22.2) - 2025-08-06 ### Bug Fixes - added public func getter for EmitFuncContext ([#2482](#2482)) - *(hugr-llvm)* Set llvm function linkage based on Visibility hugr node field ([#2502](#2502)) </blockquote> ## `hugr-passes` <blockquote> ## [0.22.3](hugr-passes-v0.22.2...hugr-passes-v0.22.3) - 2025-09-11 ### New Features - SiblingSubgraph supports function calls ([#2528](#2528)) </blockquote> ## `hugr-persistent` <blockquote> ## [0.2.3](hugr-persistent-v0.2.2...hugr-persistent-v0.2.3) - 2025-09-11 ### Documentation - Clarify docs for SiblingSubgraph::{inputs, outputs} ([#2508](#2508)) ### New Features - SiblingSubgraph supports function calls ([#2528](#2528)) </blockquote> ## `hugr` <blockquote> ## [0.22.3](hugr-v0.22.2...hugr-v0.22.3) - 2025-09-11 ### Bug Fixes - SiblingSubgraph::try_from_nodes not including disconnected components ([#2549](#2549)) ### Documentation - Clarify docs for SiblingSubgraph::{inputs, outputs} ([#2508](#2508)) ### New Features - SiblingSubgraph supports function calls ([#2528](#2528)) - Add unchecked constructor for SiblingSubgraph ([#2526](#2526)) - Add extend_inputs function for DFGs ([#2536](#2536)) - Loosen bound on Patch trait ([#2545](#2545)) - Add HugrMut::insert(_view)_forest ([#2518](#2518)) </blockquote> ## `hugr-cli` <blockquote> ## [0.22.3](hugr-cli-v0.22.2...hugr-cli-v0.22.3) - 2025-09-11 ### New Features - *(hugr-cli)* CliError::validate helper ([#2507](#2507)) </blockquote> </p></details> --- This PR was generated with [release-plz](https://github.com/release-plz/release-plz/).



closes #2500, #2496
insert_hugr,insert_viewandinsert_subgraphusing theseTechnically I think this is breaking, any external
impl HugrMutnow has to provide these new methods, but we believe implementations of HugrMut outside of hugr-core to be sufficiently rare not to justify a major-version-number release, and rs-semver-checks does not seem to pick up on this.