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,769 @@
1
+ # sage_setup: distribution = sagemath-categories
2
+ r"""
3
+ Finite Enumerated Sets
4
+ """
5
+ # ****************************************************************************
6
+ # Copyright (C) 2009 Florent Hivert <Florent.Hivert@univ-rouen.fr>
7
+ #
8
+ # Distributed under the terms of the GNU General Public License (GPL)
9
+ # https://www.gnu.org/licenses/
10
+ # *****************************************************************************
11
+
12
+ from sage.categories.category_with_axiom import CategoryWithAxiom
13
+ from sage.categories.enumerated_sets import EnumeratedSets
14
+ from sage.categories.sets_cat import Sets
15
+ from sage.categories.cartesian_product import CartesianProductsCategory
16
+ from sage.categories.isomorphic_objects import IsomorphicObjectsCategory
17
+ from sage.misc.cachefunc import cached_method
18
+ from sage.misc.lazy_import import lazy_import
19
+ from sage.cpython.getattr import raw_getattr
20
+ lazy_import("sage.rings.integer", "Integer")
21
+
22
+
23
+ class FiniteEnumeratedSets(CategoryWithAxiom):
24
+ """
25
+ The category of finite enumerated sets.
26
+
27
+ EXAMPLES::
28
+
29
+ sage: FiniteEnumeratedSets()
30
+ Category of finite enumerated sets
31
+ sage: FiniteEnumeratedSets().super_categories()
32
+ [Category of enumerated sets, Category of finite sets]
33
+ sage: FiniteEnumeratedSets().all_super_categories()
34
+ [Category of finite enumerated sets,
35
+ Category of enumerated sets,
36
+ Category of finite sets,
37
+ Category of sets,
38
+ Category of sets with partial maps,
39
+ Category of objects]
40
+
41
+ TESTS::
42
+
43
+ sage: C = FiniteEnumeratedSets()
44
+ sage: TestSuite(C).run()
45
+ sage: sorted(C.Algebras(QQ).super_categories(), key=str)
46
+ [Category of finite dimensional vector spaces with basis over Rational Field,
47
+ Category of set algebras over Rational Field]
48
+
49
+ .. TODO::
50
+
51
+ :class:`sage.combinat.debruijn_sequence.DeBruijnSequences` should
52
+ not inherit from this class. If that is solved, then
53
+ :class:`FiniteEnumeratedSets` shall be turned into a subclass of
54
+ :class:`~sage.categories.category_singleton.Category_singleton`.
55
+ """
56
+
57
+ def _call_(self, X):
58
+ """
59
+ Construct an object in this category from the data in ``X``.
60
+
61
+ EXAMPLES::
62
+
63
+ sage: FiniteEnumeratedSets()(GF(3))
64
+ Finite Field of size 3
65
+ sage: Partitions(3)
66
+ Partitions of the integer 3
67
+
68
+ For now, lists, tuples, sets, Sets are coerced into finite
69
+ enumerated sets::
70
+
71
+ sage: FiniteEnumeratedSets()([1, 2, 3])
72
+ {1, 2, 3}
73
+ sage: FiniteEnumeratedSets()((1, 2, 3))
74
+ {1, 2, 3}
75
+ sage: FiniteEnumeratedSets()(set([1, 2, 3]))
76
+ {1, 2, 3}
77
+ sage: FiniteEnumeratedSets()(Set([1, 2, 3]))
78
+ {1, 2, 3}
79
+ """
80
+ return EnumeratedSets()._call_(X)
81
+
82
+ class ParentMethods:
83
+
84
+ def __len__(self):
85
+ """
86
+ Return the number of elements of ``self``.
87
+
88
+ EXAMPLES::
89
+
90
+ sage: len(GF(5))
91
+ 5
92
+ sage: len(MatrixSpace(GF(2), 3, 3)) # needs sage.modules
93
+ 512
94
+ """
95
+ return int(self.cardinality())
96
+
97
+ def _cardinality_from_iterator(self, *ignored_args, **ignored_kwds):
98
+ """
99
+ Return the cardinality of ``self``.
100
+
101
+ This brute force implementation of :meth:`cardinality`
102
+ iterates through the elements of ``self`` to count them.
103
+
104
+ EXAMPLES::
105
+
106
+ sage: C = FiniteEnumeratedSets().example(); C
107
+ An example of a finite enumerated set: {1,2,3}
108
+ sage: C._cardinality_from_iterator()
109
+ 3
110
+
111
+ TESTS:
112
+
113
+ This is the default implementation of :meth:`cardinality`
114
+ from the category ``FiniteEnumeratedSet()``. To test this,
115
+ we need a fresh example::
116
+
117
+ sage: from sage.categories.examples.finite_enumerated_sets import Example
118
+ sage: class FreshExample(Example): pass
119
+ sage: C = FreshExample(); C.rename('FreshExample')
120
+ sage: C.cardinality
121
+ <bound method FiniteEnumeratedSets.ParentMethods._cardinality_from_iterator of FreshExample>
122
+
123
+ This method shall return an ``Integer``; we test this
124
+ here, because :meth:`_test_enumerated_set_iter_cardinality`
125
+ does not do it for us::
126
+
127
+ sage: type(C._cardinality_from_iterator())
128
+ <class 'sage.rings.integer.Integer'>
129
+
130
+ We ignore additional inputs since during doctests classes which
131
+ override ``cardinality()`` call up to the category rather than
132
+ their own ``cardinality()`` method (see :issue:`13688`)::
133
+
134
+ sage: C = FiniteEnumeratedSets().example()
135
+ sage: C._cardinality_from_iterator(algorithm='testing')
136
+ 3
137
+
138
+ Here is a more complete example::
139
+
140
+ sage: class TestParent(Parent):
141
+ ....: def __init__(self):
142
+ ....: Parent.__init__(self, category=FiniteEnumeratedSets())
143
+ ....: def __iter__(self):
144
+ ....: yield 1
145
+ ....: return
146
+ ....: def cardinality(self, dummy_arg):
147
+ ....: return 1 # we don't want to change the semantics of cardinality()
148
+ sage: P = TestParent()
149
+ sage: P.cardinality(-1)
150
+ 1
151
+ sage: v = P.list(); v
152
+ [1]
153
+ sage: P.cardinality()
154
+ 1
155
+ sage: P.cardinality('use alt algorithm') # Used to break here: see trac #13688
156
+ 1
157
+ sage: P.cardinality(dummy_arg='use alg algorithm') # Used to break here: see trac #13688
158
+ 1
159
+ """
160
+ c = 0
161
+ for _ in self:
162
+ c += 1
163
+ return Integer(c)
164
+
165
+ #Set cardinality to the default implementation
166
+ cardinality = _cardinality_from_iterator
167
+
168
+ def _cardinality_from_list(self, *ignored_args, **ignored_kwds):
169
+ """
170
+ The cardinality of ``self``.
171
+
172
+ This implementation of :meth:`cardinality` computes the
173
+ cardinality from :meth:`list` (which is
174
+ cached). Reciprocally, calling ``self.list()`` makes this
175
+ method the default implementation of :meth:`cardinality`.
176
+
177
+ EXAMPLES::
178
+
179
+ sage: C = FiniteEnumeratedSets().example()
180
+ sage: C._cardinality_from_list()
181
+ 3
182
+
183
+ We ignore additional inputs since during doctests classes which
184
+ override ``cardinality()`` call up to the category rather than
185
+ their own ``cardinality()`` method (see :issue:`13688`)::
186
+
187
+ sage: C = FiniteEnumeratedSets().example()
188
+ sage: C._cardinality_from_list(algorithm='testing')
189
+ 3
190
+ """
191
+ return Integer(len(self.tuple()))
192
+
193
+ def _unrank_from_list(self, r):
194
+ r"""
195
+ The `r`-th element of ``self``.
196
+
197
+ INPUT:
198
+
199
+ - ``r`` -- integer between `0` and `n-1`,
200
+ where `n` is the cardinality of ``self``
201
+
202
+ OUTPUT: the `r`-th element of ``self``
203
+
204
+ This implementation of :meth:`unrank` uses the method
205
+ :meth:`list` (which is cached). Reciprocally, calling
206
+ ``self.list()`` makes this method the default
207
+ implementation of :meth:`unrank`.
208
+
209
+ EXAMPLES::
210
+
211
+ sage: C = FiniteEnumeratedSets().example()
212
+ sage: C._unrank_from_list(1)
213
+ 2
214
+ """
215
+ lst = self.tuple()
216
+ try:
217
+ return lst[r]
218
+ except IndexError:
219
+ raise ValueError("the value must be in the range from %s to %s" % (0, len(lst) - 1))
220
+
221
+ def tuple(self):
222
+ r"""
223
+ Return a :class:`tuple`of the elements of ``self``.
224
+
225
+ EXAMPLES::
226
+
227
+ sage: C = FiniteEnumeratedSets().example()
228
+ sage: C.tuple()
229
+ (1, 2, 3)
230
+ sage: C.tuple() is C.tuple()
231
+ True
232
+ """
233
+ # Simpler implementation because it does not have to check whether cardinality is finite
234
+ try: # shortcut
235
+ if self._list is not None:
236
+ return self._tuple_from_list()
237
+ except AttributeError:
238
+ pass
239
+
240
+ if self.list != self._list_default:
241
+ return tuple(self.list())
242
+
243
+ return self._tuple_from_iterator()
244
+ _tuple_default = tuple
245
+
246
+ def _list_from_iterator(self):
247
+ r"""
248
+ Return a list of the elements of ``self`` after cached.
249
+
250
+ It moreover overrides the following methods to use this cache:
251
+
252
+ - ``self.__iter__()``
253
+ - ``self.cardinality()``
254
+ - ``self.unrank()``
255
+
256
+ .. SEEALSO:: :meth:`_cardinality_from_list`,
257
+ :meth:`_iterator_from_list`, and :meth:`_unrank_from_list`
258
+
259
+ .. WARNING::
260
+
261
+ The overriding of ``self.__iter__`` to use the cache
262
+ is ignored upon calls such as ``for x in C:`` or
263
+ ``list(C)`` (which essentially ruins its purpose).
264
+ Indeed, Python looks up the ``__iter__`` method
265
+ directly in the class of ``C``, bypassing ``C``'s
266
+ dictionary (see the Python reference manual,
267
+ `Special method lookup for new-style classes <http://docs.python.org/reference/datamodel.html#special-method-lookup-for-new-style-classes>`_)
268
+
269
+ Let's take an example::
270
+
271
+ sage: class Example(Parent):
272
+ ....: def __init__(self):
273
+ ....: Parent.__init__(self, category = FiniteEnumeratedSets())
274
+ ....: def __iter__(self):
275
+ ....: print("hello!")
276
+ ....: for x in [1,2,3]: yield x
277
+ sage: C = Example()
278
+ sage: list(C)
279
+ hello!
280
+ ...
281
+ [1, 2, 3]
282
+ sage: list(C)
283
+ hello!
284
+ ...
285
+ [1, 2, 3]
286
+
287
+ Note that ``hello!`` actually gets printed more than once in
288
+ the calls to ``list(C)``. That's because of the
289
+ implicit calls to :meth:`__len__`, which also relies
290
+ on :meth:`__iter__`. Let's call :meth:`list`::
291
+
292
+ sage: C.list()
293
+ hello!
294
+ [1, 2, 3]
295
+ sage: C.list()
296
+ [1, 2, 3]
297
+
298
+ Now we would want the original iterator of ``C`` not
299
+ to be called anymore, but that's not the case::
300
+
301
+ sage: list(C)
302
+ hello!
303
+ [1, 2, 3]
304
+
305
+ TESTS:
306
+
307
+ To test if the caching and overriding works, we need a
308
+ fresh finite enumerated set example, because the caching
309
+ mechanism has already been triggered::
310
+
311
+ sage: from sage.categories.examples.finite_enumerated_sets import Example
312
+ sage: class FreshExample(Example): pass
313
+ sage: C = FreshExample(); C.rename('FreshExample')
314
+ sage: C.list
315
+ <bound method EnumeratedSets.ParentMethods.list of FreshExample>
316
+ sage: C.unrank
317
+ <bound method EnumeratedSets.ParentMethods._unrank_from_iterator of FreshExample>
318
+ sage: C.cardinality
319
+ <bound method FiniteEnumeratedSets.ParentMethods._cardinality_from_iterator of FreshExample>
320
+ sage: l1 = C.list(); l1
321
+ [1, 2, 3]
322
+ sage: C.list
323
+ <bound method EnumeratedSets.ParentMethods.list of FreshExample>
324
+ sage: C.unrank
325
+ <bound method FiniteEnumeratedSets.ParentMethods._unrank_from_list of FreshExample>
326
+ sage: C.cardinality
327
+ <bound method FiniteEnumeratedSets.ParentMethods._cardinality_from_list of FreshExample>
328
+ sage: C.__iter__
329
+ <bound method EnumeratedSets.ParentMethods._iterator_from_list of FreshExample>
330
+
331
+ We finally check that nothing breaks before and after
332
+ calling explicitly the method ``.list()``::
333
+
334
+ sage: class FreshExample(Example): pass
335
+ sage: import __main__; __main__.FreshExample = FreshExample # Fake FreshExample being defined in a python module
336
+ sage: C = FreshExample()
337
+ sage: TestSuite(C).run()
338
+ sage: C.list()
339
+ [1, 2, 3]
340
+ sage: TestSuite(C).run()
341
+ """
342
+ try:
343
+ if self._list is not None:
344
+ return list(self._list)
345
+ except AttributeError:
346
+ pass
347
+ result = tuple(self.__iter__())
348
+ try:
349
+ self._list = result
350
+ self.__iter__ = self._iterator_from_list
351
+ self.cardinality = self._cardinality_from_list
352
+ self.tuple = self._tuple_from_list
353
+ self.unrank = self._unrank_from_list
354
+ except AttributeError:
355
+ pass
356
+ return list(result)
357
+
358
+ def unrank_range(self, start=None, stop=None, step=None):
359
+ r"""
360
+ Return the range of elements of ``self`` starting at ``start``,
361
+ ending at ``stop``, and stepping by ``step``.
362
+
363
+ See also ``unrank()``.
364
+
365
+ EXAMPLES::
366
+
367
+ sage: F = FiniteEnumeratedSet([1,2,3])
368
+ sage: F.unrank_range(1)
369
+ [2, 3]
370
+ sage: F.unrank_range(stop=2)
371
+ [1, 2]
372
+ sage: F.unrank_range(stop=2, step=2)
373
+ [1]
374
+ sage: F.unrank_range(start=1, step=2)
375
+ [2]
376
+ sage: F.unrank_range(stop=-1)
377
+ [1, 2]
378
+
379
+ sage: F = FiniteEnumeratedSet([1,2,3,4])
380
+ sage: F.unrank_range(stop=10)
381
+ [1, 2, 3, 4]
382
+ """
383
+ try:
384
+ return list(self._list[start:stop:step])
385
+ except AttributeError:
386
+ pass
387
+ card = self.cardinality() # This may set the list
388
+ try:
389
+ return list(self._list[start:stop:step])
390
+ except AttributeError:
391
+ pass
392
+ if start is None and stop is not None and stop >= 0 and step is None:
393
+ if stop < card:
394
+ it = self.__iter__()
395
+ return [next(it) for j in range(stop)]
396
+ return self.list()
397
+ return list(self.tuple()[start:stop:step])
398
+
399
+ def iterator_range(self, start=None, stop=None, step=None):
400
+ r"""
401
+ Iterate over the range of elements of ``self`` starting
402
+ at ``start``, ending at ``stop``, and stepping by ``step``.
403
+
404
+ .. SEEALSO::
405
+
406
+ ``unrank()``, ``unrank_range()``
407
+
408
+ EXAMPLES::
409
+
410
+ sage: F = FiniteEnumeratedSet([1,2,3])
411
+ sage: list(F.iterator_range(1))
412
+ [2, 3]
413
+ sage: list(F.iterator_range(stop=2))
414
+ [1, 2]
415
+ sage: list(F.iterator_range(stop=2, step=2))
416
+ [1]
417
+ sage: list(F.iterator_range(start=1, step=2))
418
+ [2]
419
+ sage: list(F.iterator_range(start=1, stop=2))
420
+ [2]
421
+ sage: list(F.iterator_range(start=0, stop=1))
422
+ [1]
423
+ sage: list(F.iterator_range(start=0, stop=3, step=2))
424
+ [1, 3]
425
+ sage: list(F.iterator_range(stop=-1))
426
+ [1, 2]
427
+
428
+ sage: F = FiniteEnumeratedSet([1,2,3,4])
429
+ sage: list(F.iterator_range(start=1, stop=3))
430
+ [2, 3]
431
+ sage: list(F.iterator_range(stop=10))
432
+ [1, 2, 3, 4]
433
+ """
434
+ L = None
435
+ try:
436
+ L = self._list
437
+ except AttributeError:
438
+ pass
439
+ card = self.cardinality() # This may set the list
440
+ try:
441
+ L = self._list
442
+ except AttributeError:
443
+ pass
444
+ if L is None and start is None and stop is not None and stop >= 0 and step is None:
445
+ if stop < card:
446
+ it = self.__iter__()
447
+ for j in range(stop):
448
+ yield next(it)
449
+ return
450
+ yield from self
451
+ return
452
+ if L is None:
453
+ L = self.tuple()
454
+ yield from L[start:stop:step]
455
+
456
+ def _random_element_from_unrank(self):
457
+ """
458
+ A random element in ``self``.
459
+
460
+ ``self.random_element()`` returns a random element in
461
+ ``self`` with uniform probability.
462
+
463
+ This is the default implementation from the category
464
+ ``EnumeratedSet()`` which uses the method ``unrank``.
465
+
466
+ EXAMPLES::
467
+
468
+ sage: C = FiniteEnumeratedSets().example()
469
+ sage: n = C.random_element()
470
+ sage: n in C
471
+ True
472
+
473
+ sage: n = C._random_element_from_unrank()
474
+ sage: n in C
475
+ True
476
+
477
+ TODO: implement _test_random which checks uniformity
478
+ """
479
+ from sage.misc.prandom import randint
480
+ c = self.cardinality()
481
+ r = randint(0, c-1)
482
+ return self.unrank(r)
483
+ # Set the default implementation of random_element
484
+ random_element = _random_element_from_unrank
485
+
486
+ @cached_method
487
+ def _last_from_iterator(self):
488
+ """
489
+ The last element of ``self``.
490
+
491
+ ``self.last()`` returns the last element of ``self``.
492
+
493
+ This is the default (brute force) implementation from the
494
+ category ``FiniteEnumeratedSet()`` which can be used when
495
+ the method ``__iter__`` is provided. Its complexity is
496
+ `O(n)` where `n` is the size of ``self``.
497
+
498
+ EXAMPLES::
499
+
500
+ sage: C = FiniteEnumeratedSets().example()
501
+ sage: C.last()
502
+ 3
503
+ sage: C._last_from_iterator()
504
+ 3
505
+ """
506
+ for i in self:
507
+ pass
508
+ return i
509
+ last = _last_from_iterator
510
+
511
+ def _last_from_unrank(self):
512
+ """
513
+ The last element of ``self``.
514
+
515
+ ``self.last()`` returns the last element of ``self``
516
+
517
+ This is a generic implementation from the category
518
+ ``FiniteEnumeratedSet()`` which can be used when the
519
+ method ``unrank`` is provided.
520
+
521
+ EXAMPLES::
522
+
523
+ sage: C = FiniteEnumeratedSets().example()
524
+ sage: C._last_from_unrank()
525
+ 3
526
+ """
527
+ return self.unrank(self.cardinality() - 1)
528
+
529
+ def _test_enumerated_set_iter_cardinality(self, **options):
530
+ """
531
+ Check that the methods :meth:`.cardinality` and
532
+ :meth:`.__iter__` are consistent. Also checks that
533
+ :meth:`.cardinality` returns an ``Integer``.
534
+
535
+ For efficiency reasons, those tests are not run if
536
+ :meth:`.cardinality` is
537
+ :meth:`._cardinality_from_iterator`, or if ``self`` is too
538
+ big.
539
+
540
+ .. SEEALSO:: :class:`TestSuite`.
541
+
542
+ EXAMPLES::
543
+
544
+ sage: C = FiniteEnumeratedSets().example()
545
+ sage: C._test_enumerated_set_iter_cardinality()
546
+
547
+ Let us now break the class::
548
+
549
+ sage: from sage.categories.examples.finite_enumerated_sets import Example
550
+ sage: class CCls(Example):
551
+ ....: def cardinality(self):
552
+ ....: return 4
553
+ sage: CC = CCls()
554
+ sage: CC._test_enumerated_set_iter_cardinality()
555
+ Traceback (most recent call last):
556
+ ...
557
+ AssertionError: 4 != 3
558
+ """
559
+ tester = self._tester(**options)
560
+ if self.cardinality != self._cardinality_from_iterator:
561
+ card = self.cardinality()
562
+ if card <= tester._max_runs:
563
+ tester.assertEqual(card,
564
+ self._cardinality_from_iterator())
565
+
566
+ class CartesianProducts(CartesianProductsCategory):
567
+
568
+ def extra_super_categories(self):
569
+ """
570
+ A Cartesian product of finite enumerated sets is a finite
571
+ enumerated set.
572
+
573
+ EXAMPLES::
574
+
575
+ sage: C = FiniteEnumeratedSets().CartesianProducts()
576
+ sage: C.extra_super_categories()
577
+ [Category of finite enumerated sets]
578
+ """
579
+ return [FiniteEnumeratedSets()]
580
+
581
+ class ParentMethods:
582
+ r"""
583
+ TESTS:
584
+
585
+ Ideally, these tests should be just after the declaration of the
586
+ associated attributes. But doing this way, Sage will not consider
587
+ them as a doctest.
588
+
589
+ We check that Cartesian products of finite enumerated sets
590
+ inherit various methods from `Sets.CartesianProducts`
591
+ and not from :class:`EnumeratedSets.Finite`::
592
+
593
+ sage: C = cartesian_product([Partitions(10), Permutations(20)])
594
+ sage: C in EnumeratedSets().Finite()
595
+ True
596
+
597
+ sage: C.random_element.__module__
598
+ 'sage.categories.sets_cat'
599
+
600
+ sage: C.cardinality.__module__
601
+ 'sage.categories.sets_cat'
602
+
603
+ sage: C.__iter__.__module__
604
+ 'sage.categories.sets_cat'
605
+ """
606
+ random_element = raw_getattr(Sets.CartesianProducts.ParentMethods, "random_element")
607
+ cardinality = raw_getattr(Sets.CartesianProducts.ParentMethods, "cardinality")
608
+ __iter__ = raw_getattr(Sets.CartesianProducts.ParentMethods, "__iter__")
609
+
610
+ def last(self):
611
+ r"""
612
+ Return the last element.
613
+
614
+ EXAMPLES::
615
+
616
+ sage: C = cartesian_product([Zmod(42), Partitions(10),
617
+ ....: IntegerRange(5)])
618
+ sage: C.last()
619
+ (41, [1, 1, 1, 1, 1, 1, 1, 1, 1, 1], 4)
620
+ """
621
+ return self._cartesian_product_of_elements(
622
+ tuple(c.last() for c in self.cartesian_factors()))
623
+
624
+ def rank(self, x):
625
+ r"""
626
+ Return the rank of an element of this Cartesian product.
627
+
628
+ The *rank* of ``x`` is its position in the
629
+ enumeration. It is an integer between ``0`` and
630
+ ``n-1`` where ``n`` is the cardinality of this set.
631
+
632
+ .. SEEALSO::
633
+
634
+ - :meth:`EnumeratedSets.ParentMethods.rank`
635
+ - :meth:`unrank`
636
+
637
+ EXAMPLES::
638
+
639
+ sage: C = cartesian_product([GF(2), GF(11), GF(7)])
640
+ sage: C.rank(C((1,2,5)))
641
+ 96
642
+ sage: C.rank(C((0,0,0)))
643
+ 0
644
+
645
+ sage: for c in C: print(C.rank(c))
646
+ 0
647
+ 1
648
+ 2
649
+ 3
650
+ 4
651
+ 5
652
+ ...
653
+ 150
654
+ 151
655
+ 152
656
+ 153
657
+
658
+ sage: # needs sage.combinat sage.libs.flint
659
+ sage: F1 = FiniteEnumeratedSet('abcdefgh')
660
+ sage: F2 = IntegerRange(250)
661
+ sage: F3 = Partitions(20)
662
+ sage: C = cartesian_product([F1, F2, F3])
663
+ sage: c = C(('a', 86, [7,5,4,4]))
664
+ sage: C.rank(c)
665
+ 54213
666
+ sage: C.unrank(54213)
667
+ ('a', 86, [7, 5, 4, 4])
668
+ """
669
+ from sage.rings.integer_ring import ZZ
670
+ x = self(x)
671
+ b = ZZ.one()
672
+ rank = ZZ.zero()
673
+ for f, c in zip(reversed(x.cartesian_factors()),
674
+ reversed(self.cartesian_factors())):
675
+ rank += b * c.rank(f)
676
+ b *= c.cardinality()
677
+ return rank
678
+
679
+ def unrank(self, i):
680
+ r"""
681
+ Return the `i`-th element of this Cartesian product.
682
+
683
+ INPUT:
684
+
685
+ - ``i`` -- integer between `0` and `n-1` where
686
+ `n` is the cardinality of this set
687
+
688
+ .. SEEALSO::
689
+
690
+ - :meth:`EnumeratedSets.ParentMethods.unrank`
691
+ - :meth:`rank`
692
+
693
+ EXAMPLES::
694
+
695
+ sage: C = cartesian_product([GF(3), GF(11), GF(7), GF(5)])
696
+ sage: c = C.unrank(123); c
697
+ (0, 3, 3, 3)
698
+ sage: C.rank(c)
699
+ 123
700
+
701
+ sage: c = C.unrank(857); c
702
+ (2, 2, 3, 2)
703
+ sage: C.rank(c)
704
+ 857
705
+
706
+ sage: C.unrank(2500)
707
+ Traceback (most recent call last):
708
+ ...
709
+ IndexError: index i (=2) is greater than the cardinality
710
+ """
711
+ from sage.rings.integer_ring import ZZ
712
+ i = ZZ(i)
713
+ if i < 0:
714
+ raise IndexError("i (={}) must be a nonnegative integer")
715
+ elt = []
716
+ for c in reversed(self.cartesian_factors()):
717
+ card = c.cardinality()
718
+ elt.insert(0, c.unrank(i % card))
719
+ i //= card
720
+ if i:
721
+ raise IndexError("index i (={}) is greater than the cardinality".format(i))
722
+ return self._cartesian_product_of_elements(elt)
723
+
724
+ class IsomorphicObjects(IsomorphicObjectsCategory):
725
+
726
+ def example(self):
727
+ """
728
+ Return an example of isomorphic object of a finite
729
+ enumerated set, as per :meth:`Category.example
730
+ <sage.categories.category.Category.example>`.
731
+
732
+ EXAMPLES::
733
+
734
+ sage: FiniteEnumeratedSets().IsomorphicObjects().example()
735
+ The image by some isomorphism of An example of a finite enumerated set: {1,2,3}
736
+ """
737
+ from sage.categories.examples.finite_enumerated_sets import IsomorphicObjectOfFiniteEnumeratedSet
738
+ return IsomorphicObjectOfFiniteEnumeratedSet()
739
+
740
+ class ParentMethods:
741
+
742
+ def cardinality(self):
743
+ r"""
744
+ Return the cardinality of ``self`` which is the same
745
+ as that of the ambient set ``self`` is isomorphic to.
746
+
747
+ EXAMPLES::
748
+
749
+ sage: A = FiniteEnumeratedSets().IsomorphicObjects().example(); A
750
+ The image by some isomorphism of An example of a finite enumerated set: {1,2,3}
751
+ sage: A.cardinality()
752
+ 3
753
+ """
754
+ return self.ambient().cardinality()
755
+
756
+ def __iter__(self):
757
+ r"""
758
+ Return an iterator over ``self``, using the bijection
759
+ with the ambient space.
760
+
761
+ EXAMPLES::
762
+
763
+ sage: A = FiniteEnumeratedSets().IsomorphicObjects().example(); A
764
+ The image by some isomorphism of An example of a finite enumerated set: {1,2,3}
765
+ sage: list(A) # indirect doctest
766
+ [1, 4, 9]
767
+ """
768
+ for x in self.ambient():
769
+ yield self.retract(x)