Skip to content

Conversation

lmondada
Copy link
Contributor

@lmondada lmondada commented May 20, 2025

The boundary map was recently removed in SimpleReplacement. Whereas previously, a boundary map could be defined to e.g. permutate the inputs and outputs between the subgraph and the provided replacement, the replacement must now match the subgraph function type as is.

This PR adds a map_function_type method on DFG HUGRs that can be used to reorder and copy/discard inputs and outputs to the DFG pointed by the entrypoint. For the HUGR to be valid, it is also necessary to update the signatures and links in any enclosing DFGs in the ancestors of the entrypoint.

Closes #2211

@lmondada lmondada requested a review from a team as a code owner May 20, 2025 15:03
@lmondada lmondada requested a review from cqc-alec May 20, 2025 15:03
Copy link

codecov bot commented May 20, 2025

Codecov Report

Attention: Patch coverage is 94.96855% with 16 lines in your changes missing coverage. Please review.

Project coverage is 82.15%. Comparing base (9b3fbb4) to head (60400fa).
Report is 1 commits behind head on main.

Files with missing lines Patch % Lines
hugr-core/src/hugr/views/root_checked/dfg.rs 94.96% 10 Missing and 6 partials ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main    #2239      +/-   ##
==========================================
+ Coverage   82.04%   82.15%   +0.10%     
==========================================
  Files         234      235       +1     
  Lines       41704    42022     +318     
  Branches    37616    37934     +318     
==========================================
+ Hits        34216    34523     +307     
- Misses       5513     5518       +5     
- Partials     1975     1981       +6     
Flag Coverage Δ
python 85.34% <ø> (ø)
rust 81.81% <94.96%> (+0.12%) ⬆️

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.

@lmondada lmondada force-pushed the luca/map-signature branch 2 times, most recently from d8f84e1 to e32942c Compare May 21, 2025 08:41
@lmondada lmondada force-pushed the luca/map-signature branch from e32942c to f283505 Compare May 21, 2025 08:43
Copy link
Collaborator

@cqc-alec cqc-alec left a comment

Choose a reason for hiding this comment

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

This looks good. Apart from some trivial changes to error messages, the only request I have is for a couple more tests: one to demonstrate "recursively updating the signatures of all ancestors of the entrypoint"; and one where the input and output wires are each permuted in a non-self-inverse manner, e.g. a cyclic permutation of order 3.

lmondada and others added 4 commits May 22, 2025 10:10
Co-authored-by: Alec Edgington <54802828+cqc-alec@users.noreply.github.com>
Co-authored-by: Alec Edgington <54802828+cqc-alec@users.noreply.github.com>
Co-authored-by: Alec Edgington <54802828+cqc-alec@users.noreply.github.com>
Co-authored-by: Alec Edgington <54802828+cqc-alec@users.noreply.github.com>
@lmondada
Copy link
Contributor Author

Thanks for the review @cqc-alec, I've added the two tests as you requested.

@lmondada lmondada force-pushed the luca/map-signature branch from 59e4e4b to 60400fa Compare May 22, 2025 09:12
@lmondada lmondada enabled auto-merge May 22, 2025 09:14
@lmondada lmondada added this pull request to the merge queue May 22, 2025
Merged via the queue into main with commit 95da129 May 22, 2025
27 checks passed
@lmondada lmondada deleted the luca/map-signature branch May 22, 2025 09:20
@hugrbot hugrbot mentioned this pull request May 20, 2025
This was referenced May 29, 2025
github-merge-queue bot pushed a commit that referenced this pull request Jun 3, 2025
## 🤖 New release

* `hugr-model`: 0.20.0 -> 0.20.1
* `hugr-core`: 0.20.0 -> 0.20.1 (✓ API compatible changes)
* `hugr-llvm`: 0.20.0 -> 0.20.1 (✓ API compatible changes)
* `hugr-passes`: 0.20.0 -> 0.20.1 (✓ API compatible changes)
* `hugr`: 0.20.0 -> 0.20.1 (✓ API compatible changes)
* `hugr-cli`: 0.20.0 -> 0.20.1 (✓ API compatible changes)

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

## `hugr-model`

<blockquote>

##
[0.20.0](hugr-model-v0.19.0...hugr-model-v0.20.0)
- 2025-05-14

