passagemath-graphs 10.5.10__cp39-cp39-macosx_14_0_arm64.whl → 10.5.43__cp39-cp39-macosx_14_0_arm64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (140) hide show
  1. {passagemath_graphs-10.5.10.dist-info → passagemath_graphs-10.5.43.dist-info}/METADATA +126 -30
  2. passagemath_graphs-10.5.43.dist-info/RECORD +256 -0
  3. {passagemath_graphs-10.5.10.dist-info → passagemath_graphs-10.5.43.dist-info}/WHEEL +2 -1
  4. passagemath_graphs.dylibs/libgmp.10.dylib +0 -0
  5. sage/all__sagemath_graphs.py +5 -0
  6. sage/combinat/abstract_tree.py +1 -1
  7. sage/combinat/binary_tree.py +1 -1
  8. sage/combinat/cluster_algebra_quiver/all.py +1 -1
  9. sage/combinat/cluster_algebra_quiver/cluster_seed.py +28 -24
  10. sage/combinat/cluster_algebra_quiver/interact.py +4 -0
  11. sage/combinat/designs/MOLS_handbook_data.py +5 -5
  12. sage/combinat/designs/bibd.py +10 -9
  13. sage/combinat/designs/covering_array.py +3 -3
  14. sage/combinat/designs/covering_design.py +2 -1
  15. sage/combinat/designs/database.py +11 -10
  16. sage/combinat/designs/designs_pyx.cpython-39-darwin.so +0 -0
  17. sage/combinat/designs/designs_pyx.pyx +13 -45
  18. sage/combinat/designs/difference_family.py +6 -6
  19. sage/combinat/designs/difference_matrices.py +1 -1
  20. sage/combinat/designs/evenly_distributed_sets.cpython-39-darwin.so +0 -0
  21. sage/combinat/designs/evenly_distributed_sets.pyx +15 -22
  22. sage/combinat/designs/ext_rep.py +9 -14
  23. sage/combinat/designs/gen_quadrangles_with_spread.cpython-39-darwin.so +0 -0
  24. sage/combinat/designs/gen_quadrangles_with_spread.pyx +1 -1
  25. sage/combinat/designs/group_divisible_designs.py +1 -1
  26. sage/combinat/designs/incidence_structures.py +8 -8
  27. sage/combinat/designs/latin_squares.py +1 -1
  28. sage/combinat/designs/orthogonal_arrays_build_recursive.py +8 -7
  29. sage/combinat/designs/orthogonal_arrays_find_recursive.cpython-39-darwin.so +0 -0
  30. sage/combinat/designs/resolvable_bibd.py +1 -1
  31. sage/combinat/designs/steiner_quadruple_systems.py +1 -1
  32. sage/combinat/designs/subhypergraph_search.cpython-39-darwin.so +0 -0
  33. sage/combinat/designs/subhypergraph_search.pyx +9 -9
  34. sage/combinat/finite_state_machine_generators.py +2 -2
  35. sage/combinat/graph_path.py +3 -3
  36. sage/combinat/interval_posets.py +10 -10
  37. sage/combinat/ordered_tree.py +1 -1
  38. sage/combinat/posets/cartesian_product.py +1 -1
  39. sage/combinat/posets/d_complete.py +1 -1
  40. sage/combinat/posets/forest.py +1 -1
  41. sage/combinat/posets/hasse_cython.cpython-39-darwin.so +0 -0
  42. sage/combinat/posets/hasse_diagram.py +8 -6
  43. sage/combinat/posets/incidence_algebras.py +8 -8
  44. sage/combinat/posets/lattices.py +28 -4
  45. sage/combinat/posets/linear_extension_iterator.cpython-39-darwin.so +0 -0
  46. sage/combinat/posets/linear_extension_iterator.pyx +2 -0
  47. sage/combinat/posets/linear_extensions.py +7 -16
  48. sage/combinat/posets/moebius_algebra.py +1 -1
  49. sage/combinat/posets/poset_examples.py +1 -1
  50. sage/combinat/posets/posets.py +54 -56
  51. sage/combinat/rooted_tree.py +3 -3
  52. sage/combinat/tamari_lattices.py +1 -1
  53. sage/ext_data/kenzo/CP2.txt +45 -0
  54. sage/ext_data/kenzo/CP3.txt +349 -0
  55. sage/ext_data/kenzo/CP4.txt +4774 -0
  56. sage/ext_data/kenzo/README.txt +49 -0
  57. sage/ext_data/kenzo/S4.txt +20 -0
  58. sage/graphs/asteroidal_triples.cpython-39-darwin.so +0 -0
  59. sage/graphs/base/boost_graph.cpython-39-darwin.so +0 -0
  60. sage/graphs/base/boost_graph.pxd +1 -1
  61. sage/graphs/base/boost_graph.pyx +1 -1
  62. sage/graphs/base/c_graph.cpython-39-darwin.so +0 -0
  63. sage/graphs/base/c_graph.pxd +4 -4
  64. sage/graphs/base/c_graph.pyx +270 -184
  65. sage/graphs/base/dense_graph.cpython-39-darwin.so +0 -0
  66. sage/graphs/base/graph_backends.cpython-39-darwin.so +0 -0
  67. sage/graphs/base/sparse_graph.cpython-39-darwin.so +0 -0
  68. sage/graphs/base/static_dense_graph.cpython-39-darwin.so +0 -0
  69. sage/graphs/base/static_sparse_backend.cpython-39-darwin.so +0 -0
  70. sage/graphs/base/static_sparse_backend.pyx +93 -6
  71. sage/graphs/base/static_sparse_graph.cpython-39-darwin.so +0 -0
  72. sage/graphs/base/static_sparse_graph.pyx +1 -1
  73. sage/graphs/bipartite_graph.py +0 -1
  74. sage/graphs/centrality.cpython-39-darwin.so +0 -0
  75. sage/graphs/centrality.pyx +0 -0
  76. sage/graphs/comparability.cpython-39-darwin.so +0 -0
  77. sage/graphs/comparability.pyx +172 -138
  78. sage/graphs/connectivity.cpython-39-darwin.so +0 -0
  79. sage/graphs/connectivity.pyx +194 -18
  80. sage/graphs/convexity_properties.cpython-39-darwin.so +0 -0
  81. sage/graphs/digraph_generators.py +118 -74
  82. sage/graphs/distances_all_pairs.cpython-39-darwin.so +0 -0
  83. sage/graphs/distances_all_pairs.pyx +145 -27
  84. sage/graphs/edge_connectivity.cpython-39-darwin.so +0 -0
  85. sage/graphs/generators/basic.py +471 -130
  86. sage/graphs/generators/distance_regular.cpython-39-darwin.so +0 -0
  87. sage/graphs/generators/distance_regular.pyx +12 -12
  88. sage/graphs/generators/families.py +2 -2
  89. sage/graphs/generators/random.py +8 -13
  90. sage/graphs/generators/smallgraphs.py +12 -11
  91. sage/graphs/generic_graph.py +687 -265
  92. sage/graphs/generic_graph_pyx.cpython-39-darwin.so +0 -0
  93. sage/graphs/genus.cpython-39-darwin.so +0 -0
  94. sage/graphs/graph.py +12 -46
  95. sage/graphs/graph_coloring.cpython-39-darwin.so +0 -0
  96. sage/graphs/graph_database.py +1 -1
  97. sage/graphs/graph_decompositions/bandwidth.cpython-39-darwin.so +0 -0
  98. sage/graphs/graph_decompositions/clique_separators.cpython-39-darwin.so +0 -0
  99. sage/graphs/graph_decompositions/cutwidth.cpython-39-darwin.so +0 -0
  100. sage/graphs/graph_decompositions/fast_digraph.cpython-39-darwin.so +0 -0
  101. sage/graphs/graph_decompositions/graph_products.cpython-39-darwin.so +0 -0
  102. sage/graphs/graph_decompositions/modular_decomposition.cpython-39-darwin.so +0 -0
  103. sage/graphs/graph_decompositions/slice_decomposition.cpython-39-darwin.so +0 -0
  104. sage/graphs/graph_decompositions/tree_decomposition.cpython-39-darwin.so +0 -0
  105. sage/graphs/graph_decompositions/vertex_separation.cpython-39-darwin.so +0 -0
  106. sage/graphs/graph_generators.py +110 -55
  107. sage/graphs/graph_generators_pyx.cpython-39-darwin.so +0 -0
  108. sage/graphs/graph_latex.py +1 -1
  109. sage/graphs/graph_list.py +2 -3
  110. sage/graphs/graph_plot.py +225 -30
  111. sage/graphs/hyperbolicity.cpython-39-darwin.so +0 -0
  112. sage/graphs/independent_sets.cpython-39-darwin.so +0 -0
  113. sage/graphs/isgci.py +3 -8
  114. sage/graphs/isoperimetric_inequalities.cpython-39-darwin.so +0 -0
  115. sage/graphs/line_graph.cpython-39-darwin.so +0 -0
  116. sage/graphs/matching.py +14 -25
  117. sage/graphs/matching_covered_graph.py +871 -60
  118. sage/graphs/orientations.py +190 -134
  119. sage/graphs/path_enumeration.cpython-39-darwin.so +0 -0
  120. sage/graphs/path_enumeration.pyx +25 -25
  121. sage/graphs/spanning_tree.cpython-39-darwin.so +0 -0
  122. sage/graphs/strongly_regular_db.cpython-39-darwin.so +0 -0
  123. sage/graphs/strongly_regular_db.pyx +54 -52
  124. sage/graphs/traversals.cpython-39-darwin.so +0 -0
  125. sage/graphs/traversals.pyx +114 -46
  126. sage/graphs/trees.cpython-39-darwin.so +0 -0
  127. sage/graphs/views.cpython-39-darwin.so +0 -0
  128. sage/graphs/weakly_chordal.cpython-39-darwin.so +0 -0
  129. sage/groups/perm_gps/partn_ref/refinement_graphs.cpython-39-darwin.so +0 -0
  130. sage/knots/free_knotinfo_monoid.py +2 -3
  131. sage/knots/knot.py +1 -1
  132. sage/knots/knotinfo.py +4 -4
  133. sage/knots/link.py +58 -57
  134. sage/sandpiles/sandpile.py +2 -3
  135. sage/topology/cell_complex.py +1 -1
  136. sage/topology/cubical_complex.py +7 -7
  137. sage/topology/delta_complex.py +4 -4
  138. sage/topology/simplicial_complex.py +7 -22
  139. passagemath_graphs-10.5.10.dist-info/RECORD +0 -251
  140. {passagemath_graphs-10.5.10.dist-info → passagemath_graphs-10.5.43.dist-info}/top_level.txt +0 -0
@@ -112,9 +112,9 @@ def is_mathon_PC_srg(int v, int k, int l, int mu):
112
112
  sage: from sage.graphs.strongly_regular_db import is_mathon_PC_srg
113
113
  sage: t = is_mathon_PC_srg(45,22,10,11); t # needs sage.libs.pari
114
114
  (..., 1)
115
- sage: g = t[0](*t[1:]); g # needs sage.libs.pari
115
+ sage: g = t[0](*t[1:]); g # needs database_graphs sage.libs.pari
116
116
  Mathon's PC SRG on 45 vertices: Graph on 45 vertices
117
- sage: g.is_strongly_regular(parameters=True) # needs sage.libs.pari
117
+ sage: g.is_strongly_regular(parameters=True) # needs database_graphs sage.libs.pari
118
118
  (45, 22, 10, 11)
119
119
 
120
120
  TESTS::
@@ -360,9 +360,9 @@ def is_affine_polar(int v, int k, int l, int mu):
360
360
  sage: from sage.graphs.strongly_regular_db import is_affine_polar
361
361
  sage: t = is_affine_polar(81,32,13,12); t # needs sage.rings.finite_rings
362
362
  (..., 4, 3)
363
- sage: g = t[0](*t[1:]); g # needs sage.rings.finite_rings
363
+ sage: g = t[0](*t[1:]); g # needs sage.libs.gap sage.rings.finite_rings
364
364
  Affine Polar Graph VO^+(4,3): Graph on 81 vertices
365
- sage: g.is_strongly_regular(parameters=True) # needs sage.rings.finite_rings
365
+ sage: g.is_strongly_regular(parameters=True) # needs sage.libs.gap sage.rings.finite_rings
366
366
  (81, 32, 13, 12)
367
367
 
368
368
  sage: t = is_affine_polar(5,5,5,5); t
@@ -415,9 +415,9 @@ def is_orthogonal_polar(int v, int k, int l, int mu):
415
415
  sage: from sage.graphs.strongly_regular_db import is_orthogonal_polar
416
416
  sage: t = is_orthogonal_polar(85, 20, 3, 5); t
417
417
  (<function OrthogonalPolarGraph at ...>, 5, 4, '')
418
- sage: g = t[0](*t[1:]); g # needs sage.rings.finite_rings
418
+ sage: g = t[0](*t[1:]); g # needs sage.libs.gap sage.rings.finite_rings
419
419
  Orthogonal Polar Graph O(5, 4): Graph on 85 vertices
420
- sage: g.is_strongly_regular(parameters=True) # needs sage.rings.finite_rings
420
+ sage: g.is_strongly_regular(parameters=True) # needs sage.libs.gap sage.rings.finite_rings
421
421
  (85, 20, 3, 5)
422
422
 
423
423
  sage: t = is_orthogonal_polar(5,5,5,5); t # needs sage.rings.finite_rings
@@ -571,9 +571,9 @@ def is_NOodd(int v, int k, int l, int mu):
571
571
  sage: from sage.graphs.strongly_regular_db import is_NOodd
572
572
  sage: t = is_NOodd(120, 51, 18, 24); t # needs sage.libs.pari
573
573
  (<function NonisotropicOrthogonalPolarGraph at ...>, 5, 4, '-')
574
- sage: g = t[0](*t[1:]); g # needs sage.libs.pari
574
+ sage: g = t[0](*t[1:]); g # needs sage.libs.gap sage.libs.pari
575
575
  NO^-(5, 4): Graph on 120 vertices
576
- sage: g.is_strongly_regular(parameters=True) # needs sage.libs.pari
576
+ sage: g.is_strongly_regular(parameters=True) # needs sage.libs.gap sage.libs.pari
577
577
  (120, 51, 18, 24)
578
578
 
579
579
  TESTS:
@@ -642,9 +642,9 @@ def is_NOperp_F5(int v, int k, int l, int mu):
642
642
  sage: from sage.graphs.strongly_regular_db import is_NOperp_F5
643
643
  sage: t = is_NOperp_F5(10, 3, 0, 1); t # needs sage.libs.pari
644
644
  (<function NonisotropicOrthogonalPolarGraph at ...>, 3, 5, '-', 1)
645
- sage: g = t[0](*t[1:]); g # needs sage.libs.pari
645
+ sage: g = t[0](*t[1:]); g # needs sage.libs.gap sage.libs.pari
646
646
  NO^-,perp(3, 5): Graph on 10 vertices
647
- sage: g.is_strongly_regular(parameters=True) # needs sage.libs.pari
647
+ sage: g.is_strongly_regular(parameters=True) # needs sage.libs.gap sage.libs.pari
648
648
  (10, 3, 0, 1)
649
649
 
650
650
  TESTS:
@@ -697,9 +697,9 @@ def is_NO_F2(int v, int k, int l, int mu):
697
697
  sage: from sage.graphs.strongly_regular_db import is_NO_F2
698
698
  sage: t = is_NO_F2(10, 3, 0, 1); t # needs sage.libs.pari
699
699
  (<function NonisotropicOrthogonalPolarGraph at ...>, 4, 2, '-')
700
- sage: g = t[0](*t[1:]); g # needs sage.libs.pari
700
+ sage: g = t[0](*t[1:]); g # needs sage.libs.gap sage.libs.pari
701
701
  NO^-(4, 2): Graph on 10 vertices
702
- sage: g.is_strongly_regular(parameters=True) # needs sage.libs.pari
702
+ sage: g.is_strongly_regular(parameters=True) # needs sage.libs.gap sage.libs.pari
703
703
  (10, 3, 0, 1)
704
704
 
705
705
  TESTS:
@@ -748,9 +748,9 @@ def is_NO_F3(int v, int k, int l, int mu):
748
748
  sage: from sage.graphs.strongly_regular_db import is_NO_F3
749
749
  sage: t = is_NO_F3(15, 6, 1, 3); t # needs sage.libs.pari
750
750
  (<function NonisotropicOrthogonalPolarGraph at ...>, 4, 3, '-')
751
- sage: g = t[0](*t[1:]); g # needs sage.libs.pari
751
+ sage: g = t[0](*t[1:]); g # needs sage.libs.gap sage.libs.pari
752
752
  NO^-(4, 3): Graph on 15 vertices
753
- sage: g.is_strongly_regular(parameters=True) # needs sage.libs.pari
753
+ sage: g.is_strongly_regular(parameters=True) # needs sage.libs.gap sage.libs.pari
754
754
  (15, 6, 1, 3)
755
755
 
756
756
  TESTS:
@@ -804,9 +804,9 @@ def is_NU(int v, int k, int l, int mu):
804
804
  sage: from sage.graphs.strongly_regular_db import is_NU
805
805
  sage: t = is_NU(40, 27, 18, 18); t # needs sage.libs.pari
806
806
  (<function NonisotropicUnitaryPolarGraph at ...>, 4, 2)
807
- sage: g = t[0](*t[1:]); g # needs sage.libs.pari
807
+ sage: g = t[0](*t[1:]); g # needs sage.libs.gap sage.libs.pari
808
808
  NU(4, 2): Graph on 40 vertices
809
- sage: g.is_strongly_regular(parameters=True) # needs sage.libs.pari
809
+ sage: g.is_strongly_regular(parameters=True) # needs sage.libs.gap sage.libs.pari
810
810
  (40, 27, 18, 18)
811
811
 
812
812
  TESTS::
@@ -1069,25 +1069,25 @@ def is_polhill(int v, int k, int l, int mu):
1069
1069
  # We now define the P_{i,j}. see section 6.
1070
1070
 
1071
1071
  P = {}
