Giter Club home page Giter Club logo

codingtheory's Introduction

CodingTheory

Dev Build Status Coverage

A coding theory library for Julia.

The goal of this package is to develop a classical and quantum error-correcting codes package in as much native Julia as possible. The library is built around the Oscar.jl framework, and many thanks to Tommy Hofmann of these packages for helping this repo get off the ground. Anyone is welcome to contribute, although the final form of any accepted code may be standardized to maintain intra-package consistency.

At the moment, all functions work as intended for test cases but have not been unit tested thoroughly enough to guarantee accuracy and error free usage. All results from this library should be mentally checked and any bugs reported (or fixed and pushed). This is particularly true for the quantum part where algorithms become increasingly more complicated.

The generation of hyperbolic tilings (in tilings.jl) requires the LINS package. Please use the temporary fork at the address below to fix a compatibility issue with the Sonata package. The probabilistic quantum minimum distance algorithm QDistRnd requires the corresponding GAP package. To install these, run GAP.Packages.install(URL) GAP.Packages.install("https://github.com/QEC-pages/QDistRnd.git") GAP.Packages.install("https://github.com/esabo/LINS.git") and then GAP.Packages.load("QDistRnd"); GAP.Packages.load("LINS"); These are not automatically installed and loaded.

Quantum minimum distance functions are currently disabled due to a change in the underlying structs. DistRandCSS is still available via the built-in GAP interface.

Parts of the library are multi-threaded and benefit greatly from the use of multiple cores.

A growing list of examples and tutorials are provided in the documentation (which is only slightly out of date).

codingtheory's People

Contributors

benide avatar esabo avatar mikevasmer avatar

Stargazers

Juan M. Bello-Rivas avatar Michael A. Perlin avatar  avatar Amir Ebrahimi avatar Lynne avatar  avatar  avatar Coral avatar  avatar Usatyuk Vasiliy avatar Luis Mantilla avatar Albin Ahlbäck avatar spark avatar Chris Pattison avatar Timo avatar Harry Kong avatar  avatar  avatar Peter Curry avatar Balint Pato avatar

Watchers

 avatar  avatar  avatar

codingtheory's Issues

Request: Breaking up the types.jl file

I understand the reasoning behind having types be in one file, but I was wondering if we could break up the types by topic and place them in their relevant subfolders considers that the type break up nicely. I am happy to do this and open a PR with this. I was thinking

src
. Classical
. . types.jl
. LDPC
. . types/
. . . types_channels.jl
. . . types_code.jl
. Quantum
. . types.jl

Open to suggestions. Am happy to take this up as well

Add `[compat]` entries to Project.toml for Oscar, etc.

It would be nice if Pkg.add(url="https://github.com/esabo/CodingTheory") worked directly. We'll need this before we can consider adding this package to the Julia registry anyway.

Biggest roadblock to easily adding the package as above is the current version of Oscar changed so many things. We should add a [compat] entry for it to Project.toml until we find time to make it work with the newer version. Probably need compat for a few other packages. #21 will be solved if we do this I think.

Reed-Solomon Constructor Broken

The Reed-Solomon constructor is returning the wrong generator polynomial, yet the same parameters work correctly in the BCH constructor.

ToricCode doesn't work for even distances

julia> T = ToricCode(3); all(is_logical(T, T.logs_mat[i, :]) for i in nrows(T.logs_mat))
true

julia> T = ToricCode(4); all(is_logical(T, T.logs_mat[i, :]) for i in nrows(T.logs_mat))
false

Probably related (via copy/paste) to #10.

Minimum distance failing for certain overcomplete matrices

julia> Gray_code_minimum_distance(LinearCode(ToricCode(3).X_stabs))
(0, [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0])

Either the information sets are reduced to include a zero row, which is then picked out by a weight one element in the enumeration, or the enumeration vector happens to exactly contain the redundancies of the generators. In both cases, the all-zero vector appears to be a codeword.

Can probably be fixed easily by simply always using the standard form or calling _remove_empty(, :rows) for each information set depending on what the problem is. Using standard form should fix it in both cases.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.