Database of small combinatorial designs

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

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

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

This module implements:

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

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

  • \(V(m,t)\) vectors:
    • \(m=3\) and \(t=\) \(2\), \(4\), \(6\), \(10\), \(12\), \(14\), \(20\), \(24\), \(26\), \(32\), \(34\)
    • \(m=4\) and \(t=\) \(3\), \(7\), \(9\), \(13\), \(15\), \(25\)
    • \(m=5\) and \(t=\) \(6\), \(8\), \(12\), \(14\), \(20\), \(26\)
    • \(m=6\) and \(t=\) \(5\), \(7\), \(11\), \(13\), \(17\), \(21\)
    • \(m=7\) and \(t=\) \(6\), \(10\), \(16\), \(18\)
    • \(m=8\) and \(t=\) \(9\), \(11\), \(17\), \(29\), \(57\)
    • \(m=9\) and \(t=\) \(12\), \(14\), \(18\), \(20\), \(22\), \(30\), \(34\), \(42\), \(44\)
    • \(m=10\) and \(t=\) \(13\), \(15\), \(19\), \(21\), \(25\), \(27\), \(31\), \(33\), \(43\), \(49\), \(81\), \(97\), \(103\), \(181\), \(187\), \(259\), \(273\), \(319\), \(391\), \(409\)
    • \(m=11\) and \(t=\) \(30\), \(32\), \(36\), \(38\), \(42\), \(56\), \(60\), \(62\), \(66\), \(78\), \(80\), \(86\), \(90\), \(92\), \(102\), \(116\), \(120\), \(128\), \(132\), \(146\), \(162\), \(170\), \(182\), \(188\), \(192\), \(198\), \(206\), \(210\), \(212\), \(216\), \(218\), \(230\), \(242\), \(246\), \(248\), \(260\), \(266\), \(270\), \(276\), \(288\), \(290\), \(296\), \(300\), \(302\), \(308\), \(312\), \(318\), \(330\), \(336\), \(338\), \(350\), \(356\), \(366\), \(368\), \(372\), \(378\), \(396\), \(402\), \(420\), \(422\), \(450\), \(452\)
    • \(m=12\) and \(t=\) \(33\), \(35\), \(45\), \(51\), \(55\), \(59\), \(61\), \(63\), \(69\), \(71\), \(73\), \(83\), \(85\), \(89\), \(91\), \(93\), \(101\), \(103\), \(115\), \(119\), \(121\), \(129\), \(133\), \(135\), \(139\), \(141\), \(145\), \(149\), \(155\), \(161\), \(169\), \(171\), \(185\), \(189\), \(191\), \(195\), \(199\), \(203\), \(213\), \(223\), \(229\), \(233\), \(243\), \(253\), \(255\), \(259\), \(265\), \(269\), \(271\), \(275\), \(281\), \(289\), \(293\), \(295\), \(301\), \(303\), \(309\), \(311\), \(321\), \(323\), \(335\), \(341\), \(355\), \(363\), \(379\), \(383\), \(385\), \(399\), \(401\), \(405\), \(409\), \(411\), \(413\)
  • RBIBD(120,8,1)

  • \((v,k,\lambda)\)-difference families:
    • \(\lambda=1\):

      \((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)\), \((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\):

      \((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\):

      \((21,4,3)\), \((21,6,3)\), \((29,7,3)\), \((41,6,3)\), \((43,7,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\):

      \((22,7,4)\), \((29,8,4)\), \((43,8,4)\), \((46,10,4)\), \((55,9,4)\), \((67,12,4)\), \((71,8,4)\)

    • \(\lambda=5\):

      \((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\):

      \((11,4,6)\), \((15,4,6)\), \((15,5,6)\), \((29,8,6)\), \((46,10,6)\), \((53,13,6)\), \((67,12,6)\)

    • \(\lambda=7\):

      \((25,7,7)\), \((53,14,7)\), \((61,15,7)\)

    • \(\lambda=8\):

      \((22,8,8)\), \((34,12,8)\), \((133,33,8)\)

    • \(\lambda=9\):

      \((21,10,9)\)

    • \(\lambda=10\):

      \((34,12,10)\), \((43,15,10)\), \((49,21,10)\)

    • \(\lambda=12\):

      \((22,8,12)\)

    • \(\lambda=14\):

      \((21,8,14)\)

    • \(\lambda=56\):

      \((901,225,56)\)

  • \((v,k,\lambda)\)-difference matrices:
    • \(\lambda=1\):

      \((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)\)

REFERENCES:

[DesignHandbook](1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27) Handbook of Combinatorial Designs (2ed) Charles Colbourn, Jeffrey Dinitz Chapman & Hall/CRC 2012

Functions

sage.combinat.designs.database.DM_12_6_1()

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

This design is Lemma 3.21 from [Hanani75].

EXAMPLES:

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

Can be obtained from the constructor:

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

REFERENCES:

[Hanani75](1, 2) Haim Hanani, Balanced incomplete block designs and related designs, http://dx.doi.org/10.1016/0012-365X(75)90040-0, Discrete Mathematics, Volume 11, Issue 3, 1975, Pages 255-369.
sage.combinat.designs.database.DM_21_6_1()

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

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

EXAMPLES:

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

Can be obtained from the constructor:

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

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

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

EXAMPLES:

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

Can be obtained from the constructor:

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

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

Given by Julian R. Abel.

EXAMPLES:

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

Can be obtained from the constructor:

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

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

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

EXAMPLES:

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

Can be obtained from the constructor:

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

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

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

EXAMPLES:

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

Can be obtained from the constructor:

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

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

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

EXAMPLES:

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

Can be obtained from the constructor:

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

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

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

EXAMPLES:

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

Can be obtained from the constructor:

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

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

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

EXAMPLES:

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

The design is available from the general constructor:

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

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

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

EXAMPLES:

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

Can be obtained from the constructor:

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

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

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

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

EXAMPLES:

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

Can be obtained from the constructor:

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

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

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

EXAMPLES:

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

Can be obtained from the constructor:

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

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

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

EXAMPLES:

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

Can be obtained from the constructor:

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

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

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

EXAMPLES:

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

Can be obtained from the constructor:

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

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

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

EXAMPLES:

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

Can be obtained from the constructor:

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

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

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

EXAMPLES:

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

Can be obtained from the constructor:

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

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

Given by Julian R. Abel.

EXAMPLES:

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

Can be obtained from the constructor:

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

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

As explained in [JulianAbel13].

REFERENCES:

[JulianAbel13](1, 2) Existence of Five MOLS of Orders 18 and 60 R. Julian R. Abel Journal of Combinatorial Designs 2013

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

EXAMPLES:

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

Can be obtained from the constructor:

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

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

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

EXAMPLES:

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

Can be obtained from the constructor:

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

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

Given by Julian R. Abel.

EXAMPLES:

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

Can be obtained from the constructor:

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

Return a pair of MOLS of order 10

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

EXAMPLES:

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

The design is available from the general constructor:

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

Return 5 MOLS of order 12

These MOLS have been found by Brendan McKay.

EXAMPLES:

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

Return four MOLS of order 14

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

EXAMPLES:

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

The design is available from the general constructor:

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

REFERENCE:

[Todorov12]D.T. Todorov, Four mutually orthogonal Latin squares of order 14, Journal of Combinatorial Designs 2012, vol.20 n.8 pp.363-367
sage.combinat.designs.database.MOLS_15_4()

Return 4 MOLS of order 15.

These MOLS were shared by Ian Wanless.

EXAMPLES:

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

The design is available from the general constructor:

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

Return 3 MOLS of order 18.

These MOLS were shared by Ian Wanless.

EXAMPLES:

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

The design is available from the general constructor:

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

Returns an OA(10,1620)

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

Note

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

EXAMPLES:

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

The design is available from the general constructor:

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

Return an OA(10,205)

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

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

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

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

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

EXAMPLES:

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

The design is available from the general constructor:

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

Return an OA(10,469)

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

Julian R. Abel’s instructions:

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

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

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

EXAMPLES:

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

The design is available from the general constructor:

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

Return an OA(10,520).

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

EXAMPLES:

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

The design is available from the general constructor:

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

Returns an OA(10,796)

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

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

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

EXAMPLES:

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

The design is available from the general constructor:

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

Returns an OA(11,160)

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

EXAMPLES:

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

The design is available from the general constructor:

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

Returns an OA(11,185)

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

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

EXAMPLES:

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

The design is available from the general constructor:

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

Return an OA(11,254)

This constructions appears in [Greig99].

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

EXAMPLES:

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

The design is available from the general constructor:

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

Returns an OA(11,640)

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

EXAMPLES:

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

The design is available from the general constructor:

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

Return an OA(11,80)

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

EXAMPLES:

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

The design is available from the general constructor:

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

Return an OA(12,522)

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

EXAMPLES:

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

The design is available from the general constructor:

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

Return an OA(14,524)

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

EXAMPLES:

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

The design is available from the general constructor:

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

Returns an OA(15,112)

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

EXAMPLES:

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

The design is available from the general constructor:

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

Returns an OA(15,224)

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

EXAMPLES:

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

The design is available from the general constructor:

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

Returns an OA(15,896)

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

EXAMPLES:

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

The design is available from the general constructor:

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

Returns an OA(16,176)

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

EXAMPLES:

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

The design is available from the general constructor:

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

Returns an OA(16,208)

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

EXAMPLES:

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

The design is available from the general constructor:

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

Returns an OA(17,560)

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

EXAMPLES:

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

The design is available from the general constructor:

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

Returns an OA(20,352)

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

EXAMPLES:

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

The design is available from the general constructor:

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

Returns an OA(20,416)

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

EXAMPLES:

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

The design is available from the general constructor:

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

Returns an OA(20,544)

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

EXAMPLES:

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

The design is available from the general constructor:

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

Returns an OA(25,1262)

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

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

EXAMPLES:

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

The design is available from the general constructor:

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

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

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

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

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

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

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

EXAMPLE:

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: print is_orthogonal_array(OA,10,520,2)  # not tested (already tested in OA_10_520)
True
sage.combinat.designs.database.OA_7_18()

Return an OA(7,18)

Proved in [JulianAbel13].

EXAMPLES:

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

The design is available from the general constructor:

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

Return an OA(7,66)

Construction shared by Julian R. Abel.

EXAMPLES:

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

The design is available from the general constructor:

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

Return an OA(7,68)

Construction shared by Julian R. Abel.

EXAMPLES:

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

The design is available from the general constructor:

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

Return an OA(7,74)

Construction shared by Julian R. Abel.

EXAMPLES:

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

The design is available from the general constructor:

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

Return an OA(8,69)

Construction shared by Julian R. Abel.

EXAMPLES:

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

The design is available from the general constructor:

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

Return an OA(8,76)

Construction shared by Julian R. Abel.

EXAMPLES:

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

The design is available from the general constructor:

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

Returns an OA(9,1078)

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

Note

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

EXAMPLES:

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

The design is available from the general constructor:

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

Return an OA(9,120)

Construction shared by Julian R. Abel:

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

See also

RBIBD_120_8_1()

EXAMPLES:

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

The design is available from the general constructor:

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

Return an OA(9,135)

Construction shared by Julian R. Abel:

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

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

EXAMPLES:

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

The design is available from the general constructor:

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

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

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

Returns an OA(9,1612)

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

Note

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

EXAMPLES:

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

The design is available from the general constructor:

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

Return an OA(9,40)

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

EXAMPLES:

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

The design is available from the general constructor:

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

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

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

Given in the Handbook III.3.49 [DesignHandbook].

EXAMPLE:

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

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

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

Given in the Handbook III.3.51 [DesignHandbook].

EXAMPLE:

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

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

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

Given in the Handbook III.3.53 [DesignHandbook].

EXAMPLE:

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

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

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

Given in the Handbook III.3.55 [DesignHandbook].

EXAMPLE:

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

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

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

Given in the Handbook III.3.57 [DesignHandbook].

EXAMPLE:

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

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

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

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

EXAMPLE:

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

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

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

Given in the Handbook III.3.60 [DesignHandbook].

EXAMPLE:

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

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

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

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

EXAMPLE:

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

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

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

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

EXAMPLE:

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

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

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

Construction shared by Julian R. Abel

EXAMPLE:

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

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

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

Construction shared by Julian R. Abel:

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

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

See also

OA_9_120()

EXAMPLES:

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

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

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

The BIBD is available from the constructor:

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

x.__init__(...) initializes x; see help(type(x)) for signature

sage.combinat.designs.database.f()

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

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

Construction shared by Julian R. Abel

EXAMPLE:

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

Table Of Contents

Previous topic

Covering designs: coverings of \(t\)-element subsets of a \(v\)-set by \(k\)-sets

Next topic

Catalog of designs

This Page