1072
- P[0,1] = list(range((-1) + 1 , 2**(s-2)+1))
1073
- P[1,1] = list(range((-1) + 2**(s-2)+2 , 2**(s-1)+1))
1074
- P[2,1] = list(range((-1) + 2**(s-1)+2 , 2**(s-1)+2**(s-2)+1))
1075
- P[3,1] = list(range((-1) + 2**(s-1)+2**(s-2)+2, 2**(s)+1))
1076
-
1077
- P[0,2] = list(range((-1) + 2**(s-2)+2 , 2**(s-1)+2))
1078
- P[1,2] = list(range((-1) + 2**(s-1)+3 , 2**(s-1)+2**(s-2)+2))
1079
- P[2,2] = list(range((-1) + 2**(s-1)+2**(s-2)+3, 2**(s)+1)) + [0]
1080
- P[3,2] = list(range((-1) + 2 , 2**(s-2)+1))
1081
-
1082
- P[0,3] = list(range((-1) + 2**(s-1)+3 , 2**(s-1)+2**(s-2)+3))
1083
- P[1,3] = list(range((-1) + 2**(s-1)+2**(s-2)+4, 2**(s)+1)) + [0,1]
1084
- P[2,3] = list(range((-1) + 3 , 2**(s-2)+2))
1085
- P[3,3] = list(range((-1) + 2**(s-2)+3 , 2**(s-1)+2))
1086
-
1087
- P[0,4] = list(range((-1) + 2**(s-1)+2**(s-2)+4, 2**(s)+1))
1088
- P[1,4] = list(range((-1) + 3 , 2**(s-2)+1)) + [2**(s-1)+1,2**(s-1)+2**(s-2)+2]
1089
- P[2,4] = list(range((-1) + 2**(s-2)+3 , 2**(s-1)+1)) + [2**(s-1)+2**(s-2)+1,1]
1090
- P[3,4] = list(range((-1) + 2**(s-1)+3 , 2**(s-1)+2**(s-2)+1)) + [2**(s-2)+1,0]
1072
+ P[0, 1] = list(range((-1) + 1, 2**(s-2)+1))
1073
+ P[1, 1] = list(range((-1) + 2**(s-2)+2, 2**(s-1)+1))
1074
+ P[2, 1] = list(range((-1) + 2**(s-1)+2, 2**(s-1)+2**(s-2)+1))
1075
+ P[3, 1] = list(range((-1) + 2**(s-1)+2**(s-2)+2, 2**(s)+1))
1076
+
1077
+ P[0, 2] = list(range((-1) + 2**(s-2)+2, 2**(s-1)+2))
1078
+ P[1, 2] = list(range((-1) + 2**(s-1)+3, 2**(s-1)+2**(s-2)+2))
1079
+ P[2, 2] = list(range((-1) + 2**(s-1)+2**(s-2)+3, 2**(s)+1)) + [0]
1080
+ P[3, 2] = list(range((-1) + 2, 2**(s-2)+1))
1081
+
1082
+ P[0, 3] = list(range((-1) + 2**(s-1)+3, 2**(s-1)+2**(s-2)+3))
1083
+ P[1, 3] = list(range((-1) + 2**(s-1)+2**(s-2)+4, 2**(s)+1)) + [0,1]
1084
+ P[2, 3] = list(range((-1) + 3, 2**(s-2)+2))
1085
+ P[3, 3] = list(range((-1) + 2**(s-2)+3, 2**(s-1)+2))
1086
+
1087
+ P[0, 4] = list(range((-1) + 2**(s-1)+2**(s-2)+4, 2**(s)+1))
1088
+ P[1, 4] = list(range((-1) + 3, 2**(s-2)+1)) + [2**(s-1)+1,2**(s-1)+2**(s-2)+2]
1089
+ P[2, 4] = list(range((-1) + 2**(s-2)+3, 2**(s-1)+1)) + [2**(s-1)+2**(s-2)+1,1]
1090
+ P[3, 4] = list(range((-1) + 2**(s-1)+3, 2**(s-1)+2**(s-2)+1)) + [2**(s-2)+1,0]
1091
1091
 
1092
1092
  R = {x: copy(P[x]) for x in P}
1093
1093
 
@@ -1101,10 +1101,10 @@ def is_polhill(int v, int k, int l, int mu):
1101
1101
 
1102
1102
  # We now define the R_{i,j}. see *end* of section 6.
1103
1103
 
1104
- R[0,3] = list(range((-1) + 2**(s-1)+3 , 2**(s-1)+2**(s-2)+2))
1105
- R[1,3] = list(range((-1) + 2**(s-1)+2**(s-2)+4, 2**(s)+1)) + [0,1,2**(s-1)+2**(s-2)+2]
1106
- R[0,4] = list(range((-1) + 2**(s-1)+2**(s-2)+4, 2**(s)+1)) + [2**(s-1)+2**(s-2)+2]
1107
- R[1,4] = list(range((-1) + 3 , 2**(s-2)+1)) + [2**(s-1)+1]
1104
+ R[0, 3] = list(range((-1) + 2**(s-1)+3, 2**(s-1)+2**(s-2)+2))
1105
+ R[1, 3] = list(range((-1) + 2**(s-1)+2**(s-2)+4, 2**(s)+1)) + [0,1,2**(s-1)+2**(s-2)+2]
1106
+ R[0, 4] = list(range((-1) + 2**(s-1)+2**(s-2)+4, 2**(s)+1)) + [2**(s-1)+2**(s-2)+2]
1107
+ R[1, 4] = list(range((-1) + 3, 2**(s-2)+1)) + [2**(s-1)+1]
1108
1108
 
1109
1109
  for x in R:
1110
1110
  R[x] = [K[i] for i in R[x]]
@@ -1273,9 +1273,9 @@ def is_unitary_polar(int v, int k, int l, int mu):
1273
1273
  sage: from sage.graphs.strongly_regular_db import is_unitary_polar
1274
1274
  sage: t = is_unitary_polar(45, 12, 3, 3); t # needs sage.libs.pari
1275
1275
  (<function UnitaryPolarGraph at ...>, 4, 2)
1276
- sage: g = t[0](*t[1:]); g # needs sage.libs.pari
1276
+ sage: g = t[0](*t[1:]); g # needs sage.libs.gap sage.libs.pari
1277
1277
  Unitary Polar Graph U(4, 2); GQ(4, 2): Graph on 45 vertices
1278
- sage: g.is_strongly_regular(parameters=True) # needs sage.libs.pari
1278
+ sage: g.is_strongly_regular(parameters=True) # needs sage.libs.gap sage.libs.pari
1279
1279
  (45, 12, 3, 3)
1280
1280
 
1281
1281
  sage: t = is_unitary_polar(5,5,5,5); t # needs sage.libs.pari
@@ -1351,9 +1351,9 @@ def is_unitary_dual_polar(int v, int k, int l, int mu):
1351
1351
  sage: from sage.graphs.strongly_regular_db import is_unitary_dual_polar
1352
1352
  sage: t = is_unitary_dual_polar(297, 40, 7, 5); t
1353
1353
  (<function UnitaryDualPolarGraph at ...>, 5, 2)
1354
- sage: g = t[0](*t[1:]); g
1354
+ sage: g = t[0](*t[1:]); g # needs sage.libs.gap
1355
1355
  Unitary Dual Polar Graph DU(5, 2); GQ(8, 4): Graph on 297 vertices
1356
- sage: g.is_strongly_regular(parameters=True)
1356
+ sage: g.is_strongly_regular(parameters=True) # needs sage.libs.gap
1357
1357
  (297, 40, 7, 5)
