Skip to content

Commit

Permalink
Merge branch 'master' into Golay
Browse files Browse the repository at this point in the history
  • Loading branch information
Fe-r-oz authored Nov 27, 2024
2 parents 93a87db + 5fcf353 commit ca7c53d
Show file tree
Hide file tree
Showing 68 changed files with 2,798 additions and 492 deletions.
8 changes: 8 additions & 0 deletions .github/workflows/ci-julia-nightly.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,14 @@ on:
branches: [master, main]
tags: ["*"]
pull_request:

concurrency:
# group by workflow and ref; the last slightly strange component ensures that for pull
# requests, we limit to 1 concurrent job, but for the master branch we don't
group: ${{ github.workflow }}-${{ github.ref }}-${{ (github.ref != 'refs/heads/master' && github.ref != 'refs/heads/main') || github.run_number }}
# Cancel intermediate builds, but only if it is a pull request build.
cancel-in-progress: ${{ startsWith(github.ref, 'refs/pull/') }}

env:
PYTHON: ~
jobs:
Expand Down
10 changes: 9 additions & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,14 @@ on:
branches: [master, main]
tags: ["*"]
pull_request:

concurrency:
# group by workflow and ref; the last slightly strange component ensures that for pull
# requests, we limit to 1 concurrent job, but for the master branch we don't
group: ${{ github.workflow }}-${{ github.ref }}-${{ (github.ref != 'refs/heads/master' && github.ref != 'refs/heads/main') || github.run_number }}
# Cancel intermediate builds, but only if it is a pull request build.
cancel-in-progress: ${{ startsWith(github.ref, 'refs/pull/') }}

env:
PYTHON: ~
jobs:
Expand All @@ -15,7 +23,7 @@ jobs:
matrix:
version:
- '1'
- '1.9'
- '1.10'
os:
- ubuntu-latest
threads:
Expand Down
4 changes: 3 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,6 @@ LocalPreferences.toml
*/.*swp
scratch/
*.cov
.vscode
.vscode
test/.CondaPkg/
docs/.CondaPkg/
35 changes: 35 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,41 @@

# News

## v0.9.14 - 2024-11-03

- **(fix)** `affectedqubits()` on `sMX`, `sMY`, and `sMR*`
- **(fix)** restrictive type-assert in `MixedDestabilizer` failing on views of tableaux
- Implementing additional named two-qubit gates: `sSQRTXX, sInvSQRTXX, sSQRTYY, sInvSQRTYY`

## v0.9.13 - 2024-10-30

- New error-correction group theory tools:
- `canonicalize_noncomm` function to find a generating set with minimal anticommutivity
- `SubsystemCodeTableau` data structure to represent the output of `canonicalize_noncomm`
- `commutify` function to find a commutative version of a non-commutative set of Paulis with minimal changes
- `matroid_parent` to, for set of Paulis that doesn't represent a state, find a version
that does.
- Implementing additional named two-qubit gates: `sSWAPCX, sInvSWAPCX, sCZSWAP, sCXSWAP, sISWAP, sInvISWAP, sSQRTZZ, sInvSQRTZZ`

## v0.9.12 - 2024-10-18

- Minor compat fixes for julia 1.11 in the handling of `hgp`

## v0.9.11 - 2024-09-27

- `hcat` of Tableaux objects
- `QuantumReedMuller` codes added to the ECC module
- **(breaking)** change the convention for how to provide a representation function in the constructor of `LPCode` -- strictly speaking a breaking change, but this is not an API that is publicly used in practice

## v0.9.10 - 2024-09-26

- The lifted product class of quantum LDPC codes is implemented in the ECC submodule.
- **(fix)** `ECC.code_s` now gives the number of parity checks with redundancy. If you want the number of linearly independent parity checks, you can use `LinearAlgebra.rank`.
- Implementing many more named single-qubit gates following naming convention similar to the stim package in python.
- **(fix)** Bug fix to the `parity_checks(ReedMuller(r, m))` of classical Reed-Muller code (it was returning generator matrix).
- `RecursiveReedMuller` code implementation as an alternative implementation of `ReedMuller`.


## v0.9.9 - 2024-08-05

- `inv` is implemented for all Clifford operator types (symbolic, dense, sparse).
Expand Down
9 changes: 6 additions & 3 deletions Project.toml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
name = "QuantumClifford"
uuid = "0525e862-1e90-11e9-3e4d-1b39d7109de1"
authors = ["Stefan Krastanov <[email protected]> and QuantumSavory community members"]
version = "0.9.9"
version = "0.9.14"

[deps]
Combinatorics = "861a8166-3701-5b0c-9a16-15d98fcdc6aa"
Expand All @@ -24,6 +24,7 @@ SumTypes = "8e1ec7a9-0e02-4297-b0fe-6433085c89f2"

[weakdeps]
CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba"
Hecke = "3e1990a7-5d81-5526-99ce-9ba3ff248f21"
LDPCDecoders = "3c486d74-64b9-4c60-8b1a-13a564e77efb"
Makie = "ee78f7c6-11fb-53f2-987a-cfe4a2b5a57a"
Plots = "91a5bcdd-55d7-5caf-9e0b-520d859cae80"
Expand All @@ -33,6 +34,7 @@ QuantumOpticsBase = "4f57444f-1401-5e15-980d-4471b28d5678"

[extensions]
QuantumCliffordGPUExt = "CUDA"
QuantumCliffordHeckeExt = "Hecke"
QuantumCliffordLDPCDecodersExt = "LDPCDecoders"
QuantumCliffordMakieExt = "Makie"
QuantumCliffordPlotsExt = "Plots"
Expand All @@ -46,14 +48,15 @@ Combinatorics = "1.0"
DataStructures = "0.18"
DocStringExtensions = "0.9"
Graphs = "1.9"
Hecke = "0.28, 0.29, 0.30, 0.31, 0.32, 0.33, 0.34"
HostCPUFeatures = "0.1.6"
ILog2 = "0.2.3"
ILog2 = "0.2.3, 1, 2"
InteractiveUtils = "1.9"
LDPCDecoders = "0.3.1"
LinearAlgebra = "1.9"
MacroTools = "0.5.9"
Makie = "0.20, 0.21"
Nemo = "0.42, 0.43, 0.44, 0.45, 0.46"
Nemo = "0.42.1, 0.43, 0.44, 0.45, 0.46, 0.47"
Plots = "1.38.0"
PrecompileTools = "1.2"
PyQDecoders = "0.2.1"
Expand Down
1 change: 1 addition & 0 deletions docs/Project.toml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ Documenter = "e30172f5-a6a5-5a46-863b-614d45cd2de4"
DocumenterCitations = "daee34ce-89f3-4625-b898-19384cb65244"
GraphMakie = "1ecd5474-83a3-4783-bb4f-06765db800d2"
Graphs = "86223c79-3864-5bf0-83f7-82e725a168b6"
Hecke = "3e1990a7-5d81-5526-99ce-9ba3ff248f21"
LDPCDecoders = "3c486d74-64b9-4c60-8b1a-13a564e77efb"
Nemo = "2edaba10-b0f1-5616-af89-8c11ac63239a"
Plots = "91a5bcdd-55d7-5caf-9e0b-520d859cae80"
Expand Down
8 changes: 7 additions & 1 deletion docs/make.jl
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,11 @@ using QuantumClifford
using QuantumClifford.Experimental.NoisyCircuits
using QuantumInterface

ENV["HECKE_PRINT_BANNER"] = "false"
import Hecke

const QuantumCliffordHeckeExt = Base.get_extension(QuantumClifford, :QuantumCliffordHeckeExt)

#DocMeta.setdocmeta!(QuantumClifford, :DocTestSetup, :(using QuantumClifford); recursive=true)

