Overview
Atlassian Sourcetree is a free Git and Mercurial client for Windows.
Atlassian Sourcetree is a free Git and Mercurial client for Mac.
Codinglib is mostly deprecated
NOTE: I'm deprecating Codinglib. The ACTIS project for improving native coding theory support in Sage has now successfully completed, and many of the base elements of Codinglib are now better supported in the most recent Sage release.
Some elements of Codinglib are not yet ported into Sage, most notably the
alternative implementations of GuruswamiSudan listdecoding and the
implementation of Power decoding. Note however that native Sage now supports one
reasonably fast implementation of the GuruswamiSudan algorithm.
Codinglib is kept (mostly frozen) for reference and for compatibility with old
implementations. At time of writing (jan 2017) Codinglib still works in the
newest release of Sage; it's components are just largely incompatible with the
native Sage ones. Several of my past papers have proofofconcept
implementations in separate repositories which use subroutines from Codinglib; I
will likely not update these.
I might later start a successor project of Codinglib, building on the native
coding theory structure in Sage. If this materialises, I will make this an
standard Sage package which should ease installation considerably.
Johan Rosenkilde (nĂ© Nielsen)
Previous Introduction
This is Codinglib, a library for experimenting with algebraic coding theory.
Copyright Johan S. H. Rosenkilde
This is free software; every part of this released under the GNU
Public License version 3 or later (at your option).
The library is an extension to the Open Source computer algebra system Sage. I
have developed and maintain Codinglib for my own research on algebraic coding
theory. Most of the code is quite specific for this area.
Codinglib is partially selfdocumenting by the use docstrings for every
function; however, it probably takes some effort to properly get to know it. It
is also quite idiosyncratic to my specific needs and workflow. Finally, in any
new version, I might change the name, semantics or calling convention of any
existing functions.
However, if you find some of its functionality interesting, I will gladly answer
specific questions to its usage and source code. You are also highly encouraged
to continue working on and improve any of the code; if you do, I would very much
like to know of your work. Also, I would be more than happy if any of my code
ended in the actual Sage distribution; I would work on this myself if I had more
time.
Overview
The following is a short description of each of the modules in Codinglib:

bma: The BerlekampMassey algorithm.

channel: Abstract class for representing channels

chinese_remainder: Chinese remainder codes: polyalphabetic codes over
ZZ/pZZ
for different
primesp
, which are theZZ
equivalent of ReedSolomon codes. Note that this
code implementation does not inherit from BlockCodeAbstract since it is
polyalphabetic. Also implementation of InterleavedChineseRemainderCode 
code: Abstract and concrete class for representing linear block codes

codeTesting: Helper functions for testing error correcting code functions

counting: Wrapperalgebra for counting no. of operations in fields

cyclic: Cyclic linear codes.

ea: The Extended Euclidean algorithm with stopping conditions.
Note that using modules over F[x] and weak Popov form is a more flexible
approach. 
generate_readme: Generates the package overview in the readme

goppa: Class for representing Goppa codes with corresponding utility
functions 
graphcode: Class for representing bipartite graph codes with corresponding utility
functions 
gs: The GuruswamiSudan algorithm for ReedSolomon codes: implementation and utilities

gsKV: Utilities for the variant of the GuruswamiSudan algorithm using the small
field KotterVardy multiplicity assignment. 
hermitian_code: Class for representing and decoding Hermitian codes.
The codes follow the definition of [jsrn], which is a slightly larger class of
codes than in [Dec].
The decoding algorithms are described in [Dec]. [jsrn]: Johan S. R. Nielsen, List decoding of algebraic codes, 2013 PhD thesis
at Technical University of Denmark.  [Dec]: Johan S. R. Nielsen, Peter Beelen, Subquadratic Decoding of OnePoint
Hermitian Codes, in review for IEEE Transactions of Information Theory
 [jsrn]: Johan S. R. Nielsen, List decoding of algebraic codes, 2013 PhD thesis

key2d: 2D key equations and solving them.
The name 2D Key Equations was introduced in [jsrn]. They are in Computer Algebra
sometimes known as Simultaneous Hermitian Pade approximations.The notation here follows mainly that of [jsrn], but uses an improved handling
of weights described in [Dec]. [jsrn]: Johan S. R. Nielsen, List decoding of algebraic codes, 2013 PhD thesis
at Technical University of Denmark.  [Dec]: Johan S. R. Nielsen, Peter Beelen, Subquadratic Decoding of OnePoint
Hermitian Codes, in review for IEEE Transactions of Information Theory
 [jsrn]: Johan S. R. Nielsen, List decoding of algebraic codes, 2013 PhD thesis

listdecoding: Utility functions related to list decoding

module: Functionality for free F[x]modules, in particular for calculating
bases in weak Popov form. The weak Popov form is slightly stronger
than row reduced form, and it is also a type of reduced Groebner bases
over some simple module monomial orderings. [Dec]: Johan S. R. Nielsen, Peter Beelen, Subquadratic Decoding of OnePoint
Hermitian Codes, in review for IEEE Transactions of Information Theory
 [Dec]: Johan S. R. Nielsen, Peter Beelen, Subquadratic Decoding of OnePoint

parallel: Module for a simple thread pool, along with invoking workers over SSH.

plot_util: Utility functions for plotting. Contains an (now old) copy of the
implementation of points for plotting, in order to allow custom marker symbols
in list plots.Ideally, this should be reported and fixed upstream in Sage rather than be here.

polynomial_util: Generally usable polynomial functions

ratinter: Rational interpolation using the Wu algorithm