1358
1358
  sage: t = is_unitary_dual_polar(5,5,5,5); t
1359
1359
 
@@ -1492,11 +1492,11 @@ def is_twograph_descendant_of_srg(int v, int k0, int l, int mu):
1492
1492
  EXAMPLES::
1493
1493
 
1494
1494
  sage: from sage.graphs.strongly_regular_db import is_twograph_descendant_of_srg
1495
- sage: t = is_twograph_descendant_of_srg(27, 10, 1, 5); t # needs sage.rings.finite_rings
1495
+ sage: t = is_twograph_descendant_of_srg(27, 10, 1, 5); t # needs database_graphs sage.rings.finite_rings
1496
1496
  (<cyfunction is_twograph_descendant_of_srg.<locals>.la at...
1497
- sage: g = t[0](*t[1:]); g # needs sage.rings.finite_rings
1497
+ sage: g = t[0](*t[1:]); g # needs database_graphs sage.rings.finite_rings
1498
1498
  descendant of complement(Johnson graph with parameters 8,2) at {0, 1}: Graph on 27 vertices
1499
- sage: g.is_strongly_regular(parameters=True) # needs sage.rings.finite_rings
1499
+ sage: g.is_strongly_regular(parameters=True) # needs database_graphs sage.rings.finite_rings
1500
1500
  (27, 10, 1, 5)
1501
1501
  sage: t = is_twograph_descendant_of_srg(5,5,5,5); t
1502
1502
 
@@ -1961,9 +1961,9 @@ def SRG_105_32_4_12():
1961
1961
  EXAMPLES::
1962
1962
 
1963
1963
  sage: from sage.graphs.strongly_regular_db import SRG_105_32_4_12
1964
- sage: G = SRG_105_32_4_12(); G # needs sage.rings.finite_rings
1964
+ sage: G = SRG_105_32_4_12(); G # needs sage.groups sage.rings.finite_rings
1965
1965
  Aut L(3,4) on flags: Graph on 105 vertices
1966
- sage: G.is_strongly_regular(parameters=True) # needs sage.rings.finite_rings
1966
+ sage: G.is_strongly_regular(parameters=True) # needs sage.groups sage.rings.finite_rings
1967
1967
  (105, 32, 4, 12)
1968
1968
  """
1969
1969
  from sage.combinat.designs.block_design import ProjectiveGeometryDesign
@@ -2804,7 +2804,7 @@ def strongly_regular_graph(int v, int k, int l, int mu=-1, bint existence=False,
2804
2804
 
2805
2805
  Petersen's graph from its set of parameters::
2806
2806
 
2807
- sage: graphs.strongly_regular_graph(10,3,0,1,existence=True) # needs sage.libs.pari
2807
+ sage: graphs.strongly_regular_graph(10,3,0,1, existence=True) # needs database_graphs sage.libs.pari
2808
2808
  True
2809
2809
  sage: graphs.strongly_regular_graph(10,3,0,1) # needs database_graphs
2810
2810
  complement(Johnson graph with parameters 5,2): Graph on 10 vertices
@@ -2868,7 +2868,7 @@ def strongly_regular_graph(int v, int k, int l, int mu=-1, bint existence=False,
2868
2868
  descendant of (540, 264, 138, 120)-strongly regular graph at ... 539 vertices
2869
2869
  sage: graphs.strongly_regular_graph(539, 250, 105, 125) # needs sage.combinat
2870
2870
  descendant of (540, 275, 130, 150)-strongly regular graph at ... 539 vertices
2871
- sage: graphs.strongly_regular_graph(209, 100, 45, 50) # needs sage.libs.pari
2871
+ sage: graphs.strongly_regular_graph(209, 100, 45, 50) # needs database_graphs sage.libs.pari
2872
2872
  descendant of complement(merging of S_7 on Circulant(6,[1,4])s) at ... 209 vertices
2873
2873
 
2874
2874
 
@@ -2886,6 +2886,7 @@ def strongly_regular_graph(int v, int k, int l, int mu=-1, bint existence=False,
2886
2886
 
2887
2887
  `\mu=0` behaves correctly (:issue:`19712`)::
2888
2888
 
2889
+ sage: # needs database_graphs
2889
2890
  sage: graphs.strongly_regular_graph(10,2,1)
2890
2891
  Traceback (most recent call last):
2891
2892
  ...
@@ -3070,7 +3071,7 @@ def apparently_feasible_parameters(int n):
3070
3071
  (16, 9, 4, 6),
3071
3072
  (16, 10, 6, 6),
3072
3073
  (17, 8, 3, 4)}
3073
- sage: all(graphs.strongly_regular_graph(*x,existence=True) is True # needs sage.libs.pari
3074
+ sage: all(graphs.strongly_regular_graph(*x,existence=True) is True # needs database_graphs sage.libs.pari
3074
3075
  ....: for x in small_feasible)
3075
3076
  True
3076
3077
 
@@ -3078,7 +3079,7 @@ def apparently_feasible_parameters(int n):
3078
3079
  `(49,16,3,6)`-strongly regular graph)::
3079
3080
 
3080
3081
  sage: small_feasible = apparently_feasible_parameters(60)
3081
- sage: all(graphs.strongly_regular_graph(*x,existence=True) is True # needs sage.libs.pari
3082
+ sage: all(graphs.strongly_regular_graph(*x,existence=True) is True # needs database_graphs sage.libs.pari
3082
3083
  ....: for x in small_feasible)
3083
3084
  False
3084
3085
  """
@@ -3114,6 +3115,7 @@ def _build_small_srg_database():
3114
3115
  Make sure that all two-weight codes yield the strongly regular graphs we
3115
3116
  expect::
3116
3117
 
3118
+ sage: # needs database_graphs
3117
3119
  sage: graphs.strongly_regular_graph(81, 50, 31, 30) # needs sage.libs.pari
3118
3120
  complement(two-intersection set in PG(4,3)): Graph on 81 vertices
3119
3121
  sage: graphs.strongly_regular_graph(243, 220, 199, 200) # long time, needs sage.rings.finite_rings
Binary file
@@ -1,6 +1,7 @@
1
1
  # sage_setup: distribution = sagemath-graphs
2
2
  # cython: binding=True
3
3
  # distutils: language = c++
4
+ # distutils: extra_compile_args = -std=c++11
4
5
  r"""
5
6
  Graph traversals
6
7
 
@@ -64,16 +65,17 @@ from collections import deque
64
65
 
65
66
  from libc.string cimport memset
66
67
  from libc.stdint cimport uint32_t
67
- from libcpp.queue cimport priority_queue
68
- from libcpp.pair cimport pair
69
68
  from libcpp.vector cimport vector
70
69
  from cysignals.signals cimport sig_on, sig_off
71
70
  from memory_allocator cimport MemoryAllocator
72
71
 
72
+ from sage.data_structures.pairing_heap cimport PairingHeap_of_n_integers
73
+ from sage.graphs.base.c_graph cimport CGraph, CGraphBackend
74
+ from sage.graphs.base.static_sparse_backend cimport StaticSparseCGraph
75
+ from sage.graphs.base.static_sparse_backend cimport StaticSparseBackend
73
76
  from sage.graphs.base.static_sparse_graph cimport init_short_digraph
74
77
  from sage.graphs.base.static_sparse_graph cimport free_short_digraph
75
78
  from sage.graphs.base.static_sparse_graph cimport out_degree
76
- from sage.graphs.base.c_graph cimport CGraph, CGraphBackend
77
79
  from sage.graphs.graph_decompositions.slice_decomposition cimport \
78
80
  extended_lex_BFS
79
81
 
@@ -754,8 +756,7 @@ def lex_M(self, triangulation=False, labels=False, initial_vertex=None, algorith
754
756
  - ``labels`` -- boolean (default: ``False``); whether to return the labels
755
757
  assigned to each vertex
756
758
 
757
- - ``initial_vertex`` -- (default: ``None``) the first vertex to
758
- consider
759
+ - ``initial_vertex`` -- (default: ``None``); the first vertex to consider
759
760
 
760
761
  - ``algorithm`` -- string (default: ``None``); one of the following
761
762
  algorithms:
@@ -821,6 +822,18 @@ def lex_M(self, triangulation=False, labels=False, initial_vertex=None, algorith
821
822
  sage: g.lex_M()
822
823
  [6, 4, 5, 3, 2, 1]
823
824
 
825
+ The ordering depends on the initial vertex::
826
+
827
+ sage: G = graphs.HouseGraph()
828
+ sage: G.lex_M(algorithm='lex_M_slow', initial_vertex=0)
829
+ [4, 3, 2, 1, 0]
830
+ sage: G.lex_M(algorithm='lex_M_slow', initial_vertex=2)
831
+ [1, 4, 3, 0, 2]
832
+ sage: G.lex_M(algorithm='lex_M_fast', initial_vertex=0)
833
+ [4, 3, 2, 1, 0]
834
+ sage: G.lex_M(algorithm='lex_M_fast', initial_vertex=2)
835
+ [1, 4, 3, 0, 2]
836
+
824
837
  TESTS:
825
838
 
826
839
  ``'lex_M_fast'`` cannot return labels::
@@ -1128,6 +1141,18 @@ def lex_M_fast(G, triangulation=False, initial_vertex=None):
1128
1141
  Traceback (most recent call last):
1129
1142
  ...
1130
1143
  ValueError: 'foo' is not a graph vertex
1144
+
1145
+ Immutable graphs::
1146
+
1147
+ sage: from sage.graphs.traversals import lex_M_fast
1148
+ sage: G = graphs.RandomGNP(10, .7)
1149
+ sage: G._backend
1150
+ <sage.graphs.base.sparse_graph.SparseGraphBackend ...>
1151
+ sage: H = Graph(G, immutable=True)
1152
+ sage: H._backend
1153
+ <sage.graphs.base.static_sparse_backend.StaticSparseBackend ...>
1154
+ sage: lex_M_fast(G) == lex_M_fast(H)
1155
+ True
1131
1156
  """
1132
1157
  if initial_vertex is not None and initial_vertex not in G:
1133
1158
  raise ValueError("'{}' is not a graph vertex".format(initial_vertex))
@@ -1137,16 +1162,19 @@ def lex_M_fast(G, triangulation=False, initial_vertex=None):
1137
1162
 
1138
1163
  # ==> Initialization
1139
1164
 
1140
- cdef list int_to_v = list(G)
1141
1165
  cdef int i, j, k, v, w, z
1142
1166
 
1143
- if initial_vertex is not None:
1144
- # We put the initial vertex at first place in the ordering
1145
- i = int_to_v.index(initial_vertex)
1146
- int_to_v[0], int_to_v[i] = int_to_v[i], int_to_v[0]
1147
-
1167
+ cdef list int_to_v
1168
+ cdef StaticSparseCGraph cg
1148
1169
  cdef short_digraph sd
1149
- init_short_digraph(sd, G, edge_labelled=False, vertex_list=int_to_v)
1170
+ if isinstance(G, StaticSparseBackend):
1171
+ cg = <StaticSparseCGraph> G._cg
1172
+ sd = <short_digraph> cg.g
1173
+ int_to_v = cg._vertex_to_labels
1174
+ else:
1175
+ int_to_v = list(G)
1176
+ init_short_digraph(sd, G, edge_labelled=False, vertex_list=int_to_v)
1177
+
1150
1178
  cdef uint32_t* p_tmp
1151
1179
  cdef uint32_t* p_end
1152
1180
 
@@ -1154,6 +1182,11 @@ def lex_M_fast(G, triangulation=False, initial_vertex=None):
1154
1182
 
1155
1183
  cdef list unnumbered_vertices = list(range(n))
1156
1184
 
1185
+ if initial_vertex is not None:
1186
+ # We put the initial vertex at the first place
1187
+ i = int_to_v.index(initial_vertex)
1188
+ unnumbered_vertices[0], unnumbered_vertices[i] = unnumbered_vertices[i], unnumbered_vertices[0]
1189
+
1157
1190
  cdef MemoryAllocator mem = MemoryAllocator()
1158
1191
  cdef int* label = <int*>mem.allocarray(n, sizeof(int))
1159
1192
  cdef int* alpha = <int*>mem.allocarray(n, sizeof(int))
@@ -1238,7 +1271,8 @@ def lex_M_fast(G, triangulation=False, initial_vertex=None):
1238
1271
  k += 2
1239
1272
  label[w] = k
1240
1273
 
1241
- free_short_digraph(sd)
1274
+ if not isinstance(G, StaticSparseBackend):
1275
+ free_short_digraph(sd)
1242
1276
 
1243
1277
  cdef list ordering = [int_to_v[alpha[i]] for i in range(n)]
1244
1278
 
@@ -1355,9 +1389,9 @@ def maximum_cardinality_search(G, reverse=False, tree=False, initial_vertex=None
1355
1389
  sage: G.maximum_cardinality_search(initial_vertex=0)
1356
1390
  [3, 2, 1, 0]
1357
1391
  sage: G.maximum_cardinality_search(initial_vertex=1)
1358
- [0, 3, 2, 1]
1392
+ [3, 2, 0, 1]
1359
1393
  sage: G.maximum_cardinality_search(initial_vertex=2)
1360
- [0, 1, 3, 2]
1394
+ [0, 3, 1, 2]
1361
1395
  sage: G.maximum_cardinality_search(initial_vertex=3)
1362
1396
  [0, 1, 2, 3]
1363
1397
  sage: G.maximum_cardinality_search(initial_vertex=3, reverse=True)
@@ -1389,6 +1423,17 @@ def maximum_cardinality_search(G, reverse=False, tree=False, initial_vertex=None
1389
1423
  Traceback (most recent call last):
1390
1424
  ...
1391
1425
  ValueError: vertex (17) is not a vertex of the graph
1426
+
1427
+ Immutable graphs;:
1428
+
1429
+ sage: G = graphs.RandomGNP(10, .7)
1430
+ sage: G._backend
1431
+ <sage.graphs.base.sparse_graph.SparseGraphBackend ...>
1432
+ sage: H = Graph(G, immutable=True)
1433
+ sage: H._backend
1434
+ <sage.graphs.base.static_sparse_backend.StaticSparseBackend ...>
1435
+ sage: G.maximum_cardinality_search() == H.maximum_cardinality_search()
1436
+ True
1392
1437
  """
1393
1438
  if tree:
1394
1439
  from sage.graphs.digraph import DiGraph
@@ -1399,17 +1444,27 @@ def maximum_cardinality_search(G, reverse=False, tree=False, initial_vertex=None
1399
1444
  if N == 1:
1400
1445
  return (list(G), DiGraph(G)) if tree else list(G)
1401
1446
 
1402
- cdef list int_to_vertex = list(G)
1447
+ cdef list int_to_vertex
1448
+ cdef StaticSparseCGraph cg
1449
+ cdef short_digraph sd
1450
+ if isinstance(G, StaticSparseBackend):
1451
+ cg = <StaticSparseCGraph> G._cg
1452
+ sd = <short_digraph> cg.g
1453
+ int_to_vertex = cg._vertex_to_labels
1454
+ else:
1455
+ int_to_vertex = list(G)
1456
+ init_short_digraph(sd, G, edge_labelled=False, vertex_list=int_to_vertex)
1403
1457
 
1404
1458
  if initial_vertex is None:
1405
1459
  initial_vertex = 0
1406
1460
  elif initial_vertex in G:
1407
- initial_vertex = int_to_vertex.index(initial_vertex)
1461
+ if isinstance(G, StaticSparseBackend):
1462
+ initial_vertex = cg._vertex_to_int[initial_vertex]
1463
+ else:
1464
+ initial_vertex = int_to_vertex.index(initial_vertex)
1408
1465
  else:
1409
1466
  raise ValueError("vertex ({0}) is not a vertex of the graph".format(initial_vertex))
1410
1467
 
1411
- cdef short_digraph sd
1412
- init_short_digraph(sd, G, edge_labelled=False, vertex_list=int_to_vertex)
1413
1468
  cdef uint32_t** p_vertices = sd.neighbors
1414
1469
  cdef uint32_t* p_tmp
1415
1470
  cdef uint32_t* p_end
@@ -1421,27 +1476,18 @@ def maximum_cardinality_search(G, reverse=False, tree=False, initial_vertex=None
1421
1476
 
1422
1477
  cdef int i, u, v
1423
1478
  for i in range(N):
1424
- weight[i] = 0
1425
- seen[i] = False
1426
1479
  pred[i] = i
1427
1480
 
1428
- # We emulate a heap with decrease key operation using a priority queue.
1429
- # A vertex can be inserted multiple times (up to its degree), but only the
1430
- # first extraction (with maximum weight) matters. The size of the queue will
1431
- # never exceed O(m).
1432
- cdef priority_queue[pair[int, int]] pq
1433
- pq.push((0, initial_vertex))
1481
+ # We emulate a max-heap data structure using a min-heap with negative values
1482
+ cdef PairingHeap_of_n_integers P = PairingHeap_of_n_integers(N)
1483
+ P.push(initial_vertex, 0)
1434
1484
 
1435
1485
  # The ordering alpha is feed in reversed order and revert afterword
1436
1486
  cdef list alpha = []
1437
1487
 
1438
- while not pq.empty():
1439
- _, u = pq.top()
1440
- pq.pop()
1441
- if seen[u]:
1442
- # We use a lazy decrease key mode, so u can be several times in pq
1443
- continue
1444
-
1488
+ while P:
1489
+ u = P.top_item()
1490
+ P.pop()
1445
1491
  alpha.append(int_to_vertex[u])
1446
1492
  seen[u] = True
1447
1493
 
@@ -1451,12 +1497,13 @@ def maximum_cardinality_search(G, reverse=False, tree=False, initial_vertex=None
1451
1497
  v = p_tmp[0]
1452
1498
  if not seen[v]:
1453
1499
  weight[v] += 1
1454
- pq.push((weight[v], v))
1500
+ P.decrease(v, -weight[v])
1455
1501
  if pred[v] == v:
1456
1502
  pred[v] = u
1457
1503
  p_tmp += 1
1458
1504
 
1459
- free_short_digraph(sd)
1505
+ if not isinstance(G, StaticSparseBackend):
1506
+ free_short_digraph(sd)
1460
1507
 
1461
1508
  if len(alpha) < N:
1462
1509
  raise ValueError("the input graph is not connected")
@@ -1763,16 +1810,18 @@ def maximum_cardinality_search_M(G, initial_vertex=None):
1763
1810
  Traceback (most recent call last):
1764
1811
  ...
1765
1812
  ValueError: vertex (17) is not a vertex of the graph
1766
- """
1767
- cdef list int_to_vertex = list(G)
1768
1813
 
1769
- if initial_vertex is None:
1770
- initial_vertex = 0
1771
- elif initial_vertex in G:
1772
- initial_vertex = int_to_vertex.index(initial_vertex)
1773
- else:
1774
- raise ValueError("vertex ({0}) is not a vertex of the graph".format(initial_vertex))
1814
+ Immutable graphs::
1775
1815
 
1816
+ sage: G = graphs.RandomGNP(10, .7)
1817
+ sage: G._backend
1818
+ <sage.graphs.base.sparse_graph.SparseGraphBackend ...>
1819
+ sage: H = Graph(G, immutable=True)
1820
+ sage: H._backend
1821
+ <sage.graphs.base.static_sparse_backend.StaticSparseBackend ...>
1822
+ sage: G.maximum_cardinality_search_M() == H.maximum_cardinality_search_M()
1823
+ True
1824
+ """
1776
1825
  cdef int N = G.order()
1777
1826
  if not N:
1778
1827
  return ([], [], [])
@@ -1782,8 +1831,26 @@ def maximum_cardinality_search_M(G, initial_vertex=None):
1782
1831
  # Copying the whole graph to obtain the list of neighbors quicker than by
1783
1832
  # calling out_neighbors. This data structure is well documented in the
1784
1833
  # module sage.graphs.base.static_sparse_graph
1834
+ cdef list int_to_vertex
1835
+ cdef StaticSparseCGraph cg
1785
1836
  cdef short_digraph sd
1786
- init_short_digraph(sd, G, edge_labelled=False, vertex_list=int_to_vertex)
1837
+ if isinstance(G, StaticSparseBackend):
1838
+ cg = <StaticSparseCGraph> G._cg
1839
+ sd = <short_digraph> cg.g
1840
+ int_to_vertex = cg._vertex_to_labels
1841
+ else:
1842
+ int_to_vertex = list(G)
1843
+ init_short_digraph(sd, G, edge_labelled=False, vertex_list=int_to_vertex)
1844
+
1845
+ if initial_vertex is None:
1846
+ initial_vertex = 0
1847
+ elif initial_vertex in G:
1848
+ if isinstance(G, StaticSparseBackend):
1849
+ initial_vertex = cg._vertex_to_int[initial_vertex]
1850
+ else:
1851
+ initial_vertex = int_to_vertex.index(initial_vertex)
1852
+ else:
1853
+ raise ValueError("vertex ({0}) is not a vertex of the graph".format(initial_vertex))
1787
1854
 
1788
1855
  cdef MemoryAllocator mem = MemoryAllocator()
1789
1856
  cdef int* alpha = <int*>mem.calloc(N, sizeof(int))
@@ -1795,7 +1862,8 @@ def maximum_cardinality_search_M(G, initial_vertex=None):
1795
1862
  maximum_cardinality_search_M_short_digraph(sd, initial_vertex, alpha, alpha_inv, F, X)
1796
1863
  sig_off()
1797
1864
 
1798
- free_short_digraph(sd)
1865
+ if not isinstance(G, StaticSparseBackend):
1866
+ free_short_digraph(sd)
1799
1867
 
1800
1868
  cdef int u, v
1801
1869
  return ([int_to_vertex[alpha[u]] for u in range(N)],
Binary file
Binary file
@@ -340,8 +340,7 @@ class FreeKnotInfoMonoid(IndexedFreeAbelianMonoid):
340
340
  if SymmetryMutant.concordance_inverse in hp_sym.keys():
341
341
  hp_sym[SymmetryMutant.concordance_inverse] = hpm
342
342
 
343
- for sym_mut in hp_sym.keys():
344
- hps = hp_sym[sym_mut]
343
+ for sym_mut, hps in hp_sym.items():
345
344
  if hps.divides(hpoly):
346
345
  Kgen = self((K, sym_mut))
347
346
  h = hpoly // hps
@@ -376,7 +375,7 @@ class FreeKnotInfoMonoid(IndexedFreeAbelianMonoid):
376
375
  sage: from sage.knots.free_knotinfo_monoid import FreeKnotInfoMonoid
377
376
  sage: FKIM = FreeKnotInfoMonoid()
378
377
  sage: K = KnotInfo.K5_1.link().mirror_image()
379
- sage: FKIM._from_knot(K) # needs sage.modules
378
+ sage: FKIM._from_knot(K) # needs sage.groups sage.modules
380
379
  (KnotInfo['K5_1m'],)
381
380
  """
382
381
  hp = knot.homfly_polynomial(normalization='vz')
sage/knots/knot.py CHANGED
@@ -293,7 +293,7 @@ class Knot(Link, Element, metaclass=InheritComparisonClasscallMetaclass):
293
293
  crossing = i
294
294
  break
295
295
  if not string_found:
296
- for i in range(0, crossing):
296
+ for i in range(crossing):
297
297
  if abs(b[i]) == string or abs(b[i]) == string - 1:
298
298
  string_found = True
299
299
  crossing = i
sage/knots/knotinfo.py CHANGED
@@ -18,7 +18,7 @@ package using
18
18
  This will install a `Python wrapper <https://github.com/soehms/database_knotinfo#readme>`__
19
19
  for the original databases in Sage. This wrapper perfoms an automatic progress
20
20
  of version numbers. For more details and further install instructions please see
21
- the correspondig web-page.
21
+ the corresponding web-page.
22
22
 
23
23
  To perform all the doctests concerning the usage of the database on the installation
24
24
  add the option ``-c``. In this case (for instance ``sage -f -c database_knotinfo``)
@@ -219,7 +219,7 @@ AUTHORS:
219
219
  - Sebastian Oehms August 2020: initial version
220
220
  - Sebastian Oehms June 2022: add :meth:`conway_polynomial` and :meth:`khovanov_polynomial` (:issue:`33969`)
221
221
 
222
- Thanks to Chuck Livingston and Allison Moore for their support. For further acknowledgments see the correspondig hompages.
222
+ Thanks to Chuck Livingston and Allison Moore for their support. For further acknowledgments see the corresponding hompages.
223
223
  """
224
224
 
225
225
 
@@ -230,7 +230,7 @@ Thanks to Chuck Livingston and Allison Moore for their support. For further ackn
230
230
  # it under the terms of the GNU General Public License as published by
231
231
  # the Free Software Foundation, either version 2 of the License, or
232
232
  # (at your option) any later version.
233
- # http://www.gnu.org/licenses/
233
+ # https://www.gnu.org/licenses/
234
234
  ##############################################################################
235
235
 
236
236
 
@@ -1428,7 +1428,7 @@ class KnotInfoBase(Enum):
1428
1428
 
1429
1429
  sage: H = KnotInfo.L11n459_1_1_1.homfly_polynomial() # optional - database_knotinfo
1430
1430
  sage: all(L.homfly_polynomial() == L.link().homfly_polynomial(normalization='vz')\
1431
- for L in KnotInfo if L.crossing_number() < 7)
1431
+ ....: for L in KnotInfo if L.crossing_number() < 7)
1432
1432
  True
1433
1433
 
1434
1434
  REFERENCES: