Skip to content

feat: Add a pass to remove redundant order edges#2739

Merged
aborgna-q merged 2 commits intomainfrom
ab/redundant-order-edges
Dec 10, 2025
Merged

feat: Add a pass to remove redundant order edges#2739
aborgna-q merged 2 commits intomainfrom
ab/redundant-order-edges

Conversation

@aborgna-q
Copy link
Copy Markdown
Collaborator

A pass that transforms this

graph LR
    subgraph 0 ["(0) Module"]
        direction LR
        subgraph 1 ["(1) [**FuncDefn: #quot;f#quot;**]"]
            direction LR
            style 1 stroke:#832561,stroke-width:3px
            2["(2) Input"]
            3["(3) Output"]
            4["(4) prelude.Noop"]
            5["(5) prelude.Noop"]
            6["(6) prelude.Noop"]
            7["(7) prelude.Noop"]
            9["(9) prelude.Noop"]
            2--"0:0<br>Bool"-->4
            2--"0:0<br>Bool"-->7
            2-."1:1".->4
            4--"0:0<br>Bool"-->5
            4-."1:1".->3
            5--"0:0<br>Bool"-->6
            7--"0:0<br>Bool"-->9
            7-."1:1".->6
            9--"0:0<br>Bool"-->3
            9-."1:1".->5
        end
    end
Loading

into

graph LR
    subgraph 0 ["(0) Module"]
        direction LR
        subgraph 1 ["(1) [**FuncDefn: #quot;f#quot;**]"]
            direction LR
            style 1 stroke:#832561,stroke-width:3px
            2["(2) Input"]
            3["(3) Output"]
            4["(4) prelude.Noop"]
            5["(5) prelude.Noop"]
            6["(6) prelude.Noop"]
            7["(7) prelude.Noop"]
            9["(9) prelude.Noop"]
            2--"0:0<br>Bool"-->4
            2--"0:0<br>Bool"-->7
            4--"0:0<br>Bool"-->5
            4-."1:1".->3
            5--"0:0<br>Bool"-->6
            7--"0:0<br>Bool"-->9
            9--"0:0<br>Bool"-->3
            9-."1:1".->5
        end
    end
Loading

@aborgna-q aborgna-q requested a review from a team as a code owner December 9, 2025 16:54
@aborgna-q aborgna-q requested review from mark-koch and removed request for a team December 9, 2025 16:54
@codecov
Copy link
Copy Markdown

codecov bot commented Dec 9, 2025

Codecov Report

❌ Patch coverage is 94.65649% with 7 lines in your changes missing coverage. Please review.
✅ Project coverage is 83.54%. Comparing base (e868dbe) to head (007a777).
⚠️ Report is 2 commits behind head on main.

Files with missing lines Patch % Lines
hugr-passes/src/redundant_order_edges.rs 94.65% 6 Missing and 1 partial ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main    #2739      +/-   ##
==========================================
+ Coverage   83.51%   83.54%   +0.02%     
==========================================
  Files         267      268       +1     
  Lines       52947    53078     +131     
  Branches    47656    47787     +131     
==========================================
+ Hits        44218    44342     +124     
- Misses       6347     6353       +6     
- Partials     2382     2383       +1     
Flag Coverage Δ
python 88.77% <ø> (ø)
rust 82.96% <94.65%> (+0.03%) ⬆️

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.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

Copy link
Copy Markdown
Contributor

@mark-koch mark-koch left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good, just a couple sanity checking questions 👍


// Collect the order edges originating from this node that do not lead to a node with children.
//
// The later may be necessary for keeping external edges valid.
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
// The later may be necessary for keeping external edges valid.
// The latter may be necessary for keeping external edges valid.

hugr.set_order(&noop5, &noop2);

let mut hugr = hugr.finish_hugr_with_outputs([noop5.out_wire(0)]).unwrap();
println!("{}", hugr.mermaid_string());
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we want to keep these prints in the test?

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nop -.-'

