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:

  • CA(11,2,5,3), CA(12,2,7,3), CA(13,2,9,3), CA(14,2,10,3), CA(15,2,20,3), CA(19,2,6,4), CA(21,2,7,4), CA(29,2,7,5), CA(37,2,4,6), CA(39,2,5,6), CA(41,2,6,6)

  • 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=24\):n \((320,88,24)\)

    • \(\lambda=30\):n \((144,66,30)\)

    • \(\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()[source]

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
>>> from sage.all import *
>>> from sage.combinat.designs.database import BIBD_106_6_1
>>> from sage.combinat.designs.bibd import BalancedIncompleteBlockDesign
>>> BalancedIncompleteBlockDesign(Integer(106), BIBD_106_6_1())
(106,6,1)-Balanced Incomplete Block Design
sage.combinat.designs.database.BIBD_111_6_1()[source]

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
>>> from sage.all import *
>>> from sage.combinat.designs.database import BIBD_111_6_1
>>> from sage.combinat.designs.bibd import BalancedIncompleteBlockDesign
>>> BalancedIncompleteBlockDesign(Integer(111), BIBD_111_6_1())
(111,6,1)-Balanced Incomplete Block Design
sage.combinat.designs.database.BIBD_126_6_1()[source]

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
>>> from sage.all import *
>>> from sage.combinat.designs.database import BIBD_126_6_1
>>> from sage.combinat.designs.bibd import BalancedIncompleteBlockDesign
>>> BalancedIncompleteBlockDesign(Integer(126), BIBD_126_6_1())
(126,6,1)-Balanced Incomplete Block Design
sage.combinat.designs.database.BIBD_136_6_1()[source]

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
>>> from sage.all import *
>>> from sage.combinat.designs.database import BIBD_136_6_1
>>> from sage.combinat.designs.bibd import BalancedIncompleteBlockDesign
>>> BalancedIncompleteBlockDesign(Integer(136), BIBD_136_6_1())
(136,6,1)-Balanced Incomplete Block Design
sage.combinat.designs.database.BIBD_141_6_1()[source]

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
>>> from sage.all import *
>>> from sage.combinat.designs.database import BIBD_141_6_1
>>> from sage.combinat.designs.bibd import BalancedIncompleteBlockDesign
>>> BalancedIncompleteBlockDesign(Integer(141), BIBD_141_6_1())
(141,6,1)-Balanced Incomplete Block Design
sage.combinat.designs.database.BIBD_171_6_1()[source]

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
>>> from sage.all import *
>>> from sage.combinat.designs.database import BIBD_171_6_1
>>> from sage.combinat.designs.bibd import BalancedIncompleteBlockDesign
>>> BalancedIncompleteBlockDesign(Integer(171), BIBD_171_6_1())
(171,6,1)-Balanced Incomplete Block Design
sage.combinat.designs.database.BIBD_196_6_1()[source]

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
>>> from sage.all import *
>>> from sage.combinat.designs.database import BIBD_196_6_1
>>> from sage.combinat.designs.bibd import BalancedIncompleteBlockDesign
>>> BalancedIncompleteBlockDesign(Integer(196), BIBD_196_6_1())
(196,6,1)-Balanced Incomplete Block Design
sage.combinat.designs.database.BIBD_201_6_1()[source]

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
>>> from sage.all import *
>>> from sage.combinat.designs.database import BIBD_201_6_1
>>> from sage.combinat.designs.bibd import BalancedIncompleteBlockDesign
>>> BalancedIncompleteBlockDesign(Integer(201), BIBD_201_6_1())
(201,6,1)-Balanced Incomplete Block Design
sage.combinat.designs.database.BIBD_45_9_8(from_code=False)[source]

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
>>> from sage.all import *
>>> from sage.combinat.designs.database import BIBD_45_9_8
>>> from sage.combinat.designs.bibd import BalancedIncompleteBlockDesign
>>> B = BalancedIncompleteBlockDesign(Integer(45), BIBD_45_9_8(), lambd=Integer(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()[source]

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()) # needs sage.libs.gap sage: D.is_t_design(t=2, v=56, k=11, l=2) # needs sage.libs.gap True

sage.combinat.designs.database.BIBD_66_6_1()[source]

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

This BIBD was obtained from La Jolla covering repository (https://dmgordon.org/cover) 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
>>> from sage.all import *
>>> from sage.combinat.designs.database import BIBD_66_6_1
>>> from sage.combinat.designs.bibd import BalancedIncompleteBlockDesign
>>> BalancedIncompleteBlockDesign(Integer(66), BIBD_66_6_1())
(66,6,1)-Balanced Incomplete Block Design
sage.combinat.designs.database.BIBD_76_6_1()[source]

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

This BIBD was obtained from La Jolla covering repository (https://dmgordon.org/cover) 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
>>> from sage.all import *
>>> from sage.combinat.designs.database import BIBD_76_6_1
>>> from sage.combinat.designs.bibd import BalancedIncompleteBlockDesign
>>> BalancedIncompleteBlockDesign(Integer(76), BIBD_76_6_1())
(76,6,1)-Balanced Incomplete Block Design
sage.combinat.designs.database.BIBD_79_13_2()[source]

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()) # needs sage.libs.gap sage: D.is_t_design(t=2, v=79, k=13, l=2) # needs sage.libs.gap True

sage.combinat.designs.database.BIBD_96_6_1()[source]

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

This BIBD was obtained from La Jolla covering repository (https://dmgordon.org/cover) 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
>>> from sage.all import *
>>> from sage.combinat.designs.database import BIBD_96_6_1
>>> from sage.combinat.designs.bibd import BalancedIncompleteBlockDesign
>>> BalancedIncompleteBlockDesign(Integer(96), BIBD_96_6_1())
(96,6,1)-Balanced Incomplete Block Design
sage.combinat.designs.database.DM_12_6_1()[source]

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
>>> from sage.all import *
>>> from sage.combinat.designs.designs_pyx import is_difference_matrix
>>> from sage.combinat.designs.database import DM_12_6_1
>>> G,M = DM_12_6_1()
>>> is_difference_matrix(M,G,Integer(6),Integer(1))
True

Can be obtained from the constructor:

sage: _ = designs.difference_matrix(12,6)
>>> from sage.all import *
>>> _ = designs.difference_matrix(Integer(12),Integer(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()[source]

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
>>> from sage.all import *
>>> from sage.combinat.designs.designs_pyx import is_difference_matrix
>>> from sage.combinat.designs.database import DM_21_6_1
>>> G,M = DM_21_6_1()
>>> is_difference_matrix(M,G,Integer(6),Integer(1))
True

Can be obtained from the constructor:

sage: _ = designs.difference_matrix(21,6)                                       # needs sage.rings.finite_rings
>>> from sage.all import *
>>> _ = designs.difference_matrix(Integer(21),Integer(6))                                       # needs sage.rings.finite_rings
sage.combinat.designs.database.DM_24_8_1()[source]

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
>>> from sage.all import *
>>> from sage.combinat.designs.designs_pyx import is_difference_matrix
>>> from sage.combinat.designs.database import DM_24_8_1
>>> G,M = DM_24_8_1()
>>> is_difference_matrix(M,G,Integer(8),Integer(1))
True

Can be obtained from the constructor:

sage: _ = designs.difference_matrix(24,8)
>>> from sage.all import *
>>> _ = designs.difference_matrix(Integer(24),Integer(8))
sage.combinat.designs.database.DM_273_17_1()[source]

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()                                                       # needs sage.schemes
sage: is_difference_matrix(M,G,17,1)                                            # needs sage.schemes
True
>>> from sage.all import *
>>> from sage.combinat.designs.designs_pyx import is_difference_matrix
>>> from sage.combinat.designs.database import DM_273_17_1
>>> G,M = DM_273_17_1()                                                       # needs sage.schemes
>>> is_difference_matrix(M,G,Integer(17),Integer(1))                                            # needs sage.schemes
True

Can be obtained from the constructor:

sage: _ = designs.difference_matrix(273,17)                                     # needs sage.schemes
>>> from sage.all import *
>>> _ = designs.difference_matrix(Integer(273),Integer(17))                                     # needs sage.schemes
sage.combinat.designs.database.DM_28_6_1()[source]

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()                                                         # needs sage.modules
sage: is_difference_matrix(M,G,6,1)                                             # needs sage.modules
True
>>> from sage.all import *
>>> from sage.combinat.designs.designs_pyx import is_difference_matrix
>>> from sage.combinat.designs.database import DM_28_6_1
>>> G,M = DM_28_6_1()                                                         # needs sage.modules
>>> is_difference_matrix(M,G,Integer(6),Integer(1))                                             # needs sage.modules
True

Can be obtained from the constructor:

sage: _ = designs.difference_matrix(28,6)                                       # needs sage.modules
>>> from sage.all import *
>>> _ = designs.difference_matrix(Integer(28),Integer(6))                                       # needs sage.modules
sage.combinat.designs.database.DM_33_6_1()[source]

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
>>> from sage.all import *
>>> from sage.combinat.designs.designs_pyx import is_difference_matrix
>>> from sage.combinat.designs.database import DM_33_6_1
>>> G,M = DM_33_6_1()
>>> is_difference_matrix(M,G,Integer(6),Integer(1))
True

Can be obtained from the constructor:

sage: _ = designs.difference_matrix(33,6)                                       # needs sage.rings.finite_rings
>>> from sage.all import *
>>> _ = designs.difference_matrix(Integer(33),Integer(6))                                       # needs sage.rings.finite_rings
sage.combinat.designs.database.DM_35_6_1()[source]

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
>>> from sage.all import *
>>> from sage.combinat.designs.designs_pyx import is_difference_matrix
>>> from sage.combinat.designs.database import DM_35_6_1
>>> G,M = DM_35_6_1()
>>> is_difference_matrix(M,G,Integer(6),Integer(1))
True

Can be obtained from the constructor:

sage: _ = designs.difference_matrix(35,6)                                       # needs sage.rings.finite_rings
>>> from sage.all import *
>>> _ = designs.difference_matrix(Integer(35),Integer(6))                                       # needs sage.rings.finite_rings
sage.combinat.designs.database.DM_36_9_1()[source]

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()                                                         # needs sage.modules
sage: is_difference_matrix(M,G,9,1)                                             # needs sage.modules
True
>>> from sage.all import *
>>> from sage.combinat.designs.designs_pyx import is_difference_matrix
>>> from sage.combinat.designs.database import DM_36_9_1
>>> G,M = DM_36_9_1()                                                         # needs sage.modules
>>> is_difference_matrix(M,G,Integer(9),Integer(1))                                             # needs sage.modules
True

Can be obtained from the constructor:

sage: _ = designs.difference_matrix(36,9)                                       # needs sage.modules
>>> from sage.all import *
>>> _ = designs.difference_matrix(Integer(36),Integer(9))                                       # needs sage.modules
sage.combinat.designs.database.DM_39_6_1()[source]

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
>>> from sage.all import *
>>> from sage.combinat.designs.designs_pyx import is_difference_matrix
>>> from sage.combinat.designs.database import DM_39_6_1
>>> G,M = DM_39_6_1()
>>> is_difference_matrix(M,G,Integer(6),Integer(1))
True

The design is available from the general constructor:

sage: designs.difference_matrix(39,6,existence=True)                            # needs sage.rings.finite_rings
True
>>> from sage.all import *
>>> designs.difference_matrix(Integer(39),Integer(6),existence=True)                            # needs sage.rings.finite_rings
True
sage.combinat.designs.database.DM_44_6_1()[source]

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
>>> from sage.all import *
>>> from sage.combinat.designs.designs_pyx import is_difference_matrix
>>> from sage.combinat.designs.database import DM_44_6_1
>>> G,M = DM_44_6_1()
>>> is_difference_matrix(M,G,Integer(6),Integer(1))
True

Can be obtained from the constructor:

sage: _ = designs.difference_matrix(44,6)
>>> from sage.all import *
>>> _ = designs.difference_matrix(Integer(44),Integer(6))
sage.combinat.designs.database.DM_45_7_1()[source]

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
>>> from sage.all import *
>>> from sage.combinat.designs.designs_pyx import is_difference_matrix
>>> from sage.combinat.designs.database import DM_45_7_1
>>> G,M = DM_45_7_1()
>>> is_difference_matrix(M,G,Integer(7),Integer(1))
True

Can be obtained from the constructor:

sage: _ = designs.difference_matrix(45,7)                                       # needs sage.rings.finite_rings
>>> from sage.all import *
>>> _ = designs.difference_matrix(Integer(45),Integer(7))                                       # needs sage.rings.finite_rings
sage.combinat.designs.database.DM_48_9_1()[source]

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()                                                         # needs sage.rings.finite_rings
sage: is_difference_matrix(M,G,9,1)                                             # needs sage.rings.finite_rings
True
>>> from sage.all import *
>>> from sage.combinat.designs.designs_pyx import is_difference_matrix
>>> from sage.combinat.designs.database import DM_48_9_1
>>> G,M = DM_48_9_1()                                                         # needs sage.rings.finite_rings
>>> is_difference_matrix(M,G,Integer(9),Integer(1))                                             # needs sage.rings.finite_rings
True

Can be obtained from the constructor:

sage: _ = designs.difference_matrix(48,9)                                       # needs sage.rings.finite_rings
>>> from sage.all import *
>>> _ = designs.difference_matrix(Integer(48),Integer(9))                                       # needs sage.rings.finite_rings
sage.combinat.designs.database.DM_51_6_1()[source]

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
>>> from sage.all import *
>>> from sage.combinat.designs.designs_pyx import is_difference_matrix
>>> from sage.combinat.designs.database import DM_51_6_1
>>> G,M = DM_51_6_1()
>>> is_difference_matrix(M,G,Integer(6),Integer(1))
True

Can be obtained from the constructor:

sage: _ = designs.difference_matrix(51,6)                                       # needs sage.rings.finite_rings
>>> from sage.all import *
>>> _ = designs.difference_matrix(Integer(51),Integer(6))                                       # needs sage.rings.finite_rings
sage.combinat.designs.database.DM_52_6_1()[source]

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()                                                         # needs sage.rings.finite_rings
sage: is_difference_matrix(M,G,6,1)                                             # needs sage.rings.finite_rings
True
>>> from sage.all import *
>>> from sage.combinat.designs.designs_pyx import is_difference_matrix
>>> from sage.combinat.designs.database import DM_52_6_1
>>> G,M = DM_52_6_1()                                                         # needs sage.rings.finite_rings
>>> is_difference_matrix(M,G,Integer(6),Integer(1))                                             # needs sage.rings.finite_rings
True

Can be obtained from the constructor:

sage: _ = designs.difference_matrix(52,6)                                       # needs sage.rings.finite_rings
>>> from sage.all import *
>>> _ = designs.difference_matrix(Integer(52),Integer(6))                                       # needs sage.rings.finite_rings
sage.combinat.designs.database.DM_55_7_1()[source]

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
>>> from sage.all import *
>>> from sage.combinat.designs.designs_pyx import is_difference_matrix
>>> from sage.combinat.designs.database import DM_55_7_1
>>> G,M = DM_55_7_1()
>>> is_difference_matrix(M,G,Integer(7),Integer(1))
True

Can be obtained from the constructor:

sage: _ = designs.difference_matrix(55,7)                                       # needs sage.rings.finite_rings
>>> from sage.all import *
>>> _ = designs.difference_matrix(Integer(55),Integer(7))                                       # needs sage.rings.finite_rings
sage.combinat.designs.database.DM_56_8_1()[source]

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()                                                         # needs sage.rings.finite_rings
sage: is_difference_matrix(M,G,8,1)                                             # needs sage.rings.finite_rings
True
>>> from sage.all import *
>>> from sage.combinat.designs.designs_pyx import is_difference_matrix
>>> from sage.combinat.designs.database import DM_56_8_1
>>> G,M = DM_56_8_1()                                                         # needs sage.rings.finite_rings
>>> is_difference_matrix(M,G,Integer(8),Integer(1))                                             # needs sage.rings.finite_rings
True

Can be obtained from the constructor:

sage: _ = designs.difference_matrix(56,8)                                       # needs sage.rings.finite_rings
>>> from sage.all import *
>>> _ = designs.difference_matrix(Integer(56),Integer(8))                                       # needs sage.rings.finite_rings
sage.combinat.designs.database.DM_57_8_1()[source]

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()                                                         # needs sage.rings.finite_rings sage.schemes
sage: is_difference_matrix(M,G,8,1)                                             # needs sage.rings.finite_rings sage.schemes
True
>>> from sage.all import *
>>> from sage.combinat.designs.designs_pyx import is_difference_matrix
>>> from sage.combinat.designs.database import DM_57_8_1
>>> G,M = DM_57_8_1()                                                         # needs sage.rings.finite_rings sage.schemes
>>> is_difference_matrix(M,G,Integer(8),Integer(1))                                             # needs sage.rings.finite_rings sage.schemes
True

Can be obtained from the constructor:

sage: _ = designs.difference_matrix(57,8)                                       # needs sage.rings.finite_rings sage.schemes
>>> from sage.all import *
>>> _ = designs.difference_matrix(Integer(57),Integer(8))                                       # needs sage.rings.finite_rings sage.schemes
sage.combinat.designs.database.DM_60_6_1()[source]

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
>>> from sage.all import *
>>> from sage.combinat.designs.designs_pyx import is_difference_matrix
>>> from sage.combinat.designs.database import DM_60_6_1
>>> G,M = DM_60_6_1()
>>> is_difference_matrix(M,G,Integer(6),Integer(1))
True

Can be obtained from the constructor:

sage: _ = designs.difference_matrix(60,6)
>>> from sage.all import *
>>> _ = designs.difference_matrix(Integer(60),Integer(6))
sage.combinat.designs.database.DM_75_8_1()[source]

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
>>> from sage.all import *
>>> from sage.combinat.designs.designs_pyx import is_difference_matrix
>>> from sage.combinat.designs.database import DM_75_8_1
>>> G,M = DM_75_8_1()
>>> is_difference_matrix(M,G,Integer(8),Integer(1))
True

Can be obtained from the constructor:

sage: _ = designs.difference_matrix(75,8)                                       # needs sage.rings.finite_rings
>>> from sage.all import *
>>> _ = designs.difference_matrix(Integer(75),Integer(8))                                       # needs sage.rings.finite_rings
sage.combinat.designs.database.DM_993_32_1()[source]

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()                                                       # needs sage.schemes
sage: is_difference_matrix(M,G,32,1)                                            # needs sage.schemes
True
>>> from sage.all import *
>>> from sage.combinat.designs.designs_pyx import is_difference_matrix
>>> from sage.combinat.designs.database import DM_993_32_1
>>> G,M = DM_993_32_1()                                                       # needs sage.schemes
>>> is_difference_matrix(M,G,Integer(32),Integer(1))                                            # needs sage.schemes
True

Can be obtained from the constructor:

sage: _ = designs.difference_matrix(993,32)                                     # needs sage.schemes
>>> from sage.all import *
>>> _ = designs.difference_matrix(Integer(993),Integer(32))                                     # needs sage.schemes
sage.combinat.designs.database.HigmanSimsDesign()[source]

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_package_design
Incidence structure with 176 points and 176 blocks
sage: H.is_t_design(return_parameters=1)                    # optional - gap_package_design
(True, (2, 176, 50, 14))
>>> from sage.all import *
>>> H = designs.HigmanSimsDesign(); H                     # optional - gap_package_design
Incidence structure with 176 points and 176 blocks
>>> H.is_t_design(return_parameters=Integer(1))                    # optional - gap_package_design
(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_package_design
sage: gG = graphs.HigmanSimsGraph().automorphism_group()    # optional - gap_package_design
sage: gG.is_isomorphic(gG)                       # long time, optional - gap_package_design
True
>>> from sage.all import *
>>> gH = H.automorphism_group()                           # optional - gap_package_design
>>> gG = graphs.HigmanSimsGraph().automorphism_group()    # optional - gap_package_design
>>> gG.is_isomorphic(gG)                       # long time, optional - gap_package_design
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()[source]

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()                                                        # needs sage.modules
sage: print(are_mutually_orthogonal_latin_squares(MOLS))                        # needs sage.modules
True
>>> from sage.all import *
>>> from sage.combinat.designs.latin_squares import are_mutually_orthogonal_latin_squares
>>> from sage.combinat.designs.database import MOLS_10_2
>>> MOLS = MOLS_10_2()                                                        # needs sage.modules
>>> print(are_mutually_orthogonal_latin_squares(MOLS))                        # needs sage.modules
True

The design is available from the general constructor:

sage: designs.orthogonal_arrays.is_available(2,10)
True
>>> from sage.all import *
>>> designs.orthogonal_arrays.is_available(Integer(2),Integer(10))
True
sage.combinat.designs.database.MOLS_12_5()[source]

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()                                                        # needs sage.modules
sage: print(are_mutually_orthogonal_latin_squares(MOLS))                        # needs sage.modules
True
>>> from sage.all import *
>>> from sage.combinat.designs.latin_squares import are_mutually_orthogonal_latin_squares
>>> from sage.combinat.designs.database import MOLS_12_5
>>> MOLS = MOLS_12_5()                                                        # needs sage.modules
>>> print(are_mutually_orthogonal_latin_squares(MOLS))                        # needs sage.modules
True
sage.combinat.designs.database.MOLS_14_4()[source]

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()                                                        # needs sage.modules
sage: print(are_mutually_orthogonal_latin_squares(MOLS))                        # needs sage.modules
True
>>> from sage.all import *
>>> from sage.combinat.designs.latin_squares import are_mutually_orthogonal_latin_squares
>>> from sage.combinat.designs.database import MOLS_14_4
>>> MOLS = MOLS_14_4()                                                        # needs sage.modules
>>> print(are_mutually_orthogonal_latin_squares(MOLS))                        # needs sage.modules
True

The design is available from the general constructor:

sage: designs.orthogonal_arrays.is_available(4,14)                              # needs sage.schemes
True
>>> from sage.all import *
>>> designs.orthogonal_arrays.is_available(Integer(4),Integer(14))                              # needs sage.schemes
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()[source]

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()                                                        # needs sage.modules
sage: print(are_mutually_orthogonal_latin_squares(MOLS))                        # needs sage.modules
True
>>> from sage.all import *
>>> from sage.combinat.designs.latin_squares import are_mutually_orthogonal_latin_squares
>>> from sage.combinat.designs.database import MOLS_15_4
>>> MOLS = MOLS_15_4()                                                        # needs sage.modules
>>> print(are_mutually_orthogonal_latin_squares(MOLS))                        # needs sage.modules
True

The design is available from the general constructor:

sage: designs.orthogonal_arrays.is_available(4,15)                              # needs sage.schemes
True
>>> from sage.all import *
>>> designs.orthogonal_arrays.is_available(Integer(4),Integer(15))                              # needs sage.schemes
True
sage.combinat.designs.database.MOLS_18_3()[source]

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()                                                        # needs sage.modules
sage: print(are_mutually_orthogonal_latin_squares(MOLS))                        # needs sage.modules
True
>>> from sage.all import *
>>> from sage.combinat.designs.latin_squares import are_mutually_orthogonal_latin_squares
>>> from sage.combinat.designs.database import MOLS_18_3
>>> MOLS = MOLS_18_3()                                                        # needs sage.modules
>>> print(are_mutually_orthogonal_latin_squares(MOLS))                        # needs sage.modules
True

The design is available from the general constructor:

sage: designs.orthogonal_arrays.is_available(3,18)
True
>>> from sage.all import *
>>> designs.orthogonal_arrays.is_available(Integer(3),Integer(18))
True
sage.combinat.designs.database.OA_10_1620()[source]

Return 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
>>> from sage.all import *
>>> from sage.combinat.designs.designs_pyx import is_orthogonal_array
>>> from sage.combinat.designs.database import OA_10_1620
>>> OA = OA_10_1620()                       # not tested -- ~7s
>>> is_orthogonal_array(OA,Integer(10),Integer(1620),Integer(2)) # not tested -- ~7s
True

The design is available from the general constructor:

sage: designs.orthogonal_arrays.is_available(10,1620)                           # needs sage.schemes
True
>>> from sage.all import *
>>> designs.orthogonal_arrays.is_available(Integer(10),Integer(1620))                           # needs sage.schemes
True
sage.combinat.designs.database.OA_10_205()[source]

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()                                                          # needs sage.schemes
sage: is_orthogonal_array(OA,10,205,2)                                          # needs sage.schemes
True
>>> from sage.all import *
>>> from sage.combinat.designs.designs_pyx import is_orthogonal_array
>>> from sage.combinat.designs.database import OA_10_205
>>> OA = OA_10_205()                                                          # needs sage.schemes
>>> is_orthogonal_array(OA,Integer(10),Integer(205),Integer(2))                                          # needs sage.schemes
True

The design is available from the general constructor:

sage: designs.orthogonal_arrays.is_available(10,205)                            # needs sage.schemes
True
>>> from sage.all import *
>>> designs.orthogonal_arrays.is_available(Integer(10),Integer(205))                            # needs sage.schemes
True
sage.combinat.designs.database.OA_10_469()[source]

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()                  # long time                             # needs sage.schemes
sage: is_orthogonal_array(OA,10,469,2)  # long time                             # needs sage.schemes
True
>>> from sage.all import *
>>> from sage.combinat.designs.designs_pyx import is_orthogonal_array
>>> from sage.combinat.designs.database import OA_10_469
>>> OA = OA_10_469()                  # long time                             # needs sage.schemes
>>> is_orthogonal_array(OA,Integer(10),Integer(469),Integer(2))  # long time                             # needs sage.schemes
True

The design is available from the general constructor:

sage: designs.orthogonal_arrays.is_available(10,469)                            # needs sage.schemes
True
>>> from sage.all import *
>>> designs.orthogonal_arrays.is_available(Integer(10),Integer(469))                            # needs sage.schemes
True
sage.combinat.designs.database.OA_10_520()[source]

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()                                                          # needs sage.schemes
sage: is_orthogonal_array(OA,10,520,2)                                          # needs sage.schemes
True
>>> from sage.all import *
>>> from sage.combinat.designs.designs_pyx import is_orthogonal_array
>>> from sage.combinat.designs.database import OA_10_520
>>> OA = OA_10_520()                                                          # needs sage.schemes
>>> is_orthogonal_array(OA,Integer(10),Integer(520),Integer(2))                                          # needs sage.schemes
True

The design is available from the general constructor:

sage: designs.orthogonal_arrays.is_available(10,520)                            # needs sage.schemes
True
>>> from sage.all import *
>>> designs.orthogonal_arrays.is_available(Integer(10),Integer(520))                            # needs sage.schemes
True
sage.combinat.designs.database.OA_10_796()[source]

Return 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()                                                          # needs sage.schemes
sage: is_orthogonal_array(OA,10,796,2)                                          # needs sage.schemes
True
>>> from sage.all import *
>>> from sage.combinat.designs.designs_pyx import is_orthogonal_array
>>> from sage.combinat.designs.database import OA_10_796
>>> OA = OA_10_796()                                                          # needs sage.schemes
>>> is_orthogonal_array(OA,Integer(10),Integer(796),Integer(2))                                          # needs sage.schemes
True

The design is available from the general constructor:

sage: designs.orthogonal_arrays.is_available(10,796)                            # needs sage.schemes
True
>>> from sage.all import *
>>> designs.orthogonal_arrays.is_available(Integer(10),Integer(796))                            # needs sage.schemes
True
sage.combinat.designs.database.OA_11_160()[source]

Return 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()                                                          # needs sage.rings.finite_rings
sage: is_orthogonal_array(OA,11,160,2)                                          # needs sage.rings.finite_rings
True
>>> from sage.all import *
>>> from sage.combinat.designs.designs_pyx import is_orthogonal_array
>>> from sage.combinat.designs.database import OA_11_160
>>> OA = OA_11_160()                                                          # needs sage.rings.finite_rings
>>> is_orthogonal_array(OA,Integer(11),Integer(160),Integer(2))                                          # needs sage.rings.finite_rings
True

The design is available from the general constructor:

sage: designs.orthogonal_arrays.is_available(11,160)                            # needs sage.schemes
True
>>> from sage.all import *
>>> designs.orthogonal_arrays.is_available(Integer(11),Integer(160))                            # needs sage.schemes
True
sage.combinat.designs.database.OA_11_185()[source]

Return 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()                                                          # needs sage.rings.finite_rings
sage: is_orthogonal_array(OA,11,185,2)                                          # needs sage.rings.finite_rings
True
>>> from sage.all import *
>>> from sage.combinat.designs.designs_pyx import is_orthogonal_array
>>> from sage.combinat.designs.database import OA_11_185
>>> OA = OA_11_185()                                                          # needs sage.rings.finite_rings
>>> is_orthogonal_array(OA,Integer(11),Integer(185),Integer(2))                                          # needs sage.rings.finite_rings
True

The design is available from the general constructor:

sage: designs.orthogonal_arrays.is_available(11,185)                            # needs sage.schemes
True
>>> from sage.all import *
>>> designs.orthogonal_arrays.is_available(Integer(11),Integer(185))                            # needs sage.schemes
True
sage.combinat.designs.database.OA_11_254()[source]

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()                                                          # needs sage.schemes
sage: is_orthogonal_array(OA,11,254,2)                                          # needs sage.schemes
True
>>> from sage.all import *
>>> from sage.combinat.designs.designs_pyx import is_orthogonal_array
>>> from sage.combinat.designs.database import OA_11_254
>>> OA = OA_11_254()                                                          # needs sage.schemes
>>> is_orthogonal_array(OA,Integer(11),Integer(254),Integer(2))                                          # needs sage.schemes
True

The design is available from the general constructor:

sage: designs.orthogonal_arrays.is_available(11,254)                            # needs sage.schemes
True
>>> from sage.all import *
>>> designs.orthogonal_arrays.is_available(Integer(11),Integer(254))                            # needs sage.schemes
True
sage.combinat.designs.database.OA_11_640()[source]

Return 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)                 # needs sage.rings.finite_rings
sage: is_orthogonal_array(OA,11,640,2)  # not tested (too long)                 # needs sage.rings.finite_rings
True
>>> from sage.all import *
>>> from sage.combinat.designs.designs_pyx import is_orthogonal_array
>>> from sage.combinat.designs.database import OA_11_640
>>> OA = OA_11_640()                  # not tested (too long)                 # needs sage.rings.finite_rings
>>> is_orthogonal_array(OA,Integer(11),Integer(640),Integer(2))  # not tested (too long)                 # needs sage.rings.finite_rings
True

The design is available from the general constructor:

sage: designs.orthogonal_arrays.is_available(11,640)                            # needs sage.schemes
True
>>> from sage.all import *
>>> designs.orthogonal_arrays.is_available(Integer(11),Integer(640))                            # needs sage.schemes
True
sage.combinat.designs.database.OA_11_80()[source]

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()                                                           # needs sage.rings.finite_rings sage.schemes
sage: is_orthogonal_array(OA,11,80,2)                                           # needs sage.rings.finite_rings sage.schemes
True
>>> from sage.all import *
>>> from sage.combinat.designs.designs_pyx import is_orthogonal_array
>>> from sage.combinat.designs.database import OA_11_80
>>> OA = OA_11_80()                                                           # needs sage.rings.finite_rings sage.schemes
>>> is_orthogonal_array(OA,Integer(11),Integer(80),Integer(2))                                           # needs sage.rings.finite_rings sage.schemes
True

The design is available from the general constructor:

sage: designs.orthogonal_arrays.is_available(11,80)                             # needs sage.rings.finite_rings sage.schemes
True
>>> from sage.all import *
>>> designs.orthogonal_arrays.is_available(Integer(11),Integer(80))                             # needs sage.rings.finite_rings sage.schemes
True
sage.combinat.designs.database.OA_12_522()[source]

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()                                                          # needs sage.schemes
sage: is_orthogonal_array(OA,12,522,2)                                          # needs sage.schemes
True
>>> from sage.all import *
>>> from sage.combinat.designs.designs_pyx import is_orthogonal_array
>>> from sage.combinat.designs.database import OA_12_522
>>> OA = OA_12_522()                                                          # needs sage.schemes
>>> is_orthogonal_array(OA,Integer(12),Integer(522),Integer(2))                                          # needs sage.schemes
True

The design is available from the general constructor:

sage: designs.orthogonal_arrays.is_available(12,522)                            # needs sage.schemes
True
>>> from sage.all import *
>>> designs.orthogonal_arrays.is_available(Integer(12),Integer(522))                            # needs sage.schemes
True
sage.combinat.designs.database.OA_14_524()[source]

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()                                                          # needs sage.schemes
sage: is_orthogonal_array(OA,14,524,2)                                          # needs sage.schemes
True
>>> from sage.all import *
>>> from sage.combinat.designs.designs_pyx import is_orthogonal_array
>>> from sage.combinat.designs.database import OA_14_524
>>> OA = OA_14_524()                                                          # needs sage.schemes
>>> is_orthogonal_array(OA,Integer(14),Integer(524),Integer(2))                                          # needs sage.schemes
True

The design is available from the general constructor:

sage: designs.orthogonal_arrays.is_available(14,524)                            # needs sage.schemes
True
>>> from sage.all import *
>>> designs.orthogonal_arrays.is_available(Integer(14),Integer(524))                            # needs sage.schemes
True
sage.combinat.designs.database.OA_15_112()[source]

Return 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()                                                          # needs sage.rings.finite_rings sage.schemes
sage: is_orthogonal_array(OA,15,112,2)                                          # needs sage.rings.finite_rings sage.schemes
True
>>> from sage.all import *
>>> from sage.combinat.designs.designs_pyx import is_orthogonal_array
>>> from sage.combinat.designs.database import OA_15_112
>>> OA = OA_15_112()                                                          # needs sage.rings.finite_rings sage.schemes
>>> is_orthogonal_array(OA,Integer(15),Integer(112),Integer(2))                                          # needs sage.rings.finite_rings sage.schemes
True

The design is available from the general constructor:

sage: designs.orthogonal_arrays.is_available(15,112)                            # needs sage.rings.finite_rings sage.schemes
True
>>> from sage.all import *
>>> designs.orthogonal_arrays.is_available(Integer(15),Integer(112))                            # needs sage.rings.finite_rings sage.schemes
True
sage.combinat.designs.database.OA_15_224()[source]

Return 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)                 # needs sage.rings.finite_rings
sage: is_orthogonal_array(OA,15,224,2)  # not tested (too long)                 # needs sage.rings.finite_rings
True
>>> from sage.all import *
>>> from sage.combinat.designs.designs_pyx import is_orthogonal_array
>>> from sage.combinat.designs.database import OA_15_224
>>> OA = OA_15_224()                  # not tested (too long)                 # needs sage.rings.finite_rings
>>> is_orthogonal_array(OA,Integer(15),Integer(224),Integer(2))  # not tested (too long)                 # needs sage.rings.finite_rings
True

The design is available from the general constructor:

sage: designs.orthogonal_arrays.is_available(15,224)                            # needs sage.schemes
True
>>> from sage.all import *
>>> designs.orthogonal_arrays.is_available(Integer(15),Integer(224))                            # needs sage.schemes
True
sage.combinat.designs.database.OA_15_896()[source]

Return 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)          # needs sage.rings.finite_rings
sage: is_orthogonal_array(OA,15,896,2)  # not tested (too long)                 # needs sage.rings.finite_rings
True
>>> from sage.all import *
>>> from sage.combinat.designs.designs_pyx import is_orthogonal_array
>>> from sage.combinat.designs.database import OA_15_896
>>> OA = OA_15_896()                  # not tested (too long, ~2min)          # needs sage.rings.finite_rings
>>> is_orthogonal_array(OA,Integer(15),Integer(896),Integer(2))  # not tested (too long)                 # needs sage.rings.finite_rings
True

The design is available from the general constructor:

sage: designs.orthogonal_arrays.is_available(15,896)                            # needs sage.schemes
True
>>> from sage.all import *
>>> designs.orthogonal_arrays.is_available(Integer(15),Integer(896))                            # needs sage.schemes
True
sage.combinat.designs.database.OA_16_176()[source]

Return 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()                                                          # needs sage.rings.finite_rings
sage: is_orthogonal_array(OA,16,176,2)                                          # needs sage.rings.finite_rings
True
>>> from sage.all import *
>>> from sage.combinat.designs.designs_pyx import is_orthogonal_array
>>> from sage.combinat.designs.database import OA_16_176
>>> OA = OA_16_176()                                                          # needs sage.rings.finite_rings
>>> is_orthogonal_array(OA,Integer(16),Integer(176),Integer(2))                                          # needs sage.rings.finite_rings
True

The design is available from the general constructor:

sage: designs.orthogonal_arrays.is_available(16,176)                            # needs sage.schemes
True
>>> from sage.all import *
>>> designs.orthogonal_arrays.is_available(Integer(16),Integer(176))                            # needs sage.schemes
True
sage.combinat.designs.database.OA_16_208()[source]

Return 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)                 # needs sage.rings.finite_rings
sage: is_orthogonal_array(OA,16,208,2)  # not tested (too long)                 # needs sage.rings.finite_rings
True
>>> from sage.all import *
>>> from sage.combinat.designs.designs_pyx import is_orthogonal_array
>>> from sage.combinat.designs.database import OA_16_208
>>> OA = OA_16_208()                  # not tested (too long)                 # needs sage.rings.finite_rings
>>> is_orthogonal_array(OA,Integer(16),Integer(208),Integer(2))  # not tested (too long)                 # needs sage.rings.finite_rings
True

The design is available from the general constructor:

sage: designs.orthogonal_arrays.is_available(16,208)                            # needs sage.schemes
True
>>> from sage.all import *
>>> designs.orthogonal_arrays.is_available(Integer(16),Integer(208))                            # needs sage.schemes
True
sage.combinat.designs.database.OA_17_560()[source]

Return 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()                                                          # needs sage.rings.finite_rings sage.schemes
sage: is_orthogonal_array(OA,17,560,2)                                          # needs sage.rings.finite_rings sage.schemes
True
>>> from sage.all import *
>>> from sage.combinat.designs.designs_pyx import is_orthogonal_array
>>> from sage.combinat.designs.database import OA_17_560
>>> OA = OA_17_560()                                                          # needs sage.rings.finite_rings sage.schemes
>>> is_orthogonal_array(OA,Integer(17),Integer(560),Integer(2))                                          # needs sage.rings.finite_rings sage.schemes
True

The design is available from the general constructor:

sage: designs.orthogonal_arrays.is_available(17,560)                            # needs sage.schemes
True
>>> from sage.all import *
>>> designs.orthogonal_arrays.is_available(Integer(17),Integer(560))                            # needs sage.schemes
True
sage.combinat.designs.database.OA_20_352()[source]

Return 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)                     # needs sage.rings.finite_rings
sage: is_orthogonal_array(OA,20,352,2)  # not tested (~25s)                     # needs sage.rings.finite_rings
True
>>> from sage.all import *
>>> from sage.combinat.designs.designs_pyx import is_orthogonal_array
>>> from sage.combinat.designs.database import OA_20_352
>>> OA = OA_20_352()                  # not tested (~25s)                     # needs sage.rings.finite_rings
>>> is_orthogonal_array(OA,Integer(20),Integer(352),Integer(2))  # not tested (~25s)                     # needs sage.rings.finite_rings
True

The design is available from the general constructor:

sage: designs.orthogonal_arrays.is_available(20,352)                            # needs sage.schemes
True
>>> from sage.all import *
>>> designs.orthogonal_arrays.is_available(Integer(20),Integer(352))                            # needs sage.schemes
True
sage.combinat.designs.database.OA_20_416()[source]

Return 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)                     # needs sage.rings.finite_rings
sage: is_orthogonal_array(OA,20,416,2)  # not tested                            # needs sage.rings.finite_rings
True
>>> from sage.all import *
>>> from sage.combinat.designs.designs_pyx import is_orthogonal_array
>>> from sage.combinat.designs.database import OA_20_416
>>> OA = OA_20_416()                  # not tested (~35s)                     # needs sage.rings.finite_rings
>>> is_orthogonal_array(OA,Integer(20),Integer(416),Integer(2))  # not tested                            # needs sage.rings.finite_rings
True

The design is available from the general constructor:

sage: designs.orthogonal_arrays.is_available(20,416)                            # needs sage.schemes
True
>>> from sage.all import *
>>> designs.orthogonal_arrays.is_available(Integer(20),Integer(416))                            # needs sage.schemes
True
sage.combinat.designs.database.OA_20_544()[source]

Return 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)            # needs sage.rings.finite_rings
sage: is_orthogonal_array(OA,20,544,2)  # not tested                            # needs sage.rings.finite_rings
True
>>> from sage.all import *
>>> from sage.combinat.designs.designs_pyx import is_orthogonal_array
>>> from sage.combinat.designs.database import OA_20_544
>>> OA = OA_20_544()                  # not tested (too long ~1mn)            # needs sage.rings.finite_rings
>>> is_orthogonal_array(OA,Integer(20),Integer(544),Integer(2))  # not tested                            # needs sage.rings.finite_rings
True

