Skip to content

Commit fdbe7f7

Browse files
author
Matthias Koeppe
committed
sage.combinat.designs: Update from #35095
1 parent ffe78e0 commit fdbe7f7

File tree

4 files changed

+82
-80
lines changed

4 files changed

+82
-80
lines changed

src/sage/combinat/designs/block_design.py

Lines changed: 78 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -54,14 +54,17 @@
5454
#*****************************************************************************
5555
from sage.arith.misc import binomial, integer_floor, is_prime_power
5656
from sage.categories.sets_cat import EmptySetError
57-
from sage.modules.free_module import VectorSpace
57+
from sage.misc.lazy_import import lazy_import
58+
from sage.misc.unknown import Unknown
5859
from sage.rings.integer import Integer
5960
from sage.rings.integer_ring import ZZ
61+
6062
from .incidence_structures import IncidenceStructure
61-
from sage.rings.finite_rings.finite_field_constructor import FiniteField
62-
from sage.misc.unknown import Unknown
63-
from sage.matrix.matrix_space import MatrixSpace
64-
from sage.libs.gap.libgap import libgap
63+
64+
lazy_import('sage.libs.gap.libgap', 'libgap')
65+
lazy_import('sage.matrix.matrix_space', 'MatrixSpace')
66+
lazy_import('sage.modules.free_module', 'VectorSpace')
67+
lazy_import('sage.rings.finite_rings.finite_field_constructor', 'FiniteField')
6568

6669

