For years I maintained the coverings for the LJCR with C++ programs. They worked, but were too messy to share, hard to extend, and required a lot of interaction. In 2008 I decided to rewrite my code for Sage, an open source mathematics package created by William Stein.

Moving to Sage had a number of advantages:

- All of the features already implemented in Sage were available to me.
- The code automatically becomes available to anyone who downloads Sage.
- Anyone who wants to improve the code or add features can do so.
- By starting from scratch, and forcing myself to meet Sage's coding and documentation standards, the final product is much better.

So far there has been one major disadvantage: Sage uses Python, which is a nice programming language, but is interpreted rather than compiled, and so can be quite slow. Sage deals with this using Cython, which is a Python-like language which is compiled and can get nearly as good performance as C.

Covering designs code became part of Sage in release 3.3 in February 2009. Currently the only functions implemented are:

best_known_covering_design_www(v,k,t) |
get a covering from the LJCR |

is_covering(v,k,t) |
check if a set of blocks is a covering design |

schonheim(v,k,t) |
Schonheim lower bound for a (v,k,t) covering design |

trivial_covering_design(v,k,t) |
construct a trivial (v,k,t) covering design |

`is_covering(v,k,t)` is currently very slow, because it is
currently in python. A cython version is in the works, and will be in
a future release of Sage.

You can see the code by downloading and installing Sage. To just take a look, see covering_design.py.

If you have functions that you would like to see added, let me know. If you want to contribute code, start by downloading Sage and getting familiar with it.