The design is available from the general constructor:

sage: designs.orthogonal_arrays.is_available(20,544)                            # needs sage.schemes
True
>>> from sage.all import *
>>> designs.orthogonal_arrays.is_available(Integer(20),Integer(544))                            # needs sage.schemes
True
sage.combinat.designs.database.OA_25_1262()[source]

Return 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
>>> from sage.all import *
>>> from sage.combinat.designs.designs_pyx import is_orthogonal_array
>>> from sage.combinat.designs.database import OA_25_1262
>>> OA = OA_25_1262()                       # not tested -- too long
>>> is_orthogonal_array(OA,Integer(25),Integer(1262),Integer(2)) # not tested -- too long
True

The design is available from the general constructor:

sage: designs.orthogonal_arrays.is_available(25,1262)                           # needs sage.schemes
True
>>> from sage.all import *
>>> designs.orthogonal_arrays.is_available(Integer(25),Integer(1262))                           # needs sage.schemes
True
sage.combinat.designs.database.OA_520_plus_x(x)[source]

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
>>> from sage.all import *
>>> from sage.combinat.designs.designs_pyx import is_orthogonal_array
>>> from sage.combinat.designs.database import OA_520_plus_x
>>> OA = OA_520_plus_x(Integer(0))                   # not tested (already tested in OA_10_520)
>>> is_orthogonal_array(OA,Integer(10),Integer(520),Integer(2))  # not tested (already tested in OA_10_520)
True
sage.combinat.designs.database.OA_7_18()[source]

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
>>> from sage.all import *
>>> from sage.combinat.designs.designs_pyx import is_orthogonal_array
>>> from sage.combinat.designs.database import OA_7_18
>>> OA = OA_7_18()
>>> is_orthogonal_array(OA,Integer(7),Integer(18),Integer(2))
True

The design is available from the general constructor:

sage: designs.orthogonal_arrays.is_available(7,18)                              # needs sage.schemes
True
>>> from sage.all import *
>>> designs.orthogonal_arrays.is_available(Integer(7),Integer(18))                              # needs sage.schemes
True
sage.combinat.designs.database.OA_7_66()[source]

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()                                                            # needs sage.schemes
sage: is_orthogonal_array(OA,7,66,2)                                            # needs sage.schemes
True
>>> from sage.all import *
>>> from sage.combinat.designs.orthogonal_arrays import is_orthogonal_array
>>> from sage.combinat.designs.database import OA_7_66
>>> OA = OA_7_66()                                                            # needs sage.schemes
>>> is_orthogonal_array(OA,Integer(7),Integer(66),Integer(2))                                            # needs sage.schemes
True

The design is available from the general constructor:

sage: designs.orthogonal_arrays.is_available(7,66)                              # needs sage.schemes
True
>>> from sage.all import *
>>> designs.orthogonal_arrays.is_available(Integer(7),Integer(66))                              # needs sage.schemes
True
sage.combinat.designs.database.OA_7_68()[source]

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()                                                            # needs sage.schemes
sage: is_orthogonal_array(OA,7,68,2)                                            # needs sage.schemes
True
>>> from sage.all import *
>>> from sage.combinat.designs.orthogonal_arrays import is_orthogonal_array
>>> from sage.combinat.designs.database import OA_7_68
>>> OA = OA_7_68()                                                            # needs sage.schemes
>>> is_orthogonal_array(OA,Integer(7),Integer(68),Integer(2))                                            # needs sage.schemes
True

The design is available from the general constructor:

sage: designs.orthogonal_arrays.is_available(7,68)                              # needs sage.schemes
True
>>> from sage.all import *
>>> designs.orthogonal_arrays.is_available(Integer(7),Integer(68))                              # needs sage.schemes
True
sage.combinat.designs.database.OA_7_74()[source]

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()                                                            # needs sage.schemes
sage: is_orthogonal_array(OA,7,74,2)                                            # needs sage.schemes
True
>>> from sage.all import *
>>> from sage.combinat.designs.orthogonal_arrays import is_orthogonal_array
>>> from sage.combinat.designs.database import OA_7_74
>>> OA = OA_7_74()                                                            # needs sage.schemes
>>> is_orthogonal_array(OA,Integer(7),Integer(74),Integer(2))                                            # needs sage.schemes
True

The design is available from the general constructor:

sage: designs.orthogonal_arrays.is_available(7,74)                              # needs sage.schemes
True
>>> from sage.all import *
>>> designs.orthogonal_arrays.is_available(Integer(7),Integer(74))                              # needs sage.schemes
True
sage.combinat.designs.database.OA_8_69()[source]

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()                                                            # needs sage.schemes
sage: is_orthogonal_array(OA,8,69,2)                                            # needs sage.schemes
True
>>> from sage.all import *
>>> from sage.combinat.designs.orthogonal_arrays import is_orthogonal_array
>>> from sage.combinat.designs.database import OA_8_69
>>> OA = OA_8_69()                                                            # needs sage.schemes
>>> is_orthogonal_array(OA,Integer(8),Integer(69),Integer(2))                                            # needs sage.schemes
True