### New Features

- [**breaking**] Mark all Error enums as non_exhaustive
([#2056](#2056))
- [**breaking**] Bump MSRV to 1.85
([#2136](#2136))
- Export and import entrypoints via metadata in `hugr-model`.
([#2172](#2172))
- Define text-model envelope formats
([#2188](#2188))
- Import CFG regions without adding an entry block.
([#2200](#2200))
- Symbol applications can leave out prefixes of wildcards.
([#2201](#2201))
</blockquote>

## `hugr-core`

<blockquote>

##
[0.20.1](hugr-core-v0.20.0...hugr-core-v0.20.1)
- 2025-06-03

### Bug Fixes

- check well-definedness of DFG wires in validate
([#2221](#2221))
- Check for order edges in SiblingSubgraph::from_node
([#2223](#2223))
- Make SumType::Unit(N) equal to SumType::General([(); N])
([#2250](#2250))
- canonicalize_nodes sometimes mangles the entrypoint
([#2263](#2263))

### New Features

- Add PersistentHugr ([#2080](#2080))
- Add `Type::used_extensions`
([#2224](#2224))
- Add boundary edge traversal in SimpleReplacement
([#2231](#2231))
- Add signature map function for DFGs
([#2239](#2239))
- PersistentHugr implements HugrView
([#2202](#2202))
- PersistentHugr Walker API
([#2168](#2168))
- Hugr::store_with_exts and auto-include in serde_as
([#2280](#2280))

### Refactor

- tidies/readability improvements to PersistentHugr
([#2251](#2251))
- Deprecate ValidationError::ExtensionError
([#2281](#2281))

### Testing

- Ignore miri errors in tests involving `assert_snapshot`
([#2261](#2261))
</blockquote>

## `hugr-llvm`

<blockquote>

##
[0.20.1](hugr-llvm-v0.20.0...hugr-llvm-v0.20.1)
- 2025-06-03

### Bug Fixes

- Make SumType::Unit(N) equal to SumType::General([(); N])
([#2250](#2250))

### Testing

- Add exec tests for widen op
([#2043](#2043))
</blockquote>

## `hugr-passes`

<blockquote>

##
[0.20.1](hugr-passes-v0.20.0...hugr-passes-v0.20.1)
- 2025-06-03

### Bug Fixes

- Dataflow analysis produces unsound results on Hugrs with entrypoint
([#2255](#2255))

### New Features

- LocalizeEdges pass ([#2237](#2237))
</blockquote>

## `hugr`

<blockquote>

##
[0.20.1](hugr-v0.20.0...hugr-v0.20.1)
- 2025-06-03

### Bug Fixes

- Dataflow analysis produces unsound results on Hugrs with entrypoint
([#2255](#2255))
- check well-definedness of DFG wires in validate
([#2221](#2221))
- Check for order edges in SiblingSubgraph::from_node
([#2223](#2223))
- Make SumType::Unit(N) equal to SumType::General([(); N])
([#2250](#2250))
- canonicalize_nodes sometimes mangles the entrypoint
([#2263](#2263))

### New Features

- LocalizeEdges pass ([#2237](#2237))
- Add PersistentHugr ([#2080](#2080))
- Add `Type::used_extensions`
([#2224](#2224))
- Add boundary edge traversal in SimpleReplacement
([#2231](#2231))
- Add signature map function for DFGs
([#2239](#2239))
- PersistentHugr implements HugrView
([#2202](#2202))
- PersistentHugr Walker API
([#2168](#2168))
- Hugr::store_with_exts and auto-include in serde_as
([#2280](#2280))

### Refactor

- tidies/readability improvements to PersistentHugr
([#2251](#2251))
- Deprecate ValidationError::ExtensionError
([#2281](#2281))

### Testing

- Ignore miri errors in tests involving `assert_snapshot`
([#2261](#2261))
</blockquote>

## `hugr-cli`

<blockquote>

##
[0.20.1](hugr-cli-v0.20.0...hugr-cli-v0.20.1)
- 2025-06-03

### New Features

- support external subcommands via PATH
([#1343](#1343))
([#2278](#2278))
</blockquote>


</p></details>

---
This PR was generated with
[release-plz](https://github.com/release-plz/release-plz/).
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.

Add change_function_type for HugrView DFGs

2 participants