https://github.com/amazon-science/latticealgorithms.jl

Algorithms to solve lattice problems in Julia

https://github.com/amazon-science/latticealgorithms.jl

Science Score: 49.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
    Found .zenodo.json file
  • DOI references
    Found 3 DOI reference(s) in README
  • Academic publication links
    Links to: arxiv.org, aps.org
  • Academic email domains
  • Institutional organization owner
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (10.0%) to scientific vocabulary

Keywords

gottesman-kitaev-preskill-code lattice lattice-reduction
Last synced: 6 months ago · JSON representation

Repository

Algorithms to solve lattice problems in Julia

Basic Info
  • Host: GitHub
  • Owner: amazon-science
  • License: apache-2.0
  • Language: Julia
  • Default Branch: main
  • Homepage:
  • Size: 12.8 MB
Statistics
  • Stars: 7
  • Watchers: 1
  • Forks: 0
  • Open Issues: 1
  • Releases: 0
Topics
gottesman-kitaev-preskill-code lattice lattice-reduction
Created over 2 years ago · Last pushed 10 months ago
Metadata Files
Readme Contributing License Code of conduct

README.md

LatticeAlgorithms.jl

This package contains lattice algorithms that were used in the paper Closest lattice point decoding for multimode Gottesman-Kitaev-Preskill codes. The package contains several lattice reduction algorithms, such as Lenstra-Lenstra-Lovász and Korkine-Zolotarev algorithms, and a search algorithm for solving the closest point problem and the shortest vector problem. For the Gottesman-Kitaev-Preskill (GKP) codes, the package includes the $Dn$ lattice and two types of repetition-GKP codes, which can be decoded efficiently from a lattice perspective. The data and code for the paper can be found in the folder `examples/papers/ClosestlatticepointdecodingformultimodeGKPcodes`.

This package also contains several algorithms that were used in the paper Exploring the quantum capacity of a Gaussian random displacement channel using Gottesman-Kitaev-Preskill codes and maximum likelihood decoding, including an efficient and exact maximum likelihood decoder (MLD) for surface-square GKP codes, and a tensor-network decoder to approximate the MLD for generic concatenated-GKP codes. The latter is built on top of the decoder in SweepContractor.jl. The data and code for the paper can be found in the folder examples/papers/Exploring_the_quantum_capacity_of_a_Gaussian_random_displacement_channel_using_GKP_codes_and_maximum_likelihood_decoding.

This package also contains several algorithms that were used in the paper Approximate maximum likelihood decoding with $K$ minimum weight matchings (to appear soon). In this paper, we introduce a novel algorithm to approximate the optimal maximum likelihood decoding strategey via finding $K$ minimum weight matchings from the decoding graph. The data and plots for the paper can be found in the folder examples/papers/Approximate_maximum_likelihood_decoding_with_K_minimum_weight_matchings.

Security

See CONTRIBUTING for more information.

Citation

