-
Notifications
You must be signed in to change notification settings - Fork 48
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
Update MultiplexedTensoredU2Box Circuit Construction #1443
Conversation
@@ -96,6 +96,22 @@ class MultiplexorBox : public Box { | |||
ctrl_op_map_t op_map_; | |||
}; | |||
|
|||
struct GateSpec { | |||
// TODO: this struct is a little confused as only CX needs qubit, only |
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.
Perhaps we can have three constructors?
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.
Yeah that makes so much more sense - will do it
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
// we also need to map gate.qubit to the correct qubit | ||
// we know that the bitstrings for the "target"th target have been | ||
// left rotated by "target", so: | ||
rotated_index = (*gate.qubit + (target % n_targets_)) % n_controls_; |
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'm a little confused by this...
return; | ||
} | ||
|
||
Eigen::VectorXcd combine_diagonals( |
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.
Can you explain how this rotate
works?
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.
Looks good! Just need to bump the tket lib version
* Allow barriers when dagger or transpose circuits (#1400) * Allow barriers in dagger() and transpose() * bump tket version * add changelog entry * Format test * Bump cachix/install-nix-action from 26 to 27 (#1403) Bumps [cachix/install-nix-action](https://github.com/cachix/install-nix-action) from 26 to 27. - [Release notes](https://github.com/cachix/install-nix-action/releases) - [Commits](cachix/install-nix-action@v26...V27) --- updated-dependencies: - dependency-name: cachix/install-nix-action dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Bump actions/add-to-project from 0.6.1 to 1.0.1 (#1404) Bumps [actions/add-to-project](https://github.com/actions/add-to-project) from 0.6.1 to 1.0.1. - [Release notes](https://github.com/actions/add-to-project/releases) - [Commits](actions/add-to-project@v0.6.1...v1.0.1) --- updated-dependencies: - dependency-name: actions/add-to-project dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Use `ubuntu-24.04` on CI (#1401) * Add OpType.CnRx and OpType.CnRz (#1405) * Add CnRx and CnRz * Update circuit_test.py * re clang format * regen stubs * Update changelog.rst * bump version * Unbump changelog... oops * Update ControlledGates.cpp * split controlled phase gate decomp * Update circuit_test.py * Update OpType.hpp * Update `place_fully_connected` (#1409) * update place_fully_connected * Update placement.cpp * Update placement_test.py * Bump cachix/cachix-action from 14 to 15 (#1416) Bumps [cachix/cachix-action](https://github.com/cachix/cachix-action) from 14 to 15. - [Release notes](https://github.com/cachix/cachix-action/releases) - [Commits](cachix/cachix-action@v14...v15) --- updated-dependencies: - dependency-name: cachix/cachix-action dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Post benchmarking results to slack (#1417) * Post results to slack * Remove run on PR * Remove documentation * Remove pr comment * Refactor auto rebase and auto squash (#1410) * Implement python rebase functions in C++ * Implement auto_rebase in c++ * Implement auto_squash in c++ * Test exception handling * Add AutoRebase, AutoSquash to binder * Update circuit_library * Update json schema * deprecate auto_rebase and auto_squash * Fix bug * Replace auto_rebase_pass and auto_squash_pass with AutoRebase and AutoSquash * Remove auto_rebase_pass and auto_squash_pass from docs * Bump tket version * Remove extra lines in docs * Regenerate stubs * Add changelog entry * Fix linting errors * Sorted gate sets in serialisation * Better deprecation handling * Add docs for added CircPool functions * Add comment to hard-to-understand test * Fix typo in json schema * Replace `find()` with `contains()` * Set `always_squash_symbols` to false when squash `Rz` and `PhasedX` * Revert to using ubuntu-22.04 runner for valgrind checks. (#1432) * Handle `NPhasedX` gates in `decompose_cliffords_std()` (#1431) * Add workflow to mark stale issues and PRs. (#1437) * update remove blank wires to keep classical bits (#1435) * update remove blank wires * add testcase * update changelog * update tket version * update testcases * update regen stubs * fix typo * add param to remove_classical_wire in python * regen stubs * Update pytket/docs/changelog.rst Co-authored-by: Alec Edgington <54802828+cqc-alec@users.noreply.github.com> * rename parameter to keep_blank_classical_wires * update tket version * fix param * Update pytket/binders/circuit/Circuit/main.cpp Co-authored-by: Alec Edgington <54802828+cqc-alec@users.noreply.github.com> * Update pytket/binders/circuit/Circuit/main.cpp Co-authored-by: Alec Edgington <54802828+cqc-alec@users.noreply.github.com> * Update pytket/pytket/_tket/circuit.pyi Co-authored-by: Alec Edgington <54802828+cqc-alec@users.noreply.github.com> * update testcases to use bits and qubits * regen stubs --------- Co-authored-by: Alec Edgington <54802828+cqc-alec@users.noreply.github.com> * Try running ZX test with all Python versions. (#1438) * Update Windows compiler version. (#1442) * Fix FlattenRelabelRegistersPass (#1441) * update tket version * update parameter of remove_blank_wires in gen_flatten_relabel_registers_pass * add python testcase for compilation pass flatten_relabel * update tket version * Allow classical transforms and predicates on up to 64 bits (#1446) * Update docs and changelog for 1.29.0 release. (#1447) * Update MultiplexedTensoredU2Box Circuit Construction (#1443) * First changes, compiling but returning incorrect results * MultiplexedU2Box construction working * hmm * refactor to separate * Update Multiplexor.cpp * Working on specific cases * Update test_Multiplexor.cpp * Update test_Multiplexor.cpp * working on most cases ... * Refactor into separate methods * refactor again and neaten code up * Tidied, failling test for mystery reasons, moving on ... * Multiplexed-rz with interleaved gates * Tidy for PR * bump * Update Multiplexor.hpp * Update Multiplexor.hpp * Update test_Multiplexor.cpp * Update Multiplexor.cpp * attempt to remove mismatch ?? * Update Multiplexor.cpp * Update Multiplexor.cpp * fix * changes * update rz rotation indexing * add asserts * update error threshold * add multiple constructors * bump * Update changelog.rst * Revert switch from 32- to 64-bit maximum width (#1449) * Update docs and changelog for 1.29.1 release. (#1451) * Revert to removing blank classical wires in `FlattenRelabelRegistersPass` (#1453) * Update docs and changelog for 1.29.2 release. (#1454) * remove space --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: yao-cqc <75305462+yao-cqc@users.noreply.github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Alec Edgington <54802828+cqc-alec@users.noreply.github.com> Co-authored-by: Silas Dilkes <36165522+sjdilkes@users.noreply.github.com> Co-authored-by: Dan Mills <52407433+daniel-mills-cqc@users.noreply.github.com> Co-authored-by: cqc-melf <70640934+cqc-melf@users.noreply.github.com>
By interleaving the
{CX,U1}
and{CX, Rz}
subcircuits comprising theMultiplexedTensoredU2Box
Circuit construction, we can improve the Circuit depth without changing the number of gates.This PR updates the
MultiplexedRotationBox::decompose
andMultiplexedU2Box::decompose
methods to return, essentially, lists of relevant commands instead of modifying aCircuit
object passed by reference.For
MultiplexedRotationBox::generate_circuit
andMultiplexedU2Box::generate_circuit
a Circuit object is constructed by iterating through these commands and adding to aCircuit
object.In
MultiplexedTensoredU2Box
, the construction is broken down into a series ofMultiplexedU2Box
, each synthesised separately. Now, when these new lists are returned fromdecompose
, by synthesising eachMultiplexedU2Box
individually, the gates at the same index for each list are added at the same time. Additionally, the control conditions for eachMultiplexedU2Box
are permuted s.t. the order of CX gates for the{CX,U1}
and{CX, Rz}
subcircuits can differ between each construction.N.B. This is a draft PR as there are a couple of edge cases that generate the wrong unitary that I can't pinpoint the issue with. I thought some time and placating the CI might help me clock the issue. *I wasn't initialising a float to 0 and an error threshold was too high.
Checklist