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,85 @@
1
+ # sage_setup: distribution = sagemath-categories
2
+ r"""
3
+ Declaration file for canonical augmentation
4
+
5
+ AUTHORS:
6
+
7
+ - Robert Miller (2011--2013): initial version
8
+ """
9
+
10
+ #*****************************************************************************
11
+ # Copyright (C) 2006 - 2011 Robert L. Miller <rlmillster@gmail.com>
12
+ #
13
+ # This program is free software: you can redistribute it and/or modify
14
+ # it under the terms of the GNU General Public License as published by
15
+ # the Free Software Foundation, either version 2 of the License, or
16
+ # (at your option) any later version.
17
+ # http://www.gnu.org/licenses/
18
+ #*****************************************************************************
19
+
20
+ from sage.groups.perm_gps.partn_ref.data_structures cimport *
21
+
22
+ from sage.groups.perm_gps.partn_ref.automorphism_group_canonical_label cimport (
23
+ get_aut_gp_and_can_lab, aut_gp_and_can_lab, agcl_work_space,
24
+ allocate_agcl_output, deallocate_agcl_output,
25
+ allocate_agcl_work_space, deallocate_agcl_work_space)
26
+ from sage.groups.perm_gps.partn_ref.double_coset cimport (double_coset,
27
+ dc_work_space, allocate_dc_work_space, deallocate_dc_work_space)
28
+
29
+
30
+ cdef struct iterator:
31
+ void *data
32
+ void *(*next)(void *data, int *degree, bint *mem_err) noexcept
33
+
34
+ cdef struct canonical_generator_data:
35
+ StabilizerChain *group
36
+
37
+ void **object_stack
38
+ int *degree_stack
39
+ iterator *iterator_stack
40
+ aut_gp_and_can_lab **aut_gp_stack
41
+ agcl_work_space **agcl_work_spaces
42
+ dc_work_space **dc_work_spaces
43
+ PartitionStack **ps_stack
44
+ void **aug_stack
45
+ void **parent_stack
46
+
47
+ int level
48
+ int max_level
49
+ int allocd_levels
50
+ bint reduce_children
51
+ bint mem_err
52
+ bint dealloc
53
+ bint pr
54
+
55
+ bint (*all_children_are_equivalent)(PartitionStack *, void *) noexcept
56
+ int (*refine_and_return_invariant)(PartitionStack *, void *, int *, int) noexcept
57
+ int (*compare_structures)(int *, int *, void *, void *, int) noexcept
58
+
59
+ int (*generate_children)(void *, aut_gp_and_can_lab *, iterator *) noexcept
60
+ void *(*apply_augmentation)(void *, void *, void *, int *, bint *) noexcept
61
+ void (*free_object)(void *) noexcept
62
+ void (* free_iter_data)(void *) noexcept
63
+ void (*free_aug)(void *) noexcept
64
+ void *(*canonical_parent)(void *child, void *parent, int *permutation, int *degree, bint *) noexcept
65
+
66
+ cdef canonical_generator_data *allocate_cgd(int, int) noexcept
67
+
68
+ cdef void deallocate_cgd(canonical_generator_data *) noexcept
69
+
70
+ cdef void *canonical_generator_next(void *, int *, bint *) noexcept
71
+
72
+ cdef iterator *setup_canonical_generator(int degree,
73
+ bint (*all_children_are_equivalent)(PartitionStack *, void *) noexcept,
74
+ int (*refine_and_return_invariant)(PartitionStack *, void *, int *, int) noexcept,
75
+ int (*compare_structures)(int *, int *, void *, void *, int) noexcept,
76
+ int (*generate_children)(void *, aut_gp_and_can_lab *, iterator *) noexcept,
77
+ void *(*apply_augmentation)(void *, void *, void *, int *, bint *) noexcept,
78
+ void (*free_object)(void *) noexcept,
79
+ void (* free_iter_data)(void *) noexcept,
80
+ void (*free_aug)(void *) noexcept,
81
+ void *(*canonical_parent)(void *, void *, int *, int *, bint *) noexcept,
82
+ int max_depth, bint reduce_children,
83
+ iterator *cangen_prealloc) except NULL
84
+
85
+ cdef iterator *start_canonical_generator(StabilizerChain *, void *, int, iterator *) except NULL
@@ -0,0 +1,534 @@
1
+ # sage_setup: distribution = sagemath-categories
2
+ r"""
3
+ Canonical augmentation
4
+
5
+ This module implements a general algorithm for generating isomorphism classes
6
+ of objects. The class of objects in question must be some kind of structure
7
+ which can be built up out of smaller objects by a process of augmentation,
8
+ and for which an automorphism is a permutation in `S_n` for some `n`. This
9
+ process consists of starting with a finite number of "seed objects" and
10
+ building up to more complicated objects by a sequence of "augmentations." It
11
+ should be noted that the word "canonical" in the term canonical augmentation
12
+ is used loosely. Given an object `X`, one must define a canonical parent
13
+ `M(X)`, which is essentially an arbitrary choice.
14
+
15
+ The class of objects in question must satisfy the assumptions made in the
16
+ module ``automorphism_group_canonical_label``, in particular the three
17
+ custom functions mentioned there must be implemented:
18
+
19
+ A. ``refine_and_return_invariant``:
20
+
21
+ Signature:
22
+
23
+ ``int refine_and_return_invariant(PartitionStack *PS, void *S, int *cells_to_refine_by, int ctrb_len)``
24
+
25
+ B. ``compare_structures``:
26
+
27
+ Signature:
28
+
29
+ ``int compare_structures(int *gamma_1, int *gamma_2, void *S1, void *S2, int degree)``
30
+
31
+ C. ``all_children_are_equivalent``:
32
+
33
+ Signature:
34
+
35
+ ``bint all_children_are_equivalent(PartitionStack *PS, void *S)``
36
+
37
+
38
+ In the following functions there is frequently a mem_err input. This is a
39
+ pointer to an integer which must be set to a nonzero value in case of an
40
+ allocation failure. Other functions have an int return value which serves the
41
+ same purpose. The idea is that if a memory error occurs, the canonical
42
+ generator should still be able to iterate over the objects already generated
43
+ before it terminates.
44
+
45
+ More details about these functions can be found in that module. In addition,
46
+ several other functions must be implemented, which will make use of the
47
+ following::
48
+
49
+ ctypedef struct iterator:
50
+ void *data
51
+ void *(*next)(void *data, int *degree, int *mem_err)
52
+
53
+ The following functions must be implemented for each specific type of object to
54
+ be generated. Each function following which takes a ``mem_err`` variable as
55
+ input should make use of this variable.
56
+
57
+ D. ``generate_children``:
58
+
59
+ Signature:
60
+
61
+ ``int generate_children(void *S, aut_gp_and_can_lab *group, iterator *it)``
62
+
63
+ This function receives a pointer to an iterator ``it``. The iterator
64
+ has two fields: ``data`` and ``next``. The function ``generate_children``
65
+ should set these two fields, returning 1 to indicate a memory error, or 0
66
+ for no error.
67
+
68
+ The function that ``next`` points to takes ``data`` as an argument, and
69
+ should return a (``void *``) pointer to the next object to be iterated. It
70
+ also takes a pointer to an int, and must update that int to reflect the
71
+ degree of each generated object. The objects to be iterated over should
72
+ satisfy the property that if `\gamma` is an automorphism of the parent
73
+ object `S`, then for any two child objects `C_1, C_2` given by the iterator,
74
+ it is not the case that `\gamma(C_1) = C_2`, where in the latter `\gamma` is
75
+ appropriately extended if necessary to operate on `C_1` and `C_2`. It is
76
+ essential for this iterator to handle its own ``data``. If the ``next``
77
+ function is called and no suitable object is yielded, a NULL pointer
78
+ indicates a termination of the iteration. At this point, the data pointed to
79
+ by the ``data`` variable should be cleared by the ``next`` function, because
80
+ the iterator struct itself will be deallocated.
81
+
82
+ The ``next`` function must check ``mem_err[0]`` before proceeding. If it is
83
+ nonzero then the function should deallocate the iterator right away and
84
+ return NULL to end the iteration. This ensures that the canonical
85
+ augmentation software will finish iterating over the objects found before
86
+ finishing, and the ``mem_err`` attribute of the ``canonical_generator_data``
87
+ will reflect this.
88
+
89
+ The objects which the iterator generates can be thought of as augmentations,
90
+ which the following function must turn into objects.
91
+
92
+ E. ``apply_augmentation``:
93
+
94
+ Signature:
95
+
96
+ ``void *apply_augmentation(void *parent, void *aug, void *child, int *degree, bint *mem_err)``
97
+
98
+ This function takes the ``parent``, applies the augmentation ``aug`` and
99
+ returns a pointer to the corresponding child object (freeing aug if
100
+ necessary). Should also update degree[0] to be the degree of the new child.
101
+
102
+ F. ``free_object``:
103
+
104
+ Signature:
105
+
106
+ ``void free_object(void *child)``
107
+
108
+ This function is a simple deallocation function for children which are not
109
+ canonically generated, and therefore rejected in the canonical augmentation
110
+ process. They should deallocate the contents of ``child``.
111
+
112
+ G. ``free_iter_data``:
113
+
114
+ Signature:
115
+
116
+ ``void free_iter_data(void *data)``
117
+
118
+ This function deallocates the data part of the iterator which is set up by
119
+ ``generate_children``.
120
+
121
+ H. ``free_aug``:
122
+
123
+ Signature:
124
+
125
+ ``void free_aug(void *aug)``
126
+
127
+ This function frees an augmentation as generated by the iterator returned
128
+ by ``generate_children``.
129
+
130
+ I. ``canonical_parent``:
131
+
132
+ Signature:
133
+
134
+ ``void *canonical_parent(void *child, void *parent, int *permutation, int *degree, bint *mem_err)``
135
+
136
+ Apply the ``permutation`` to the ``child``, determine an arbitrary but fixed
137
+ parent, apply the inverse of ``permutation`` to that parent, and return the
138
+ resulting object. Must also set the integer ``degree`` points to the
139
+ degree of the returned object.
140
+
141
+ .. NOTE::
142
+
143
+ It is a good idea to try to implement an augmentation scheme where the
144
+ degree of objects on each level of the augmentation tree is constant. The
145
+ iteration will be more efficient in this case, as the relevant work spaces
146
+ will never need to be reallocated. Otherwise, one should at least strive to
147
+ iterate over augmentations in such a way that all children of the same degree
148
+ are given in the same segment of iteration.
149
+
150
+ EXAMPLES::
151
+
152
+ sage: import sage.groups.perm_gps.partn_ref.canonical_augmentation
153
+
154
+ REFERENCE:
155
+
156
+ - [1] McKay, Brendan D. Isomorph-free exhaustive generation. J Algorithms,
157
+ Vol. 26 (1998), pp. 306-324.
158
+ """
159
+
160
+ #*****************************************************************************
161
+ # Copyright (C) 2010 - 2011 Robert L. Miller <rlmillster@gmail.com>
162
+ #
163
+ # This program is free software: you can redistribute it and/or modify
164
+ # it under the terms of the GNU General Public License as published by
165
+ # the Free Software Foundation, either version 2 of the License, or
166
+ # (at your option) any later version.
167
+ # http://www.gnu.org/licenses/
168
+ #*****************************************************************************
169
+
170
+ from cysignals.memory cimport sig_malloc, sig_free
171
+
172
+ from sage.groups.perm_gps.partn_ref.data_structures cimport*
173
+
174
+
175
+ cdef void *canonical_generator_next(void *can_gen_data, int *degree, bint *mem_err) noexcept:
176
+ r"""
177
+ This function is part of the iterator struct which will iterate over
178
+ objects. Return value of ``NULL`` indicates termination.
179
+ """
180
+ # degree ignored!
181
+ cdef canonical_generator_data *cgd = <canonical_generator_data *> can_gen_data
182
+ cdef iterator *cur_iter
183
+ cdef void *next_candidate
184
+ cdef void *parent_cand
185
+ cdef void *aug
186
+ cdef int next_cand_deg, parent_cand_deg
187
+ cdef PartitionStack *part
188
+ cdef bint augmentation_is_canonical
189
+
190
+ if cgd.level == 0:
191
+ if cgd.mem_err:
192
+ mem_err[0] = 1
193
+ if cgd.dealloc:
194
+ deallocate_cgd(cgd)
195
+ return NULL
196
+
197
+ while cgd.level < cgd.max_level:
198
+ cur_iter = cgd.iterator_stack + cgd.level - 1
199
+ # getting next candidate at level cgd.level
200
+ aug = cur_iter.next( cur_iter.data, &cgd.degree_stack[cgd.level], &cgd.mem_err )
201
+ if aug is NULL:
202
+ # cur_iter has run out: backtrack by one, return the parent
203
+ cgd.level -= 1
204
+ return cgd.object_stack[cgd.level]
205
+ else:
206
+ next_candidate = cgd.apply_augmentation(cgd.object_stack[cgd.level-1],
207
+ aug, cgd.object_stack[cgd.level], &cgd.degree_stack[cgd.level],
208
+ &cgd.mem_err)
209
+ cgd.object_stack[cgd.level] = next_candidate
210
+ if cgd.mem_err:
211
+ continue
212
+ next_cand_deg = cgd.degree_stack[cgd.level]
213
+ if cgd.agcl_work_spaces[cgd.level] is NULL:
214
+ # allocate a work space if it hasn't been allocated already
215
+ cgd.agcl_work_spaces[cgd.level] = allocate_agcl_work_space(next_cand_deg)
216
+ cgd.ps_stack[cgd.level] = PS_new(next_cand_deg, 0)
217
+ elif next_cand_deg != cgd.agcl_work_spaces[cgd.level].degree:
218
+ # in case the degree has changed, we need to reallocate the work
219
+ # space: this is why one should do augmentations in order of degree
220
+ deallocate_agcl_work_space(cgd.agcl_work_spaces[cgd.level])
221
+ deallocate_agcl_output(cgd.aut_gp_stack[cgd.level])
222
+ cgd.aut_gp_stack[cgd.level] = NULL
223
+ PS_dealloc(cgd.ps_stack[cgd.level])
224
+ cgd.agcl_work_spaces[cgd.level] = allocate_agcl_work_space(next_cand_deg)
225
+ cgd.ps_stack[cgd.level] = PS_new(next_cand_deg, 0)
226
+ if cgd.agcl_work_spaces[cgd.level] is NULL or cgd.ps_stack[cgd.level] is NULL:
227
+ cgd.mem_err = 1
228
+ continue
229
+ # see if next_candidate is canonically augmented
230
+ part = cgd.ps_stack[cgd.level]
231
+ PS_unit_partition(part)
232
+ try:
233
+ cgd.aut_gp_stack[cgd.level] = get_aut_gp_and_can_lab(next_candidate,
234
+ part, next_cand_deg, cgd.all_children_are_equivalent,
235
+ cgd.refine_and_return_invariant, cgd.compare_structures,
236
+ 1, cgd.group, cgd.agcl_work_spaces[cgd.level], cgd.aut_gp_stack[cgd.level])
237
+ except MemoryError:
238
+ cgd.mem_err = 1
239
+ continue
240
+ parent_cand = cgd.canonical_parent(next_candidate, cgd.parent_stack[cgd.level-1],
241
+ cgd.aut_gp_stack[cgd.level].relabeling, &parent_cand_deg, &cgd.mem_err)
242
+ if cgd.mem_err:
243
+ continue
244
+ if parent_cand_deg != cgd.degree_stack[cgd.level-1]:
245
+ augmentation_is_canonical = 0
246
+ else:
247
+ if cgd.dc_work_spaces[cgd.level-1] is NULL:
248
+ # allocate a work space if it hasn't been allocated already
249
+ cgd.dc_work_spaces[cgd.level-1] = allocate_dc_work_space(next_cand_deg)
250
+ elif next_cand_deg != cgd.dc_work_spaces[cgd.level-1].degree:
251
+ # in case the degree has changed, we need to reallocate the work
252
+ # space: this is why one should do augmentations in order of degree
253
+ deallocate_dc_work_space(cgd.dc_work_spaces[cgd.level-1])
254
+ cgd.dc_work_spaces[cgd.level-1] = allocate_dc_work_space(next_cand_deg)
255
+ if cgd.dc_work_spaces[cgd.level-1] is NULL:
256
+ cgd.mem_err = 1
257
+ continue
258
+ part = cgd.ps_stack[cgd.level]
259
+ PS_unit_partition(part)
260
+ try:
261
+ augmentation_is_canonical = double_coset(cgd.object_stack[cgd.level-1],
262
+ parent_cand, part, NULL, next_cand_deg,
263
+ cgd.all_children_are_equivalent,
264
+ cgd.refine_and_return_invariant,
265
+ cgd.compare_structures,
266
+ cgd.aut_gp_stack[cgd.level].group, cgd.dc_work_spaces[cgd.level-1], NULL)
267
+ except MemoryError:
268
+ cgd.mem_err = 1
269
+ continue
270
+ if augmentation_is_canonical:
271
+ # the object is canonically augmented, so we add it to the chain
272
+ if cgd.level + 1 != cgd.max_level:
273
+ cgd.mem_err |= cgd.generate_children(next_candidate,
274
+ cgd.aut_gp_stack[cgd.level], cgd.iterator_stack+cgd.level)
275
+ if cgd.mem_err:
276
+ continue
277
+ cgd.level += 1
278
+
279
+ if cgd.level == cgd.max_level:
280
+ # we're at the end of the chain, so just give the object
281
+ cgd.level -= 1
282
+ return cgd.object_stack[cgd.level]
283
+
284
+ cdef canonical_generator_data *allocate_cgd(int max_depth, int degree) noexcept:
285
+ r"""
286
+ Allocate the data part of the canonical generation iterator struct.
287
+ """
288
+ cdef canonical_generator_data *cgd = <canonical_generator_data *> sig_malloc(sizeof(canonical_generator_data))
289
+ cdef PartitionStack *part
290
+ if cgd is NULL:
291
+ sig_free(cgd)
292
+ return NULL
293
+ cgd.object_stack = <void **> sig_malloc(max_depth * sizeof(void *))
294
+ cgd.degree_stack = <int *> sig_malloc(max_depth * sizeof(int))
295
+ cgd.iterator_stack = <iterator *> sig_malloc(max_depth * sizeof(iterator))
296
+ cgd.aut_gp_stack = <aut_gp_and_can_lab **> sig_malloc(max_depth * sizeof(aut_gp_and_can_lab *))
297
+ cgd.agcl_work_spaces = <agcl_work_space **> sig_malloc(max_depth * sizeof(agcl_work_space *))
298
+ cgd.dc_work_spaces = <dc_work_space **> sig_malloc(max_depth * sizeof(dc_work_space *))
299
+ cgd.ps_stack = <PartitionStack **> sig_malloc(max_depth * sizeof(PartitionStack *))
300
+ cgd.aug_stack = <void **> sig_malloc(max_depth * sizeof(void *))
301
+ cgd.parent_stack = <void **> sig_malloc(max_depth * sizeof(void *))
302
+ part = PS_new(degree, 1)
303
+ cdef agcl_work_space *agclws = allocate_agcl_work_space(degree)
304
+ cdef aut_gp_and_can_lab *output = allocate_agcl_output(degree)
305
+ if cgd.object_stack is NULL or cgd.degree_stack is NULL or \
306
+ cgd.iterator_stack is NULL or cgd.aut_gp_stack is NULL or \
307
+ cgd.agcl_work_spaces is NULL or cgd.dc_work_spaces is NULL or \
308
+ cgd.ps_stack is NULL or cgd.aug_stack is NULL or \
309
+ cgd.parent_stack is NULL or agclws is NULL or output is NULL:
310
+ sig_free(cgd.object_stack)
311
+ sig_free(cgd.degree_stack)
312
+ sig_free(cgd.iterator_stack)
313
+ sig_free(cgd.aut_gp_stack)
314
+ sig_free(cgd.agcl_work_spaces)
315
+ sig_free(cgd.dc_work_spaces)
316
+ sig_free(cgd.ps_stack)
317
+ sig_free(cgd.aug_stack)
318
+ sig_free(cgd.parent_stack)
319
+ sig_free(cgd)
320
+ PS_dealloc(part)
321
+ deallocate_agcl_work_space(agclws)
322
+ deallocate_agcl_output(output)
323
+ return NULL
324
+
325
+ cdef int i
326
+ cgd.allocd_levels = max_depth
327
+ for i from 0 <= i < max_depth:
328
+ cgd.agcl_work_spaces[i] = NULL
329
+ cgd.dc_work_spaces[i] = NULL
330
+ cgd.aut_gp_stack[i] = NULL
331
+ cgd.ps_stack[i] = NULL
332
+ cgd.aug_stack[i] = NULL
333
+ cgd.parent_stack[i] = NULL
334
+ cgd.object_stack[i] = NULL
335
+ cgd.iterator_stack[i].data = NULL
336
+ cgd.agcl_work_spaces[0] = agclws
337
+ cgd.aut_gp_stack[0] = output
338
+ cgd.ps_stack[0] = part
339
+
340
+ cgd.degree_stack[0] = degree
341
+ return cgd
342
+
343
+
344
+ cdef void deallocate_cgd(canonical_generator_data *cgd) noexcept:
345
+ r"""
346
+ Deallocate the data part of the canonical generation iterator struct.
347
+ """
348
+ if cgd is NULL:
349
+ return
350
+ cdef int i
351
+ for i from 0 <= i < cgd.allocd_levels:
352
+ if cgd.agcl_work_spaces[i] is not NULL:
353
+ deallocate_agcl_work_space(cgd.agcl_work_spaces[i])
354
+ if cgd.ps_stack[i] is not NULL:
355
+ PS_dealloc(cgd.ps_stack[i])
356
+ if cgd.dc_work_spaces[i] is not NULL:
357
+ deallocate_dc_work_space(cgd.dc_work_spaces[i])
358
+ if cgd.aut_gp_stack[i] is not NULL:
359
+ deallocate_agcl_output(cgd.aut_gp_stack[i])
360
+ if cgd.object_stack[i] is not NULL:
361
+ cgd.free_object(cgd.object_stack[i])
362
+ if cgd.parent_stack[i] is not NULL:
363
+ cgd.free_object(cgd.parent_stack[i])
364
+ if cgd.aug_stack[i] is not NULL:
365
+ cgd.free_aug(cgd.aug_stack[i])
366
+ if cgd.iterator_stack[i].data is not NULL:
367
+ cgd.free_iter_data(cgd.iterator_stack[i].data)
368
+ sig_free(cgd.object_stack)
369
+ sig_free(cgd.degree_stack)
370
+ sig_free(cgd.iterator_stack)
371
+ sig_free(cgd.aut_gp_stack)
372
+ sig_free(cgd.agcl_work_spaces)
373
+ sig_free(cgd.dc_work_spaces)
374
+ sig_free(cgd.ps_stack)
375
+ sig_free(cgd.aug_stack)
376
+ sig_free(cgd.parent_stack)
377
+ sig_free(cgd)
378
+
379
+
380
+ cdef iterator *setup_canonical_generator(int degree,
381
+ bint (*all_children_are_equivalent)(PartitionStack *PS, void *S) noexcept,
382
+ int (*refine_and_return_invariant)(PartitionStack *PS, void *S,
383
+ int *cells_to_refine_by, int ctrb_len) noexcept,
384
+ int (*compare_structures)(int *gamma_1, int *gamma_2, void *S1, void *S2,
385
+ int degree) noexcept,
386
+ int (*generate_children)(void *, aut_gp_and_can_lab *, iterator *) noexcept,
387
+ void *(*apply_augmentation)(void *, void *, void *, int *, bint *) noexcept,
388
+ void (*free_object)(void *) noexcept,
389
+ void (*free_iter_data)(void *) noexcept,
390
+ void (*free_aug)(void *) noexcept,
391
+ void *(*canonical_parent)(void *child, void *parent, int *permutation, int *degree, bint *mem_err) noexcept,
392
+ int max_depth, bint reduce_children, iterator *cangen_prealloc) except NULL:
393
+ """
394
+ Canonical generation of isomorphism classes of objects.
395
+
396
+ INPUT:
397
+
398
+ - ``S`` -- pointer to the seed object
399
+
400
+ - ``degree`` -- the degree of S
401
+
402
+ - ``all_children_are_equivalent`` -- pointer to a function
403
+ INPUT:
404
+ - ``PS`` -- pointer to a partition stack
405
+ - ``S`` -- pointer to the structure
406
+ OUTPUT:
407
+ bint; returns ``True`` if it can be determined that all refinements below
408
+ the current one will result in an equivalent discrete partition
409
+ - ``refine_and_return_invariant`` -- pointer to a function
410
+ INPUT:
411
+ - ``PS`` -- pointer to a partition stack
412
+ - ``S`` -- pointer to the structure
413
+ - ``alpha`` -- an array consisting of numbers, which indicate the starting
414
+ positions of the cells to refine against (will likely be modified)
415
+ OUTPUT:
416
+ integer; returns an invariant under application of arbitrary permutations
417
+ - ``compare_structures`` -- pointer to a function
418
+ INPUT:
419
+ - ``gamma_1``, ``gamma_2`` -- (list) permutations of the points of S1 and S2
420
+ - ``S1``, ``S2`` -- pointers to the structures
421
+ - ``degree`` -- degree of gamma_1 and 2
422
+ OUTPUT:
423
+ integer; 0 if gamma_1(S1) = gamma_2(S2), otherwise -1 or 1 (see docs for cmp),
424
+ such that the set of all structures is well-ordered
425
+ - ``generate_children`` -- pointer to a function
426
+ INPUT:
427
+ - ``S`` -- pointer to the structure
428
+ - ``group`` -- pointer to an automorphism group (canonical relabeling is not guaranteed)
429
+ - ``it`` -- preallocated iterator struct
430
+ OUTPUT:
431
+ iterator *; pointer to an iterator over inequivalent augmentations of S
432
+ - ``apply_augmentation`` -- pointer to a function
433
+ INPUT:
434
+ - ``parent`` -- object to augment
435
+ - ``aug`` -- the augmentation
436
+ - ``child`` -- space to put the augmented object
437
+ - ``degree`` -- pointer to an int, function should store the degree of the augmented object here
438
+ - ``mem_err`` -- pointer where memory error can be reported
439
+ OUTPUT: pointer to child
440
+ - ``free_object`` -- pointer to a function
441
+ INPUT:
442
+ - ``child`` -- object to be freed
443
+ - ``free_iter_data`` -- pointer to a function
444
+ INPUT:
445
+ - ``data`` -- data part of an iterator struct
446
+ - ``free_aug`` -- pointer to a function
447
+ INPUT:
448
+ - ``aug`` -- augmentation to be freed
449
+ - ``canonical_parent`` -- pointer to a function
450
+ INPUT:
451
+ - ``child`` -- pointer to the structure
452
+ - ``parent`` -- space to store the canonical parent
453
+ - ``permutation`` -- array representing a relabeling of the child
454
+ - ``degree`` -- pointer to store the degree of the parent
455
+ - ``mem_err`` -- pointer for indicating memory errors
456
+ OUTPUT: pointer to the parent
457
+
458
+ - ``max_depth`` -- maximum depth of augmentations to be made from the seed object S
459
+
460
+ OUTPUT: a pointer to an iterator of objects
461
+ """
462
+ if max_depth <= 1:
463
+ raise ValueError("maximum depth (%d) must be at least two" % max_depth)
464
+ if reduce_children:
465
+ raise NotImplementedError
466
+
467
+ # Allocate memory for the arrays and check for failures:
468
+ cdef iterator *canonical_generator
469
+ cdef canonical_generator_data *cgd
470
+ if cangen_prealloc is NULL:
471
+ canonical_generator = <iterator *> sig_malloc(sizeof(iterator))
472
+ cgd = allocate_cgd(max_depth, degree)
473
+ if canonical_generator is NULL or cgd is NULL:
474
+ sig_free(canonical_generator)
475
+ deallocate_cgd(cgd)
476
+ raise MemoryError
477
+ cgd.dealloc = 1
478
+ else:
479
+ canonical_generator = cangen_prealloc
480
+ cgd = <canonical_generator_data *> canonical_generator.data
481
+ if cgd.degree_stack[0] != degree or cgd.allocd_levels < max_depth:
482
+ deallocate_cgd(cgd)
483
+ cgd = allocate_cgd(max_depth, degree)
484
+ if cgd is NULL:
485
+ raise MemoryError
486
+ cgd.dealloc = 0
487
+ canonical_generator.data = <void *> cgd
488
+ canonical_generator.next = &canonical_generator_next
489
+
490
+ cgd.max_level = max_depth
491
+ cgd.reduce_children = reduce_children
492
+ cgd.mem_err = 0
493
+
494
+ cgd.all_children_are_equivalent = all_children_are_equivalent
495
+ cgd.refine_and_return_invariant = refine_and_return_invariant
496
+ cgd.compare_structures = compare_structures
497
+
498
+ cgd.generate_children = generate_children
499
+ cgd.apply_augmentation = apply_augmentation
500
+ cgd.free_object = free_object
501
+ cgd.free_iter_data = free_iter_data
502
+ cgd.free_aug = free_aug
503
+ cgd.canonical_parent = canonical_parent
504
+
505
+ return canonical_generator
506
+
507
+ cdef iterator *start_canonical_generator(StabilizerChain *group, void *obj, int degree, iterator *canonical_generator) except NULL:
508
+ r"""
509
+ Given the containing group ``group`` and the seed object ``obj`` of degree
510
+ ``degree``, initiate the canonical generator stored (and already allocated)
511
+ at ``canonical_generator``.
512
+ """
513
+ cdef canonical_generator_data *cgd = <canonical_generator_data *> canonical_generator.data
514
+ if obj is NULL:
515
+ obj = cgd.object_stack[0]
516
+ else:
517
+ cgd.object_stack[0] = obj
518
+ cgd.level = 1
519
+ cgd.group = group
520
+ PS_unit_partition(cgd.ps_stack[0])
521
+ try:
522
+ cgd.aut_gp_stack[0] = get_aut_gp_and_can_lab(obj, cgd.ps_stack[0], degree,
523
+ cgd.all_children_are_equivalent,
524
+ cgd.refine_and_return_invariant,
525
+ cgd.compare_structures,
526
+ 0, group, cgd.agcl_work_spaces[0], cgd.aut_gp_stack[0])
527
+ except MemoryError:
528
+ cgd.mem_err = 1
529
+ else:
530
+ cgd.mem_err |= cgd.generate_children(obj, cgd.aut_gp_stack[0], cgd.iterator_stack)
531
+ if cgd.mem_err:
532
+ raise MemoryError
533
+
534
+ return canonical_generator