-
Notifications
You must be signed in to change notification settings - Fork 1.1k
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
Devices: Full Clifford group gates support #3639
Labels
area/clifford-group
kind/roadmap-item
for higher level roadmap items to capture conversations and feedback (not for project tracking)
triage/discuss
Needs decision / discussion, bring these up during Cirq Cynque
Comments
Prior discussion on similar lines (I think): #2423 (comment) For the record, we already support detecting arbitrary 2x2 unitaries as Clifford or not (as the fallback strategy if the |
This was referenced May 9, 2021
CirqBot
pushed a commit
that referenced
this issue
May 20, 2021
The preparation step for making general Clifford Gates #3639. The basic logic of implementation is tracking the transformation of all generators of Pauli group. Namely, list the transform of first tableau:`U_1X_iU_1' = r_i \Prod_j X_j^{t_(i,j)} Z_i^{s_(i,j)}` and list the same thing for second tableau `U_2`, then combining them. With this method, it will allow us to build other unnamed Clifford Gates by composition.
CirqBot
pushed a commit
that referenced
this issue
May 21, 2021
Another preparation step for making general Clifford Gates #3639. The implementation relies on the `then` method (composing two Clifford tableaux) check the code in #4096. This branch is based on the branch used in #4096. Hence, there are a few `then` related codes, which should be orthogonal of this PR.
NoureldinYosri
pushed a commit
to NoureldinYosri/Cirq
that referenced
this issue
May 25, 2021
The preparation step for making general Clifford Gates quantumlib#3639. The basic logic of implementation is tracking the transformation of all generators of Pauli group. Namely, list the transform of first tableau:`U_1X_iU_1' = r_i \Prod_j X_j^{t_(i,j)} Z_i^{s_(i,j)}` and list the same thing for second tableau `U_2`, then combining them. With this method, it will allow us to build other unnamed Clifford Gates by composition.
NoureldinYosri
pushed a commit
to NoureldinYosri/Cirq
that referenced
this issue
May 25, 2021
Another preparation step for making general Clifford Gates quantumlib#3639. The implementation relies on the `then` method (composing two Clifford tableaux) check the code in quantumlib#4096. This branch is based on the branch used in quantumlib#4096. Hence, there are a few `then` related codes, which should be orthogonal of this PR.
This was referenced Jun 5, 2021
CirqBot
pushed a commit
that referenced
this issue
Sep 28, 2021
…rdTableau (#4165) The current implementation of SingleQubitCliffordGate is based on `rotation_map` and `inverse_rotation_map`. It is concise for SingleQubitCliffordGate but hard to extend into any number of qubits clifford gates. For generalization, this PR replaces them by the `CliffordTableau`. All functionalities and interfaces of SingleCliffordGate should be the same after the replacement. [WIP for #3639]. I didn't deprecate PauliTransform (#4088) in this PR for minimize the PR's responsibility. But after this PR, it will be easy to do it.
CirqBot
pushed a commit
that referenced
this issue
Oct 1, 2021
Decompose clifford tableau into one/two qubits operations (X, Z, S, H, CNOT, and SWAP). The method is based on [Aaronson & Gottesman's paper](https://arxiv.org/abs/quant-ph/0406196) [WIP for #3639]. Issue #4182 is discovered in this PR's test.
CirqBot
pushed a commit
that referenced
this issue
Feb 22, 2022
Add initial Clifford Gate with multiple qubits. Compared with SingleQubitCliffordGate, it has fewer functionalities since we cannot enumerate all of them with PauliGates and several special single qubit properties like Bloch rotation no longer exist. Anyway, it provides several basic interactions: 1. It uses Clifford tableau as underlying data representation (different from the state representation). 2. It can be constructed from a tableau or list of operations (`_has_stabilizer_effect_` only). All Clifford gates can be built through \{S, H, CNOT\}, so we can construct any Clifford Gate from the list of operations. We just cannot pre-define it. 3. Decomposing into several basic operations. 4. Get unitary matrix through decomposing (we cannot do this in a reverse way from unitary to Clifford gate :( ). 5. Know how to interact with ActOnCliffordTableauArgs, i.e. it should be able to use with CliffordTableau simulator (Looks like we don't have that in cirq yet? @daxfohl will add that? see #4639 and #4748.). This PR is part of efforts for #3639. Context: this PR doesn't introduce any new algorithms but the key methods are already implemented in #4183 and #4096.
95-martin-orion
pushed a commit
to 95-martin-orion/Cirq
that referenced
this issue
Mar 2, 2022
Add initial Clifford Gate with multiple qubits. Compared with SingleQubitCliffordGate, it has fewer functionalities since we cannot enumerate all of them with PauliGates and several special single qubit properties like Bloch rotation no longer exist. Anyway, it provides several basic interactions: 1. It uses Clifford tableau as underlying data representation (different from the state representation). 2. It can be constructed from a tableau or list of operations (`_has_stabilizer_effect_` only). All Clifford gates can be built through \{S, H, CNOT\}, so we can construct any Clifford Gate from the list of operations. We just cannot pre-define it. 3. Decomposing into several basic operations. 4. Get unitary matrix through decomposing (we cannot do this in a reverse way from unitary to Clifford gate :( ). 5. Know how to interact with ActOnCliffordTableauArgs, i.e. it should be able to use with CliffordTableau simulator (Looks like we don't have that in cirq yet? @daxfohl will add that? see quantumlib#4639 and quantumlib#4748.). This PR is part of efforts for quantumlib#3639. Context: this PR doesn't introduce any new algorithms but the key methods are already implemented in quantumlib#4183 and quantumlib#4096.
@MichaelBroughton is this resolved as of #4791? |
Confirmed with Mike, this is complete. |
rht
pushed a commit
to rht/Cirq
that referenced
this issue
May 1, 2023
The preparation step for making general Clifford Gates quantumlib#3639. The basic logic of implementation is tracking the transformation of all generators of Pauli group. Namely, list the transform of first tableau:`U_1X_iU_1' = r_i \Prod_j X_j^{t_(i,j)} Z_i^{s_(i,j)}` and list the same thing for second tableau `U_2`, then combining them. With this method, it will allow us to build other unnamed Clifford Gates by composition.
rht
pushed a commit
to rht/Cirq
that referenced
this issue
May 1, 2023
Another preparation step for making general Clifford Gates quantumlib#3639. The implementation relies on the `then` method (composing two Clifford tableaux) check the code in quantumlib#4096. This branch is based on the branch used in quantumlib#4096. Hence, there are a few `then` related codes, which should be orthogonal of this PR.
rht
pushed a commit
to rht/Cirq
that referenced
this issue
May 1, 2023
…rdTableau (quantumlib#4165) The current implementation of SingleQubitCliffordGate is based on `rotation_map` and `inverse_rotation_map`. It is concise for SingleQubitCliffordGate but hard to extend into any number of qubits clifford gates. For generalization, this PR replaces them by the `CliffordTableau`. All functionalities and interfaces of SingleCliffordGate should be the same after the replacement. [WIP for quantumlib#3639]. I didn't deprecate PauliTransform (quantumlib#4088) in this PR for minimize the PR's responsibility. But after this PR, it will be easy to do it.
rht
pushed a commit
to rht/Cirq
that referenced
this issue
May 1, 2023
Decompose clifford tableau into one/two qubits operations (X, Z, S, H, CNOT, and SWAP). The method is based on [Aaronson & Gottesman's paper](https://arxiv.org/abs/quant-ph/0406196) [WIP for quantumlib#3639]. Issue quantumlib#4182 is discovered in this PR's test.
rht
pushed a commit
to rht/Cirq
that referenced
this issue
May 1, 2023
Add initial Clifford Gate with multiple qubits. Compared with SingleQubitCliffordGate, it has fewer functionalities since we cannot enumerate all of them with PauliGates and several special single qubit properties like Bloch rotation no longer exist. Anyway, it provides several basic interactions: 1. It uses Clifford tableau as underlying data representation (different from the state representation). 2. It can be constructed from a tableau or list of operations (`_has_stabilizer_effect_` only). All Clifford gates can be built through \{S, H, CNOT\}, so we can construct any Clifford Gate from the list of operations. We just cannot pre-define it. 3. Decomposing into several basic operations. 4. Get unitary matrix through decomposing (we cannot do this in a reverse way from unitary to Clifford gate :( ). 5. Know how to interact with ActOnCliffordTableauArgs, i.e. it should be able to use with CliffordTableau simulator (Looks like we don't have that in cirq yet? @daxfohl will add that? see quantumlib#4639 and quantumlib#4748.). This PR is part of efforts for quantumlib#3639. Context: this PR doesn't introduce any new algorithms but the key methods are already implemented in quantumlib#4183 and quantumlib#4096.
harry-phasecraft
pushed a commit
to PhaseCraft/Cirq
that referenced
this issue
Oct 31, 2024
The preparation step for making general Clifford Gates quantumlib#3639. The basic logic of implementation is tracking the transformation of all generators of Pauli group. Namely, list the transform of first tableau:`U_1X_iU_1' = r_i \Prod_j X_j^{t_(i,j)} Z_i^{s_(i,j)}` and list the same thing for second tableau `U_2`, then combining them. With this method, it will allow us to build other unnamed Clifford Gates by composition.
harry-phasecraft
pushed a commit
to PhaseCraft/Cirq
that referenced
this issue
Oct 31, 2024
Another preparation step for making general Clifford Gates quantumlib#3639. The implementation relies on the `then` method (composing two Clifford tableaux) check the code in quantumlib#4096. This branch is based on the branch used in quantumlib#4096. Hence, there are a few `then` related codes, which should be orthogonal of this PR.
harry-phasecraft
pushed a commit
to PhaseCraft/Cirq
that referenced
this issue
Oct 31, 2024
…rdTableau (quantumlib#4165) The current implementation of SingleQubitCliffordGate is based on `rotation_map` and `inverse_rotation_map`. It is concise for SingleQubitCliffordGate but hard to extend into any number of qubits clifford gates. For generalization, this PR replaces them by the `CliffordTableau`. All functionalities and interfaces of SingleCliffordGate should be the same after the replacement. [WIP for quantumlib#3639]. I didn't deprecate PauliTransform (quantumlib#4088) in this PR for minimize the PR's responsibility. But after this PR, it will be easy to do it.
harry-phasecraft
pushed a commit
to PhaseCraft/Cirq
that referenced
this issue
Oct 31, 2024
Decompose clifford tableau into one/two qubits operations (X, Z, S, H, CNOT, and SWAP). The method is based on [Aaronson & Gottesman's paper](https://arxiv.org/abs/quant-ph/0406196) [WIP for quantumlib#3639]. Issue quantumlib#4182 is discovered in this PR's test.
harry-phasecraft
pushed a commit
to PhaseCraft/Cirq
that referenced
this issue
Oct 31, 2024
Add initial Clifford Gate with multiple qubits. Compared with SingleQubitCliffordGate, it has fewer functionalities since we cannot enumerate all of them with PauliGates and several special single qubit properties like Bloch rotation no longer exist. Anyway, it provides several basic interactions: 1. It uses Clifford tableau as underlying data representation (different from the state representation). 2. It can be constructed from a tableau or list of operations (`_has_stabilizer_effect_` only). All Clifford gates can be built through \{S, H, CNOT\}, so we can construct any Clifford Gate from the list of operations. We just cannot pre-define it. 3. Decomposing into several basic operations. 4. Get unitary matrix through decomposing (we cannot do this in a reverse way from unitary to Clifford gate :( ). 5. Know how to interact with ActOnCliffordTableauArgs, i.e. it should be able to use with CliffordTableau simulator (Looks like we don't have that in cirq yet? @daxfohl will add that? see quantumlib#4639 and quantumlib#4748.). This PR is part of efforts for quantumlib#3639. Context: this PR doesn't introduce any new algorithms but the key methods are already implemented in quantumlib#4183 and quantumlib#4096.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Labels
area/clifford-group
kind/roadmap-item
for higher level roadmap items to capture conversations and feedback (not for project tracking)
triage/discuss
Needs decision / discussion, bring these up during Cirq Cynque
Feature: Full Clifford group support
Problem: Currently Clifford group gates are supported via the addition of the act_on to gates in Cirq (this is a work in progress). This means only certain gates can be simulated. One could instead support the entire Clifford group via it’s specification of a symplectic matrices plus a vector describing the phases of the Pauli group. In addition this would include better support for the Pauli group and stabilizer groups to the level of supporting NISQ quantum error correction work (error mitigation)
Rough requirements:
The text was updated successfully, but these errors were encountered: