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,18 @@
1
+ # sage_setup: distribution = sagemath-categories
2
+ #*****************************************************************************
3
+ # Copyright (C) 2006 - 2011 Robert L. Miller <rlmillster@gmail.com>
4
+ # Copyright (C) 2009 Nicolas Borie <nicolas.borie@math.u-psud.fr>
5
+ #
6
+ # This program is free software: you can redistribute it and/or modify
7
+ # it under the terms of the GNU General Public License as published by
8
+ # the Free Software Foundation, either version 2 of the License, or
9
+ # (at your option) any later version.
10
+ # http://www.gnu.org/licenses/
11
+ #*****************************************************************************
12
+
13
+ from sage.groups.perm_gps.partn_ref.data_structures cimport *
14
+
15
+ # name of the three functions to customize
16
+ cdef int refine_list(PartitionStack *, void *, int *, int) noexcept
17
+ cdef int compare_lists(int *, int *, void *, void *, int) noexcept
18
+ cdef bint all_list_children_are_equivalent(PartitionStack *, void *) noexcept
@@ -0,0 +1,82 @@
1
+ # sage_setup: distribution = sagemath-categories
2
+ """
3
+ Partition backtrack functions for lists -- a simple example of using partn_ref
4
+
5
+ EXAMPLES::
6
+
7
+ sage: import sage.groups.perm_gps.partn_ref.refinement_lists
8
+ """
9
+
10
+ #*****************************************************************************
11
+ # Copyright (C) 2006 - 2011 Robert L. Miller <rlmillster@gmail.com>
12
+ # Copyright (C) 2009 Nicolas Borie <nicolas.borie@math.u-psud.fr>
13
+ #
14
+ # This program is free software: you can redistribute it and/or modify
15
+ # it under the terms of the GNU General Public License as published by
16
+ # the Free Software Foundation, either version 2 of the License, or
17
+ # (at your option) any later version.
18
+ # https://www.gnu.org/licenses/
19
+ #*****************************************************************************
20
+
21
+ from cysignals.memory cimport sig_malloc, sig_free
22
+
23
+ from sage.groups.perm_gps.partn_ref.data_structures cimport *
24
+ from sage.groups.perm_gps.partn_ref.double_coset cimport double_coset, int_cmp
25
+
26
+
27
+ def is_isomorphic(self, other):
28
+ r"""
29
+ Return the bijection as a permutation if two lists are isomorphic, return
30
+ ``False`` otherwise.
31
+
32
+ EXAMPLES::
33
+
34
+ sage: from sage.groups.perm_gps.partn_ref.refinement_lists import is_isomorphic
35
+ sage: is_isomorphic([0,0,1],[1,0,0])
36
+ [1, 2, 0]
37
+ """
38
+ cdef int i, n = len(self)
39
+ cdef PartitionStack *part
40
+ cdef int *output
41
+ cdef int *ordering
42
+ part = PS_new(n, 1)
43
+ ordering = <int *> sig_malloc((len(self)) * sizeof(int))
44
+ output = <int *> sig_malloc((len(self)) * sizeof(int))
45
+ if part is NULL or ordering is NULL or output is NULL:
46
+ PS_dealloc(part)
47
+ sig_free(ordering)
48
+ sig_free(output)
49
+ raise MemoryError
50
+ for i from 0 <= i < (len(self)):
51
+ ordering[i] = i
52
+
53
+ cdef bint isomorphic = double_coset(<void *> self, <void *> other, part, ordering, (len(self)), &all_list_children_are_equivalent, &refine_list, &compare_lists, NULL, NULL, output)
54
+
55
+ PS_dealloc(part)
56
+ sig_free(ordering)
57
+ if isomorphic:
58
+ output_py = [output[i] for i from 0 <= i < (len(self))]
59
+ else:
60
+ output_py = False
61
+ sig_free(output)
62
+ return output_py
63
+
64
+
65
+ cdef bint all_list_children_are_equivalent(PartitionStack *PS, void *S) noexcept:
66
+ return 0
67
+
68
+ cdef int refine_list(PartitionStack *PS, void *S, int *cells_to_refine_by, int ctrb_len) noexcept:
69
+ return 0
70
+
71
+ cdef int compare_lists(int *gamma_1, int *gamma_2, void *S1, void *S2, int degree) noexcept:
72
+ r"""
73
+ Compare two lists according to the lexicographic order.
74
+ """
75
+ cdef list MS1 = <list> S1
76
+ cdef list MS2 = <list> S2
77
+ cdef int i, j
78
+ for i in range(degree):
79
+ j = int_cmp(MS1[gamma_1[i]], MS2[gamma_2[i]])
80
+ if j != 0:
81
+ return j
82
+ return 0
@@ -0,0 +1,16 @@
1
+ # sage_setup: distribution = sagemath-categories
2
+ #*****************************************************************************
3
+ # Copyright (C) 2006 - 2011 Robert L. Miller <rlmillster@gmail.com>
4
+ #
5
+ # This program is free software: you can redistribute it and/or modify
6
+ # it under the terms of the GNU General Public License as published by
7
+ # the Free Software Foundation, either version 2 of the License, or
8
+ # (at your option) any later version.
9
+ # http://www.gnu.org/licenses/
10
+ #*****************************************************************************
11
+
12
+ from sage.groups.perm_gps.partn_ref.data_structures cimport *
13
+
14
+
15
+ cdef class PythonPartitionStack:
16
+ cdef PartitionStack *c_ps
@@ -0,0 +1,564 @@
1
+ # sage_setup: distribution = sagemath-categories
2
+ """
3
+ Python interface to partition backtrack functions
4
+
5
+ EXAMPLES::
6
+
7
+ sage: import sage.groups.perm_gps.partn_ref.refinement_python
8
+
9
+ This module provides Python frontends to the Cython-based partition backtrack
10
+ functions. This allows one to write the three input functions
11
+ (all_children_are_equivalent, refine_and_return_invariant, and compare_structures)
12
+ in pure Python, and still use the Cython algorithms. Experimentation with
13
+ specific partition backtrack implementations no longer requires compilation, as
14
+ the input functions can be dynamically changed at runtime.
15
+
16
+ .. NOTE::
17
+
18
+ This is not intended for production quality implementations of partition
19
+ refinement, but instead for experimentation, learning, and use of the
20
+ Python debugger.
21
+ """
22
+
23
+ #*****************************************************************************
24
+ # Copyright (C) 2006 - 2011 Robert L. Miller <rlmillster@gmail.com>
25
+ #
26
+ # This program is free software: you can redistribute it and/or modify
27
+ # it under the terms of the GNU General Public License as published by
28
+ # the Free Software Foundation, either version 2 of the License, or
29
+ # (at your option) any later version.
30
+ # https://www.gnu.org/licenses/
31
+ #*****************************************************************************
32
+
33
+ from cysignals.memory cimport sig_malloc, sig_free
34
+
35
+ from sage.groups.perm_gps.partn_ref.data_structures cimport *
36
+ from sage.groups.perm_gps.partn_ref.automorphism_group_canonical_label cimport (
37
+ get_aut_gp_and_can_lab, aut_gp_and_can_lab,
38
+ deallocate_agcl_output)
39
+ from sage.groups.perm_gps.partn_ref.double_coset cimport double_coset
40
+ from sage.rings.integer cimport Integer
41
+
42
+
43
+ cdef class PythonPartitionStack:
44
+ """
45
+ Instances of this class wrap a (Cython) PartitionStack.
46
+ """
47
+
48
+ def __init__(self, int n):
49
+ """
50
+ Initialize a PartitionStack.
51
+
52
+ EXAMPLES::
53
+
54
+ sage: from sage.groups.perm_gps.partn_ref.refinement_python import PythonPartitionStack
55
+ sage: P = PythonPartitionStack(7) # implicit doctest
56
+ """
57
+ self.c_ps = PS_new(n, 1)
58
+
59
+ def __dealloc__(self):
60
+ """
61
+ Deallocate the PartitionStack.
62
+
63
+ EXAMPLES::
64
+
65
+ sage: from sage.groups.perm_gps.partn_ref.refinement_python import PythonPartitionStack
66
+ sage: P = PythonPartitionStack(7)
67
+ sage: del(P) # implicit doctest
68
+ """
69
+ PS_dealloc(self.c_ps)
70
+
71
+ def __repr__(self):
72
+ """
73
+ Return a string representing the stack.
74
+
75
+ EXAMPLES::
76
+
77
+ sage: from sage.groups.perm_gps.partn_ref.refinement_python import PythonPartitionStack
78
+ sage: P = PythonPartitionStack(7)
79
+ sage: P # implicit doctest
80
+ PythonPartitionStack of degree 7 and depth 0.
81
+ """
82
+ return "PythonPartitionStack of degree %d and depth %d." % (self.c_ps.degree, self.c_ps.depth)
83
+
84
+ def display(self):
85
+ """
86
+ Print a representation of the stack.
87
+
88
+ EXAMPLES::
89
+
90
+ sage: from sage.groups.perm_gps.partn_ref.refinement_python import PythonPartitionStack
91
+ sage: P = PythonPartitionStack(7)
92
+ sage: P.depth(1)
93
+ 1
94
+ sage: P.set_level(2,1)
95
+ sage: P.display()
96
+ (0 1 2 3 4 5 6)
97
+ (0 1 2|3 4 5 6)
98
+ """
99
+ PS_print(self.c_ps)
100
+
101
+ def is_discrete(self):
102
+ """
103
+ Return whether the deepest partition consists only of singleton cells.
104
+
105
+ EXAMPLES::
106
+
107
+ sage: from sage.groups.perm_gps.partn_ref.refinement_python import PythonPartitionStack
108
+ sage: P = PythonPartitionStack(7)
109
+ sage: P.is_discrete()
110
+ False
111
+ sage: [P.set_level(i,0) for i in range(7)]
112
+ [None, None, None, None, None, None, None]
113
+ sage: P.is_discrete()
114
+ True
115
+ """
116
+ return PS_is_discrete(self.c_ps)
117
+
118
+ def num_cells(self):
119
+ """
120
+ Return the number of cells in the deepest partition.
121
+
122
+ EXAMPLES::
123
+
124
+ sage: from sage.groups.perm_gps.partn_ref.refinement_python import PythonPartitionStack
125
+ sage: P = PythonPartitionStack(7)
126
+ sage: P.num_cells()
127
+ 1
128
+ """
129
+ return PS_num_cells(self.c_ps)
130
+
131
+ def move_min_to_front(self, int start, int end):
132
+ """
133
+ Make sure that the first element of the segment of entries i with
134
+ start <= i <= end is minimal.
135
+
136
+ EXAMPLES::
137
+
138
+ sage: from sage.groups.perm_gps.partn_ref.refinement_python import PythonPartitionStack
139
+ sage: P = PythonPartitionStack(7)
140
+ sage: P.set_entry(1,0)
141
+ sage: P.set_entry(0,1)
142
+ sage: P.display()
143
+ (1 0 2 3 4 5 6)
144
+ sage: P.move_min_to_front(0,1)
145
+ sage: P.display()
146
+ (0 1 2 3 4 5 6)
147
+ """
148
+ PS_move_min_to_front(self.c_ps, start, end)
149
+
150
+ def __copy__(self):
151
+ """
152
+
153
+ EXAMPLES::
154
+
155
+ sage: from sage.groups.perm_gps.partn_ref.refinement_python import PythonPartitionStack
156
+ sage: P = PythonPartitionStack(7)
157
+ sage: Q = copy(P)
158
+ sage: P.display()
159
+ (0 1 2 3 4 5 6)
160
+ sage: Q.display()
161
+ (0 1 2 3 4 5 6)
162
+ """
163
+ cdef PythonPartitionStack cpy
164
+ cpy = PythonPartitionStack(self.c_ps.degree)
165
+ PS_copy_from_to(self.c_ps, cpy.c_ps)
166
+ return cpy
167
+
168
+ def clear(self):
169
+ """
170
+ Set the current partition to the first shallower one, i.e. forget about
171
+ boundaries between cells that are new to the current level.
172
+
173
+ EXAMPLES::
174
+
175
+ sage: from sage.groups.perm_gps.partn_ref.refinement_python import PythonPartitionStack
176
+ sage: P = PythonPartitionStack(7)
177
+ sage: P.depth(1)
178
+ 1
179
+ sage: P.set_level(2,1)
180
+ sage: P.display()
181
+ (0 1 2 3 4 5 6)
182
+ (0 1 2|3 4 5 6)
183
+ sage: P.clear()
184
+ sage: P.display()
185
+ (0 1 2 3 4 5 6)
186
+ (0 1 2 3 4 5 6)
187
+ """
188
+ PS_clear(self.c_ps)
189
+
190
+ def entries(self):
191
+ """
192
+ Return the entries array as a Python list of ints.
193
+
194
+ EXAMPLES::
195
+
196
+ sage: from sage.groups.perm_gps.partn_ref.refinement_python import PythonPartitionStack
197
+ sage: P = PythonPartitionStack(7)
198
+ sage: P.entries()
199
+ [0, 1, 2, 3, 4, 5, 6]
200
+ sage: P.levels()
201
+ [7, 7, 7, 7, 7, 7, -1]
202
+ """
203
+ cdef int i
204
+ return [self.c_ps.entries[i] for i from 0 <= i < self.c_ps.degree]
205
+
206
+ def set_entry(self, int i, int entry):
207
+ """
208
+ Set the `i`-th entry of the entries array to entry.
209
+
210
+ EXAMPLES::
211
+
212
+ sage: from sage.groups.perm_gps.partn_ref.refinement_python import PythonPartitionStack
213
+ sage: P = PythonPartitionStack(7)
214
+ sage: P.set_entry(1,0)
215
+ sage: P.set_entry(0,1)
216
+ sage: P.display()
217
+ (1 0 2 3 4 5 6)
218
+ """
219
+ self.c_ps.entries[i] = entry
220
+
221
+ def get_entry(self, int i):
222
+ """
223
+ Get the `i`-th entry of the entries array.
224
+
225
+ EXAMPLES::
226
+
227
+ sage: from sage.groups.perm_gps.partn_ref.refinement_python import PythonPartitionStack
228
+ sage: P = PythonPartitionStack(7)
229
+ sage: P.get_entry(0)
230
+ 0
231
+ """
232
+ return self.c_ps.entries[i]
233
+
234
+ def levels(self):
235
+ """
236
+ Return the levels array as a Python list of ints.
237
+
238
+ EXAMPLES::
239
+
240
+ sage: from sage.groups.perm_gps.partn_ref.refinement_python import PythonPartitionStack
241
+ sage: P = PythonPartitionStack(7)
242
+ sage: P.entries()
243
+ [0, 1, 2, 3, 4, 5, 6]
244
+ sage: P.levels()
245
+ [7, 7, 7, 7, 7, 7, -1]
246
+ """
247
+ return [self.c_ps.levels[i] for i from 0 <= i < self.c_ps.degree]
248
+
249
+ def set_level(self, int i, int level):
250
+ """
251
+ Set the `i`-th entry of the levels array to entry.
252
+
253
+ EXAMPLES::
254
+
255
+ sage: from sage.groups.perm_gps.partn_ref.refinement_python import PythonPartitionStack
256
+ sage: P = PythonPartitionStack(7)
257
+ sage: P.depth(1)
258
+ 1
259
+ sage: P.set_level(2,1)
260
+ sage: P.display()
261
+ (0 1 2 3 4 5 6)
262
+ (0 1 2|3 4 5 6)
263
+ """
264
+ self.c_ps.levels[i] = level
265
+
266
+ def get_level(self, int i):
267
+ """
268
+ Get the `i`-th entry of the levels array.
269
+
270
+ EXAMPLES::
271
+
272
+ sage: from sage.groups.perm_gps.partn_ref.refinement_python import PythonPartitionStack
273
+ sage: P = PythonPartitionStack(7)
274
+ sage: P.get_level(0)
275
+ 7
276
+ """
277
+ return self.c_ps.levels[i]
278
+
279
+ def depth(self, new=None):
280
+ """
281
+ Return the depth of the deepest partition in the stack, setting it to
282
+ new if new is not None.
283
+
284
+ EXAMPLES::
285
+
286
+ sage: from sage.groups.perm_gps.partn_ref.refinement_python import PythonPartitionStack
287
+ sage: P = PythonPartitionStack(7)
288
+ sage: P.depth()
289
+ 0
290
+ """
291
+ if new is not None:
292
+ self.c_ps.depth = new
293
+ return self.c_ps.depth
294
+
295
+ def degree(self, new=None):
296
+ """
297
+ Return the degree of the partition stack, setting it to
298
+ new if new is not None.
299
+
300
+ EXAMPLES::
301
+
302
+ sage: from sage.groups.perm_gps.partn_ref.refinement_python import PythonPartitionStack
303
+ sage: P = PythonPartitionStack(7)
304
+ sage: P.degree()
305
+ 7
306
+ """
307
+ if new is not None:
308
+ self.c_ps.degree = new
309
+ return self.c_ps.degree
310
+
311
+ def partition(self, int k):
312
+ """
313
+ Return the partition at level k, as a Python list of lists.
314
+
315
+ EXAMPLES::
316
+
317
+ sage: from sage.groups.perm_gps.partn_ref.refinement_python import PythonPartitionStack
318
+ sage: P = PythonPartitionStack(7)
319
+ sage: P.depth(1)
320
+ 1
321
+ sage: P.set_level(2,1)
322
+ sage: P.partition(0)
323
+ [[0, 1, 2, 3, 4, 5, 6]]
324
+ sage: P.partition(1)
325
+ [[0, 1, 2], [3, 4, 5, 6]]
326
+ """
327
+ cdef int i
328
+ cdef list partition = [], cell = []
329
+ for i from 0 <= i < self.c_ps.degree:
330
+ cell.append(self.c_ps.entries[i])
331
+ if self.c_ps.levels[i] <= k:
332
+ partition.append(cell)
333
+ if i < self.c_ps.degree:
334
+ cell = []
335
+ return partition
336
+
337
+
338
+ class PythonObjectWrapper:
339
+ """
340
+ Instances of this class wrap a Python object and the refinement functions.
341
+ """
342
+ def __init__(self, obj, acae_fn, rari_fn, cs_fn, int degree):
343
+ """
344
+ Initialize a PythonObjectWrapper.
345
+
346
+ EXAMPLES::
347
+
348
+ sage: from sage.groups.perm_gps.partn_ref.refinement_python import PythonObjectWrapper
349
+ sage: def acae(a, b):
350
+ ....: return 0
351
+ sage: def rari(a, b, c):
352
+ ....: return 0
353
+ sage: def cs(a, b, c, d, e):
354
+ ....: return 0
355
+ sage: from sage.groups.perm_gps.partn_ref.refinement_python import PythonObjectWrapper
356
+ sage: P = PythonObjectWrapper(None, acae, rari, cs, 7) # implicit doctest
357
+ sage: P.obj
358
+ sage: P.degree
359
+ 7
360
+ sage: P.acae_fn
361
+ <function acae at ...>
362
+ sage: P.rari_fn
363
+ <function rari at ...>
364
+ sage: P.cs_fn
365
+ <function cs at ...>
366
+ """
367
+ self.degree = degree
368
+ self.obj = obj
369
+ self.acae_fn = acae_fn
370
+ self.rari_fn = rari_fn
371
+ self.cs_fn = cs_fn
372
+
373
+
374
+ cdef bint all_children_are_equivalent_python(PartitionStack *PS, void *S) noexcept:
375
+ """
376
+ Python conversion of all_children_are_equivalent function.
377
+ """
378
+ cdef PythonPartitionStack Py_PS = PythonPartitionStack(PS.degree)
379
+ cdef object S_obj = <object> S
380
+ PS_copy_from_to(PS, Py_PS.c_ps)
381
+ return S_obj.acae_fn(Py_PS, S_obj.obj)
382
+
383
+ cdef int refine_and_return_invariant_python(PartitionStack *PS, void *S, int *cells_to_refine_by, int ctrb_len) noexcept:
384
+ """
385
+ Python conversion of refine_and_return_invariant function.
386
+ """
387
+ cdef PythonPartitionStack Py_PS = PythonPartitionStack(PS.degree)
388
+ cdef object S_obj = <object> S
389
+ PS_copy_from_to(PS, Py_PS.c_ps)
390
+ cdef int i
391
+ cdef list ctrb_py = [cells_to_refine_by[i] for i from 0 <= i < ctrb_len]
392
+ return S_obj.rari_fn(Py_PS, S_obj.obj, ctrb_py)
393
+
394
+ cdef int compare_structures_python(int *gamma_1, int *gamma_2, void *S1, void *S2, int degree) noexcept:
395
+ """
396
+ Python conversion of compare_structures function.
397
+ """
398
+ cdef int i
399
+ cdef object S1_obj = <object> S1, S2_obj = <object> S2
400
+ cdef list gamma_1_py = [gamma_1[i] for i from 0 <= i < degree]
401
+ cdef list gamma_2_py = [gamma_2[i] for i from 0 <= i < degree]
402
+ return S1_obj.cs_fn(gamma_1_py, gamma_2_py, S1_obj.obj, S2_obj.obj, degree)
403
+
404
+
405
+ def aut_gp_and_can_lab_python(S, partition, n,
406
+ all_children_are_equivalent,
407
+ refine_and_return_invariant,
408
+ compare_structures,
409
+ canonical_label, base, order):
410
+ """
411
+ Call the automorphism group and canonical label function.
412
+
413
+ INPUT:
414
+
415
+ - ``S`` -- the object to examine
416
+ - ``partition`` -- an ordered partition, as a list of lists
417
+ - ``n`` -- the degree of the automorphism group to be computed
418
+
419
+ ::
420
+
421
+ all_children_are_equivalent -- Python function of "signature":
422
+ bool all_children_are_equivalent(PythonPartitionStack, object)
423
+ refine_and_return_invariant -- Python function of "signature":
424
+ int refine_and_return_invariant(PythonPartitionStack, object, list)
425
+ compare_structures -- Python function of "signature":
426
+ int compare_structures(list, list, object, object)
427
+ (see automorphism_group_canonical_label.pyx for more documentation)
428
+
429
+ ::
430
+
431
+ canonical_label -- boolean; whether to search for a canonical label
432
+ base -- boolean; whether to return a base for the automorphism group
433
+ order -- boolean; whether to return the order of the automorphism group
434
+
435
+ EXAMPLES::
436
+
437
+ sage: from sage.groups.perm_gps.partn_ref.refinement_python import aut_gp_and_can_lab_python
438
+ sage: def acae(a, b):
439
+ ....: return 0
440
+ sage: def rari(a, b, c):
441
+ ....: return 0
442
+ sage: def cs(a, b, c, d, e):
443
+ ....: return 0
444
+ sage: aut_gp_and_can_lab_python(None, [[0,1,2,3],[4,5]], 6, acae, rari, cs, True, True, True)
445
+ ([[0, 1, 3, 2, 4, 5],
446
+ [0, 2, 1, 3, 4, 5],
447
+ [1, 0, 2, 3, 4, 5],
448
+ [0, 1, 2, 3, 5, 4]],
449
+ [0, 1, 2, 3, 4, 5],
450
+ [4, 0, 1, 2],
451
+ 48)
452
+ sage: factorial(4)*factorial(2)
453
+ 48
454
+ """
455
+ obj_wrapper = PythonObjectWrapper(S, all_children_are_equivalent, refine_and_return_invariant, compare_structures, n)
456
+ cdef aut_gp_and_can_lab *output
457
+ cdef int i, j
458
+ cdef Integer I
459
+
460
+ cdef PartitionStack *part = PS_from_list(partition)
461
+ if part is NULL:
462
+ raise MemoryError
463
+
464
+ output = get_aut_gp_and_can_lab(<void *> obj_wrapper, part, n,
465
+ &all_children_are_equivalent_python,
466
+ &refine_and_return_invariant_python,
467
+ &compare_structures_python,
468
+ canonical_label, NULL, NULL, NULL)
469
+
470
+ list_of_gens = []
471
+ for i in range(output.num_gens):
472
+ list_of_gens.append([output.generators[j+i*n] for j in range(n)])
473
+ return_tuple = [list_of_gens]
474
+ if canonical_label:
475
+ return_tuple.append([output.relabeling[i] for i in range(n)])
476
+ if base:
477
+ return_tuple.append([output.group.base_orbits[i][0] for i from 0 <= i < output.group.base_size])
478
+ if order:
479
+ I = Integer()
480
+ SC_order(output.group, 0, I.value)
481
+ return_tuple.append(I)
482
+ PS_dealloc(part)
483
+ deallocate_agcl_output(output)
484
+ if len(return_tuple) == 1:
485
+ return return_tuple[0]
486
+ else:
487
+ return tuple(return_tuple)
488
+
489
+
490
+ def double_coset_python(S1, S2, partition1, ordering2, n,
491
+ all_children_are_equivalent,
492
+ refine_and_return_invariant,
493
+ compare_structures):
494
+ """
495
+ Call the double coset function.
496
+
497
+ INPUT:
498
+
499
+ - ``S1``, ``S2`` -- the objects to examine
500
+ - ``partition1`` -- an ordered partition, as a list of lists
501
+ - ``ordering2`` -- represents a partition of the points of ``S2``, as a relabeling of ``partition1``
502
+ - ``n`` -- the degree
503
+
504
+ ::
505
+
506
+ all_children_are_equivalent -- Python function of "signature":
507
+ bool all_children_are_equivalent(PythonPartitionStack, object)
508
+ refine_and_return_invariant -- Python function of "signature":
509
+ int refine_and_return_invariant(PythonPartitionStack, object, list)
510
+ compare_structures -- Python function of "signature":
511
+ int compare_structures(list, list, object, object)
512
+ (see double_coset.pyx for more documentation)
513
+
514
+ EXAMPLES::
515
+
516
+ sage: from sage.groups.perm_gps.partn_ref.refinement_python import double_coset_python
517
+ sage: def acae(a, b):
518
+ ....: return 0
519
+ sage: def rari(a, b, c):
520
+ ....: return 0
521
+ sage: def cs(a, b, c, d, e):
522
+ ....: return 0
523
+ sage: double_coset_python(None, None, [[0,1,2,3],[4,5]], [2,3,1,5,0,4], 6, acae, rari, cs)
524
+ [1, 2, 3, 5, 0, 4]
525
+
526
+ sage: def compare_lists(p1, p2, l1, l2, deg):
527
+ ....: for i in range(len(l1)):
528
+ ....: a1 = l1[p1[i]]
529
+ ....: a2 = l2[p2[i]]
530
+ ....: if a1 < a2: return -1
531
+ ....: if a1 > a2: return 1
532
+ ....: return 0
533
+
534
+ sage: double_coset_python([0,0,1], [1,0,0], [[0,1,2]], [0,1,2], 3, acae, rari, compare_lists)
535
+ [1, 2, 0]
536
+ """
537
+ obj_wrapper1 = PythonObjectWrapper(S1, all_children_are_equivalent, refine_and_return_invariant, compare_structures, n)
538
+ obj_wrapper2 = PythonObjectWrapper(S2, all_children_are_equivalent, refine_and_return_invariant, compare_structures, n)
539
+
540
+ cdef PartitionStack *part = PS_from_list(partition1)
541
+ cdef int *ordering = <int *> sig_malloc(n * sizeof(int))
542
+ cdef int *output = <int *> sig_malloc(n * sizeof(int))
543
+ if part is NULL or ordering is NULL or output is NULL:
544
+ PS_dealloc(part)
545
+ sig_free(ordering)
546
+ sig_free(output)
547
+ raise MemoryError
548
+ for i from 0 <= i < n:
549
+ ordering[i] = ordering2[i]
550
+
551
+ cdef bint isomorphic = double_coset(<void *> obj_wrapper1, <void *> obj_wrapper2,
552
+ part, ordering, n,
553
+ &all_children_are_equivalent_python,
554
+ &refine_and_return_invariant_python,
555
+ &compare_structures_python, NULL, NULL, output)
556
+
557
+ PS_dealloc(part)
558
+ sig_free(ordering)
559
+ if isomorphic:
560
+ output_py = [output[i] for i from 0 <= i < n]
561
+ else:
562
+ output_py = False
563
+ sig_free(output)
564
+ return output_py