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,576 @@
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.data_structures.bitset_base cimport *
13
+
14
+ from libc.string cimport memcpy
15
+ from libc.stdlib cimport rand
16
+ from sage.libs.gmp.mpz cimport *
17
+
18
+ from cysignals.memory cimport sig_free
19
+
20
+
21
+ cdef enum:
22
+ # The following is for the automorphism group computation, says what the
23
+ # length of fixed point and minimal cell representative arrays should be,
24
+ # which are used to prune the search tree under known symmetries.
25
+ # Increasing this may make certain automorphism_group_and_canonical_label
26
+ # computations faster for incredibly large groups.
27
+ len_of_fp_and_mcr = 100
28
+
29
+ cdef struct OrbitPartition:
30
+ # Disjoint set data structure for representing the orbits of the generators
31
+ # so far found. Also keeps track of the minimum elements of the cells and
32
+ # their sizes.
33
+ int degree
34
+ int num_cells
35
+ int *parent
36
+ int *rank
37
+ int *mcr # minimum cell representatives - only valid at the root of a cell
38
+ int *size # also only valid at the root of a cell
39
+
40
+ cdef struct PartitionStack:
41
+ # Representation of a node of the search tree. A sequence of partitions of
42
+ # length depth + 1, each of which is finer than the last. Partition k is
43
+ # represented as PS.entries in order, broken up immediately after each
44
+ # entry of levels which is at most k.
45
+ int *entries
46
+ int *levels
47
+ int depth
48
+ int degree
49
+
50
+ cdef struct StabilizerChain:
51
+ # A representation of a permutation group acting on 0, 1, ..., degree-1.
52
+ int degree
53
+ int base_size
54
+
55
+ int *orbit_sizes
56
+ int *num_gens # dimension of generator cube on each level
57
+ int *array_size # size of space to hold generators on each level (number of permutations)
58
+
59
+ int **base_orbits #
60
+ int **parents # three n*n squares, orbits and tree structures
61
+ int **labels #
62
+
63
+ int **generators # generators for each level,
64
+ int **gen_inverses # and their inverses
65
+
66
+ bitset_s gen_used
67
+ bitset_s gen_is_id
68
+ int *perm_scratch
69
+ OrbitPartition *OP_scratch
70
+
71
+
72
+ # OrbitPartition (OP)
73
+
74
+ cdef OrbitPartition *OP_new(int n) noexcept
75
+
76
+ cdef void OP_dealloc(OrbitPartition *OP) noexcept
77
+
78
+ cdef inline int OP_copy_from_to(OrbitPartition *OP, OrbitPartition *OP2) noexcept:
79
+ """
80
+ Copy all data from OP to OP2, we suppose that
81
+
82
+ - OP2.degree == OP.degree
83
+ - OP2.num_cells == OP.num_cells
84
+ """
85
+ memcpy(OP2.parent, OP.parent, OP.degree * sizeof(int))
86
+ memcpy(OP2.rank, OP.rank, OP.degree * sizeof(int))
87
+ memcpy(OP2.mcr, OP.mcr, OP.degree * sizeof(int))
88
+ memcpy(OP2.size, OP.size, OP.degree * sizeof(int))
89
+
90
+ cdef inline OrbitPartition *OP_copy(OrbitPartition *OP) noexcept:
91
+ """
92
+ Allocate and return a pointer to a copy of a OrbitPartition of degree n.
93
+
94
+ Returns a null pointer in the case of an allocation failure.
95
+ """
96
+ cdef OrbitPartition *OP2 = OP_new(OP.degree)
97
+ if OP is NULL:
98
+ raise MemoryError("MemoryError allocating OrbitPartition in copy method")
99
+
100
+ OP_copy_from_to(OP, OP2)
101
+ return OP2
102
+
103
+ cdef OP_string(OrbitPartition *OP)
104
+
105
+ cdef inline void OP_clear(OrbitPartition *OP) noexcept:
106
+ cdef int i, n = OP.degree
107
+ for i from 0 <= i < n:
108
+ OP.parent[i] = i
109
+ OP.rank[i] = 0
110
+ OP.mcr[i] = i
111
+ OP.size[i] = 1
112
+
113
+ cdef inline int OP_find(OrbitPartition *OP, int n) noexcept:
114
+ """
115
+ Report the representative ("root") of the cell which contains n.
116
+ """
117
+ if OP.parent[n] == n:
118
+ return n
119
+ else:
120
+ OP.parent[n] = OP_find(OP, OP.parent[n])
121
+ return OP.parent[n]
122
+
123
+ cdef inline void OP_join(OrbitPartition *OP, int m, int n) noexcept:
124
+ """
125
+ Join the cells containing m and n, if they are different.
126
+ """
127
+ cdef int m_root = OP_find(OP, m)
128
+ cdef int n_root = OP_find(OP, n)
129
+ if OP.rank[m_root] > OP.rank[n_root]:
130
+ OP.parent[n_root] = m_root
131
+ OP.mcr[m_root] = min(OP.mcr[m_root], OP.mcr[n_root])
132
+ OP.size[m_root] += OP.size[n_root]
133
+ elif OP.rank[m_root] < OP.rank[n_root]:
134
+ OP.parent[m_root] = n_root
135
+ OP.mcr[n_root] = min(OP.mcr[m_root], OP.mcr[n_root])
136
+ OP.size[n_root] += OP.size[m_root]
137
+ elif m_root != n_root:
138
+ OP.parent[n_root] = m_root
139
+ OP.mcr[m_root] = min(OP.mcr[m_root], OP.mcr[n_root])
140
+ OP.size[m_root] += OP.size[n_root]
141
+ OP.rank[m_root] += 1
142
+ if m_root != n_root:
143
+ OP.num_cells -= 1
144
+
145
+ cdef void OP_make_set(OrbitPartition *OP) noexcept
146
+
147
+ cdef inline int OP_merge_list_perm(OrbitPartition *OP, int *gamma) noexcept:
148
+ """
149
+ Joins the cells of OP which intersect the same orbit of gamma.
150
+
151
+ INPUT:
152
+
153
+ - ``gamma`` - an integer array representing ``i -> gamma[i]``.
154
+
155
+ OUTPUT:
156
+
157
+ - 1 -- something changed
158
+ - 0 -- orbits of gamma all contained in cells of OP
159
+ """
160
+ cdef int i, i_root, gamma_i_root, changed = 0
161
+ for i from 0 <= i < OP.degree:
162
+ if gamma[i] == i:
163
+ continue
164
+ i_root = OP_find(OP, i)
165
+ gamma_i_root = OP_find(OP, gamma[i])
166
+ if i_root != gamma_i_root:
167
+ changed = 1
168
+ OP_join(OP, i_root, gamma_i_root)
169
+ return changed
170
+
171
+
172
+ # PartitionStack (PS)
173
+
174
+ cdef inline int PS_copy_from_to(PartitionStack *PS, PartitionStack *PS2) noexcept:
175
+ """
176
+ Copy all data from PS to PS2.
177
+ """
178
+ PS2.depth = PS.depth
179
+ PS2.degree = PS.degree
180
+ memcpy(PS2.entries, PS.entries, 2*PS.degree * sizeof(int) )
181
+
182
+ cdef inline bint PS_is_discrete(PartitionStack *PS) noexcept:
183
+ """
184
+ Return whether the deepest partition consists only of singleton cells.
185
+ """
186
+ cdef int i
187
+ for i from 0 <= i < PS.degree:
188
+ if PS.levels[i] > PS.depth:
189
+ return 0
190
+ return 1
191
+
192
+ cdef inline int PS_num_cells(PartitionStack *PS) noexcept:
193
+ """
194
+ Return the number of cells.
195
+ """
196
+ cdef int i, ncells = 0
197
+ for i from 0 <= i < PS.degree:
198
+ if PS.levels[i] <= PS.depth:
199
+ ncells += 1
200
+ return ncells
201
+
202
+ cdef inline void PS_move_min_to_front(PartitionStack *PS, int start, int end) noexcept:
203
+ """
204
+ Makes sure that the first element of the segment of entries i with
205
+ start <= i <= end is minimal.
206
+ """
207
+ cdef int i, min_loc = start, minimum = PS.entries[start]
208
+ for i from start < i <= end:
209
+ if PS.entries[i] < minimum:
210
+ min_loc = i
211
+ minimum = PS.entries[i]
212
+ if min_loc != start:
213
+ PS.entries[min_loc] = PS.entries[start]
214
+ PS.entries[start] = minimum
215
+
216
+ cdef inline bint PS_is_mcr(PartitionStack *PS, int m) noexcept:
217
+ """
218
+ Return whether PS.elements[m] (not m!) is the smallest element of its cell.
219
+ """
220
+ return m == 0 or PS.levels[m-1] <= PS.depth
221
+
222
+ cdef inline bint PS_is_fixed(PartitionStack *PS, int m) noexcept:
223
+ """
224
+ Return whether PS.elements[m] (not m!) is in a singleton cell, assuming
225
+ PS_is_mcr(PS, m) is already true.
226
+ """
227
+ return PS.levels[m] <= PS.depth
228
+
229
+ cdef inline int PS_clear(PartitionStack *PS) noexcept:
230
+ """
231
+ Set the current partition to the first shallower one, i.e. forgets about
232
+ boundaries between cells that are new to the current level.
233
+ """
234
+ cdef int i, cur_start = 0
235
+ for i from 0 <= i < PS.degree:
236
+ if PS.levels[i] == PS.depth:
237
+ PS.levels[i] += 1
238
+ if PS.levels[i] < PS.depth:
239
+ PS_move_min_to_front(PS, cur_start, i)
240
+ cur_start = i+1
241
+
242
+ cdef inline int PS_move_all_mins_to_front(PartitionStack *PS) noexcept:
243
+ """
244
+ Move minimal cell elements to the front of each cell.
245
+ """
246
+ cdef int i, cur_start = 0
247
+ for i from 0 <= i < PS.degree:
248
+ if PS.levels[i] <= PS.depth:
249
+ PS_move_min_to_front(PS, cur_start, i)
250
+ cur_start = i+1
251
+
252
+ cdef inline int PS_get_perm_from(PartitionStack *PS1, PartitionStack *PS2, int *gamma) noexcept:
253
+ """
254
+ Store the permutation determined by PS2[i] -> PS1[i] for each i, where PS[i]
255
+ denotes the entry of the `i`-th cell of the discrete partition PS.
256
+ """
257
+ cdef int i
258
+ for i from 0 <= i < PS1.degree:
259
+ gamma[PS2.entries[i]] = PS1.entries[i]
260
+
261
+ cdef PartitionStack *PS_new(int n, bint unit_partition) noexcept
262
+
263
+ cdef PartitionStack *PS_copy(PartitionStack *PS) noexcept
264
+
265
+ cdef void PS_dealloc(PartitionStack *PS) noexcept
266
+
267
+ cdef PS_print(PartitionStack *PS)
268
+
269
+ cdef void PS_unit_partition(PartitionStack *PS) noexcept
270
+
271
+ cdef int PS_first_smallest(PartitionStack *PS, bitset_t b, int *second_pos=?) noexcept
272
+
273
+ cdef PartitionStack *PS_from_list(list L) noexcept
274
+
275
+ cdef list PS_singletons(PartitionStack * part)
276
+
277
+ cdef int PS_all_new_cells(PartitionStack *PS, bitset_t** nonsingletons_ptr) noexcept
278
+
279
+ cdef inline bint stacks_are_equivalent(PartitionStack *PS1, PartitionStack *PS2) noexcept:
280
+ cdef int i, j, depth = min(PS1.depth, PS2.depth)
281
+ for i from 0 <= i < PS1.degree:
282
+ if PS1.levels[i] == PS2.levels[i]:
283
+ continue
284
+ elif ((PS1.levels[i] <= depth < PS2.levels[i])
285
+ or (PS2.levels[i] <= depth < PS1.levels[i])):
286
+ return 0
287
+ return 1
288
+
289
+ cdef int sort_by_function(PartitionStack *PS, int start, int *degrees) noexcept
290
+
291
+ cdef inline int PS_split_point(PartitionStack *PS, int v) noexcept:
292
+ """
293
+ Detaches the point v from the cell it is in, putting the singleton cell
294
+ of just v in front. Returns the position where v is now located.
295
+ """
296
+ cdef int i = 0, index_of_v
297
+ while PS.entries[i] != v:
298
+ i += 1
299
+ index_of_v = i
300
+ while PS.levels[i] > PS.depth:
301
+ i += 1
302
+ if (index_of_v == 0 or PS.levels[index_of_v-1] <= PS.depth) \
303
+ and PS.levels[index_of_v] > PS.depth:
304
+ # if v is first (make sure v is not already alone)
305
+ PS_move_min_to_front(PS, index_of_v+1, i)
306
+ PS.levels[index_of_v] = PS.depth
307
+ return index_of_v
308
+ else:
309
+ # If v is not at front, i.e. v is not minimal in its cell,
310
+ # then move_min_to_front is not necessary since v will swap
311
+ # with the first before making its own cell, leaving it at
312
+ # the front of the other.
313
+ i = index_of_v
314
+ while i != 0 and PS.levels[i-1] > PS.depth:
315
+ i -= 1
316
+ PS.entries[index_of_v] = PS.entries[i+1] # move the second element to v
317
+ PS.entries[i+1] = PS.entries[i] # move the first (min) to second
318
+ PS.entries[i] = v # place v first
319
+ PS.levels[i] = PS.depth
320
+ return i
321
+
322
+ cdef inline int split_point_and_refine(PartitionStack *PS, int v, void *S,
323
+ int (*refine_and_return_invariant)
324
+ (PartitionStack *PS, void *S, int *cells_to_refine_by, int ctrb_len) noexcept,
325
+ int *cells_to_refine_by) noexcept:
326
+ """
327
+ Make the partition stack one longer by copying the last partition in the
328
+ stack, split off a given point, and refine. Return the invariant given by
329
+ the refinement function.
330
+
331
+ INPUT:
332
+ - ``PS`` -- the partition stack to refine
333
+ - ``v`` -- the point to split
334
+ - ``S`` -- the structure
335
+ - ``refine_and_return_invariant`` -- the refinement function provided
336
+ - ``cells_to_refine_by`` -- an array, contents ignored
337
+ - ``group`` -- the containing group, NULL for full S_n
338
+ - ``perm_stack`` -- represents a partial traversal decomposition for group
339
+ """
340
+ PS.depth += 1
341
+ PS_clear(PS)
342
+ cells_to_refine_by[0] = PS_split_point(PS, v)
343
+ return refine_and_return_invariant(PS, S, cells_to_refine_by, 1)
344
+
345
+
346
+ # StabilizerChain (SC)
347
+
348
+ cdef StabilizerChain *SC_new(int n, bint init_gens=?) noexcept
349
+
350
+ cdef int SC_realloc_gens(StabilizerChain *SC, int level, int size) noexcept
351
+
352
+ cdef void SC_dealloc(StabilizerChain *SC) noexcept
353
+
354
+ cdef int SC_copy_nomalloc(StabilizerChain *SC_dest, StabilizerChain *SC,
355
+ int level) noexcept
356
+
357
+ cdef StabilizerChain *SC_alternating_group(int n) noexcept
358
+
359
+ cdef int SC_insert_and_sift(StabilizerChain *SC, int level, int *pi,
360
+ int num_perms, bint sift) noexcept
361
+
362
+ cdef int SC_insert_base_point_nomalloc(StabilizerChain *SC_dest,
363
+ StabilizerChain *SC, int level, int p) noexcept
364
+
365
+ cdef inline int SC_perm_is_identity(int *perm, int degree) noexcept:
366
+ for i from 0 <= i < degree:
367
+ if perm[i] != i:
368
+ break
369
+ else:
370
+ return 1
371
+ return 0
372
+
373
+ cdef inline void SC_mult_perms(int *out, int *first, int *second, int degree) noexcept:
374
+ """
375
+ DON'T DO THIS WITH out == second!
376
+ """
377
+ cdef int i
378
+ for i from 0 <= i < degree:
379
+ out[i] = second[first[i]]
380
+
381
+ cdef inline void SC_invert_perm(int *out, int *input, int degree) noexcept:
382
+ """
383
+ DON'T DO THIS WITH out == in!
384
+ """
385
+ cdef int i
386
+ for i from 0 <= i < degree:
387
+ out[input[i]] = i
388
+
389
+ cdef inline void SC_identify(int *perm, int degree) noexcept:
390
+ cdef int i
391
+ for i from 0 <= i < degree:
392
+ perm[i] = i
393
+
394
+ cdef inline void SC_add_base_point(StabilizerChain *SC, int b) noexcept:
395
+ """
396
+ Add base point b to the end of SC. Assumes b is not already in the base.
397
+ """
398
+ cdef int i, n = SC.degree
399
+ SC.orbit_sizes[SC.base_size] = 1
400
+ SC.num_gens[SC.base_size] = 0
401
+ SC.base_orbits[SC.base_size][0] = b
402
+ for i from 0 <= i < n:
403
+ SC.parents[SC.base_size][i] = -1
404
+ SC.parents[SC.base_size][b] = b
405
+ SC.labels[SC.base_size][b] = 0
406
+ SC.base_size += 1
407
+
408
+ cdef inline int SC_cleanup(StabilizerChain *SC) noexcept:
409
+ """
410
+ Remove redundant base elements from SC.
411
+
412
+ Returns 1 if nothing changed, and 2 in case of an allocation failure.
413
+ """
414
+ cdef int old, new = 0, i, n = SC.degree
415
+ for old from 0 <= old < SC.base_size:
416
+ if SC.orbit_sizes[old] != 1:
417
+ if old != new:
418
+ # copy row old to row new
419
+ SC.orbit_sizes[new] = SC.orbit_sizes[old]
420
+ SC.num_gens[new] = SC.num_gens[old]
421
+ if SC.array_size[new] < SC.array_size[old]:
422
+ if SC_realloc_gens(SC, new, max(SC.array_size[old], 2*SC.array_size[new])):
423
+ return 2
424
+ memcpy(SC.base_orbits[new], SC.base_orbits[old], n * sizeof(int))
425
+ memcpy(SC.parents[new], SC.parents[old], n * sizeof(int))
426
+ memcpy(SC.labels[new], SC.labels[old], n * sizeof(int))
427
+ memcpy(SC.generators[new], SC.generators[old], n*SC.num_gens[old] * sizeof(int))
428
+ memcpy(SC.gen_inverses[new], SC.gen_inverses[old], n*SC.num_gens[old] * sizeof(int))
429
+ new += 1
430
+ old = SC.base_size
431
+ SC.base_size = new
432
+ return (old == new)
433
+
434
+ cdef inline void SC_compose_up_to_base(StabilizerChain *SC, int level, int x, int *perm) noexcept:
435
+ """
436
+ Repeatedly compose the given perm by labels on the Schreier tree, starting
437
+ with x, until the base is reached. The composition is stored to perm.
438
+ """
439
+ cdef int b = SC.base_orbits[level][0], n = SC.degree
440
+ cdef int *label
441
+ cdef int label_no
442
+ while x != b:
443
+ label_no = SC.labels[level][x]
444
+ if label_no < 0:
445
+ label_no = -label_no - 1
446
+ label = SC.gen_inverses[level] + n*label_no
447
+ else:
448
+ label_no = label_no - 1
449
+ label = SC.generators[level] + n*label_no
450
+ x = SC.parents[level][x]
451
+ SC_mult_perms(perm, perm, label, n)
452
+
453
+ cdef inline void SC_scan(StabilizerChain *SC, int level, int x, int gen_index, int *gen, int sign) noexcept:
454
+ """
455
+ See whether the point x is moved to a point outside the
456
+ tree by gen, and if so add it to the tree (arc label is gen_inv).
457
+
458
+ gen_index - where in the generator array the generator is located
459
+ gen - points to the generator
460
+ gen_inv - points to the inverse
461
+ sign - whether to take SC.generators or SC.gen_inverses to go *up* the tree
462
+ """
463
+ cdef int y = gen[x], n = SC.degree
464
+ if SC.parents[level][y] == -1:
465
+ SC.base_orbits[level][SC.orbit_sizes[level]] = y
466
+ SC.orbit_sizes[level] += 1
467
+ SC.parents[level][y] = x
468
+ SC.labels[level][y] = sign*(gen_index+1)
469
+
470
+ cdef inline int SC_insert(StabilizerChain *SC, int level, int *pi, int num_perms) noexcept:
471
+ """
472
+ Add permutations in pi to the stabilizer chain. The array pi is a sequence
473
+ of num_perms permutations, each in list representation, hence pi should be
474
+ at least length SC.degree*num_perms. There must be at most SC.degree perms.
475
+ (Simply call the function again if you want to add more.)
476
+
477
+ The variable ``level`` is used for recursion. From the outside, should be
478
+ set to zero. On the inside, used to bring the data structure up to date of
479
+ level ``level``, given that it is up to date on ``level + 1``.
480
+
481
+ Return values:
482
+ 0 - No errors.
483
+ 1 - Allocation failure.
484
+ """
485
+ return SC_insert_and_sift(SC, level, pi, num_perms, 1)
486
+
487
+ cdef inline int SC_update_tree(StabilizerChain *SC, int level, int *pi, int num_perms) noexcept:
488
+ return SC_insert_and_sift(SC, level, pi, num_perms, 0)
489
+
490
+ cdef inline void SC_order(StabilizerChain *SC, int i, mpz_t order) noexcept:
491
+ """
492
+ Give the order of the stabilizer of base points up to but not including the
493
+ `i`-th, storing it to ``order``, which must be already initialized.
494
+
495
+ To get the order of the full group, let ``i = 0``.
496
+ """
497
+ cdef int k
498
+ mpz_set_si(order, 1)
499
+ for k from i <= k < SC.base_size:
500
+ mpz_mul_si(order, order, SC.orbit_sizes[k])
501
+
502
+ cdef inline bint SC_contains(StabilizerChain *SC, int level, int *pi, bint modify) noexcept:
503
+ """
504
+ Test whether pi is in the level-th stabilizer.
505
+
506
+ Assumes that pi stabilizes the first level base points.
507
+ """
508
+ cdef int b, i, j, x, n = SC.degree
509
+ cdef int *perm
510
+ if modify:
511
+ perm = pi
512
+ else:
513
+ perm = SC.perm_scratch
514
+ memcpy(perm, pi, n*sizeof(int))
515
+ for i from level <= i < SC.base_size:
516
+ b = SC.base_orbits[i][0]
517
+ x = perm[b]
518
+ if x == b:
519
+ continue
520
+ if SC.parents[i][x] == -1:
521
+ return 0
522
+ SC_compose_up_to_base(SC, i, x, perm)
523
+ return SC_perm_is_identity(perm, n)
524
+
525
+ cdef inline void SC_random_element(StabilizerChain *SC, int level, int *perm) noexcept:
526
+ """
527
+ Give a random element of the level-th stabilizer. For a random element of the
528
+ whole group, set level to 0. Must have level < SC.base_size.
529
+ """
530
+ cdef int i, x, n = SC.degree
531
+ SC_identify(perm, n)
532
+ for i from level <= i < SC.base_size:
533
+ x = SC.base_orbits[i][rand() % SC.orbit_sizes[i]]
534
+ SC_compose_up_to_base(SC, i, x, perm)
535
+
536
+ cdef int compute_relabeling(StabilizerChain *group,
537
+ StabilizerChain *scratch_group,
538
+ int *permutation, int *relabeling) noexcept
539
+
540
+ cdef inline void update_perm_stack(StabilizerChain *group, int level, int point,
541
+ int *perm_stack) noexcept:
542
+ """
543
+ Ensure that perm_stack[level] is gamma_0^{-1}...gamma_{level-1}^{-1}, where
544
+ each gamma_i represents the coset representative at the `i`-th level determined
545
+ by our current position in the search tree.
546
+
547
+ For internal use within the automorphism group, canonical label and double
548
+ coset functions, to be called after refinement (level = depth after refinement).
549
+ """
550
+ cdef int n = group.degree
551
+ memcpy(perm_stack + n*level, perm_stack + n*(level-1), n*sizeof(int))
552
+ SC_compose_up_to_base(group, level-1, perm_stack[n*(level-1) + point], perm_stack + n*level)
553
+
554
+ cdef inline int split_point_and_refine_by_orbits(PartitionStack *PS, int v,
555
+ void *S, int (*refine_and_return_invariant)
556
+ (PartitionStack *PS, void *S, int *cells_to_refine_by, int ctrb_len) noexcept,
557
+ int *cells_to_refine_by, StabilizerChain *SC, int *perm_stack) noexcept:
558
+ """ """
559
+ PS.depth += 1
560
+ PS_clear(PS)
561
+ cells_to_refine_by[0] = PS_split_point(PS, v)
562
+ update_perm_stack(SC, PS.depth, v, perm_stack)
563
+ return refine_also_by_orbits(PS, S, refine_and_return_invariant, cells_to_refine_by, 1, SC, perm_stack)
564
+
565
+ cdef int refine_by_orbits(PartitionStack *PS, StabilizerChain *SC,
566
+ int *perm_stack, int *cells_to_refine_by, int *ctrb_len) noexcept
567
+
568
+ cdef inline int refine_also_by_orbits(PartitionStack *PS, void *S,
569
+ int (*refine_and_return_invariant)
570
+ (PartitionStack *PS, void *S, int *cells_to_refine_by, int ctrb_len) noexcept,
571
+ int *cells_to_refine_by, int ctrb_len, StabilizerChain *SC, int *perm_stack) noexcept:
572
+ """ """
573
+ cdef int inv
574
+ inv = refine_by_orbits(PS, SC, perm_stack, cells_to_refine_by, &ctrb_len)
575
+ inv += refine_and_return_invariant(PS, S, cells_to_refine_by, ctrb_len)
576
+ return inv