The design is available from the general constructor:

sage: designs.orthogonal_arrays.is_available(8,69)                              # needs sage.schemes
True
>>> from sage.all import *
>>> designs.orthogonal_arrays.is_available(Integer(8),Integer(69))                              # needs sage.schemes
True
sage.combinat.designs.database.OA_8_76()[source]

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()                                                            # needs sage.schemes
sage: is_orthogonal_array(OA,8,76,2)                                            # needs sage.schemes
True
>>> from sage.all import *
>>> from sage.combinat.designs.orthogonal_arrays import is_orthogonal_array
>>> from sage.combinat.designs.database import OA_8_76
>>> OA = OA_8_76()                                                            # needs sage.schemes
>>> is_orthogonal_array(OA,Integer(8),Integer(76),Integer(2))                                            # needs sage.schemes
True

The design is available from the general constructor:

sage: designs.orthogonal_arrays.is_available(8,76)                              # needs sage.schemes
True
>>> from sage.all import *
>>> designs.orthogonal_arrays.is_available(Integer(8),Integer(76))                              # needs sage.schemes
True
sage.combinat.designs.database.OA_9_1078()[source]

Return 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
>>> from sage.all import *
>>> from sage.combinat.designs.designs_pyx import is_orthogonal_array
>>> from sage.combinat.designs.database import OA_9_1078
>>> OA = OA_9_1078()                       # not tested -- ~3s
>>> is_orthogonal_array(OA,Integer(9),Integer(1078),Integer(2)) # not tested -- ~3s
True

