---------- Forwarded message ---------- From: "Johan S. R. Nielsen" <santaph...@gmail.com> Date: 20 Feb 2015 17:24 Subject: [sage-coding-theory] Coding Theory development project. Request-for-comments: New code family and encoder/decoder structu To: <sage-coding-the...@googlegroups.com> Cc:
Hello everyone, As we announced previously ( https://groups.google.com/forum/#!topic/sage-devel/pBmeknQcyZM), we started October 1. a 2-year project for improving coding theory support in Sage. This post has two purposes: 1) It's our "going public" post, where we announce more precisely our plans for our 2-year project; and 2) It puts up for discussions our new scalable design for doing coding theory in Sage which comes with a fully working and documented implementation, integrated into a fork of Sage. Our project now has a web page, which is also our project repository: https://bitbucket.org/lucasdavid/sage_coding_project This page contains a description of our project, our development plan, and a description of what has currently been implemented including examples. It is also a Git repository containing a fork of the Sage project containing at any time the newest version of Sage with the newest (unstable) version of our code integrated. Little by little, our code will be cut up into tickets and incorporated into Sage using Trac and the review system. While tickets are being reviewed, new ones will be written, and our Git repository makes it easy to get a Sage version containing all the newest functionality. What we have done so far and our suggested design: Our team -- and principally our main developer David Lucas -- has been hard at work thinking of a scalable design for representing the core objects of coding theory: it should appeal to people coming from any of the many approaches to coding theory, and as with all things Sage, it should appeal to many levels of user competence. This is just the first step of our project, and later ones will add much more new functionality. The result is a base design and a working demo of this that we suggest to incorporate into Sage. It concerns principally - Code families as classes - Representation of multiple encoding and decoding methods, specific to the respective code family. And secondarily - Representing communication channels, i.e. "adding errors" - Some renaming of foundational methods To demonstrate this, we have implemented: - Generalized Reed-Solomon codes as a class - Hamming Codes as a class - Concatenated codes as a class, demonstrating the modularity of class-based families - 2 encoders for GRS codes - 3 fast decoders for GRS codes, two half-minimum distance decoders, 1 error-erasure decoder - A channel for adding errors, and a channel for adding errors-and-erasures It will have deep consequences for the representation, use and further development of coding theory functionality. Before opening tickets for these changes, we want to present the design here, so that we can discuss and possibly improve it. Code examples are much better than words at conveying design: we have written a page going through the new ideas of the design from a user's point of view: https://bitbucket.org/lucasdavid/sage_coding_project/wiki/Examples In more technical details, the main design features that we propose are: 1) Code families are classes. This enables family-specific functionality, such as minimum distance bounds or fast decoders. 2) A code is therefore no longer always given by a generator matrix. For such code families, a generator matrix will only be computed on demand. 3) Encoders are classes. We support multiple encoders for a code family allowing different mappings. 4) The message space for an encoder can be something else than a vector space. Reed-Solomon codes can e.g. have an encoder which encodes polynomials directly. 5) The inverse of encoding is called "unencoding" (as opposed to "decoding" which we reserve for correcting errors). unencode() is a method on Encoder. 6) Decoders are classes. This enables multiple decoders for a code family. 7) Decoders have an input space which is not necessarily the ambient space of the code. This supports e.g. soft-decision decoders where reliability information is part of the input. 8) Decoders can decode to a codeword or directly to a message space. 9) There are convenience methods directly on a code for encoding, decoding and unencode such that users not caring about these choices are not burdened. 10) We introduce Channels which embody the concept of communication channels, both for adding errors and for changing representation. They provide a modular and convenient structure for user-friendliness and code-reusability in e.g. benchmarking frameworks. 11) Renaming of some methods in LinearCode: gen_mat into generator_matrix and check_mat to parity_check_matrix. We invite for discussion on this design and for contributions by everyone motivated by coding theory. As soon as we agree on this thread, we will create a ticket on Trac with the first few changes. Reviewers will be more than welcome! David Lucas, Johan S. R. Nielsen, Clément Pernet and Daniel Augot -- You received this message because you are subscribed to the Google Groups "sage-coding-theory" group. To unsubscribe from this group and stop receiving emails from it, send an email to sage-coding-theory+unsubscr...@googlegroups.com. To post to this group, send email to sage-coding-the...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/sage-coding-theory/1089c130-0283-42ff-a28b-0869776eaed4%40googlegroups.com <https://groups.google.com/d/msgid/sage-coding-theory/1089c130-0283-42ff-a28b-0869776eaed4%40googlegroups.com?utm_medium=email&utm_source=footer> . For more options, visit https://groups.google.com/d/optout. -- You received this message because you are subscribed to the Google Groups "sage-devel" group. To unsubscribe from this group and stop receiving emails from it, send an email to sage-devel+unsubscr...@googlegroups.com. To post to this group, send email to sage-devel@googlegroups.com. Visit this group at http://groups.google.com/group/sage-devel. For more options, visit https://groups.google.com/d/optout.