@@ -488,34 +488,58 @@ def shortened_000_111_extended_binary_Golay_code_graph():
488488    EXAMPLES:: 
489489
490490        sage: # long time, needs sage. modules sage. rings. finite_rings 
491-         sage: G = graphs. shortened_000_111_extended_binary_Golay_code_graph( )    # 25 s  
491+         sage: G = graphs. shortened_000_111_extended_binary_Golay_code_graph( )  
492492        sage: G. is_distance_regular( True)  
493493        ( [21, 20, 16, 9, 2, 1, None ], [None, 1, 2, 3, 16, 20, 21 ])  
494494
495495    ALGORITHM: 
496496
497-     Compute the extended binary Golay code.  Compute its subcode whose codewords 
498-     start with 000 or 111.  Remove the first 3 entries from all the codewords 
499-     from the new linear code and compute its coset graph.  
497+     The vertices and edges of this graph have been precomputed and 
498+     pickled, so truthfully, we just unpickle them and pass them to the 
499+     Graph constructor.  But the algorithm used to compute those 
500+     vertices and edges in the first place is, 
500501
501-     REFERENCES: 
502- 
503-     Description and construction of this graph can be found in [BCN1989 ]_ p.  365.  
504-     """  
505-     from  sage.coding.linear_code import  LinearCode
506- 
507-     code =  codes.GolayCode(GF(2 ))
508-     C_basis =  code.basis()
502+     #.  Compute the extended binary Golay code.  
503+     #.  Compute its subcode whose codewords start with 000 or 111.  
504+     #.  Remove the first 3 entries from all the codewords from the 
505+        new linear code and compute its coset graph.  
509506
510-     #  now special shortening
511-     v =  C_basis[0 ] +  C_basis[1 ] +  C_basis[2 ]  #  v has 111 at the start
512-     C_basis =  C_basis[3 :]
513-     C_basis.append(v)
514-     C_basis =  list (map (lambda  x : x[3 :], C_basis))
507+     This construction is tested in ``generators_test. py``, where the 
508+     result is compared with the result from this method.  
515509
516-     code  =  LinearCode(Matrix(GF( 2 ), C_basis)) 
510+     REFERENCES:  
517511
518-     G =  code.cosetGraph()
512+     The description and construction of this graph can be found in 
513+     [BCN1989 ]_, page 365.  
514+     """  
515+     import  lzma
516+     from  importlib.resources import  as_file, files
517+     from  pickle import  load
518+ 
519+     #  Path to the pickled-and-xz'd list of (vertices, edges)
520+     ppath =  files(' sage.graphs.generators'  ).joinpath(
521+       " shortened_000_111_extended_binary_Golay_code_graph.pickle.xz" 
522+     )
523+ 
524+     with  as_file(ppath) as  p:
525+         with  lzma.open(p) as  f:
526+             vs_and_es =  load(f, fix_imports = False )
527+ 
528+     #  Vertices/edges are pickled as tuples of ints, but should be
529+     #  vectors with entries in GF(2).
530+     V =  VectorSpace(GF(2 ), 21 )
531+     for  i in  range (2048 ):
532+         #  vertex i
533+         vs_and_es[0 ][i] =  V(vs_and_es[0 ][i])
534+         vs_and_es[0 ][i].set_immutable()
535+     for  i in  range (21504 ):
536+         #  edge i = (v1, v2, l)
537+         vs_and_es[1 ][i][0 ] =  V(vs_and_es[1 ][i][0 ]) #  v1
538+         vs_and_es[1 ][i][0 ].set_immutable()
539+         vs_and_es[1 ][i][1 ] =  V(vs_and_es[1 ][i][1 ]) #  v2
540+         vs_and_es[1 ][i][1 ].set_immutable()
541+ 
542+     G =  Graph(vs_and_es, format = ' vertices_and_edges'  )
519543    G.name(" Shortened 000 111 extended binary Golay code"  )
520544    return  G
521545
0 commit comments