The design is available from the general constructor:

sage: designs.orthogonal_arrays.is_available(9,1078)                            # needs sage.schemes
True
>>> from sage.all import *
>>> designs.orthogonal_arrays.is_available(Integer(9),Integer(1078))                            # needs sage.schemes
True
sage.combinat.designs.database.OA_9_120()[source]

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()                                                           # needs sage.modules sage.schemes
sage: is_orthogonal_array(OA,9,120,2)                                           # needs sage.modules sage.schemes
True
>>> from sage.all import *
>>> from sage.combinat.designs.designs_pyx import is_orthogonal_array
>>> from sage.combinat.designs.database import OA_9_120
>>> OA = OA_9_120()                                                           # needs sage.modules sage.schemes
>>> is_orthogonal_array(OA,Integer(9),Integer(120),Integer(2))                                           # needs sage.modules sage.schemes
True

The design is available from the general constructor:

sage: designs.orthogonal_arrays.is_available(9,120)                             # needs sage.schemes
True
>>> from sage.all import *
>>> designs.orthogonal_arrays.is_available(Integer(9),Integer(120))                             # needs sage.schemes
True
sage.combinat.designs.database.OA_9_135()[source]

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()                                                           # needs sage.rings.finite_rings sage.schemes
sage: is_orthogonal_array(OA,9,135,2)                                           # needs sage.rings.finite_rings sage.schemes
True
>>> from sage.all import *
>>> from sage.combinat.designs.designs_pyx import is_orthogonal_array
>>> from sage.combinat.designs.database import OA_9_135
>>> OA = OA_9_135()                                                           # needs sage.rings.finite_rings sage.schemes
>>> is_orthogonal_array(OA,Integer(9),Integer(135),Integer(2))                                           # needs sage.rings.finite_rings sage.schemes
True

