Database of small combinatorial designs#

This module implements combinatorial designs that cannot be obtained by more general constructions. Most of them come from the Handbook of Combinatorial Designs [DesignHandbook].

All this would only be a dream without the mathematical knowledge and help of Julian R. Abel.

These functions can all be obtained through the designs.<tab> functions.

This module implements:

  • OA(7,18), OA(9,40), OA(7,66), OA(7,68), OA(8,69), OA(7,74), OA(8,76), OA(11,80), OA(15,112), OA(9,120), OA(9,135), OA(11,160), OA(16,176), OA(11,185), OA(10,205), OA(16,208), OA(15,224), OA(11,254), OA(20,352), OA(20,416), OA(10,469), OA(10,520), OA(12,522), OA(14,524), OA(20,544), OA(17,560), OA(11,640), OA(10,796), OA(15,896), OA(9,1078), OA(25,1262), OA(9,1612), OA(10,1620)

  • 2 MOLS of order 10, 5 MOLS of order 12, 4 MOLS of order 14, 4 MOLS of order 15, 3 MOLS of order 18

  • \(V(m,t)\) vectors:
    • \(m=3\) and \(t=\) \(2\), \(4\), \(6\), \(10\), \(12\), \(14\), \(20\), \(24\), \(26\), \(32\), \(34\)

    • \(m=4\) and \(t=\) \(3\), \(7\), \(9\), \(13\), \(15\), \(25\)

    • \(m=5\) and \(t=\) \(6\), \(8\), \(12\), \(14\), \(20\), \(26\)

    • \(m=6\) and \(t=\) \(5\), \(7\), \(11\), \(13\), \(17\), \(21\)

    • \(m=7\) and \(t=\) \(6\), \(10\), \(16\), \(18\)

    • \(m=8\) and \(t=\) \(9\), \(11\), \(17\), \(29\), \(57\)

    • \(m=9\) and \(t=\) \(12\), \(14\), \(18\), \(20\), \(22\), \(30\), \(34\), \(42\), \(44\)

    • \(m=10\) and \(t=\) \(13\), \(15\), \(19\), \(21\), \(25\), \(27\), \(31\), \(33\), \(43\), \(49\), \(81\), \(97\), \(103\), \(181\), \(187\), \(259\), \(273\), \(319\), \(391\), \(409\)

    • \(m=11\) and \(t=\) \(30\), \(32\), \(36\), \(38\), \(42\), \(56\), \(60\), \(62\), \(66\), \(78\), \(80\), \(86\), \(90\), \(92\), \(102\), \(116\), \(120\), \(128\), \(132\), \(146\), \(162\), \(170\), \(182\), \(188\), \(192\), \(198\), \(206\), \(210\), \(212\), \(216\), \(218\), \(230\), \(242\), \(246\), \(248\), \(260\), \(266\), \(270\), \(276\), \(288\), \(290\), \(296\), \(300\), \(302\), \(308\), \(312\), \(318\), \(330\), \(336\), \(338\), \(350\), \(356\), \(366\), \(368\), \(372\), \(378\), \(396\), \(402\), \(420\), \(422\), \(450\), \(452\)

    • \(m=12\) and \(t=\) \(33\), \(35\), \(45\), \(51\), \(55\), \(59\), \(61\), \(63\), \(69\), \(71\), \(73\), \(83\), \(85\), \(89\), \(91\), \(93\), \(101\), \(103\), \(115\), \(119\), \(121\), \(129\), \(133\), \(135\), \(139\), \(141\), \(145\), \(149\), \(155\), \(161\), \(169\), \(171\), \(185\), \(189\), \(191\), \(195\), \(199\), \(203\), \(213\), \(223\), \(229\), \(233\), \(243\), \(253\), \(255\), \(259\), \(265\), \(269\), \(271\), \(275\), \(281\), \(289\), \(293\), \(295\), \(301\), \(303\), \(309\), \(311\), \(321\), \(323\), \(335\), \(341\), \(355\), \(363\), \(379\), \(383\), \(385\), \(399\), \(401\), \(405\), \(409\), \(411\), \(413\)

  • RBIBD(120,8,1)

  • \((v,k,\lambda)\)-BIBD:
    • \(\lambda=1\):n \((66,6,1)\), \((76,6,1)\), \((96,6,1)\), \((106,6,1)\), \((111,6,1)\), \((120,8,1)\), \((126,6,1)\), \((136,6,1)\), \((141,6,1)\), \((171,6,1)\), \((196,6,1)\), \((201,6,1)\)

    • \(\lambda=2\):n \((56,11,2)\), \((79,13,2)\)

    • \(\lambda=8\):n \((45,9,8)\)

    • \(\lambda=14\):n \((176,50,14)\)

  • \((v,k,\lambda)\)-difference families:
    • \(\lambda=1\):n \((15,3,1)\), \((21,3,1)\), \((21,5,1)\), \((25,3,1)\), \((25,4,1)\), \((27,3,1)\), \((33,3,1)\), \((37,4,1)\), \((39,3,1)\), \((40,4,1)\), \((45,3,1)\), \((45,5,1)\), \((49,3,1)\), \((49,4,1)\), \((51,3,1)\), \((52,4,1)\), \((55,3,1)\), \((57,3,1)\), \((63,3,1)\), \((64,4,1)\), \((65,5,1)\), \((69,3,1)\), \((75,3,1)\), \((76,4,1)\), \((81,3,1)\), \((81,5,1)\), \((85,4,1)\), \((91,6,1)\), \((91,7,1)\), \((121,5,1)\), \((121,6,1)\), \((141,5,1)\), \((161,5,1)\), \((175,7,1)\), \((201,5,1)\), \((217,7,1)\), \((221,5,1)\), \((259,7,1)\)

    • \(\lambda=2\):n \((16,3,2)\), \((19,4,2)\), \((22,4,2)\), \((28,3,2)\), \((31,4,2)\), \((31,5,2)\), \((34,4,2)\), \((35,5,2)\), \((40,3,2)\), \((43,4,2)\), \((43,7,2)\), \((46,4,2)\), \((46,6,2)\), \((51,5,2)\), \((61,6,2)\), \((64,7,2)\), \((71,5,2)\), \((75,5,2)\), \((85,7,2)\), \((85,8,2)\), \((153,9,2)\), \((181,10,2)\)

    • \(\lambda=3\):n \((21,4,3)\), \((21,6,3)\), \((29,7,3)\), \((41,6,3)\), \((43,7,3)\), \((45,12,3)\), \((49,9,3)\), \((51,6,3)\), \((57,7,3)\), \((61,6,3)\), \((61,10,3)\), \((71,7,3)\), \((85,7,3)\), \((97,9,3)\), \((121,10,3)\)

    • \(\lambda=4\):n \((22,7,4)\), \((29,8,4)\), \((43,8,4)\), \((46,10,4)\), \((55,9,4)\), \((67,12,4)\), \((71,8,4)\)

    • \(\lambda=5\):n \((13,5,5)\), \((17,5,5)\), \((21,6,5)\), \((22,6,5)\), \((28,6,5)\), \((33,5,5)\), \((33,6,5)\), \((37,10,5)\), \((39,6,5)\), \((45,11,5)\), \((46,10,5)\), \((55,10,5)\), \((67,11,5)\), \((73,10,5)\)

    • \(\lambda=6\):n \((11,4,6)\), \((15,4,6)\), \((15,5,6)\), \((29,8,6)\), \((46,10,6)\), \((53,13,6)\), \((67,12,6)\)

    • \(\lambda=7\):n \((25,7,7)\), \((53,14,7)\), \((61,15,7)\)

    • \(\lambda=8\):n \((22,8,8)\), \((34,12,8)\), \((133,33,8)\)

    • \(\lambda=9\):n \((21,10,9)\)

    • \(\lambda=10\):n \((34,12,10)\), \((43,15,10)\), \((49,21,10)\)

    • \(\lambda=12\):n \((22,8,12)\)

    • \(\lambda=14\):n \((21,8,14)\)

    • \(\lambda=56\):n \((901,225,56)\)

  • \((v,k,\lambda)\)-difference matrices:
    • \(\lambda=1\):n \((12,6,1)\), \((21,6,1)\), \((24,8,1)\), \((28,6,1)\), \((33,6,1)\), \((35,6,1)\), \((36,9,1)\), \((39,6,1)\), \((44,6,1)\), \((45,7,1)\), \((48,9,1)\), \((51,6,1)\), \((52,6,1)\), \((55,7,1)\), \((56,8,1)\), \((57,8,1)\), \((60,6,1)\), \((75,8,1)\), \((273,17,1)\), \((993,32,1)\)

  • \((n,k;\lambda,\mu;u)\)-quasi-difference matrices:

    \((19,6;1,1;1)\), \((21,5;1,1;1)\), \((21,6;1,1;5)\), \((25,6;1,1;5)\), \((33,6;1,1;1)\), \((35,7;1,1;7)\), \((37,6;1,1;1)\), \((45,7;1,1;9)\), \((54,7;1,1;8)\), \((57,9;1,1;8)\)

  • \((q,k)\) evenly distributed sets
    • \(k = 4\): \(13\), \(25\), \(37\), \(49\), \(61\), \(73\), \(97\), \(109\), \(121\), \(157\), \(169\), \(181\), \(193\), \(229\), \(241\), \(277\), \(289\), \(313\), \(337\), \(349\), \(361\), \(373\), \(397\), \(409\), \(421\), \(433\), \(457\), \(529\), \(541\), \(577\), \(601\), \(613\), \(625\), \(661\), \(673\), \(709\), \(733\), \(757\), \(769\), \(829\), \(841\), \(853\), \(877\), \(937\), \(961\), \(997\), \(1009\), \(1021\), \(1033\), \(1069\), \(1093\), \(1117\), \(1129\), \(1153\), \(1201\), \(1213\), \(1237\), \(1249\), \(1297\), \(1321\), \(1369\), \(1381\), \(1429\), \(1453\), \(1489\), \(1549\), \(1597\), \(1609\), \(1621\), \(1657\), \(1669\), \(1681\), \(1693\), \(1741\), \(1753\), \(1777\), \(1789\), \(1801\), \(1849\), \(1861\), \(1873\), \(1933\), \(1993\), \(2017\), \(2029\), \(2053\), \(2089\), \(2113\), \(2137\), \(2161\), \(2197\), \(2209\), \(2221\), \(2269\), \(2281\), \(2293\), \(2341\), \(2377\), \(2389\), \(2401\), \(2437\), \(2473\), \(2521\), \(2557\), \(2593\), \(2617\), \(2677\), \(2689\), \(2713\), \(2749\), \(2797\), \(2809\)

    • \(k = 5\): \(41\), \(61\), \(101\), \(121\), \(181\), \(241\), \(281\), \(361\), \(401\), \(421\), \(461\), \(521\), \(541\), \(601\), \(641\), \(661\), \(701\), \(761\), \(821\), \(841\), \(881\), \(941\), \(961\), \(1021\), \(1061\), \(1181\), \(1201\), \(1301\), \(1321\), \(1361\), \(1381\), \(1481\), \(1601\), \(1621\), \(1681\), \(1721\), \(1741\), \(1801\), \(1861\), \(1901\)

    • \(k = 6\): \(31\), \(151\), \(181\), \(211\), \(241\), \(271\), \(331\), \(361\), \(421\), \(541\), \(571\), \(601\), \(631\), \(661\), \(691\), \(751\), \(811\), \(841\), \(961\), \(991\), \(1021\), \(1051\), \(1171\), \(1201\), \(1231\), \(1291\), \(1321\), \(1381\), \(1471\), \(1531\), \(1621\), \(1681\), \(1741\), \(1801\), \(1831\), \(1861\), \(1951\)

    • \(k = 7\): \(169\), \(337\), \(379\), \(421\), \(463\), \(547\), \(631\), \(673\), \(757\), \(841\), \(883\), \(967\), \(1009\), \(1051\), \(1093\), \(1303\), \(1429\), \(1471\), \(1597\), \(1681\), \(1723\), \(1849\), \(1933\)

    • \(k = 8\): \(449\), \(617\), \(673\), \(729\), \(841\), \(953\), \(1009\), \(1289\), \(1681\), \(1849\)

    • \(k = 9\): \(73\), \(433\), \(937\), \(1009\), \(1153\), \(1297\), \(1369\), \(1657\), \(1801\), \(1873\)

    • \(k = 10\): \(1171\), \(1531\), \(1621\), \(1801\)

REFERENCES:

DesignHandbook(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36)

Handbook of Combinatorial Designs (2ed) Charles Colbourn, Jeffrey Dinitz Chapman & Hall/CRC 2012

Aschbacher71

M. Aschbacher, On collineation groups of symmetric block designs. J. Combinatorial Theory Ser. A 11 (1971), pp. 272–281.

Hall71(1,2)

M. Hall, Jr., Combinatorial designs and groups. Actes du Congrès International des Mathématiciens (Nice, 1970), v.3, pp. 217–222. Gauthier-Villars, Paris, 1971.

Functions#

sage.combinat.designs.database.BIBD_106_6_1()#

Return a (106,6,1)-BIBD.

This constructions appears in II.3.32 from [DesignHandbook].

EXAMPLES:

sage: from sage.combinat.designs.database import BIBD_106_6_1
sage: from sage.combinat.designs.bibd import BalancedIncompleteBlockDesign
sage: BalancedIncompleteBlockDesign(106, BIBD_106_6_1())
(106,6,1)-Balanced Incomplete Block Design
sage.combinat.designs.database.BIBD_111_6_1()#

Return a (111,6,1)-BIBD.

This constructions appears in II.3.32 from [DesignHandbook].

EXAMPLES:

sage: from sage.combinat.designs.database import BIBD_111_6_1
sage: from sage.combinat.designs.bibd import BalancedIncompleteBlockDesign
sage: BalancedIncompleteBlockDesign(111, BIBD_111_6_1())
(111,6,1)-Balanced Incomplete Block Design
sage.combinat.designs.database.BIBD_126_6_1()#

Return a (126,6,1)-BIBD.

This constructions appears in VI.16.92 from [DesignHandbook].

EXAMPLES:

sage: from sage.combinat.designs.database import BIBD_126_6_1
sage: from sage.combinat.designs.bibd import BalancedIncompleteBlockDesign
sage: BalancedIncompleteBlockDesign(126, BIBD_126_6_1())
(126,6,1)-Balanced Incomplete Block Design
sage.combinat.designs.database.BIBD_136_6_1()#

Return a (136,6,1)-BIBD.

This constructions appears in II.3.32 from [DesignHandbook].

EXAMPLES:

sage: from sage.combinat.designs.database import BIBD_136_6_1
sage: from sage.combinat.designs.bibd import BalancedIncompleteBlockDesign
sage: BalancedIncompleteBlockDesign(136, BIBD_136_6_1())
(136,6,1)-Balanced Incomplete Block Design
sage.combinat.designs.database.BIBD_141_6_1()#

Return a (141,6,1)-BIBD.

This constructions appears in II.3.32 from [DesignHandbook].

EXAMPLES:

sage: from sage.combinat.designs.database import BIBD_141_6_1
sage: from sage.combinat.designs.bibd import BalancedIncompleteBlockDesign
sage: BalancedIncompleteBlockDesign(141, BIBD_141_6_1())
(141,6,1)-Balanced Incomplete Block Design
sage.combinat.designs.database.BIBD_171_6_1()#

Return a (171,6,1)-BIBD.

This constructions appears in II.3.32 from [DesignHandbook].

EXAMPLES:

sage: from sage.combinat.designs.database import BIBD_171_6_1
sage: from sage.combinat.designs.bibd import BalancedIncompleteBlockDesign
sage: BalancedIncompleteBlockDesign(171, BIBD_171_6_1())
(171,6,1)-Balanced Incomplete Block Design
sage.combinat.designs.database.BIBD_196_6_1()#

Return a (196,6,1)-BIBD.

This constructions appears in II.3.32 from [DesignHandbook].

EXAMPLES:

sage: from sage.combinat.designs.database import BIBD_196_6_1
sage: from sage.combinat.designs.bibd import BalancedIncompleteBlockDesign
sage: BalancedIncompleteBlockDesign(196, BIBD_196_6_1())
(196,6,1)-Balanced Incomplete Block Design
sage.combinat.designs.database.BIBD_201_6_1()#

Return a (201,6,1)-BIBD.

This constructions appears in II.3.32 from [DesignHandbook].

EXAMPLES:

sage: from sage.combinat.designs.database import BIBD_201_6_1
sage: from sage.combinat.designs.bibd import BalancedIncompleteBlockDesign
sage: BalancedIncompleteBlockDesign(201, BIBD_201_6_1())
(201,6,1)-Balanced Incomplete Block Design
sage.combinat.designs.database.BIBD_45_9_8(from_code=False)#

Return a \((45,9,1)\)-BIBD.

This BIBD is obtained from the codewords of minimal weight in the ExtendedQuadraticResidueCode() of length 48. This construction appears in VII.11.2 from [DesignHandbook], which cites [HT95].

INPUT:

  • from_code (boolean) – whether to build the design from hardcoded data (default) or from the code object (much longer).

