Database of small combinatorial designs¶
This module implements combinatorial designs that cannot be obtained by more general constructions. Most of them come from the Handbook of Combinatorial Designs [DesignHandbook].
All this would only be a dream without the mathematical knowledge and help of Julian R. Abel.
These functions can all be obtained through the designs.<tab> functions.
This module implements:
OA(7,18),OA(9,40),OA(7,66),OA(7,68),OA(8,69),OA(7,74),OA(8,76),OA(11,80),OA(15,112),OA(9,120),OA(9,135),OA(11,160),OA(16,176),OA(11,185),OA(10,205),OA(16,208),OA(15,224),OA(11,254),OA(20,352),OA(20,416),OA(10,469),OA(10,520),OA(12,522),OA(14,524),OA(20,544),OA(17,560),OA(11,640),OA(10,796),OA(15,896),OA(9,1078),OA(25,1262),OA(9,1612),OA(10,1620)2 MOLS of order 10,5 MOLS of order 12,4 MOLS of order 14,4 MOLS of order 15,3 MOLS of order 18- \(V(m,t)\) vectors:
\(m=3\) and \(t=\) \(2\), \(4\), \(6\), \(10\), \(12\), \(14\), \(20\), \(24\), \(26\), \(32\), \(34\)
\(m=4\) and \(t=\) \(3\), \(7\), \(9\), \(13\), \(15\), \(25\)
\(m=5\) and \(t=\) \(6\), \(8\), \(12\), \(14\), \(20\), \(26\)
\(m=6\) and \(t=\) \(5\), \(7\), \(11\), \(13\), \(17\), \(21\)
\(m=7\) and \(t=\) \(6\), \(10\), \(16\), \(18\)
\(m=8\) and \(t=\) \(9\), \(11\), \(17\), \(29\), \(57\)
\(m=9\) and \(t=\) \(12\), \(14\), \(18\), \(20\), \(22\), \(30\), \(34\), \(42\), \(44\)
\(m=10\) and \(t=\) \(13\), \(15\), \(19\), \(21\), \(25\), \(27\), \(31\), \(33\), \(43\), \(49\), \(81\), \(97\), \(103\), \(181\), \(187\), \(259\), \(273\), \(319\), \(391\), \(409\)
\(m=11\) and \(t=\) \(30\), \(32\), \(36\), \(38\), \(42\), \(56\), \(60\), \(62\), \(66\), \(78\), \(80\), \(86\), \(90\), \(92\), \(102\), \(116\), \(120\), \(128\), \(132\), \(146\), \(162\), \(170\), \(182\), \(188\), \(192\), \(198\), \(206\), \(210\), \(212\), \(216\), \(218\), \(230\), \(242\), \(246\), \(248\), \(260\), \(266\), \(270\), \(276\), \(288\), \(290\), \(296\), \(300\), \(302\), \(308\), \(312\), \(318\), \(330\), \(336\), \(338\), \(350\), \(356\), \(366\), \(368\), \(372\), \(378\), \(396\), \(402\), \(420\), \(422\), \(450\), \(452\)
\(m=12\) and \(t=\) \(33\), \(35\), \(45\), \(51\), \(55\), \(59\), \(61\), \(63\), \(69\), \(71\), \(73\), \(83\), \(85\), \(89\), \(91\), \(93\), \(101\), \(103\), \(115\), \(119\), \(121\), \(129\), \(133\), \(135\), \(139\), \(141\), \(145\), \(149\), \(155\), \(161\), \(169\), \(171\), \(185\), \(189\), \(191\), \(195\), \(199\), \(203\), \(213\), \(223\), \(229\), \(233\), \(243\), \(253\), \(255\), \(259\), \(265\), \(269\), \(271\), \(275\), \(281\), \(289\), \(293\), \(295\), \(301\), \(303\), \(309\), \(311\), \(321\), \(323\), \(335\), \(341\), \(355\), \(363\), \(379\), \(383\), \(385\), \(399\), \(401\), \(405\), \(409\), \(411\), \(413\)
- \((v,k,\lambda)\)-BIBD:
\(\lambda=1\):n \((66,6,1)\), \((76,6,1)\), \((96,6,1)\), \((106,6,1)\), \((111,6,1)\), \((120,8,1)\), \((126,6,1)\), \((136,6,1)\), \((141,6,1)\), \((171,6,1)\), \((196,6,1)\), \((201,6,1)\)
\(\lambda=2\):n \((56,11,2)\), \((79,13,2)\)
\(\lambda=8\):n \((45,9,8)\)
\(\lambda=14\):n \((176,50,14)\)
- \((v,k,\lambda)\)-difference families:
\(\lambda=1\):n \((15,3,1)\), \((21,3,1)\), \((21,5,1)\), \((25,3,1)\), \((25,4,1)\), \((27,3,1)\), \((33,3,1)\), \((37,4,1)\), \((39,3,1)\), \((40,4,1)\), \((45,3,1)\), \((45,5,1)\), \((49,3,1)\), \((49,4,1)\), \((51,3,1)\), \((52,4,1)\), \((55,3,1)\), \((57,3,1)\), \((63,3,1)\), \((64,4,1)\), \((65,5,1)\), \((69,3,1)\), \((75,3,1)\), \((76,4,1)\), \((81,3,1)\), \((81,5,1)\), \((85,4,1)\), \((91,6,1)\), \((91,7,1)\), \((121,5,1)\), \((121,6,1)\), \((141,5,1)\), \((161,5,1)\), \((175,7,1)\), \((201,5,1)\), \((217,7,1)\), \((221,5,1)\), \((259,7,1)\)
\(\lambda=2\):n \((16,3,2)\), \((19,4,2)\), \((22,4,2)\), \((28,3,2)\), \((31,4,2)\), \((31,5,2)\), \((34,4,2)\), \((35,5,2)\), \((40,3,2)\), \((43,4,2)\), \((43,7,2)\), \((46,4,2)\), \((46,6,2)\), \((51,5,2)\), \((61,6,2)\), \((64,7,2)\), \((71,5,2)\), \((75,5,2)\), \((85,7,2)\), \((85,8,2)\), \((153,9,2)\), \((181,10,2)\)
\(\lambda=3\):n \((21,4,3)\), \((21,6,3)\), \((29,7,3)\), \((41,6,3)\), \((43,7,3)\), \((45,12,3)\), \((49,9,3)\), \((51,6,3)\), \((57,7,3)\), \((61,6,3)\), \((61,10,3)\), \((71,7,3)\), \((85,7,3)\), \((97,9,3)\), \((121,10,3)\)
\(\lambda=4\):n \((22,7,4)\), \((29,8,4)\), \((43,8,4)\), \((46,10,4)\), \((55,9,4)\), \((67,12,4)\), \((71,8,4)\)
\(\lambda=5\):n \((13,5,5)\), \((17,5,5)\), \((21,6,5)\), \((22,6,5)\), \((28,6,5)\), \((33,5,5)\), \((33,6,5)\), \((37,10,5)\), \((39,6,5)\), \((45,11,5)\), \((46,10,5)\), \((55,10,5)\), \((67,11,5)\), \((73,10,5)\)
\(\lambda=6\):n \((11,4,6)\), \((15,4,6)\), \((15,5,6)\), \((29,8,6)\), \((46,10,6)\), \((53,13,6)\), \((67,12,6)\)
\(\lambda=7\):n \((25,7,7)\), \((53,14,7)\), \((61,15,7)\)
\(\lambda=8\):n \((22,8,8)\), \((34,12,8)\), \((133,33,8)\)
\(\lambda=9\):n \((21,10,9)\)
\(\lambda=10\):n \((34,12,10)\), \((43,15,10)\), \((49,21,10)\)
\(\lambda=12\):n \((22,8,12)\)
\(\lambda=14\):n \((21,8,14)\)
\(\lambda=56\):n \((901,225,56)\)
- \((v,k,\lambda)\)-difference matrices:
\(\lambda=1\):n \((12,6,1)\), \((21,6,1)\), \((24,8,1)\), \((28,6,1)\), \((33,6,1)\), \((35,6,1)\), \((36,9,1)\), \((39,6,1)\), \((44,6,1)\), \((45,7,1)\), \((48,9,1)\), \((51,6,1)\), \((52,6,1)\), \((55,7,1)\), \((56,8,1)\), \((57,8,1)\), \((60,6,1)\), \((75,8,1)\), \((273,17,1)\), \((993,32,1)\)
- \((n,k;\lambda,\mu;u)\)-quasi-difference matrices:
\((19,6;1,1;1)\), \((21,5;1,1;1)\), \((21,6;1,1;5)\), \((25,6;1,1;5)\), \((33,6;1,1;1)\), \((35,7;1,1;7)\), \((37,6;1,1;1)\), \((45,7;1,1;9)\), \((54,7;1,1;8)\), \((57,9;1,1;8)\)
- \((q,k)\) evenly distributed sets
\(k = 4\): \(13\), \(25\), \(37\), \(49\), \(61\), \(73\), \(97\), \(109\), \(121\), \(157\), \(169\), \(181\), \(193\), \(229\), \(241\), \(277\), \(289\), \(313\), \(337\), \(349\), \(361\), \(373\), \(397\), \(409\), \(421\), \(433\), \(457\), \(529\), \(541\), \(577\), \(601\), \(613\), \(625\), \(661\), \(673\), \(709\), \(733\), \(757\), \(769\), \(829\), \(841\), \(853\), \(877\), \(937\), \(961\), \(997\), \(1009\), \(1021\), \(1033\), \(1069\), \(1093\), \(1117\), \(1129\), \(1153\), \(1201\), \(1213\), \(1237\), \(1249\), \(1297\), \(1321\), \(1369\), \(1381\), \(1429\), \(1453\), \(1489\), \(1549\), \(1597\), \(1609\), \(1621\), \(1657\), \(1669\), \(1681\), \(1693\), \(1741\), \(1753\), \(1777\), \(1789\), \(1801\), \(1849\), \(1861\), \(1873\), \(1933\), \(1993\), \(2017\), \(2029\), \(2053\), \(2089\), \(2113\), \(2137\), \(2161\), \(2197\), \(2209\), \(2221\), \(2269\), \(2281\), \(2293\), \(2341\), \(2377\), \(2389\), \(2401\), \(2437\), \(2473\), \(2521\), \(2557\), \(2593\), \(2617\), \(2677\), \(2689\), \(2713\), \(2749\), \(2797\), \(2809\)
\(k = 5\): \(41\), \(61\), \(101\), \(121\), \(181\), \(241\), \(281\), \(361\), \(401\), \(421\), \(461\), \(521\), \(541\), \(601\), \(641\), \(661\), \(701\), \(761\), \(821\), \(841\), \(881\), \(941\), \(961\), \(1021\), \(1061\), \(1181\), \(1201\), \(1301\), \(1321\), \(1361\), \(1381\), \(1481\), \(1601\), \(1621\), \(1681\), \(1721\), \(1741\), \(1801\), \(1861\), \(1901\)
\(k = 6\): \(31\), \(151\), \(181\), \(211\), \(241\), \(271\), \(331\), \(361\), \(421\), \(541\), \(571\), \(601\), \(631\), \(661\), \(691\), \(751\), \(811\), \(841\), \(961\), \(991\), \(1021\), \(1051\), \(1171\), \(1201\), \(1231\), \(1291\), \(1321\), \(1381\), \(1471\), \(1531\), \(1621\), \(1681\), \(1741\), \(1801\), \(1831\), \(1861\), \(1951\)
\(k = 7\): \(169\), \(337\), \(379\), \(421\), \(463\), \(547\), \(631\), \(673\), \(757\), \(841\), \(883\), \(967\), \(1009\), \(1051\), \(1093\), \(1303\), \(1429\), \(1471\), \(1597\), \(1681\), \(1723\), \(1849\), \(1933\)
\(k = 8\): \(449\), \(617\), \(673\), \(729\), \(841\), \(953\), \(1009\), \(1289\), \(1681\), \(1849\)
\(k = 9\): \(73\), \(433\), \(937\), \(1009\), \(1153\), \(1297\), \(1369\), \(1657\), \(1801\), \(1873\)
\(k = 10\): \(1171\), \(1531\), \(1621\), \(1801\)
REFERENCES:
- DesignHandbook(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36)
Handbook of Combinatorial Designs (2ed) Charles Colbourn, Jeffrey Dinitz Chapman & Hall/CRC 2012
- Aschbacher71
M. Aschbacher, On collineation groups of symmetric block designs. J. Combinatorial Theory Ser. A 11 (1971), pp. 272–281.
- Hall71(1,2)
M. Hall, Jr., Combinatorial designs and groups. Actes du Congrès International des Mathématiciens (Nice, 1970), v.3, pp. 217–222. Gauthier-Villars, Paris, 1971.
Functions¶
- sage.combinat.designs.database.BIBD_106_6_1()¶
Return a (106,6,1)-BIBD.
This constructions appears in II.3.32 from [DesignHandbook].
EXAMPLES:
sage: from sage.combinat.designs.database import BIBD_106_6_1 sage: from sage.combinat.designs.bibd import BalancedIncompleteBlockDesign sage: BalancedIncompleteBlockDesign(106, BIBD_106_6_1()) (106,6,1)-Balanced Incomplete Block Design
- sage.combinat.designs.database.BIBD_111_6_1()¶
Return a (111,6,1)-BIBD.
This constructions appears in II.3.32 from [DesignHandbook].
EXAMPLES:
sage: from sage.combinat.designs.database import BIBD_111_6_1 sage: from sage.combinat.designs.bibd import BalancedIncompleteBlockDesign sage: BalancedIncompleteBlockDesign(111, BIBD_111_6_1()) (111,6,1)-Balanced Incomplete Block Design
- sage.combinat.designs.database.BIBD_126_6_1()¶
Return a (126,6,1)-BIBD.
This constructions appears in VI.16.92 from [DesignHandbook].
EXAMPLES:
sage: from sage.combinat.designs.database import BIBD_126_6_1 sage: from sage.combinat.designs.bibd import BalancedIncompleteBlockDesign sage: BalancedIncompleteBlockDesign(126, BIBD_126_6_1()) (126,6,1)-Balanced Incomplete Block Design
- sage.combinat.designs.database.BIBD_136_6_1()¶
Return a (136,6,1)-BIBD.
This constructions appears in II.3.32 from [DesignHandbook].
EXAMPLES:
sage: from sage.combinat.designs.database import BIBD_136_6_1 sage: from sage.combinat.designs.bibd import BalancedIncompleteBlockDesign sage: BalancedIncompleteBlockDesign(136, BIBD_136_6_1()) (136,6,1)-Balanced Incomplete Block Design
- sage.combinat.designs.database.BIBD_141_6_1()¶
Return a (141,6,1)-BIBD.
This constructions appears in II.3.32 from [DesignHandbook].
EXAMPLES:
sage: from sage.combinat.designs.database import BIBD_141_6_1 sage: from sage.combinat.designs.bibd import BalancedIncompleteBlockDesign sage: BalancedIncompleteBlockDesign(141, BIBD_141_6_1()) (141,6,1)-Balanced Incomplete Block Design
- sage.combinat.designs.database.BIBD_171_6_1()¶
Return a (171,6,1)-BIBD.
This constructions appears in II.3.32 from [DesignHandbook].
EXAMPLES:
sage: from sage.combinat.designs.database import BIBD_171_6_1 sage: from sage.combinat.designs.bibd import BalancedIncompleteBlockDesign sage: BalancedIncompleteBlockDesign(171, BIBD_171_6_1()) (171,6,1)-Balanced Incomplete Block Design
- sage.combinat.designs.database.BIBD_196_6_1()¶
Return a (196,6,1)-BIBD.
This constructions appears in II.3.32 from [DesignHandbook].
EXAMPLES:
sage: from sage.combinat.designs.database import BIBD_196_6_1 sage: from sage.combinat.designs.bibd import BalancedIncompleteBlockDesign sage: BalancedIncompleteBlockDesign(196, BIBD_196_6_1()) (196,6,1)-Balanced Incomplete Block Design
- sage.combinat.designs.database.BIBD_201_6_1()¶
Return a (201,6,1)-BIBD.
This constructions appears in II.3.32 from [DesignHandbook].
EXAMPLES:
sage: from sage.combinat.designs.database import BIBD_201_6_1 sage: from sage.combinat.designs.bibd import BalancedIncompleteBlockDesign sage: BalancedIncompleteBlockDesign(201, BIBD_201_6_1()) (201,6,1)-Balanced Incomplete Block Design
- sage.combinat.designs.database.BIBD_45_9_8(from_code=False)¶
Return a \((45,9,1)\)-BIBD.
This BIBD is obtained from the codewords of minimal weight in the
ExtendedQuadraticResidueCode()of length 48. This construction appears in VII.11.2 from [DesignHandbook], which cites [HT95].INPUT:
from_code(boolean) – whether to build the design from hardcoded data (default) or from the code object (much longer).
EXAMPLES:
sage: from sage.combinat.designs.database import BIBD_45_9_8 sage: from sage.combinat.designs.bibd import BalancedIncompleteBlockDesign sage: B = BalancedIncompleteBlockDesign(45, BIBD_45_9_8(),lambd=8); B (45,9,8)-Balanced Incomplete Block Design
REFERENCE:
- HT95
W. Huffman and V. Tonchev, The existence of extremal self-dual \([50, 25, 10]\) codes and quasi-symmetric \(2-(49, 9, 6)\) designs, Designs, Codes and Cryptography September 1995, Volume 6, Issue 2, pp 97-106
- sage.combinat.designs.database.BIBD_56_11_2()¶
Return a symmetric \((56,11,2)\)-BIBD.
The construction implemented is given in [Hall71].
Note
A symmetric \((v,k,\lambda)\) BIBD is a \((v,k,\lambda)\) BIBD with \(v\) blocks.
EXAMPLES:
sage: from sage.combinat.designs.database import BIBD_56_11_2 sage: D = IncidenceStructure(BIBD_56_11_2()) sage: D.is_t_design(t=2, v=56, k=11, l=2) True
- sage.combinat.designs.database.BIBD_66_6_1()¶
Return a (66,6,1)-BIBD.
This BIBD was obtained from La Jolla covering repository (https://math.ccrwest.org/cover.html) where it is attributed to Colin Barker.
EXAMPLES:
sage: from sage.combinat.designs.database import BIBD_66_6_1 sage: from sage.combinat.designs.bibd import BalancedIncompleteBlockDesign sage: BalancedIncompleteBlockDesign(66, BIBD_66_6_1()) (66,6,1)-Balanced Incomplete Block Design
- sage.combinat.designs.database.BIBD_76_6_1()¶
Return a (76,6,1)-BIBD.
This BIBD was obtained from La Jolla covering repository (https://math.ccrwest.org/cover.html) where it is attributed to Colin Barker.
EXAMPLES:
sage: from sage.combinat.designs.database import BIBD_76_6_1 sage: from sage.combinat.designs.bibd import BalancedIncompleteBlockDesign sage: BalancedIncompleteBlockDesign(76, BIBD_76_6_1()) (76,6,1)-Balanced Incomplete Block Design
- sage.combinat.designs.database.BIBD_79_13_2()¶
Return a symmetric \((79,13,2)\)-BIBD.
The construction implemented is the one described in [Aschbacher71]. A typo in that paper was corrected in [Hall71].
Note
A symmetric \((v,k,\lambda)\) BIBD is a \((v,k,\lambda)\) BIBD with \(v\) blocks.
EXAMPLES:
sage: from sage.combinat.designs.database import BIBD_79_13_2 sage: D = IncidenceStructure(BIBD_79_13_2()) sage: D.is_t_design(t=2, v=79, k=13, l=2) True
- sage.combinat.designs.database.BIBD_96_6_1()¶
Return a (96,6,1)-BIBD.
This BIBD was obtained from La Jolla covering repository (https://math.ccrwest.org/cover.html) where it is attributed to Colin Barker.
EXAMPLES:
sage: from sage.combinat.designs.database import BIBD_96_6_1 sage: from sage.combinat.designs.bibd import BalancedIncompleteBlockDesign sage: BalancedIncompleteBlockDesign(96, BIBD_96_6_1()) (96,6,1)-Balanced Incomplete Block Design
- sage.combinat.designs.database.DM_12_6_1()¶
Return a \((12,6,1)\)-difference matrix as built in [Hanani75].
This design is Lemma 3.21 from [Hanani75].
EXAMPLES:
sage: from sage.combinat.designs.designs_pyx import is_difference_matrix sage: from sage.combinat.designs.database import DM_12_6_1 sage: G,M = DM_12_6_1() sage: is_difference_matrix(M,G,6,1) True
Can be obtained from the constructor:
sage: _ = designs.difference_matrix(12,6)
REFERENCES:
- Hanani75(1,2)
Haim Hanani, Balanced incomplete block designs and related designs, doi:10.1016/0012-365X(75)90040-0, Discrete Mathematics, Volume 11, Issue 3, 1975, Pages 255-369.
- sage.combinat.designs.database.DM_21_6_1()¶
Return a \((21,6,1)\)-difference matrix.
As explained in the Handbook III.3.50 [DesignHandbook].
EXAMPLES:
sage: from sage.combinat.designs.designs_pyx import is_difference_matrix sage: from sage.combinat.designs.database import DM_21_6_1 sage: G,M = DM_21_6_1() sage: is_difference_matrix(M,G,6,1) True
Can be obtained from the constructor:
sage: _ = designs.difference_matrix(21,6)
- sage.combinat.designs.database.DM_24_8_1()¶
Return a \((24,8,1)\)-difference matrix.
As explained in the Handbook III.3.52 [DesignHandbook].
EXAMPLES:
sage: from sage.combinat.designs.designs_pyx import is_difference_matrix sage: from sage.combinat.designs.database import DM_24_8_1 sage: G,M = DM_24_8_1() sage: is_difference_matrix(M,G,8,1) True
Can be obtained from the constructor:
sage: _ = designs.difference_matrix(24,8)
- sage.combinat.designs.database.DM_273_17_1()¶
Return a \((273,17,1)\)-difference matrix.
Given by Julian R. Abel.
EXAMPLES:
sage: from sage.combinat.designs.designs_pyx import is_difference_matrix sage: from sage.combinat.designs.database import DM_273_17_1 sage: G,M = DM_273_17_1() sage: is_difference_matrix(M,G,17,1) True
Can be obtained from the constructor:
sage: _ = designs.difference_matrix(273,17)
- sage.combinat.designs.database.DM_28_6_1()¶
Return a \((28,6,1)\)-difference matrix.
As explained in the Handbook III.3.54 [DesignHandbook].
EXAMPLES:
sage: from sage.combinat.designs.designs_pyx import is_difference_matrix sage: from sage.combinat.designs.database import DM_28_6_1 sage: G,M = DM_28_6_1() sage: is_difference_matrix(M,G,6,1) True
Can be obtained from the constructor:
sage: _ = designs.difference_matrix(28,6)
- sage.combinat.designs.database.DM_33_6_1()¶
Return a \((33,6,1)\)-difference matrix.
As explained in the Handbook III.3.56 [DesignHandbook].
EXAMPLES:
sage: from sage.combinat.designs.designs_pyx import is_difference_matrix sage: from sage.combinat.designs.database import DM_33_6_1 sage: G,M = DM_33_6_1() sage: is_difference_matrix(M,G,6,1) True
Can be obtained from the constructor:
sage: _ = designs.difference_matrix(33,6)
- sage.combinat.designs.database.DM_35_6_1()¶
Return a \((35,6,1)\)-difference matrix.
As explained in the Handbook III.3.58 [DesignHandbook].
EXAMPLES:
sage: from sage.combinat.designs.designs_pyx import is_difference_matrix sage: from sage.combinat.designs.database import DM_35_6_1 sage: G,M = DM_35_6_1() sage: is_difference_matrix(M,G,6,1) True
Can be obtained from the constructor:
sage: _ = designs.difference_matrix(35,6)
- sage.combinat.designs.database.DM_36_9_1()¶
Return a \((36,9,1)\)-difference matrix.
As explained in the Handbook III.3.59 [DesignHandbook].
EXAMPLES:
sage: from sage.combinat.designs.designs_pyx import is_difference_matrix sage: from sage.combinat.designs.database import DM_36_9_1 sage: G,M = DM_36_9_1() sage: is_difference_matrix(M,G,9,1) True
Can be obtained from the constructor:
sage: _ = designs.difference_matrix(36,9)
- sage.combinat.designs.database.DM_39_6_1()¶
Return a \((39,6,1)\)-difference matrix.
As explained in the Handbook III.3.61 [DesignHandbook].
EXAMPLES:
sage: from sage.combinat.designs.designs_pyx import is_difference_matrix sage: from sage.combinat.designs.database import DM_39_6_1 sage: G,M = DM_39_6_1() sage: is_difference_matrix(M,G,6,1) True
The design is available from the general constructor:
sage: designs.difference_matrix(39,6,existence=True) True
- sage.combinat.designs.database.DM_44_6_1()¶
Return a \((44,6,1)\)-difference matrix.
As explained in the Handbook III.3.64 [DesignHandbook].
EXAMPLES:
sage: from sage.combinat.designs.designs_pyx import is_difference_matrix sage: from sage.combinat.designs.database import DM_44_6_1 sage: G,M = DM_44_6_1() sage: is_difference_matrix(M,G,6,1) True
Can be obtained from the constructor:
sage: _ = designs.difference_matrix(44,6)
- sage.combinat.designs.database.DM_45_7_1()¶
Return a \((45,7,1)\)-difference matrix.
As explained in the Handbook III.3.65 [DesignHandbook].
… whose description contained a very deadly typo, kindly fixed by Julian R. Abel.
EXAMPLES:
sage: from sage.combinat.designs.designs_pyx import is_difference_matrix sage: from sage.combinat.designs.database import DM_45_7_1 sage: G,M = DM_45_7_1() sage: is_difference_matrix(M,G,7,1) True
Can be obtained from the constructor:
sage: _ = designs.difference_matrix(45,7)
- sage.combinat.designs.database.DM_48_9_1()¶
Return a \((48,9,1)\)-difference matrix.
As explained in the Handbook III.3.67 [DesignHandbook].
EXAMPLES:
sage: from sage.combinat.designs.designs_pyx import is_difference_matrix sage: from sage.combinat.designs.database import DM_48_9_1 sage: G,M = DM_48_9_1() sage: is_difference_matrix(M,G,9,1) True
Can be obtained from the constructor:
sage: _ = designs.difference_matrix(48,9)
- sage.combinat.designs.database.DM_51_6_1()¶
Return a \((51,6,1)\)-difference matrix.
As explained in the Handbook III.3.69 [DesignHandbook].
EXAMPLES:
sage: from sage.combinat.designs.designs_pyx import is_difference_matrix sage: from sage.combinat.designs.database import DM_51_6_1 sage: G,M = DM_51_6_1() sage: is_difference_matrix(M,G,6,1) True
Can be obtained from the constructor:
sage: _ = designs.difference_matrix(51,6)
- sage.combinat.designs.database.DM_52_6_1()¶
Return a \((52,6,1)\)-difference matrix.
As explained in the Handbook III.3.70 [DesignHandbook].
EXAMPLES:
sage: from sage.combinat.designs.designs_pyx import is_difference_matrix sage: from sage.combinat.designs.database import DM_52_6_1 sage: G,M = DM_52_6_1() sage: is_difference_matrix(M,G,6,1) True
Can be obtained from the constructor:
sage: _ = designs.difference_matrix(52,6)
- sage.combinat.designs.database.DM_55_7_1()¶
Return a \((55,7,1)\)-difference matrix.
As explained in the Handbook III.3.72 [DesignHandbook].
EXAMPLES:
sage: from sage.combinat.designs.designs_pyx import is_difference_matrix sage: from sage.combinat.designs.database import DM_55_7_1 sage: G,M = DM_55_7_1() sage: is_difference_matrix(M,G,7,1) True
Can be obtained from the constructor:
sage: _ = designs.difference_matrix(55,7)
- sage.combinat.designs.database.DM_56_8_1()¶
Return a \((56,8,1)\)-difference matrix.
As explained in the Handbook III.3.73 [DesignHandbook].
EXAMPLES:
sage: from sage.combinat.designs.designs_pyx import is_difference_matrix sage: from sage.combinat.designs.database import DM_56_8_1 sage: G,M = DM_56_8_1() sage: is_difference_matrix(M,G,8,1) True
Can be obtained from the constructor:
sage: _ = designs.difference_matrix(56,8)
- sage.combinat.designs.database.DM_57_8_1()¶
Return a \((57,8,1)\)-difference matrix.
Given by Julian R. Abel.
EXAMPLES:
sage: from sage.combinat.designs.designs_pyx import is_difference_matrix sage: from sage.combinat.designs.database import DM_57_8_1 sage: G,M = DM_57_8_1() sage: is_difference_matrix(M,G,8,1) True
Can be obtained from the constructor:
sage: _ = designs.difference_matrix(57,8)
- sage.combinat.designs.database.DM_60_6_1()¶
Return a \((60,6,1)\)-difference matrix.
As explained in [JulianAbel13].
REFERENCES:
- JulianAbel13(1,2)
Existence of Five MOLS of Orders 18 and 60 R. Julian R. Abel Journal of Combinatorial Designs 2013
http://onlinelibrary.wiley.com/doi/10.1002/jcd.21384/abstract
EXAMPLES:
sage: from sage.combinat.designs.designs_pyx import is_difference_matrix sage: from sage.combinat.designs.database import DM_60_6_1 sage: G,M = DM_60_6_1() sage: is_difference_matrix(M,G,6,1) True
Can be obtained from the constructor:
sage: _ = designs.difference_matrix(60,6)
- sage.combinat.designs.database.DM_75_8_1()¶
Return a \((75,8,1)\)-difference matrix.
As explained in the Handbook III.3.75 [DesignHandbook].
EXAMPLES:
sage: from sage.combinat.designs.designs_pyx import is_difference_matrix sage: from sage.combinat.designs.database import DM_75_8_1 sage: G,M = DM_75_8_1() sage: is_difference_matrix(M,G,8,1) True
Can be obtained from the constructor:
sage: _ = designs.difference_matrix(75,8)
- sage.combinat.designs.database.DM_993_32_1()¶
Return a \((993,32,1)\)-difference matrix.
Given by Julian R. Abel.
EXAMPLES:
sage: from sage.combinat.designs.designs_pyx import is_difference_matrix sage: from sage.combinat.designs.database import DM_993_32_1 sage: G,M = DM_993_32_1() sage: is_difference_matrix(M,G,32,1) True
Can be obtained from the constructor:
sage: _ = designs.difference_matrix(993,32)
- sage.combinat.designs.database.HigmanSimsDesign()¶
Return the Higman-Sims designs, which is a \((176, 50, 14)\)-BIBD.
This design is built from a from the
WittDesign\(W\) on 24 points. We define two points \(a,b\), and consider:The collection \(W_a\) of all blocks of \(W\) containing \(a\) but not containing \(b\).
The collection \(W_b\) of all blocks of \(W\) containing \(b\) but not containing \(a\).
The design is then obtained from the incidence structure produced by the blocks \(A\in W_a\) and \(B\in W_b\) whose intersection has cardinality 2. This construction, due to M.Smith, can be found in [KY04] or in 10.A.(v) of [BL1984].
EXAMPLES:
sage: H = designs.HigmanSimsDesign(); H # optional - gap_packages Incidence structure with 176 points and 176 blocks sage: H.is_t_design(return_parameters=1) # optional - gap_packages (True, (2, 176, 50, 14))
Make sure that the automorphism group of this designs is isomorphic to the automorphism group of the
HigmanSimsGraph(). Note that the first of those permutation groups acts on 176 points, while the second acts on 100:sage: gH = H.automorphism_group() # optional - gap_packages sage: gG = graphs.HigmanSimsGraph().automorphism_group() # optional - gap_packages sage: gG.is_isomorphic(gG) # long time # optional - gap_packages True
REFERENCE:
- KY04
S. Klee and L. Yates, Tight Subdesigns of the Higman-Sims Design, Rose-Hulman Undergraduate Math. J 5.2 (2004). https://www.rose-hulman.edu/mathjournal/archives/2004/vol5-n2/paper9/v5n2-9pd.pdf
- sage.combinat.designs.database.MOLS_10_2()¶
Return a pair of MOLS of order 10
Data obtained from http://www.cecm.sfu.ca/organics/papers/lam/paper/html/POLS10/POLS10.html
EXAMPLES:
sage: from sage.combinat.designs.latin_squares import are_mutually_orthogonal_latin_squares sage: from sage.combinat.designs.database import MOLS_10_2 sage: MOLS = MOLS_10_2() sage: print(are_mutually_orthogonal_latin_squares(MOLS)) True
The design is available from the general constructor:
sage: designs.orthogonal_arrays.is_available(2,10) True
- sage.combinat.designs.database.MOLS_12_5()¶
Return 5 MOLS of order 12
These MOLS have been found by Brendan McKay.
EXAMPLES:
sage: from sage.combinat.designs.latin_squares import are_mutually_orthogonal_latin_squares sage: from sage.combinat.designs.database import MOLS_12_5 sage: MOLS = MOLS_12_5() sage: print(are_mutually_orthogonal_latin_squares(MOLS)) True
- sage.combinat.designs.database.MOLS_14_4()¶
Return four MOLS of order 14
These MOLS were shared by Ian Wanless. The first proof of existence was given in [Todorov12].
EXAMPLES:
sage: from sage.combinat.designs.latin_squares import are_mutually_orthogonal_latin_squares sage: from sage.combinat.designs.database import MOLS_14_4 sage: MOLS = MOLS_14_4() sage: print(are_mutually_orthogonal_latin_squares(MOLS)) True
The design is available from the general constructor:
sage: designs.orthogonal_arrays.is_available(4,14) True
REFERENCE:
- Todorov12
D.T. Todorov, Four mutually orthogonal Latin squares of order 14, Journal of Combinatorial Designs 2012, vol.20 n.8 pp.363-367
- sage.combinat.designs.database.MOLS_15_4()¶
Return 4 MOLS of order 15.
These MOLS were shared by Ian Wanless.
EXAMPLES:
sage: from sage.combinat.designs.latin_squares import are_mutually_orthogonal_latin_squares sage: from sage.combinat.designs.database import MOLS_15_4 sage: MOLS = MOLS_15_4() sage: print(are_mutually_orthogonal_latin_squares(MOLS)) True
The design is available from the general constructor:
sage: designs.orthogonal_arrays.is_available(4,15) True
- sage.combinat.designs.database.MOLS_18_3()¶
Return 3 MOLS of order 18.
These MOLS were shared by Ian Wanless.
EXAMPLES:
sage: from sage.combinat.designs.latin_squares import are_mutually_orthogonal_latin_squares sage: from sage.combinat.designs.database import MOLS_18_3 sage: MOLS = MOLS_18_3() sage: print(are_mutually_orthogonal_latin_squares(MOLS)) True
The design is available from the general constructor:
sage: designs.orthogonal_arrays.is_available(3,18) True
- sage.combinat.designs.database.OA_10_1620()¶
Returns an OA(10,1620)
This is obtained through the generalized Brouwer-van Rees construction. Indeed, \(1620 = 144.11+(36=4.9)\) and there exists an \(OA(10,153) - OA(10,9)\).
Note
This function should be removed once
find_brouwer_van_rees_with_one_truncated_column()can handle all incomplete orthogonal arrays obtained throughincomplete_orthogonal_array().EXAMPLES:
sage: from sage.combinat.designs.designs_pyx import is_orthogonal_array sage: from sage.combinat.designs.database import OA_10_1620 sage: OA = OA_10_1620() # not tested -- ~7s sage: is_orthogonal_array(OA,10,1620,2) # not tested -- ~7s True
The design is available from the general constructor:
sage: designs.orthogonal_arrays.is_available(10,1620) True
- sage.combinat.designs.database.OA_10_205()¶
Return an \(OA(10,205)\).
Julian R. Abel shared the following construction, which originally appeared in Theorem 8.7 of [Greig99], and can in Lemmas 5.14-5.16 of [ColDin01]:
Consider a \(PG(2,4^2)\) containing a Baer subplane (i.e. a \(PG(2,4)\)) \(B\) and a point \(p\in B\). Among the \(4^2+1=17\) lines of \(PG(2,4^2)\) containing \(p\):
\(4+1=5\) lines intersect \(B\) on \(5\) points
\(4^2-4=12\) lines intersect \(B\) on \(1\) point
As those lines are disjoint outside of \(B\) we can use them as groups to build a GDD on \(16^2+16+1-(4^4+4+1)=252\) points. By keeping only 9 lines of the second kind, however, we obtain a \((204,\{9,13,17\})\)-GDD of type 12^5.16^9.
We complete it into a PBD by adding a block \(g\cup \{204\}\) for each group \(g\). We then build an OA from this PBD using the fact that all blocks of size 9 are disjoint.
EXAMPLES:
sage: from sage.combinat.designs.designs_pyx import is_orthogonal_array sage: from sage.combinat.designs.database import OA_10_205 sage: OA = OA_10_205() sage: is_orthogonal_array(OA,10,205,2) True
The design is available from the general constructor:
sage: designs.orthogonal_arrays.is_available(10,205) True
- sage.combinat.designs.database.OA_10_469()¶
Return an OA(10,469)
This construction appears in [Brouwer80]. It is based on the same technique used in
brouwer_separable_design().Julian R. Abel’s instructions:
Brouwer notes that a cyclic \(PG(2,37)\) (or \((1407,38,1)\)-BIBD) can be obtained with a base block containing \(13,9,\) and \(16\) points in each residue class mod 3. Thus, by reducing the \(PG(2,37)\) to its points congruent to \(0 \pmod 3\) one obtains a \((469,\{9,13,16\})\)-PBD which consists in 3 symmetric designs, i.e. 469 blocks of size 9, 469 blocks of size 13, and 469 blocks of size 16.
For each block size \(s\), one can build a matrix with size \(s\times 469\) in which each block is a row, and such that each point of the PBD appears once per column. By multiplying a row of an \(OA(9,s)-s.OA(9,1)\) with the rows of the matrix one obtains a parallel class of a resolvable \(OA(9,469)\).
Add to this the parallel class of all blocks \((0,0,...),(1,1,...),...\) to obtain a resolvable \(OA(9,469)\) equivalent to an \(OA(10,469)\).
EXAMPLES:
sage: from sage.combinat.designs.designs_pyx import is_orthogonal_array sage: from sage.combinat.designs.database import OA_10_469 sage: OA = OA_10_469() sage: is_orthogonal_array(OA,10,469,2) True
The design is available from the general constructor:
sage: designs.orthogonal_arrays.is_available(10,469) True
- sage.combinat.designs.database.OA_10_520()¶
Return an OA(10,520).
This design is built by the slightly more general construction
OA_520_plus_x().EXAMPLES:
sage: from sage.combinat.designs.designs_pyx import is_orthogonal_array sage: from sage.combinat.designs.database import OA_10_520 sage: OA = OA_10_520() sage: is_orthogonal_array(OA,10,520,2) True
The design is available from the general constructor:
sage: designs.orthogonal_arrays.is_available(10,520) True
- sage.combinat.designs.database.OA_10_796()¶
Returns an OA(10,796)
Construction shared by Julian R. Abel, from [AC07]:
Truncate one block of a \(TD(17,47)\) to size \(13\), then add an extra point. Form a block on each group plus the extra point: we obtain a \((796, \{13,16,17,47,48\})\)-PBD in which only the extra point lies in more than one block of size \(48\) (and each other point lies in exactly 1 such block).
For each block \(B\) (of size \(k\) say) not containing the extra point, construct a \(TD(10, k) - k.TD(k,1)\) on \(I(10) X B\). For each block \(B\) (of size \(k=47\) or \(48\)) containing the extra point, construct a \(TD(10,k) - TD(k,1)\) on \(I(10) X B\), the size \(1\) hole being on \(I(10) X P\) where \(P\) is the extra point. Finally form \(1\) extra block of size \(10\) on \(I(10) X P\).
EXAMPLES:
sage: from sage.combinat.designs.designs_pyx import is_orthogonal_array sage: from sage.combinat.designs.database import OA_10_796 sage: OA = OA_10_796() sage: is_orthogonal_array(OA,10,796,2) True
The design is available from the general constructor:
sage: designs.orthogonal_arrays.is_available(10,796) True
- sage.combinat.designs.database.OA_11_160()¶
Returns an OA(11,160)
Published by Julian R. Abel in [Ab1995]. Uses the fact that \(160 = 2^5 \times 5\) is a product of a power of \(2\) and a prime number.
EXAMPLES:
sage: from sage.combinat.designs.designs_pyx import is_orthogonal_array sage: from sage.combinat.designs.database import OA_11_160 sage: OA = OA_11_160() sage: is_orthogonal_array(OA,11,160,2) True
The design is available from the general constructor:
sage: designs.orthogonal_arrays.is_available(11,160) True
- sage.combinat.designs.database.OA_11_185()¶
Returns an OA(11,185)
The construction is given in [Greig99]. In Julian R. Abel’s words:
Start with a \(PG(2,16)\) with a \(7\) points Fano subplane; outside this plane there are \(7(17-3) = 98\) points on a line of the subplane and \(273-98-7 = 168\) other points. Greig notes that the subdesign consisting of these \(168\) points is a \((168, \{10,12\})-PBD\). Now add the \(17\) points of a line disjoint from this subdesign (e.g. a line of the Fano subplane). This line will intersect every line of the \(168\) point subdesign in \(1\) point. Thus the new line sizes are \(11\) and \(13\), plus a unique line of size \(17\), giving a \((185,\{11,13,17\}\)-PBD and an \(OA(11,185)\).
EXAMPLES:
sage: from sage.combinat.designs.designs_pyx import is_orthogonal_array sage: from sage.combinat.designs.database import OA_11_185 sage: OA = OA_11_185() sage: is_orthogonal_array(OA,11,185,2) True
The design is available from the general constructor:
sage: designs.orthogonal_arrays.is_available(11,185) True
- sage.combinat.designs.database.OA_11_254()¶
Return an OA(11,254)
This constructions appears in [Greig99].
From a cyclic \(PG(2,19)\) whose base blocks contains 7,9, and 4 points in the congruence classes mod 3, build a \((254,{11,13,16})-PBD\) by ignoring the points of a congruence class. There exist \(OA(12,11),OA(12,13),OA(12,16)\), which gives the \(OA(11,254)\).
EXAMPLES:
sage: from sage.combinat.designs.designs_pyx import is_orthogonal_array sage: from sage.combinat.designs.database import OA_11_254 sage: OA = OA_11_254() sage: is_orthogonal_array(OA,11,254,2) True
The design is available from the general constructor:
sage: designs.orthogonal_arrays.is_available(11,254) True
- sage.combinat.designs.database.OA_11_640()¶
Returns an OA(11,640)
Published by Julian R. Abel in [Ab1995] (uses the fact that \(640=2^7 \times 5\) is the product of a power of \(2\) and a prime number).
EXAMPLES:
sage: from sage.combinat.designs.designs_pyx import is_orthogonal_array sage: from sage.combinat.designs.database import OA_11_640 sage: OA = OA_11_640() # not tested (too long) sage: is_orthogonal_array(OA,11,640,2) # not tested (too long) True
The design is available from the general constructor:
sage: designs.orthogonal_arrays.is_available(11,640) True
- sage.combinat.designs.database.OA_11_80()¶
Return an OA(11,80)
As explained in the Handbook III.3.76 [DesignHandbook]. Uses the fact that \(80 = 2^4 \times 5\) and that \(5\) is prime.
EXAMPLES:
sage: from sage.combinat.designs.designs_pyx import is_orthogonal_array sage: from sage.combinat.designs.database import OA_11_80 sage: OA = OA_11_80() sage: is_orthogonal_array(OA,11,80,2) True
The design is available from the general constructor:
sage: designs.orthogonal_arrays.is_available(11,80) True
- sage.combinat.designs.database.OA_12_522()¶
Return an OA(12,522)
This design is built by the slightly more general construction
OA_520_plus_x().EXAMPLES:
sage: from sage.combinat.designs.designs_pyx import is_orthogonal_array sage: from sage.combinat.designs.database import OA_12_522 sage: OA = OA_12_522() sage: is_orthogonal_array(OA,12,522,2) True
The design is available from the general constructor:
sage: designs.orthogonal_arrays.is_available(12,522) True
- sage.combinat.designs.database.OA_14_524()¶
Return an OA(14,524)
This design is built by the slightly more general construction
OA_520_plus_x().EXAMPLES:
sage: from sage.combinat.designs.designs_pyx import is_orthogonal_array sage: from sage.combinat.designs.database import OA_14_524 sage: OA = OA_14_524() sage: is_orthogonal_array(OA,14,524,2) True
The design is available from the general constructor:
sage: designs.orthogonal_arrays.is_available(14,524) True
- sage.combinat.designs.database.OA_15_112()¶
Returns an OA(15,112)
Published by Julian R. Abel in [Ab1995]. Uses the fact that 112 = \(2^4 \times 7\) and that \(7\) is prime.
EXAMPLES:
sage: from sage.combinat.designs.designs_pyx import is_orthogonal_array sage: from sage.combinat.designs.database import OA_15_112 sage: OA = OA_15_112() sage: is_orthogonal_array(OA,15,112,2) True
The design is available from the general constructor:
sage: designs.orthogonal_arrays.is_available(15,112) True
- sage.combinat.designs.database.OA_15_224()¶
Returns an OA(15,224)
Published by Julian R. Abel in [Ab1995] (uses the fact that \(224=2^5 \times 7\) is a product of a power of \(2\) and a prime number).
EXAMPLES:
sage: from sage.combinat.designs.designs_pyx import is_orthogonal_array sage: from sage.combinat.designs.database import OA_15_224 sage: OA = OA_15_224() # not tested -- too long sage: is_orthogonal_array(OA,15,224,2) # not tested -- too long True
The design is available from the general constructor:
sage: designs.orthogonal_arrays.is_available(15,224) True
- sage.combinat.designs.database.OA_15_896()¶
Returns an OA(15,896)
Uses the fact that \(896 = 2^7 \times 7\) is the product of a power of \(2\) and a prime number.
EXAMPLES:
sage: from sage.combinat.designs.designs_pyx import is_orthogonal_array sage: from sage.combinat.designs.database import OA_15_896 sage: OA = OA_15_896() # not tested -- too long (~2min) sage: is_orthogonal_array(OA,15,896,2) # not tested -- too long True
The design is available from the general constructor:
sage: designs.orthogonal_arrays.is_available(15,896) True
- sage.combinat.designs.database.OA_16_176()¶
Returns an OA(16,176)
Published by Julian R. Abel in [Ab1995]. Uses the fact that \(176 = 2^4 \times 11\) is a product of a power of \(2\) and a prime number.
EXAMPLES:
sage: from sage.combinat.designs.designs_pyx import is_orthogonal_array sage: from sage.combinat.designs.database import OA_16_176 sage: OA = OA_16_176() sage: is_orthogonal_array(OA,16,176,2) True
The design is available from the general constructor:
sage: designs.orthogonal_arrays.is_available(16,176) True
- sage.combinat.designs.database.OA_16_208()¶
Returns an OA(16,208)
Published by Julian R. Abel in [Ab1995]. Uses the fact that \(208 = 2^4 \times 13\) is a product of \(2\) and a prime number.
EXAMPLES:
sage: from sage.combinat.designs.designs_pyx import is_orthogonal_array sage: from sage.combinat.designs.database import OA_16_208 sage: OA = OA_16_208() # not tested -- too long sage: is_orthogonal_array(OA,16,208,2) # not tested -- too long True
The design is available from the general constructor:
sage: designs.orthogonal_arrays.is_available(16,208) True
- sage.combinat.designs.database.OA_17_560()¶
Returns an OA(17,560)
This OA is built in Corollary 2.2 of [Thwarts].
EXAMPLES:
sage: from sage.combinat.designs.designs_pyx import is_orthogonal_array sage: from sage.combinat.designs.database import OA_17_560 sage: OA = OA_17_560() sage: is_orthogonal_array(OA,17,560,2) True
The design is available from the general constructor:
sage: designs.orthogonal_arrays.is_available(17,560) True
- sage.combinat.designs.database.OA_20_352()¶
Returns an OA(20,352)
Published by Julian R. Abel in [Ab1995] (uses the fact that \(352=2^5 \times 11\) is the product of a power of \(2\) and a prime number).
EXAMPLES:
sage: from sage.combinat.designs.designs_pyx import is_orthogonal_array sage: from sage.combinat.designs.database import OA_20_352 sage: OA = OA_20_352() # not tested (~25s) sage: is_orthogonal_array(OA,20,352,2) # not tested (~25s) True
The design is available from the general constructor:
sage: designs.orthogonal_arrays.is_available(20,352) True
- sage.combinat.designs.database.OA_20_416()¶
Returns an OA(20,416)
Published by Julian R. Abel in [Ab1995] (uses the fact that \(416=2^5 \times 13\) is the product of a power of \(2\) and a prime number).
EXAMPLES:
sage: from sage.combinat.designs.designs_pyx import is_orthogonal_array sage: from sage.combinat.designs.database import OA_20_416 sage: OA = OA_20_416() # not tested (~35s) sage: is_orthogonal_array(OA,20,416,2) # not tested True
The design is available from the general constructor:
sage: designs.orthogonal_arrays.is_available(20,416) True
- sage.combinat.designs.database.OA_20_544()¶
Returns an OA(20,544)
Published by Julian R. Abel in [Ab1995] (uses the fact that \(544=2^5 \times 17\) is the product of a power of \(2\) and a prime number).
EXAMPLES:
sage: from sage.combinat.designs.designs_pyx import is_orthogonal_array sage: from sage.combinat.designs.database import OA_20_544 sage: OA = OA_20_544() # not tested (too long ~1mn) sage: is_orthogonal_array(OA,20,544,2) # not tested True
The design is available from the general constructor:
sage: designs.orthogonal_arrays.is_available(20,544) True
- sage.combinat.designs.database.OA_25_1262()¶
Returns an OA(25,1262)
The construction is given in [Greig99]. In Julian R. Abel’s words:
Start with a cyclic \(PG(2,43)\) or \((1893,44,1)\)-BIBD whose base block contains respectively \(12,13\) and \(19\) point in the residue classes mod 3. In the resulting BIBD, remove one of the three classes: the result is a \((1262, \{25, 31,32\})\)-PBD, from which the \(OA(25,1262)\) is obtained.
EXAMPLES:
sage: from sage.combinat.designs.designs_pyx import is_orthogonal_array sage: from sage.combinat.designs.database import OA_25_1262 sage: OA = OA_25_1262() # not tested -- too long sage: is_orthogonal_array(OA,25,1262,2) # not tested -- too long True
The design is available from the general constructor:
sage: designs.orthogonal_arrays.is_available(25,1262) True
- sage.combinat.designs.database.OA_520_plus_x(x)¶
Return an \(OA(10+x,520+x)\).
The construction shared by Julian R. Abel works for
OA(10,520),OA(12,522), andOA(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), andOA(14,524).EXAMPLES:
sage: from sage.combinat.designs.designs_pyx import is_orthogonal_array sage: from sage.combinat.designs.database import OA_520_plus_x sage: OA = OA_520_plus_x(0) # not tested (already tested in OA_10_520) sage: is_orthogonal_array(OA,10,520,2) # not tested (already tested in OA_10_520) True
- sage.combinat.designs.database.OA_7_18()¶
Return an OA(7,18)
Proved in [JulianAbel13].
EXAMPLES:
sage: from sage.combinat.designs.designs_pyx import is_orthogonal_array sage: from sage.combinat.designs.database import OA_7_18 sage: OA = OA_7_18() sage: is_orthogonal_array(OA,7,18,2) True
The design is available from the general constructor:
sage: designs.orthogonal_arrays.is_available(7,18) True
- sage.combinat.designs.database.OA_7_66()¶
Return an OA(7,66)
Construction shared by Julian R. Abel.
EXAMPLES:
sage: from sage.combinat.designs.orthogonal_arrays import is_orthogonal_array sage: from sage.combinat.designs.database import OA_7_66 sage: OA = OA_7_66() sage: is_orthogonal_array(OA,7,66,2) True
The design is available from the general constructor:
sage: designs.orthogonal_arrays.is_available(7,66) True
- sage.combinat.designs.database.OA_7_68()¶
Return an OA(7,68)
Construction shared by Julian R. Abel.
EXAMPLES:
sage: from sage.combinat.designs.orthogonal_arrays import is_orthogonal_array sage: from sage.combinat.designs.database import OA_7_68 sage: OA = OA_7_68() sage: is_orthogonal_array(OA,7,68,2) True
The design is available from the general constructor:
sage: designs.orthogonal_arrays.is_available(7,68) True
- sage.combinat.designs.database.OA_7_74()¶
Return an OA(7,74)
Construction shared by Julian R. Abel.
EXAMPLES:
sage: from sage.combinat.designs.orthogonal_arrays import is_orthogonal_array sage: from sage.combinat.designs.database import OA_7_74 sage: OA = OA_7_74() sage: is_orthogonal_array(OA,7,74,2) True
The design is available from the general constructor:
sage: designs.orthogonal_arrays.is_available(7,74) True
- sage.combinat.designs.database.OA_8_69()¶
Return an OA(8,69)
Construction shared by Julian R. Abel.
EXAMPLES:
sage: from sage.combinat.designs.orthogonal_arrays import is_orthogonal_array sage: from sage.combinat.designs.database import OA_8_69 sage: OA = OA_8_69() sage: is_orthogonal_array(OA,8,69,2) True
The design is available from the general constructor:
sage: designs.orthogonal_arrays.is_available(8,69) True
- sage.combinat.designs.database.OA_8_76()¶
Return an OA(8,76)
Construction shared by Julian R. Abel.
EXAMPLES:
sage: from sage.combinat.designs.orthogonal_arrays import is_orthogonal_array sage: from sage.combinat.designs.database import OA_8_76 sage: OA = OA_8_76() sage: is_orthogonal_array(OA,8,76,2) True
The design is available from the general constructor:
sage: designs.orthogonal_arrays.is_available(8,76) True
- sage.combinat.designs.database.OA_9_1078()¶
Returns an OA(9,1078)
This is obtained through the generalized Brouwer-van Rees construction. Indeed, \(1078 = 89.11 + (99=9.11)\) and there exists an \(OA(9,100) - OA(9,11)\).
Note
This function should be removed once
find_brouwer_van_rees_with_one_truncated_column()can handle all incomplete orthogonal arrays obtained throughincomplete_orthogonal_array().EXAMPLES:
sage: from sage.combinat.designs.designs_pyx import is_orthogonal_array sage: from sage.combinat.designs.database import OA_9_1078 sage: OA = OA_9_1078() # not tested -- ~3s sage: is_orthogonal_array(OA,9,1078,2) # not tested -- ~3s True
The design is available from the general constructor:
sage: designs.orthogonal_arrays.is_available(9,1078) True
- sage.combinat.designs.database.OA_9_120()¶
Return an OA(9,120)
Construction shared by Julian R. Abel:
From a resolvable \((120,8,1)-BIBD\), one can obtain 7 \(MOLS(120)\) or a resolvable \(TD(8,120)\) by forming a resolvable \(TD(8,8) - 8.TD(8,1)\) on \(I_8 \times B\) for each block \(B\) in the BIBD. This gives a \(TD(8,120) - 120 TD(8,1)\) (which is resolvable as the BIBD is resolvable).
See also
EXAMPLES:
sage: from sage.combinat.designs.designs_pyx import is_orthogonal_array sage: from sage.combinat.designs.database import OA_9_120 sage: OA = OA_9_120() sage: is_orthogonal_array(OA,9,120,2) True
The design is available from the general constructor:
sage: designs.orthogonal_arrays.is_available(9,120) True
- sage.combinat.designs.database.OA_9_135()¶
Return an OA(9,135)
Construction shared by Julian R. Abel:
This design can be built by Wilson’s method (\(135 = 8.16 + 7\)) applied to an Orthogonal Array \(OA(9+7,16)\) with 7 groups truncated to size 1 in such a way that a block contain 0, 1 or 3 points of the truncated groups.
This is possible, because \(PG(2,2)\) (the projective plane over \(GF(2)\)) is a subdesign in \(PG(2,16)\) (the projective plane over \(GF(16)\)); in a cyclic \(PG(2,16)\) or \(BIBD(273,17,1)\) the points \(\equiv 0 \pmod{39}\) form such a subdesign (note that \(273=16^2 + 16 +1\) and \(273 = 39 \times 7\) and \(7 = 2^2 + 2 + 1\)).
EXAMPLES:
sage: from sage.combinat.designs.designs_pyx import is_orthogonal_array sage: from sage.combinat.designs.database import OA_9_135 sage: OA = OA_9_135() sage: is_orthogonal_array(OA,9,135,2) True
The design is available from the general constructor:
sage: designs.orthogonal_arrays.is_available(9,135) True
As this orthogonal array requires a \((273,17,1)\) cyclic difference set, we check that it is available:
sage: G,D = designs.difference_family(273,17,1) sage: G Ring of integers modulo 273
- sage.combinat.designs.database.OA_9_1612()¶
Returns an OA(9,1612)
This is obtained through the generalized Brouwer-van Rees construction. Indeed, \(1612 = 89.17 + (99=9.11)\) and there exists an \(OA(9,100) - OA(9,11)\).
Note
This function should be removed once
find_brouwer_van_rees_with_one_truncated_column()can handle all incomplete orthogonal arrays obtained throughincomplete_orthogonal_array().EXAMPLES:
sage: from sage.combinat.designs.designs_pyx import is_orthogonal_array sage: from sage.combinat.designs.database import OA_9_1612 sage: OA = OA_9_1612() # not tested -- ~6s sage: is_orthogonal_array(OA,9,1612,2) # not tested -- ~6s True
The design is available from the general constructor:
sage: designs.orthogonal_arrays.is_available(9,1612) True
- sage.combinat.designs.database.OA_9_40()¶
Return an OA(9,40)
As explained in the Handbook III.3.62 [DesignHandbook]. Uses the fact that \(40 = 2^3 \times 5\) and that \(5\) is prime.
EXAMPLES:
sage: from sage.combinat.designs.designs_pyx import is_orthogonal_array sage: from sage.combinat.designs.database import OA_9_40 sage: OA = OA_9_40() sage: is_orthogonal_array(OA,9,40,2) True
The design is available from the general constructor:
sage: designs.orthogonal_arrays.is_available(9,40) True
- sage.combinat.designs.database.QDM_19_6_1_1_1()¶
Return a \((19,6;1,1;1)\)-quasi-difference matrix.
Used to build an \(OA(6,20)\)
Given in the Handbook III.3.49 [DesignHandbook].
EXAMPLES:
sage: from sage.combinat.designs.database import QDM_19_6_1_1_1 sage: from sage.combinat.designs.designs_pyx import is_quasi_difference_matrix sage: G,M = QDM_19_6_1_1_1() sage: is_quasi_difference_matrix(M,G,6,1,1,1) True
- sage.combinat.designs.database.QDM_21_5_1_1_1()¶
Return a \((21,5;1,1;1)\)-quasi-difference matrix.
Used to build an \(OA(5,22)\)
Given in the Handbook III.3.51 [DesignHandbook].
EXAMPLES:
sage: from sage.combinat.designs.database import QDM_21_5_1_1_1 sage: from sage.combinat.designs.designs_pyx import is_quasi_difference_matrix sage: G,M = QDM_21_5_1_1_1() sage: is_quasi_difference_matrix(M,G,5,1,1,1) True
- sage.combinat.designs.database.QDM_21_6_1_1_5()¶
Return a \((21,6;1,1;5)\)-quasi-difference matrix.
Used to build an \(OA(6,26)\)
Given in the Handbook III.3.53 [DesignHandbook].
EXAMPLES:
sage: from sage.combinat.designs.database import QDM_21_6_1_1_5 sage: from sage.combinat.designs.designs_pyx import is_quasi_difference_matrix sage: G,M = QDM_21_6_1_1_5() sage: is_quasi_difference_matrix(M,G,6,1,1,5) True
- sage.combinat.designs.database.QDM_25_6_1_1_5()¶
Return a \((25,6;1,1;5)\)-quasi-difference matrix.
Used to build an \(OA(6,30)\)
Given in the Handbook III.3.55 [DesignHandbook].
EXAMPLES:
sage: from sage.combinat.designs.database import QDM_25_6_1_1_5 sage: from sage.combinat.designs.designs_pyx import is_quasi_difference_matrix sage: G,M = QDM_25_6_1_1_5() sage: is_quasi_difference_matrix(M,G,6,1,1,5) True
- sage.combinat.designs.database.QDM_33_6_1_1_1()¶
Return a \((33,6;1,1;1)\)-quasi-difference matrix.
Used to build an \(OA(6,34)\)
Given in the Handbook III.3.57 [DesignHandbook].
EXAMPLES:
sage: from sage.combinat.designs.database import QDM_33_6_1_1_1 sage: from sage.combinat.designs.designs_pyx import is_quasi_difference_matrix sage: G,M = QDM_33_6_1_1_1() sage: is_quasi_difference_matrix(M,G,6,1,1,1) True
- sage.combinat.designs.database.QDM_35_7_1_1_7()¶
Return a \((35,7;1,1;7)\)-quasi-difference matrix.
Used to build an \(OA(7,42)\)
As explained in the Handbook III.3.63 [DesignHandbook].
EXAMPLES:
sage: from sage.combinat.designs.database import QDM_35_7_1_1_7 sage: from sage.combinat.designs.designs_pyx import is_quasi_difference_matrix sage: G,M = QDM_35_7_1_1_7() sage: is_quasi_difference_matrix(M,G,7,1,1,7) True
- sage.combinat.designs.database.QDM_37_6_1_1_1()¶
Return a \((37,6;1,1;1)\)-quasi-difference matrix.
Used to build an \(OA(6,38)\)
Given in the Handbook III.3.60 [DesignHandbook].
EXAMPLES:
sage: from sage.combinat.designs.database import QDM_37_6_1_1_1 sage: from sage.combinat.designs.designs_pyx import is_quasi_difference_matrix sage: G,M = QDM_37_6_1_1_1() sage: is_quasi_difference_matrix(M,G,6,1,1,1) True
- sage.combinat.designs.database.QDM_45_7_1_1_9()¶
Return a \((45,7;1,1;9)\)-quasi-difference matrix.
Used to build an \(OA(7,54)\)
As explained in the Handbook III.3.71 [DesignHandbook].
EXAMPLES:
sage: from sage.combinat.designs.database import QDM_45_7_1_1_9 sage: from sage.combinat.designs.designs_pyx import is_quasi_difference_matrix sage: G,M = QDM_45_7_1_1_9() sage: is_quasi_difference_matrix(M,G,7,1,1,9) True
- sage.combinat.designs.database.QDM_54_7_1_1_8()¶
Return a \((54,7;1,1;8)\)-quasi-difference matrix.
Used to build an \(OA(7,62)\)
As explained in the Handbook III.3.74 [DesignHandbook].
EXAMPLES:
sage: from sage.combinat.designs.database import QDM_54_7_1_1_8 sage: from sage.combinat.designs.designs_pyx import is_quasi_difference_matrix sage: G,M = QDM_54_7_1_1_8() sage: is_quasi_difference_matrix(M,G,7,1,1,8) True
- sage.combinat.designs.database.QDM_57_9_1_1_8()¶
Return a \((57,9;1,1;8)\)-quasi-difference matrix.
Used to build an \(OA(9,65)\)
Construction shared by Julian R. Abel
EXAMPLES:
sage: from sage.combinat.designs.database import QDM_57_9_1_1_8 sage: from sage.combinat.designs.designs_pyx import is_quasi_difference_matrix sage: G,M = QDM_57_9_1_1_8() sage: is_quasi_difference_matrix(M,G,9,1,1,8) True
- sage.combinat.designs.database.RBIBD_120_8_1()¶
Return a resolvable \(BIBD(120,8,1)\)
This function output a list
Lof \(17\times 15\) blocks such thatL[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
EXAMPLES:
sage: from sage.combinat.designs.database import RBIBD_120_8_1 sage: from sage.combinat.designs.bibd import is_pairwise_balanced_design sage: RBIBD = RBIBD_120_8_1() sage: is_pairwise_balanced_design(RBIBD,120,[8]) True
It is indeed resolvable, and the parallel classes are given by 17 slices of consecutive 15 blocks:
sage: for i in range(17): ....: assert len(set(sum(RBIBD[i*15:(i+1)*15],[]))) == 120
The BIBD is available from the constructor:
sage: _ = designs.balanced_incomplete_block_design(120,8)
- sage.combinat.designs.database.cyclic_shift(l, i)¶
- sage.combinat.designs.database.f()¶
Return a \((57,9;1,1;8)\)-quasi-difference matrix.
Used to build an \(OA(9,65)\)
Construction shared by Julian R. Abel
EXAMPLES:
sage: from sage.combinat.designs.database import QDM_57_9_1_1_8 sage: from sage.combinat.designs.designs_pyx import is_quasi_difference_matrix sage: G,M = QDM_57_9_1_1_8() sage: is_quasi_difference_matrix(M,G,9,1,1,8) True