ENV["LINES"] = 80 # for forcing `displaysize(io)` to be big enough
Expand All @@ -20,8 +25,9 @@ doctest = false,
clean = true,
sitename = "QuantumClifford.jl",
format = Documenter.HTML(size_threshold_ignore = ["API.md"]),
modules = [QuantumClifford, QuantumClifford.Experimental.NoisyCircuits, QuantumClifford.ECC, QuantumInterface],
modules = [QuantumClifford, QuantumClifford.Experimental.NoisyCircuits, QuantumClifford.ECC, QuantumInterface, QuantumCliffordHeckeExt],
warnonly = [:missing_docs],
linkcheck = true,
authors = "Stefan Krastanov",
pages = [
"QuantumClifford.jl" => "index.md",
Expand Down
7 changes: 7 additions & 0 deletions docs/src/ECC_API.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,10 @@
Modules = [QuantumClifford.ECC]
Private = false
```

## Implemented in an extension requiring `Hecke.jl`

```@autodocs
Modules = [QuantumCliffordHeckeExt]
Private = true
```
6 changes: 3 additions & 3 deletions docs/src/noisycircuits_mc.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ Import with `using QuantumClifford.Experimental.NoisyCircuits`.

This module enables the simulation of noisy Clifford circuits through a Monte Carlo method where the same circuit is evaluated multiple times with random errors interspersed through it as prescribed by a given error model.

Below is an example of a purification circuit. We first prepare the circuit we desire to use, including a noise model. `Quantikz.jl` was is used to visualize the circuit.
Below is an example of a purification circuit. We first prepare the circuit we desire to use, including a noise model. `Quantikz.jl` is used to visualize the circuit.

```@example 1
using QuantumClifford # hide
Expand Down Expand Up @@ -55,8 +55,8 @@ If you want to create a custom gate type (e.g. calling it `Operation`), you need
The `Symbol` is the status of the operation. Predefined statuses are kept in the `registered_statuses` list, but you can add more.
Be sure to expand this list if you want the trajectory simulators using your custom statuses to output all trajectories.

There is also [`applynoise!`](@ref) which is convenient wait to create a noise model that can then be plugged into the [`NoisyGate`](@ref) struct,
There is also [`applynoise!`](@ref) which is a convenient way to create a noise model that can then be plugged into the [`NoisyGate`](@ref) struct,
letting you reuse the predefined perfect gates and measurements.
However, you can also just make up your own noise operator simply by implementing [`applywstatus!`](@ref) for it.

You can also consult the [list of implemented operators](@ref noisycircuits_ops).
You can also consult the [list of implemented operators](@ref noisycircuits_ops).
162 changes: 159 additions & 3 deletions docs/src/references.bib
Original file line number Diff line number Diff line change
Expand Up @@ -403,6 +403,164 @@ @inproceedings{brown2013short
doi = {10.1109/ISIT.2013.6620245}
}

@article{RevModPhys.87.307,
title = {Quantum error correction for quantum memories},
author = {Terhal, Barbara M.},
journal = {Rev. Mod. Phys.},
volume = {87},
issue = {2},
pages = {307--346},
numpages = {40},
year = {2015},
month = {Apr},
publisher = {American Physical Society},
doi = {10.1103/RevModPhys.87.307},
url = {https://link.aps.org/doi/10.1103/RevModPhys.87.307}
}

@misc{goodenough2024bipartiteentanglementnoisystabilizer,
title={Bipartite entanglement of noisy stabilizer states through the lens of stabilizer codes},
author={Kenneth Goodenough and Aqil Sajjad and Eneet Kaur and Saikat Guha and Don Towsley},
year={2024},
eprint={2406.02427},
archivePrefix={arXiv},
primaryClass={quant-ph},
url={https://arxiv.org/abs/2406.02427},
}

@article{panteleev2021degenerate,
title = {Degenerate {{Quantum LDPC Codes With Good Finite Length Performance}}},
author = {Panteleev, Pavel and Kalachev, Gleb},
year = {2021},
month = nov,
journal = {Quantum},
volume = {5},
eprint = {1904.02703},
primaryclass = {quant-ph},
pages = {585},
issn = {2521-327X},
doi = {10.22331/q-2021-11-22-585},
archiveprefix = {arXiv}
}

@inproceedings{panteleev2022asymptotically,
title = {Asymptotically Good {{Quantum}} and Locally Testable Classical {{LDPC}} Codes},
booktitle = {Proceedings of the 54th {{Annual ACM SIGACT Symposium}} on {{Theory}} of {{Computing}}},
author = {Panteleev, Pavel and Kalachev, Gleb},
year = {2022},
month = jun,
pages = {375--388},
publisher = {ACM},
address = {Rome Italy},
doi = {10.1145/3519935.3520017},
isbn = {978-1-4503-9264-8}
}

@article{roffe2023bias,
title = {Bias-Tailored Quantum {{LDPC}} Codes},
author = {Roffe, Joschka and Cohen, Lawrence Z. and Quintavalle, Armanda O. and Chandra, Daryus and Campbell, Earl T.},
year = {2023},
month = may,
journal = {Quantum},
volume = {7},
pages = {1005},
doi = {10.22331/q-2023-05-15-1005}
}

@article{raveendran2022finite,
title = {Finite {{Rate QLDPC-GKP Coding Scheme}} That {{Surpasses}} the {{CSS Hamming Bound}}},
author = {Raveendran, Nithin and Rengaswamy, Narayanan and Rozp{\k e}dek, Filip and Raina, Ankur and Jiang, Liang and Vasi{\'c}, Bane},
year = {2022},
month = jul,
journal = {Quantum},
volume = {6},
pages = {767},
issn = {2521-327X},
doi = {10.22331/q-2022-07-20-767},
}

@article{steane1999quantum,
title={Quantum reed-muller codes},
author={Steane, Andrew M},
journal={IEEE Transactions on Information Theory},
volume={45},
number={5},
pages={1701--1703},
year={1999},
publisher={IEEE}
}

@article{campbell2012magic,
title={Magic-state distillation in all prime dimensions using quantum reed-muller codes},
author={Campbell, Earl T and Anwar, Hussain and Browne, Dan E},
journal={Physical Review X},
volume={2},
number={4},
pages={041021},
year={2012},
publisher={APS}
}

@article{anderson2014fault,
title={Fault-tolerant conversion between the steane and reed-muller quantum codes},
author={Anderson, Jonas T and Duclos-Cianci, Guillaume and Poulin, David},
journal={Physical review letters},
volume={113},
number={8},
pages={080501},
year={2014},
publisher={APS}
}

@article{lin2024quantum,
title={Quantum two-block group algebra codes},
author={Lin, Hsiang-Ku and Pryadko, Leonid P},
journal={Physical Review A},
volume={109},
number={2},
pages={022407},
year={2024},
publisher={APS}
}

@article{wang2024coprime,
title={Coprime Bivariate Bicycle Codes and their Properties},
author={Wang, Ming and Mueller, Frank},
journal={arXiv preprint arXiv:2408.10001},
year={2024}
}

@misc{voss2024multivariatebicyclecodes,
title={Multivariate Bicycle Codes},
author={Lukas Voss and Sim Jian Xian and Tobias Haug and Kishor Bharti},
year={2024},
eprint={2406.19151},
archivePrefix={arXiv},
primaryClass={quant-ph},
url={https://arxiv.org/abs/2406.19151},
}

@article{bravyi2024high,
title={High-threshold and low-overhead fault-tolerant quantum memory},
author={Bravyi, Sergey and Cross, Andrew W and Gambetta, Jay M and Maslov, Dmitri and Rall, Patrick and Yoder, Theodore J},
journal={Nature},
volume={627},
number={8005},
pages={778--782},
year={2024},
publisher={Nature Publishing Group UK London}
}

@article{haah2011local,
title={Local stabilizer codes in three dimensions without string logical operators},
author={Haah, Jeongwan},
journal={Physical Review A?Atomic, Molecular, and Optical Physics},
volume={83},
number={4},
pages={042330},
year={2011},
}

@article{golay1949notes,
title={Notes on digital coding},
author={Golay, Marcel JE},
Expand All @@ -417,13 +575,11 @@ @book{huffman2010fundamentals
author={Huffman, W Cary and Pless, Vera},
year={2010},
publisher={Cambridge university press}

}

@article{bhatia2018mceliece,
title={McEliece cryptosystem based on extended Golay code},
author={Bhatia, Amandeep Singh and Kumar, Ajay},
journal={arXiv preprint arXiv:1811.06246},
year={2018}
}
}
8 changes: 8 additions & 0 deletions docs/src/references.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,14 @@ For quantum code construction routines:
- [kitaev2003fault](@cite)
- [fowler2012surface](@cite)
- [knill1996concatenated](@cite)
- [steane1999quantum](@cite)
- [campbell2012magic](@cite)
- [anderson2014fault](@cite)
- [wang2024coprime](@cite)
- [voss2024multivariatebicyclecodes](@cite)
- [lin2024quantum](@cite)
- [bravyi2024high](@cite)
- [haah2011local](@cite)

For classical code construction routines:
- [muller1954application](@cite)
Expand Down
Loading

0 comments on commit ca7c53d

Please sign in to comment.