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,858 @@
1
+ # sage_setup: distribution = sagemath-categories
2
+ r"""
3
+ Partition backtrack functions for sets
4
+
5
+ EXAMPLES::
6
+
7
+ sage: import sage.groups.perm_gps.partn_ref.refinement_sets
8
+
9
+ REFERENCE:
10
+
11
+ [1] McKay, Brendan D. Practical Graph Isomorphism. Congressus Numerantium,
12
+ Vol. 30 (1981), pp. 45-87.
13
+
14
+ [2] Leon, Jeffrey. Permutation Group Algorithms Based on Partitions, I:
15
+ Theory and Algorithms. J. Symbolic Computation, Vol. 12 (1991), pp.
16
+ 533-583.
17
+ """
18
+
19
+ #*****************************************************************************
20
+ # Copyright (C) 2006 - 2011 Robert L. Miller <rlmillster@gmail.com>
21
+ #
22
+ # This program is free software: you can redistribute it and/or modify
23
+ # it under the terms of the GNU General Public License as published by
24
+ # the Free Software Foundation, either version 2 of the License, or
25
+ # (at your option) any later version.
26
+ # http://www.gnu.org/licenses/
27
+ #*****************************************************************************
28
+
29
+ from sage.groups.perm_gps.partn_ref.data_structures cimport *
30
+ from sage.groups.perm_gps.partn_ref.double_coset cimport double_coset
31
+ from sage.data_structures.bitset_base cimport *
32
+
33
+
34
+ def set_stab_py(generators, sett, relab=False):
35
+ r"""
36
+ Compute the setwise stabilizer of a subset of [0..n-1] in a subgroup of S_n.
37
+
38
+ EXAMPLES::
39
+
40
+ sage: from sage.groups.perm_gps.partn_ref.refinement_sets import set_stab_py
41
+
42
+ Degree 4 examples
43
+
44
+ A four-cycle::
45
+
46
+ sage: set_stab_py([[1,2,3,0]], [0])
47
+ []
48
+ sage: set_stab_py([[1,2,3,0]], [0,1])
49
+ []
50
+ sage: set_stab_py([[1,2,3,0]], [0,1,2])
51
+ []
52
+ sage: set_stab_py([[1,2,3,0]], [0,1,2,3])
53
+ [[1, 2, 3, 0]]
54
+ sage: set_stab_py([[1,2,3,0]], [0,2])
55
+ [[2, 3, 0, 1]]
56
+
57
+ Symmetric group::
58
+
59
+ sage: set_stab_py([[1,0,2,3],[1,2,3,0]], [0])
60
+ [[0, 1, 3, 2], [0, 2, 1, 3]]
61
+ sage: set_stab_py([[1,0,2,3],[1,2,3,0]], [0,1])
62
+ [[1, 0, 2, 3], [0, 1, 3, 2]]
63
+ sage: set_stab_py([[1,0,2,3],[1,2,3,0]], [0,1,2,3])
64
+ [[0, 1, 3, 2], [0, 2, 1, 3], [1, 0, 2, 3]]
65
+ sage: set_stab_py([[1,0,2,3],[1,2,3,0]], [0,3])
66
+ [[3, 1, 2, 0], [0, 2, 1, 3]]
67
+
68
+ Klein 4-group::
69
+
70
+ sage: set_stab_py([[1,0,2,3],[0,1,3,2]], [0])
71
+ [[0, 1, 3, 2]]
72
+ sage: set_stab_py([[1,0,2,3],[0,1,3,2]], [0,1])
73
+ [[0, 1, 3, 2], [1, 0, 2, 3]]
74
+ sage: set_stab_py([[1,0,2,3],[0,1,3,2]], [0,2])
75
+ []
76
+
77
+ Dihedral group::
78
+
79
+ sage: set_stab_py([[1,2,3,0],[0,3,2,1]], [0])
80
+ [[0, 3, 2, 1]]
81
+ sage: set_stab_py([[1,2,3,0],[0,3,2,1]], [0,1])
82
+ [[1, 0, 3, 2]]
83
+ sage: set_stab_py([[1,2,3,0],[0,3,2,1]], [0,2])
84
+ [[2, 1, 0, 3], [0, 3, 2, 1]]
85
+ sage: set_stab_py([[1,2,3,0],[0,3,2,1]], [1])
86
+ [[2, 1, 0, 3]]
87
+ sage: set_stab_py([[1,2,3,0],[0,3,2,1]], [1,2,3])
88
+ [[0, 3, 2, 1]]
89
+
90
+ Alternating group::
91
+
92
+ sage: set_stab_py([[1,2,0,3],[0,2,3,1]], [0])
93
+ [[0, 2, 3, 1]]
94
+ sage: set_stab_py([[1,2,0,3],[0,2,3,1]], [1])
95
+ [[2, 1, 3, 0]]
96
+ sage: set_stab_py([[1,2,0,3],[0,2,3,1]], [2])
97
+ [[1, 3, 2, 0]]
98
+ sage: set_stab_py([[1,2,0,3],[0,2,3,1]], [3])
99
+ [[1, 2, 0, 3]]
100
+ sage: set_stab_py([[1,2,0,3],[0,2,3,1]], [0,1])
101
+ [[1, 0, 3, 2]]
102
+ sage: set_stab_py([[1,2,0,3],[0,2,3,1]], [0,2])
103
+ [[2, 3, 0, 1]]
104
+ sage: set_stab_py([[1,2,0,3],[0,2,3,1]], [0,3])
105
+ [[3, 2, 1, 0]]
106
+
107
+ Larger degree examples
108
+
109
+ Dihedral group of degree 5::
110
+
111
+ sage: set_stab_py([[1,2,3,4,0],[0,4,3,2,1]], [])
112
+ [[0, 4, 3, 2, 1], [1, 0, 4, 3, 2]]
113
+ sage: set_stab_py([[1,2,3,4,0],[0,4,3,2,1]], [0])
114
+ [[0, 4, 3, 2, 1]]
115
+ sage: set_stab_py([[1,2,3,4,0],[0,4,3,2,1]], [0,2])
116
+ [[2, 1, 0, 4, 3]]
117
+
118
+ Dihedral group of degree 6::
119
+
120
+ sage: set_stab_py([[1,2,3,4,5,0],[0,5,4,3,2,1]], [])
121
+ [[0, 5, 4, 3, 2, 1], [1, 0, 5, 4, 3, 2]]
122
+ sage: set_stab_py([[1,2,3,4,5,0],[0,5,4,3,2,1]], [0])
123
+ [[0, 5, 4, 3, 2, 1]]
124
+ sage: set_stab_py([[1,2,3,4,5,0],[0,5,4,3,2,1]], [0,1])
125
+ [[1, 0, 5, 4, 3, 2]]
126
+ sage: set_stab_py([[1,2,3,4,5,0],[0,5,4,3,2,1]], [0,2])
127
+ [[2, 1, 0, 5, 4, 3]]
128
+ sage: set_stab_py([[1,2,3,4,5,0],[0,5,4,3,2,1]], [0,3])
129
+ [[0, 5, 4, 3, 2, 1], [3, 2, 1, 0, 5, 4]]
130
+ sage: set_stab_py([[1,2,3,4,5,0],[0,5,4,3,2,1]], [0,2,4])
131
+ [[2, 1, 0, 5, 4, 3], [4, 3, 2, 1, 0, 5]]
132
+
133
+ Canonical labels::
134
+
135
+ sage: set_stab_py([[0,2,1,4,3,5,8,7,6],[8,7,6,3,5,4,2,1,0]], [0,1,3,5,6], True)
136
+ ([], [7, 8, 6, 3, 4, 5, 2, 0, 1])
137
+ sage: set_stab_py([[0,2,1,4,3,5,8,7,6],[8,7,6,3,5,4,2,1,0]], [0,3,5,6,8], True)
138
+ ([], [2, 1, 0, 5, 4, 3, 7, 6, 8])
139
+ """
140
+ if len(generators) == 0:
141
+ return []
142
+ cdef int i, j, n = len(generators[0]), n_gens = len(generators)
143
+ cdef StabilizerChain *supergroup = SC_new(n)
144
+ cdef aut_gp_and_can_lab *stabilizer
145
+ cdef int *gens = <int *> sig_malloc(n*n_gens * sizeof(int))
146
+ cdef subset *subset_sett = <subset *> sig_malloc(sizeof(subset))
147
+ if gens is NULL or supergroup is NULL or subset_sett is NULL:
148
+ SC_dealloc(supergroup)
149
+ sig_free(gens)
150
+ sig_free(subset_sett)
151
+ raise MemoryError
152
+ bitset_init(&subset_sett.bits, n)
153
+ subset_sett.scratch = <int *> sig_malloc((3*n+1) * sizeof(int))
154
+ for i from 0 <= i < len(generators):
155
+ for j from 0 <= j < n:
156
+ gens[n*i + j] = generators[i][j]
157
+ if SC_insert(supergroup, 0, gens, n_gens):
158
+ SC_dealloc(supergroup)
159
+ sig_free(gens)
160
+ sig_free(subset_sett)
161
+ raise MemoryError
162
+ sig_free(gens)
163
+ bitset_clear(&subset_sett.bits)
164
+ for i in sett:
165
+ bitset_add(&subset_sett.bits, i)
166
+ stabilizer = set_stab(supergroup, subset_sett, relab)
167
+ SC_dealloc(supergroup)
168
+ bitset_free(&subset_sett.bits)
169
+ sig_free(subset_sett.scratch)
170
+ sig_free(subset_sett)
171
+ if stabilizer is NULL:
172
+ raise MemoryError
173
+ stab_gens = []
174
+ for i from 0 <= i < stabilizer.num_gens:
175
+ stab_gens.append([stabilizer.generators[i*n+j] for j from 0 <= j < n])
176
+ if relab:
177
+ relabeling = [stabilizer.relabeling[j] for j from 0 <= j < n]
178
+ deallocate_agcl_output(stabilizer)
179
+ if relab:
180
+ return stab_gens, relabeling
181
+ return stab_gens
182
+
183
+
184
+ cdef aut_gp_and_can_lab *set_stab(StabilizerChain *supergroup, subset *sett, bint relab) noexcept:
185
+ r"""
186
+ Compute the set stabilizer of ``sett`` within ``supergroup``. (Note that
187
+ ``set`` is a reserved Python keyword.) If ``relab`` is specified then
188
+ compute the canonical label of the set under the action of the group.
189
+ """
190
+ cdef aut_gp_and_can_lab *output
191
+ cdef int n = supergroup.degree
192
+ cdef PartitionStack *part = PS_new(n, 1)
193
+ if part is NULL:
194
+ return NULL
195
+ output = get_aut_gp_and_can_lab(<void *> sett, part, n,
196
+ &all_set_children_are_equivalent, &refine_set, &compare_sets, relab,
197
+ supergroup, NULL, NULL)
198
+ PS_dealloc(part)
199
+ if output is NULL:
200
+ return NULL
201
+ return output
202
+
203
+
204
+ def sets_isom_py(generators, set1, set2):
205
+ r"""
206
+ Compute whether ``set1`` and ``set2`` are isomorphic under the action of
207
+ the group generated by the generators given in list form.
208
+
209
+ EXAMPLES::
210
+
211
+ sage: from sage.groups.perm_gps.partn_ref.refinement_sets import sets_isom_py
212
+
213
+ Degree 3 examples
214
+
215
+ Trivial group::
216
+
217
+ sage: sets_isom_py([], [0,1,2], [0,1])
218
+ False
219
+ sage: sets_isom_py([], [0,1,2], [0,2,1])
220
+ [0, 1, 2]
221
+ sage: sets_isom_py([[0,1,2]], [0,1,2], [0,2,1])
222
+ [0, 1, 2]
223
+ sage: sets_isom_py([[0,1,2]], [0], [0])
224
+ [0, 1, 2]
225
+ sage: sets_isom_py([[0,1,2]], [0], [1])
226
+ False
227
+ sage: sets_isom_py([[0,1,2]], [0], [2])
228
+ False
229
+ sage: sets_isom_py([[0,1,2]], [0,1], [1,0])
230
+ [0, 1, 2]
231
+
232
+ Three-cycle::
233
+
234
+ sage: sets_isom_py([[1,2,0]], [0], [1])
235
+ [1, 2, 0]
236
+ sage: sets_isom_py([[1,2,0]], [0], [2])
237
+ [2, 0, 1]
238
+ sage: sets_isom_py([[1,2,0]], [0], [0])
239
+ [0, 1, 2]
240
+ sage: sets_isom_py([[1,2,0]], [0,1], [0])
241
+ False
242
+ sage: sets_isom_py([[1,2,0]], [0,1], [1])
243
+ False
244
+ sage: sets_isom_py([[1,2,0]], [0,1], [2])
245
+ False
246
+ sage: sets_isom_py([[1,2,0]], [0,1], [0,2])
247
+ [2, 0, 1]
248
+ sage: sets_isom_py([[1,2,0]], [0,1], [1,2])
249
+ [1, 2, 0]
250
+ sage: sets_isom_py([[1,2,0]], [0,1], [1,0])
251
+ [0, 1, 2]
252
+ sage: sets_isom_py([[1,2,0]], [0,2,1], [2,1,0])
253
+ [0, 1, 2]
254
+
255
+ Transposition::
256
+
257
+ sage: sets_isom_py([[1,0,2]], [0], [])
258
+ False
259
+ sage: sets_isom_py([[1,0,2]], [0], [1,2])
260
+ False
261
+ sage: sets_isom_py([[1,0,2]], [0], [1])
262
+ [1, 0, 2]
263
+ sage: sets_isom_py([[1,0,2]], [0], [0])
264
+ [0, 1, 2]
265
+ sage: sets_isom_py([[1,0,2]], [0,1], [2])
266
+ False
267
+ sage: sets_isom_py([[1,0,2]], [0,2], [1,2])
268
+ [1, 0, 2]
269
+ sage: sets_isom_py([[1,0,2]], [0], [2])
270
+ False
271
+ sage: sets_isom_py([[1,0,2]], [0,1], [1,2])
272
+ False
273
+
274
+ Symmetric group S_3::
275
+
276
+ sage: sets_isom_py([[1,0,2],[1,2,0]], [], [])
277
+ [0, 1, 2]
278
+ sage: sets_isom_py([[1,0,2],[1,2,0]], [0], [])
279
+ False
280
+ sage: sets_isom_py([[1,0,2],[1,2,0]], [0], [0])
281
+ [0, 1, 2]
282
+ sage: sets_isom_py([[1,0,2],[1,2,0]], [0], [1])
283
+ [1, 0, 2]
284
+ sage: sets_isom_py([[1,0,2],[1,2,0]], [0], [2])
285
+ [2, 0, 1]
286
+ sage: sets_isom_py([[1,0,2],[1,2,0]], [0,2], [2])
287
+ False
288
+ sage: sets_isom_py([[1,0,2],[1,2,0]], [0,2], [1,2])
289
+ [1, 0, 2]
290
+ sage: sets_isom_py([[1,0,2],[1,2,0]], [0,2], [0,1])
291
+ [0, 2, 1]
292
+ sage: sets_isom_py([[1,0,2],[1,2,0]], [0,2], [0,2])
293
+ [0, 1, 2]
294
+ sage: sets_isom_py([[1,0,2],[1,2,0]], [0,2], [0,1,2])
295
+ False
296
+ sage: sets_isom_py([[1,0,2],[1,2,0]], [0,2,1], [0,1,2])
297
+ [0, 1, 2]
298
+
299
+ Degree 4 examples
300
+
301
+ Trivial group::
302
+
303
+ sage: sets_isom_py([[0,1,2,3]], [], [])
304
+ [0, 1, 2, 3]
305
+ sage: sets_isom_py([[0,1,2,3]], [0], [])
306
+ False
307
+ sage: sets_isom_py([[0,1,2,3]], [0], [1])
308
+ False
309
+ sage: sets_isom_py([[0,1,2,3]], [0], [2])
310
+ False
311
+ sage: sets_isom_py([[0,1,2,3]], [0], [3])
312
+ False
313
+ sage: sets_isom_py([[0,1,2,3]], [0], [0])
314
+ [0, 1, 2, 3]
315
+ sage: sets_isom_py([[0,1,2,3]], [0,1], [1,2])
316
+ False
317
+ sage: sets_isom_py([[0,1,2,3]], [0,1], [0,1])
318
+ [0, 1, 2, 3]
319
+ sage: sets_isom_py([[0,1,2,3]], [0,1,2,3], [0,1])
320
+ False
321
+ sage: sets_isom_py([[0,1,2,3]], [0,1,2,3], [0,1,2,3])
322
+ [0, 1, 2, 3]
323
+
324
+ Four-cycle::
325
+
326
+ sage: sets_isom_py([[1,2,3,0]], [0,1,2,3], [0,1,2,3])
327
+ [0, 1, 2, 3]
328
+ sage: sets_isom_py([[1,2,3,0]], [], [])
329
+ [0, 1, 2, 3]
330
+ sage: sets_isom_py([[1,2,3,0]], [0], [0])
331
+ [0, 1, 2, 3]
332
+ sage: sets_isom_py([[1,2,3,0]], [0], [1])
333
+ [1, 2, 3, 0]
334
+ sage: sets_isom_py([[1,2,3,0]], [0], [2])
335
+ [2, 3, 0, 1]
336
+ sage: sets_isom_py([[1,2,3,0]], [0], [3])
337
+ [3, 0, 1, 2]
338
+ sage: sets_isom_py([[1,2,3,0]], [0,1], [3])
339
+ False
340
+ sage: sets_isom_py([[1,2,3,0]], [0,1], [])
341
+ False
342
+ sage: sets_isom_py([[1,2,3,0]], [0,1], [1,2,3])
343
+ False
344
+ sage: sets_isom_py([[1,2,3,0]], [0,1], [1,2])
345
+ [1, 2, 3, 0]
346
+ sage: sets_isom_py([[1,2,3,0]], [0,1], [2,3])
347
+ [2, 3, 0, 1]
348
+ sage: sets_isom_py([[1,2,3,0]], [0,1], [0,3])
349
+ [3, 0, 1, 2]
350
+ sage: sets_isom_py([[1,2,3,0]], [0,2], [0,2])
351
+ [0, 1, 2, 3]
352
+ sage: sets_isom_py([[1,2,3,0]], [0,2], [1,3])
353
+ [3, 0, 1, 2]
354
+ sage: sets_isom_py([[1,2,3,0]], [0,1,2], [1,2,3])
355
+ [1, 2, 3, 0]
356
+ sage: sets_isom_py([[1,2,3,0]], [0,1,2], [0,2,3])
357
+ [2, 3, 0, 1]
358
+ sage: sets_isom_py([[1,2,3,0]], [0,1,2], [0,1,3])
359
+ [3, 0, 1, 2]
360
+ sage: sets_isom_py([[1,2,3,0]], [0,1,2], [0,1,2])
361
+ [0, 1, 2, 3]
362
+
363
+ Two transpositions::
364
+
365
+ sage: from sage.groups.perm_gps.partn_ref.refinement_sets import sets_isom_py
366
+ sage: sets_isom_py([[2,3,0,1]], [0], [2])
367
+ [2, 3, 0, 1]
368
+ sage: sets_isom_py([[2,3,0,1]], [1], [3])
369
+ [2, 3, 0, 1]
370
+ sage: sets_isom_py([[2,3,0,1]], [1], [1])
371
+ [0, 1, 2, 3]
372
+ sage: sets_isom_py([[2,3,0,1]], [1], [2])
373
+ False
374
+ sage: sets_isom_py([[2,3,0,1]], [0,3], [1,2])
375
+ [2, 3, 0, 1]
376
+ sage: sets_isom_py([[2,3,0,1]], [0,3], [3,0])
377
+ [0, 1, 2, 3]
378
+ sage: sets_isom_py([[2,3,0,1]], [0,1,3], [0,2,3])
379
+ False
380
+ sage: sets_isom_py([[2,3,0,1]], [0,1,3], [1,2,3])
381
+ [2, 3, 0, 1]
382
+ """
383
+ set1 = set(set1)
384
+ set2 = set(set2)
385
+ if not generators:
386
+ if set1 == set2:
387
+ return list(range(max(set1) + 1))
388
+ else:
389
+ return False
390
+
391
+ cdef int i, j, n = len(generators[0]), n_gens = len(generators)
392
+ cdef StabilizerChain *supergroup = SC_new(n)
393
+ cdef int *gens = <int *> sig_malloc(n*n_gens * sizeof(int))
394
+ cdef int *isom = <int *> sig_malloc(n * sizeof(int))
395
+ cdef subset *subset_sett1 = <subset *> sig_malloc(sizeof(subset))
396
+ cdef subset *subset_sett2 = <subset *> sig_malloc(sizeof(subset))
397
+ bitset_init(&subset_sett1.bits, n)
398
+ bitset_init(&subset_sett2.bits, n)
399
+ subset_sett1.scratch = <int *> sig_malloc((3*n+1) * sizeof(int))
400
+ subset_sett2.scratch = <int *> sig_malloc((3*n+1) * sizeof(int))
401
+ for i from 0 <= i < len(generators):
402
+ for j from 0 <= j < n:
403
+ gens[n*i + j] = generators[i][j]
404
+ if SC_insert(supergroup, 0, gens, n_gens):
405
+ raise MemoryError
406
+ sig_free(gens)
407
+ bitset_clear(&subset_sett1.bits)
408
+ bitset_clear(&subset_sett2.bits)
409
+ for i in set1:
410
+ bitset_add(&subset_sett1.bits, i)
411
+ for i in set2:
412
+ bitset_add(&subset_sett2.bits, i)
413
+ cdef bint isomorphic = sets_isom(supergroup, subset_sett1, subset_sett2, isom)
414
+ SC_dealloc(supergroup)
415
+ bitset_free(&subset_sett1.bits)
416
+ bitset_free(&subset_sett2.bits)
417
+ sig_free(subset_sett1.scratch)
418
+ sig_free(subset_sett2.scratch)
419
+ sig_free(subset_sett1)
420
+ sig_free(subset_sett2)
421
+ if isomorphic:
422
+ output_py = [isom[i] for i from 0 <= i < n]
423
+ else:
424
+ output_py = False
425
+ sig_free(isom)
426
+ return output_py
427
+
428
+
429
+ cdef int sets_isom(StabilizerChain *supergroup, subset *set1, subset *set2, int *isom) except -1:
430
+ r"""
431
+ Underlying C function for testing two sets for isomorphism.
432
+ """
433
+ cdef int n = supergroup.degree
434
+ cdef bint x
435
+ cdef PartitionStack *part = PS_new(n, 1)
436
+ if part is NULL:
437
+ raise MemoryError
438
+ x = double_coset(set1, set2, part, NULL, n,
439
+ &all_set_children_are_equivalent, &refine_set, &compare_sets,
440
+ supergroup, NULL, isom)
441
+ PS_dealloc(part)
442
+ return x
443
+
444
+ cdef bint all_set_children_are_equivalent(PartitionStack *PS, void *S) noexcept:
445
+ return 0
446
+
447
+ cdef int refine_set(PartitionStack *PS, void *S, int *cells_to_refine_by, int ctrb_len) noexcept:
448
+ """
449
+ Given a set S, refine the partition stack PS so that each cell contains
450
+ elements which are all either in the set or not in the set. If the depth is
451
+ positive we do nothing since the cells will have already been split at an
452
+ earlier level.
453
+ """
454
+ if PS.depth > 0:
455
+ return 0
456
+ cdef subset *subset1 = <subset *> S
457
+ cdef int *scratch = subset1.scratch
458
+ cdef int start, i, n = PS.degree
459
+ start = 0
460
+ while start < n:
461
+ i = 0
462
+ while True:
463
+ scratch[i] = bitset_in(&subset1.bits, PS.entries[start+i])
464
+ if PS.levels[start+i] <= PS.depth:
465
+ break
466
+ i += 1
467
+ sort_by_function(PS, start, scratch)
468
+ start += i + 1
469
+ return 0
470
+
471
+ cdef inline int _bint_cmp(bint a, bint b) noexcept:
472
+ return (<int> b) - (<int> a)
473
+
474
+ cdef int compare_sets(int *gamma_1, int *gamma_2, void *S1, void *S2, int degree) noexcept:
475
+ r"""
476
+ Compare two sets according to the lexicographic order.
477
+ """
478
+ cdef subset *subset1 = <subset *> S1
479
+ cdef subset *subset2 = <subset *> S2
480
+ cdef bitset_s set1 = subset1.bits
481
+ cdef bitset_s set2 = subset2.bits
482
+ cdef int i, j
483
+ for i in range(degree):
484
+ j = _bint_cmp(bitset_in(&set1, gamma_1[i]), bitset_in(&set2, gamma_2[i]))
485
+ if j != 0:
486
+ return j
487
+ return 0
488
+
489
+ cdef void *allocate_subset(int n) noexcept:
490
+ r"""
491
+ Allocate a subset struct of degree n.
492
+ """
493
+ cdef subset *set1 = <subset *> sig_malloc(sizeof(subset))
494
+ cdef int *scratch = <int *> sig_malloc((3*n+1) * sizeof(int))
495
+ if set1 is NULL or scratch is NULL:
496
+ sig_free(set1)
497
+ sig_free(scratch)
498
+ return NULL
499
+ try:
500
+ bitset_init(&set1.bits, n)
501
+ except MemoryError:
502
+ sig_free(set1)
503
+ sig_free(scratch)
504
+ return NULL
505
+ set1.scratch = scratch
506
+ return <void *> set1
507
+
508
+ cdef void free_subset(void *child) noexcept:
509
+ r"""
510
+ Deallocate a subset struct.
511
+ """
512
+ cdef subset *set1 = <subset *> child
513
+ if set1 is not NULL:
514
+ sig_free(set1.scratch)
515
+ bitset_free(&set1.bits)
516
+ sig_free(set1)
517
+
518
+ cdef void *allocate_sgd(int degree) noexcept:
519
+ r"""
520
+ Allocate the data part of an iterator which generates augmentations, i.e.,
521
+ elements to add to the set.
522
+ """
523
+ cdef subset_generator_data *sgd = <subset_generator_data *> sig_malloc(sizeof(subset_generator_data))
524
+ sgd.orbits = OP_new(degree)
525
+ if sgd is NULL or sgd.orbits is NULL:
526
+ deallocate_sgd(sgd)
527
+ return NULL
528
+ return <void *> sgd
529
+
530
+ cdef void deallocate_sgd(void *data) noexcept:
531
+ r"""
532
+ Deallocate the data part of the augmentation iterator.
533
+ """
534
+ cdef subset_generator_data *sgd = <subset_generator_data *> data
535
+ if sgd is not NULL:
536
+ OP_dealloc(sgd.orbits)
537
+ sig_free(sgd)
538
+
539
+ cdef void *subset_generator_next(void *data, int *degree, bint *mem_err) noexcept:
540
+ r"""
541
+ Return the next element to consider adding to the set.
542
+ """
543
+ cdef subset_generator_data *sgd = <subset_generator_data *> data
544
+ while True:
545
+ sgd.cur_point += 1
546
+ if sgd.cur_point == sgd.orbits.degree:
547
+ break
548
+ if OP_find(sgd.orbits, sgd.cur_point) == sgd.cur_point and \
549
+ not bitset_in(&sgd.bits, sgd.cur_point):
550
+ break
551
+ if sgd.cur_point == sgd.orbits.degree or mem_err[0]:
552
+ return NULL
553
+ return <void *> &sgd.cur_point
554
+
555
+ cdef int generate_child_subsets(void *S, aut_gp_and_can_lab *group, iterator *child_iterator) noexcept:
556
+ r"""
557
+ Set up an iterator of augmentations, i.e., elements to add to the given set.
558
+ """
559
+ cdef subset *subset1 = <subset *> S
560
+ cdef int i, j, n = group.group.degree
561
+ cdef subset_generator_data *sgd = <subset_generator_data *> child_iterator.data
562
+ OP_clear(sgd.orbits)
563
+ for i in range(group.num_gens):
564
+ for j in range(n):
565
+ OP_join(sgd.orbits, j, group.generators[n*i + j])
566
+ i = bitset_first(&subset1.bits)
567
+ j = bitset_next(&subset1.bits, i+1)
568
+ while j != -1:
569
+ OP_join(sgd.orbits, i, j)
570
+ j = bitset_next(&subset1.bits, j+1)
571
+ sgd.cur_point = -1
572
+ sgd.bits = subset1.bits
573
+ return 0
574
+
575
+ cdef void *apply_subset_aug(void *parent, void *aug, void *child, int *degree, bint *mem_err) noexcept:
576
+ r"""
577
+ Add the element represented by ``aug`` to ``parent``, storing the result to
578
+ ``child``.
579
+ """
580
+ cdef subset *set1 = <subset *> child
581
+ cdef subset *par_set = <subset *> parent
582
+ cdef bitset_s parbits = par_set.bits
583
+ cdef int add_pt = (<int *> aug)[0], n = parbits.size
584
+ bitset_copy(&set1.bits, &parbits)
585
+ bitset_add(&set1.bits, add_pt)
586
+ degree[0] = n
587
+ return <void *> set1
588
+
589
+ cdef void free_subset_aug(void *aug) noexcept:
590
+ return
591
+
592
+ cdef void *canonical_set_parent(void *child, void *parent, int *permutation, int *degree, bint *mem_err) noexcept:
593
+ r"""
594
+ Determine the canonical parent of the set ``child`` by applying
595
+ ``permutation``, deleting the largest element in lexicographic order, and
596
+ storing the result to ``parent``.
597
+ """
598
+ cdef subset *set1 = <subset *> child
599
+ cdef int i, max_in_can_lab, max_loc, n = set1.bits.size
600
+ cdef subset *par
601
+ if parent is NULL:
602
+ par = <subset *> allocate_subset(n)
603
+ if par is NULL:
604
+ mem_err[0] = 1
605
+ else:
606
+ par = <subset *> parent
607
+ if mem_err[0]:
608
+ return NULL
609
+ i = bitset_first(&set1.bits)
610
+ max_in_can_lab = permutation[i]
611
+ max_loc = i
612
+ while i != -1:
613
+ if max_in_can_lab < permutation[i]:
614
+ max_in_can_lab = permutation[i]
615
+ max_loc = i
616
+ i = bitset_next(&set1.bits, i+1)
617
+ bitset_copy(&par.bits, &set1.bits)
618
+ bitset_discard(&par.bits, max_loc)
619
+ degree[0] = n
620
+ return <void *> par
621
+
622
+ cdef iterator *allocate_subset_gen(int degree, int max_size) noexcept:
623
+ r"""
624
+ Allocate the generator of subsets.
625
+ """
626
+ cdef iterator *subset_gen = <iterator *> sig_malloc(sizeof(iterator))
627
+ if subset_gen is not NULL:
628
+ if allocate_subset_gen_2(degree, max_size, subset_gen):
629
+ sig_free(subset_gen)
630
+ subset_gen = NULL
631
+ return subset_gen
632
+
633
+ cdef int allocate_subset_gen_2(int degree, int max_size, iterator *it) noexcept:
634
+ r"""
635
+ Given an already allocated iterator, allocate the generator of subsets.
636
+ """
637
+ cdef canonical_generator_data *cgd = allocate_cgd(max_size + 1, degree)
638
+ if cgd is NULL:
639
+ return 1
640
+ cdef int i, j
641
+ for i from 0 <= i < max_size + 1:
642
+ cgd.object_stack[i] = allocate_subset(degree)
643
+ cgd.parent_stack[i] = allocate_subset(degree)
644
+ cgd.iterator_stack[i].data = allocate_sgd(degree)
645
+ cgd.iterator_stack[i].next = &subset_generator_next
646
+ if cgd.iterator_stack[i].data is NULL or \
647
+ cgd.object_stack[i] is NULL or \
648
+ cgd.parent_stack[i] is NULL:
649
+ for j from 0 <= j <= i:
650
+ deallocate_sgd(cgd.iterator_stack[i].data)
651
+ free_subset(cgd.object_stack[i])
652
+ free_subset(cgd.parent_stack[i])
653
+ deallocate_cgd(cgd)
654
+ return 1
655
+ it.data = <void *> cgd
656
+ it.next = canonical_generator_next
657
+ return 0
658
+
659
+ cdef void free_subset_gen(iterator *subset_gen) noexcept:
660
+ r"""
661
+ Free the iterator of subsets.
662
+ """
663
+ if subset_gen is NULL:
664
+ return
665
+ cdef canonical_generator_data *cgd = <canonical_generator_data *> subset_gen.data
666
+ deallocate_cgd(cgd)
667
+ sig_free(subset_gen)
668
+
669
+ cdef iterator *setup_set_gen(iterator *subset_gen, int degree, int max_size) noexcept:
670
+ r"""
671
+ Initiate the iterator of subsets.
672
+ """
673
+ cdef subset *empty_set
674
+ cdef iterator *subset_iterator = setup_canonical_generator(degree,
675
+ &all_set_children_are_equivalent,
676
+ &refine_set,
677
+ &compare_sets,
678
+ &generate_child_subsets,
679
+ &apply_subset_aug,
680
+ &free_subset,
681
+ &deallocate_sgd,
682
+ &free_subset_aug,
683
+ &canonical_set_parent,
684
+ max_size+1, 0, subset_gen)
685
+ if subset_iterator is not NULL:
686
+ empty_set = <subset *> (<canonical_generator_data *> subset_gen.data).object_stack[0]
687
+ bitset_clear(&empty_set.bits)
688
+ return subset_iterator
689
+
690
+
691
+ def sets_modulo_perm_group(list generators, int max_size,
692
+ bint indicate_mem_err=1):
693
+ r"""
694
+ Given generators of a permutation group, list subsets up to permutations in
695
+ the group.
696
+
697
+ INPUT:
698
+
699
+ - ``generators`` -- list of generators in list form
700
+ - ``max_size`` -- integer; maximum size of subsets to be generated
701
+ - ``indicate_mem_err`` -- boolean; whether to raise an error.
702
+ If we run out of memory, or simply append a :exc:`MemoryError`
703
+ instance to the end of the output.
704
+
705
+ EXAMPLES::
706
+
707
+ sage: from sage.groups.perm_gps.partn_ref.refinement_sets import sets_modulo_perm_group
708
+ sage: sets_modulo_perm_group([], 0)
709
+ [[]]
710
+ sage: sets_modulo_perm_group([], 1)
711
+ [[0], []]
712
+ sage: sets_modulo_perm_group([], 2)
713
+ [[0, 1], [0], []]
714
+ sage: sets_modulo_perm_group([], 3)
715
+ [[0, 1, 2], [0, 1], [0], []]
716
+ sage: sets_modulo_perm_group([], 4)
717
+ [[0, 1, 2, 3], [0, 1, 2], [0, 1], [0], []]
718
+ sage: len(sets_modulo_perm_group([], 99))
719
+ 100
720
+
721
+ ::
722
+
723
+ sage: sets_modulo_perm_group([[1,2,0]], 4)
724
+ [[0, 1, 2], [0, 1], [0], []]
725
+ sage: sets_modulo_perm_group([[1,2,0]], 3)
726
+ [[0, 1, 2], [0, 1], [0], []]
727
+ sage: sets_modulo_perm_group([[1,2,0]], 2)
728
+ [[0, 1], [0], []]
729
+ sage: sets_modulo_perm_group([[1,2,0]], 1)
730
+ [[0], []]
731
+ sage: sets_modulo_perm_group([[1,2,0]], 0)
732
+ [[]]
733
+ sage: sets_modulo_perm_group([[0,1,2]], 3)
734
+ [[0, 1, 2], [0, 1], [0, 2], [0], [1, 2], [1], [2], []]
735
+ sage: sets_modulo_perm_group([[1,0,2]], 3)
736
+ [[0, 1, 2], [0, 1], [0, 2], [0], [2], []]
737
+ sage: sets_modulo_perm_group([[1,0,2],[1,2,0]], 3)
738
+ [[0, 1, 2], [0, 1], [1], []]
739
+
740
+ ::
741
+
742
+ sage: sets_modulo_perm_group([[1,2,3,0]], 4)
743
+ [[0, 1, 2, 3], [0, 1, 2], [0, 1], [0, 2], [0], []]
744
+ sage: sets_modulo_perm_group([[1,2,3,0]], 5)
745
+ [[0, 1, 2, 3], [0, 1, 2], [0, 1], [0, 2], [0], []]
746
+ sage: sets_modulo_perm_group([[1,2,3,0]], 3)
747
+ [[0, 1, 2], [0, 1], [0, 2], [0], []]
748
+ sage: sets_modulo_perm_group([[1,2,3,0]], 2)
749
+ [[0, 1], [0, 2], [0], []]
750
+ sage: sets_modulo_perm_group([[1,2,3,0]], 1)
751
+ [[0], []]
752
+ sage: sets_modulo_perm_group([[1,2,3,0]], 0)
753
+ [[]]
754
+ sage: sets_modulo_perm_group([[0,1,3,2],[1,0,2,3]], 4)
755
+ [[0, 1, 2, 3], [0, 1, 2], [0, 1], [0, 2, 3], [0, 2], [0], [2, 3], [2], []]
756
+ sage: sets_modulo_perm_group([[1,0,2,3],[1,2,0,3]], 4)
757
+ [[0, 1, 2, 3], [0, 1, 2], [0, 1, 3], [0, 1], [1, 3], [1], [3], []]
758
+ sage: sets_modulo_perm_group([[1,2,0,3],[0,2,3,1]], 4)
759
+ [[0, 1, 2, 3], [0, 1, 2], [0, 1], [1], []]
760
+ sage: sets_modulo_perm_group([[1,0,2,3],[1,2,3,0]], 4)
761
+ [[0, 1, 2, 3], [0, 1, 2], [1, 2], [2], []]
762
+ sage: L = list(powerset(range(4)))
763
+ sage: L.sort()
764
+ sage: L == sorted(sets_modulo_perm_group([[0,1,2,3]], 4))
765
+ True
766
+
767
+ ::
768
+
769
+ sage: sets_modulo_perm_group([[1,2,3,4,0]], 5)
770
+ [[0, 1, 2, 3, 4], [0, 1, 2, 3], [0, 1, 2], [0, 1], [0, 2, 3], [0, 2], [0], []]
771
+ sage: sets_modulo_perm_group([[1,0,2,3,4],[0,1,3,4,2]], 5)
772
+ [[0, 1, 2, 3, 4], [0, 1, 2, 3], [0, 1, 2], [0, 1], [0, 2, 3, 4], [0, 2, 3], [0, 2], [0], [2, 3, 4], [2, 3], [2], []]
773
+ sage: L = list(powerset(range(5)))
774
+ sage: L.sort()
775
+ sage: L == sorted(sets_modulo_perm_group([[0,1,2,3,4]], 5))
776
+ True
777
+ sage: sets_modulo_perm_group([[1,0,2,3,4],[1,2,3,4,0]], 5)
778
+ [[0, 1, 2, 3, 4], [0, 1, 2, 3], [1, 2, 3], [2, 3], [3], []]
779
+ sage: sets_modulo_perm_group([[1,2,0,3,4],[0,2,3,1,4],[0,1,3,4,2]], 5)
780
+ [[0, 1, 2, 3, 4], [0, 1, 2, 3], [1, 2, 3], [1, 2], [2], []]
781
+
782
+ ::
783
+
784
+ sage: X = sets_modulo_perm_group([[1,2,3,4,5,0]], 6)
785
+ sage: [a for a in X if len(a) == 0]
786
+ [[]]
787
+ sage: [a for a in X if len(a) == 1]
788
+ [[0]]
789
+ sage: [a for a in X if len(a) == 2]
790
+ [[0, 1], [0, 2], [0, 3]]
791
+ sage: [a for a in X if len(a) == 3]
792
+ [[0, 1, 2], [0, 1, 3], [0, 2, 3], [0, 2, 4]]
793
+ sage: [a for a in X if len(a) == 4]
794
+ [[0, 1, 2, 3], [0, 1, 3, 4], [0, 2, 3, 4]]
795
+ sage: [a for a in X if len(a) == 5]
796
+ [[0, 1, 2, 3, 4]]
797
+ sage: [a for a in X if len(a) == 6]
798
+ [[0, 1, 2, 3, 4, 5]]
799
+
800
+ ::
801
+
802
+ sage: X = sets_modulo_perm_group([[0,2,1,4,3,5,8,7,6],[8,7,6,3,5,4,2,1,0]], 9)
803
+ sage: len(X)
804
+ 74
805
+ """
806
+ cdef list out_list = []
807
+ cdef int i
808
+ if max_size == 0:
809
+ return [[]]
810
+ if len(generators) == 0:
811
+ ll = []
812
+ for i in range(max_size,-1,-1):
813
+ ll.append(list(range(i)))
814
+ return ll
815
+ cdef int n = len(generators[0]), n_gens = len(generators)
816
+ cdef iterator *subset_iterator
817
+ cdef subset *thing
818
+
819
+ cdef StabilizerChain *group = SC_new(n)
820
+ cdef int *gens = <int *> sig_malloc(n*n_gens * sizeof(int))
821
+ if group is NULL or gens is NULL:
822
+ SC_dealloc(group)
823
+ sig_free(gens)
824
+ raise MemoryError
825
+ for i from 0 <= i < len(generators):
826
+ for j from 0 <= j < n:
827
+ gens[n*i + j] = generators[i][j]
828
+ if SC_insert(group, 0, gens, n_gens):
829
+ SC_dealloc(group)
830
+ sig_free(gens)
831
+ raise MemoryError
832
+ sig_free(gens)
833
+
834
+ cdef iterator *subset_gen = allocate_subset_gen(n, max_size)
835
+ if subset_gen is NULL:
836
+ SC_dealloc(group)
837
+ raise MemoryError
838
+ subset_iterator = setup_set_gen(subset_gen, n, max_size)
839
+ cdef bint mem_err = 0
840
+ if subset_iterator is NULL:
841
+ SC_dealloc(group)
842
+ free_subset_gen(subset_gen)
843
+ mem_err = 1
844
+ else:
845
+ start_canonical_generator(group, NULL, n, subset_gen)
846
+ while not mem_err:
847
+ thing = <subset *> subset_iterator.next(subset_iterator.data, NULL, &mem_err)
848
+ if thing is NULL:
849
+ break
850
+ out_list.append( bitset_list(&thing.bits) )
851
+ free_subset_gen(subset_gen)
852
+ SC_dealloc(group)
853
+ if mem_err:
854
+ if indicate_mem_err:
855
+ raise MemoryError
856
+ else:
857
+ out_list.append(MemoryError())
858
+ return out_list