passagemath-gap 10.5.43__tar.gz → 10.6.1rc2__tar.gz

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 (115) hide show
  1. {passagemath_gap-10.5.43/passagemath_gap.egg-info → passagemath_gap-10.6.1rc2}/PKG-INFO +6 -7
  2. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/README.rst +1 -1
  3. passagemath_gap-10.6.1rc2/VERSION.txt +1 -0
  4. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2/passagemath_gap.egg-info}/PKG-INFO +6 -7
  5. passagemath_gap-10.6.1rc2/passagemath_gap.egg-info/requires.txt +8 -0
  6. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/pyproject.toml +8 -9
  7. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/sage/coding/codecan/autgroup_can_label.pyx +34 -25
  8. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/sage/coding/codecan/codecan.pxd +2 -2
  9. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/sage/coding/codecan/codecan.pyx +25 -18
  10. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/sage/combinat/enumeration_mod_permgroup.pyx +3 -3
  11. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/sage/combinat/root_system/reflection_group_complex.py +11 -12
  12. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/sage/combinat/root_system/weyl_group.py +2 -2
  13. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/sage/groups/class_function.py +0 -1
  14. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/sage/groups/libgap_wrapper.pyx +1 -1
  15. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/sage/groups/matrix_gps/binary_dihedral.py +1 -1
  16. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/sage/groups/perm_gps/permgroup.py +17 -48
  17. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/sage/groups/perm_gps/permgroup_element.pyx +25 -9
  18. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/sage/interfaces/gap.py +12 -3
  19. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/sage/libs/gap/gap_includes.pxd +1 -1
  20. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/sage/rings/species.py +116 -60
  21. passagemath_gap-10.5.43/VERSION.txt +0 -1
  22. passagemath_gap-10.5.43/passagemath_gap.egg-info/requires.txt +0 -8
  23. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/MANIFEST.in +0 -0
  24. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/passagemath_gap.egg-info/SOURCES.txt +0 -0
  25. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/passagemath_gap.egg-info/dependency_links.txt +0 -0
  26. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/passagemath_gap.egg-info/top_level.txt +0 -0
  27. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/repair_wheel.py +0 -0
  28. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/sage/all__sagemath_gap.py +0 -0
  29. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/sage/coding/all__sagemath_gap.py +0 -0
  30. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/sage/coding/codecan/all.py +0 -0
  31. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/sage/coding/codecan/all__sagemath_gap.py +0 -0
  32. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/sage/coding/codecan/meson.build +0 -0
  33. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/sage/combinat/all__sagemath_gap.py +0 -0
  34. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/sage/combinat/enumeration_mod_permgroup.pxd +0 -0
  35. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/sage/combinat/root_system/all__sagemath_gap.py +0 -0
  36. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/sage/combinat/root_system/reflection_group_c.pyx +0 -0
  37. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/sage/combinat/root_system/reflection_group_element.pxd +0 -0
  38. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/sage/combinat/root_system/reflection_group_element.pyx +0 -0
  39. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/sage/combinat/root_system/reflection_group_real.py +0 -0
  40. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/sage/ext_data/all__sagemath_gap.py +0 -0
  41. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/sage/ext_data/gap/console.g +0 -0
  42. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/sage/ext_data/gap/joyner/hurwitz_crv_rr_sp.gap +0 -0
  43. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/sage/ext_data/gap/joyner/modular_crv_rr_sp.gap +0 -0
  44. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/sage/ext_data/gap/sage.g +0 -0
  45. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/sage/geometry/all__sagemath_gap.py +0 -0
  46. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/sage/geometry/ribbon_graph.py +0 -0
  47. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/sage/graphs/spanning_tree.pyx +0 -0
  48. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/sage/groups/abelian_gps/abelian_aut.py +0 -0
  49. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/sage/groups/abelian_gps/abelian_group_gap.py +0 -0
  50. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/sage/groups/abelian_gps/abelian_group_morphism.py +0 -0
  51. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/sage/groups/abelian_gps/all__sagemath_gap.py +0 -0
  52. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/sage/groups/all__sagemath_gap.py +0 -0
  53. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/sage/groups/conjugacy_classes.py +0 -0
  54. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/sage/groups/galois_group_perm.py +0 -0
  55. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/sage/groups/libgap_group.py +0 -0
  56. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/sage/groups/libgap_mixin.py +0 -0
  57. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/sage/groups/libgap_morphism.py +0 -0
  58. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/sage/groups/libgap_wrapper.pxd +0 -0
  59. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/sage/groups/matrix_gps/all__sagemath_gap.py +0 -0
  60. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/sage/groups/matrix_gps/finitely_generated_gap.py +0 -0
  61. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/sage/groups/matrix_gps/group_element_gap.pxd +0 -0
  62. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/sage/groups/matrix_gps/group_element_gap.pyx +0 -0
  63. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/sage/groups/matrix_gps/heisenberg.py +0 -0
  64. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/sage/groups/matrix_gps/isometries.py +0 -0
  65. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/sage/groups/matrix_gps/linear_gap.py +0 -0
  66. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/sage/groups/matrix_gps/matrix_group_gap.py +0 -0
  67. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/sage/groups/matrix_gps/named_group_gap.py +0 -0
  68. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/sage/groups/matrix_gps/orthogonal_gap.py +0 -0
  69. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/sage/groups/matrix_gps/symplectic_gap.py +0 -0
  70. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/sage/groups/matrix_gps/unitary_gap.py +0 -0
  71. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/sage/groups/perm_gps/all.py +0 -0
  72. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/sage/groups/perm_gps/constructor.py +0 -0
  73. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/sage/groups/perm_gps/cubegroup.py +0 -0
  74. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/sage/groups/perm_gps/meson.build +0 -0
  75. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/sage/groups/perm_gps/partn_ref/all__sagemath_gap.py +0 -0
  76. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/sage/groups/perm_gps/partn_ref2/all.py +0 -0
  77. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/sage/groups/perm_gps/partn_ref2/meson.build +0 -0
  78. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/sage/groups/perm_gps/partn_ref2/refinement_generic.h +0 -0
  79. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/sage/groups/perm_gps/partn_ref2/refinement_generic.pxd +0 -0
  80. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/sage/groups/perm_gps/partn_ref2/refinement_generic.pyx +0 -0
  81. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/sage/groups/perm_gps/permgroup_element.pxd +0 -0
  82. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/sage/groups/perm_gps/permgroup_morphism.py +0 -0
  83. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/sage/groups/perm_gps/permgroup_named.py +0 -0
  84. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/sage/groups/perm_gps/permutation_groups_catalog.py +0 -0
  85. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/sage/groups/perm_gps/symgp_conjugacy_class.py +0 -0
  86. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/sage/groups/semimonomial_transformations/all.py +0 -0
  87. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/sage/groups/semimonomial_transformations/semimonomial_transformation.pxd +0 -0
  88. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/sage/interfaces/all__sagemath_gap.py +0 -0
  89. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/sage/interfaces/gap3.py +0 -0
  90. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/sage/interfaces/gap_workspace.py +0 -0
  91. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/sage/libs/all__sagemath_gap.py +0 -0
  92. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/sage/libs/gap/all.py +0 -0
  93. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/sage/libs/gap/all_documented_functions.py +0 -0
  94. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/sage/libs/gap/assigned_names.py +0 -0
  95. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/sage/libs/gap/context_managers.py +0 -0
  96. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/sage/libs/gap/element.pxd +0 -0
  97. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/sage/libs/gap/element.pyx +0 -0
  98. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/sage/libs/gap/gap_functions.py +0 -0
  99. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/sage/libs/gap/gap_globals.py +0 -0
  100. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/sage/libs/gap/libgap.pyx +0 -0
  101. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/sage/libs/gap/meson.build +0 -0
  102. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/sage/libs/gap/operations.py +0 -0
  103. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/sage/libs/gap/sage.gaprc +0 -0
  104. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/sage/libs/gap/saved_workspace.py +0 -0
  105. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/sage/libs/gap/test.py +0 -0
  106. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/sage/libs/gap/test_long.py +0 -0
  107. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/sage/libs/gap/util.pxd +0 -0
  108. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/sage/libs/gap/util.pyx +0 -0
  109. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/sage/matrix/all__sagemath_gap.py +0 -0
  110. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/sage/matrix/matrix_gap.pxd +0 -0
  111. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/sage/matrix/matrix_gap.pyx +0 -0
  112. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/sage/rings/all__sagemath_gap.py +0 -0
  113. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/sage/rings/universal_cyclotomic_field.py +0 -0
  114. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/setup.cfg +0 -0
  115. {passagemath_gap-10.5.43 → passagemath_gap-10.6.1rc2}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: passagemath-gap
