passagemath-categories 10.6.32__cp314-cp314t-musllinux_1_2_aarch64.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 (719) hide show
  1. passagemath_categories-10.6.32.dist-info/METADATA +156 -0
  2. passagemath_categories-10.6.32.dist-info/RECORD +719 -0
  3. passagemath_categories-10.6.32.dist-info/WHEEL +5 -0
  4. passagemath_categories-10.6.32.dist-info/top_level.txt +2 -0
  5. passagemath_categories.libs/libgcc_s-2d945d6c.so.1 +0 -0
  6. passagemath_categories.libs/libgmp-28992bcb.so.10.5.0 +0 -0
  7. passagemath_categories.libs/libstdc++-85f2cd6d.so.6.0.33 +0 -0
  8. sage/all__sagemath_categories.py +28 -0
  9. sage/arith/all.py +38 -0
  10. sage/arith/constants.pxd +27 -0
  11. sage/arith/functions.cpython-314t-aarch64-linux-musl.so +0 -0
  12. sage/arith/functions.pxd +4 -0
  13. sage/arith/functions.pyx +221 -0
  14. sage/arith/misc.py +6552 -0
  15. sage/arith/multi_modular.cpython-314t-aarch64-linux-musl.so +0 -0
  16. sage/arith/multi_modular.pxd +39 -0
  17. sage/arith/multi_modular.pyx +994 -0
  18. sage/arith/rational_reconstruction.cpython-314t-aarch64-linux-musl.so +0 -0
  19. sage/arith/rational_reconstruction.pxd +4 -0
  20. sage/arith/rational_reconstruction.pyx +115 -0
  21. sage/arith/srange.cpython-314t-aarch64-linux-musl.so +0 -0
  22. sage/arith/srange.pyx +571 -0
  23. sage/calculus/all__sagemath_categories.py +2 -0
  24. sage/calculus/functional.py +481 -0
  25. sage/calculus/functions.py +151 -0
  26. sage/categories/additive_groups.py +73 -0
  27. sage/categories/additive_magmas.py +1044 -0
  28. sage/categories/additive_monoids.py +114 -0
  29. sage/categories/additive_semigroups.py +184 -0
  30. sage/categories/affine_weyl_groups.py +238 -0
  31. sage/categories/algebra_ideals.py +95 -0
  32. sage/categories/algebra_modules.py +96 -0
  33. sage/categories/algebras.py +349 -0
  34. sage/categories/algebras_with_basis.py +377 -0
  35. sage/categories/all.py +160 -0
  36. sage/categories/aperiodic_semigroups.py +29 -0
  37. sage/categories/associative_algebras.py +47 -0
  38. sage/categories/bialgebras.py +101 -0
  39. sage/categories/bialgebras_with_basis.py +414 -0
  40. sage/categories/bimodules.py +206 -0
  41. sage/categories/chain_complexes.py +268 -0
  42. sage/categories/classical_crystals.py +480 -0
  43. sage/categories/coalgebras.py +405 -0
  44. sage/categories/coalgebras_with_basis.py +232 -0
  45. sage/categories/coercion_methods.cpython-314t-aarch64-linux-musl.so +0 -0
  46. sage/categories/coercion_methods.pyx +52 -0
  47. sage/categories/commutative_additive_groups.py +104 -0
  48. sage/categories/commutative_additive_monoids.py +45 -0
  49. sage/categories/commutative_additive_semigroups.py +48 -0
  50. sage/categories/commutative_algebra_ideals.py +87 -0
  51. sage/categories/commutative_algebras.py +94 -0
  52. sage/categories/commutative_ring_ideals.py +58 -0
  53. sage/categories/commutative_rings.py +736 -0
  54. sage/categories/complete_discrete_valuation.py +293 -0
  55. sage/categories/complex_reflection_groups.py +145 -0
  56. sage/categories/complex_reflection_or_generalized_coxeter_groups.py +1249 -0
  57. sage/categories/coxeter_group_algebras.py +186 -0
  58. sage/categories/coxeter_groups.py +3402 -0
  59. sage/categories/crystals.py +2628 -0
  60. sage/categories/cw_complexes.py +216 -0
  61. sage/categories/dedekind_domains.py +137 -0
  62. sage/categories/discrete_valuation.py +325 -0
  63. sage/categories/distributive_magmas_and_additive_magmas.py +100 -0
  64. sage/categories/division_rings.py +114 -0
  65. sage/categories/domains.py +95 -0
  66. sage/categories/drinfeld_modules.py +789 -0
  67. sage/categories/dual.py +42 -0
  68. sage/categories/enumerated_sets.py +1146 -0
  69. sage/categories/euclidean_domains.py +271 -0
  70. sage/categories/examples/algebras_with_basis.py +102 -0
  71. sage/categories/examples/all.py +1 -0
  72. sage/categories/examples/commutative_additive_monoids.py +130 -0
  73. sage/categories/examples/commutative_additive_semigroups.py +199 -0
  74. sage/categories/examples/coxeter_groups.py +8 -0
  75. sage/categories/examples/crystals.py +236 -0
  76. sage/categories/examples/cw_complexes.py +163 -0
  77. sage/categories/examples/facade_sets.py +187 -0
  78. sage/categories/examples/filtered_algebras_with_basis.py +204 -0
  79. sage/categories/examples/filtered_modules_with_basis.py +154 -0
  80. sage/categories/examples/finite_coxeter_groups.py +252 -0
  81. sage/categories/examples/finite_dimensional_algebras_with_basis.py +148 -0
  82. sage/categories/examples/finite_dimensional_lie_algebras_with_basis.py +495 -0
  83. sage/categories/examples/finite_enumerated_sets.py +208 -0
  84. sage/categories/examples/finite_monoids.py +150 -0
  85. sage/categories/examples/finite_semigroups.py +190 -0
  86. sage/categories/examples/finite_weyl_groups.py +191 -0
  87. sage/categories/examples/graded_connected_hopf_algebras_with_basis.py +152 -0
  88. sage/categories/examples/graded_modules_with_basis.py +168 -0
  89. sage/categories/examples/graphs.py +122 -0
  90. sage/categories/examples/hopf_algebras_with_basis.py +145 -0
  91. sage/categories/examples/infinite_enumerated_sets.py +190 -0
  92. sage/categories/examples/lie_algebras.py +352 -0
  93. sage/categories/examples/lie_algebras_with_basis.py +196 -0
  94. sage/categories/examples/magmas.py +162 -0
  95. sage/categories/examples/manifolds.py +94 -0
  96. sage/categories/examples/monoids.py +144 -0
  97. sage/categories/examples/posets.py +178 -0
  98. sage/categories/examples/semigroups.py +580 -0
  99. sage/categories/examples/semigroups_cython.cpython-314t-aarch64-linux-musl.so +0 -0
  100. sage/categories/examples/semigroups_cython.pyx +221 -0
  101. sage/categories/examples/semirings.py +249 -0
  102. sage/categories/examples/sets_cat.py +706 -0
  103. sage/categories/examples/sets_with_grading.py +101 -0
  104. sage/categories/examples/with_realizations.py +542 -0
  105. sage/categories/fields.py +991 -0
  106. sage/categories/filtered_algebras.py +63 -0
  107. sage/categories/filtered_algebras_with_basis.py +548 -0
  108. sage/categories/filtered_hopf_algebras_with_basis.py +138 -0
  109. sage/categories/filtered_modules.py +210 -0
  110. sage/categories/filtered_modules_with_basis.py +1209 -0
  111. sage/categories/finite_complex_reflection_groups.py +1506 -0
  112. sage/categories/finite_coxeter_groups.py +1138 -0
  113. sage/categories/finite_crystals.py +103 -0
  114. sage/categories/finite_dimensional_algebras_with_basis.py +1860 -0
  115. sage/categories/finite_dimensional_bialgebras_with_basis.py +33 -0
  116. sage/categories/finite_dimensional_coalgebras_with_basis.py +33 -0
  117. sage/categories/finite_dimensional_graded_lie_algebras_with_basis.py +231 -0
  118. sage/categories/finite_dimensional_hopf_algebras_with_basis.py +38 -0
  119. sage/categories/finite_dimensional_lie_algebras_with_basis.py +2774 -0
  120. sage/categories/finite_dimensional_modules_with_basis.py +1407 -0
  121. sage/categories/finite_dimensional_nilpotent_lie_algebras_with_basis.py +167 -0
  122. sage/categories/finite_dimensional_semisimple_algebras_with_basis.py +270 -0
  123. sage/categories/finite_enumerated_sets.py +769 -0
  124. sage/categories/finite_fields.py +252 -0
  125. sage/categories/finite_groups.py +256 -0
  126. sage/categories/finite_lattice_posets.py +242 -0
  127. sage/categories/finite_monoids.py +316 -0
  128. sage/categories/finite_permutation_groups.py +339 -0
  129. sage/categories/finite_posets.py +1994 -0
  130. sage/categories/finite_semigroups.py +136 -0
  131. sage/categories/finite_sets.py +93 -0
  132. sage/categories/finite_weyl_groups.py +39 -0
  133. sage/categories/finitely_generated_lambda_bracket_algebras.py +112 -0
  134. sage/categories/finitely_generated_lie_conformal_algebras.py +114 -0
  135. sage/categories/finitely_generated_magmas.py +57 -0
  136. sage/categories/finitely_generated_semigroups.py +214 -0
  137. sage/categories/function_fields.py +76 -0
  138. sage/categories/g_sets.py +77 -0
  139. sage/categories/gcd_domains.py +65 -0
  140. sage/categories/generalized_coxeter_groups.py +94 -0
  141. sage/categories/graded_algebras.py +85 -0
  142. sage/categories/graded_algebras_with_basis.py +258 -0
  143. sage/categories/graded_bialgebras.py +32 -0
  144. sage/categories/graded_bialgebras_with_basis.py +32 -0
  145. sage/categories/graded_coalgebras.py +65 -0
  146. sage/categories/graded_coalgebras_with_basis.py +51 -0
  147. sage/categories/graded_hopf_algebras.py +41 -0
  148. sage/categories/graded_hopf_algebras_with_basis.py +169 -0
  149. sage/categories/graded_lie_algebras.py +91 -0
  150. sage/categories/graded_lie_algebras_with_basis.py +44 -0
  151. sage/categories/graded_lie_conformal_algebras.py +74 -0
  152. sage/categories/graded_modules.py +133 -0
  153. sage/categories/graded_modules_with_basis.py +329 -0
  154. sage/categories/graphs.py +138 -0
  155. sage/categories/group_algebras.py +430 -0
  156. sage/categories/groupoid.py +94 -0
  157. sage/categories/groups.py +667 -0
  158. sage/categories/h_trivial_semigroups.py +64 -0
  159. sage/categories/hecke_modules.py +185 -0
  160. sage/categories/highest_weight_crystals.py +980 -0
  161. sage/categories/hopf_algebras.py +219 -0
  162. sage/categories/hopf_algebras_with_basis.py +309 -0
  163. sage/categories/infinite_enumerated_sets.py +115 -0
  164. sage/categories/integral_domains.py +203 -0
  165. sage/categories/j_trivial_semigroups.py +29 -0
  166. sage/categories/kac_moody_algebras.py +82 -0
  167. sage/categories/kahler_algebras.py +203 -0
  168. sage/categories/l_trivial_semigroups.py +63 -0
  169. sage/categories/lambda_bracket_algebras.py +280 -0
  170. sage/categories/lambda_bracket_algebras_with_basis.py +107 -0
  171. sage/categories/lattice_posets.py +89 -0
  172. sage/categories/left_modules.py +49 -0
  173. sage/categories/lie_algebras.py +1070 -0
  174. sage/categories/lie_algebras_with_basis.py +261 -0
  175. sage/categories/lie_conformal_algebras.py +350 -0
  176. sage/categories/lie_conformal_algebras_with_basis.py +147 -0
  177. sage/categories/lie_groups.py +73 -0
  178. sage/categories/loop_crystals.py +1290 -0
  179. sage/categories/magmas.py +1189 -0
  180. sage/categories/magmas_and_additive_magmas.py +149 -0
  181. sage/categories/magmatic_algebras.py +365 -0
  182. sage/categories/manifolds.py +352 -0
  183. sage/categories/matrix_algebras.py +40 -0
  184. sage/categories/metric_spaces.py +387 -0
  185. sage/categories/modular_abelian_varieties.py +78 -0
  186. sage/categories/modules.py +989 -0
  187. sage/categories/modules_with_basis.py +2794 -0
  188. sage/categories/monoid_algebras.py +38 -0
  189. sage/categories/monoids.py +739 -0
  190. sage/categories/noetherian_rings.py +87 -0
  191. sage/categories/number_fields.py +242 -0
  192. sage/categories/ore_modules.py +189 -0
  193. sage/categories/partially_ordered_monoids.py +49 -0
  194. sage/categories/permutation_groups.py +63 -0
  195. sage/categories/pointed_sets.py +42 -0
  196. sage/categories/polyhedra.py +74 -0
  197. sage/categories/poor_man_map.py +270 -0
  198. sage/categories/posets.py +722 -0
  199. sage/categories/principal_ideal_domains.py +270 -0
  200. sage/categories/quantum_group_representations.py +543 -0
  201. sage/categories/quotient_fields.py +728 -0
  202. sage/categories/r_trivial_semigroups.py +45 -0
  203. sage/categories/regular_crystals.py +898 -0
  204. sage/categories/regular_supercrystals.py +170 -0
  205. sage/categories/right_modules.py +49 -0
  206. sage/categories/ring_ideals.py +74 -0
  207. sage/categories/rings.py +1904 -0
  208. sage/categories/rngs.py +175 -0
  209. sage/categories/schemes.py +393 -0
  210. sage/categories/semigroups.py +1060 -0
  211. sage/categories/semirings.py +71 -0
  212. sage/categories/semisimple_algebras.py +114 -0
  213. sage/categories/sets_with_grading.py +235 -0
  214. sage/categories/shephard_groups.py +43 -0
  215. sage/categories/signed_tensor.py +120 -0
  216. sage/categories/simplicial_complexes.py +134 -0
  217. sage/categories/simplicial_sets.py +1206 -0
  218. sage/categories/super_algebras.py +149 -0
  219. sage/categories/super_algebras_with_basis.py +144 -0
  220. sage/categories/super_hopf_algebras_with_basis.py +126 -0
  221. sage/categories/super_lie_conformal_algebras.py +193 -0
  222. sage/categories/super_modules.py +229 -0
  223. sage/categories/super_modules_with_basis.py +193 -0
  224. sage/categories/supercommutative_algebras.py +99 -0
  225. sage/categories/supercrystals.py +406 -0
  226. sage/categories/tensor.py +110 -0
  227. sage/categories/topological_spaces.py +170 -0
  228. sage/categories/triangular_kac_moody_algebras.py +439 -0
  229. sage/categories/tutorial.py +58 -0
  230. sage/categories/unique_factorization_domains.py +318 -0
  231. sage/categories/unital_algebras.py +426 -0
  232. sage/categories/vector_bundles.py +159 -0
  233. sage/categories/vector_spaces.py +357 -0
  234. sage/categories/weyl_groups.py +853 -0
  235. sage/combinat/all__sagemath_categories.py +34 -0
  236. sage/combinat/backtrack.py +180 -0
  237. sage/combinat/combinat.py +2269 -0
  238. sage/combinat/combinat_cython.cpython-314t-aarch64-linux-musl.so +0 -0
  239. sage/combinat/combinat_cython.pxd +6 -0
  240. sage/combinat/combinat_cython.pyx +390 -0
  241. sage/combinat/combination.py +796 -0
  242. sage/combinat/combinatorial_map.py +416 -0
  243. sage/combinat/composition.py +2192 -0
  244. sage/combinat/dlx.py +510 -0
  245. sage/combinat/integer_lists/__init__.py +7 -0
  246. sage/combinat/integer_lists/base.cpython-314t-aarch64-linux-musl.so +0 -0
  247. sage/combinat/integer_lists/base.pxd +16 -0
  248. sage/combinat/integer_lists/base.pyx +713 -0
  249. sage/combinat/integer_lists/invlex.cpython-314t-aarch64-linux-musl.so +0 -0
  250. sage/combinat/integer_lists/invlex.pxd +4 -0
  251. sage/combinat/integer_lists/invlex.pyx +1650 -0
  252. sage/combinat/integer_lists/lists.py +328 -0
  253. sage/combinat/integer_lists/nn.py +48 -0
  254. sage/combinat/integer_vector.py +1818 -0
  255. sage/combinat/integer_vector_weighted.py +413 -0
  256. sage/combinat/matrices/all__sagemath_categories.py +5 -0
  257. sage/combinat/matrices/dancing_links.cpython-314t-aarch64-linux-musl.so +0 -0
  258. sage/combinat/matrices/dancing_links.pyx +1159 -0
  259. sage/combinat/matrices/dancing_links_c.h +380 -0
  260. sage/combinat/matrices/dlxcpp.py +136 -0
  261. sage/combinat/partition.py +10070 -0
  262. sage/combinat/partitions.cpython-314t-aarch64-linux-musl.so +0 -0
  263. sage/combinat/partitions.pyx +743 -0
  264. sage/combinat/permutation.py +10168 -0
  265. sage/combinat/permutation_cython.cpython-314t-aarch64-linux-musl.so +0 -0
  266. sage/combinat/permutation_cython.pxd +11 -0
  267. sage/combinat/permutation_cython.pyx +407 -0
  268. sage/combinat/q_analogues.py +1090 -0
  269. sage/combinat/ranker.py +268 -0
  270. sage/combinat/subset.py +1561 -0
  271. sage/combinat/subsets_hereditary.py +202 -0
  272. sage/combinat/subsets_pairwise.py +184 -0
  273. sage/combinat/tools.py +63 -0
  274. sage/combinat/tuple.py +348 -0
  275. sage/data_structures/all.py +2 -0
  276. sage/data_structures/all__sagemath_categories.py +2 -0
  277. sage/data_structures/binary_matrix.pxd +138 -0
  278. sage/data_structures/binary_search.cpython-314t-aarch64-linux-musl.so +0 -0
  279. sage/data_structures/binary_search.pxd +3 -0
  280. sage/data_structures/binary_search.pyx +66 -0
  281. sage/data_structures/bitset.cpython-314t-aarch64-linux-musl.so +0 -0
  282. sage/data_structures/bitset.pxd +40 -0
  283. sage/data_structures/bitset.pyx +2385 -0
  284. sage/data_structures/bitset_base.cpython-314t-aarch64-linux-musl.so +0 -0
  285. sage/data_structures/bitset_base.pxd +926 -0
  286. sage/data_structures/bitset_base.pyx +117 -0
  287. sage/data_structures/bitset_intrinsics.h +487 -0
  288. sage/data_structures/blas_dict.cpython-314t-aarch64-linux-musl.so +0 -0
  289. sage/data_structures/blas_dict.pxd +12 -0
  290. sage/data_structures/blas_dict.pyx +469 -0
  291. sage/data_structures/list_of_pairs.cpython-314t-aarch64-linux-musl.so +0 -0
  292. sage/data_structures/list_of_pairs.pxd +16 -0
  293. sage/data_structures/list_of_pairs.pyx +122 -0
  294. sage/data_structures/mutable_poset.py +3312 -0
  295. sage/data_structures/pairing_heap.cpython-314t-aarch64-linux-musl.so +0 -0
  296. sage/data_structures/pairing_heap.h +346 -0
  297. sage/data_structures/pairing_heap.pxd +88 -0
  298. sage/data_structures/pairing_heap.pyx +1464 -0
  299. sage/data_structures/sparse_bitset.pxd +62 -0
  300. sage/data_structures/stream.py +5070 -0
  301. sage/databases/all__sagemath_categories.py +7 -0
  302. sage/databases/sql_db.py +2236 -0
  303. sage/ext/all__sagemath_categories.py +3 -0
  304. sage/ext/fast_callable.cpython-314t-aarch64-linux-musl.so +0 -0
  305. sage/ext/fast_callable.pxd +4 -0
  306. sage/ext/fast_callable.pyx +2746 -0
  307. sage/ext/fast_eval.cpython-314t-aarch64-linux-musl.so +0 -0
  308. sage/ext/fast_eval.pxd +1 -0
  309. sage/ext/fast_eval.pyx +102 -0
  310. sage/ext/interpreters/__init__.py +1 -0
  311. sage/ext/interpreters/all__sagemath_categories.py +2 -0
  312. sage/ext/interpreters/wrapper_el.cpython-314t-aarch64-linux-musl.so +0 -0
  313. sage/ext/interpreters/wrapper_el.pxd +18 -0
  314. sage/ext/interpreters/wrapper_el.pyx +148 -0
  315. sage/ext/interpreters/wrapper_py.cpython-314t-aarch64-linux-musl.so +0 -0
  316. sage/ext/interpreters/wrapper_py.pxd +17 -0
  317. sage/ext/interpreters/wrapper_py.pyx +133 -0
  318. sage/functions/airy.py +937 -0
  319. sage/functions/all.py +97 -0
  320. sage/functions/bessel.py +2102 -0
  321. sage/functions/error.py +784 -0
  322. sage/functions/exp_integral.py +1529 -0
  323. sage/functions/gamma.py +1087 -0
  324. sage/functions/generalized.py +672 -0
  325. sage/functions/hyperbolic.py +747 -0
  326. sage/functions/hypergeometric.py +1156 -0
  327. sage/functions/jacobi.py +1705 -0
  328. sage/functions/log.py +1402 -0
  329. sage/functions/min_max.py +338 -0
  330. sage/functions/orthogonal_polys.py +3106 -0
  331. sage/functions/other.py +2303 -0
  332. sage/functions/piecewise.py +1505 -0
  333. sage/functions/prime_pi.cpython-314t-aarch64-linux-musl.so +0 -0
  334. sage/functions/prime_pi.pyx +262 -0
  335. sage/functions/special.py +1212 -0
  336. sage/functions/spike_function.py +278 -0
  337. sage/functions/transcendental.py +690 -0
  338. sage/functions/trig.py +1062 -0
  339. sage/functions/wigner.py +726 -0
  340. sage/geometry/abc.cpython-314t-aarch64-linux-musl.so +0 -0
  341. sage/geometry/abc.pyx +82 -0
  342. sage/geometry/all__sagemath_categories.py +1 -0
  343. sage/groups/all__sagemath_categories.py +11 -0
  344. sage/groups/generic.py +1733 -0
  345. sage/groups/groups_catalog.py +113 -0
  346. sage/groups/perm_gps/all__sagemath_categories.py +1 -0
  347. sage/groups/perm_gps/partn_ref/all.py +1 -0
  348. sage/groups/perm_gps/partn_ref/all__sagemath_categories.py +1 -0
  349. sage/groups/perm_gps/partn_ref/automorphism_group_canonical_label.cpython-314t-aarch64-linux-musl.so +0 -0
  350. sage/groups/perm_gps/partn_ref/automorphism_group_canonical_label.pxd +52 -0
  351. sage/groups/perm_gps/partn_ref/automorphism_group_canonical_label.pyx +906 -0
  352. sage/groups/perm_gps/partn_ref/canonical_augmentation.cpython-314t-aarch64-linux-musl.so +0 -0
  353. sage/groups/perm_gps/partn_ref/canonical_augmentation.pxd +85 -0
  354. sage/groups/perm_gps/partn_ref/canonical_augmentation.pyx +534 -0
  355. sage/groups/perm_gps/partn_ref/data_structures.cpython-314t-aarch64-linux-musl.so +0 -0
  356. sage/groups/perm_gps/partn_ref/data_structures.pxd +576 -0
  357. sage/groups/perm_gps/partn_ref/data_structures.pyx +1792 -0
  358. sage/groups/perm_gps/partn_ref/double_coset.cpython-314t-aarch64-linux-musl.so +0 -0
  359. sage/groups/perm_gps/partn_ref/double_coset.pxd +45 -0
  360. sage/groups/perm_gps/partn_ref/double_coset.pyx +739 -0
  361. sage/groups/perm_gps/partn_ref/refinement_lists.cpython-314t-aarch64-linux-musl.so +0 -0
  362. sage/groups/perm_gps/partn_ref/refinement_lists.pxd +18 -0
  363. sage/groups/perm_gps/partn_ref/refinement_lists.pyx +82 -0
  364. sage/groups/perm_gps/partn_ref/refinement_python.cpython-314t-aarch64-linux-musl.so +0 -0
  365. sage/groups/perm_gps/partn_ref/refinement_python.pxd +16 -0
  366. sage/groups/perm_gps/partn_ref/refinement_python.pyx +564 -0
  367. sage/groups/perm_gps/partn_ref/refinement_sets.cpython-314t-aarch64-linux-musl.so +0 -0
  368. sage/groups/perm_gps/partn_ref/refinement_sets.pxd +60 -0
  369. sage/groups/perm_gps/partn_ref/refinement_sets.pyx +858 -0
  370. sage/interfaces/abc.py +140 -0
  371. sage/interfaces/all.py +58 -0
  372. sage/interfaces/all__sagemath_categories.py +1 -0
  373. sage/interfaces/expect.py +1643 -0
  374. sage/interfaces/interface.py +1682 -0
  375. sage/interfaces/process.cpython-314t-aarch64-linux-musl.so +0 -0
  376. sage/interfaces/process.pxd +5 -0
  377. sage/interfaces/process.pyx +288 -0
  378. sage/interfaces/quit.py +167 -0
  379. sage/interfaces/sage0.py +604 -0
  380. sage/interfaces/sagespawn.cpython-314t-aarch64-linux-musl.so +0 -0
  381. sage/interfaces/sagespawn.pyx +308 -0
  382. sage/interfaces/tab_completion.py +101 -0
  383. sage/misc/all__sagemath_categories.py +78 -0
  384. sage/misc/allocator.cpython-314t-aarch64-linux-musl.so +0 -0
  385. sage/misc/allocator.pxd +6 -0
  386. sage/misc/allocator.pyx +47 -0
  387. sage/misc/binary_tree.cpython-314t-aarch64-linux-musl.so +0 -0
  388. sage/misc/binary_tree.pxd +29 -0
  389. sage/misc/binary_tree.pyx +537 -0
  390. sage/misc/callable_dict.cpython-314t-aarch64-linux-musl.so +0 -0
  391. sage/misc/callable_dict.pyx +89 -0
  392. sage/misc/citation.cpython-314t-aarch64-linux-musl.so +0 -0
  393. sage/misc/citation.pyx +159 -0
  394. sage/misc/converting_dict.py +293 -0
  395. sage/misc/defaults.py +129 -0
  396. sage/misc/derivative.cpython-314t-aarch64-linux-musl.so +0 -0
  397. sage/misc/derivative.pyx +223 -0
  398. sage/misc/functional.py +2005 -0
  399. sage/misc/html.py +589 -0
  400. sage/misc/latex.py +2673 -0
  401. sage/misc/latex_macros.py +236 -0
  402. sage/misc/latex_standalone.py +1833 -0
  403. sage/misc/map_threaded.py +38 -0
  404. sage/misc/mathml.py +76 -0
  405. sage/misc/method_decorator.py +88 -0
  406. sage/misc/mrange.py +755 -0
  407. sage/misc/multireplace.py +41 -0
  408. sage/misc/object_multiplexer.py +92 -0
  409. sage/misc/parser.cpython-314t-aarch64-linux-musl.so +0 -0
  410. sage/misc/parser.pyx +1107 -0
  411. sage/misc/random_testing.py +264 -0
  412. sage/misc/rest_index_of_methods.py +377 -0
  413. sage/misc/search.cpython-314t-aarch64-linux-musl.so +0 -0
  414. sage/misc/search.pxd +2 -0
  415. sage/misc/search.pyx +68 -0
  416. sage/misc/stopgap.cpython-314t-aarch64-linux-musl.so +0 -0
  417. sage/misc/stopgap.pyx +95 -0
  418. sage/misc/table.py +853 -0
  419. sage/monoids/all__sagemath_categories.py +1 -0
  420. sage/monoids/indexed_free_monoid.py +1071 -0
  421. sage/monoids/monoid.py +82 -0
  422. sage/numerical/all__sagemath_categories.py +1 -0
  423. sage/numerical/backends/all__sagemath_categories.py +1 -0
  424. sage/numerical/backends/generic_backend.cpython-314t-aarch64-linux-musl.so +0 -0
  425. sage/numerical/backends/generic_backend.pxd +61 -0
  426. sage/numerical/backends/generic_backend.pyx +1893 -0
  427. sage/numerical/backends/generic_sdp_backend.cpython-314t-aarch64-linux-musl.so +0 -0
  428. sage/numerical/backends/generic_sdp_backend.pxd +38 -0
  429. sage/numerical/backends/generic_sdp_backend.pyx +755 -0
  430. sage/parallel/all.py +6 -0
  431. sage/parallel/decorate.py +575 -0
  432. sage/parallel/map_reduce.py +1997 -0
  433. sage/parallel/multiprocessing_sage.py +76 -0
  434. sage/parallel/ncpus.py +35 -0
  435. sage/parallel/parallelism.py +364 -0
  436. sage/parallel/reference.py +47 -0
  437. sage/parallel/use_fork.py +333 -0
  438. sage/rings/abc.cpython-314t-aarch64-linux-musl.so +0 -0
  439. sage/rings/abc.pxd +31 -0
  440. sage/rings/abc.pyx +526 -0
  441. sage/rings/algebraic_closure_finite_field.py +1154 -0
  442. sage/rings/all__sagemath_categories.py +91 -0
  443. sage/rings/big_oh.py +227 -0
  444. sage/rings/continued_fraction.py +2754 -0
  445. sage/rings/continued_fraction_gosper.py +220 -0
  446. sage/rings/factorint.cpython-314t-aarch64-linux-musl.so +0 -0
  447. sage/rings/factorint.pyx +295 -0
  448. sage/rings/fast_arith.cpython-314t-aarch64-linux-musl.so +0 -0
  449. sage/rings/fast_arith.pxd +21 -0
  450. sage/rings/fast_arith.pyx +535 -0
  451. sage/rings/finite_rings/all__sagemath_categories.py +9 -0
  452. sage/rings/finite_rings/conway_polynomials.py +542 -0
  453. sage/rings/finite_rings/element_base.cpython-314t-aarch64-linux-musl.so +0 -0
  454. sage/rings/finite_rings/element_base.pxd +12 -0
  455. sage/rings/finite_rings/element_base.pyx +1176 -0
  456. sage/rings/finite_rings/finite_field_base.cpython-314t-aarch64-linux-musl.so +0 -0
  457. sage/rings/finite_rings/finite_field_base.pxd +7 -0
  458. sage/rings/finite_rings/finite_field_base.pyx +2171 -0
  459. sage/rings/finite_rings/finite_field_constructor.py +827 -0
  460. sage/rings/finite_rings/finite_field_prime_modn.py +372 -0
  461. sage/rings/finite_rings/galois_group.py +154 -0
  462. sage/rings/finite_rings/hom_finite_field.cpython-314t-aarch64-linux-musl.so +0 -0
  463. sage/rings/finite_rings/hom_finite_field.pxd +23 -0
  464. sage/rings/finite_rings/hom_finite_field.pyx +856 -0
  465. sage/rings/finite_rings/hom_prime_finite_field.cpython-314t-aarch64-linux-musl.so +0 -0
  466. sage/rings/finite_rings/hom_prime_finite_field.pxd +15 -0
  467. sage/rings/finite_rings/hom_prime_finite_field.pyx +164 -0
  468. sage/rings/finite_rings/homset.py +357 -0
  469. sage/rings/finite_rings/integer_mod.cpython-314t-aarch64-linux-musl.so +0 -0
  470. sage/rings/finite_rings/integer_mod.pxd +56 -0
  471. sage/rings/finite_rings/integer_mod.pyx +4586 -0
  472. sage/rings/finite_rings/integer_mod_limits.h +11 -0
  473. sage/rings/finite_rings/integer_mod_ring.py +2044 -0
  474. sage/rings/finite_rings/residue_field.cpython-314t-aarch64-linux-musl.so +0 -0
  475. sage/rings/finite_rings/residue_field.pxd +30 -0
  476. sage/rings/finite_rings/residue_field.pyx +1811 -0
  477. sage/rings/finite_rings/stdint.pxd +19 -0
  478. sage/rings/fraction_field.py +1452 -0
  479. sage/rings/fraction_field_element.cpython-314t-aarch64-linux-musl.so +0 -0
  480. sage/rings/fraction_field_element.pyx +1357 -0
  481. sage/rings/function_field/all.py +7 -0
  482. sage/rings/function_field/all__sagemath_categories.py +2 -0
  483. sage/rings/function_field/constructor.py +218 -0
  484. sage/rings/function_field/element.cpython-314t-aarch64-linux-musl.so +0 -0
  485. sage/rings/function_field/element.pxd +11 -0
  486. sage/rings/function_field/element.pyx +1008 -0
  487. sage/rings/function_field/element_rational.cpython-314t-aarch64-linux-musl.so +0 -0
  488. sage/rings/function_field/element_rational.pyx +513 -0
  489. sage/rings/function_field/extensions.py +230 -0
  490. sage/rings/function_field/function_field.py +1468 -0
  491. sage/rings/function_field/function_field_rational.py +1005 -0
  492. sage/rings/function_field/ideal.py +1155 -0
  493. sage/rings/function_field/ideal_rational.py +629 -0
  494. sage/rings/function_field/jacobian_base.py +826 -0
  495. sage/rings/function_field/jacobian_hess.py +1053 -0
  496. sage/rings/function_field/jacobian_khuri_makdisi.py +1027 -0
  497. sage/rings/function_field/maps.py +1039 -0
  498. sage/rings/function_field/order.py +281 -0
  499. sage/rings/function_field/order_basis.py +586 -0
  500. sage/rings/function_field/order_rational.py +576 -0
  501. sage/rings/function_field/place.py +426 -0
  502. sage/rings/function_field/place_rational.py +181 -0
  503. sage/rings/generic.py +320 -0
  504. sage/rings/homset.py +332 -0
  505. sage/rings/ideal.py +1885 -0
  506. sage/rings/ideal_monoid.py +215 -0
  507. sage/rings/infinity.py +1890 -0
  508. sage/rings/integer.cpython-314t-aarch64-linux-musl.so +0 -0
  509. sage/rings/integer.pxd +45 -0
  510. sage/rings/integer.pyx +7874 -0
  511. sage/rings/integer_ring.cpython-314t-aarch64-linux-musl.so +0 -0
  512. sage/rings/integer_ring.pxd +8 -0
  513. sage/rings/integer_ring.pyx +1693 -0
  514. sage/rings/laurent_series_ring.py +931 -0
  515. sage/rings/laurent_series_ring_element.cpython-314t-aarch64-linux-musl.so +0 -0
  516. sage/rings/laurent_series_ring_element.pxd +11 -0
  517. sage/rings/laurent_series_ring_element.pyx +1927 -0
  518. sage/rings/lazy_series.py +7815 -0
  519. sage/rings/lazy_series_ring.py +4356 -0
  520. sage/rings/localization.py +1043 -0
  521. sage/rings/morphism.cpython-314t-aarch64-linux-musl.so +0 -0
  522. sage/rings/morphism.pxd +39 -0
  523. sage/rings/morphism.pyx +3299 -0
  524. sage/rings/multi_power_series_ring.py +1145 -0
  525. sage/rings/multi_power_series_ring_element.py +2184 -0
  526. sage/rings/noncommutative_ideals.cpython-314t-aarch64-linux-musl.so +0 -0
  527. sage/rings/noncommutative_ideals.pyx +423 -0
  528. sage/rings/number_field/all__sagemath_categories.py +1 -0
  529. sage/rings/number_field/number_field_base.cpython-314t-aarch64-linux-musl.so +0 -0
  530. sage/rings/number_field/number_field_base.pxd +8 -0
  531. sage/rings/number_field/number_field_base.pyx +507 -0
  532. sage/rings/number_field/number_field_element_base.cpython-314t-aarch64-linux-musl.so +0 -0
  533. sage/rings/number_field/number_field_element_base.pxd +6 -0
  534. sage/rings/number_field/number_field_element_base.pyx +36 -0
  535. sage/rings/number_field/number_field_ideal.py +3550 -0
  536. sage/rings/padics/all__sagemath_categories.py +4 -0
  537. sage/rings/padics/local_generic.py +1670 -0
  538. sage/rings/padics/local_generic_element.cpython-314t-aarch64-linux-musl.so +0 -0
  539. sage/rings/padics/local_generic_element.pxd +5 -0
  540. sage/rings/padics/local_generic_element.pyx +1017 -0
  541. sage/rings/padics/misc.py +256 -0
  542. sage/rings/padics/padic_generic.py +1911 -0
  543. sage/rings/padics/pow_computer.cpython-314t-aarch64-linux-musl.so +0 -0
  544. sage/rings/padics/pow_computer.pxd +38 -0
  545. sage/rings/padics/pow_computer.pyx +671 -0
  546. sage/rings/padics/precision_error.py +24 -0
  547. sage/rings/polynomial/all__sagemath_categories.py +25 -0
  548. sage/rings/polynomial/commutative_polynomial.cpython-314t-aarch64-linux-musl.so +0 -0
  549. sage/rings/polynomial/commutative_polynomial.pxd +6 -0
  550. sage/rings/polynomial/commutative_polynomial.pyx +24 -0
  551. sage/rings/polynomial/cyclotomic.cpython-314t-aarch64-linux-musl.so +0 -0
  552. sage/rings/polynomial/cyclotomic.pyx +404 -0
  553. sage/rings/polynomial/flatten.py +711 -0
  554. sage/rings/polynomial/ideal.py +102 -0
  555. sage/rings/polynomial/infinite_polynomial_element.py +1768 -0
  556. sage/rings/polynomial/infinite_polynomial_ring.py +1653 -0
  557. sage/rings/polynomial/laurent_polynomial.cpython-314t-aarch64-linux-musl.so +0 -0
  558. sage/rings/polynomial/laurent_polynomial.pxd +18 -0
  559. sage/rings/polynomial/laurent_polynomial.pyx +2190 -0
  560. sage/rings/polynomial/laurent_polynomial_ideal.py +590 -0
  561. sage/rings/polynomial/laurent_polynomial_ring.py +832 -0
  562. sage/rings/polynomial/laurent_polynomial_ring_base.py +708 -0
  563. sage/rings/polynomial/multi_polynomial.cpython-314t-aarch64-linux-musl.so +0 -0
  564. sage/rings/polynomial/multi_polynomial.pxd +12 -0
  565. sage/rings/polynomial/multi_polynomial.pyx +3082 -0
  566. sage/rings/polynomial/multi_polynomial_element.py +2570 -0
  567. sage/rings/polynomial/multi_polynomial_ideal.py +5771 -0
  568. sage/rings/polynomial/multi_polynomial_ring.py +947 -0
  569. sage/rings/polynomial/multi_polynomial_ring_base.cpython-314t-aarch64-linux-musl.so +0 -0
  570. sage/rings/polynomial/multi_polynomial_ring_base.pxd +15 -0
  571. sage/rings/polynomial/multi_polynomial_ring_base.pyx +1855 -0
  572. sage/rings/polynomial/multi_polynomial_sequence.py +2204 -0
  573. sage/rings/polynomial/polydict.cpython-314t-aarch64-linux-musl.so +0 -0
  574. sage/rings/polynomial/polydict.pxd +45 -0
  575. sage/rings/polynomial/polydict.pyx +2701 -0
  576. sage/rings/polynomial/polynomial_compiled.cpython-314t-aarch64-linux-musl.so +0 -0
  577. sage/rings/polynomial/polynomial_compiled.pxd +59 -0
  578. sage/rings/polynomial/polynomial_compiled.pyx +509 -0
  579. sage/rings/polynomial/polynomial_element.cpython-314t-aarch64-linux-musl.so +0 -0
  580. sage/rings/polynomial/polynomial_element.pxd +64 -0
  581. sage/rings/polynomial/polynomial_element.pyx +13255 -0
  582. sage/rings/polynomial/polynomial_element_generic.py +1637 -0
  583. sage/rings/polynomial/polynomial_fateman.py +97 -0
  584. sage/rings/polynomial/polynomial_quotient_ring.py +2465 -0
  585. sage/rings/polynomial/polynomial_quotient_ring_element.py +779 -0
  586. sage/rings/polynomial/polynomial_ring.py +3784 -0
  587. sage/rings/polynomial/polynomial_ring_constructor.py +1051 -0
  588. sage/rings/polynomial/polynomial_ring_homomorphism.cpython-314t-aarch64-linux-musl.so +0 -0
  589. sage/rings/polynomial/polynomial_ring_homomorphism.pxd +5 -0
  590. sage/rings/polynomial/polynomial_ring_homomorphism.pyx +121 -0
  591. sage/rings/polynomial/polynomial_singular_interface.py +549 -0
  592. sage/rings/polynomial/symmetric_ideal.py +989 -0
  593. sage/rings/polynomial/symmetric_reduction.cpython-314t-aarch64-linux-musl.so +0 -0
  594. sage/rings/polynomial/symmetric_reduction.pxd +8 -0
  595. sage/rings/polynomial/symmetric_reduction.pyx +669 -0
  596. sage/rings/polynomial/term_order.py +2279 -0
  597. sage/rings/polynomial/toy_buchberger.py +449 -0
  598. sage/rings/polynomial/toy_d_basis.py +387 -0
  599. sage/rings/polynomial/toy_variety.py +362 -0
  600. sage/rings/power_series_mpoly.cpython-314t-aarch64-linux-musl.so +0 -0
  601. sage/rings/power_series_mpoly.pxd +9 -0
  602. sage/rings/power_series_mpoly.pyx +161 -0
  603. sage/rings/power_series_poly.cpython-314t-aarch64-linux-musl.so +0 -0
  604. sage/rings/power_series_poly.pxd +10 -0
  605. sage/rings/power_series_poly.pyx +1317 -0
  606. sage/rings/power_series_ring.py +1441 -0
  607. sage/rings/power_series_ring_element.cpython-314t-aarch64-linux-musl.so +0 -0
  608. sage/rings/power_series_ring_element.pxd +12 -0
  609. sage/rings/power_series_ring_element.pyx +3028 -0
  610. sage/rings/puiseux_series_ring.py +487 -0
  611. sage/rings/puiseux_series_ring_element.cpython-314t-aarch64-linux-musl.so +0 -0
  612. sage/rings/puiseux_series_ring_element.pxd +7 -0
  613. sage/rings/puiseux_series_ring_element.pyx +1055 -0
  614. sage/rings/qqbar_decorators.py +167 -0
  615. sage/rings/quotient_ring.py +1598 -0
  616. sage/rings/quotient_ring_element.py +979 -0
  617. sage/rings/rational.cpython-314t-aarch64-linux-musl.so +0 -0
  618. sage/rings/rational.pxd +20 -0
  619. sage/rings/rational.pyx +4284 -0
  620. sage/rings/rational_field.py +1730 -0
  621. sage/rings/real_double.cpython-314t-aarch64-linux-musl.so +0 -0
  622. sage/rings/real_double.pxd +16 -0
  623. sage/rings/real_double.pyx +2218 -0
  624. sage/rings/real_lazy.cpython-314t-aarch64-linux-musl.so +0 -0
  625. sage/rings/real_lazy.pxd +30 -0
  626. sage/rings/real_lazy.pyx +1773 -0
  627. sage/rings/ring.cpython-314t-aarch64-linux-musl.so +0 -0
  628. sage/rings/ring.pxd +30 -0
  629. sage/rings/ring.pyx +850 -0
  630. sage/rings/semirings/all.py +3 -0
  631. sage/rings/semirings/non_negative_integer_semiring.py +107 -0
  632. sage/rings/semirings/tropical_mpolynomial.py +972 -0
  633. sage/rings/semirings/tropical_polynomial.py +997 -0
  634. sage/rings/semirings/tropical_semiring.cpython-314t-aarch64-linux-musl.so +0 -0
  635. sage/rings/semirings/tropical_semiring.pyx +676 -0
  636. sage/rings/semirings/tropical_variety.py +1701 -0
  637. sage/rings/sum_of_squares.cpython-314t-aarch64-linux-musl.so +0 -0
  638. sage/rings/sum_of_squares.pxd +3 -0
  639. sage/rings/sum_of_squares.pyx +336 -0
  640. sage/rings/tests.py +504 -0
  641. sage/schemes/affine/affine_homset.py +508 -0
  642. sage/schemes/affine/affine_morphism.py +1574 -0
  643. sage/schemes/affine/affine_point.py +460 -0
  644. sage/schemes/affine/affine_rational_point.py +308 -0
  645. sage/schemes/affine/affine_space.py +1264 -0
  646. sage/schemes/affine/affine_subscheme.py +592 -0
  647. sage/schemes/affine/all.py +25 -0
  648. sage/schemes/all__sagemath_categories.py +5 -0
  649. sage/schemes/generic/algebraic_scheme.py +2092 -0
  650. sage/schemes/generic/all.py +5 -0
  651. sage/schemes/generic/ambient_space.py +400 -0
  652. sage/schemes/generic/divisor.py +465 -0
  653. sage/schemes/generic/divisor_group.py +313 -0
  654. sage/schemes/generic/glue.py +84 -0
  655. sage/schemes/generic/homset.py +820 -0
  656. sage/schemes/generic/hypersurface.py +234 -0
  657. sage/schemes/generic/morphism.py +2107 -0
  658. sage/schemes/generic/point.py +237 -0
  659. sage/schemes/generic/scheme.py +1190 -0
  660. sage/schemes/generic/spec.py +199 -0
  661. sage/schemes/product_projective/all.py +6 -0
  662. sage/schemes/product_projective/homset.py +236 -0
  663. sage/schemes/product_projective/morphism.py +517 -0
  664. sage/schemes/product_projective/point.py +568 -0
  665. sage/schemes/product_projective/rational_point.py +550 -0
  666. sage/schemes/product_projective/space.py +1301 -0
  667. sage/schemes/product_projective/subscheme.py +466 -0
  668. sage/schemes/projective/all.py +24 -0
  669. sage/schemes/projective/proj_bdd_height.py +453 -0
  670. sage/schemes/projective/projective_homset.py +718 -0
  671. sage/schemes/projective/projective_morphism.py +2792 -0
  672. sage/schemes/projective/projective_point.py +1484 -0
  673. sage/schemes/projective/projective_rational_point.py +569 -0
  674. sage/schemes/projective/projective_space.py +2571 -0
  675. sage/schemes/projective/projective_subscheme.py +1574 -0
  676. sage/sets/all.py +17 -0
  677. sage/sets/cartesian_product.py +376 -0
  678. sage/sets/condition_set.py +525 -0
  679. sage/sets/disjoint_set.cpython-314t-aarch64-linux-musl.so +0 -0
  680. sage/sets/disjoint_set.pxd +36 -0
  681. sage/sets/disjoint_set.pyx +998 -0
  682. sage/sets/disjoint_union_enumerated_sets.py +625 -0
  683. sage/sets/family.cpython-314t-aarch64-linux-musl.so +0 -0
  684. sage/sets/family.pxd +12 -0
  685. sage/sets/family.pyx +1556 -0
  686. sage/sets/finite_enumerated_set.py +406 -0
  687. sage/sets/finite_set_map_cy.cpython-314t-aarch64-linux-musl.so +0 -0
  688. sage/sets/finite_set_map_cy.pxd +34 -0
  689. sage/sets/finite_set_map_cy.pyx +708 -0
  690. sage/sets/finite_set_maps.py +591 -0
  691. sage/sets/image_set.py +448 -0
  692. sage/sets/integer_range.py +829 -0
  693. sage/sets/non_negative_integers.py +241 -0
  694. sage/sets/positive_integers.py +93 -0
  695. sage/sets/primes.py +188 -0
  696. sage/sets/real_set.py +2760 -0
  697. sage/sets/recursively_enumerated_set.cpython-314t-aarch64-linux-musl.so +0 -0
  698. sage/sets/recursively_enumerated_set.pxd +31 -0
  699. sage/sets/recursively_enumerated_set.pyx +2082 -0
  700. sage/sets/set.py +2083 -0
  701. sage/sets/set_from_iterator.py +1021 -0
  702. sage/sets/totally_ordered_finite_set.py +329 -0
  703. sage/symbolic/all__sagemath_categories.py +1 -0
  704. sage/symbolic/function.cpython-314t-aarch64-linux-musl.so +0 -0
  705. sage/symbolic/function.pxd +29 -0
  706. sage/symbolic/function.pyx +1488 -0
  707. sage/symbolic/symbols.py +56 -0
  708. sage/tests/all__sagemath_categories.py +1 -0
  709. sage/tests/cython.cpython-314t-aarch64-linux-musl.so +0 -0
  710. sage/tests/cython.pyx +37 -0
  711. sage/tests/stl_vector.cpython-314t-aarch64-linux-musl.so +0 -0
  712. sage/tests/stl_vector.pyx +171 -0
  713. sage/typeset/all.py +6 -0
  714. sage/typeset/ascii_art.py +295 -0
  715. sage/typeset/character_art.py +789 -0
  716. sage/typeset/character_art_factory.py +572 -0
  717. sage/typeset/symbols.py +334 -0
  718. sage/typeset/unicode_art.py +183 -0
  719. sage/typeset/unicode_characters.py +101 -0