The design is available from the general constructor:

sage: designs.orthogonal_arrays.is_available(9,135)                             # needs sage.schemes
True
>>> from sage.all import *
>>> designs.orthogonal_arrays.is_available(Integer(9),Integer(135))                             # needs sage.schemes
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); G                              # needs sage.libs.pari
Ring of integers modulo 273
>>> from sage.all import *
>>> G,D = designs.difference_family(Integer(273),Integer(17),Integer(1)); G                              # needs sage.libs.pari
Ring of integers modulo 273
sage.combinat.designs.database.OA_9_1612()[source]

Return 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
>>> from sage.all import *
>>> from sage.combinat.designs.designs_pyx import is_orthogonal_array
>>> from sage.combinat.designs.database import OA_9_1612
>>> OA = OA_9_1612()                       # not tested -- ~6s
>>> is_orthogonal_array(OA,Integer(9),Integer(1612),Integer(2)) # not tested -- ~6s
True

The design is available from the general constructor:

sage: designs.orthogonal_arrays.is_available(9,1612)                            # needs sage.schemes
True
>>> from sage.all import *
>>> designs.orthogonal_arrays.is_available(Integer(9),Integer(1612))                            # needs sage.schemes
True
sage.combinat.designs.database.OA_9_40()[source]

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()                                                            # needs sage.rings.finite_rings
sage: is_orthogonal_array(OA,9,40,2)                                            # needs sage.rings.finite_rings
True
>>> from sage.all import *
>>> from sage.combinat.designs.designs_pyx import is_orthogonal_array
>>> from sage.combinat.designs.database import OA_9_40
>>> OA = OA_9_40()                                                            # needs sage.rings.finite_rings
>>> is_orthogonal_array(OA,Integer(9),Integer(40),Integer(2))                                            # needs sage.rings.finite_rings
True

The design is available from the general constructor:

sage: designs.orthogonal_arrays.is_available(9,40)                              # needs sage.schemes
True
>>> from sage.all import *
>>> designs.orthogonal_arrays.is_available(Integer(9),Integer(40))                              # needs sage.schemes
True
sage.combinat.designs.database.QDM_19_6_1_1_1()[source]

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
>>> from sage.all import *
>>> from sage.combinat.designs.database import QDM_19_6_1_1_1
>>> from sage.combinat.designs.designs_pyx import is_quasi_difference_matrix
>>> G,M = QDM_19_6_1_1_1()
>>> is_quasi_difference_matrix(M,G,Integer(6),Integer(1),Integer(1),Integer(1))
True
sage.combinat.designs.database.QDM_21_5_1_1_1()[source]

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
>>> from sage.all import *
>>> from sage.combinat.designs.database import QDM_21_5_1_1_1
>>> from sage.combinat.designs.designs_pyx import is_quasi_difference_matrix
>>> G,M = QDM_21_5_1_1_1()
>>> is_quasi_difference_matrix(M,G,Integer(5),Integer(1),Integer(1),Integer(1))
True
sage.combinat.designs.database.QDM_21_6_1_1_5()[source]

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
>>> from sage.all import *
>>> from sage.combinat.designs.database import QDM_21_6_1_1_5
>>> from sage.combinat.designs.designs_pyx import is_quasi_difference_matrix
>>> G,M = QDM_21_6_1_1_5()
>>> is_quasi_difference_matrix(M,G,Integer(6),Integer(1),Integer(1),Integer(5))
True
sage.combinat.designs.database.QDM_25_6_1_1_5()[source]

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()                                                    # needs sage.modules
sage: is_quasi_difference_matrix(M,G,6,1,1,5)                                   # needs sage.modules
True
>>> from sage.all import *
>>> from sage.combinat.designs.database import QDM_25_6_1_1_5
>>> from sage.combinat.designs.designs_pyx import is_quasi_difference_matrix
>>> G,M = QDM_25_6_1_1_5()                                                    # needs sage.modules
>>> is_quasi_difference_matrix(M,G,Integer(6),Integer(1),Integer(1),Integer(5))                                   # needs sage.modules
True
sage.combinat.designs.database.QDM_33_6_1_1_1()[source]

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
>>> from sage.all import *
>>> from sage.combinat.designs.database import QDM_33_6_1_1_1
>>> from sage.combinat.designs.designs_pyx import is_quasi_difference_matrix
>>> G,M = QDM_33_6_1_1_1()
>>> is_quasi_difference_matrix(M,G,Integer(6),Integer(1),Integer(1),Integer(1))
True
sage.combinat.designs.database.QDM_35_7_1_1_7()[source]

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
>>> from sage.all import *
>>> from sage.combinat.designs.database import QDM_35_7_1_1_7
>>> from sage.combinat.designs.designs_pyx import is_quasi_difference_matrix
>>> G,M = QDM_35_7_1_1_7()
>>> is_quasi_difference_matrix(M,G,Integer(7),Integer(1),Integer(1),Integer(7))
True
sage.combinat.designs.database.QDM_37_6_1_1_1()[source]

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
>>> from sage.all import *
>>> from sage.combinat.designs.database import QDM_37_6_1_1_1
>>> from sage.combinat.designs.designs_pyx import is_quasi_difference_matrix
>>> G,M = QDM_37_6_1_1_1()
>>> is_quasi_difference_matrix(M,G,Integer(6),Integer(1),Integer(1),Integer(1))
True
sage.combinat.designs.database.QDM_45_7_1_1_9()[source]

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
>>> from sage.all import *
>>> from sage.combinat.designs.database import QDM_45_7_1_1_9
>>> from sage.combinat.designs.designs_pyx import is_quasi_difference_matrix
>>> G,M = QDM_45_7_1_1_9()
>>> is_quasi_difference_matrix(M,G,Integer(7),Integer(1),Integer(1),Integer(9))
True
sage.combinat.designs.database.QDM_54_7_1_1_8()[source]

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
>>> from sage.all import *
>>> from sage.combinat.designs.database import QDM_54_7_1_1_8
>>> from sage.combinat.designs.designs_pyx import is_quasi_difference_matrix
>>> G,M = QDM_54_7_1_1_8()
>>> is_quasi_difference_matrix(M,G,Integer(7),Integer(1),Integer(1),Integer(8))
True
sage.combinat.designs.database.QDM_57_9_1_1_8()[source]

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()                                                    # needs sage.schemes
sage: is_quasi_difference_matrix(M,G,9,1,1,8)                                   # needs sage.schemes
True
>>> from sage.all import *
>>> from sage.combinat.designs.database import QDM_57_9_1_1_8
>>> from sage.combinat.designs.designs_pyx import is_quasi_difference_matrix
>>> G,M = QDM_57_9_1_1_8()                                                    # needs sage.schemes
>>> is_quasi_difference_matrix(M,G,Integer(9),Integer(1),Integer(1),Integer(8))                                   # needs sage.schemes
True
sage.combinat.designs.database.RBIBD_120_8_1()[source]

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()                                                   # needs sage.modules
sage: is_pairwise_balanced_design(RBIBD,120,[8])                                # needs sage.modules
True
>>> from sage.all import *
>>> from sage.combinat.designs.database import RBIBD_120_8_1
>>> from sage.combinat.designs.bibd import is_pairwise_balanced_design
>>> RBIBD = RBIBD_120_8_1()                                                   # needs sage.modules
>>> is_pairwise_balanced_design(RBIBD,Integer(120),[Integer(8)])                                # needs sage.modules
True

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

sage: for i in range(17):                                                       # needs sage.modules
....:     assert len(set(sum(RBIBD[i*15:(i+1)*15],[]))) == 120
>>> from sage.all import *
>>> for i in range(Integer(17)):                                                       # needs sage.modules
...     assert len(set(sum(RBIBD[i*Integer(15):(i+Integer(1))*Integer(15)],[]))) == Integer(120)

The BIBD is available from the constructor:

sage: _ = designs.balanced_incomplete_block_design(120,8)                       # needs sage.modules
>>> from sage.all import *
>>> _ = designs.balanced_incomplete_block_design(Integer(120),Integer(8))                       # needs sage.modules
sage.combinat.designs.database.ca_11_2_5_3()[source]