3
- Version: 10.5.43
3
+ Version: 10.6.1rc2
4
4
  Summary: passagemath: Computational Group Theory with GAP
5
5
  Author-email: The Sage Developers <sage-support@googlegroups.com>
6
6
  Maintainer: Matthias Köppe, passagemath contributors
@@ -19,20 +19,19 @@ Classifier: Intended Audience :: Science/Research
19
19
  Classifier: Operating System :: POSIX
20
20
  Classifier: Operating System :: MacOS :: MacOS X
21
21
  Classifier: Programming Language :: Python :: 3 :: Only
22
- Classifier: Programming Language :: Python :: 3.9
23
22
  Classifier: Programming Language :: Python :: 3.10
24
23
  Classifier: Programming Language :: Python :: 3.11
25
24
  Classifier: Programming Language :: Python :: 3.12
26
25
  Classifier: Programming Language :: Python :: 3.13
27
26
  Classifier: Programming Language :: Python :: Implementation :: CPython
28
27
  Classifier: Topic :: Scientific/Engineering :: Mathematics
29
- Requires-Python: <3.14,>=3.9
28
+ Requires-Python: <3.14,>=3.10
30
29
  Description-Content-Type: text/x-rst
31
30
  Requires-Dist: cysignals!=1.12.0,>=1.11.2
32
31
  Requires-Dist: memory_allocator
33
- Requires-Dist: passagemath-conf~=10.5.43.0
34
- Requires-Dist: passagemath-environment~=10.5.43.0
35
- Requires-Dist: passagemath-categories~=10.5.43.0
32
+ Requires-Dist: passagemath-conf==10.6.1rc2
33
+ Requires-Dist: passagemath-environment==10.6.1rc2
34
+ Requires-Dist: passagemath-categories==10.6.1rc2
36
35
  Provides-Extra: test
37
36
  Requires-Dist: passagemath-repl; extra == "test"
38
37
 
@@ -77,7 +76,7 @@ passagemath attempts to support all major Linux distributions and recent version
77
76
  macOS. Use on Windows currently requires the use of Windows Subsystem for Linux or