If you find our paper or codebase useful, please consider citing us as: @article{PRXQuantum.4.040334, title = {Closest Lattice Point Decoding for Multimode Gottesman-Kitaev-Preskill Codes}, author = {Lin, Mao and Chamberland, Christopher and Noh, Kyungjoo}, journal = {PRX Quantum}, volume = {4}, issue = {4}, pages = {040334}, numpages = {36}, year = {2023}, month = {Dec}, publisher = {American Physical Society}, doi = {10.1103/PRXQuantum.4.040334}, url = {https://link.aps.org/doi/10.1103/PRXQuantum.4.040334} }

Examples

We provide some examples for using the package. The location to the source code of a function can be look up in the src/LatticeAlgorithms.jl file. For example, the function "closestpoint" is exported before the line "include("latticealgorithms.jl")", indicating that the function is in the file src/lattice_algorithms.jl. More tutorials can be found in the examples/tutorials folder.

Example 1: Finding the closest point for a random lattice using LatticeAlgorithms n = 10 # Dimension of the lattice M = rand(n, n) # A lattice generated by a random matrix x = rand(n) # A random input vector y = closest_point(x, M) # The closest lattice point to x Finding the closest point lies in the core of solving other lattice problems, including shortest lattice vector problem, and finding the relevant vectors for a given lattice. The demonstrations of solving these problems can be found in the folder examples/tutorials.

Example 2: Finding the closest point for root lattices ``` using LatticeAlgorithms n = 20 # Dimension of the lattice

M = Dn(n) x = rand(n)

@time y1 = closestpoint(x, M) # 0.001310 seconds (18.21 k allocations: 633.391 KiB) @time y2 = closestpointDn(x) # 0.000014 seconds (3 allocations: 672 bytes) @assert y1 ≈ y2 # true ``` Finding the closest point for root lattices can be done efficiently, in contrast to general lattices. In the above example, we demonstrate this fact with the $Dn$ lattice.

Example 3: Lattice reduction using LatticeAlgorithms n = 10 # Dimension of the lattice M = rand(n, n) # A lattice generated by a random matrix lll_basis = lll(M) @assert lll_basis.T * lll_basis.L * lll_basis.Q ≈ M # true In the above example, we perform the LLL reduction to the given matrix. The output lll_basis contains three matrices such that T*L*Q=M. Here T is a unimodular matrix, Q is an orthogonal matrix and L is the LLL basis that satisfies the LLL criteria. A given matrix can be checked if it satisfies the LLL criteria via islllreduced(lll_basis.L) # true Similarly the given matrix can be KZ reduced via kz_basis = kz(M) @assert kz_basis.T * kz_basis.L * kz_basis.Q ≈ M # true

Example 4: Finding the distances of Gottesman-Kitaev-Preskill (GKP) codes using LatticeAlgorithms M = surface_code_M(3) distance(M) In the above example, we find the code distances of a surface-square GKP code, which is defined as the Euclidean length of the shortest operators. To find the distances of X, Y and Z logical operators, we can use distances(M). More utilities regarding GKP codes, including canonization of lattice generator, finding logical operators and others can be found in the file src/gkp.jl.

Example 5: Exact maximum likelihood decoding (MLD) for the unrotated surface code on a square lattice ``` using LatticeAlgorithms d = 25 n = d^2 + (d-1)^2

ϵs = 5/100 * ones(n) probI, probX = bsvunrotatedsurfacecodequbit(ϵs, zeros(Int, n))

@assert (probI - log10(1.78283e-27)) < 1e-9 # true @assert (probX - log10(5.58438e-57)) < 1e-9 # true `` In the above example, we find the coset probability for a d=25 unrotated surface code with error rate 5%. The results are consistent with those given in [this paper](https://arxiv.org/pdf/1405.4883.pdf) by Bravyi, Suchara and Vargo (BSV, see TABEL I in page 16). The functionbsvunrotatedsurfacecodequbitrelies on a core subroutinebsv` which is demonstrated below. More details for decoding rotated the (rotated) surface-square GKP code using the exact MLD can be found here.

Example 6: Brute force approach decoding and further demonstration of BSV's exact MLD ``` using LatticeAlgorithms d = 3 n = d^2 + (d-1)^2

stabgenerators = unrotatedsurfacecodeZstabilizers(d) stabilizers = getstabilizergroupfromgenerators(collect(values(stabgenerators))) ws = 0.6 * randn(n) ws = abs.(ws) # The weight needs to be positive values

Brute force approach to calculate the coset probability

expectedcosetprob = sum([prod(ws[stab]) for stab in stabilizers])

BSV's exact method to calculate the log10 of the coset probability

cosetprobbsv = bsv(ws) @assert 10^value ≈ expected_value # true ``` In the above example, we find the coset probability for a d=3 unrotated surface code with two approaches, the brute force approach using the definition and BSV's approach. More details for decoding [[5-1-3]]-hexagonal GKP code using the brute force approach can be found here.

Example 7: Tensor network decoding to approximate MLD for color-hexagonal GKP code ``` using LatticeAlgorithms

Define the relevant quantities for a d=3 color-hexagonal GKP code

d = 3 n = triangularcolorcodenumqubits(d) stabgenerators = triangularcolorcodestabilizers(d) fullstabilizers = getstabilizergroupfromgenerators(collect(values(stabgenerators))) S = [2 1; 0 sqrt(3)] / (12)^(1/4) X = √π * S * [1, 0] Z = √π * S * [0, 1] bigX = vcat([X for _ in 1 : numqubits]...) # The X logical operator bigZ = vcat([Z for _ in 1 : numqubits]...) # The X logical operator

σ = 0.6 ws = abs.(σ * randn(2n))

Tensor network

χ = 64 # bond dimension

Get the template for carrying out tensor network decoding

The template can be repeatedly used for different syndrome

TN, indices = tntemplatecolorhex(d) lstar2, probI2, probX2, probY2, probZ2, _, _, _, _ = tncolor_hex(ws, σ, TN, indices, bigZ, bigX, χ) ``` In the above example, we find the coset probability for a d=3 color-hexagonal GKP code with a variant of tensor-network decoder, which is built on top of the decoder in SweepContractor.jl. More details for decoding color-hexagonal GKP code using the tensor-network approach can be found here.

License

This project is licensed under the Apache-2.0 License.

Owner

  • Name: Amazon Science
  • Login: amazon-science
  • Kind: organization

GitHub Events

Total
  • Watch event: 5
  • Delete event: 3
  • Issue comment event: 1
  • Push event: 24
  • Pull request event: 7
  • Create event: 3
Last Year
  • Watch event: 5
  • Delete event: 3
  • Issue comment event: 1
  • Push event: 24
  • Pull request event: 7
  • Create event: 3

Issues and Pull Requests

Last synced: 12 months ago

All Time
  • Total issues: 1
  • Total pull requests: 2
  • Average time to close issues: N/A
  • Average time to close pull requests: 1 day
  • Total issue authors: 1
  • Total pull request authors: 1
  • Average comments per issue: 1.0
  • Average comments per pull request: 0.0
  • Merged pull requests: 2
  • Bot issues: 0
  • Bot pull requests: 0
Past Year
  • Issues: 1
  • Pull requests: 2
  • Average time to close issues: N/A
  • Average time to close pull requests: 1 day
  • Issue authors: 1
  • Pull request authors: 1
  • Average comments per issue: 1.0
  • Average comments per pull request: 0.0
  • Merged pull requests: 2
  • Bot issues: 0
  • Bot pull requests: 0
Top Authors
Issue Authors
Pull Request Authors
  • maolinml (6)
Top Labels
Issue Labels
Pull Request Labels