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,1087 @@
1
+ # sage_setup: distribution = sagemath-categories
2
+ """
3
+ Gamma and related functions
4
+ """
5
+ from sage.misc.lazy_import import lazy_import
6
+ from sage.rings.infinity import Infinity
7
+ from sage.rings.rational import Rational
8
+ from sage.structure.element import parent as s_parent
9
+ from sage.symbolic.function import GinacFunction, BuiltinFunction
10
+ from sage.symbolic.symbols import register_symbol, symbol_table
11
+
12
+ lazy_import('sage.rings.complex_mpfr', 'ComplexField')
13
+
14
+ lazy_import('sage.functions.error', 'erf')
15
+ lazy_import('sage.functions.exp_integral', 'Ei')
16
+ lazy_import('sage.functions.log', 'exp')
17
+ lazy_import('sage.functions.other', 'sqrt')
18
+
19
+ lazy_import('sage.symbolic.constants', 'pi')
20
+
21
+ lazy_import('sage.libs.mpmath.utils', 'call', as_='_mpmath_utils_call')
22
+ lazy_import('mpmath', 'gammainc', as_='_mpmath_gammainc')
23
+
24
+
25
+ class Function_gamma(GinacFunction):
26
+ def __init__(self):
27
+ r"""
28
+ The Gamma function. This is defined by
29
+
30
+ .. MATH::
31
+
32
+ \Gamma(z) = \int_0^\infty t^{z-1}e^{-t} dt
33
+
34
+ for complex input `z` with real part greater than zero, and by
35
+ analytic continuation on the rest of the complex plane (except
36
+ for negative integers, which are poles).
37
+
38
+ It is computed by various libraries within Sage, depending on
39
+ the input type.
40
+
41
+ EXAMPLES::
42
+
43
+ sage: from sage.functions.gamma import gamma1
44
+ sage: gamma1(CDF(0.5, 14)) # needs sage.libs.pari sage.rings.complex_double
45
+ -4.0537030780372815e-10 - 5.773299834553605e-10*I
46
+ sage: gamma1(CDF(I)) # needs sage.libs.pari sage.rings.complex_double sage.symbolic
47
+ -0.15494982830181067 - 0.49801566811835607*I
48
+
49
+ Recall that `\Gamma(n)` is `n-1` factorial::
50
+
51
+ sage: gamma1(11) == factorial(10)
52
+ True
53
+ sage: gamma1(6)
54
+ 120
55
+ sage: gamma1(1/2) # needs sage.symbolic
56
+ sqrt(pi)
57
+ sage: gamma1(-1)
58
+ Infinity
59
+ sage: gamma1(I) # needs sage.symbolic
60
+ gamma(I)
61
+ sage: gamma1(x/2)(x=5) # needs sage.symbolic
62
+ 3/4*sqrt(pi)
63
+
64
+ sage: gamma1(float(6)) # For ARM: rel tol 3e-16
65
+ 120.0
66
+ sage: gamma(6.) # needs sage.symbolic
67
+ 120.000000000000
68
+ sage: gamma1(x) # needs sage.symbolic
69
+ gamma(x)
70
+
71
+ ::
72
+
73
+ sage: gamma1(pi) # needs sage.symbolic
74
+ gamma(pi)
75
+ sage: gamma1(i) # needs sage.symbolic
76
+ gamma(I)
77
+ sage: gamma1(i).n() # needs sage.symbolic
78
+ -0.154949828301811 - 0.498015668118356*I
79
+ sage: gamma1(int(5))
80
+ 24
81
+
82
+ ::
83
+
84
+ sage: conjugate(gamma(x)) # needs sage.symbolic
85
+ gamma(conjugate(x))
86
+
87
+ ::
88
+
89
+ sage: plot(gamma1(x), (x,1,5)) # needs sage.plot sage.symbolic
90
+ Graphics object consisting of 1 graphics primitive
91
+
92
+ We are also able to compute the Laurent expansion of the
93
+ Gamma function (as well as of functions containing
94
+ the Gamma function)::
95
+
96
+ sage: gamma(x).series(x==0, 2) # needs sage.symbolic
97
+ 1*x^(-1) + (-euler_gamma)
98
+ + (1/2*euler_gamma^2 + 1/12*pi^2)*x + Order(x^2)
99
+ sage: (gamma(x)^2).series(x==0, 1) # needs sage.symbolic
100
+ 1*x^(-2) + (-2*euler_gamma)*x^(-1)
101
+ + (2*euler_gamma^2 + 1/6*pi^2) + Order(x)
102
+
103
+ To prevent automatic evaluation, use the ``hold`` argument::
104
+
105
+ sage: gamma1(1/2, hold=True) # needs sage.symbolic
106
+ gamma(1/2)
107
+
108
+ To then evaluate again, we currently must use Maxima via
109
+ :meth:`sage.symbolic.expression.Expression.simplify`::
110
+
111
+ sage: gamma1(1/2, hold=True).simplify() # needs sage.symbolic
112
+ sqrt(pi)
113
+
114
+ TESTS:
115
+
116
+ sage: gamma(x)._sympy_() # needs sympy sage.symbolic
117
+ gamma(x)
118
+
119
+ We verify that we can convert this function to Maxima and
120
+ convert back to Sage::
121
+
122
+ sage: z = var('z') # needs sage.symbolic
123
+ sage: maxima(gamma1(z)).sage() # needs sage.symbolic
124
+ gamma(z)
125
+ sage: latex(gamma1(z)) # needs sage.symbolic
126
+ \Gamma\left(z\right)
127
+
128
+ Test that :issue:`5556` is fixed::
129
+
130
+ sage: gamma1(3/4) # needs sage.symbolic
131
+ gamma(3/4)
132
+
133
+ sage: gamma1(3/4).n(100) # needs sage.symbolic
134
+ 1.2254167024651776451290983034
135
+
136
+ Check that negative integer input works::
137
+
138
+ sage: (-1).gamma()
139
+ Infinity
140
+ sage: (-1.).gamma() # needs sage.rings.real_mpfr
141
+ NaN
142
+ sage: CC(-1).gamma() # needs sage.libs.pari sage.rings.real_mpfr
143
+ Infinity
144
+ sage: RDF(-1).gamma() # needs sage.rings.real_mpfr
145
+ NaN
146
+ sage: CDF(-1).gamma() # needs sage.libs.pari sage.rings.complex_double
147
+ Infinity
148
+
149
+ Check if :issue:`8297` is fixed::
150
+
151
+ sage: latex(gamma(1/4)) # needs sage.symbolic
152
+ \Gamma\left(\frac{1}{4}\right)
153
+
154
+ Test pickling::
155
+
156
+ sage: loads(dumps(gamma(x))) # needs sage.symbolic
157
+ gamma(x)
158
+
159
+ Check that the implementations roughly agrees (note there might be
160
+ difference of several ulp on more complicated entries)::
161
+
162
+ sage: import mpmath # needs mpmath
163
+ sage: float(gamma(10.)) == gamma(10.r) == float(gamma(mpmath.mpf(10))) # needs mpmath
164
+ True
165
+ sage: float(gamma(8.5)) == gamma(8.5r) == float(gamma(mpmath.mpf(8.5))) # needs mpmath
166
+ True
167
+
168
+ Check that ``QQbar`` half integers work with the ``pi`` formula::
169
+
170
+ sage: gamma(QQbar(1/2)) # needs sage.rings.number_field sage.symbolic
171
+ sqrt(pi)
172
+ sage: gamma(QQbar(-9/2)) # needs sage.rings.number_field sage.symbolic
173
+ -32/945*sqrt(pi)
174
+
175
+ .. SEEALSO::
176
+
177
+ :meth:`gamma`
178
+ """
179
+ GinacFunction.__init__(self, 'gamma', latex_name=r"\Gamma",
180
+ ginac_name='gamma',
181
+ conversions={'mathematica':'Gamma',
182
+ 'maple':'GAMMA',
183
+ 'sympy':'gamma',
184
+ 'fricas':'Gamma',
185
+ 'giac':'Gamma'})
186
+
187
+
188
+ gamma1 = Function_gamma()
189
+
190
+
191
+ class Function_log_gamma(GinacFunction):
192
+ def __init__(self):
193
+ r"""
194
+ The principal branch of the log gamma function. Note that for
195
+ `x < 0`, ``log(gamma(x))`` is not, in general, equal to
196
+ ``log_gamma(x)``.
197
+
198
+ It is computed by the ``log_gamma`` function for the number type,
199
+ or by ``lgamma`` in Ginac, failing that.
200
+
201
+ Gamma is defined for complex input `z` with real part greater
202
+ than zero, and by analytic continuation on the rest of the
203
+ complex plane (except for negative integers, which are poles).
204
+
205
+ EXAMPLES:
206
+
207
+ Numerical evaluation happens when appropriate, to the
208
+ appropriate accuracy (see :issue:`10072`)::
209
+
210
+ sage: # needs sage.symbolic
211
+ sage: log_gamma(6)
212
+ log(120)
213
+ sage: log_gamma(6.)
214
+ 4.78749174278205
215
+ sage: log_gamma(6).n()
216
+ 4.78749174278205
217
+ sage: log_gamma(2.4 + I)
218
+ -0.0308566579348816 + 0.693427705955790*I
219
+ sage: log_gamma(-3.1)
220
+ 0.400311696703985 - 12.5663706143592*I
221
+ sage: log_gamma(-1.1) == log(gamma(-1.1))
222
+ False
223
+
224
+ sage: log_gamma(RealField(100)(6)) # needs sage.rings.real_mpfr
225
+ 4.7874917427820459942477009345
226
+
227
+ Symbolic input works (see :issue:`10075`)::
228
+
229
+ sage: log_gamma(3*x) # needs sage.symbolic
230
+ log_gamma(3*x)
231
+ sage: log_gamma(3 + I) # needs sage.symbolic
232
+ log_gamma(I + 3)
233
+ sage: log_gamma(3 + I + x) # needs sage.symbolic
234
+ log_gamma(x + I + 3)
235
+
236
+ Check that :issue:`12521` is fixed::
237
+
238
+ sage: # needs sage.symbolic
239
+ sage: log_gamma(-2.1)
240
+ 1.53171380819509 - 9.42477796076938*I
241
+ sage: log_gamma(CC(-2.1))
242
+ 1.53171380819509 - 9.42477796076938*I
243
+ sage: log_gamma(-21/10).n()
244
+ 1.53171380819509 - 9.42477796076938*I
245
+ sage: exp(log_gamma(-1.3) + log_gamma(-0.4) -
246
+ ....: log_gamma(-1.3 - 0.4)).real_part() # beta(-1.3, -0.4)
247
+ -4.92909641669610
248
+
249
+ In order to prevent evaluation, use the ``hold`` argument;
250
+ to evaluate a held expression, use the ``n()`` numerical
251
+ evaluation method::
252
+
253
+ sage: log_gamma(SR(5), hold=True) # needs sage.symbolic
254
+ log_gamma(5)
255
+ sage: log_gamma(SR(5), hold=True).n() # needs sage.symbolic
256
+ 3.17805383034795
257
+
258
+ TESTS::
259
+
260
+ sage: log_gamma(pari(6)) # needs sage.libs.pari
261
+ 4.78749174278205
262
+
263
+ sage: # needs sage.symbolic
264
+ sage: log_gamma(-2.1 + I)
265
+ -1.90373724496982 - 7.18482377077183*I
266
+ sage: log_gamma(x)._sympy_() # needs sympy
267
+ loggamma(x)
268
+ sage: log_gamma(CC(6)) # needs sage.rings.real_mpfr
269
+ 4.78749174278205
270
+ sage: log_gamma(CC(-2.5)) # needs sage.rings.real_mpfr
271
+ -0.0562437164976741 - 9.42477796076938*I
272
+ sage: log_gamma(RDF(-2.5))
273
+ -0.056243716497674054 - 9.42477796076938*I
274
+ sage: log_gamma(CDF(-2.5)) # needs sage.rings.complex_double
275
+ -0.056243716497674054 - 9.42477796076938*I
276
+ sage: log_gamma(float(-2.5))
277
+ (-0.056243716497674054-9.42477796076938j)
278
+ sage: log_gamma(complex(-2.5)) # needs sage.rings.complex_double
279
+ (-0.056243716497674054-9.42477796076938j)
280
+
281
+ ``conjugate(log_gamma(x)) == log_gamma(conjugate(x))`` unless on the
282
+ branch cut, which runs along the negative real axis.::
283
+
284
+ sage: # needs sage.symbolic
285
+ sage: conjugate(log_gamma(x))
286
+ conjugate(log_gamma(x))
287
+ sage: var('y', domain='positive')
288
+ y
289
+ sage: conjugate(log_gamma(y))
290
+ log_gamma(y)
291
+ sage: conjugate(log_gamma(y + I))
292
+ conjugate(log_gamma(y + I))
293
+ sage: log_gamma(-2)
294
+ +Infinity
295
+ sage: conjugate(log_gamma(-2))
296
+ +Infinity
297
+ """
298
+ GinacFunction.__init__(self, "log_gamma", latex_name=r'\log\Gamma',
299
+ conversions=dict(mathematica='LogGamma',
300
+ maxima='log_gamma',
301
+ sympy='loggamma',
302
+ fricas='logGamma'))
303
+
304
+
305
+ log_gamma = Function_log_gamma()
306
+
307
+
308
+ class Function_gamma_inc(BuiltinFunction):
309
+ def __init__(self):
310
+ r"""
311
+ The upper incomplete gamma function.
312
+
313
+ It is defined by the integral
314
+
315
+ .. MATH::
316
+
317
+ \Gamma(a,z)=\int_z^\infty t^{a-1}e^{-t}\,\mathrm{d}t
318
+
319
+ EXAMPLES::
320
+
321
+ sage: gamma_inc(CDF(0,1), 3) # needs sage.libs.pari sage.rings.complex_double
322
+ 0.0032085749933691158 + 0.012406185811871568*I
323
+ sage: gamma_inc(RDF(1), 3) # needs sage.libs.pari sage.rings.complex_double
324
+ 0.049787068367863944
325
+
326
+ sage: # needs sage.symbolic
327
+ sage: gamma_inc(3, 2)
328
+ gamma(3, 2)
329
+ sage: gamma_inc(x, 0)
330
+ gamma(x)
331
+ sage: latex(gamma_inc(3, 2))
332
+ \Gamma\left(3, 2\right)
333
+ sage: loads(dumps((gamma_inc(3, 2))))
334
+ gamma(3, 2)
335
+
336
+ sage: i = ComplexField(30).0; gamma_inc(2, 1 + i) # needs sage.libs.pari sage.rings.real_mpfr
337
+ 0.70709210 - 0.42035364*I
338
+ sage: gamma_inc(2., 5) # needs sage.libs.pari sage.rings.complex_double
339
+ 0.0404276819945128
340
+
341
+ sage: x, y = var('x,y') # needs sage.symbolic
342
+ sage: gamma_inc(x,y).diff(x) # needs sage.symbolic
343
+ diff(gamma(x, y), x)
344
+ sage: (gamma_inc(x, x + 1).diff(x)).simplify() # needs sage.symbolic
345
+ -(x + 1)^(x - 1)*e^(-x - 1) + D[0](gamma)(x, x + 1)
346
+
347
+ TESTS:
348
+
349
+ Check that :issue:`21407` is fixed::
350
+
351
+ sage: gamma(-1, 5)._sympy_() # needs sympy sage.symbolic
352
+ expint(2, 5)/5
353
+ sage: gamma(-3/2, 5)._sympy_() # needs sympy sage.symbolic
354
+ -6*sqrt(5)*exp(-5)/25 + 4*sqrt(pi)*erfc(sqrt(5))/3
355
+
356
+ Check that :issue:`25597` is fixed::
357
+
358
+ sage: gamma(-1, 5)._fricas_() # optional - fricas, needs sage.symbolic
359
+ Gamma(- 1,5)
360
+
361
+ sage: var('t') # needs sage.symbolic
362
+ t
363
+ sage: integrate(-exp(-x)*x^(t-1), x, algorithm='fricas') # optional - fricas, needs sage.symbolic
364
+ gamma(t, x)
365
+
366
+ .. SEEALSO::
367
+
368
+ :meth:`gamma`
369
+ """
370
+ BuiltinFunction.__init__(self, "gamma", nargs=2, latex_name=r"\Gamma",
371
+ conversions={'maxima':'gamma_incomplete', 'mathematica':'Gamma',
372
+ 'maple':'GAMMA', 'sympy':'uppergamma', 'fricas':'Gamma',
373
+ 'giac':'ugamma'})
374
+
375
+ def _method_arguments(self, x, y):
376
+ r"""
377
+ TESTS::
378
+
379
+ sage: # needs sage.libs.flint
380
+ sage: b = RBF(1, 1e-10)
381
+ sage: gamma(b) # abs tol 1e-9
382
+ [1.0000000000 +/- 5.78e-11]
383
+ sage: gamma(CBF(b)) # abs tol 1e-9
384
+ [1.0000000000 +/- 5.78e-11]
385
+ sage: gamma(CBF(b), 4) # abs tol 2e-9
386
+ [0.018315639 +/- 9.00e-10]
387
+ sage: gamma(CBF(1), b)
388
+ [0.3678794412 +/- 6.54e-11]
389
+ """
390
+ return [x, y]
391
+
392
+ def _eval_(self, x, y):
393
+ """
394
+ EXAMPLES::
395
+
396
+ sage: gamma_inc(2., 0) # needs sage.libs.pari sage.rings.complex_double
397
+ 1.00000000000000
398
+ sage: gamma_inc(2, 0) # needs sage.libs.pari sage.rings.real_mpfr
399
+ 1
400
+
401
+ sage: # needs sage.symbolic
402
+ sage: gamma_inc(1/2, 2)
403
+ -sqrt(pi)*(erf(sqrt(2)) - 1)
404
+ sage: gamma_inc(1/2, 1)
405
+ -sqrt(pi)*(erf(1) - 1)
406
+ sage: gamma_inc(1/2, 0)
407
+ sqrt(pi)
408
+ sage: gamma_inc(x, 0)
409
+ gamma(x)
410
+ sage: gamma_inc(1, 2)
411
+ e^(-2)
412
+ sage: gamma_inc(0, 2)
413
+ -Ei(-2)
414
+ """
415
+ if y == 0:
416
+ return gamma(x)
417
+ if x == 1:
418
+ return exp(-y)
419
+ if x == 0:
420
+ return -Ei(-y)
421
+ if x == Rational((1, 2)): # only for x>0
422
+ return sqrt(pi) * (1 - erf(sqrt(y)))
423
+ return None
424
+
425
+ def _evalf_(self, x, y, parent=None, algorithm='pari'):
426
+ """
427
+ EXAMPLES::
428
+
429
+ sage: gamma_inc(0, 2) # needs sage.symbolic
430
+ -Ei(-2)
431
+ sage: gamma_inc(0, 2.) # needs sage.libs.pari sage.rings.real_mpfr
432
+ 0.0489005107080611
433
+ sage: gamma_inc(0, 2).n(algorithm='pari') # needs sage.libs.pari sage.symbolic
434
+ 0.0489005107080611
435
+ sage: gamma_inc(0, 2).n(200) # needs sage.symbolic
436
+ 0.048900510708061119567239835228...
437
+ sage: gamma_inc(3, 2).n() # needs sage.symbolic
438
+ 1.35335283236613
439
+
440
+ TESTS:
441
+
442
+ Check that :issue:`7099` is fixed::
443
+
444
+ sage: R = RealField(1024) # needs sage.rings.real_mpfr
445
+ sage: gamma(R(9), R(10^-3)) # rel tol 1e-308 # needs sage.libs.pari sage.rings.real_mpfr
446
+ 40319.99999999999999999999999999988898884344822911869926361916294165058203634104838326009191542490601781777105678829520585311300510347676330951251563007679436243294653538925717144381702105700908686088851362675381239820118402497959018315224423868693918493033078310647199219674433536605771315869983788442389633
447
+ sage: numerical_approx(gamma(9, 10^(-3)) - gamma(9), digits=40) # abs tol 1e-36 # needs sage.symbolic
448
+ -1.110111598370794007949063502542063148294e-28
449
+
450
+ Check that :issue:`17328` is fixed::
451
+
452
+ sage: gamma_inc(float(-1), float(-1)) # needs sage.libs.pari sage.rings.real_mpfr
453
+ (-0.8231640121031085+3.141592653589793j)
454
+ sage: gamma_inc(RR(-1), RR(-1)) # needs sage.libs.pari sage.rings.complex_double sage.rings.real_mpfr
455
+ -0.823164012103109 + 3.14159265358979*I
456
+ sage: gamma_inc(-1, float(-log(3))) - gamma_inc(-1, float(-log(2))) # abs tol 1e-15 # needs sage.symbolic
457
+ (1.2730972164471142+0j)
458
+
459
+ Check that :issue:`17130` is fixed::
460
+
461
+ sage: r = gamma_inc(float(0), float(1)); r # needs sage.libs.pari sage.rings.real_mpfr
462
+ 0.21938393439552029
463
+ sage: type(r) # needs sage.libs.pari sage.rings.real_mpfr
464
+ <... 'float'>
465
+ """
466
+ R = parent or s_parent(x)
467
+ # C is the complex version of R
468
+ # prec is the precision of R
469
+ if R is float:
470
+ prec = 53
471
+ C = complex
472
+ else:
473
+ try:
474
+ prec = R.precision()
475
+ except AttributeError:
476
+ prec = 53
477
+ try:
478
+ C = R.complex_field()
479
+ except AttributeError:
480
+ C = R
481
+
482
+ if algorithm == 'pari':
483
+ v = ComplexField(prec)(x).gamma_inc(y)
484
+ else:
485
+ v = ComplexField(prec)(_mpmath_utils_call(_mpmath_gammainc, x, y, parent=R))
486
+ if v.is_real():
487
+ return R(v)
488
+ else:
489
+ return C(v)
490
+
491
+
492
+ # shorter alias
493
+ gamma_inc = Function_gamma_inc()
494
+
495
+
496
+ class Function_gamma_inc_lower(BuiltinFunction):
497
+ def __init__(self):
498
+ r"""
499
+ The lower incomplete gamma function.
500
+
501
+ It is defined by the integral
502
+
503
+ .. MATH::
504
+
505
+ \Gamma(a,z)=\int_0^z t^{a-1}e^{-t}\,\mathrm{d}t
506
+
507
+ EXAMPLES::
508
+
509
+ sage: gamma_inc_lower(CDF(0,1), 3) # needs sage.rings.complex_double
510
+ -0.1581584032951798 - 0.5104218539302277*I
511
+ sage: gamma_inc_lower(RDF(1), 3) # needs sage.rings.complex_double
512
+ 0.950212931632136
513
+
514
+ sage: # needs sage.symbolic
515
+ sage: gamma_inc_lower(3, 2, hold=True)
516
+ gamma_inc_lower(3, 2)
517
+ sage: gamma_inc_lower(3, 2)
518
+ -10*e^(-2) + 2
519
+ sage: gamma_inc_lower(x, 0)
520
+ 0
521
+ sage: latex(gamma_inc_lower(x, x))
522
+ \gamma\left(x, x\right)
523
+ sage: loads(dumps((gamma_inc_lower(x, x))))
524
+ gamma_inc_lower(x, x)
525
+
526
+ sage: i = ComplexField(30).0; gamma_inc_lower(2, 1 + i) # needs sage.rings.real_mpfr
527
+ 0.29290790 + 0.42035364*I
528
+ sage: gamma_inc_lower(2., 5) # needs sage.rings.complex_double
529
+ 0.959572318005487
530
+
531
+ Interfaces to other software::
532
+
533
+ sage: gamma_inc_lower(x, x)._sympy_() # needs sympy sage.symbolic
534
+ lowergamma(x, x)
535
+ sage: maxima(gamma_inc_lower(x, x)) # needs sage.symbolic
536
+ gamma_incomplete_lower(_SAGE_VAR_x,_SAGE_VAR_x)
537
+
538
+ .. SEEALSO::
539
+
540
+ :class:`Function_gamma_inc`
541
+ """
542
+ BuiltinFunction.__init__(self, "gamma_inc_lower", nargs=2, latex_name=r"\gamma",
543
+ conversions={'maxima':'gamma_incomplete_lower',
544
+ 'maple':'GAMMA', 'sympy':'lowergamma', 'giac':'igamma'})
545
+
546
+ def _eval_(self, x, y):
547
+ """
548
+ EXAMPLES::
549
+
550
+ sage: gamma_inc_lower(2., 0) # needs sage.rings.complex_double
551
+ 0.000000000000000
552
+
553
+ sage: # needs sage.symbolic
554
+ sage: gamma_inc_lower(2, 0)
555
+ 0
556
+ sage: gamma_inc_lower(1/2, 2)
557
+ sqrt(pi)*erf(sqrt(2))
558
+ sage: gamma_inc_lower(1/2, 1)
559
+ sqrt(pi)*erf(1)
560
+ sage: gamma_inc_lower(1/2, 0)
561
+ 0
562
+ sage: gamma_inc_lower(x, 0)
563
+ 0
564
+ sage: gamma_inc_lower(1, 2)
565
+ -e^(-2) + 1
566
+ sage: gamma_inc_lower(0, 2)
567
+ +Infinity
568
+ sage: gamma_inc_lower(2, 377/79)
569
+ -456/79*e^(-377/79) + 1
570
+ sage: gamma_inc_lower(3, x)
571
+ -(x^2 + 2*x + 2)*e^(-x) + 2
572
+ sage: gamma_inc_lower(9/2, 37/7)
573
+ -1/38416*sqrt(pi)*(1672946*sqrt(259)*e^(-37/7)/sqrt(pi) - 252105*erf(1/7*sqrt(259)))
574
+ """
575
+ if y == 0:
576
+ return 0
577
+ if x == 0:
578
+ return Infinity
579
+ elif x == 1:
580
+ return 1 - exp(-y)
581
+ elif (2 * x).is_integer():
582
+ return self(x, y, hold=True)._sympy_()
583
+ else:
584
+ return None
585
+
586
+ def _evalf_(self, x, y, parent=None, algorithm='mpmath'):
587
+ """
588
+ EXAMPLES::
589
+
590
+ sage: gamma_inc_lower(3, 2.) # needs sage.rings.real_mpfr
591
+ 0.646647167633873
592
+ sage: gamma_inc_lower(3, 2).n(200) # needs sage.symbolic
593
+ 0.646647167633873081060005050275155...
594
+ sage: gamma_inc_lower(0, 2.) # needs sage.rings.real_mpfr
595
+ +infinity
596
+ """
597
+ R = parent or s_parent(x)
598
+ # C is the complex version of R
599
+ # prec is the precision of R
600
+ if R is float:
601
+ prec = 53
602
+ C = complex
603
+ else:
604
+ try:
605
+ prec = R.precision()
606
+ except AttributeError:
607
+ prec = 53
608
+ try:
609
+ C = R.complex_field()
610
+ except AttributeError:
611
+ C = R
612
+ if algorithm == 'pari':
613
+ Cx = ComplexField(prec)(x)
614
+ v = Cx.gamma() - Cx.gamma_inc(y)
615
+ else:
616
+ v = ComplexField(prec)(_mpmath_utils_call(_mpmath_gammainc, x, 0, y, parent=R))
617
+ return R(v) if v.is_real() else C(v)
618
+
619
+ def _derivative_(self, x, y, diff_param=None):
620
+ """
621
+ EXAMPLES::
622
+
623
+ sage: x, y = var('x,y') # needs sage.symbolic
624
+ sage: gamma_inc_lower(x, y).diff(y) # needs sage.symbolic
625
+ y^(x - 1)*e^(-y)
626
+ sage: gamma_inc_lower(x, y).diff(x) # needs sage.symbolic
627
+ Traceback (most recent call last):
628
+ ...
629
+ NotImplementedError: cannot differentiate gamma_inc_lower in the first parameter
630
+ """
631
+ if diff_param == 0:
632
+ raise NotImplementedError("cannot differentiate gamma_inc_lower in the"
633
+ " first parameter")
634
+ else:
635
+ return exp(-y) * y**(x - 1)
636
+
637
+ def _mathematica_init_evaled_(self, *args):
638
+ r"""
639
+ EXAMPLES::
640
+
641
+ sage: gamma_inc_lower(4/3, 1)._mathematica_() # indirect doctest # optional - mathematica, needs sage.symbolic
642
+ Gamma[4/3, 0, 1]
643
+ """
644
+ args_mathematica = []
645
+ for a in args:
646
+ if isinstance(a, str):
647
+ args_mathematica.append(a)
648
+ elif hasattr(a, '_mathematica_init_'):
649
+ args_mathematica.append(a._mathematica_init_())
650
+ else:
651
+ args_mathematica.append(str(a))
652
+ x, z = args_mathematica
653
+ return "Gamma[%s,0,%s]" % (x, z)
654
+
655
+
656
+ # shorter alias
657
+ gamma_inc_lower = Function_gamma_inc_lower()
658
+
659
+
660
+ def gamma(a, *args, **kwds):
661
+ r"""
662
+ Gamma and upper incomplete gamma functions in one symbol.
663
+
664
+ Recall that `\Gamma(n)` is `n-1` factorial::
665
+
666
+ sage: gamma(11) == factorial(10)
667
+ True
668
+ sage: gamma(6)
669
+ 120
670
+ sage: gamma(1/2) # needs sage.symbolic
671
+ sqrt(pi)
672
+ sage: gamma(-4/3) # needs sage.symbolic
673
+ gamma(-4/3)
674
+ sage: gamma(-1)
675
+ Infinity
676
+ sage: gamma(0)
677
+ Infinity
678
+
679
+ ::
680
+
681
+ sage: gamma_inc(3, 2) # needs sage.symbolic
682
+ gamma(3, 2)
683
+ sage: gamma_inc(x,0) # needs sage.symbolic
684
+ gamma(x)
685
+
686
+ ::
687
+
688
+ sage: gamma(5, hold=True) # needs sage.symbolic
689
+ gamma(5)
690
+ sage: gamma(x, 0, hold=True) # needs sage.symbolic
691
+ gamma(x, 0)
692
+
693
+ ::
694
+
695
+ sage: gamma(CDF(I)) # needs sage.libs.pari sage.rings.complex_double sage.symbolic
696
+ -0.15494982830181067 - 0.49801566811835607*I
697
+ sage: gamma(CDF(0.5, 14)) # needs sage.libs.pari sage.rings.complex_double
698
+ -4.0537030780372815e-10 - 5.773299834553605e-10*I
699
+
700
+ Use ``numerical_approx`` to get higher precision from
701
+ symbolic expressions::
702
+
703
+ sage: gamma(pi).n(100) # needs sage.symbolic
704
+ 2.2880377953400324179595889091
705
+ sage: gamma(3/4).n(100) # needs sage.symbolic
706
+ 1.2254167024651776451290983034
707
+
708
+ The precision for the result is also deduced from the precision of the
709
+ input. Convert the input to a higher precision explicitly if a result
710
+ with higher precision is desired.::
711
+
712
+ sage: t = gamma(RealField(100)(2.5)); t # needs sage.rings.real_mpfr
713
+ 1.3293403881791370204736256125
714
+ sage: t.prec() # needs sage.rings.real_mpfr
715
+ 100
716
+
717
+ The gamma function only works with input that can be coerced to the
718
+ Symbolic Ring::
719
+
720
+ sage: x = polygen(ZZ, 'x')
721
+ sage: Q.<i> = NumberField(x^2 + 1) # needs sage.rings.number_field
722
+ sage: gamma(i) # needs sage.rings.number_field sage.symbolic
723
+ Traceback (most recent call last):
724
+ ...
725
+ TypeError: cannot coerce arguments: no canonical coercion
726
+ from Number Field in i with defining polynomial x^2 + 1 to Symbolic Ring
727
+
728
+ .. SEEALSO::
729
+
730
+ :class:`Function_gamma`
731
+ """
732
+ if not args:
733
+ return gamma1(a, **kwds)
734
+ if len(args) > 1:
735
+ raise TypeError("Symbolic function gamma takes at most 2 arguments (%s given)" % (len(args) + 1))
736
+ return gamma_inc(a, args[0], **kwds)
737
+
738
+
739
+ # We have to add the wrapper function manually to the symbol_table when we have
740
+ # two functions with different number of arguments and the same name
741
+ symbol_table['functions']['gamma'] = gamma
742
+
743
+
744
+ def _mathematica_gamma3(*args):
745
+ r"""
746
+ EXAMPLES::
747
+
748
+ sage: gamma(4/3)._mathematica_().sage() # indirect doctest, optional - mathematica
749
+ gamma(4/3)
750
+ sage: gamma(4/3, 1)._mathematica_().sage() # indirect doctest, optional - mathematica
751
+ gamma(4/3, 1)
752
+ sage: mathematica('Gamma[4/3, 0, 1]').sage() # indirect doctest, optional - mathematica
753
+ gamma(4/3) - gamma(4/3, 1)
754
+ """
755
+ assert len(args) == 3
756
+ return gamma_inc(args[0], args[1]) - gamma_inc(args[0], args[2])
757
+
758
+
759
+ register_symbol(_mathematica_gamma3, dict(mathematica='Gamma'), 3)
760
+
761
+
762
+ class Function_psi1(GinacFunction):
763
+ def __init__(self):
764
+ r"""
765
+ The digamma function, `\psi(x)`, is the logarithmic derivative of the
766
+ gamma function.
767
+
768
+ .. MATH::
769
+
770
+ \psi(x) = \frac{d}{dx} \log(\Gamma(x)) = \frac{\Gamma'(x)}{\Gamma(x)}
771
+
772
+ EXAMPLES::
773
+
774
+ sage: from sage.functions.gamma import psi1
775
+ sage: psi1(x) # needs sage.symbolic
776
+ psi(x)
777
+ sage: psi1(x).derivative(x) # needs sage.symbolic
778
+ psi(1, x)
779
+
780
+ ::
781
+
782
+ sage: psi1(3) # needs sage.symbolic
783
+ -euler_gamma + 3/2
784
+
785
+ ::
786
+
787
+ sage: psi(.5) # needs sage.symbolic
788
+ -1.96351002602142
789
+ sage: psi(RealField(100)(.5)) # needs sage.rings.real_mpfr sage.symbolic
790
+ -1.9635100260214234794409763330
791
+
792
+ TESTS::
793
+
794
+ sage: latex(psi1(x)) # needs sage.symbolic
795
+ \psi\left(x\right)
796
+ sage: loads(dumps(psi1(x) + 1)) # needs sage.symbolic
797
+ psi(x) + 1
798
+
799
+ sage: # needs sage.symbolic
800
+ sage: t = psi1(x); t
801
+ psi(x)
802
+ sage: t.subs(x=.2)
803
+ -5.28903989659219
804
+ sage: psi(x)._sympy_() # needs sympy
805
+ polygamma(0, x)
806
+ sage: psi(x)._fricas_() # optional - fricas
807
+ digamma(x)
808
+ """
809
+ GinacFunction.__init__(self, "psi", nargs=1, latex_name=r'\psi',
810
+ conversions=dict(mathematica='PolyGamma',
811
+ maxima='psi[0]',
812
+ maple='Psi',
813
+ sympy='digamma',
814
+ fricas='digamma'))
815
+
816
+
817
+ class Function_psi2(GinacFunction):
818
+ def __init__(self):
819
+ r"""
820
+ Derivatives of the digamma function `\psi(x)`.
821
+
822
+ EXAMPLES::
823
+
824
+ sage: # needs sage.symbolic
825
+ sage: from sage.functions.gamma import psi2
826
+ sage: psi2(2, x)
827
+ psi(2, x)
828
+ sage: psi2(2, x).derivative(x)
829
+ psi(3, x)
830
+ sage: n = var('n')
831
+ sage: psi2(n, x).derivative(x)
832
+ psi(n + 1, x)
833
+
834
+ ::
835
+
836
+ sage: psi2(0, x) # needs sage.symbolic
837
+ psi(x)
838
+ sage: psi2(-1, x) # needs sage.symbolic
839
+ log(gamma(x))
840
+ sage: psi2(3, 1) # needs sage.symbolic
841
+ 1/15*pi^4
842
+
843
+ ::
844
+
845
+ sage: psi2(2, .5).n() # needs sage.symbolic
846
+ -16.8287966442343
847
+ sage: psi2(2, .5).n(100) # needs sage.symbolic
848
+ -16.828796644234319995596334261
849
+
850
+ TESTS::
851
+
852
+ sage: psi2(n, x).derivative(n) # needs sage.symbolic
853
+ Traceback (most recent call last):
854
+ ...
855
+ RuntimeError: cannot diff psi(n,x) with respect to n
856
+
857
+ sage: # needs sage.symbolic
858
+ sage: latex(psi2(2,x))
859
+ \psi\left(2, x\right)
860
+ sage: loads(dumps(psi2(2,x) + 1))
861
+ psi(2, x) + 1
862
+ sage: psi(2, x)._sympy_() # needs sympy
863
+ polygamma(2, x)
864
+ sage: psi(2, x)._fricas_() # optional - fricas
865
+ polygamma(2,x)
866
+
867
+ Fixed conversion::
868
+
869
+ sage: psi(2, x)._maple_init_() # needs sage.symbolic
870
+ 'Psi(2,x)'
871
+ """
872
+ GinacFunction.__init__(self, "psi", nargs=2, latex_name=r'\psi',
873
+ conversions=dict(mathematica='PolyGamma',
874
+ sympy='polygamma',
875
+ maple='Psi',
876
+ giac='Psi',
877
+ fricas='polygamma'))
878
+
879
+ def _maxima_init_evaled_(self, *args):
880
+ """
881
+ EXAMPLES:
882
+
883
+ These are indirect doctests for this function.::
884
+
885
+ sage: from sage.functions.gamma import psi2
886
+ sage: psi2(2, x)._maxima_() # needs sage.symbolic
887
+ psi[2](_SAGE_VAR_x)
888
+ sage: psi2(4, x)._maxima_() # needs sage.symbolic
889
+ psi[4](_SAGE_VAR_x)
890
+ """
891
+ args_maxima = []
892
+ for a in args:
893
+ if isinstance(a, str):
894
+ args_maxima.append(a)
895
+ elif hasattr(a, '_maxima_init_'):
896
+ args_maxima.append(a._maxima_init_())
897
+ else:
898
+ args_maxima.append(str(a))
899
+ n, x = args_maxima
900
+ return "psi[%s](%s)" % (n, x)
901
+
902
+
903
+ psi1 = Function_psi1()
904
+ psi2 = Function_psi2()
905
+
906
+
907
+ def psi(x, *args, **kwds):
908
+ r"""
909
+ The digamma function, `\psi(x)`, is the logarithmic derivative of the
910
+ gamma function.
911
+
912
+ .. MATH::
913
+
914
+ \psi(x) = \frac{d}{dx} \log(\Gamma(x)) = \frac{\Gamma'(x)}{\Gamma(x)}
915
+
916
+ We represent the `n`-th derivative of the digamma function with
917
+ `\psi(n, x)` or `psi(n, x)`.
918
+
919
+ EXAMPLES::
920
+
921
+ sage: # needs sage.symbolic
922
+ sage: psi(x)
923
+ psi(x)
924
+ sage: psi(.5)
925
+ -1.96351002602142
926
+ sage: psi(3)
927
+ -euler_gamma + 3/2
928
+ sage: psi(1, 5)
929
+ 1/6*pi^2 - 205/144
930
+ sage: psi(1, x)
931
+ psi(1, x)
932
+ sage: psi(1, x).derivative(x)
933
+ psi(2, x)
934
+
935
+ ::
936
+
937
+ sage: psi(3, hold=True) # needs sage.symbolic
938
+ psi(3)
939
+ sage: psi(1, 5, hold=True) # needs sage.symbolic
940
+ psi(1, 5)
941
+
942
+ TESTS::
943
+
944
+ sage: psi(2, x, 3) # needs sage.symbolic
945
+ Traceback (most recent call last):
946
+ ...
947
+ TypeError: Symbolic function psi takes at most 2 arguments (3 given)
948
+ """
949
+ if not args:
950
+ return psi1(x, **kwds)
951
+ if len(args) > 1:
952
+ raise TypeError("Symbolic function psi takes at most 2 arguments (%s given)" % (len(args) + 1))
953
+ return psi2(x, args[0], **kwds)
954
+
955
+
956
+ # We have to add the wrapper function manually to the symbol_table when we have
957
+ # two functions with different number of arguments and the same name
958
+ symbol_table['functions']['psi'] = psi
959
+
960
+
961
+ def _swap_psi(a, b):
962
+ return psi(b, a)
963
+
964
+
965
+ register_symbol(_swap_psi, {'giac': 'Psi'}, 2)
966
+
967
+
968
+ class Function_beta(GinacFunction):
969
+ def __init__(self):
970
+ r"""
971
+ Return the beta function. This is defined by
972
+
973
+ .. MATH::
974
+
975
+ \operatorname{B}(p,q) = \int_0^1 t^{p-1}(1-t)^{q-1} dt
976
+
977
+ for complex or symbolic input `p` and `q`.
978
+ Note that the order of inputs does not matter:
979
+ `\operatorname{B}(p,q)=\operatorname{B}(q,p)`.
980
+
981
+ GiNaC is used to compute `\operatorname{B}(p,q)`. However, complex inputs
982
+ are not yet handled in general. When GiNaC raises an error on
983
+ such inputs, we raise a :exc:`NotImplementedError`.
984
+
985
+ If either input is 1, GiNaC returns the reciprocal of the
986
+ other. In other cases, GiNaC uses one of the following
987
+ formulas:
988
+
989
+ .. MATH::
990
+
991
+ \operatorname{B}(p,q) = \frac{\Gamma(p)\Gamma(q)}{\Gamma(p+q)}
992
+
993
+ or
994
+
995
+ .. MATH::
996
+
997
+ \operatorname{B}(p,q) = (-1)^q \operatorname{B}(1-p-q, q).
998
+
999
+
1000
+ For numerical inputs, GiNaC uses the formula
1001
+
1002
+ .. MATH::
1003
+
1004
+ \operatorname{B}(p,q) = \exp[\log\Gamma(p)+\log\Gamma(q)-\log\Gamma(p+q)]
1005
+
1006
+
1007
+ INPUT:
1008
+
1009
+ - ``p`` -- number or symbolic expression
1010
+
1011
+ - ``q`` -- number or symbolic expression
1012
+
1013
+ OUTPUT: number or symbolic expression (if input is symbolic)
1014
+
1015
+ EXAMPLES::
1016
+
1017
+ sage: # needs sage.symbolic
1018
+ sage: beta(3, 2)
1019
+ 1/12
1020
+ sage: beta(3, 1)
1021
+ 1/3
1022
+ sage: beta(1/2, 1/2)
1023
+ beta(1/2, 1/2)
1024
+ sage: beta(-1, 1)
1025
+ -1
1026
+ sage: beta(-1/2, -1/2)
1027
+ 0
1028
+ sage: ex = beta(x/2, 3)
1029
+ sage: set(ex.operands()) == set([1/2*x, 3])
1030
+ True
1031
+ sage: beta(.5, .5)
1032
+ 3.14159265358979
1033
+ sage: beta(1, 2.0+I)
1034
+ 0.400000000000000 - 0.200000000000000*I
1035
+ sage: ex = beta(3, x+I)
1036
+ sage: set(ex.operands()) == set([x+I, 3])
1037
+ True
1038
+
1039
+ The result is symbolic if exact input is given::
1040
+
1041
+ sage: # needs sage.symbolic
1042
+ sage: ex = beta(2, 1+5*I); ex
1043
+ beta(...
1044
+ sage: set(ex.operands()) == set([1+5*I, 2])
1045
+ True
1046
+ sage: beta(2, 2.)
1047
+ 0.166666666666667
1048
+ sage: beta(I, 2.)
1049
+ -0.500000000000000 - 0.500000000000000*I
1050
+ sage: beta(2., 2)
1051
+ 0.166666666666667
1052
+ sage: beta(2., I)
1053
+ -0.500000000000000 - 0.500000000000000*I
1054
+
1055
+ sage: beta(x, x)._sympy_() # needs sympy sage.symbolic
1056
+ beta(x, x)
1057
+
1058
+ Test pickling::
1059
+
1060
+ sage: loads(dumps(beta))
1061
+ beta
1062
+
1063
+ Check that :issue:`15196` is fixed::
1064
+
1065
+ sage: beta(-1.3, -0.4) # needs sage.symbolic
1066
+ -4.92909641669610
1067
+ """
1068
+ GinacFunction.__init__(self, 'beta', nargs=2,
1069
+ latex_name=r"\operatorname{B}",
1070
+ conversions=dict(maxima='beta',
1071
+ mathematica='Beta',
1072
+ maple='Beta',
1073
+ sympy='beta',
1074
+ fricas='Beta',
1075
+ giac='Beta'))
1076
+
1077
+ def _method_arguments(self, x, y):
1078
+ r"""
1079
+ TESTS::
1080
+
1081
+ sage: RBF(beta(sin(3), sqrt(RBF(2).add_error(1e-8)/3))) # abs tol 6e-7 # needs sage.libs.flint sage.symbolic
1082
+ [7.407662 +/- 6.17e-7]
1083
+ """
1084
+ return [x, y]
1085
+
1086
+
1087
+ beta = Function_beta()