78
77
  virtualization.
79
78
 
80
- Complete sets of binary wheels are provided on PyPI for Python versions 3.9.x-3.12.x.
79
+ Complete sets of binary wheels are provided on PyPI for Python versions 3.10.x-3.13.x.
81
80
  Python 3.13.x is also supported, but some third-party packages are still missing wheels,
82
81
  so compilation from source is triggered for those.
83
82
 
@@ -39,7 +39,7 @@ passagemath attempts to support all major Linux distributions and recent version
39
39
  macOS. Use on Windows currently requires the use of Windows Subsystem for Linux or
40
40
  virtualization.
41
41
 
42
- Complete sets of binary wheels are provided on PyPI for Python versions 3.9.x-3.12.x.
42
+ Complete sets of binary wheels are provided on PyPI for Python versions 3.10.x-3.13.x.
43
43
  Python 3.13.x is also supported, but some third-party packages are still missing wheels,
44
44
  so compilation from source is triggered for those.
45
45
 
@@ -0,0 +1 @@
1
+ 10.6.1.rc2
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: passagemath-gap
3
- Version: 10.5.43
3
+ Version: 10.6.1rc2
4
4
  Summary: passagemath: Computational Group Theory with GAP
5
5
  Author-email: The Sage Developers <sage-support@googlegroups.com>
6
6
  Maintainer: Matthias Köppe, passagemath contributors
@@ -19,20 +19,19 @@ Classifier: Intended Audience :: Science/Research
19
19
  Classifier: Operating System :: POSIX
20
20
  Classifier: Operating System :: MacOS :: MacOS X
21
21
  Classifier: Programming Language :: Python :: 3 :: Only
22
- Classifier: Programming Language :: Python :: 3.9
23
22
  Classifier: Programming Language :: Python :: 3.10
24
23
  Classifier: Programming Language :: Python :: 3.11
25
24
  Classifier: Programming Language :: Python :: 3.12
26
25
  Classifier: Programming Language :: Python :: 3.13
27
26
  Classifier: Programming Language :: Python :: Implementation :: CPython
28
27
  Classifier: Topic :: Scientific/Engineering :: Mathematics
29
- Requires-Python: <3.14,>=3.9
28
+ Requires-Python: <3.14,>=3.10
30
29
  Description-Content-Type: text/x-rst
31
30
  Requires-Dist: cysignals!=1.12.0,>=1.11.2
32
31
  Requires-Dist: memory_allocator
33
- Requires-Dist: passagemath-conf~=10.5.43.0
34
- Requires-Dist: passagemath-environment~=10.5.43.0
35
- Requires-Dist: passagemath-categories~=10.5.43.0
32
+ Requires-Dist: passagemath-conf==10.6.1rc2
33
+ Requires-Dist: passagemath-environment==10.6.1rc2
34
+ Requires-Dist: passagemath-categories==10.6.1rc2
36
35
  Provides-Extra: test
37
36
  Requires-Dist: passagemath-repl; extra == "test"
38
37
 
@@ -77,7 +76,7 @@ passagemath attempts to support all major Linux distributions and recent version
77
76
  macOS. Use on Windows currently requires the use of Windows Subsystem for Linux or
78
77
  virtualization.
79
78
 
80
- Complete sets of binary wheels are provided on PyPI for Python versions 3.9.x-3.12.x.
79
+ Complete sets of binary wheels are provided on PyPI for Python versions 3.10.x-3.13.x.
81
80
  Python 3.13.x is also supported, but some third-party packages are still missing wheels,
82
81
  so compilation from source is triggered for those.
83
82
 
@@ -0,0 +1,8 @@
1
+ cysignals!=1.12.0,>=1.11.2
2
+ memory_allocator
3
+ passagemath-conf==10.6.1rc2
4
+ passagemath-environment==10.6.1rc2
5
+ passagemath-categories==10.6.1rc2
6
+
7
+ [test]
8
+ passagemath-repl
@@ -3,10 +3,10 @@
3
3
  # Minimum requirements for the build system to execute.
