-
Notifications
You must be signed in to change notification settings - Fork 6
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
feat: Use tket1 and tket2 circuits interchangeably everywhere #243
Conversation
Codecov ReportAll modified and coverable lines are covered by tests ✅
Additional details and impacted files@@ Coverage Diff @@
## main #243 +/- ##
============================================
+ Coverage 82.78% 100.00% +17.21%
============================================
Files 34 4 -30
Lines 4234 99 -4135
Branches 4149 0 -4149
============================================
- Hits 3505 99 -3406
+ Misses 542 0 -542
+ Partials 187 0 -187 ☔ View full report in Codecov by Sentry. |
|
||
/// Encode the circuit as a HUGR json string. | ||
pub fn to_hugr_json(&self) -> PyResult<String> { | ||
Ok(serde_json::to_string(&self.hugr).unwrap()) |
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.
a note that previously we have used messagepack (and the behaviour between json and messagepack is not always identical), but I'm ok avoiding the extra python dependency here for now - at least until the serialized format gets a bit more stable (hopefully soon)
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.
Added a TODO
tket2-py/src/circuit.rs
Outdated
#[pyfunction] | ||
pub fn to_hugr(c: Py<PyAny>) -> PyResult<T2Circuit> { | ||
with_hugr(c, |hugr| hugr.into()) | ||
pub fn tket1_to_tket2(c: &PyAny) -> PyResult<T2Circuit> { |
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.
these function names are very easy to confuse, in python I think obj.to_tket1()
and obj.to_tket2()
might be nicer?
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.
We cant add a tket1.Circuit.to_tket2
, but I'll drop these and leave
Tk2Circuit(&tket1) -> Self
Tk2Circuit.to_tket1(&self) -> tket1
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.
well...it's python so you probably can add it with some horrible hacking. But i'm happier with this.
tket2-py/src/circuit/convert.rs
Outdated
/// Rust representation of the circuit. | ||
pub hugr: Hugr, | ||
} | ||
|
||
#[pymethods] | ||
impl T2Circuit { | ||
impl Tk2Circuit { | ||
/// Cast a tket1 circuit to a [`Tk2Circuit`]. |
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.
still a couple mentions of "cast"?
🤖 I have created a release *beep* *boop* --- ## 0.1.0 (2024-06-28) ### ⚠ BREAKING CHANGES * require `hugr-0.5.0` * Replaced `tket2.circuit.OpConvertError` with `tket2.circuit.TK1ConvertError` in the python lib. * Moved `tket2::json` to `tket2::serialize::pytket` * Replaced the `Circuit` trait with a wrapper struct. * This is a breaking change to the compiled rewriter serialisation format. ### Features * Add a "progress timeout" to badger ([#259](#259)) ([556cf64](556cf64)) * Add missing typing hints ([#352](#352)) ([4990613](4990613)) * bindings for circuit cost and hash ([#252](#252)) ([85ce5f9](85ce5f9)) * drop pyo3 core dep ([#355](#355)) ([9f7d415](9f7d415)) * EccRewriter bindings ([#251](#251)) ([97e2e0a](97e2e0a)) * guppy → pytket conversion ([#407](#407)) ([8c5a487](8c5a487)) * Implement `PyErr` conversion locally in `tket2-py` ([#258](#258)) ([3e1a68d](3e1a68d)) * init tket2-hseries ([#368](#368)) ([61e7535](61e7535)) * pauli propagation use case example ([#333](#333)) ([f46973c](f46973c)) * **py:** Allow using `Tk2Op`s in the builder ([#436](#436)) ([aed8651](aed8651)) * Support any ops in portmatching ([#293](#293)) ([6b05a05](6b05a05)) * **tket2-py:** Bind the `lower_to_pytket` pass in python ([#439](#439)) ([8208324](8208324)) * Use tket1 and tket2 circuits interchangeably everywhere ([#243](#243)) ([eac7acf](eac7acf)) * Utilities for loading compiled guppy circuits ([#393](#393)) ([028779a](028779a)) ### Bug Fixes * failed importlib import ([#254](#254)) ([b077660](b077660)) * induced cycles in depth optimisation ([#264](#264)) ([68c9ff2](68c9ff2)), closes [#253](#253) * Make native py modules behave like python's ([#212](#212)) ([4220038](4220038)), closes [#209](#209) * pytest failing to find `tket2` in CI ([#367](#367)) ([a9df8e6](a9df8e6)) * **tket2-py:** Replace `with_hugr` helpers with `with_circ`, keeping the circuit parent. ([#438](#438)) ([b77b3cb](b77b3cb)) ### Documentation * Add some example notebooks for the python package. ([#443](#443)) ([4ed276c](4ed276c)), closes [#434](#434) * Update tket2-py readme ([6c8f18a](6c8f18a)) ### Code Refactoring * Rename `tket2::json` into `tket2::serialize::pytket` ([#392](#392)) ([93e611c](93e611c)) * Replace Circuit trait with a struct ([#370](#370)) ([ec5dd22](ec5dd22)) * Simplify tket1 conversion errors ([#408](#408)) ([b0b8aff](b0b8aff)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). --------- Co-authored-by: Agustin Borgna <agustin.borgna@quantinuum.com>
Adds a
tket1
/tket2
to thewith_hugr
helpers, so we always know what format to output afterwards.The more noisy part of this commit changing all the GIL-independent types to capturing references, so we don't have to manually lock multiple times per call.
Closes #178.