remote: Functions for importing Codinglib remotely, loaded onthefly
directly from the repository. This is useful for loading Codinglib on
a public Sage server. 
rootfinding: F[x] Rootfinding in polynomials over F[x,y].

rs: Class for representing GRS codes with corresponding utility functions

rs_mindist: Implementation of decoding algorithms ReedSolomon up to half the
minimum distance 
rs_power: Functionality for Power decoding of ReedSolomon codes.
Power decoding was called "Decoding by virtual extension to an interleaved
code" in the initial description of [SSB].In the initial algorithm of [SSB], the decoding radius is bounded by (roughly)
the Sudan radius. In [N15], it was shown how to incorporate multiplicities to
decode up to the Johnson radius. The implementation here supports that.REFERENCES:
 Schmidt, G., V.R. Sidorenko, and M. Bossert. "Syndrome Decoding of
ReedSolomon Codes Beyond Half the Minimum Distance Based on ShiftRegister
Synthesis." IEEE Transactions on Information Theory 56, no. 10 (2010):
524552. doi:10.1109/TIT.2010.2060130. Nielsen, Johan S. R. "Power Decoding ReedSolomon Up to the Johnson
Radius.". Submitted to IEEE Transactions of Information Theory, 2015.
 Nielsen, Johan S. R. "Power Decoding ReedSolomon Up to the Johnson

subcode: Direct construction of subfield subcodes by expansion of parity check matrices

util: Various utility functions used in codinglib

wu: Wu list decoder for ReedSolomon and Binary Goppa codes.
Parameter choices. See also ratinter for the core rational
interpolation functionality.
Furthermore, the library contains a number of sheet
files: these are
similar to the notebook sheets, in that they contain snippets of code
demonstrating or testing the core functionality of Codinglib. Most of
these sheets are indeed intended as tests.
For instance, rs_decoding.sheet
demonstrates all decoding algorithms
for ReedSolomon codes included in Codinglib.
For Emacs users, sheet files can elegantly be handled when using
sagemode by using the sageblocks
functionality.
Usage
Sage does not currently work well with nonspkg library code, so the importing
of Codinglib is a bit peculiar.
Codinglib is written using the Sage language extensions to Python but at the same
time is highly dependent on itself. To make this work in Sage currently, one
needs to preprocess Codinglib's .sage files and load all the generated .py files
at once as a Python package. In particular, using load/attach on the
.sage files from a Sage prompt will usually not work.
Method 1: Downloading to personal computer

Download the whole source (mirror git repo) and put in a folder
codinglib
.
Add the parent folder to the SAGE_PATH environment variable.For example, you have created a folder
\home\foo\bar\codinglib
on your system, which contains the
.sage
files and the rest of Codinglib.
You then add\home\foo\bar
to your
SAGE_PATH
. 
Navigate to the
codinglib
folder and type the commandmake
This will preprocess all the
.sage
files to reduce Sage syntax to standard
Python. 
From the Sage prompt, the library can be loaded with the command
import codinglib

From the Sage Notebook, if running on a local Sage server, add the following
to one of the first cells of each sheet in which you intend to use the
library:#auto import codinglib all = __builtins__.all
The last line is to restore the Python standard library function
all
.In either of the above, you can of course replace
import codinglib
with the
following to include commands directly in the namespacefrom codinglib import *
Method 2: On SageMathCloud
The SageMathCloud has excellent support for making modules within a project
which can be run from any worksheet in that project.
To add Codinglib to a project, you should make a copy of Codinglib's source in a
folder codinglib
within your project. The most direct way to do this is:

Create a folder
codinglib
in the project on SageMathCloud and go to it's Add
Files page. 
Download Codinglib's source to your own machine.

Open a file explorer and draganddrop all the downloaded files onto the Drop
Filesarea. files into the SageMathCloud's addpage. 
In SageMathCloud, go to the
codinglib
folder's page. In the upper righthand
corner is a "Terminal command" text area. Entermake build
This will create
.py
files for each of the.sage
files.SageMathCloud sometimes complains that the command timed out after 15
seconds and was halted. This might mean nothing, or it might mean that some
of the.py
files were not properly generated. In that case, simply run
make build
again. 
You should now be able to run
from codinglib import *
from any worksheet in this project.
If you later need to update Codinglib, you simply need to overwrite the .sage.
files with the new ones and rerun the make
command.
Method 3: On a shared Sage Notebook sheet without writeaccess to its server
This is much more difficult as the Sage Notebook is not really geared to
support nonspkg addon Sage libraries. The following method basically
dynamically downloads, preprocesses and imports Codinglib whenever one starts the
Notebook sheet. Thus, it is very slow to start up and a bit tedious. However, it
works without assuming any special rights on the Sage server. Once loaded, it
will of course run in the usual speed of the server.
In one of the first cells of the Notebook sheet, add the following code
changeset = "ddd6636b2da0" baseurl ="https://bitbucket.org/jsrn/codinglib/raw/" + changeset + "/" # Manually load the remote functionality import imp from sage.misc.remote_file import get_remote_file remoteFile = get_remote_file(baseurl + "remote.py", verbose=False) remote = imp.new_module("remote") exec open(remoteFile).read() in remote.__dict__ # Load the Sage library files and import them into the global namespace imports = remote.retrieve_codinglib(baseurl) for stm in imports: exec(stm)
Replace the string in changeset with the Git revision no. of the wanted version
of Codinglib, as provided by BitBucket. For the most recent version, visit
https://bitbucket.org/jsrn/codinglib
and copy the revision no. of the top commit.
Executing this cell takes 1020 seconds depending on your server's internet
connection.
Regards,
Johan S. H. Rosenkilde__
jsrn@jsrn.dk
jsrn.dk