4
4
  requires = [
5
5
  'setuptools >= 77.0.0',
6
- 'passagemath-setup ~= 10.5.43.0',
7
- 'passagemath-environment ~= 10.5.43.0',
8
- 'passagemath-categories ~= 10.5.43.0',
9
- 'passagemath-modules ~= 10.5.43.0',
6
+ 'passagemath-setup == 10.6.1rc2',
7
+ 'passagemath-environment == 10.6.1rc2',
8
+ 'passagemath-categories == 10.6.1rc2',
9
+ 'passagemath-modules == 10.6.1rc2',
10
10
  'cython >=3.0, != 3.0.3, <4.0', 'cython >=3.0.8,<3.1.0',
11
11
  'gmpy2 ~=2.1.b999',
12
12
  'cysignals >=1.11.2, != 1.12.0',
@@ -21,9 +21,9 @@ description = "passagemath: Computational Group Theory with GAP"
21
21
  dependencies = [
22
22
  'cysignals >=1.11.2, != 1.12.0',
23
23
  'memory_allocator',
24
- 'passagemath-conf ~= 10.5.43.0',
25
- 'passagemath-environment ~= 10.5.43.0',
26
- 'passagemath-categories ~= 10.5.43.0',
24
+ 'passagemath-conf == 10.6.1rc2',
25
+ 'passagemath-environment == 10.6.1rc2',
26
+ 'passagemath-categories == 10.6.1rc2',
27
27
  ]
28
28
  dynamic = ["version"]
29
29
  license = "GPL-2.0-or-later"
@@ -39,7 +39,6 @@ classifiers = [
39
39
  "Operating System :: POSIX",
40
40
  "Operating System :: MacOS :: MacOS X",
41
41
  "Programming Language :: Python :: 3 :: Only",
42
- "Programming Language :: Python :: 3.9",
43
42
  "Programming Language :: Python :: 3.10",
44
43
  "Programming Language :: Python :: 3.11",
45
44
  "Programming Language :: Python :: 3.12",
@@ -47,7 +46,7 @@ classifiers = [
47
46
  "Programming Language :: Python :: Implementation :: CPython",
48
47
  "Topic :: Scientific/Engineering :: Mathematics",
49
48
  ]
50
- requires-python = ">=3.9, <3.14"
49
+ requires-python = ">=3.10, <3.14"
51
50
 
52
51
  [project.urls]
53
52
  "release notes" = "https://github.com/passagemath/passagemath/releases"
@@ -246,7 +246,7 @@ class LinearCodeAutGroupCanLabel:
246
246
  z.sort()
247
247
  z = [i for (p, i) in z]
248
248
 
249
- normalization_factors = [ F.one() ] * mat.ncols()
249
+ normalization_factors = [F.one()] * mat.ncols()
250
250
  if algorithm_type == "permutational":
251
251
  for c in col_list:
252
252
  c.set_immutable()
@@ -258,20 +258,20 @@ class LinearCodeAutGroupCanLabel:
258
258
 
259
259
  normalization = S(v=normalization_factors)
260
260
  normalization_inverse = normalization ** (-1)
261
- col_set = list({col_list[y] for y in nz })
261
+ col_set = list({col_list[y] for y in nz})
262
262
  col2pos = []
263
263
  col2P = []
264
264
  for c in col_set:
265
- X = [(pos2P[y], y) for y in range(mat.ncols()) if col_list[y] == c ]
265
+ X = [(pos2P[y], y) for y in range(mat.ncols()) if col_list[y] == c]
266
266
  X.sort()
267
- col2pos.append([b for (a, b) in X ])
268
- col2P.append([a for (a, b) in X ])
267
+ col2pos.append([b for _, b in X])
268
+ col2P.append([a for a, _ in X])
269
269
 
270
270
  zipped = sorted(zip(col2P, col_set, col2pos))
271
271
 
272
- col2P = [qty for (qty, c, pos) in zipped]
273
- col_set = [c for (qty, c, pos) in zipped]
274
- col2pos = [pos for (qty, c, pos) in zipped]
272
+ col2P = [qty for qty, c, pos in zipped]
273
+ col_set = [c for qty, c, pos in zipped]
274
+ col2pos = [pos for qty, c, pos in zipped]
275
275
  P_refined = []
276
276
  p = [0]
277
277
  act_qty = col2P[0]
@@ -291,7 +291,9 @@ class LinearCodeAutGroupCanLabel:
291
291
  # the dimension of the dual code
292
292
  # in this case we work with the code itself.
293
293
  pr = PartitionRefinementLinearCode(len(col_set),
294
- matrix(col_set).transpose(), P=P_refined, algorithm_type=algorithm_type)
294
+ matrix(col_set).transpose(),
295
+ P=P_refined,
296
+ algorithm_type=algorithm_type)
295
297
 
296
298
  # this command allows you some advanced debugging
297
299
  # it prints the backtrack tree -> must be activated when installing
@@ -299,8 +301,11 @@ class LinearCodeAutGroupCanLabel:
299
301
 
300
302
  can_transp = pr.get_transporter()
301
303
  can_col_set = pr.get_canonical_form().columns()
302
- self._PGammaL_autom_gens = self._compute_PGammaL_automs(pr.get_autom_gens(),
303
- normalization, normalization_inverse, col2pos)
304
+ self._PGammaL_autom_gens = self._compute_PGammaL_automs(
305
+ pr.get_autom_gens(),
306
+ normalization,
307
+ normalization_inverse, col2pos
308
+ )
304
309
  self._PGammaL_autom_size = pr.get_autom_order_permutation()
305
310
  self._PGammaL_autom_size *= pr.get_autom_order_inner_stabilizer()
306
311
  self._full_autom_order = self._PGammaL_autom_size
@@ -333,28 +338,27 @@ class LinearCodeAutGroupCanLabel:
333
338
  A.append(S_short(perm=_cyclic_shift(n, p)))
334
339
  self._full_autom_order *= factorial(len(p))
335
340
  self._PGammaL_autom_size = self._full_autom_order / (len(F) - 1)
336
- self._PGammaL_autom_gens = self._compute_PGammaL_automs(A,
337
- normalization, normalization_inverse, col2pos)
341
+ self._PGammaL_autom_gens = self._compute_PGammaL_automs(
342
+ A, normalization, normalization_inverse, col2pos)
338
343
  else:
339
344
  # use the dual code for the computations
340
345
  # this might have zero columns or multiple columns, hence
341
346
  # we call this algorithm again.
342
347
  short_dual_code = LinearCode(matrix(col_set).transpose()).dual_code()
343
348
  agcl = LinearCodeAutGroupCanLabel(short_dual_code,
344
- P=P_refined, algorithm_type=algorithm_type)
349
+ P=P_refined,
350
+ algorithm_type=algorithm_type)
345
351
  can_transp = agcl.get_transporter()
