Bounds on the number of mutually orthogonal Latin squares

This module contains known lower bounds on the number of mutually orthogonal Latin squares (MOLS) of a given size, and consists (almost) entirely of an internal, constant tuple of Python integers corresponding to Table 3.87 in the Handbook of Combinatorial Designs, 2nd edition, by Colbourn and Dinitz. One public function, lower_bound(), is provided to access it.

Make sure we have all of the entries:

sage: from sage.combinat.designs import MOLS_handbook_data
sage: len(MOLS_handbook_data._LOWER_BOUNDS)
10000
>>> from sage.all import *
>>> from sage.combinat.designs import MOLS_handbook_data
>>> len(MOLS_handbook_data._LOWER_BOUNDS)
10000

Jeff Dinitz’s website (at UVM) provides the following two updates to the table as printed in the second edition:

sage: from sage.combinat.designs import MOLS_handbook_data
sage: MOLS_handbook_data.lower_bound(60)
5
sage: MOLS_handbook_data.lower_bound(7968)
31
>>> from sage.all import *
>>> from sage.combinat.designs import MOLS_handbook_data
>>> MOLS_handbook_data.lower_bound(Integer(60))
5
>>> MOLS_handbook_data.lower_bound(Integer(7968))
31
sage.combinat.designs.MOLS_handbook_data.lower_bound(order)[source]

Return the best known lower bound on the number of MOLS of the given order.

The source of this information is Table 3.87 in the Handbook of Combinatorial Designs, 2nd edition, by Colbourn and Dinitz. A few updates have subsequently been provided on Jeff Dinitz’s website.

Parameters

orderint

The order (also known as the side) for which you’d like a lower bound on the number of MOLS instances. In the language of the Handbook, this is n, and it should be between 0 and 9999.

Returns

int

A lower bound on the number of MOLS.

Raises

IndexError

If you ask for an order that isn’t contained in the table.

Examples

There are no MOLS of order zero:

sage: from sage.combinat.designs import MOLS_handbook_data
sage: MOLS_handbook_data.lower_bound(0)
0
>>> from sage.all import *
>>> from sage.combinat.designs import MOLS_handbook_data
>>> MOLS_handbook_data.lower_bound(Integer(0))
0