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\)
- \((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:
Handbook of Combinatorial Designs (2ed) Charles Colbourn, Jeffrey Dinitz Chapman & Hall/CRC 2012
M. Aschbacher, On collineation groups of symmetric block designs. J. Combinatorial Theory Ser. A 11 (1971), pp. 272–281.
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:
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 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
>>> 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), 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
>>> 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 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
>>> 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
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 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
>>> 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
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() # 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.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