346
352
  can_transp.invert_v()
347
353
  can_col_set = agcl.get_canonical_form().parity_check_matrix().columns()
348
354
  A = agcl.get_autom_gens()
349
355
  for a in A:
350
356
  a.invert_v()
351
- self._PGammaL_autom_gens = self._compute_PGammaL_automs(A,
352
- normalization, normalization_inverse, col2pos)
357
+ self._PGammaL_autom_gens = self._compute_PGammaL_automs(
358
+ A, normalization, normalization_inverse, col2pos)
353
359
  self._PGammaL_autom_size = agcl.get_PGammaL_order()
354
360
  self._full_autom_order = agcl.get_autom_order()
355
361
 
356
- count = 0
357
- block_ptr = []
358
362
  canonical_form = matrix(F, mat.ncols(), mat.nrows())
359
363
 
360
364
  perm = [-1] * mat.ncols()
@@ -363,8 +367,8 @@ class LinearCodeAutGroupCanLabel:
363
367
  for i in range(len(can_col_set)):
364
368
  img = can_transp.get_perm()(i + 1)
365
369
  for j in col2pos[img - 1]:
366
- pos = P[ pos2P[j] ].pop()
367
- canonical_form[ pos ] = can_col_set[i]
370
+ pos = P[pos2P[j]].pop()
371
+ canonical_form[pos] = can_col_set[i]
368
372
  mult[pos] = can_transp.get_v()[i]
369
373
  perm[pos] = j + 1
370
374
 
@@ -376,14 +380,17 @@ class LinearCodeAutGroupCanLabel:
376
380
 
377
381
  self._canonical_form = LinearCode(canonical_form.transpose())
378
382
  self._transporter = S(perm=Permutation(perm), v=mult, autom=can_transp.get_autom()) * normalization
379
- self._trivial_autom_gens, a = self._compute_trivial_automs(normalization,
380
- normalization_inverse, z, [pos2P[x] for x in z], zero_column_case=True)
383
+ self._trivial_autom_gens, a = self._compute_trivial_automs(
384
+ normalization,
385
+ normalization_inverse, z, [pos2P[x] for x in z],
386
+ zero_column_case=True)
381
387
  self._full_autom_order *= a
382
388
 
383
389
  for i in range(len(col2P)):
384
390
  if len(col2P[i]) > 1:
385
391
  A, a = self._compute_trivial_automs(normalization,
386
- normalization_inverse, col2pos[i], col2P[i])
392
+ normalization_inverse,
393
+ col2pos[i], col2P[i])
387
394
  self._full_autom_order *= a
388
395
  self._trivial_autom_gens += A
389
396
 
@@ -461,11 +468,13 @@ class LinearCodeAutGroupCanLabel:
461
468
  aut_order *= factorial(j - beg)
462
469
  # we append a transposition of the first two elements
463
470
  A.append(normalization_inverse *
464
- S(perm=_cyclic_shift(n, col2pos[beg:beg + 2])) * normalization)
471
+ S(perm=_cyclic_shift(n, col2pos[beg:beg + 2])) *
472
+ normalization)
465
473
  if j - beg > 2:
466
474
  # we append a cycle on all elements
467
475
  A.append(normalization_inverse *
468
- S(perm=_cyclic_shift(n, col2pos[beg:j])) * normalization)
476
+ S(perm=_cyclic_shift(n, col2pos[beg:j])) *
477
+ normalization)
469
478
  beg = j
470
479
  return A, aut_order
471
480
 
@@ -37,8 +37,8 @@ cdef class PartitionRefinementLinearCode(PartitionRefinement_generic):
37
37
  cdef int _k, _q
38
38
  cdef long *_hyp_refine_vals_scratch
39
39
  cdef object _inner_group_stabilizer_order
40
- cdef bitset_t *_hyp2points # hyperplanes to points
41
- cdef bitset_t *_points2hyp # points to hyperplanes, transpose of _hyp2points
40
+ cdef bitset_t *_hyp2points # hyperplanes to points
41
+ cdef bitset_t *_points2hyp # points to hyperplanes, transpose of _hyp2points
42
42
  cdef PartitionStack *_hyp_part
43
43
  cdef object _matrix, _root_matrix
44
44
  cdef InnerGroup _inner_group
@@ -85,14 +85,14 @@ is returned by generators::
85
85
  True
86
86
  """
87
87
 
88
- #*******************************************************************************
88
+ # *****************************************************************************
89
89
  # Copyright (C) 2012 Thomas Feulner <thomas.feulner@uni-bayreuth.de>
90
90
  #
91
91
  # Distributed under the terms of the GNU General Public License (GPL)
92
92
  # as published by the Free Software Foundation; either version 2 of
93
93
  # the License, or (at your option) any later version.
94
94
  # https://www.gnu.org/licenses/
95
- #*******************************************************************************
95
+ # *****************************************************************************
96
96
  from itertools import repeat
97
97
  from copy import copy
98
98
  from cysignals.memory cimport check_allocarray, sig_free
@@ -378,8 +378,9 @@ cdef class InnerGroup:
378
378
  6 -> 6 7 -> 7 8 -> 8 9 -> 9
379
379
  """
380
380
  return r"Subgroup of (GL(k,q) times \GF{q}^n ) rtimes Aut(\GF{q}) " + \