6770
BlockDesign = IncidenceStructure
@@ -214,30 +217,30 @@ def ProjectiveGeometryDesign(n, d, F, algorithm=None, point_coordinates=True, ch
214217
The set of `d`-dimensional subspaces in a `n`-dimensional projective space
215218
forms `2`-designs (or balanced incomplete block designs)::
216219
217-
sage: PG = designs.ProjectiveGeometryDesign(4, 2, GF(2)); PG # optional - sage.rings.finite_rings
220+
sage: PG = designs.ProjectiveGeometryDesign(4, 2, GF(2)); PG
218221
Incidence structure with 31 points and 155 blocks
219-
sage: PG.is_t_design(return_parameters=True) # optional - sage.rings.finite_rings
222+
sage: PG.is_t_design(return_parameters=True)
220223
(True, (2, 31, 7, 7))
221224
222-
sage: PG = designs.ProjectiveGeometryDesign(3, 1, GF(4)) # optional - sage.rings.finite_rings
223-
sage: PG.is_t_design(return_parameters=True) # optional - sage.rings.finite_rings
225+
sage: PG = designs.ProjectiveGeometryDesign(3, 1, GF(4))
226+
sage: PG.is_t_design(return_parameters=True)
224227
(True, (2, 85, 5, 1))
225228
226229
Check with ``F`` being a prime power::
227230
228-
sage: PG = designs.ProjectiveGeometryDesign(3, 2, 4); PG # optional - sage.rings.finite_rings
231+
sage: PG = designs.ProjectiveGeometryDesign(3, 2, 4); PG
229232
Incidence structure with 85 points and 85 blocks
230233
231234
Use coordinates::
232235
233-
sage: PG = designs.ProjectiveGeometryDesign(2, 1, GF(3)) # optional - sage.rings.finite_rings
234-
sage: PG.blocks()[0] # optional - sage.rings.finite_rings
236+
sage: PG = designs.ProjectiveGeometryDesign(2, 1, GF(3))
237+
sage: PG.blocks()[0]
235238
[(1, 0, 0), (1, 0, 1), (1, 0, 2), (0, 0, 1)]
236239
237240
Use indexing by integers::
238241
239-
sage: PG = designs.ProjectiveGeometryDesign(2, 1, GF(3), point_coordinates=0) # optional - sage.rings.finite_rings
240-
sage: PG.blocks()[0] # optional - sage.rings.finite_rings
242+
sage: PG = designs.ProjectiveGeometryDesign(2, 1, GF(3), point_coordinates=0)
243+
sage: PG.blocks()[0]
241244
[0, 1, 2, 12]
242245
243246
Check that the constructor using gap also works::
@@ -318,15 +321,15 @@ def DesarguesianProjectivePlaneDesign(n, point_coordinates=True, check=True):
318321
319322
EXAMPLES::
320323
321-
sage: designs.DesarguesianProjectivePlaneDesign(2) # optional - sage.rings.finite_rings
324+
sage: designs.DesarguesianProjectivePlaneDesign(2)
322325
(7,3,1)-Balanced Incomplete Block Design
323-
sage: designs.DesarguesianProjectivePlaneDesign(3) # optional - sage.rings.finite_rings
326+
sage: designs.DesarguesianProjectivePlaneDesign(3)
324327
(13,4,1)-Balanced Incomplete Block Design
325-
sage: designs.DesarguesianProjectivePlaneDesign(4) # optional - sage.rings.finite_rings
328+
sage: designs.DesarguesianProjectivePlaneDesign(4)
326329
(21,5,1)-Balanced Incomplete Block Design
327-
sage: designs.DesarguesianProjectivePlaneDesign(5) # optional - sage.rings.finite_rings
330+
sage: designs.DesarguesianProjectivePlaneDesign(5)
328331
(31,6,1)-Balanced Incomplete Block Design
329-
sage: designs.DesarguesianProjectivePlaneDesign(6) # optional - sage.rings.finite_rings
332+
sage: designs.DesarguesianProjectivePlaneDesign(6)
330333
Traceback (most recent call last):
331334
...
332335
ValueError: the order of a finite field must be a prime power
@@ -400,20 +403,20 @@ def q3_minus_one_matrix(K):
400403
EXAMPLES::
401404
402405
sage: from sage.combinat.designs.block_design import q3_minus_one_matrix
403-
sage: m = q3_minus_one_matrix(GF(3)) # optional - sage.rings.finite_rings
404-
sage: m.multiplicative_order() == 3**3 - 1 # optional - sage.rings.finite_rings
406+
sage: m = q3_minus_one_matrix(GF(3))
407+
sage: m.multiplicative_order() == 3**3 - 1
405408
True
406409
407-
sage: m = q3_minus_one_matrix(GF(4, 'a')) # optional - sage.rings.finite_rings
408-
sage: m.multiplicative_order() == 4**3 - 1 # optional - sage.rings.finite_rings
410+
sage: m = q3_minus_one_matrix(GF(4, 'a'))
411+
sage: m.multiplicative_order() == 4**3 - 1
409412
True
410413
411-
sage: m = q3_minus_one_matrix(GF(5)) # optional - sage.rings.finite_rings
412-
sage: m.multiplicative_order() == 5**3 - 1 # optional - sage.rings.finite_rings
414+
sage: m = q3_minus_one_matrix(GF(5))
415+
sage: m.multiplicative_order() == 5**3 - 1
413416
True
414417
415-
sage: m = q3_minus_one_matrix(GF(9, 'a')) # optional - sage.rings.finite_rings
416-
sage: m.multiplicative_order() == 9**3 - 1 # optional - sage.rings.finite_rings
418+
sage: m = q3_minus_one_matrix(GF(9, 'a'))
419+
sage: m.multiplicative_order() == 9**3 - 1
417420
True
418421
"""
419422
q = K.cardinality()
@@ -450,24 +453,24 @@ def normalize_hughes_plane_point(p, q):
450453
451454
INPUT:
452455
453-
- ``p`` -- point with the coordinates (x,y,z) (a list, a vector, a tuple...)
456+
- ``p`` -- point with the coordinates `(x,y,z)` (a list, a vector, a tuple...)
454457
455458
- ``q`` -- cardinality of the underlying finite field
456459
457460
EXAMPLES::
458461
459462
sage: from sage.combinat.designs.block_design import normalize_hughes_plane_point
460-
sage: K = FiniteField(9,'x') # optional - sage.rings.finite_rings
461-
sage: x = K.gen() # optional - sage.rings.finite_rings
462-
sage: normalize_hughes_plane_point((x, x+1, x), 9) # optional - sage.rings.finite_rings
463+
sage: K = FiniteField(9,'x')
464+
sage: x = K.gen()
465+
sage: normalize_hughes_plane_point((x, x + 1, x), 9)
463466
(1, x, 1)
464-
sage: normalize_hughes_plane_point(vector((x,x,x)), 9) # optional - sage.rings.finite_rings
467+
sage: normalize_hughes_plane_point(vector((x,x,x)), 9)
465468
(1, 1, 1)
466-
sage: zero = K.zero() # optional - sage.rings.finite_rings
467-
sage: normalize_hughes_plane_point((2*x+2, zero, zero), 9) # optional - sage.rings.finite_rings
469+
sage: zero = K.zero()
470+
sage: normalize_hughes_plane_point((2*x + 2, zero, zero), 9)
468471
(1, 0, 0)
469-
sage: one = K.one() # optional - sage.rings.finite_rings
470-
sage: normalize_hughes_plane_point((2*x, one, zero), 9) # optional - sage.rings.finite_rings
472+
sage: one = K.one()
473+
sage: normalize_hughes_plane_point((2*x, one, zero), 9)
471474
(2*x, 1, 0)
472475
"""
473476
for i in [2,1,0]:
@@ -526,7 +529,7 @@ def HughesPlane(q2, check=True):
526529
527530
EXAMPLES::
528531
529-
sage: H = designs.HughesPlane(9); H # optional - sage.rings.finite_rings
532+
sage: H = designs.HughesPlane(9); H
530533
(91,10,1)-Balanced Incomplete Block Design
531534
532535
We prove in the following computations that the Desarguesian plane ``H`` is
@@ -535,45 +538,45 @@ def HughesPlane(q2, check=True):
535538
`D_{1,10} \cap D_{70,59}` and `D_{10,0} \cap D_{59,57}` are on the same line
536539
while `D_{0,70}`, `D_{1,59}` and `D_{10,57}` are not concurrent::
537540
538-
sage: blocks = H.blocks() # optional - sage.rings.finite_rings
539-
sage: line = lambda p,q: next(b for b in blocks if p in b and q in b) # optional - sage.rings.finite_rings
541+
sage: blocks = H.blocks()
542+
sage: line = lambda p,q: next(b for b in blocks if p in b and q in b)
540543
541-
sage: b_0_1 = line(0, 1) # optional - sage.rings.finite_rings
542-
sage: b_1_10 = line(1, 10) # optional - sage.rings.finite_rings
543-
sage: b_10_0 = line(10, 0) # optional - sage.rings.finite_rings
544-
sage: b_57_70 = line(57, 70) # optional - sage.rings.finite_rings
545-
sage: b_70_59 = line(70, 59) # optional - sage.rings.finite_rings
546-
sage: b_59_57 = line(59, 57) # optional - sage.rings.finite_rings
544+
sage: b_0_1 = line(0, 1)
545+
sage: b_1_10 = line(1, 10)
546+
sage: b_10_0 = line(10, 0)
547+
sage: b_57_70 = line(57, 70)
548+
sage: b_70_59 = line(70, 59)
549+
sage: b_59_57 = line(59, 57)
547550
548-
sage: set(b_0_1).intersection(b_57_70) # optional - sage.rings.finite_rings
551+
sage: set(b_0_1).intersection(b_57_70)
549552
{2}
550-
sage: set(b_1_10).intersection(b_70_59) # optional - sage.rings.finite_rings
553+
sage: set(b_1_10).intersection(b_70_59)
551554
{73}
552-
sage: set(b_10_0).intersection(b_59_57) # optional - sage.rings.finite_rings
555+
sage: set(b_10_0).intersection(b_59_57)
553556
{60}
554557
555-
sage: line(2, 73) == line(73, 60) # optional - sage.rings.finite_rings
558+
sage: line(2, 73) == line(73, 60)
556559
True
557560
558-
sage: b_0_57 = line(0, 57) # optional - sage.rings.finite_rings
559-
sage: b_1_70 = line(1, 70) # optional - sage.rings.finite_rings
560-
sage: b_10_59 = line(10, 59) # optional - sage.rings.finite_rings
561+
sage: b_0_57 = line(0, 57)
562+
sage: b_1_70 = line(1, 70)
563+
sage: b_10_59 = line(10, 59)
561564
562-
sage: p = set(b_0_57).intersection(b_1_70) # optional - sage.rings.finite_rings
563-
sage: q = set(b_1_70).intersection(b_10_59) # optional - sage.rings.finite_rings
564-
sage: p == q # optional - sage.rings.finite_rings
565+
sage: p = set(b_0_57).intersection(b_1_70)
566+
sage: q = set(b_1_70).intersection(b_10_59)
567+
sage: p == q
565568
False
566569
567570
TESTS:
568571
569572
Some wrong input::
570573
571-
sage: designs.HughesPlane(5) # optional - sage.rings.finite_rings
574+
sage: designs.HughesPlane(5)
572575
Traceback (most recent call last):
573576
...
574577
EmptySetError: No Hughes plane of non-square order exists.
575578
576-
sage: designs.HughesPlane(16) # optional - sage.rings.finite_rings
579+
sage: designs.HughesPlane(16)
577580
Traceback (most recent call last):
578581
...
579582
EmptySetError: No Hughes plane of even order exists.
@@ -644,13 +647,11 @@ def projective_plane_to_OA(pplane, pt=None, check=True):
644647
EXAMPLES::
645648
646649
sage: from sage.combinat.designs.block_design import projective_plane_to_OA
647-
sage: p2 = designs.DesarguesianProjectivePlaneDesign(2, # optional - sage.rings.finite_rings
648-
....: point_coordinates=False)
649-
sage: projective_plane_to_OA(p2) # optional - sage.rings.finite_rings
650+
sage: p2 = designs.DesarguesianProjectivePlaneDesign(2, point_coordinates=False)
651+
sage: projective_plane_to_OA(p2)
650652
[[0, 0, 0], [0, 1, 1], [1, 0, 1], [1, 1, 0]]
651-
sage: p3 = designs.DesarguesianProjectivePlaneDesign(3, # optional - sage.rings.finite_rings
652-
....: point_coordinates=False)
653-
sage: projective_plane_to_OA(p3) # optional - sage.rings.finite_rings
653+
sage: p3 = designs.DesarguesianProjectivePlaneDesign(3, point_coordinates=False)
654+
sage: projective_plane_to_OA(p3)
654655
[[0, 0, 0, 0],
655656
[0, 1, 2, 1],
656657
[0, 2, 1, 2],
@@ -661,11 +662,10 @@ def projective_plane_to_OA(pplane, pt=None, check=True):
661662
[2, 1, 0, 2],
662663
[2, 2, 2, 0]]
663664
664-
sage: pp = designs.DesarguesianProjectivePlaneDesign(16, # optional - sage.rings.finite_rings
665-
....: point_coordinates=False)
666-
sage: _ = projective_plane_to_OA(pp, pt=0) # optional - sage.rings.finite_rings
667-
sage: _ = projective_plane_to_OA(pp, pt=3) # optional - sage.rings.finite_rings
668-
sage: _ = projective_plane_to_OA(pp, pt=7) # optional - sage.rings.finite_rings
665+
sage: pp = designs.DesarguesianProjectivePlaneDesign(16, point_coordinates=False)
666+
sage: _ = projective_plane_to_OA(pp, pt=0)
667+
sage: _ = projective_plane_to_OA(pp, pt=3)
668+
sage: _ = projective_plane_to_OA(pp, pt=7)
669669
"""
670670
from .bibd import _relabel_bibd
671671
pplane = pplane.blocks()
@@ -816,28 +816,28 @@ def AffineGeometryDesign(n, d, F, point_coordinates=True, check=True):
816816
817817
EXAMPLES::
818818
819-
sage: BD = designs.AffineGeometryDesign(3, 1, GF(2)) # optional - sage.rings.finite_rings
820-
sage: BD.is_t_design(return_parameters=True) # optional - sage.rings.finite_rings
819+
sage: BD = designs.AffineGeometryDesign(3, 1, GF(2))
820+
sage: BD.is_t_design(return_parameters=True)
821821
(True, (2, 8, 2, 1))
822-
sage: BD = designs.AffineGeometryDesign(3, 2, GF(4)) # optional - sage.rings.finite_rings
823-
sage: BD.is_t_design(return_parameters=True) # optional - sage.rings.finite_rings
822+
sage: BD = designs.AffineGeometryDesign(3, 2, GF(4))
823+
sage: BD.is_t_design(return_parameters=True)
824824
(True, (2, 64, 16, 5))
825-
sage: BD = designs.AffineGeometryDesign(4, 2, GF(3)) # optional - sage.rings.finite_rings
826-
sage: BD.is_t_design(return_parameters=True) # optional - sage.rings.finite_rings
825+
sage: BD = designs.AffineGeometryDesign(4, 2, GF(3))
826+
sage: BD.is_t_design(return_parameters=True)
827827
(True, (2, 81, 9, 13))
828828
829829
With ``F`` an integer instead of a finite field::
830830
831-
sage: BD = designs.AffineGeometryDesign(3, 2, 4) # optional - sage.rings.finite_rings
832-
sage: BD.is_t_design(return_parameters=True) # optional - sage.rings.finite_rings
831+
sage: BD = designs.AffineGeometryDesign(3, 2, 4)
832+
sage: BD.is_t_design(return_parameters=True)
833833
(True, (2, 64, 16, 5))
834834
835835
Testing the option ``point_coordinates``::
836836
837-
sage: designs.AffineGeometryDesign(3, 1, GF(2), # optional - sage.rings.finite_rings
837+
sage: designs.AffineGeometryDesign(3, 1, GF(2),
838838
....: point_coordinates=True).blocks()[0]
839839
[(0, 0, 0), (0, 0, 1)]
840-
sage: designs.AffineGeometryDesign(3, 1, GF(2), # optional - sage.rings.finite_rings
840+
sage: designs.AffineGeometryDesign(3, 1, GF(2),
841841
....: point_coordinates=False).blocks()[0]
842842
[0, 1]
843843
"""

src/sage/combinat/designs/difference_family.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1547,6 +1547,7 @@ def relative_difference_set_from_homomorphism(q, N, d, check=True, return_group=
15471547
return G2, second_diff_set
15481548
return second_diff_set
15491549

1550+
15501551
def is_relative_difference_set(R, G, H, params, verbose=False):
15511552
r"""
15521553
Check if ``R`` is a difference set of ``G`` relative to ``H``, with the given parameters.

src/sage/combinat/designs/gen_quadrangles_with_spread.pyx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
# sage.doctest: optional - sage.libs.gap
12
r"""
23
Database of generalised quadrangles with spread
34

src/sage/combinat/designs/twographs.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -291,9 +291,9 @@ def twograph_descendant(G, v, name=None):
291291
sage: twograph_descendant(T8, v).is_strongly_regular(parameters=True)
292292
(27, 16, 10, 8)
293293
sage: p = graphs.PetersenGraph()
294-
sage: twograph_descendant(p,5)
294+
sage: twograph_descendant(p, 5)
295295
Graph on 9 vertices
296-
sage: twograph_descendant(p,5,name=True)
296+
sage: twograph_descendant(p, 5, name=True)
297297
descendant of Petersen graph at 5: Graph on 9 vertices
298298
"""
299299
G = G.seidel_switching(G.neighbors(v),inplace=False)

0 commit comments

Comments
 (0)