Skip to content

feat: Add CopyableExpressionAST#1209

Merged
lmondada merged 6 commits intomainfrom
lm/copyable-expr-pr
Oct 30, 2025
Merged

feat: Add CopyableExpressionAST#1209
lmondada merged 6 commits intomainfrom
lm/copyable-expr-pr

Conversation

@lmondada
Copy link
Copy Markdown
Contributor

@lmondada lmondada commented Oct 28, 2025

I want to define a Subcircuit as a combination of Intervals on resource paths (the parts with linear, non-copyable data), and ASTs of fully classical, copyable data.

@lmondada lmondada force-pushed the lm/copyable-expr-pr branch from 3249a88 to 16e358a Compare October 28, 2025 14:33
@codecov
Copy link
Copy Markdown

codecov bot commented Oct 28, 2025

Codecov Report

❌ Patch coverage is 93.53234% with 13 lines in your changes missing coverage. Please review.
✅ Project coverage is 78.97%. Comparing base (d34b013) to head (c7278d6).
⚠️ Report is 1 commits behind head on main.

Files with missing lines Patch % Lines
tket/src/subcircuit/expression.rs 94.35% 9 Missing and 1 partial ⚠️
tket/src/resource/scope.rs 87.50% 3 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main    #1209      +/-   ##
==========================================
+ Coverage   78.77%   78.97%   +0.20%     
==========================================
  Files         153      154       +1     
  Lines       18910    19111     +201     
  Branches    17808    18009     +201     
==========================================
+ Hits        14896    15093     +197     
- Misses       3070     3076       +6     
+ Partials      944      942       -2     
Flag Coverage Δ
python 92.65% <ø> (ø)
qis-compiler 68.40% <ø> (ø)
rust 78.59% <93.53%> (+0.21%) ⬆️

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 lm/copyable-expr-pr branch 2 times, most recently from cadeb13 to 244a2f8 Compare October 28, 2025 14:39
@lmondada lmondada force-pushed the lm/copyable-expr-pr branch from 244a2f8 to 0ba8534 Compare October 28, 2025 14:49
@lmondada lmondada marked this pull request as ready for review October 28, 2025 14:49
@lmondada lmondada requested a review from a team as a code owner October 28, 2025 14:49
@lmondada lmondada requested review from acl-cqc and cqc-alec and removed request for cqc-alec October 28, 2025 14:49
Copy link
Copy Markdown
Contributor

@acl-cqc acl-cqc left a comment

Choose a reason for hiding this comment

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

I've suggested a lot of renamings and minor stuff, but nothing major, so I guess I'm happy for this to go in, but with the proviso...

...that I am still not certain whether we shouldn't have a single SiblingSubgraph for all the classical computation associated with a set of intervals rather than many potentially-overlapping ones...maybe I would need to see some examples

@lmondada
Copy link
Copy Markdown
Contributor Author

not certain whether we shouldn't have a single SiblingSubgraph for all the classical computation associated with a set of intervals rather than many potentially-overlapping ones...

I agree that the fact that multiple copyable expressions might have overlapping nodes is not great. That being said

  1. your suggestion would require removing the convexity assumption (and enforcement) of [SiblingSubgraph] in hugr. This move would be quite breaking and should be thought through well. Might be something to add to clean-up november+december 😅 I agree that if non-convex SiblingSubgraphs existed, we could design this differently
  2. You'll see in the upcoming Subcircuit PR that these (overlapping) copyable expressions are not stored within the subcircuit -- they are constructed on the fly from the set of inputs of the subcircuit. In other words, they are not part of the data of the subcircuit, but are much more like computable properties of the subcircuit. Thus, the fact that overlapping expressions can be produced depending on which copyable values we are interested in is not so concerning.

Overall, I agree that there are further follow-ups and clean-ups that should be considered and executed, but this is a step in the right direction: it's helping construct a layer of abstraction above SiblingSubgraph, which is badly needed.

@lmondada
Copy link
Copy Markdown
Contributor Author