381
- "with rank = %s, frobenius power = %s and partition =%s" % (self.rank,
382
- self.frob_pow, OP_string(self.row_partition))
381
+ "with rank = %s, frobenius power = %s and partition =%s" % (
382
+ self.rank,
383
+ self.frob_pow, OP_string(self.row_partition))
383
384
 
384
385
  cdef void minimize_by_frobenius(self, object v, int *applied_frob, int *stab_pow) noexcept:
385
386
  r"""
@@ -637,7 +638,8 @@ cdef class PartitionRefinementLinearCode(PartitionRefinement_generic):
637
638
  else:
638
639
  P = remaining_inner_group.column_blocks(self._best_candidate)
639
640
  for p in P:
640
- x = S(v=[ F.primitive_element() if i in p else F.one() for i in range(self._n) ])
641
+ x = S(v=[F.primitive_element() if i in p else F.one()
642
+ for i in range(self._n)])
641
643
  self._autom_group_generators.append(transp_inv * x * self._transporter)
642
644
  self._inner_group_stabilizer_order = (len(F) - 1) ** len(P)
643
645
 
@@ -756,10 +758,9 @@ cdef class PartitionRefinementLinearCode(PartitionRefinement_generic):
756
758
  This graph will be later used in the refinement procedures.
757
759
  """
758
760
  cdef FFSS_projPoint iter = FFSS_projPoint(self._matrix)
759
- cdef mp_bitcnt_t i,j
761
+ cdef mp_bitcnt_t i, j
760
762
 
761
763
  ambient_space = (self._matrix.base_ring()) ** (self._n)
762
- weights2size = [0] * (self.len() + 1)
763
764
  W = [[] for _ in repeat(None, self.len() + 1)]
764
765
  span = [ambient_space.zero_subspace()] * (self.len() + 1)
765
766
  min_weight = self.len()
@@ -814,8 +815,9 @@ cdef class PartitionRefinementLinearCode(PartitionRefinement_generic):
814
815
  cdef bint _minimization_allowed_on_col(self, int pos) noexcept:
815
816
  r"""
816
817
  Decide if we are allowed to perform the inner minimization on position
817
- ``pos`` which is supposed to be a singleton. For linear codes over finite
818
- fields, we can always return ``True``.
818
+ ``pos`` which is supposed to be a singleton.
819
+
820
+ For linear codes over finite fields, we can always return ``True``.
819
821
  """
820
822
  return True
821
823
 
@@ -834,8 +836,9 @@ cdef class PartitionRefinementLinearCode(PartitionRefinement_generic):
834
836
  - ``True`` if and only if the actual node compares less or equal
835
837
  to the candidate for the canonical form.
836
838
  """
837
- self._matrix = self._inner_group.minimize_matrix_col(self._matrix, pos,
838
- self._fixed_minimized, inner_group_changed)
839
+ self._matrix = self._inner_group.minimize_matrix_col(
840
+ self._matrix, pos,
841
+ self._fixed_minimized, inner_group_changed)
839
842
 
840
843
  # finally compare the new column with the best candidate
841
844
  if self._is_candidate_initialized:
@@ -912,7 +915,7 @@ cdef class PartitionRefinementLinearCode(PartitionRefinement_generic):
912
915
  - ``False`` only if the image under this homomorphism of group actions
913
916
  compares larger than the image of the candidate for the canonical form.
914
917
  """
915
- cdef int i, j, res, stab_pow, apply_pow
918
+ cdef int i, res, stab_pow, apply_pow
916
919
 
917
920
  if self._inner_group.rank < 2:
918
921
  return True
@@ -990,7 +993,9 @@ cdef class PartitionRefinementLinearCode(PartitionRefinement_generic):
990
993
  cdef long * best_vals = self._point_refine_vals.get_row(self._nr_of_point_refine_calls)
991
994
  self._nr_of_point_refine_calls += 1
992
995
  cdef bint ret_val = self._one_refinement(best_vals, 0, self._n,
993
- inner_stab_changed, changed_partition, "point_refine")
996
+ inner_stab_changed,
997
+ changed_partition,
998
+ "point_refine")
994
999
 
995
1000
  if not changed_partition[0]:
996
1001
  self._part.depth -= 1
@@ -1033,8 +1038,10 @@ cdef class PartitionRefinementLinearCode(PartitionRefinement_generic):
1033
1038
  self._nr_of_hyp_refine_calls += 1
1034
1039
 
1035
1040
  cdef tuple ret_val = PS_refinement(self._hyp_part,
1036
- self._hyp_refine_vals_scratch, best_vals, 0, self._hyp_part.degree,
1037
- &self._is_candidate_initialized, changed_partition)
1041
+ self._hyp_refine_vals_scratch,
1042
+ best_vals, 0, self._hyp_part.degree,
1043
+ &self._is_candidate_initialized,
1044
+ changed_partition)
1038
1045
 
1039
1046
  if not changed_partition[0]:
1040
1047
  self._hyp_part.depth -= 1
@@ -1095,11 +1102,11 @@ cdef class PartitionRefinementLinearCode(PartitionRefinement_generic):
1095
1102
  else:
1096
1103
  self._latex_debug_string += " & "
1097
1104
 
1098
- permuted_matrix = self._matrix.matrix_from_columns([self._part.entries[i] for i in range(self._n) ])
1105
+ permuted_matrix = self._matrix.matrix_from_columns([self._part.entries[i] for i in range(self._n)])
1099
1106
 