@@ -0,0 +1,667 @@
1
+ # sage_setup: distribution = sagemath-categories
2
+ r"""
3
+ Groups
4
+ """
5
+ # ****************************************************************************
6
+ # Copyright (C) 2005 David Kohel <kohel@maths.usyd.edu>
7
+ # William Stein <wstein@math.ucsd.edu>
8
+ # 2008 Teresa Gomez-Diaz (CNRS) <Teresa.Gomez-Diaz@univ-mlv.fr>
9
+ # 2008-2009 Nicolas M. Thiery <nthiery at users.sf.net>
10
+ #
11
+ # Distributed under the terms of the GNU General Public License (GPL)
12
+ # https://www.gnu.org/licenses/
13
+ # *****************************************************************************
14
+
15
+ from sage.misc.cachefunc import cached_method
16
+ from sage.misc.lazy_import import LazyImport
17
+ from sage.categories.category_with_axiom import CategoryWithAxiom
18
+ from sage.categories.monoids import Monoids
19
+ from sage.categories.cartesian_product import CartesianProductsCategory, cartesian_product
20
+ from sage.categories.finite_enumerated_sets import FiniteEnumeratedSets
21
+ from sage.categories.topological_spaces import TopologicalSpacesCategory
22
+
23
+
24
+ class Groups(CategoryWithAxiom):
25
+ """
26
+ The category of (multiplicative) groups, i.e. monoids with
27
+ inverses.
28
+
29
+ EXAMPLES::
30
+
31
+ sage: Groups()
32
+ Category of groups
33
+ sage: Groups().super_categories()
34
+ [Category of monoids, Category of inverse unital magmas]
35
+
36
+ TESTS::
37
+
38
+ sage: TestSuite(Groups()).run()
39
+ """
40
+ _base_category_class_and_axiom = (Monoids, "Inverse")
41
+
42
+ def example(self):
43
+ """
44
+ EXAMPLES::
45
+
46
+ sage: Groups().example() # needs sage.modules
47
+ General Linear Group of degree 4 over Rational Field
48
+ """
49
+ from sage.rings.rational_field import QQ
50
+ from sage.groups.matrix_gps.linear import GL
51
+ return GL(4,QQ)
52
+
53
+ @staticmethod
54
+ def free(index_set=None, names=None, **kwds):
55
+ r"""
56
+ Return the free group.
57
+
58
+ INPUT:
59
+
60
+ - ``index_set`` -- (optional) an index set for the generators; if
61
+ an integer, then this represents `\{0, 1, \ldots, n-1\}`
62
+
63
+ - ``names`` -- string or list/tuple/iterable of strings
64
+ (default: ``'x'``); the generator names or name prefix
65
+
66
+ When the index set is an integer or only variable names are given,
67
+ this returns :class:`~sage.groups.free_group.FreeGroup_class`, which
68
+ currently has more features due to the interface with GAP than
69
+ :class:`~sage.groups.indexed_free_group.IndexedFreeGroup`.
70
+
71
+ EXAMPLES::
72
+
73
+ sage: # needs sage.combinat sage.groups
74
+ sage: Groups.free(index_set=ZZ)
75
+ Free group indexed by Integer Ring
76
+ sage: Groups().free(ZZ)
77
+ Free group indexed by Integer Ring
78
+ sage: Groups().free(5)
79
+ Free Group on generators {x0, x1, x2, x3, x4}
80
+ sage: F.<x,y,z> = Groups().free(); F
81
+ Free Group on generators {x, y, z}
82
+ """
83
+ from sage.rings.integer_ring import ZZ
84
+ if index_set in ZZ or (index_set is None and names is not None):
85
+ from sage.groups.free_group import FreeGroup
86
+ if names is None:
87
+ return FreeGroup(index_set, **kwds)
88
+ return FreeGroup(index_set, names, **kwds)
89
+
90
+ from sage.groups.indexed_free_group import IndexedFreeGroup
91
+ return IndexedFreeGroup(index_set, **kwds)
92
+
93
+ class ParentMethods:
94
+
95
+ def group_generators(self):
96
+ """
97
+ Return group generators for ``self``.
98
+
99
+ This default implementation calls :meth:`gens`, for
100
+ backward compatibility.
101
+
102
+ EXAMPLES::
103
+
104
+ sage: A = AlternatingGroup(4) # needs sage.groups
105
+ sage: A.group_generators() # needs sage.groups
106
+ Family ((1,2,3), (2,3,4))
107
+ """
108
+ from sage.sets.family import Family
109
+ try:
110
+ return Family(self.gens())
111
+ except AttributeError:
112
+ raise NotImplementedError("no generators are implemented for this group")
113
+
114
+ def monoid_generators(self):
115
+ r"""
116
+ Return the generators of ``self`` as a monoid.
117
+
118
+ Let `G` be a group with generating set `X`. In general, the
119
+ generating set of `G` as a monoid is given by `X \cup X^{-1}`,
120
+ where `X^{-1}` is the set of inverses of `X`. If `G` is a finite
121
+ group, then the generating set as a monoid is `X`.
122
+
123
+ EXAMPLES::
124
+
125
+ sage: # needs sage.groups
126
+ sage: A = AlternatingGroup(4)
127
+ sage: A.monoid_generators()
128
+ Family ((1,2,3), (2,3,4))
129
+
130
+ sage: # needs sage.combinat sage.groups
131
+ sage: F.<x,y> = FreeGroup()
132
+ sage: F.monoid_generators()
133
+ Family (x, y, x^-1, y^-1)
134
+ """
135
+ G = self.group_generators()
136
+ from sage.categories.finite_enumerated_sets import FiniteEnumeratedSets
137
+ if G not in FiniteEnumeratedSets():
138
+ raise NotImplementedError("currently only implemented for finitely generated groups")
139
+ from sage.sets.family import Family
140
+ return Family(tuple(G) + tuple(~x for x in G))
141
+
142
+ def _test_inverse(self, **options):
143
+ """
144
+ Run generic tests on the method :meth:`.__invert__`.
145
+
146
+ See also: :class:`TestSuite`.
147
+
148
+ EXAMPLES::
149
+
150
+ sage: G = SymmetricGroup(3) # needs sage.groups
151
+ sage: G._test_inverse() # needs sage.groups
152
+ """
153
+ tester = self._tester(**options)
154
+ for x in tester.some_elements():
155
+ tester.assertEqual(x * ~x, self.one())
156
+ tester.assertEqual(~x * x, self.one())
157
+
158
+ def semidirect_product(self, N, mapping, check=True):
159
+ r"""
160
+ The semi-direct product of two groups.
161
+
162
+ EXAMPLES::
163
+
164
+ sage: G = Groups().example() # needs sage.modules
165
+ sage: G.semidirect_product(G, Morphism(G, G)) # needs sage.modules
166
+ Traceback (most recent call last):
167
+ ...
168
+ NotImplementedError: semidirect product of General Linear Group of degree 4
169
+ over Rational Field and General Linear Group of degree 4 over Rational Field
170
+ not yet implemented
171
+ """
172
+ raise NotImplementedError("semidirect product of %s and %s not yet implemented" % (self, N))
173
+
174
+ def holomorph(self):
175
+ r"""
176
+ The holomorph of a group.
177
+
178
+ The holomorph of a group `G` is the semidirect product
179
+ `G \rtimes_{id} Aut(G)`, where `id` is the identity function
180
+ on `Aut(G)`, the automorphism group of `G`.
181
+
182
+ See :wikipedia:`Holomorph (mathematics)`
183
+
184
+ EXAMPLES::
185
+
186
+ sage: G = Groups().example() # needs sage.modules
187
+ sage: G.holomorph() # needs sage.modules
188
+ Traceback (most recent call last):
189
+ ...
190
+ NotImplementedError: holomorph of General Linear Group of degree 4
191
+ over Rational Field not yet implemented
192
+ """
193
+ raise NotImplementedError("holomorph of %s not yet implemented" % self)
194
+
195
+ def cayley_table(self, names='letters', elements=None):
196
+ r"""
197
+ Return the "multiplication" table of this multiplicative group,
198
+ which is also known as the "Cayley table".
199
+
200
+ .. NOTE:: The order of the elements in the row and column
201
+ headings is equal to the order given by the table's
202
+ :meth:`~sage.matrix.operation_table.OperationTable.column_keys`
203
+ method. The association between the actual elements and the
204
+ names/symbols used in the table can also be retrieved as
205
+ a dictionary with the
206
+ :meth:`~sage.matrix.operation_table.OperationTable.translation`
207
+ method.
208
+
209
+ For groups, this routine should behave identically to the
210
+ :meth:`~sage.categories.magmas.Magmas.ParentMethods.multiplication_table`
211
+ method for magmas, which applies in greater generality.
212
+
213
+ INPUT:
214
+
215
+ - ``names`` -- the type of names used, values are:
216
+
217
+ * ``'letters'`` -- lowercase ASCII letters are used
218
+ for a base 26 representation of the elements'
219
+ positions in the list given by :meth:`list`,
220
+ padded to a common width with leading 'a's.
221
+ * ``'digits'`` -- base 10 representation of the
222
+ elements' positions in the list given by
223
+ :meth:`~sage.matrix.operation_table.OperationTable.column_keys`,
224
+ padded to a common width with leading zeros.
225
+ * ``'elements'`` -- the string representations
226
+ of the elements themselves.
227
+ * a list - a list of strings, where the length
228
+ of the list equals the number of elements.
229
+
230
+ - ``elements`` -- (default: ``None``) a list of
231
+ elements of the group, in forms that can be
232
+ coerced into the structure, eg. their string
233
+ representations. This may be used to impose an
234
+ alternate ordering on the elements, perhaps when
235
+ this is used in the context of a particular structure.
236
+ The default is to use whatever ordering is provided by the
237
+ the group, which is reported by the
238
+ :meth:`~sage.matrix.operation_table.OperationTable.column_keys`
239
+ method. Or the ``elements`` can be a subset
240
+ which is closed under the operation. In particular,
241
+ this can be used when the base set is infinite.
242
+
243
+ OUTPUT:
244
+
245
+ An object representing the multiplication table. This is
246
+ an :class:`~sage.matrix.operation_table.OperationTable` object
247
+ and even more documentation can be found there.
248
+
249
+ EXAMPLES:
250
+
251
+ Permutation groups, matrix groups and abelian groups
252
+ can all compute their multiplication tables. ::
253
+
254
+ sage: # needs sage.groups sage.modules
255
+ sage: G = DiCyclicGroup(3)
256
+ sage: T = G.cayley_table()
257
+ sage: T.column_keys()
258
+ ((), (5,6,7), ..., (1,4,2,3)(5,7))
259
+ sage: T
260
+ * a b c d e f g h i j k l
261
+ +------------------------
262
+ a| a b c d e f g h i j k l
263
+ b| b c a e f d i g h l j k
264
+ c| c a b f d e h i g k l j
265
+ d| d e f a b c j k l g h i
266
+ e| e f d b c a l j k i g h
267
+ f| f d e c a b k l j h i g
268
+ g| g h i j k l d e f a b c
269
+ h| h i g k l j f d e c a b
270
+ i| i g h l j k e f d b c a
271
+ j| j k l g h i a b c d e f
272
+ k| k l j h i g c a b f d e
273
+ l| l j k i g h b c a e f d
274
+
275
+ ::
276
+
277
+ sage: M = SL(2, 2) # needs sage.modules
278
+ sage: M.cayley_table() # needs sage.libs.gap sage.modules
279
+ * a b c d e f
280
+ +------------
281
+ a| a b c d e f
282
+ b| b a d c f e
283
+ c| c e a f b d
284
+ d| d f b e a c
285
+ e| e c f a d b
286
+ f| f d e b c a
287
+ <BLANKLINE>
288
+
289
+ ::
290
+
291
+ sage: A = AbelianGroup([2, 3]) # needs sage.modules
292
+ sage: A.cayley_table() # needs sage.modules
293
+ * a b c d e f
294
+ +------------
295
+ a| a b c d e f
296
+ b| b c a e f d
297
+ c| c a b f d e
298
+ d| d e f a b c
299
+ e| e f d b c a
300
+ f| f d e c a b
301
+
302
+ Lowercase ASCII letters are the default symbols used
303
+ for the table, but you can also specify the use of
304
+ decimal digit strings, or provide your own strings
305
+ (in the proper order if they have meaning).
306
+ Also, if the elements themselves are not too complex,
307
+ you can choose to just use the string representations
308
+ of the elements themselves. ::
309
+
310
+ sage: C = CyclicPermutationGroup(11) # needs sage.groups
311
+ sage: C.cayley_table(names='digits') # needs sage.groups sage.modules
312
+ * 00 01 02 03 04 05 06 07 08 09 10
313
+ +---------------------------------
314
+ 00| 00 01 02 03 04 05 06 07 08 09 10
315
+ 01| 01 02 03 04 05 06 07 08 09 10 00
316
+ 02| 02 03 04 05 06 07 08 09 10 00 01
317
+ 03| 03 04 05 06 07 08 09 10 00 01 02
318
+ 04| 04 05 06 07 08 09 10 00 01 02 03
319
+ 05| 05 06 07 08 09 10 00 01 02 03 04
320
+ 06| 06 07 08 09 10 00 01 02 03 04 05
321
+ 07| 07 08 09 10 00 01 02 03 04 05 06
322
+ 08| 08 09 10 00 01 02 03 04 05 06 07
323
+ 09| 09 10 00 01 02 03 04 05 06 07 08
324
+ 10| 10 00 01 02 03 04 05 06 07 08 09
325
+
326
+ ::
327
+
328
+ sage: G = QuaternionGroup() # needs sage.groups
329
+ sage: names = ['1', 'I', '-1', '-I', 'J', '-K', '-J', 'K']
330
+ sage: G.cayley_table(names=names) # needs sage.groups sage.modules
331
+ * 1 I -1 -I J -K -J K
332
+ +------------------------
333
+ 1| 1 I -1 -I J -K -J K
334
+ I| I -1 -I 1 K J -K -J
335
+ -1| -1 -I 1 I -J K J -K
336
+ -I| -I 1 I -1 -K -J K J
337
+ J| J -K -J K -1 -I 1 I
338
+ -K| -K -J K J I -1 -I 1
339
+ -J| -J K J -K 1 I -1 -I
340
+ K| K J -K -J -I 1 I -1
341
+
342
+ ::
343
+
344
+ sage: A = AbelianGroup([2, 2]) # needs sage.groups sage.modules
345
+ sage: A.cayley_table(names='elements') # needs sage.groups sage.modules
346
+ * 1 f1 f0 f0*f1
347
+ +------------------------
348
+ 1| 1 f1 f0 f0*f1
349
+ f1| f1 1 f0*f1 f0
350
+ f0| f0 f0*f1 1 f1
351
+ f0*f1| f0*f1 f0 f1 1
352
+
353
+ The :meth:`~sage.matrix.operation_table.OperationTable.change_names`
354
+ routine behaves similarly, but changes an existing table "in-place."
355
+ ::
356
+
357
+ sage: # needs sage.groups sage.modules
358
+ sage: G = AlternatingGroup(3)
359
+ sage: T = G.cayley_table()
360
+ sage: T.change_names('digits')
361
+ sage: T
362
+ * 0 1 2
363
+ +------
364
+ 0| 0 1 2
365
+ 1| 1 2 0
366
+ 2| 2 0 1
367
+
368
+ For an infinite group, you can still work with finite sets of
369
+ elements, provided the set is closed under multiplication.
370
+ Elements will be coerced into the group as part of setting
371
+ up the table. ::
372
+
373
+ sage: # needs sage.modules
374
+ sage: G = SL(2,ZZ); G
375
+ Special Linear Group of degree 2 over Integer Ring
376
+ sage: identity = matrix(ZZ, [[1,0], [0,1]])
377
+ sage: G.cayley_table(elements=[identity, -identity])
378
+ * a b
379
+ +----
380
+ a| a b
381
+ b| b a
382
+
383
+ The
384
+ :class:`~sage.matrix.operation_table.OperationTable`
385
+ class provides even greater flexibility, including changing
386
+ the operation. Here is one such example, illustrating the
387
+ computation of commutators. ``commutator`` is defined as
388
+ a function of two variables, before being used to build
389
+ the table. From this, the commutator subgroup seems obvious,
390
+ and creating a Cayley table with just these three elements
391
+ confirms that they form a closed subset in the group.
392
+ ::
393
+
394
+ sage: # needs sage.groups sage.modules
395
+ sage: from sage.matrix.operation_table import OperationTable
396
+ sage: G = DiCyclicGroup(3)
397
+ sage: commutator = lambda x, y: x*y*x^-1*y^-1
398
+ sage: T = OperationTable(G, commutator); T
399
+ . a b c d e f g h i j k l
400
+ +------------------------
401
+ a| a a a a a a a a a a a a
402
+ b| a a a a a a c c c c c c
403
+ c| a a a a a a b b b b b b
404
+ d| a a a a a a a a a a a a
405
+ e| a a a a a a c c c c c c
406
+ f| a a a a a a b b b b b b
407
+ g| a b c a b c a c b a c b
408
+ h| a b c a b c b a c b a c
409
+ i| a b c a b c c b a c b a
410
+ j| a b c a b c a c b a c b
411
+ k| a b c a b c b a c b a c
412
+ l| a b c a b c c b a c b a
413
+ sage: trans = T.translation()
414
+ sage: comm = [trans['a'], trans['b'], trans['c']]
415
+ sage: comm
416
+ [(), (5,6,7), (5,7,6)]
417
+ sage: P = G.cayley_table(elements=comm)
418
+ sage: P
419
+ * a b c
420
+ +------
421
+ a| a b c
422
+ b| b c a
423
+ c| c a b
424
+
425
+ .. TODO::
426
+
427
+ Arrange an ordering of elements into cosets of a normal
428
+ subgroup close to size `\sqrt{n}`. Then the quotient
429
+ group structure is often apparent in the table. See
430
+ comments on :issue:`7555`.
431
+
432
+ AUTHOR:
433
+
434
+ - Rob Beezer (2010-03-15)
435
+ """
436
+ from sage.matrix.operation_table import OperationTable
437
+ import operator
438
+ return OperationTable(self, operation=operator.mul, names=names, elements=elements)
439
+
440
+ def conjugacy_class(self, g):
441
+ r"""
442
+ Return the conjugacy class of the element ``g``.
443
+
444
+ This is a fall-back method for groups not defined over GAP.
445
+
446
+ EXAMPLES::
447
+
448
+ sage: A = AbelianGroup([2, 2]) # needs sage.modules
449
+ sage: c = A.conjugacy_class(A.an_element()) # needs sage.groups sage.modules
450
+ sage: type(c) # needs sage.groups sage.modules
451
+ <class 'sage.groups.conjugacy_classes.ConjugacyClass_with_category'>
452
+ """
453
+ from sage.groups.conjugacy_classes import ConjugacyClass
454
+ return ConjugacyClass(self, g)
455
+
456
+ class ElementMethods:
457
+ def conjugacy_class(self):
458
+ r"""
459
+ Return the conjugacy class of ``self``.
460
+
461
+ EXAMPLES::
462
+
463
+ sage: D = DihedralGroup(5) # needs sage.groups
464
+ sage: g = D((1,3,5,2,4)) # needs sage.groups
465
+ sage: g.conjugacy_class() # needs sage.groups
466
+ Conjugacy class of (1,3,5,2,4)
467
+ in Dihedral group of order 10 as a permutation group
468
+
469
+ sage: H = MatrixGroup([matrix(GF(5), 2, [1,2, -1,1]), # needs sage.modules
470
+ ....: matrix(GF(5), 2, [1,1, 0,1])])
471
+ sage: h = H(matrix(GF(5), 2, [1,2, -1,1])) # needs sage.modules
472
+ sage: h.conjugacy_class() # needs sage.groups sage.modules
473
+ Conjugacy class of [1 2]
474
+ [4 1]
475
+ in Matrix group over Finite Field of size 5 with 2 generators (
476
+ [1 2] [1 1]
477
+ [4 1], [0 1]
478
+ )
479
+
480
+ sage: G = SL(2, GF(2)) # needs sage.modules
481
+ sage: g = G.gens()[0] # needs sage.groups sage.modules
482
+ sage: g.conjugacy_class() # needs sage.groups sage.modules
483
+ Conjugacy class of [1 1]
484
+ [0 1] in Special Linear Group of degree 2 over Finite Field of size 2
485
+
486
+ sage: G = SL(2, QQ) # needs sage.modules
487
+ sage: g = G([[1,1], [0,1]]) # needs sage.modules
488
+ sage: g.conjugacy_class() # needs sage.groups sage.modules
489
+ Conjugacy class of [1 1]
490
+ [0 1] in Special Linear Group of degree 2 over Rational Field
491
+ """
492
+ return self.parent().conjugacy_class(self)
493
+
494
+ Finite = LazyImport('sage.categories.finite_groups', 'FiniteGroups', at_startup=True)
495
+ Lie = LazyImport('sage.categories.lie_groups', 'LieGroups', 'Lie')
496
+ Algebras = LazyImport('sage.categories.group_algebras', 'GroupAlgebras', at_startup=True)
497
+
498
+ class Commutative(CategoryWithAxiom):
499
+ r"""
500
+ Category of commutative (abelian) groups.
501
+
502
+ A group `G` is *commutative* if `xy = yx` for all `x,y \in G`.
503
+ """
504
+ @staticmethod
505
+ def free(index_set=None, names=None, **kwds):
506
+ r"""
507
+ Return the free commutative group.
508
+
509
+ INPUT:
510
+
511
+ - ``index_set`` -- (optional) an index set for the generators; if
512
+ an integer, then this represents `\{0, 1, \ldots, n-1\}`
513
+
514
+ - ``names`` -- string or list/tuple/iterable of strings
515
+ (default: ``'x'``); the generator names or name prefix
516
+
517
+ EXAMPLES::
518
+
519
+ sage: # needs sage.combinat sage.groups
520
+ sage: Groups.Commutative.free(index_set=ZZ)
521
+ Free abelian group indexed by Integer Ring
522
+ sage: Groups().Commutative().free(ZZ)
523
+ Free abelian group indexed by Integer Ring
524
+ sage: Groups().Commutative().free(5)
525
+ Multiplicative Abelian group isomorphic to Z x Z x Z x Z x Z
526
+ sage: F.<x,y,z> = Groups().Commutative().free(); F
527
+ Multiplicative Abelian group isomorphic to Z x Z x Z
528
+ """
529
+ from sage.rings.integer_ring import ZZ
530
+ if names is not None:
531
+ if isinstance(names, str):
532
+ if ',' not in names and index_set in ZZ:
533
+ names = [names + repr(i) for i in range(index_set)]
534
+ else:
535
+ names = names.split(',')
536
+ names = tuple(names)
537
+ if index_set is None:
538
+ index_set = ZZ(len(names))
539
+ if index_set in ZZ:
540
+ from sage.groups.abelian_gps.abelian_group import AbelianGroup
541
+ return AbelianGroup(index_set, names=names, **kwds)
542
+
543
+ if index_set in ZZ:
544
+ from sage.groups.abelian_gps.abelian_group import AbelianGroup
545
+ return AbelianGroup(index_set, **kwds)
546
+
547
+ from sage.groups.indexed_free_group import IndexedFreeAbelianGroup
548
+ return IndexedFreeAbelianGroup(index_set, names=names, **kwds)
549
+
550
+ class CartesianProducts(CartesianProductsCategory):
551
+ """
552
+ The category of groups constructed as Cartesian products of groups.
553
+
554
+ This construction gives the direct product of groups. See
555
+ :wikipedia:`Direct_product` and :wikipedia:`Direct_product_of_groups`
556
+ for more information.
557
+ """
558
+ def extra_super_categories(self):
559
+ """
560
+ A Cartesian product of groups is endowed with a natural
561
+ group structure.
562
+
563
+ EXAMPLES::
564
+
565
+ sage: C = Groups().CartesianProducts()
566
+ sage: C.extra_super_categories()
567
+ [Category of groups]
568
+ sage: sorted(C.super_categories(), key=str)
569
+ [Category of Cartesian products of inverse unital magmas,
570
+ Category of Cartesian products of monoids,
571
+ Category of groups]
572
+ """
573
+ return [self.base_category()]
574
+
575
+ class ParentMethods:
576
+ @cached_method
577
+ def group_generators(self):
578
+ """
579
+ Return the group generators of ``self``.
580
+
581
+ EXAMPLES::
582
+
583
+ sage: # needs sage.groups
584
+ sage: C5 = CyclicPermutationGroup(5)
585
+ sage: C4 = CyclicPermutationGroup(4)
586
+ sage: S4 = SymmetricGroup(3)
587
+ sage: C = cartesian_product([C5, C4, S4])
588
+ sage: C.group_generators()
589
+ Family (((1,2,3,4,5), (), ()),
590
+ ((), (1,2,3,4), ()),
591
+ ((), (), (1,2)),
592
+ ((), (), (2,3)))
593
+
594
+ We check the other portion of :issue:`16718` is fixed::
595
+
596
+ sage: len(C.j_classes()) # needs sage.graphs sage.groups
597
+ 1
598
+
599
+ An example with an infinitely generated group (a better output
600
+ is needed)::
601
+
602
+ sage: # needs sage.combinat sage.groups
603
+ sage: G = Groups.free([1,2])
604
+ sage: H = Groups.free(ZZ)
605
+ sage: C = cartesian_product([G, H])
606
+ sage: C.monoid_generators()
607
+ Lazy family (gen(i))_{i in The Cartesian product of (...)}
608
+ """
609
+ F = self.cartesian_factors()
610
+ ids = tuple(G.one() for G in F)
611
+
612
+ def lift(i, gen):
613
+ cur = list(ids)
614
+ cur[i] = gen
615
+ return self._cartesian_product_of_elements(cur)
616
+ from sage.sets.family import Family
617
+
618
+ # Finitely generated
619
+ cat = FiniteEnumeratedSets()
620
+ if all(G.group_generators() in cat
621
+ or isinstance(G.group_generators(), (tuple, list)) for G in F):
622
+ ret = [lift(i, gen) for i, G in enumerate(F) for gen in G.group_generators()]
623
+ return Family(ret)
624
+
625
+ # Infinitely generated
626
+ # This does not return a good output, but it is "correct"
627
+ # TODO: Figure out a better way to do things
628
+ gens_prod = cartesian_product([Family(G.group_generators(),
629
+ lambda g: (i, g))
630
+ for i, G in enumerate(F)])
631
+ return Family(gens_prod, lift, name='gen')
632
+
633
+ def order(self):
634
+ r"""
635
+ Return the cardinality of ``self``.
636
+
637
+ EXAMPLES::
638
+
639
+ sage: C = cartesian_product([SymmetricGroup(10), SL(2, GF(3))]) # needs sage.groups sage.modules
640
+ sage: C.order() # needs sage.groups sage.modules
641
+ 87091200
642
+
643
+ TESTS::
644
+
645
+ sage: C.order.__module__ # needs sage.groups sage.modules
646
+ 'sage.categories.groups'
647
+
648
+ .. TODO::
649
+
650
+ this method is just here to prevent
651
+ ``FiniteGroups.ParentMethods`` to call
652
+ ``_cardinality_from_iterator``.
653
+ """
654
+ from sage.misc.misc_c import prod
655
+ return prod(c.cardinality() for c in self.cartesian_factors())
656
+
657
+ class Topological(TopologicalSpacesCategory):
658
+ """
659
+ Category of topological groups.
660
+
661
+ A topological group `G` is a group which has a topology such that
662
+ multiplication and taking inverses are continuous functions.
663
+
664
+ REFERENCES:
665
+
666
+ - :wikipedia:`Topological_group`
667
+ """