EXAMPLES:

sage: from sage.combinat.designs.database import BIBD_45_9_8
sage: from sage.combinat.designs.bibd import BalancedIncompleteBlockDesign
sage: B = BalancedIncompleteBlockDesign(45, BIBD_45_9_8(),lambd=8); B
(45,9,8)-Balanced Incomplete Block Design

REFERENCE:

HT95

W. Huffman and V. Tonchev, The existence of extremal self-dual \([50, 25, 10]\) codes and quasi-symmetric \(2-(49, 9, 6)\) designs, Designs, Codes and Cryptography September 1995, Volume 6, Issue 2, pp 97-106

sage.combinat.designs.database.BIBD_56_11_2()#

Return a symmetric \((56,11,2)\)-BIBD.

The construction implemented is given in [Hall71].

Note

A symmetric \((v,k,\lambda)\) BIBD is a \((v,k,\lambda)\) BIBD with \(v\) blocks.

EXAMPLES:

sage: from sage.combinat.designs.database import BIBD_56_11_2 sage: D = IncidenceStructure(BIBD_56_11_2()) sage: D.is_t_design(t=2, v=56, k=11, l=2) True

sage.combinat.designs.database.BIBD_66_6_1()#

Return a (66,6,1)-BIBD.

This BIBD was obtained from La Jolla covering repository (https://math.ccrwest.org/cover.html) where it is attributed to Colin Barker.

EXAMPLES:

sage: from sage.combinat.designs.database import BIBD_66_6_1
sage: from sage.combinat.designs.bibd import BalancedIncompleteBlockDesign
sage: BalancedIncompleteBlockDesign(66, BIBD_66_6_1())
(66,6,1)-Balanced Incomplete Block Design
sage.combinat.designs.database.BIBD_76_6_1()#

Return a (76,6,1)-BIBD.

This BIBD was obtained from La Jolla covering repository (https://math.ccrwest.org/cover.html) where it is attributed to Colin Barker.

EXAMPLES:

sage: from sage.combinat.designs.database import BIBD_76_6_1
sage: from sage.combinat.designs.bibd import BalancedIncompleteBlockDesign
sage: BalancedIncompleteBlockDesign(76, BIBD_76_6_1())
(76,6,1)-Balanced Incomplete Block Design
sage.combinat.designs.database.BIBD_79_13_2()#

Return a symmetric \((79,13,2)\)-BIBD.

The construction implemented is the one described in [Aschbacher71]. A typo in that paper was corrected in [Hall71].

Note

A symmetric \((v,k,\lambda)\) BIBD is a \((v,k,\lambda)\) BIBD with \(v\) blocks.

EXAMPLES:

sage: from sage.combinat.designs.database import BIBD_79_13_2 sage: D = IncidenceStructure(BIBD_79_13_2()) sage: D.is_t_design(t=2, v=79, k=13, l=2) True

sage.combinat.designs.database.BIBD_96_6_1()#

Return a (96,6,1)-BIBD.

This BIBD was obtained from La Jolla covering repository (https://math.ccrwest.org/cover.html) where it is attributed to Colin Barker.

EXAMPLES:

sage: from sage.combinat.designs.database import BIBD_96_6_1
sage: from sage.combinat.designs.bibd import BalancedIncompleteBlockDesign
sage: BalancedIncompleteBlockDesign(96, BIBD_96_6_1())
(96,6,1)-Balanced Incomplete Block Design
sage.combinat.designs.database.DM_12_6_1()#

Return a \((12,6,1)\)-difference matrix as built in [Hanani75].

This design is Lemma 3.21 from [Hanani75].

EXAMPLES:

sage: from sage.combinat.designs.designs_pyx import is_difference_matrix
sage: from sage.combinat.designs.database import DM_12_6_1
sage: G,M = DM_12_6_1()
sage: is_difference_matrix(M,G,6,1)
True

Can be obtained from the constructor:

sage: _ = designs.difference_matrix(12,6)

REFERENCES:

Hanani75(1,2)

Haim Hanani, Balanced incomplete block designs and related designs, doi:10.1016/0012-365X(75)90040-0, Discrete Mathematics, Volume 11, Issue 3, 1975, Pages 255-369.

sage.combinat.designs.database.DM_21_6_1()#

Return a \((21,6,1)\)-difference matrix.

As explained in the Handbook III.3.50 [DesignHandbook].

EXAMPLES:

sage: from sage.combinat.designs.designs_pyx import is_difference_matrix
sage: from sage.combinat.designs.database import DM_21_6_1
sage: G,M = DM_21_6_1()
sage: is_difference_matrix(M,G,6,1)
True

Can be obtained from the constructor:

sage: _ = designs.difference_matrix(21,6)
sage.combinat.designs.database.DM_24_8_1()#

Return a \((24,8,1)\)-difference matrix.

As explained in the Handbook III.3.52 [DesignHandbook].

EXAMPLES:

sage: from sage.combinat.designs.designs_pyx import is_difference_matrix
sage: from sage.combinat.designs.database import DM_24_8_1
sage: G,M = DM_24_8_1()
sage: is_difference_matrix(M,G,8,1)
True

Can be obtained from the constructor:

sage: _ = designs.difference_matrix(24,8)
sage.combinat.designs.database.DM_273_17_1()#

Return a \((273,17,1)\)-difference matrix.

Given by Julian R. Abel.

EXAMPLES:

sage: from sage.combinat.designs.designs_pyx import is_difference_matrix
sage: from sage.combinat.designs.database import DM_273_17_1
sage: G,M = DM_273_17_1()
sage: is_difference_matrix(M,G,17,1)
True

Can be obtained from the constructor:

sage: _ = designs.difference_matrix(273,17)
sage.combinat.designs.database.DM_28_6_1()#

Return a \((28,6,1)\)-difference matrix.

As explained in the Handbook III.3.54 [DesignHandbook].

EXAMPLES:

sage: from sage.combinat.designs.designs_pyx import is_difference_matrix
sage: from sage.combinat.designs.database import DM_28_6_1
sage: G,M = DM_28_6_1()
sage: is_difference_matrix(M,G,6,1)
True

Can be obtained from the constructor:

sage: _ = designs.difference_matrix(28,6)
sage.combinat.designs.database.DM_33_6_1()#

Return a \((33,6,1)\)-difference matrix.

As explained in the Handbook III.3.56 [DesignHandbook].

EXAMPLES:

sage: from sage.combinat.designs.designs_pyx import is_difference_matrix
sage: from sage.combinat.designs.database import DM_33_6_1
sage: G,M = DM_33_6_1()
sage: is_difference_matrix(M,G,6,1)
True

Can be obtained from the constructor:

sage: _ = designs.difference_matrix(33,6)
sage.combinat.designs.database.DM_35_6_1()#

Return a \((35,6,1)\)-difference matrix.

As explained in the Handbook III.3.58 [DesignHandbook].

EXAMPLES:

sage: from sage.combinat.designs.designs_pyx import is_difference_matrix
sage: from sage.combinat.designs.database import DM_35_6_1
sage: G,M = DM_35_6_1()
sage: is_difference_matrix(M,G,6,1)
True

Can be obtained from the constructor:

sage: _ = designs.difference_matrix(35,6)
sage.combinat.designs.database.DM_36_9_1()#

Return a \((36,9,1)\)-difference matrix.

As explained in the Handbook III.3.59 [DesignHandbook].

EXAMPLES:

sage: from sage.combinat.designs.designs_pyx import is_difference_matrix
sage: from sage.combinat.designs.database import DM_36_9_1
sage: G,M = DM_36_9_1()
sage: is_difference_matrix(M,G,9,1)
True

Can be obtained from the constructor:

sage: _ = designs.difference_matrix(36,9)
sage.combinat.designs.database.DM_39_6_1()#

Return a \((39,6,1)\)-difference matrix.

As explained in the Handbook III.3.61 [DesignHandbook].

EXAMPLES:

sage: from sage.combinat.designs.designs_pyx import is_difference_matrix
sage: from sage.combinat.designs.database import DM_39_6_1
sage: G,M = DM_39_6_1()
sage: is_difference_matrix(M,G,6,1)
True

The design is available from the general constructor:

sage: designs.difference_matrix(39,6,existence=True)
True
sage.combinat.designs.database.DM_44_6_1()#

Return a \((44,6,1)\)-difference matrix.

As explained in the Handbook III.3.64 [DesignHandbook].

EXAMPLES:

sage: from sage.combinat.designs.designs_pyx import is_difference_matrix
sage: from sage.combinat.designs.database import DM_44_6_1
sage: G,M = DM_44_6_1()
sage: is_difference_matrix(M,G,6,1)
True

Can be obtained from the constructor:

sage: _ = designs.difference_matrix(44,6)
sage.combinat.designs.database.DM_45_7_1()#

Return a \((45,7,1)\)-difference matrix.

As explained in the Handbook III.3.65 [DesignHandbook].

… whose description contained a very deadly typo, kindly fixed by Julian R. Abel.

EXAMPLES:

sage: from sage.combinat.designs.designs_pyx import is_difference_matrix
sage: from sage.combinat.designs.database import DM_45_7_1
sage: G,M = DM_45_7_1()
sage: is_difference_matrix(M,G,7,1)
True

Can be obtained from the constructor:

sage: _ = designs.difference_matrix(45,7)
sage.combinat.designs.database.DM_48_9_1()#

Return a \((48,9,1)\)-difference matrix.

As explained in the Handbook III.3.67 [DesignHandbook].

EXAMPLES:

sage: from sage.combinat.designs.designs_pyx import is_difference_matrix
sage: from sage.combinat.designs.database import DM_48_9_1
sage: G,M = DM_48_9_1()
sage: is_difference_matrix(M,G,9,1)
True

Can be obtained from the constructor:

sage: _ = designs.difference_matrix(48,9)
sage.combinat.designs.database.DM_51_6_1()#

Return a \((51,6,1)\)-difference matrix.

As explained in the Handbook III.3.69 [DesignHandbook].

EXAMPLES:

sage: from sage.combinat.designs.designs_pyx import is_difference_matrix
sage: from sage.combinat.designs.database import DM_51_6_1
sage: G,M = DM_51_6_1()
sage: is_difference_matrix(M,G,6,1)
True

Can be obtained from the constructor:

sage: _ = designs.difference_matrix(51,6)
sage.combinat.designs.database.DM_52_6_1()#

Return a \((52,6,1)\)-difference matrix.

As explained in the Handbook III.3.70 [DesignHandbook].

EXAMPLES:

sage: from sage.combinat.designs.designs_pyx import is_difference_matrix
sage: from sage.combinat.designs.database import DM_52_6_1
sage: G,M = DM_52_6_1()
sage: is_difference_matrix(M,G,6,1)
True

Can be obtained from the constructor:

sage: _ = designs.difference_matrix(52,6)
sage.combinat.designs.database.DM_55_7_1()#

Return a \((55,7,1)\)-difference matrix.

As explained in the Handbook III.3.72 [DesignHandbook].

EXAMPLES:

sage: from sage.combinat.designs.designs_pyx import is_difference_matrix
sage: from sage.combinat.designs.database import DM_55_7_1
sage: G,M = DM_55_7_1()
sage: is_difference_matrix(M,G,7,1)
True

Can be obtained from the constructor:

sage: _ = designs.difference_matrix(55,7)
sage.combinat.designs.database.DM_56_8_1()#

Return a \((56,8,1)\)-difference matrix.

As explained in the Handbook III.3.73 [DesignHandbook].

EXAMPLES:

sage: from sage.combinat.designs.designs_pyx import is_difference_matrix
sage: from sage.combinat.designs.database import DM_56_8_1
sage: G,M = DM_56_8_1()
sage: is_difference_matrix(M,G,8,1)
True

Can be obtained from the constructor:

sage: _ = designs.difference_matrix(56,8)
sage.combinat.designs.database.DM_57_8_1()#

Return a \((57,8,1)\)-difference matrix.

Given by Julian R. Abel.

EXAMPLES:

sage: from sage.combinat.designs.designs_pyx import is_difference_matrix
sage: from sage.combinat.designs.database import DM_57_8_1
sage: G,M = DM_57_8_1()
sage: is_difference_matrix(M,G,8,1)
True

Can be obtained from the constructor:

sage: _ = designs.difference_matrix(57,8)
sage.combinat.designs.database.DM_60_6_1()#

Return a \((60,6,1)\)-difference matrix.

As explained in [JulianAbel13].

REFERENCES:

JulianAbel13(1,2)

Existence of Five MOLS of Orders 18 and 60 R. Julian R. Abel Journal of Combinatorial Designs 2013

http://onlinelibrary.wiley.com/doi/10.1002/jcd.21384/abstract

EXAMPLES:

sage: from sage.combinat.designs.designs_pyx import is_difference_matrix
sage: from sage.combinat.designs.database import DM_60_6_1
sage: G,M = DM_60_6_1()
sage: is_difference_matrix(M,G,6,1)
True

Can be obtained from the constructor:

sage: _ = designs.difference_matrix(60,6)
sage.combinat.designs.database.DM_75_8_1()#

Return a \((75,8,1)\)-difference matrix.

As explained in the Handbook III.3.75 [DesignHandbook].

EXAMPLES:

sage: from sage.combinat.designs.designs_pyx import is_difference_matrix
sage: from sage.combinat.designs.database import DM_75_8_1
sage: G,M = DM_75_8_1()
sage: is_difference_matrix(M,G,8,1)
True

Can be obtained from the constructor:

sage: _ = designs.difference_matrix(75,8)
sage.combinat.designs.database.DM_993_32_1()#

Return a \((993,32,1)\)-difference matrix.

Given by Julian R. Abel.

EXAMPLES:

sage: from sage.combinat.designs.designs_pyx import is_difference_matrix
sage: from sage.combinat.designs.database import DM_993_32_1
sage: G,M = DM_993_32_1()
sage: is_difference_matrix(M,G,32,1)
True

Can be obtained from the constructor:

sage: _ = designs.difference_matrix(993,32)
sage.combinat.designs.database.HigmanSimsDesign()#

Return the Higman-Sims designs, which is a \((176, 50, 14)\)-BIBD.

This design is built from a from the WittDesign \(W\) on 24 points. We define two points \(a,b\), and consider:

  • The collection \(W_a\) of all blocks of \(W\) containing \(a\) but not containing \(b\).

  • The collection \(W_b\) of all blocks of \(W\) containing \(b\) but not containing \(a\).

The design is then obtained from the incidence structure produced by the blocks \(A\in W_a\) and \(B\in W_b\) whose intersection has cardinality 2. This construction, due to M.Smith, can be found in [KY04] or in 10.A.(v) of [BL1984].

EXAMPLES:

sage: H = designs.HigmanSimsDesign(); H  # optional - gap_packages
Incidence structure with 176 points and 176 blocks
sage: H.is_t_design(return_parameters=1) # optional - gap_packages
(True, (2, 176, 50, 14))

Make sure that the automorphism group of this designs is isomorphic to the automorphism group of the HigmanSimsGraph(). Note that the first of those permutation groups acts on 176 points, while the second acts on 100:

sage: gH = H.automorphism_group()                        # optional - gap_packages
sage: gG = graphs.HigmanSimsGraph().automorphism_group() # optional - gap_packages
sage: gG.is_isomorphic(gG)                   # long time # optional - gap_packages
True

REFERENCE:

KY04

S. Klee and L. Yates, Tight Subdesigns of the Higman-Sims Design, Rose-Hulman Undergraduate Math. J 5.2 (2004). https://www.rose-hulman.edu/mathjournal/archives/2004/vol5-n2/paper9/v5n2-9pd.pdf

sage.combinat.designs.database.MOLS_10_2()#

Return a pair of MOLS of order 10

Data obtained from http://www.cecm.sfu.ca/organics/papers/lam/paper/html/POLS10/POLS10.html

EXAMPLES:

sage: from sage.combinat.designs.latin_squares import are_mutually_orthogonal_latin_squares
sage: from sage.combinat.designs.database import MOLS_10_2
sage: MOLS = MOLS_10_2()
sage: print(are_mutually_orthogonal_latin_squares(MOLS))
True

The design is available from the general constructor:

sage: designs.orthogonal_arrays.is_available(2,10)
True
sage.combinat.designs.database.MOLS_12_5()#

Return 5 MOLS of order 12

These MOLS have been found by Brendan McKay.

EXAMPLES:

sage: from sage.combinat.designs.latin_squares import are_mutually_orthogonal_latin_squares
sage: from sage.combinat.designs.database import MOLS_12_5
sage: MOLS = MOLS_12_5()
sage: print(are_mutually_orthogonal_latin_squares(MOLS))
True
sage.combinat.designs.database.MOLS_14_4()#

Return four MOLS of order 14

These MOLS were shared by Ian Wanless. The first proof of existence was given in [Todorov12].

EXAMPLES:

sage: from sage.combinat.designs.latin_squares import are_mutually_orthogonal_latin_squares
sage: from sage.combinat.designs.database import MOLS_14_4
sage: MOLS = MOLS_14_4()
sage: print(are_mutually_orthogonal_latin_squares(MOLS))
True

The design is available from the general constructor:

sage: designs.orthogonal_arrays.is_available(4,14)
True

REFERENCE:

Todorov12

D.T. Todorov, Four mutually orthogonal Latin squares of order 14, Journal of Combinatorial Designs 2012, vol.20 n.8 pp.363-367

sage.combinat.designs.database.MOLS_15_4()#

Return 4 MOLS of order 15.

These MOLS were shared by Ian Wanless.

EXAMPLES:

sage: from sage.combinat.designs.latin_squares import are_mutually_orthogonal_latin_squares
sage: from sage.combinat.designs.database import MOLS_15_4
sage: MOLS = MOLS_15_4()
sage: print(are_mutually_orthogonal_latin_squares(MOLS))
True

The design is available from the general constructor:

sage: designs.orthogonal_arrays.is_available(4,15)
True
sage.combinat.designs.database.MOLS_18_3()#

Return 3 MOLS of order 18.

These MOLS were shared by Ian Wanless.

EXAMPLES:

sage: from sage.combinat.designs.latin_squares import are_mutually_orthogonal_latin_squares
sage: from sage.combinat.designs.database import MOLS_18_3
sage: MOLS = MOLS_18_3()
sage: print(are_mutually_orthogonal_latin_squares(MOLS))
True

The design is available from the general constructor:

sage: designs.orthogonal_arrays.is_available(3,18)
True
sage.combinat.designs.database.OA_10_1620()#

Returns an OA(10,1620)

This is obtained through the generalized Brouwer-van Rees construction. Indeed, \(1620 = 144.11+(36=4.9)\) and there exists an \(OA(10,153) - OA(10,9)\).

Note

This function should be removed once find_brouwer_van_rees_with_one_truncated_column() can handle all incomplete orthogonal arrays obtained through incomplete_orthogonal_array().

EXAMPLES:

sage: from sage.combinat.designs.designs_pyx import is_orthogonal_array
sage: from sage.combinat.designs.database import OA_10_1620
sage: OA = OA_10_1620()                       # not tested -- ~7s
sage: is_orthogonal_array(OA,10,1620,2) # not tested -- ~7s
True

The design is available from the general constructor:

sage: designs.orthogonal_arrays.is_available(10,1620)
True
sage.combinat.designs.database.OA_10_205()#

Return an \(OA(10,205)\).

Julian R. Abel shared the following construction, which originally appeared in Theorem 8.7 of [Greig99], and can in Lemmas 5.14-5.16 of [ColDin01]:

Consider a \(PG(2,4^2)\) containing a Baer subplane (i.e. a \(PG(2,4)\)) \(B\) and a point \(p\in B\). Among the \(4^2+1=17\) lines of \(PG(2,4^2)\) containing \(p\):

  • \(4+1=5\) lines intersect \(B\) on \(5\) points

  • \(4^2-4=12\) lines intersect \(B\) on \(1\) point

As those lines are disjoint outside of \(B\) we can use them as groups to build a GDD on \(16^2+16+1-(4^4+4+1)=252\) points. By keeping only 9 lines of the second kind, however, we obtain a \((204,\{9,13,17\})\)-GDD of type 12^5.16^9.

We complete it into a PBD by adding a block \(g\cup \{204\}\) for each group \(g\). We then build an OA from this PBD using the fact that all blocks of size 9 are disjoint.

EXAMPLES:

sage: from sage.combinat.designs.designs_pyx import is_orthogonal_array
sage: from sage.combinat.designs.database import OA_10_205
sage: OA = OA_10_205()
sage: is_orthogonal_array(OA,10,205,2)
True

The design is available from the general constructor:

sage: designs.orthogonal_arrays.is_available(10,205)
True
sage.combinat.designs.database.OA_10_469()#

Return an OA(10,469)

This construction appears in [Brouwer80]. It is based on the same technique used in brouwer_separable_design().

Julian R. Abel’s instructions:

Brouwer notes that a cyclic \(PG(2,37)\) (or \((1407,38,1)\)-BIBD) can be obtained with a base block containing \(13,9,\) and \(16\) points in each residue class mod 3. Thus, by reducing the \(PG(2,37)\) to its points congruent to \(0 \pmod 3\) one obtains a \((469,\{9,13,16\})\)-PBD which consists in 3 symmetric designs, i.e. 469 blocks of size 9, 469 blocks of size 13, and 469 blocks of size 16.

For each block size \(s\), one can build a matrix with size \(s\times 469\) in which each block is a row, and such that each point of the PBD appears once per column. By multiplying a row of an \(OA(9,s)-s.OA(9,1)\) with the rows of the matrix one obtains a parallel class of a resolvable \(OA(9,469)\).

Add to this the parallel class of all blocks \((0,0,...),(1,1,...),...\) to obtain a resolvable \(OA(9,469)\) equivalent to an \(OA(10,469)\).

EXAMPLES:

sage: from sage.combinat.designs.designs_pyx import is_orthogonal_array
sage: from sage.combinat.designs.database import OA_10_469
sage: OA = OA_10_469()
sage: is_orthogonal_array(OA,10,469,2)
True

The design is available from the general constructor:

sage: designs.orthogonal_arrays.is_available(10,469)
True
sage.combinat.designs.database.OA_10_520()#

Return an OA(10,520).

This design is built by the slightly more general construction OA_520_plus_x().

EXAMPLES:

sage: from sage.combinat.designs.designs_pyx import is_orthogonal_array
sage: from sage.combinat.designs.database import OA_10_520
sage: OA = OA_10_520()
sage: is_orthogonal_array(OA,10,520,2)
True

The design is available from the general constructor:

sage: designs.orthogonal_arrays.is_available(10,520)
True
sage.combinat.designs.database.OA_10_796()#

Returns an OA(10,796)

Construction shared by Julian R. Abel, from [AC07]:

Truncate one block of a \(TD(17,47)\) to size \(13\), then add an extra point. Form a block on each group plus the extra point: we obtain a \((796, \{13,16,17,47,48\})\)-PBD in which only the extra point lies in more than one block of size \(48\) (and each other point lies in exactly 1 such block).

For each block \(B\) (of size \(k\) say) not containing the extra point, construct a \(TD(10, k) - k.TD(k,1)\) on \(I(10) X B\). For each block \(B\) (of size \(k=47\) or \(48\)) containing the extra point, construct a \(TD(10,k) - TD(k,1)\) on \(I(10) X B\), the size \(1\) hole being on \(I(10) X P\) where \(P\) is the extra point. Finally form \(1\) extra block of size \(10\) on \(I(10) X P\).

EXAMPLES:

sage: from sage.combinat.designs.designs_pyx import is_orthogonal_array
sage: from sage.combinat.designs.database import OA_10_796
sage: OA = OA_10_796()
sage: is_orthogonal_array(OA,10,796,2)
True

The design is available from the general constructor:

sage: designs.orthogonal_arrays.is_available(10,796)
True
sage.combinat.designs.database.OA_11_160()#

Returns an OA(11,160)

Published by Julian R. Abel in [Ab1995]. Uses the fact that \(160 = 2^5 \times 5\) is a product of a power of \(2\) and a prime number.

EXAMPLES:

sage: from sage.combinat.designs.designs_pyx import is_orthogonal_array
sage: from sage.combinat.designs.database import OA_11_160
sage: OA = OA_11_160()
sage: is_orthogonal_array(OA,11,160,2)
True

The design is available from the general constructor:

sage: designs.orthogonal_arrays.is_available(11,160)
True
sage.combinat.designs.database.OA_11_185()#

Returns an OA(11,185)

The construction is given in [Greig99]. In Julian R. Abel’s words:

Start with a \(PG(2,16)\) with a \(7\) points Fano subplane; outside this plane there are \(7(17-3) = 98\) points on a line of the subplane and \(273-98-7 = 168\) other points. Greig notes that the subdesign consisting of these \(168\) points is a \((168, \{10,12\})-PBD\). Now add the \(17\) points of a line disjoint from this subdesign (e.g. a line of the Fano subplane). This line will intersect every line of the \(168\) point subdesign in \(1\) point. Thus the new line sizes are \(11\) and \(13\), plus a unique line of size \(17\), giving a \((185,\{11,13,17\}\)-PBD and an \(OA(11,185)\).

EXAMPLES:

sage: from sage.combinat.designs.designs_pyx import is_orthogonal_array
sage: from sage.combinat.designs.database import OA_11_185
sage: OA = OA_11_185()
sage: is_orthogonal_array(OA,11,185,2)
True

The design is available from the general constructor:

sage: designs.orthogonal_arrays.is_available(11,185)
True
sage.combinat.designs.database.OA_11_254()#

Return an OA(11,254)

This constructions appears in [Greig99].

From a cyclic \(PG(2,19)\) whose base blocks contains 7,9, and 4 points in the congruence classes mod 3, build a \((254,{11,13,16})-PBD\) by ignoring the points of a congruence class. There exist \(OA(12,11),OA(12,13),OA(12,16)\), which gives the \(OA(11,254)\).

EXAMPLES:

sage: from sage.combinat.designs.designs_pyx import is_orthogonal_array
sage: from sage.combinat.designs.database import OA_11_254
sage: OA = OA_11_254()
sage: is_orthogonal_array(OA,11,254,2)
True

The design is available from the general constructor:

sage: designs.orthogonal_arrays.is_available(11,254)
True
sage.combinat.designs.database.OA_11_640()#

Returns an OA(11,640)

Published by Julian R. Abel in [Ab1995] (uses the fact that \(640=2^7 \times 5\) is the product of a power of \(2\) and a prime number).

EXAMPLES:

sage: from sage.combinat.designs.designs_pyx import is_orthogonal_array
sage: from sage.combinat.designs.database import OA_11_640
sage: OA = OA_11_640()                        # not tested (too long)
sage: is_orthogonal_array(OA,11,640,2)  # not tested (too long)
True

The design is available from the general constructor:

sage: designs.orthogonal_arrays.is_available(11,640)
True
sage.combinat.designs.database.OA_11_80()#

Return an OA(11,80)

As explained in the Handbook III.3.76 [DesignHandbook]. Uses the fact that \(80 = 2^4 \times 5\) and that \(5\) is prime.

EXAMPLES:

sage: from sage.combinat.designs.designs_pyx import is_orthogonal_array
sage: from sage.combinat.designs.database import OA_11_80
sage: OA = OA_11_80()
sage: is_orthogonal_array(OA,11,80,2)
True

The design is available from the general constructor:

sage: designs.orthogonal_arrays.is_available(11,80)
True
sage.combinat.designs.database.OA_12_522()#

Return an OA(12,522)

This design is built by the slightly more general construction OA_520_plus_x().

EXAMPLES:

sage: from sage.combinat.designs.designs_pyx import is_orthogonal_array
sage: from sage.combinat.designs.database import OA_12_522
sage: OA = OA_12_522()
sage: is_orthogonal_array(OA,12,522,2)
True

The design is available from the general constructor:

sage: designs.orthogonal_arrays.is_available(12,522)
True
sage.combinat.designs.database.OA_14_524()#

Return an OA(14,524)

This design is built by the slightly more general construction OA_520_plus_x().

EXAMPLES:

sage: from sage.combinat.designs.designs_pyx import is_orthogonal_array
sage: from sage.combinat.designs.database import OA_14_524
sage: OA = OA_14_524()
sage: is_orthogonal_array(OA,14,524,2)
True

The design is available from the general constructor:

sage: designs.orthogonal_arrays.is_available(14,524)
True
sage.combinat.designs.database.OA_15_112()#

Returns an OA(15,112)

Published by Julian R. Abel in [Ab1995]. Uses the fact that 112 = \(2^4 \times 7\) and that \(7\) is prime.

EXAMPLES:

sage: from sage.combinat.designs.designs_pyx import is_orthogonal_array
sage: from sage.combinat.designs.database import OA_15_112
sage: OA = OA_15_112()
sage: is_orthogonal_array(OA,15,112,2)
True

The design is available from the general constructor:

sage: designs.orthogonal_arrays.is_available(15,112)
True
sage.combinat.designs.database.OA_15_224()#

Returns an OA(15,224)

Published by Julian R. Abel in [Ab1995] (uses the fact that \(224=2^5 \times 7\) is a product of a power of \(2\) and a prime number).

EXAMPLES:

sage: from sage.combinat.designs.designs_pyx import is_orthogonal_array
sage: from sage.combinat.designs.database import OA_15_224
sage: OA = OA_15_224()                         # not tested -- too long
sage: is_orthogonal_array(OA,15,224,2)   # not tested -- too long
True

The design is available from the general constructor:

sage: designs.orthogonal_arrays.is_available(15,224)
True
sage.combinat.designs.database.OA_15_896()#

Returns an OA(15,896)

Uses the fact that \(896 = 2^7 \times 7\) is the product of a power of \(2\) and a prime number.

EXAMPLES:

sage: from sage.combinat.designs.designs_pyx import is_orthogonal_array
sage: from sage.combinat.designs.database import OA_15_896
sage: OA = OA_15_896()                          # not tested -- too long (~2min)
sage: is_orthogonal_array(OA,15,896,2)    # not tested -- too long
True

The design is available from the general constructor:

sage: designs.orthogonal_arrays.is_available(15,896)
True
sage.combinat.designs.database.OA_16_176()#

Returns an OA(16,176)

Published by Julian R. Abel in [Ab1995]. Uses the fact that \(176 = 2^4 \times 11\) is a product of a power of \(2\) and a prime number.

EXAMPLES:

sage: from sage.combinat.designs.designs_pyx import is_orthogonal_array
sage: from sage.combinat.designs.database import OA_16_176
sage: OA = OA_16_176()
sage: is_orthogonal_array(OA,16,176,2)
True

The design is available from the general constructor:

sage: designs.orthogonal_arrays.is_available(16,176)
True
sage.combinat.designs.database.OA_16_208()#

Returns an OA(16,208)

Published by Julian R. Abel in [Ab1995]. Uses the fact that \(208 = 2^4 \times 13\) is a product of \(2\) and a prime number.

EXAMPLES:

sage: from sage.combinat.designs.designs_pyx import is_orthogonal_array
sage: from sage.combinat.designs.database import OA_16_208
sage: OA = OA_16_208()                        # not tested -- too long
sage: is_orthogonal_array(OA,16,208,2)  # not tested -- too long
True

The design is available from the general constructor:

sage: designs.orthogonal_arrays.is_available(16,208)
True
sage.combinat.designs.database.OA_17_560()#

Returns an OA(17,560)

This OA is built in Corollary 2.2 of [Thwarts].

EXAMPLES:

sage: from sage.combinat.designs.designs_pyx import is_orthogonal_array
sage: from sage.combinat.designs.database import OA_17_560
sage: OA = OA_17_560()
sage: is_orthogonal_array(OA,17,560,2)
True

The design is available from the general constructor:

sage: designs.orthogonal_arrays.is_available(17,560)
True
sage.combinat.designs.database.OA_20_352()#

Returns an OA(20,352)

Published by Julian R. Abel in [Ab1995] (uses the fact that \(352=2^5 \times 11\) is the product of a power of \(2\) and a prime number).

EXAMPLES:

sage: from sage.combinat.designs.designs_pyx import is_orthogonal_array
sage: from sage.combinat.designs.database import OA_20_352
sage: OA = OA_20_352()                        # not tested (~25s)
sage: is_orthogonal_array(OA,20,352,2)  # not tested (~25s)
True

The design is available from the general constructor:

sage: designs.orthogonal_arrays.is_available(20,352)
True
sage.combinat.designs.database.OA_20_416()#

Returns an OA(20,416)

Published by Julian R. Abel in [Ab1995] (uses the fact that \(416=2^5 \times 13\) is the product of a power of \(2\) and a prime number).

EXAMPLES:

sage: from sage.combinat.designs.designs_pyx import is_orthogonal_array
sage: from sage.combinat.designs.database import OA_20_416
sage: OA = OA_20_416()                        # not tested (~35s)
sage: is_orthogonal_array(OA,20,416,2)  # not tested
True

The design is available from the general constructor:

sage: designs.orthogonal_arrays.is_available(20,416)
True
sage.combinat.designs.database.OA_20_544()#

Returns an OA(20,544)

Published by Julian R. Abel in [Ab1995] (uses the fact that \(544=2^5 \times 17\) is the product of a power of \(2\) and a prime number).

EXAMPLES:

sage: from sage.combinat.designs.designs_pyx import is_orthogonal_array
sage: from sage.combinat.designs.database import OA_20_544
sage: OA = OA_20_544()                        # not tested (too long ~1mn)
sage: is_orthogonal_array(OA,20,544,2)  # not tested
True

The design is available from the general constructor:

sage: designs.orthogonal_arrays.is_available(20,544)
True
sage.combinat.designs.database.OA_25_1262()#

Returns an OA(25,1262)

The construction is given in [Greig99]. In Julian R. Abel’s words:

Start with a cyclic \(PG(2,43)\) or \((1893,44,1)\)-BIBD whose base block contains respectively \(12,13\) and \(19\) point in the residue classes mod 3. In the resulting BIBD, remove one of the three classes: the result is a \((1262, \{25, 31,32\})\)-PBD, from which the \(OA(25,1262)\) is obtained.

EXAMPLES:

sage: from sage.combinat.designs.designs_pyx import is_orthogonal_array
sage: from sage.combinat.designs.database import OA_25_1262
sage: OA = OA_25_1262()                       # not tested -- too long
sage: is_orthogonal_array(OA,25,1262,2) # not tested -- too long
True

The design is available from the general constructor:

sage: designs.orthogonal_arrays.is_available(25,1262)
True
sage.combinat.designs.database.OA_520_plus_x(x)#

Return an \(OA(10+x,520+x)\).

The construction shared by Julian R. Abel works for OA(10,520), OA(12,522), and OA(14,524).

Let \(n=520+x\) and \(k=10+x\). Build a \(TD(17,31)\). Remove \(8-x\) points contained in a common block, add a new point \(p\) and create a block \(g_i\cup \{p\}\) for every (possibly truncated) group \(g_i\). The result is a \((520+x,{9+x,16,17,31,32})-PBD\). Note that all blocks of size \(\geq 30\) only intersect on \(p\), and that the unique block \(B_9\) of size \(9\) intersects all blocks of size \(32\) on one point. Now:

  • Build an \(OA(k,16)-16.OA(k,16)\) for each block of size 16

  • Build an \(OA(k,17)-17.OA(k,17)\) for each block of size 17

  • Build an \(OA(k,31)-OA(k,1)\) for each block of size 31 (with the hole on \(p\)).

  • Build an \(OA(k,32)-2.OA(k,1)\) for each block \(B\) of size 32 (with the holes on \(p\) and \(B\cap B_9\)).

  • Build an \(OA(k,9)\) on \(B_9\).

Only a row \([p,p,...]\) is missing from the \(OA(10+x,520+x)\)

This construction is used in OA(10,520), OA(12,522), and OA(14,524).

EXAMPLES:

sage: from sage.combinat.designs.designs_pyx import is_orthogonal_array
sage: from sage.combinat.designs.database import OA_520_plus_x
sage: OA = OA_520_plus_x(0)                   # not tested (already tested in OA_10_520)
sage: is_orthogonal_array(OA,10,520,2)  # not tested (already tested in OA_10_520)
True
sage.combinat.designs.database.OA_7_18()#

Return an OA(7,18)

Proved in [JulianAbel13].

EXAMPLES:

sage: from sage.combinat.designs.designs_pyx import is_orthogonal_array
sage: from sage.combinat.designs.database import OA_7_18
sage: OA = OA_7_18()
sage: is_orthogonal_array(OA,7,18,2)
True

The design is available from the general constructor:

sage: designs.orthogonal_arrays.is_available(7,18)
True
sage.combinat.designs.database.OA_7_66()#

Return an OA(7,66)

Construction shared by Julian R. Abel.

EXAMPLES:

sage: from sage.combinat.designs.orthogonal_arrays import is_orthogonal_array
sage: from sage.combinat.designs.database import OA_7_66
sage: OA = OA_7_66()
sage: is_orthogonal_array(OA,7,66,2)
True

The design is available from the general constructor:

sage: designs.orthogonal_arrays.is_available(7,66)
True
sage.combinat.designs.database.OA_7_68()#

Return an OA(7,68)

Construction shared by Julian R. Abel.

EXAMPLES:

sage: from sage.combinat.designs.orthogonal_arrays import is_orthogonal_array
sage: from sage.combinat.designs.database import OA_7_68
sage: OA = OA_7_68()
sage: is_orthogonal_array(OA,7,68,2)
True

The design is available from the general constructor:

sage: designs.orthogonal_arrays.is_available(7,68)
True
sage.combinat.designs.database.OA_7_74()#

Return an OA(7,74)

Construction shared by Julian R. Abel.

EXAMPLES:

sage: from sage.combinat.designs.orthogonal_arrays import is_orthogonal_array
sage: from sage.combinat.designs.database import OA_7_74
sage: OA = OA_7_74()
sage: is_orthogonal_array(OA,7,74,2)
True

The design is available from the general constructor:

sage: designs.orthogonal_arrays.is_available(7,74)
True
sage.combinat.designs.database.OA_8_69()#

Return an OA(8,69)

Construction shared by Julian R. Abel.

EXAMPLES:

sage: from sage.combinat.designs.orthogonal_arrays import is_orthogonal_array
sage: from sage.combinat.designs.database import OA_8_69
sage: OA = OA_8_69()
sage: is_orthogonal_array(OA,8,69,2)
True

The design is available from the general constructor:

sage: designs.orthogonal_arrays.is_available(8,69)
True
sage.combinat.designs.database.OA_8_76()#

Return an OA(8,76)

Construction shared by Julian R. Abel.

EXAMPLES:

sage: from sage.combinat.designs.orthogonal_arrays import is_orthogonal_array
sage: from sage.combinat.designs.database import OA_8_76
sage: OA = OA_8_76()
sage: is_orthogonal_array(OA,8,76,2)
True

The design is available from the general constructor:

sage: designs.orthogonal_arrays.is_available(8,76)
True
sage.combinat.designs.database.OA_9_1078()#

Returns an OA(9,1078)

This is obtained through the generalized Brouwer-van Rees construction. Indeed, \(1078 = 89.11 + (99=9.11)\) and there exists an \(OA(9,100) - OA(9,11)\).

Note

This function should be removed once find_brouwer_van_rees_with_one_truncated_column() can handle all incomplete orthogonal arrays obtained through incomplete_orthogonal_array().

EXAMPLES:

sage: from sage.combinat.designs.designs_pyx import is_orthogonal_array
sage: from sage.combinat.designs.database import OA_9_1078
sage: OA = OA_9_1078()                       # not tested -- ~3s
sage: is_orthogonal_array(OA,9,1078,2) # not tested -- ~3s
True

The design is available from the general constructor:

sage: designs.orthogonal_arrays.is_available(9,1078)
True
sage.combinat.designs.database.OA_9_120()#

Return an OA(9,120)

Construction shared by Julian R. Abel:

From a resolvable \((120,8,1)-BIBD\), one can obtain 7 \(MOLS(120)\) or a resolvable \(TD(8,120)\) by forming a resolvable \(TD(8,8) - 8.TD(8,1)\) on \(I_8 \times B\) for each block \(B\) in the BIBD. This gives a \(TD(8,120) - 120 TD(8,1)\) (which is resolvable as the BIBD is resolvable).

See also

RBIBD_120_8_1()

EXAMPLES:

sage: from sage.combinat.designs.designs_pyx import is_orthogonal_array
sage: from sage.combinat.designs.database import OA_9_120
sage: OA = OA_9_120()
sage: is_orthogonal_array(OA,9,120,2)
True

The design is available from the general constructor:

sage: designs.orthogonal_arrays.is_available(9,120)
True
sage.combinat.designs.database.OA_9_135()#

Return an OA(9,135)

Construction shared by Julian R. Abel:

This design can be built by Wilson’s method (\(135 = 8.16 + 7\)) applied to an Orthogonal Array \(OA(9+7,16)\) with 7 groups truncated to size 1 in such a way that a block contain 0, 1 or 3 points of the truncated groups.

This is possible, because \(PG(2,2)\) (the projective plane over \(GF(2)\)) is a subdesign in \(PG(2,16)\) (the projective plane over \(GF(16)\)); in a cyclic \(PG(2,16)\) or \(BIBD(273,17,1)\) the points \(\equiv 0 \pmod{39}\) form such a subdesign (note that \(273=16^2 + 16 +1\) and \(273 = 39 \times 7\) and \(7 = 2^2 + 2 + 1\)).

EXAMPLES:

sage: from sage.combinat.designs.designs_pyx import is_orthogonal_array
sage: from sage.combinat.designs.database import OA_9_135
sage: OA = OA_9_135()
sage: is_orthogonal_array(OA,9,135,2)
True

The design is available from the general constructor:

sage: designs.orthogonal_arrays.is_available(9,135)
True

As this orthogonal array requires a \((273,17,1)\) cyclic difference set, we check that it is available:

sage: G,D = designs.difference_family(273,17,1)
sage: G
Ring of integers modulo 273
sage.combinat.designs.database.OA_9_1612()#

Returns an OA(9,1612)

This is obtained through the generalized Brouwer-van Rees construction. Indeed, \(1612 = 89.17 + (99=9.11)\) and there exists an \(OA(9,100) - OA(9,11)\).

Note

This function should be removed once find_brouwer_van_rees_with_one_truncated_column() can handle all incomplete orthogonal arrays obtained through incomplete_orthogonal_array().

EXAMPLES:

sage: from sage.combinat.designs.designs_pyx import is_orthogonal_array
sage: from sage.combinat.designs.database import OA_9_1612
sage: OA = OA_9_1612()                       # not tested -- ~6s
sage: is_orthogonal_array(OA,9,1612,2) # not tested -- ~6s
True

The design is available from the general constructor:

sage: designs.orthogonal_arrays.is_available(9,1612)
True
sage.combinat.designs.database.OA_9_40()#

Return an OA(9,40)

As explained in the Handbook III.3.62 [DesignHandbook]. Uses the fact that \(40 = 2^3 \times 5\) and that \(5\) is prime.

EXAMPLES:

sage: from sage.combinat.designs.designs_pyx import is_orthogonal_array
sage: from sage.combinat.designs.database import OA_9_40
sage: OA = OA_9_40()
sage: is_orthogonal_array(OA,9,40,2)
True

The design is available from the general constructor:

sage: designs.orthogonal_arrays.is_available(9,40)
True
sage.combinat.designs.database.QDM_19_6_1_1_1()#

Return a \((19,6;1,1;1)\)-quasi-difference matrix.

Used to build an \(OA(6,20)\)

Given in the Handbook III.3.49 [DesignHandbook].

EXAMPLES:

sage: from sage.combinat.designs.database import QDM_19_6_1_1_1
sage: from sage.combinat.designs.designs_pyx import is_quasi_difference_matrix
sage: G,M = QDM_19_6_1_1_1()
sage: is_quasi_difference_matrix(M,G,6,1,1,1)
True
sage.combinat.designs.database.QDM_21_5_1_1_1()#

Return a \((21,5;1,1;1)\)-quasi-difference matrix.

Used to build an \(OA(5,22)\)

Given in the Handbook III.3.51 [DesignHandbook].

EXAMPLES:

sage: from sage.combinat.designs.database import QDM_21_5_1_1_1
sage: from sage.combinat.designs.designs_pyx import is_quasi_difference_matrix
sage: G,M = QDM_21_5_1_1_1()
sage: is_quasi_difference_matrix(M,G,5,1,1,1)
True
sage.combinat.designs.database.QDM_21_6_1_1_5()#

Return a \((21,6;1,1;5)\)-quasi-difference matrix.

Used to build an \(OA(6,26)\)

Given in the Handbook III.3.53 [DesignHandbook].

EXAMPLES:

sage: from sage.combinat.designs.database import QDM_21_6_1_1_5
sage: from sage.combinat.designs.designs_pyx import is_quasi_difference_matrix
sage: G,M = QDM_21_6_1_1_5()
sage: is_quasi_difference_matrix(M,G,6,1,1,5)
True
sage.combinat.designs.database.QDM_25_6_1_1_5()#

Return a \((25,6;1,1;5)\)-quasi-difference matrix.

Used to build an \(OA(6,30)\)

Given in the Handbook III.3.55 [DesignHandbook].

EXAMPLES:

sage: from sage.combinat.designs.database import QDM_25_6_1_1_5
sage: from sage.combinat.designs.designs_pyx import is_quasi_difference_matrix
sage: G,M = QDM_25_6_1_1_5()
sage: is_quasi_difference_matrix(M,G,6,1,1,5)
True
sage.combinat.designs.database.QDM_33_6_1_1_1()#

Return a \((33,6;1,1;1)\)-quasi-difference matrix.

Used to build an \(OA(6,34)\)

Given in the Handbook III.3.57 [DesignHandbook].

EXAMPLES:

sage: from sage.combinat.designs.database import QDM_33_6_1_1_1
sage: from sage.combinat.designs.designs_pyx import is_quasi_difference_matrix
sage: G,M = QDM_33_6_1_1_1()
sage: is_quasi_difference_matrix(M,G,6,1,1,1)
True
sage.combinat.designs.database.QDM_35_7_1_1_7()#

Return a \((35,7;1,1;7)\)-quasi-difference matrix.

Used to build an \(OA(7,42)\)

As explained in the Handbook III.3.63 [DesignHandbook].

EXAMPLES:

sage: from sage.combinat.designs.database import QDM_35_7_1_1_7
sage: from sage.combinat.designs.designs_pyx import is_quasi_difference_matrix
sage: G,M = QDM_35_7_1_1_7()
sage: is_quasi_difference_matrix(M,G,7,1,1,7)
True
sage.combinat.designs.database.QDM_37_6_1_1_1()#

Return a \((37,6;1,1;1)\)-quasi-difference matrix.

Used to build an \(OA(6,38)\)

Given in the Handbook III.3.60 [DesignHandbook].

EXAMPLES:

sage: from sage.combinat.designs.database import QDM_37_6_1_1_1
sage: from sage.combinat.designs.designs_pyx import is_quasi_difference_matrix
sage: G,M = QDM_37_6_1_1_1()
sage: is_quasi_difference_matrix(M,G,6,1,1,1)
True
sage.combinat.designs.database.QDM_45_7_1_1_9()#

Return a \((45,7;1,1;9)\)-quasi-difference matrix.

Used to build an \(OA(7,54)\)

As explained in the Handbook III.3.71 [DesignHandbook].

EXAMPLES:

sage: from sage.combinat.designs.database import QDM_45_7_1_1_9
sage: from sage.combinat.designs.designs_pyx import is_quasi_difference_matrix
sage: G,M = QDM_45_7_1_1_9()
sage: is_quasi_difference_matrix(M,G,7,1,1,9)
True
sage.combinat.designs.database.QDM_54_7_1_1_8()#

Return a \((54,7;1,1;8)\)-quasi-difference matrix.

Used to build an \(OA(7,62)\)

As explained in the Handbook III.3.74 [DesignHandbook].

EXAMPLES:

sage: from sage.combinat.designs.database import QDM_54_7_1_1_8
sage: from sage.combinat.designs.designs_pyx import is_quasi_difference_matrix
sage: G,M = QDM_54_7_1_1_8()
sage: is_quasi_difference_matrix(M,G,7,1,1,8)
True
sage.combinat.designs.database.QDM_57_9_1_1_8()#

Return a \((57,9;1,1;8)\)-quasi-difference matrix.

Used to build an \(OA(9,65)\)

Construction shared by Julian R. Abel

EXAMPLES:

sage: from sage.combinat.designs.database import QDM_57_9_1_1_8
sage: from sage.combinat.designs.designs_pyx import is_quasi_difference_matrix
sage: G,M = QDM_57_9_1_1_8()
sage: is_quasi_difference_matrix(M,G,9,1,1,8)
True
sage.combinat.designs.database.RBIBD_120_8_1()#

Return a resolvable \(BIBD(120,8,1)\)

This function output a list L of \(17\times 15\) blocks such that L[i*15:(i+1)*15] is a partition of \(120\).

Construction shared by Julian R. Abel:

Seiden’s method: Start with a cyclic \((273,17,1)-BIBD\) and let \(B\) be an hyperoval, i.e. a set of 18 points which intersects any block of the BIBD in either 0 points (153 blocks) or 2 points (120 blocks). Dualise this design and take these last 120 blocks as points in the design; blocks in the design will correspond to the \(273-18=255\) non-hyperoval points.

The design is also resolvable. In the original \(PG(2,16)\) take any point \(T\) in the hyperoval and consider a block \(B1\) containing \(T\). The \(15\) points in \(B1\) that do not belong to the hyperoval correspond to \(15\) blocks forming a parallel class in the dualised design. The other \(16\) parallel classes come in a similar way, by using point \(T\) and the other \(16\) blocks containing \(T\).

See also

OA_9_120()

EXAMPLES:

sage: from sage.combinat.designs.database import RBIBD_120_8_1
sage: from sage.combinat.designs.bibd import is_pairwise_balanced_design
sage: RBIBD = RBIBD_120_8_1()
sage: is_pairwise_balanced_design(RBIBD,120,[8])
True

It is indeed resolvable, and the parallel classes are given by 17 slices of consecutive 15 blocks:

sage: for i in range(17):
....:     assert len(set(sum(RBIBD[i*15:(i+1)*15],[]))) == 120

The BIBD is available from the constructor:

sage: _ = designs.balanced_incomplete_block_design(120,8)
sage.combinat.designs.database.cyclic_shift(l, i)#
sage.combinat.designs.database.f()#

Return a \((57,9;1,1;8)\)-quasi-difference matrix.

Used to build an \(OA(9,65)\)

Construction shared by Julian R. Abel

EXAMPLES:

sage: from sage.combinat.designs.database import QDM_57_9_1_1_8
sage: from sage.combinat.designs.designs_pyx import is_quasi_difference_matrix
sage: G,M = QDM_57_9_1_1_8()
sage: is_quasi_difference_matrix(M,G,9,1,1,8)
True