1100
1107
  # Now we will finally print the matrix.
1101
- for i from 0 <= i < self._k:
1102
- for j from 0 <= j < (self._n - 1):
1108
+ for i in range(self._k):
1109
+ for j in range(self._n - 1):
1103
1110
  self._latex_debug_string += "$" + permuted_matrix[i, j]._latex_() + "$ & "
1104
1111
  self._latex_debug_string += "$" + permuted_matrix[i, self._n - 1]._latex_() + "$ \\\\\n"
1105
1112
 
@@ -3,14 +3,14 @@
3
3
  r"""
4
4
  Tools for enumeration modulo the action of a permutation group
5
5
  """
6
- #*****************************************************************************
6
+ # ***************************************************************************
7
7
  # Copyright (C) 2010-12 Nicolas Borie <nicolas.borie at math dot u-psud.fr>
8
8
  #
9
9
  # Distributed under the terms of the GNU General Public License (GPL)
10
10
  #
11
11
  # The full text of the GPL is available at:
12
- # http://www.gnu.org/licenses/
13
- #*****************************************************************************
12
+ # https://www.gnu.org/licenses/
13
+ # ***************************************************************************
14
14
 
15
15
  from sage.groups.perm_gps.permgroup_element cimport PermutationGroupElement
16
16
 
@@ -197,26 +197,25 @@ AUTHORS:
197
197
  # https://www.gnu.org/licenses/
198
198
  # ****************************************************************************
199
199
 
200
- from sage.misc.cachefunc import cached_method, cached_function
201
- from sage.misc.misc_c import prod
202
200
  from sage.categories.category import Category
203
- from sage.categories.permutation_groups import PermutationGroups
204
201
  from sage.categories.complex_reflection_groups import ComplexReflectionGroups
205
202
  from sage.categories.coxeter_groups import CoxeterGroups
203
+ from sage.categories.permutation_groups import PermutationGroups
204
+ from sage.combinat.root_system.cartan_matrix import CartanMatrix
206
205
  from sage.combinat.root_system.reflection_group_element import ComplexReflectionGroupElement, _gap_return
207
- from sage.sets.family import Family
208
- from sage.structure.unique_representation import UniqueRepresentation
209
206
  from sage.groups.perm_gps.permgroup import PermutationGroup_generic
210
- from sage.combinat.permutation import Permutation
211
- from sage.rings.integer_ring import ZZ
212
- from sage.rings.rational_field import QQ
207
+ from sage.interfaces.gap3 import gap3
213
208
  from sage.matrix.constructor import matrix
214
209
  from sage.matrix.special import identity_matrix
215
- from sage.structure.element import Matrix
216
- from sage.interfaces.gap3 import gap3
217
- from sage.modules.free_module_element import vector
218
- from sage.combinat.root_system.cartan_matrix import CartanMatrix
210
+ from sage.misc.cachefunc import cached_method, cached_function
211
+ from sage.misc.misc_c import prod
219
212
  from sage.misc.sage_eval import sage_eval
213
+ from sage.modules.free_module_element import vector
214
+ from sage.rings.integer_ring import ZZ
215
+ from sage.rings.rational_field import QQ
216
+ from sage.sets.family import Family
217
+ from sage.structure.element import Matrix
218
+ from sage.structure.unique_representation import UniqueRepresentation
220
219
 
221
220
 
222
221
  class ComplexReflectionGroup(UniqueRepresentation, PermutationGroup_generic):
@@ -927,7 +927,7 @@ class WeylGroupElement(MatrixGroupElement_gap):
927
927
 
928
928
  return s is positive
929
929
 
930
- def has_left_descent(self, i):
930
+ def has_left_descent(self, i) -> bool:
931
931
  """
932
932
  Test if ``self`` has a left descent at position ``i``.
933
933
 
@@ -948,7 +948,7 @@ class WeylGroupElement(MatrixGroupElement_gap):
948
948
  """
949
949
  return self.has_descent(i, side='left')
950
950
 
951
- def has_right_descent(self, i):
951
+ def has_right_descent(self, i) -> bool:
952
952
  """
953
953
  Test if ``self`` has a right descent at position ``i``.
954
954
 
@@ -68,7 +68,6 @@ def ClassFunction(group, values):
68
68
  sage: chi = ClassFunction(G, values); chi
69
69
  Character of Cyclic group of order 4 as a permutation group
70
70
  """
71
- from sage.misc.superseded import deprecation
72
71
  try:
73
72
  return group.class_function(values)
74
73
  except AttributeError:
@@ -364,7 +364,7 @@ class ParentLibGAP(SageObject):
364
364
  for gap_subgroup in self._libgap.MaximalNormalSubgroups()]
365
365
 
366
366
  @cached_method
367
- def gens(self):
367
+ def gens(self) -> tuple:
368
368
  """
369
369
  Return the generators of the group.
370
370
 
@@ -83,7 +83,7 @@ class BinaryDihedralGroup(UniqueRepresentation, FinitelyGeneratedMatrixGroup_gap
83
83
 
84
84
  MS = MatrixSpace(R, 2)
85
85
  zero = R.zero()
86
- gens = [ MS([zeta, zero, zero, ~zeta]), MS([zero, i, i, zero]) ]
86
+ gens = [MS([zeta, zero, zero, ~zeta]), MS([zero, i, i, zero])]
87
87
 
88
88
  from sage.libs.gap.libgap import libgap
89
89
  gap_gens = [libgap(matrix_gen) for matrix_gen in gens]
@@ -383,13 +383,12 @@ def PermutationGroup(gens=None, *args, **kwds):
383
383
  ...
384
384
  TypeError: gens must be a tuple, list, or GapElement
385
385
 
386
- This will raise an error after the deprecation period::
386
+ This now raises an error (:issue:`31510`)::
387
387
 
388
388
  sage: G = PermutationGroup([(1,2,3,4)], [(1,7,3,5)])
389
- doctest:warning
389
+ Traceback (most recent call last):
390
390
  ...
391
- DeprecationWarning: gap_group, domain, canonicalize, category will become keyword only
392
- See https://github.com/sagemath/sage/issues/31510 for details.
391
+ ValueError: please use keywords gap_group=, domain=, canonicalize=, category= in the input
393
392
  """
394
393
  if not isinstance(gens, ExpectElement) and hasattr(gens, '_permgroup_'):
395
394
  return gens._permgroup_()
@@ -405,18 +404,7 @@ def PermutationGroup(gens=None, *args, **kwds):
405
404
  raise ValueError("you must specify the domain for an action")
406
405
  return PermutationGroup_action(gens, action, domain, gap_group=gap_group)
407
406
  if args:
408
- from sage.misc.superseded import deprecation
409
- deprecation(31510, "gap_group, domain, canonicalize, category will become keyword only")
410
- if len(args) > 4:
411
- raise ValueError("invalid input")
412
- args = list(args)
413
- gap_group = args.pop(0)
414
- if args:
415
- domain = args.pop(0)
416
- if args:
417
- canonicalize = args.pop(0)
418
- if args:
419
- category = args.pop(0)
407
+ raise ValueError("please use keywords gap_group=, domain=, canonicalize=, category= in the input")
420
408
  return PermutationGroup_generic(gens=gens, gap_group=gap_group, domain=domain,
421
409
  canonicalize=canonicalize, category=category)
422
410
 
@@ -1073,7 +1061,7 @@ class PermutationGroup_generic(FiniteGroup):
1073
1061
  """
1074
1062
  return list(self)
1075
1063
 
1076
- def __contains__(self, item):
1064
+ def __contains__(self, item) -> bool:
1077
1065
  """
1078
1066
  Return whether ``item`` is an element of this group.
1079
1067
 
@@ -1110,33 +1098,6 @@ class PermutationGroup_generic(FiniteGroup):
1110
1098
  return False
1111
1099
  return True
1112
1100
 
1113
- def has_element(self, item):
1114
- """
1115
- Return whether ``item`` is an element of this group -
1116
- however *ignores* parentage.
1117
-
1118
- EXAMPLES::
1119
-
1120
- sage: G = CyclicPermutationGroup(4)
1121
- sage: gens = G.gens()
1122
- sage: H = DihedralGroup(4)
1123
- sage: g = G([(1,2,3,4)]); g
1124
- (1,2,3,4)
1125
- sage: G.has_element(g)
1126
- doctest:warning
1127
- ...
1128
- DeprecationWarning: G.has_element(g) is deprecated; use :meth:`__contains__`, i.e., `g in G` instead
1129
- See https://github.com/sagemath/sage/issues/33831 for details.
1130
- True
1131
- sage: h = H([(1,2),(3,4)]); h
1132
- (1,2)(3,4)
1133
- sage: G.has_element(h)
1134
- False
1135
- """
1136
- from sage.misc.superseded import deprecation
1137
- deprecation(33831, "G.has_element(g) is deprecated; use :meth:`__contains__`, i.e., `g in G` instead")
1138
- return item in self
1139
-
1140
1101
  def __iter__(self):
1141
1102
  r"""
1142
1103
  Return an iterator going through all elements in ``self``.
@@ -1166,9 +1127,9 @@ class PermutationGroup_generic(FiniteGroup):
1166
1127
  """
1167
1128
  if len(self._gens) == 1:
1168
1129
  return self._iteration_monogen()
1169
- else:
1170
- # TODO: this is too slow for moderatly small permutation groups
1171
- return self.iteration(algorithm='SGS')
1130
+
1131
+ # TODO: this is too slow for moderately small permutation groups
1132
+ return self.iteration(algorithm='SGS')
1172
1133
 
1173
1134
  def _iteration_monogen(self):
1174
1135
  r"""
@@ -3357,9 +3318,17 @@ class PermutationGroup_generic(FiniteGroup):
3357
3318
  Traceback (most recent call last):
3358
3319
  ...
3359
3320
  TypeError: junk is not a permutation group
3321
+
3322
+ TESTS:
3323
+
3324
+ Verify that :issue`39416` is fixed::
3325
+
3326
+ sage: G = PermutationGroup(gens=[(1,2), (2,4)], domain={1, 2, 4})
3327
+ sage: G.commutator()
3328
+ Permutation Group with generators [(1,2,4)]
3360
3329
  """
3361
3330
  if other is None:
3362
- return PermutationGroup(gap_group=libgap.DerivedSubgroup(self))
3331
+ return PermutationGroup(gap_group=libgap.DerivedSubgroup(self), domain=self.domain())
3363
3332
  else:
3364
3333
  from sage.categories.finite_permutation_groups import FinitePermutationGroups
3365
3334
  if other not in FinitePermutationGroups():