Return a CA with the given parameters. This CA is proven to be optimal.

Data obtained from https://zenodo.org/records/1476059

EXAMPLES:

sage: from sage.combinat.designs.designs_pyx import is_covering_array
sage: from sage.combinat.designs.database import ca_11_2_5_3
sage: C = ca_11_2_5_3()
sage: is_covering_array(C,2,3)
True
>>> from sage.all import *
>>> from sage.combinat.designs.designs_pyx import is_covering_array
>>> from sage.combinat.designs.database import ca_11_2_5_3
>>> C = ca_11_2_5_3()
>>> is_covering_array(C,Integer(2),Integer(3))
True
sage.combinat.designs.database.ca_12_2_7_3()[source]

Return a CA with the given parameters. This CA is proven to be optimal.

Data obtained from https://zenodo.org/records/1476059

EXAMPLES:

sage: from sage.combinat.designs.designs_pyx import is_covering_array
sage: from sage.combinat.designs.database import ca_12_2_7_3
sage: C = ca_12_2_7_3()
sage: is_covering_array(C,2,3)
True
>>> from sage.all import *
>>> from sage.combinat.designs.designs_pyx import is_covering_array
>>> from sage.combinat.designs.database import ca_12_2_7_3
>>> C = ca_12_2_7_3()
>>> is_covering_array(C,Integer(2),Integer(3))
True
sage.combinat.designs.database.ca_13_2_9_3()[source]

Return a CA with the given parameters. This CA is proven to be optimal.

Data obtained from https://zenodo.org/records/1476059

EXAMPLES:

sage: from sage.combinat.designs.designs_pyx import is_covering_array
sage: from sage.combinat.designs.database import ca_13_2_9_3
sage: C = ca_13_2_9_3()
sage: is_covering_array(C,2,3)
True
>>> from sage.all import *
>>> from sage.combinat.designs.designs_pyx import is_covering_array
>>> from sage.combinat.designs.database import ca_13_2_9_3
>>> C = ca_13_2_9_3()
>>> is_covering_array(C,Integer(2),Integer(3))
True
sage.combinat.designs.database.ca_14_2_10_3()[source]

Return a CA with the given parameters. This CA is proven to be optimal.

Data obtained from https://zenodo.org/records/1476059

EXAMPLES:

sage: from sage.combinat.designs.designs_pyx import is_covering_array
sage: from sage.combinat.designs.database import ca_14_2_10_3
sage: C = ca_14_2_10_3()
sage: is_covering_array(C,2,3)
True
>>> from sage.all import *
>>> from sage.combinat.designs.designs_pyx import is_covering_array
>>> from sage.combinat.designs.database import ca_14_2_10_3
>>> C = ca_14_2_10_3()
>>> is_covering_array(C,Integer(2),Integer(3))
True
sage.combinat.designs.database.ca_15_2_20_3()[source]

Return a CA with the given parameters. This CA is proven to be optimal.

Data obtained from [Nur2004]

EXAMPLES:

sage: from sage.combinat.designs.designs_pyx import is_covering_array
sage: from sage.combinat.designs.database import ca_15_2_20_3
sage: C = ca_15_2_20_3()
sage: is_covering_array(C,2,3)
True
>>> from sage.all import *
>>> from sage.combinat.designs.designs_pyx import is_covering_array
>>> from sage.combinat.designs.database import ca_15_2_20_3
>>> C = ca_15_2_20_3()
>>> is_covering_array(C,Integer(2),Integer(3))
True
sage.combinat.designs.database.ca_19_2_6_4()[source]

Return a CA with the given parameters. This CA is proven to be optimal.

Data obtained from https://zenodo.org/records/1476059

EXAMPLES:

sage: from sage.combinat.designs.designs_pyx import is_covering_array
sage: from sage.combinat.designs.database import ca_19_2_6_4
sage: C = ca_19_2_6_4()
sage: is_covering_array(C,2,4)
True
>>> from sage.all import *
>>> from sage.combinat.designs.designs_pyx import is_covering_array
>>> from sage.combinat.designs.database import ca_19_2_6_4
>>> C = ca_19_2_6_4()
>>> is_covering_array(C,Integer(2),Integer(4))
True
sage.combinat.designs.database.ca_21_2_7_4()[source]

Return a CA with the given parameters. This CA is proven to be optimal. This CA is also uniform.

Data obtained from https://zenodo.org/records/1476059

EXAMPLES:

sage: from sage.combinat.designs.designs_pyx import is_covering_array
sage: from sage.combinat.designs.database import ca_21_2_7_4
sage: C = ca_21_2_7_4()
sage: is_covering_array(C,2,4)
True
>>> from sage.all import *
>>> from sage.combinat.designs.designs_pyx import is_covering_array
>>> from sage.combinat.designs.database import ca_21_2_7_4
>>> C = ca_21_2_7_4()
>>> is_covering_array(C,Integer(2),Integer(4))
True
sage.combinat.designs.database.ca_29_2_7_5()[source]

Return a CA with the given parameters. This CA is proven to be optimal.

Data obtained from https://zenodo.org/records/1476059

EXAMPLES:

sage: from sage.combinat.designs.designs_pyx import is_covering_array
sage: from sage.combinat.designs.database import ca_29_2_7_5
sage: C = ca_29_2_7_5()
sage: is_covering_array(C,2,5)
True
>>> from sage.all import *
>>> from sage.combinat.designs.designs_pyx import is_covering_array
>>> from sage.combinat.designs.database import ca_29_2_7_5
>>> C = ca_29_2_7_5()
>>> is_covering_array(C,Integer(2),Integer(5))
True
sage.combinat.designs.database.ca_37_2_4_6()[source]

Return a CA with the given parameters. This CA is proven to be optimal.

Data obtained from https://zenodo.org/records/1476059

EXAMPLES:

sage: from sage.combinat.designs.designs_pyx import is_covering_array
sage: from sage.combinat.designs.database import ca_37_2_4_6
sage: C = ca_37_2_4_6()
sage: is_covering_array(C,2,6)
True
>>> from sage.all import *
>>> from sage.combinat.designs.designs_pyx import is_covering_array
>>> from sage.combinat.designs.database import ca_37_2_4_6
>>> C = ca_37_2_4_6()
>>> is_covering_array(C,Integer(2),Integer(6))
True
sage.combinat.designs.database.ca_39_2_5_6()[source]

Return a CA with the given parameters. This CA is proven to be optimal.

Data obtained from https://zenodo.org/records/1476059

EXAMPLES:

sage: from sage.combinat.designs.designs_pyx import is_covering_array
sage: from sage.combinat.designs.database import ca_39_2_5_6
sage: C = ca_39_2_5_6()
sage: is_covering_array(C,2,6)
True
>>> from sage.all import *
>>> from sage.combinat.designs.designs_pyx import is_covering_array
>>> from sage.combinat.designs.database import ca_39_2_5_6
>>> C = ca_39_2_5_6()
>>> is_covering_array(C,Integer(2),Integer(6))
True
sage.combinat.designs.database.ca_41_2_6_6()[source]

Return a CA with the given parameters. This CA is proven to be optimal. This CA is also uniform.

Data obtained from https://zenodo.org/records/1476059

EXAMPLES:

sage: from sage.combinat.designs.designs_pyx import is_covering_array
sage: from sage.combinat.designs.database import ca_41_2_6_6
sage: C = ca_41_2_6_6()
sage: is_covering_array(C,2,6)
True
>>> from sage.all import *
>>> from sage.combinat.designs.designs_pyx import is_covering_array
>>> from sage.combinat.designs.database import ca_41_2_6_6
>>> C = ca_41_2_6_6()
>>> is_covering_array(C,Integer(2),Integer(6))
True
sage.combinat.designs.database.cyclic_shift(l, i)[source]
sage.combinat.designs.database.f()[source]

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()                                                    # needs sage.schemes
sage: is_quasi_difference_matrix(M,G,9,1,1,8)                                   # needs sage.schemes
True
>>> from sage.all import *
>>> from sage.combinat.designs.database import QDM_57_9_1_1_8
>>> from sage.combinat.designs.designs_pyx import is_quasi_difference_matrix
>>> G,M = QDM_57_9_1_1_8()                                                    # needs sage.schemes
>>> is_quasi_difference_matrix(M,G,Integer(9),Integer(1),Integer(1),Integer(8))                                   # needs sage.schemes
True