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,117 @@
1
+ # sage_setup: distribution = sagemath-categories
2
+ """
3
+ Few functions from ``bitset_base.pxd`` that are not inlined.
4
+ """
5
+
6
+ # ***************************************************************************
7
+ # Copyright (C) 2008 Robert Bradshaw <robertwb@math.washington.edu>
8
+ #
9
+ # Distributed under the terms of the GNU General Public License (GPL)
10
+ # as published by the Free Software Foundation; either version 2 of
11
+ # the License, or (at your option) any later version.
12
+ # https://www.gnu.org/licenses/
13
+ # ***************************************************************************
14
+
15
+ cdef char* bitset_chars(char* s, fused_bitset_t bits, char zero=c'0', char one=c'1') noexcept:
16
+ """
17
+ Return a string representation of the bitset in s, using zero for
18
+ the character representing the items not in the bitset and one for
19
+ the character representing the items in the bitset.
20
+
21
+ The string is both stored in s and returned. If s is NULL, then a
22
+ new string is allocated.
23
+ """
24
+ cdef mp_bitcnt_t i
25
+ if s == NULL:
26
+ s = <char *>sig_malloc(bits.size + 1)
27
+ for i in range(bits.size):
28
+ s[i] = one if bitset_in(bits, i) else zero
29
+ s[bits.size] = 0
30
+ return s
31
+
32
+ cdef int bitset_from_char(bitset_t bits, char* s, char zero=c'0', char one=c'1') except -1:
33
+ """
34
+ Initialize a bitset with a set derived from the C string s, where one
35
+ represents the character indicating set membership.
36
+ """
37
+ bitset_init(bits, strlen(s))
38
+ cdef mp_bitcnt_t i
39
+ for i in range(bits.size):
40
+ bitset_set_to(bits, i, s[i] == one)
41
+ return 0
42
+
43
+ cdef int bitset_from_str(bitset_t bits, object s, char zero=c'0', char one=c'1') except -1:
44
+ """
45
+ Initialize a bitset with a set derived from the Python str s, where one
46
+ represents the character indicating set membership.
47
+ """
48
+ cdef bytes b = str_to_bytes(s)
49
+ return bitset_from_char(bits, b, zero, one)
50
+
51
+ cdef bitset_string(fused_bitset_t bits):
52
+ """
53
+ Return a python string representing the bitset.
54
+ """
55
+ return bytes_to_str(bitset_bytes(bits))
56
+
57
+ cdef bitset_bytes(fused_bitset_t bits):
58
+ """
59
+ Return a python bytes string representing the bitset.
60
+
61
+ On Python 2 this is equivalent to bitset_string.
62
+ """
63
+
64
+ cdef char* s = bitset_chars(NULL, bits)
65
+ cdef object py_s
66
+ py_s = s
67
+ sig_free(s)
68
+ return py_s
69
+
70
+ cdef list bitset_list(fused_bitset_t bits):
71
+ """
72
+ Return a list of elements in the bitset.
73
+ """
74
+ cdef list elts = []
75
+ cdef long elt = bitset_first(bits)
76
+ while elt >= 0:
77
+ elts.append(elt)
78
+ elt = bitset_next(bits, elt + 1)
79
+ return elts
80
+
81
+ cdef bitset_pickle(bitset_t bs):
82
+ """
83
+ Convert ``bs`` to a reasonably compact Python structure.
84
+
85
+ Useful for pickling objects using bitsets as internal data structure.
86
+ To ensure this works on 32-bit and 64-bit machines, the size of a long
87
+ is stored too.
88
+ """
89
+ version = 0
90
+ data = []
91
+ for i in range(bs.limbs):
92
+ data.append(bs.bits[i])
93
+ return (version, bs.size, bs.limbs, sizeof(unsigned long), tuple(data))
94
+
95
+ cdef bitset_unpickle(bitset_t bs, tuple input):
96
+ """
97
+ Convert the data into a bitset.
98
+
99
+ Companion of ``bitset_pickle()``. Assumption: ``bs`` has been initialized.
100
+ """
101
+ version, size, limbs, longsize, data = input
102
+ if version != 0:
103
+ raise TypeError("bitset was saved with newer version of Sage. Please upgrade.")
104
+ if bs.size != size:
105
+ bitset_realloc(bs, size)
106
+ if sizeof(unsigned long) == longsize and bs.limbs == limbs:
107
+ for i in range(bs.limbs):
108
+ bs.bits[i] = data[i]
109
+ else:
110
+ storage = 8 * longsize # number of elements encoded in one limb
111
+ adder = 0
112
+ bitset_clear(bs)
113
+ for i in range(limbs):
114
+ for j in range(storage):
115
+ if (data[i] >> j) & 1:
116
+ bitset_add(bs, <mp_bitcnt_t>(j + adder))
117
+ adder += storage
@@ -0,0 +1,487 @@
1
+ /* sage_setup: distribution = sagemath-categories
2
+ */
3
+ #ifndef SAGE_BITSET_INTRINSICS
4
+ #define SAGE_BITSET_INTRINSICS
5
+
6
+ #include "gmp.h"
7
+ #include <stdio.h>
8
+
9
+ #if __POPCNT__ || __BMI__
10
+ #include <immintrin.h>
11
+ #endif
12
+
13
+ #if __AVX2__
14
+ #include <immintrin.h>
15
+ #elif __AVX__
16
+ #include <immintrin.h>
17
+ #include <emmintrin.h>
18
+ #elif __SSE4_1__
19
+ #include <emmintrin.h>
20
+ #include <smmintrin.h>
21
+ #endif
22
+
23
+
24
+ // This file contains functions of ``bitset_base.pxd``
25
+ // that can be optimized using intrinsics.
26
+
27
+ const mp_bitcnt_t LIMB_SIZE = sizeof(mp_limb_t);
28
+
29
+ #if __AVX__
30
+ const mp_bitcnt_t ALIGNMENT = 32;
31
+ #elif __SSE4_1__
32
+ const mp_bitcnt_t ALIGNMENT = 16;
33
+ #else
34
+ const mp_bitcnt_t ALIGNMENT = sizeof(mp_limb_t);
35
+ #endif
36
+
37
+ // We assume that ``GMP_LIMB_BITS`` is a divisor of 64
38
+ #define LIMBS_PER_64 64/GMP_LIMB_BITS
39
+
40
+ static inline mp_bitcnt_t _set_non_zero(mp_limb_t* bits, mp_bitcnt_t* non_zero_chunks, mp_bitcnt_t limbs){
41
+ /*
42
+ Set the non zero positions of ``bits``.
43
+
44
+ Return the number of non zero chunks.
45
+
46
+ .. WARNING::
47
+
48
+ It is assumed that ``bits`` is overaligned
49
+ according to ``ALIGNMENT`` and its length is a multiple
50
+ of ``ALIGNMENT``.
51
+ */
52
+ mp_bitcnt_t i;
53
+ mp_bitcnt_t pos = 0;
54
+ #if __AVX__
55
+ for(i = 0; i < limbs; i +=4*LIMBS_PER_64){
56
+ __m256i A = _mm256_load_si256((const __m256i*)&bits[i]);
57
+ if (!_mm256_testz_si256(A, A)){
58
+ non_zero_chunks[pos] = i;
59
+ pos++;
60
+ }
61
+ }
62
+ #elif __SSE4_1__
63
+ for(i = 0; i < limbs; i +=2*LIMBS_PER_64){
64
+ __m128i A = _mm_load_si128((const __m128i*)&bits[i]);
65
+ if (!_mm_testz_si128(A, A)){
66
+ non_zero_chunks[pos] = i;
67
+ pos++;
68
+ }
69
+ }
70
+ #else
71
+ for(i = 0; i < limbs; i++){
72
+ if (bits[i]){
73
+ non_zero_chunks[pos] = i;
74
+ pos++;
75
+ }
76
+ }
77
+ #endif
78
+ return pos;
79
+ }
80
+
81
+ /*
82
+ #############################################################################
83
+ # Bitset Comparison
84
+ #############################################################################
85
+ */
86
+
87
+ enum cmpop_t {EQUAL, SUBSET, DISJOINT};
88
+
89
+ static inline int _bitset_isempty(mp_limb_t* bits, mp_bitcnt_t limbs){
90
+ /*
91
+ Test whether ``bits`` is empty. Return ``True`` (i.e., ``1``) if the set is
92
+ empty, ``False`` (i.e., ``0``) otherwise.
93
+ */
94
+ // First check lowest limb
95
+ if (bits[0])
96
+ return 0;
97
+ if (limbs == 1)
98
+ return 1;
99
+ // Compare bits to itself shifted by 1 limb. If these compare equal,
100
+ // all limbs must be 0.
101
+ return mpn_cmp(bits+1, bits, limbs-1) == 0;
102
+ }
103
+
104
+ #if __AVX__
105
+ static inline int cmp_on_chunk(__m256i A, __m256i B, enum cmpop_t cmpop ){
106
+ /*
107
+ Test ``A cmpop B``,
108
+
109
+ where ``cmpop`` is one of ``EQUAL``, ``SUBSET``, ``DISJOINT``.
110
+ */
111
+ if (cmpop == EQUAL)
112
+ return _mm256_testc_si256(A, B) && _mm256_testc_si256(B, A);
113
+ if (cmpop == SUBSET)
114
+ return _mm256_testc_si256(B, A); // Need to be opposite order!
115
+ // ``cmpop == DISJOINT``
116
+ return _mm256_testz_si256(A, B);
117
+ }
118
+ #elif __SSE4_1__
119
+ static inline int cmp_on_chunk(__m128i A, __m128i B, enum cmpop_t cmpop){
120
+ /*
121
+ Test ``A cmpop B``,
122
+
123
+ where ``cmpop`` is one of ``EQUAL``, ``SUBSET``, ``DISJOINT``.
124
+ */
125
+ if (cmpop == EQUAL)
126
+ return _mm_testc_si128(A, B) && _mm_testc_si128(B, A);
127
+ if (cmpop == SUBSET)
128
+ return _mm_testc_si128(B, A); // Need to be opposite order!
129
+ // ``cmpop == DISJOINT``
130
+ return _mm_testz_si128(A, B);
131
+ }
132
+ #endif
133
+
134
+ static inline int cmp_on_limb(mp_limb_t A, mp_limb_t B, enum cmpop_t cmpop){
135
+ /*
136
+ Test ``A cmpop B``,
137
+
138
+ where ``cmpop`` is one of ``EQUAL``, ``SUBSET``, ``DISJOINT``.
139
+ */
140
+ if (cmpop == EQUAL)
141
+ return A == B;
142
+ if (cmpop == SUBSET)
143
+ return !(A & ~B);
144
+ // ``cmpop == DISJOINT``
145
+ return !(A & B);
146
+ }
147
+
148
+ static inline int cmp_with_mpn(mp_limb_t* a, mp_limb_t* b, mp_bitcnt_t limbs, enum cmpop_t cmpop){
149
+ /*
150
+ Test ``a cmpop b``,
151
+
152
+ where ``cmpop`` is one of ``EQUAL``, ``SUBSET``, ``DISJOINT``.
153
+
154
+ Use gmp if possible.
155
+ */
156
+ if (cmpop == EQUAL)
157
+ return mpn_cmp(a, b, limbs) == 0;
158
+ mp_bitcnt_t i;
159
+ for(i = 0; i < limbs; i++){
160
+ if (!cmp_on_limb(a[i], b[i], cmpop))
161
+ return 0;
162
+ }
163
+ return 1;
164
+ }
165
+
166
+ static inline int _bitset_cmp(mp_limb_t* a, mp_limb_t* b, mp_bitcnt_t limbs, enum cmpop_t cmpop){
167
+ /*
168
+ Test ``a cmpop b``,
169
+
170
+ where ``cmpop`` is one of ``EQUAL``, ``SUBSET``, ``DISJOINT``.
171
+ */
172
+ #if __AVX__
173
+ mp_bitcnt_t i;
174
+ for(i = 0; i + (4*LIMBS_PER_64 - 1) < limbs; i += 4*LIMBS_PER_64){
175
+ __m256i A = _mm256_loadu_si256((const __m256i*)&a[i]);
176
+ __m256i B = _mm256_loadu_si256((const __m256i*)&b[i]);
177
+ if (!cmp_on_chunk(A, B, cmpop))
178
+ return 0;
179
+ }
180
+ for(; i < limbs; i++){
181
+ if (!cmp_on_limb(a[i], b[i], cmpop))
182
+ return 0;
183
+ }
184
+ return 1;
185
+ #elif __SSE4_1__
186
+ mp_bitcnt_t i;
187
+ for(i = 0; i + (2*LIMBS_PER_64 - 1) < limbs; i += 2*LIMBS_PER_64){
188
+ __m128i A = _mm_loadu_si128((const __m128i*)&a[i]);
189
+ __m128i B = _mm_loadu_si128((const __m128i*)&b[i]);
190
+ if (!cmp_on_chunk(A, B, cmpop))
191
+ return 0;
192
+ }
193
+ for(; i < limbs; i++){
194
+ if (!cmp_on_limb(a[i], b[i], cmpop))
195
+ return 0;
196
+ }
197
+ return 1;
198
+ #else
199
+ return cmp_with_mpn(a, b, limbs, cmpop);
200
+ #endif
201
+ }
202
+
203
+ static inline int _sparse_bitset_cmp(mp_limb_t* a, mp_bitcnt_t* a_non_zero_chunks, mp_bitcnt_t a_n_non_zero_chunks, mp_limb_t* b, enum cmpop_t cmpop){
204
+ /*
205
+ Test ``a cmpop b``,
206
+
207
+ where ``cmpop`` is one of ``SUBSET``, ``DISJOINT``.
208
+
209
+ Only the non zero chunks of ``a`` are checked.
210
+
211
+ .. WARNING::
212
+
213
+ It is assumed that ``a`` and ``b`` are overaligned
214
+ according to ``ALIGNMENT`` and their length are a multiple
215
+ of ``ALIGNMENT``.
216
+ */
217
+
218
+ // For checking equality, it does not suffice to check only
219
+ // the nonzero chunks of ``a``.
220
+ assert(cmpop != EQUAL);
221
+ mp_bitcnt_t i,j;
222
+ for(j = 0; j < a_n_non_zero_chunks; j++){
223
+ i = a_non_zero_chunks[j];
224
+ #if __AVX__
225
+ __m256i A = _mm256_load_si256((const __m256i*)&a[i]);
226
+ __m256i B = _mm256_load_si256((const __m256i*)&b[i]);
227
+ if (!cmp_on_chunk(A, B, cmpop))
228
+ return 0;
229
+
230
+ #elif __SSE4_1__
231
+ __m128i A = _mm_load_si128((const __m128i*)&a[i]);
232
+ __m128i B = _mm_load_si128((const __m128i*)&b[i]);
233
+ if (!cmp_on_chunk(A, B, cmpop))
234
+ return 0;
235
+ #else
236
+ if (!cmp_on_limb(a[i], b[i], cmpop))
237
+ return 0;
238
+ #endif
239
+ }
240
+ return 1;
241
+ }
242
+
243
+ /*
244
+ #############################################################################
245
+ # Bitset Searching
246
+ #############################################################################
247
+ */
248
+
249
+ static inline long _bitset_first_in_limb_nonzero(mp_limb_t limb){
250
+ /*
251
+ Given a nonzero limb of a bitset, return the index of the first
252
+ nonzero bit.
253
+ */
254
+ #if (__BMI__) && (GMP_LIMB_BITS == 64) && (INTPTR_MAX == INT64_MAX)
255
+ // If available we use intrinsics trailing zero count.
256
+ // Also we check that ``mp_bitcnt_t`` is in fact 8 bytes long
257
+ // and the architecture is 64-bit.
258
+ return _tzcnt_u64(limb);
259
+ #else
260
+ return mpn_scan1(&limb, 0);
261
+ #endif
262
+ }
263
+
264
+ static inline long _bitset_first_in_limb(mp_limb_t limb){
265
+ /*
266
+ Given a limb of a bitset, return the index of the first nonzero
267
+ bit. If there are no bits set in the limb, return -1.
268
+ */
269
+ if (limb == 0)
270
+ return -1;
271
+ return _bitset_first_in_limb_nonzero(limb);
272
+ }
273
+
274
+ static inline long _bitset_len(mp_limb_t* bits, mp_bitcnt_t limbs){
275
+ /*
276
+ Calculate the number of items in the set (i.e., the number of nonzero bits).
277
+ */
278
+ #if (__POPCNT__) && (GMP_LIMB_BITS == 64) && (INTPTR_MAX == INT64_MAX)
279
+ // If available we use intrinsics popcount.
280
+ // Also we check that ``mp_bitcnt_t`` is in fact 8 bytes long
281
+ // and the architecture is 64-bit.
282
+ mp_bitcnt_t i;
283
+ uint64_t count = 0;
284
+ for (i=0; i<limbs; i++){
285
+ count += _mm_popcnt_u64(bits[i]);
286
+ }
287
+ return count;
288
+ #else
289
+ return mpn_popcount(bits, limbs);
290
+ #endif
291
+ }
292
+
293
+ /*
294
+ #############################################################################
295
+ # Bitset Arithmetic
296
+ #############################################################################
297
+ */
298
+
299
+ enum operation_t {AND, OR, ANDNOT, XOR};
300
+
301
+ #if __AVX2__
302
+ static inline __m256i operation_on_chunk(__m256i A, __m256i B, enum operation_t operation){
303
+ /*
304
+ Return ``A operation B``,
305
+
306
+ where ``operation`` is one of ``AND``, ``OR``,
307
+ ``ANDNOT``, ``XOR``.
308
+ */
309
+ if (operation == AND)
310
+ return _mm256_and_si256(A, B);
311
+ if (operation == OR)
312
+ return _mm256_or_si256(A, B);
313
+ if (operation == ANDNOT)
314
+ return _mm256_andnot_si256(B, A);
315
+ // ``operation == XOR``
316
+ return _mm256_xor_si256(A, B);
317
+ }
318
+ #elif __SSE4_1__
319
+ static inline __m128i operation_on_chunk(__m128i A, __m128i B, enum operation_t operation){
320
+ /*
321
+ Return ``A operation B``,
322
+
323
+ where ``operation`` is one of ``AND``, ``OR``,
324
+ ``ANDNOT``, ``XOR``.
325
+ */
326
+ if (operation == AND)
327
+ return _mm_and_si128(A, B);
328
+ if (operation == OR)
329
+ return _mm_or_si128(A, B);
330
+ if (operation == ANDNOT)
331
+ return _mm_andnot_si128(B, A);
332
+ // ``operation == XOR``
333
+ return _mm_xor_si128(A, B);
334
+ }
335
+ #endif
336
+
337
+ static inline mp_limb_t operation_on_limb(mp_limb_t A, mp_limb_t B, enum operation_t operation){
338
+ /*
339
+ Return ``A operation B``,
340
+
341
+ where ``operation`` is one of ``AND``, ``OR``,
342
+ ``ANDNOT``, ``XOR``.
343
+ */
344
+ if (operation == AND)
345
+ return A & B;
346
+ if (operation == OR)
347
+ return A | B;
348
+ if (operation == ANDNOT)
349
+ return A & ~B;
350
+ // ``operation == XOR``
351
+ return A ^ B;
352
+ }
353
+
354
+ static inline void mpn_operation(mp_limb_t* dst, mp_limb_t* a, mp_limb_t* b, mp_bitcnt_t limbs, enum operation_t operation){
355
+ /*
356
+ Set ``dst`` to ``a operation b``,
357
+
358
+ where ``operation`` is one of ``AND``, ``OR``,
359
+ ``ANDNOT``, ``XOR``.
360
+
361
+ Use gmp.
362
+ */
363
+ if (operation == AND)
364
+ mpn_and_n(dst, a, b, limbs);
365
+ if (operation == OR)
366
+ mpn_ior_n(dst, a, b, limbs);
367
+ if (operation == ANDNOT)
368
+ mpn_andn_n(dst, a, b, limbs);
369
+ if (operation == XOR)
370
+ mpn_xor_n(dst, a, b, limbs);
371
+ }
372
+
373
+ static inline void _bitset_operation(mp_limb_t* dst, mp_limb_t* a, mp_limb_t* b, mp_bitcnt_t limbs, enum operation_t operation){
374
+ /*
375
+ Set ``dst`` to ``a operation b``,
376
+
377
+ where ``operation`` is one of ``AND``, ``OR``,
378
+ ``ANDNOT``, ``XOR``.
379
+ */
380
+ #if __AVX2__
381
+ mp_bitcnt_t i;
382
+ for(i = 0; i + (4*LIMBS_PER_64 - 1) < limbs; i +=4*LIMBS_PER_64){
383
+ __m256i A = _mm256_loadu_si256((const __m256i*)&a[i]);
384
+ __m256i B = _mm256_loadu_si256((const __m256i*)&b[i]);
385
+ __m256i D = operation_on_chunk(A, B, operation);
386
+ _mm256_storeu_si256((__m256i*)&dst[i], D);
387
+ }
388
+ for(; i < limbs; i++){
389
+ dst[i] = operation_on_limb(a[i], b[i], operation);
390
+ }
391
+ #elif __SSE4_1__
392
+ mp_bitcnt_t i;
393
+ for(i = 0; i + (2*LIMBS_PER_64 - 1) < limbs; i +=2*LIMBS_PER_64){
394
+ __m128i A = _mm_loadu_si128((const __m128i*)&a[i]);
395
+ __m128i B = _mm_loadu_si128((const __m128i*)&b[i]);
396
+ __m128i D = operation_on_chunk(A, B, operation);
397
+ _mm_storeu_si128((__m128i*)&dst[i], D);
398
+ }
399
+ for(; i < limbs; i++){
400
+ dst[i] = operation_on_limb(a[i], b[i], operation);
401
+ }
402
+ #else
403
+ mpn_operation(dst, a, b, limbs, operation);
404
+ #endif
405
+ }
406
+
407
+ /*
408
+ #############################################################################
409
+ # Bitset Arithmetic for sparse bitsets.
410
+ #############################################################################
411
+ */
412
+
413
+ static inline mp_bitcnt_t _sparse_bitset_operation(mp_limb_t* dst, mp_bitcnt_t* dst_non_zero_chunks, mp_limb_t* a, mp_limb_t* b, mp_bitcnt_t limbs, enum operation_t operation){
414
+ /*
415
+ Set ``dst`` to ``a operation b``,
416
+
417
+ where ``operation`` is one of ``AND``, ``OR``,
418
+ ``ANDNOT``, ``XOR``.
419
+
420
+ Set dst_non_zero_chunks according to the non zero chunks of dst.
421
+
422
+ Return the number of non zero chunks.
423
+
424
+ .. WARNING::
425
+
426
+ It is assumed that ``a``, ``b``, ``dst`` are overaligned
427
+ according to ``ALIGNMENT`` and their length are a multiple
428
+ of ``ALIGNMENT``.
429
+ */
430
+ mp_bitcnt_t i;
431
+ mp_bitcnt_t pos = 0;
432
+ #if __AVX2__
433
+ for(i = 0; i < limbs; i +=4*LIMBS_PER_64){
434
+ __m256i A = _mm256_load_si256((const __m256i*)&a[i]);
435
+ __m256i B = _mm256_load_si256((const __m256i*)&b[i]);
436
+ __m256i D = operation_on_chunk(A, B, operation);
437
+ _mm256_store_si256((__m256i*)&dst[i], D);
438
+ if (!cmp_on_chunk(D, D, DISJOINT)){
439
+ dst_non_zero_chunks[pos] = i;
440
+ pos++;
441
+ }
442
+ }
443
+ #elif __AVX__
444
+ // In this case we can only perform the
445
+ // operation on 128 bits each.
446
+ // However, chunks are of size 256 bits,
447
+ // because comparison can be performed on this
448
+ // size.
449
+ for(i = 0; i < limbs; i +=4*LIMBS_PER_64){
450
+ __m128i A1 = _mm_load_si128((const __m128i*)&a[i]);
451
+ __m128i B1 = _mm_load_si128((const __m128i*)&b[i]);
452
+ __m128i D1 = operation_on_chunk(A1, B1, operation);
453
+ _mm_store_si128((__m128i*)&dst[i], D1);
454
+ __m128i A2 = _mm_load_si128((const __m128i*)&a[i+2*LIMBS_PER_64]);
455
+ __m128i B2 = _mm_load_si128((const __m128i*)&b[i+2*LIMBS_PER_64]);
456
+ __m128i D2 = operation_on_chunk(A2, B2, operation);
457
+ _mm_store_si128((__m128i*)&dst[i+2*LIMBS_PER_64], D2);
458
+
459
+ if (!_mm_testz_si128(D1, D1) || !_mm_testz_si128(D2, D2)){
460
+ dst_non_zero_chunks[pos] = i;
461
+ pos++;
462
+ }
463
+ }
464
+ #elif __SSE4_1__
465
+ for(i = 0; i < limbs; i +=2*LIMBS_PER_64){
466
+ __m128i A = _mm_load_si128((const __m128i*)&a[i]);
467
+ __m128i B = _mm_load_si128((const __m128i*)&b[i]);
468
+ __m128i D = operation_on_chunk(A, B, operation);
469
+ _mm_store_si128((__m128i*)&dst[i], D);
470
+ if (!cmp_on_chunk(D, D, DISJOINT)){
471
+ dst_non_zero_chunks[pos] = i;
472
+ pos++;
473
+ }
474
+ }
475
+ #else
476
+ for(i = 0; i < limbs; i++){
477
+ dst[i] = operation_on_limb(a[i], b[i], operation);
478
+ if (dst[i]){
479
+ dst_non_zero_chunks[pos] = i;
480
+ pos++;
481
+ }
482
+ }
483
+ #endif
484
+ return pos;
485
+ }
486
+
487
+ #endif
@@ -0,0 +1,12 @@
1
+ # sage_setup: distribution = sagemath-categories
2
+ cpdef int iaxpy(a, dict X, dict Y, bint remove_zeros=*, bint factor_on_left=*) except -1
3
+ cpdef dict axpy(a, dict X, dict Y, bint factor_on_left=*)
4
+ cpdef dict negate(dict D)
5
+ cpdef dict scal(a, dict D, bint factor_on_left=*)
6
+ cpdef dict add(dict D, dict D2)
7
+ cpdef dict sum(dict_iter)
8
+ cpdef dict linear_combination(dict_factor_iter, bint factor_on_left=*)
9
+ cpdef dict sum_of_monomials(monomials, scalar)
10
+ cpdef dict sum_of_terms(index_coeff_pairs)
11
+ cdef dict remove_zeros(dict D)
12
+ cpdef dict convert_remove_zeroes(dict D, R)