Thanks a lot Alan for the review!! Will now go through your comments and merge this in.

@lmondada lmondada enabled auto-merge October 30, 2025 11:04
@lmondada lmondada added this pull request to the merge queue Oct 30, 2025
Merged via the queue into main with commit 52fc658 Oct 30, 2025
24 checks passed
@lmondada lmondada deleted the lm/copyable-expr-pr branch October 30, 2025 11:12
@hugrbot hugrbot mentioned this pull request Oct 27, 2025
github-merge-queue bot pushed a commit that referenced this pull request Feb 3, 2026
## 🤖 New release

* `tket`: 0.16.0 -> 0.17.0 (✓ API compatible changes)
* `tket-qsystem`: 0.22.0 -> 0.23.0 (✓ API compatible changes)

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

## `tket`

<blockquote>

##
[0.17.0](tket-v0.16.0...tket-v0.17.0)
- 2026-02-02

### Bug Fixes

- *(encoded-circ)* Track unsupported wires between input and output
([#1224](#1224))
- Multiple fixes to the pytket encoder
([#1226](#1226))
- Don't use opgroup in pytket barrier encoding
([#1251](#1251))
- guppy_to_circuit always returns num_operations = 0
([#1200](#1200))
- *(pytket-decoder)* Avoid QAllocating and immediately freeing qubits
([#1256](#1256))
- Encoding of opaque subgraphs with no associated qubit/bit
([#1295](#1295))
- [**breaking**] Don't rely on command params for pytket barriers
([#1298](#1298))
- Track output qubits in CircuitInfo
([#1304](#1304))
- Wrongly reused qubit IDs in pytket encoding
([#1358](#1358))

### New Features

- Deprecate local find_tuple_unpack rewrite
([#1188](#1188))
- Add CopyableExpressionAST
([#1209](#1209))
- `NormalizeGuppy` pass to simplify generated structure
([#1220](#1220))
- [**breaking**] pytket EncodedCircuit struct for in-place pytket
optimisation ([#1211](#1211))
- [**breaking**] Interval is independent of resource IDs and scope
position ([#1205](#1205))
- Don't translate usizes to pytket
([#1241](#1241))
- BorrowSquashPass to elide redundant borrow/return ops
([#1159](#1159))
- [**breaking**] Bump hugr to 0.25.0
([#1325](#1325))
- Remove order edges in NormalizeGuppy pass
([#1326](#1326))
- [**breaking**] Remove deprecated unpack tuple pass
([#1387](#1387))

### Refactor

- Remove contain_qubits, use TypeUnpacker
([#1283](#1283))
- [**breaking**] Replace Subcircuit with SiblingSubgraph
([#1288](#1288))
- *(metadata)* [**breaking**] Migrate all metadata keys onto the new
metadata traits ([#1328](#1328))
</blockquote>

## `tket-qsystem`

<blockquote>

##
[0.23.0](tket-qsystem-v0.22.0...tket-qsystem-v0.23.0)
- 2026-02-02

### Bug Fixes

- [**breaking**] Don't rely on command params for pytket barriers
([#1298](#1298))
- Wrongly reused qubit IDs in pytket encoding
([#1358](#1358))

### New Features

- `NormalizeGuppy` pass to simplify generated structure
([#1220](#1220))
- Allow running arbitrary serializable pytket passes on hugrs
([#1266](#1266))
- BorrowSquashPass to elide redundant borrow/return ops
([#1159](#1159))
- [**breaking**] Bump hugr to 0.25.0
([#1325](#1325))
- Remove order edges in NormalizeGuppy pass
([#1326](#1326))
- hide new public funcs introduced by linearization
([#1333](#1333))

### Testing

- regenerate guppy_opt examples, and count gates
([#1249](#1249))
- run pytket on guppy_opt tests, measure (very limited) success
([#1250](#1250))
</blockquote>


</p></details>

---
This PR was generated with
[release-plz](https://github.com/release-plz/release-plz/).
@hugrbot hugrbot mentioned this pull request Feb 5, 2026
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