/// - noop1 -> output
/// - noop5 -> noop2
#[test]
fn test_redundant_order_edges() {
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could you also add tests involving non-local edges and recursion?

};

// Add the order edges to the `predecessor_order_edges` of the forward neighbors of the node.
for out_port in op.value_output_ports().chain(op.static_output_port()) {
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we need to consider op.static_output_port() here? Do we allow order edges on any nodes with static outputs (e.g. Const, FuncDefn)?

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I guess technically not, but there's no hurt in following those edges in case of future changes (they do introduce node ordering so it's valid to follow the edges)

Comment on lines +181 to +182
// When exploring non-dataflow regions, add the children recursively (independently of self.recursive).
region_candidates.extend(hugr.children(region));
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So if recurse is false, then this only applies to the entry point? Is a CFG entry point the only example where this case would be triggered?

Similarly, if recurse is True, would nested CFGs be the only relevant case?

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is also used when entrypoint is the module root, or when recursing into Conditionals.

.unwrap();

// Set the order edges as described in the test description.
hugr.set_order(&input, &noop1);
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This should be input -> noop2 (at least according to the doc above)?

Comment on lines +81 to +82
let postorder = petgraph::visit::Topo::new(&region);
for pg_node in postorder.iter(&region) {
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Will the toposort include non-local children?

Copy link
Copy Markdown
Collaborator Author

@aborgna-q aborgna-q Dec 10, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No, the region_portgraph only includes the flat graph form by the direct children.

@aborgna-q aborgna-q force-pushed the ab/optype-value-ports branch from 56cd8eb to 3e8396e Compare December 10, 2025 14:02
Base automatically changed from ab/optype-value-ports to main December 10, 2025 14:45
@aborgna-q aborgna-q force-pushed the ab/redundant-order-edges branch from 7980a1b to 007a777 Compare December 10, 2025 15:07
@aborgna-q aborgna-q enabled auto-merge December 10, 2025 15:07
@aborgna-q aborgna-q added this pull request to the merge queue Dec 10, 2025
Merged via the queue into main with commit c175783 Dec 10, 2025
30 checks passed
@aborgna-q aborgna-q deleted the ab/redundant-order-edges branch December 10, 2025 15:41
@hugrbot hugrbot mentioned this pull request Dec 10, 2025
github-merge-queue bot pushed a commit to Quantinuum/tket2 that referenced this pull request Dec 10, 2025
closes #1284

Found a couple bugs whilst making this. Agustin has now fixed most of
them.

The examples here are super trivial at the moment but I demonstrate
`NormalizeGuppy`, `RemoveRedundancies` and `SquashRzPhasedX`.

The example using `SquashRzPhasedX` isn't quite working yet. It should
simplify to a single Rz gate but this isn't working yet due to an issue
with order edges. Should be fixed once we have the transformation in
Quantinuum/hugr#2739 is part of
`NormalizeGuppy`.

Note I moved the `examples` directory to be part of the docs directory
so that I could include the example in the docs site more easily.
github-merge-queue bot pushed a commit to Quantinuum/guppylang that referenced this pull request Dec 19, 2025
…ted hugr programs (#1384)

I've started adding some basic tests that validate that `tket`
optimizations transform guppy programs as expected. This is part of
#1383

Note that some key use cases are not supported yet including

1. Some sequences of parameterized gates are not simplified as expected.
Hopefully once Quantinuum/hugr#2739 is released
and used in `tket` this will be fixed.
2. Programs with arrays don't always simplify as expected (see
Quantinuum/tket2#1307)
3. Guppy functions which call other functions will only be optimized at
the top level currently.

Once these limitations are removed I think it would be good to add test
cases for the above as well.
github-merge-queue bot pushed a commit that referenced this pull request Dec 22, 2025
This release includes various breaking refactors and improvements:
- A lot of work has been done towards linking Hugrs. Now module-rooted
Hugrs can
  be linked together using configurable policies.
- `ValueArray` has been removed.
- A type-safe API for accessing metadata on nodes has been added.
- Envelopes now have an extensive API for progressively describing a
package,
  and failing gracefully on errors.
- The MSRV has been bumped to Rust 1.89, and the public pyo3 dependency
has been
  updated to 0.27.
- Multiple deprecated definitions have been removed.

----

## 🤖 New release

* `hugr-model`: 0.24.3 -> 0.25.0 (✓ API compatible changes)
* `hugr-core`: 0.24.3 -> 0.25.0 (⚠ API breaking changes)
* `hugr-llvm`: 0.24.3 -> 0.25.0 (✓ API compatible changes)
* `hugr-passes`: 0.24.3 -> 0.25.0 (⚠ API breaking changes)
* `hugr-persistent`: 0.3.4 -> 0.4.0 (✓ API compatible changes)
* `hugr`: 0.24.3 -> 0.25.0 (✓ API compatible changes)
* `hugr-cli`: 0.24.3 -> 0.25.0 (⚠ API breaking changes)

### ⚠ `hugr-core` breaking changes

```text
--- failure enum_marked_non_exhaustive: enum marked #[non_exhaustive] ---

Description:
A public enum has been marked #[non_exhaustive]. Pattern-matching on it outside of its crate must now include a wildcard pattern like `_`, or it will fail to compile.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#attr-adding-non-exhaustive
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.45.0/src/lints/enum_marked_non_exhaustive.ron

Failed in:
  enum ReadError in /tmp/.tmpmZ0VmH/hugr/hugr-core/src/envelope.rs:108

--- 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.45.0/src/lints/enum_missing.ron

Failed in:
  enum hugr_core::envelope::EnvelopeError, previously in file /tmp/.tmpLNcYQE/hugr-core/src/envelope.rs:262

--- failure function_missing: pub fn removed or renamed ---

Description:
A publicly-visible function cannot be imported by its prior path. A `pub use` may have been removed, or the function 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.45.0/src/lints/function_missing.ron

Failed in:
  function hugr_core::std_extensions::collections::value_array::value_array_type, previously in file /tmp/.tmpLNcYQE/hugr-core/src/std_extensions/collections/value_array.rs:159
  function hugr_core::envelope::format_generator, previously in file /tmp/.tmpLNcYQE/hugr-core/src/envelope.rs:93
  function hugr_core::std_extensions::collections::value_array::value_array_type_def, previously in file /tmp/.tmpLNcYQE/hugr-core/src/std_extensions/collections/value_array.rs:150
  function hugr_core::hugr::serialize::serde_deserialize_hugr, previously in file /tmp/.tmpLNcYQE/hugr-core/src/hugr/serialize.rs:180
  function hugr_core::envelope::get_generator, previously in file /tmp/.tmpLNcYQE/hugr-core/src/envelope.rs:80
  function hugr_core::std_extensions::collections::value_array::value_array_type_parametric, previously in file /tmp/.tmpLNcYQE/hugr-core/src/std_extensions/collections/value_array.rs:166
  function hugr_core::std_extensions::collections::array::op_builder::build_all_value_array_ops, previously in file /tmp/.tmpLNcYQE/hugr-core/src/std_extensions/collections/array/op_builder.rs:390

--- 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.45.0/src/lints/inherent_method_missing.ron

Failed in:
  MermaidFormatter::from_render_config, previously in file /tmp/.tmpLNcYQE/hugr-core/src/hugr/views/render.rs:50

--- failure module_missing: pub module removed or renamed ---

Description:
A publicly-visible module cannot be imported by its prior path. A `pub use` may have been removed, or the module may have been renamed, removed, or made non-public.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.45.0/src/lints/module_missing.ron

Failed in:
  mod hugr_core::std_extensions::collections::value_array, previously in file /tmp/.tmpLNcYQE/hugr-core/src/std_extensions/collections/value_array.rs:1

--- 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.45.0/src/lints/pub_module_level_const_missing.ron

Failed in:
  USED_EXTENSIONS_KEY in file /tmp/.tmpLNcYQE/hugr-core/src/envelope.rs:72
  VALUE_ARRAY_TYPENAME in file /tmp/.tmpLNcYQE/hugr-core/src/std_extensions/collections/value_array.rs:27
  VERSION in file /tmp/.tmpLNcYQE/hugr-core/src/std_extensions/collections/value_array.rs:33
  GENERATOR_KEY in file /tmp/.tmpLNcYQE/hugr-core/src/envelope.rs:70
  EXTENSION_ID in file /tmp/.tmpLNcYQE/hugr-core/src/std_extensions/collections/value_array.rs:31
  VALUE_ARRAY_VALUENAME in file /tmp/.tmpLNcYQE/hugr-core/src/std_extensions/collections/value_array.rs:29

--- failure pub_static_missing: pub static is missing ---

Description:
A public static is missing, renamed, or made private.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.45.0/src/lints/pub_static_missing.ron

Failed in:
  EXTENSION in file /tmp/.tmpLNcYQE/hugr-core/src/std_extensions/collections/value_array.rs:99

--- 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.45.0/src/lints/struct_missing.ron

Failed in:
  struct hugr_core::envelope::WithGenerator, previously in file /tmp/.tmpLNcYQE/hugr-core/src/envelope.rs:127
  struct hugr_core::hugr::views::render::RenderConfig, previously in file /tmp/.tmpLNcYQE/hugr-core/src/hugr/views/render.rs:21
  struct hugr_core::std_extensions::collections::value_array::ValueArray, previously in file /tmp/.tmpLNcYQE/hugr-core/src/std_extensions/collections/value_array.rs:39

--- failure trait_method_default_impl_removed: pub trait default method impl removed ---

Description:
A method's default impl in an unsealed trait has been removed, breaking trait implementations that relied on that default
        ref: https://doc.rust-lang.org/book/ch10-02-traits.html#default-implementations
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.45.0/src/lints/trait_method_default_impl_removed.ron

Failed in:
  trait method hugr_core::hugr::patch::PatchVerification::invalidated_nodes in file /tmp/.tmpmZ0VmH/hugr/hugr-core/src/hugr/patch.rs:45

--- failure trait_method_missing: pub trait method removed or renamed ---

Description:
A trait method is no longer callable, and may have been renamed or removed entirely.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#major-any-change-to-trait-item-signatures
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.45.0/src/lints/trait_method_missing.ron

Failed in:
  method invalidation_set of trait PatchVerification, previously in file /tmp/.tmpLNcYQE/hugr-core/src/hugr/patch.rs:44
  method mermaid_string_with_config of trait HugrView, previously in file /tmp/.tmpLNcYQE/hugr-core/src/hugr/views.rs:404
  method mermaid_string_with_config of trait HugrView, previously in file /tmp/.tmpLNcYQE/hugr-core/src/hugr/views.rs:404
  method mermaid_string_with_config of trait HugrView, previously in file /tmp/.tmpLNcYQE/hugr-core/src/hugr/views.rs:404
  method get_metadata_mut of trait HugrMut, previously in file /tmp/.tmpLNcYQE/hugr-core/src/hugr/hugrmut.rs:63

--- failure trait_method_parameter_count_changed: pub trait method parameter count changed ---

Description:
A trait method now takes a different number of parameters.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#major-any-change-to-trait-item-signatures
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.45.0/src/lints/trait_method_parameter_count_changed.ron

Failed in:
  Container::set_metadata now takes 2 instead of 3 parameters, in file /tmp/.tmpmZ0VmH/hugr/hugr-core/src/builder/build_traits.rs:114
  Container::set_child_metadata now takes 3 instead of 4 parameters, in file /tmp/.tmpmZ0VmH/hugr/hugr-core/src/builder/build_traits.rs:123
  HugrView::get_metadata now takes 2 instead of 3 parameters, in file /tmp/.tmpmZ0VmH/hugr/hugr-core/src/hugr/views.rs:107
  HugrView::get_metadata now takes 2 instead of 3 parameters, in file /tmp/.tmpmZ0VmH/hugr/hugr-core/src/hugr/views.rs:107
  HugrView::get_metadata now takes 2 instead of 3 parameters, in file /tmp/.tmpmZ0VmH/hugr/hugr-core/src/hugr/views.rs:107
  HugrMut::set_metadata now takes 3 instead of 4 parameters, in file /tmp/.tmpmZ0VmH/hugr/hugr-core/src/hugr/hugrmut.rs:79
  HugrMut::remove_metadata now takes 2 instead of 3 parameters, in file /tmp/.tmpmZ0VmH/hugr/hugr-core/src/hugr/hugrmut.rs:106

--- failure trait_method_requires_different_generic_type_params: trait method now requires a different number of generic type parameters ---

Description:
A trait method now requires a different number of generic type parameters than it used to. Calls or implementations of this trait method using the previous number of generic types will be broken.
        ref: https://doc.rust-lang.org/reference/items/generics.html
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.45.0/src/lints/trait_method_requires_different_generic_type_params.ron

Failed in:
  Container::set_metadata (0 -> 1 generic types) in /tmp/.tmpmZ0VmH/hugr/hugr-core/src/builder/build_traits.rs:114
  Container::set_child_metadata (0 -> 1 generic types) in /tmp/.tmpmZ0VmH/hugr/hugr-core/src/builder/build_traits.rs:123
  HugrView::get_metadata (0 -> 1 generic types) in /tmp/.tmpmZ0VmH/hugr/hugr-core/src/hugr/views.rs:107
  HugrView::get_metadata (0 -> 1 generic types) in /tmp/.tmpmZ0VmH/hugr/hugr-core/src/hugr/views.rs:107
  HugrView::get_metadata (0 -> 1 generic types) in /tmp/.tmpmZ0VmH/hugr/hugr-core/src/hugr/views.rs:107
  HugrMut::set_metadata (0 -> 1 generic types) in /tmp/.tmpmZ0VmH/hugr/hugr-core/src/hugr/hugrmut.rs:79
  HugrMut::remove_metadata (0 -> 1 generic types) in /tmp/.tmpmZ0VmH/hugr/hugr-core/src/hugr/hugrmut.rs:106

--- 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.45.0/src/lints/trait_missing.ron

Failed in:
  trait hugr_core::std_extensions::collections::value_array::VArrayOpBuilder, previously in file /tmp/.tmpLNcYQE/hugr-core/src/std_extensions/collections/value_array.rs:174
  trait hugr_core::hugr::views::RootCheckable, previously in file /tmp/.tmpLNcYQE/hugr-core/src/hugr/views/root_checked.rs:73
```

### ⚠ `hugr-passes` breaking changes

```text
--- failure enum_marked_non_exhaustive: enum marked #[non_exhaustive] ---

Description:
A public enum has been marked #[non_exhaustive]. Pattern-matching on it outside of its crate must now include a wildcard pattern like `_`, or it will fail to compile.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#attr-adding-non-exhaustive
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.45.0/src/lints/enum_marked_non_exhaustive.ron

Failed in:
  enum NodeTemplate in /tmp/.tmpmZ0VmH/hugr/hugr-passes/src/replace_types.rs:40

--- 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.45.0/src/lints/enum_missing.ron

Failed in:
  enum hugr_passes::call_graph::CallGraphNode, previously in file /tmp/.tmpLNcYQE/hugr-passes/src/call_graph.rs:17
  enum hugr_passes::call_graph::CallGraphEdge, previously in file /tmp/.tmpLNcYQE/hugr-passes/src/call_graph.rs:9

--- failure enum_struct_variant_field_added: pub enum struct variant field added ---

Description:
An enum's exhaustive struct variant has a new field, which has to be included when constructing or matching on this variant.
        ref: https://doc.rust-lang.org/reference/attributes/type_system.html#the-non_exhaustive-attribute
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.45.0/src/lints/enum_struct_variant_field_added.ron

Failed in:
  field entry_nodes_moved of variant NormalizeCFGResult::CFGPreserved in /tmp/.tmpmZ0VmH/hugr/hugr-passes/src/normalize_cfgs.rs:89

--- failure enum_struct_variant_field_missing: pub enum struct variant's field removed or renamed ---

Description:
A publicly-visible enum has a struct variant whose field 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.45.0/src/lints/enum_struct_variant_field_missing.ron

Failed in:
  field entry_dfg of variant NormalizeCFGResult::CFGPreserved, previously in file /tmp/.tmpLNcYQE/hugr-passes/src/normalize_cfgs.rs:88

--- failure function_missing: pub fn removed or renamed ---

Description:
A publicly-visible function cannot be imported by its prior path. A `pub use` may have been removed, or the function 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.45.0/src/lints/function_missing.ron

Failed in:
  function hugr_passes::replace_types::handlers::linearize_value_array, previously in file /tmp/.tmpLNcYQE/hugr-passes/src/replace_types/handlers.rs:298
  function hugr_passes::merge_bbs::merge_basic_blocks, previously in file /tmp/.tmpLNcYQE/hugr-passes/src/lib.rs:40
  function hugr_passes::replace_types::handlers::value_array_const, previously in file /tmp/.tmpLNcYQE/hugr-passes/src/replace_types/handlers.rs:97

--- failure module_missing: pub module removed or renamed ---

Description:
A publicly-visible module cannot be imported by its prior path. A `pub use` may have been removed, or the module may have been renamed, removed, or made non-public.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.45.0/src/lints/module_missing.ron

Failed in:
  mod hugr_passes::merge_bbs, previously in file /tmp/.tmpLNcYQE/hugr-passes/src/lib.rs:26
  mod hugr_passes::call_graph, previously in file /tmp/.tmpLNcYQE/hugr-passes/src/call_graph.rs:1
  mod hugr_passes::linearize_array, previously in file /tmp/.tmpLNcYQE/hugr-passes/src/linearize_array.rs:1

--- 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.45.0/src/lints/struct_missing.ron

Failed in:
  struct hugr_passes::call_graph::CallGraph, previously in file /tmp/.tmpLNcYQE/hugr-passes/src/call_graph.rs:42
  struct hugr_passes::linearize_array::LinearizeArrayPass, previously in file /tmp/.tmpLNcYQE/hugr-passes/src/linearize_array.rs:35
  struct hugr_passes::LinearizeArrayPass, previously in file /tmp/.tmpLNcYQE/hugr-passes/src/linearize_array.rs:35
```

### ⚠ `hugr-cli` breaking changes

```text
--- 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.45.0/src/lints/enum_variant_missing.ron

Failed in:
  variant CliError::Envelope, previously in file /tmp/.tmpLNcYQE/hugr-cli/src/lib.rs:88

--- 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.45.0/src/lints/inherent_method_missing.ron

Failed in:
  HugrInputArgs::get_envelope, previously in file /tmp/.tmpLNcYQE/hugr-cli/src/hugr_io.rs:63
  HugrInputArgs::get_hugr, previously in file /tmp/.tmpLNcYQE/hugr-cli/src/hugr_io.rs:88

--- failure struct_pub_field_missing: pub struct's pub field removed or renamed ---

Description:
A publicly-visible struct has at least one public field 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.45.0/src/lints/struct_pub_field_missing.ron

Failed in:
  field hugr_json of struct HugrInputArgs, previously in file /tmp/.tmpLNcYQE/hugr-cli/src/hugr_io.rs:40
```

<details><summary><i><b>Changelog</b></i></summary><p>

## `hugr-model`

<blockquote>

##
[0.25.0](hugr-model-v0.24.3...hugr-model-v0.25.0)
- 2025-12-22

### Bug Fixes

- *(model)* avoid non abi-compatible pyo3 calls
([#2679](#2679))

### New Features

- [**breaking**] Upgrade pyo3 dependency to 0.27
([#2736](#2736))

### Refactor

- Direct import of model representation to Python
([#2683](#2683))
</blockquote>

## `hugr-core`

<blockquote>

##
[0.25.0](hugr-core-v0.24.3...hugr-core-v0.25.0)
- 2025-12-22

### Bug Fixes

- *(hugr-core)* [**breaking**] Return error instead of panicking in
`MakeRegisteredOp::to_extension_op()`
([#2701](#2701))
- register packaged extensions before model_ast import
([#2702](#2702))
- ModuleGraph misses static edges to non-container entrypoints
([#2745](#2745))

### New Features

- return description output to python on error
([#2681](#2681))
- add hugr-core StaticGraph, deprecate hugr-passes CallGraph
([#2698](#2698))
- [**breaking**] Remove `RootCheckable`
([#2704](#2704))
- Add method to link Hugr modules (linking pt3)
([#2529](#2529))
- `insert_link_hugr` adds entrypoint subtree and links, with
reachability ([#2555](#2555))
- [**breaking**] Upgrade pyo3 dependency to 0.27
([#2736](#2736))
- [**breaking**] Bump MSRV to Rust 1.89
([#2747](#2747))
- [**breaking**] Allow disconnecting specific edges in a hugr
([#2737](#2737))
- Optype iterators over value ports
([#2738](#2738))
- [**breaking**] Type-safe access for node metadata
([#2755](#2755))
- [**breaking**] GeneratorDesc metadata definition
([#2759](#2759))

### Refactor

- [**breaking**] move envelope reading to dedicated module with
dedicated errors ([#2689](#2689))
- Direct import of model representation to Python
([#2683](#2683))
- *(linking.rs)* [**breaking**] (tiny) avoid type_complexity
([#2721](#2721))
- [**breaking**] Remove multiple deprecated definitions
([#2751](#2751))
- [**breaking**] Delete ValueArray
([#2760](#2760))
- Deprecate Value::Function and inline_constant_functions
([#2770](#2770))
</blockquote>

## `hugr-llvm`

<blockquote>

##
[0.25.0](hugr-llvm-v0.24.3...hugr-llvm-v0.25.0)
- 2025-12-22

### New Features

- *(llvm)* [**breaking**] upgrade to inkwell 0.7
([#2695](#2695))

### Refactor

- Deprecate Value::Function and inline_constant_functions
([#2770](#2770))
</blockquote>

## `hugr-passes`

<blockquote>

##
[0.25.0](hugr-passes-v0.24.3...hugr-passes-v0.25.0)
- 2025-12-22

### New Features

- *(hugr-passes)* [**breaking**] normalize_cfgs inlines entry DFG
([#2649](#2649))
- add hugr-core StaticGraph, deprecate hugr-passes CallGraph
([#2698](#2698))
- ReplaceTypes: recurse on replacements, much deprecation
([#2442](#2442))
- [**breaking**] Remove `RootCheckable`
([#2704](#2704))
- [**breaking**] Bump MSRV to Rust 1.89
([#2747](#2747))
- Add a pass to remove redundant order edges
([#2739](#2739))
- *(hugr-passes)* [**breaking**] add NodeTemplate::LinkedHugr, deprecate
::Call ([#2749](#2749))

### Refactor

- [**breaking**] Remove multiple deprecated definitions
([#2751](#2751))
- [**breaking**] Delete ValueArray
([#2760](#2760))
- Deprecate Value::Function and inline_constant_functions
([#2770](#2770))

### Testing

- Make Hugr valid in replace_types::op_to_call
([#2732](#2732))
</blockquote>

## `hugr-persistent`

<blockquote>

##
[0.4.0](hugr-persistent-v0.3.4...hugr-persistent-v0.4.0)
- 2025-12-22

### New Features

- [**breaking**] Remove `RootCheckable`
([#2704](#2704))
- [**breaking**] Bump MSRV to Rust 1.89
([#2747](#2747))
- [**breaking**] Type-safe access for node metadata
([#2755](#2755))

### Refactor

- [**breaking**] Remove multiple deprecated definitions
([#2751](#2751))
</blockquote>

## `hugr`

<blockquote>

##
[0.25.0](hugr-v0.24.3...hugr-v0.25.0)
- 2025-12-22

### Bug Fixes

- *(hugr-core)* [**breaking**] Return error instead of panicking in
`MakeRegisteredOp::to_extension_op()`
([#2701](#2701))
- register packaged extensions before model_ast import
([#2702](#2702))
- ModuleGraph misses static edges to non-container entrypoints
([#2745](#2745))

### Documentation

- Improve instructions for patch release
([#2720](#2720))

### New Features

- *(hugr-passes)* [**breaking**] normalize_cfgs inlines entry DFG
([#2649](#2649))
- ReplaceTypes: recurse on replacements, much deprecation
([#2442](#2442))
- Add a pass to remove redundant order edges
([#2739](#2739))
- *(hugr-passes)* [**breaking**] add NodeTemplate::LinkedHugr, deprecate
::Call ([#2749](#2749))
- return description output to python on error
([#2681](#2681))
- add hugr-core StaticGraph, deprecate hugr-passes CallGraph
([#2698](#2698))
- [**breaking**] Remove `RootCheckable`
([#2704](#2704))
- Add method to link Hugr modules (linking pt3)
([#2529](#2529))
- `insert_link_hugr` adds entrypoint subtree and links, with
reachability ([#2555](#2555))
- [**breaking**] Upgrade pyo3 dependency to 0.27
([#2736](#2736))
- [**breaking**] Bump MSRV to Rust 1.89
([#2747](#2747))
- [**breaking**] Allow disconnecting specific edges in a hugr
([#2737](#2737))
- Optype iterators over value ports
([#2738](#2738))
- [**breaking**] GeneratorDesc metadata definition
([#2759](#2759))
- [**breaking**] Type-safe access for node metadata
([#2755](#2755))

### Refactor

- [**breaking**] move envelope reading to dedicated module with
dedicated errors ([#2689](#2689))
- Direct import of model representation to Python
([#2683](#2683))
- *(linking.rs)* [**breaking**] (tiny) avoid type_complexity
([#2721](#2721))
- [**breaking**] Remove multiple deprecated definitions
([#2751](#2751))
- [**breaking**] Delete ValueArray
([#2760](#2760))
- Deprecate Value::Function and inline_constant_functions
([#2770](#2770))

### Testing

- Make Hugr valid in replace_types::op_to_call
([#2732](#2732))
</blockquote>

## `hugr-cli`

<blockquote>

##
[0.25.0](hugr-cli-v0.24.3...hugr-cli-v0.25.0)
- 2025-12-22

### New Features

- *(cli, python)* programmatic interface to cli with python bindings
([#2677](#2677))
- return description output to python on error
([#2681](#2681))
- [**breaking**] Type-safe access for node metadata
([#2755](#2755))
- [**breaking**] GeneratorDesc metadata definition
([#2759](#2759))

### Refactor

- [**breaking**] move envelope reading to dedicated module with
dedicated errors ([#2689](#2689))
- *(cli)* [**breaking**] remove deprecated hugr_json handling
([#2690](#2690))
- [**breaking**] Remove multiple deprecated definitions
([#2751](#2751))
</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]>
@hugrbot hugrbot mentioned this pull request Dec 23, 2025
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