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
sage/functions/log.py ADDED
@@ -0,0 +1,1402 @@
1
+ # sage_setup: distribution = sagemath-categories
2
+ """
3
+ Logarithmic functions
4
+
5
+ AUTHORS:
6
+
7
+ - Yoora Yi Tenen (2012-11-16): Add documentation for :meth:`log()` (:issue:`12113`)
8
+
9
+ - Tomas Kalvoda (2015-04-01): Add :meth:`exp_polar()` (:issue:`18085`)
10
+ """
11
+
12
+ from sage.misc.functional import log
13
+ from sage.misc.lazy_import import lazy_import
14
+ from sage.rings.integer import Integer
15
+ from sage.rings.integer_ring import ZZ
16
+ from sage.rings.rational_field import QQ
17
+ from sage.rings.real_double import RDF
18
+ from sage.structure.element import Expression, parent as s_parent
19
+ from sage.symbolic.function import GinacFunction, BuiltinFunction
20
+ from sage.symbolic.symbols import register_symbol
21
+
22
+ lazy_import('sage.functions.gamma', 'psi1')
23
+ lazy_import('sage.functions.other', 'imag')
24
+ lazy_import('sage.functions.transcendental', ['hurwitz_zeta', 'zeta'])
25
+
26
+ lazy_import('sage.symbolic.constants', 'e', as_='const_e')
27
+ lazy_import('sage.symbolic.constants', 'pi', as_='const_pi')
28
+ lazy_import('sage.rings.complex_double', 'CDF')
29
+
30
+ lazy_import('sage.libs.flint.arith_sage', 'harmonic_number', as_='_flint_harmonic_number')
31
+
32
+ lazy_import('sage.libs.mpmath.utils', 'call', as_='_mpmath_utils_call')
33
+ lazy_import('mpmath', 'harmonic', as_='_mpmath_harmonic')
34
+ lazy_import('mpmath', 'lambertw', as_='_mpmath_lambertw')
35
+
36
+ lazy_import('sympy', 'polylog', as_='_sympy_polylog')
37
+ lazy_import('sympy', 'sympify', as_='_sympify')
38
+
39
+ lazy_import('scipy.special', 'lambertw', as_='_scipy_lambertw')
40
+
41
+
42
+ class Function_exp(GinacFunction):
43
+ r"""
44
+ The exponential function, `\exp(x) = e^x`.
45
+
46
+ EXAMPLES::
47
+
48
+ sage: # needs sage.symbolic
49
+ sage: exp(-1)
50
+ e^(-1)
51
+ sage: exp(2)
52
+ e^2
53
+ sage: exp(2).n(100)
54
+ 7.3890560989306502272304274606
55
+ sage: exp(x^2 + log(x))
56
+ e^(x^2 + log(x))
57
+ sage: exp(x^2 + log(x)).simplify()
58
+ x*e^(x^2)
59
+ sage: exp(2.5)
60
+ 12.1824939607035
61
+ sage: exp(I*pi/12)
62
+ (1/4*I + 1/4)*sqrt(6) - (1/4*I - 1/4)*sqrt(2)
63
+
64
+ sage: exp(float(2.5))
65
+ 12.182493960703473
66
+ sage: exp(RDF('2.5')) # needs sage.symbolic
67
+ 12.182493960703473
68
+
69
+ To prevent automatic evaluation, use the ``hold`` parameter::
70
+
71
+ sage: exp(I*pi, hold=True) # needs sage.symbolic
72
+ e^(I*pi)
73
+ sage: exp(0, hold=True) # needs sage.symbolic
74
+ e^0
75
+
76
+ To then evaluate again, we currently must use Maxima via
77
+ :meth:`sage.symbolic.expression.Expression.simplify`::
78
+
79
+ sage: exp(0, hold=True).simplify() # needs sage.symbolic
80
+ 1
81
+
82
+ ::
83
+
84
+ sage: # needs sage.symbolic
85
+ sage: exp(pi*I/2)
86
+ I
87
+ sage: exp(pi*I)
88
+ -1
89
+ sage: exp(8*pi*I)
90
+ 1
91
+ sage: exp(7*pi*I/2)
92
+ -I
93
+
94
+ For the sake of simplification, the argument is reduced modulo the
95
+ period of the complex exponential function, `2\pi i`::
96
+
97
+ sage: k = var('k', domain='integer') # needs sage.symbolic
98
+ sage: exp(2*k*pi*I) # needs sage.symbolic
99
+ 1
100
+ sage: exp(log(2) + 2*k*pi*I) # needs sage.symbolic
101
+ 2
102
+
103
+ The precision for the result is deduced from the precision of
104
+ the input. Convert the input to a higher precision explicitly
105
+ if a result with higher precision is desired::
106
+
107
+ sage: t = exp(RealField(100)(2)); t # needs sage.rings.real_mpfr
108
+ 7.3890560989306502272304274606
109
+ sage: t.prec() # needs sage.rings.real_mpfr
110
+ 100
111
+ sage: exp(2).n(100) # needs sage.symbolic
112
+ 7.3890560989306502272304274606
113
+
114
+ TESTS::
115
+
116
+ sage: # needs sage.symbolic
117
+ sage: latex(exp(x))
118
+ e^{x}
119
+ sage: latex(exp(sqrt(x)))
120
+ e^{\sqrt{x}}
121
+ sage: latex(exp)
122
+ \exp
123
+ sage: latex(exp(sqrt(x))^x)
124
+ \left(e^{\sqrt{x}}\right)^{x}
125
+ sage: latex(exp(sqrt(x)^x))
126
+ e^{\left(\sqrt{x}^{x}\right)}
127
+ sage: exp(x)._sympy_() # needs sympy
128
+ exp(x)
129
+
130
+ Test conjugates::
131
+
132
+ sage: conjugate(exp(x)) # needs sage.symbolic
133
+ e^conjugate(x)
134
+
135
+ Test simplifications when taking powers of exp (:issue:`7264`)::
136
+
137
+ sage: # needs sage.symbolic
138
+ sage: var('a,b,c,II')
139
+ (a, b, c, II)
140
+ sage: model_exp = exp(II)**a*(b)
141
+ sage: sol1_l = {b: 5.0, a: 1.1}
142
+ sage: model_exp.subs(sol1_l)
143
+ 5.00000000000000*e^(1.10000000000000*II)
144
+
145
+ ::
146
+
147
+ sage: # needs sage.symbolic
148
+ sage: exp(3)^II*exp(x)
149
+ e^(3*II + x)
150
+ sage: exp(x)*exp(x)
151
+ e^(2*x)
152
+ sage: exp(x)*exp(a)
153
+ e^(a + x)
154
+ sage: exp(x)*exp(a)^2
155
+ e^(2*a + x)
156
+
157
+ Another instance of the same problem (:issue:`7394`)::
158
+
159
+ sage: 2*sqrt(e) # needs sage.symbolic
160
+ 2*e^(1/2)
161
+
162
+ Check that :issue:`19918` is fixed::
163
+
164
+ sage: exp(-x^2).subs(x=oo) # needs sage.symbolic
165
+ 0
166
+ sage: exp(-x).subs(x=-oo) # needs sage.symbolic
167
+ +Infinity
168
+ """
169
+ def __init__(self):
170
+ """
171
+ TESTS::
172
+
173
+ sage: loads(dumps(exp))
174
+ exp
175
+ sage: maxima(exp(x))._sage_() # needs sage.symbolic
176
+ e^x
177
+ """
178
+ GinacFunction.__init__(self, "exp", latex_name=r"\exp",
179
+ conversions=dict(maxima='exp', fricas='exp'))
180
+
181
+
182
+ exp = Function_exp()
183
+
184
+
185
+ class Function_log1(GinacFunction):
186
+ r"""
187
+ The natural logarithm of ``x``.
188
+
189
+ See :meth:`log()` for extensive documentation.
190
+
191
+ EXAMPLES::
192
+
193
+ sage: ln(e^2) # needs sage.symbolic
194
+ 2
195
+ sage: ln(2) # needs sage.symbolic
196
+ log(2)
197
+ sage: ln(10) # needs sage.symbolic
198
+ log(10)
199
+
200
+ TESTS::
201
+
202
+ sage: # needs sage.symbolic
203
+ sage: latex(x.log())
204
+ \log\left(x\right)
205
+ sage: latex(log(1/4))
206
+ \log\left(\frac{1}{4}\right)
207
+ sage: log(x)._sympy_() # needs sympy
208
+ log(x)
209
+ sage: loads(dumps(ln(x)+1))
210
+ log(x) + 1
211
+
212
+ ``conjugate(log(x))==log(conjugate(x))`` unless on the branch cut which
213
+ runs along the negative real axis.::
214
+
215
+ sage: # needs sage.symbolic
216
+ sage: conjugate(log(x))
217
+ conjugate(log(x))
218
+ sage: var('y', domain='positive')
219
+ y
220
+ sage: conjugate(log(y))
221
+ log(y)
222
+ sage: conjugate(log(y + I))
223
+ conjugate(log(y + I))
224
+ sage: conjugate(log(-1))
225
+ -I*pi
226
+ sage: log(conjugate(-1))
227
+ I*pi
228
+
229
+ Check if float arguments are handled properly.::
230
+
231
+ sage: from sage.functions.log import function_log as log
232
+ sage: log(float(5))
233
+ 1.6094379124341003
234
+ sage: log(float(0)) # needs sage.symbolic
235
+ -inf
236
+ sage: log(float(-1)) # needs sage.symbolic
237
+ 3.141592653589793j
238
+ sage: log(x).subs(x=float(-1)) # needs sage.symbolic
239
+ 3.141592653589793j
240
+
241
+ :issue:`22142`::
242
+
243
+ sage: log(QQbar(sqrt(2))) # needs sage.rings.number_field sage.symbolic
244
+ log(1.414213562373095?)
245
+ sage: log(QQbar(sqrt(2))*1.) # needs sage.rings.number_field sage.symbolic
246
+ 0.346573590279973
247
+ sage: polylog(QQbar(sqrt(2)),3) # needs sage.rings.number_field sage.symbolic
248
+ polylog(1.414213562373095?, 3)
249
+ """
250
+ def __init__(self):
251
+ """
252
+ TESTS::
253
+
254
+ sage: loads(dumps(ln))
255
+ log
256
+ sage: maxima(ln(x))._sage_() # needs sage.symbolic
257
+ log(x)
258
+ """
259
+ GinacFunction.__init__(self, 'log', latex_name=r'\log',
260
+ conversions=dict(maxima='log', fricas='log',
261
+ mathematica='Log', giac='ln'))
262
+
263
+
264
+ ln = function_log = Function_log1()
265
+
266
+
267
+ class Function_log2(GinacFunction):
268
+ """
269
+ Return the logarithm of x to the given base.
270
+
271
+ See :meth:`log() <sage.functions.log.log>` for extensive documentation.
272
+
273
+ EXAMPLES::
274
+
275
+ sage: from sage.functions.log import logb
276
+ sage: logb(1000, 10) # needs sage.symbolic
277
+ 3
278
+
279
+ TESTS::
280
+
281
+ sage: logb(7, 2) # needs sage.symbolic
282
+ log(7)/log(2)
283
+ sage: logb(int(7), 2) # needs sage.symbolic
284
+ log(7)/log(2)
285
+ """
286
+ def __init__(self):
287
+ """
288
+ TESTS::
289
+
290
+ sage: from sage.functions.log import logb
291
+ sage: loads(dumps(logb))
292
+ log
293
+ """
294
+ GinacFunction.__init__(self, 'log', ginac_name='logb', nargs=2,
295
+ latex_name=r'\log',
296
+ conversions=dict(maxima='log'))
297
+
298
+
299
+ logb = Function_log2()
300
+
301
+
302
+ class Function_polylog(GinacFunction):
303
+ def __init__(self):
304
+ r"""
305
+ The polylog function
306
+ `\text{Li}_s(z) = \sum_{k=1}^{\infty} z^k / k^s`.
307
+
308
+ The first argument is `s` (usually an integer called the weight)
309
+ and the second argument is `z`: ``polylog(s, z)``.
310
+
311
+ This definition is valid for arbitrary complex numbers `s` and `z`
312
+ with `|z| < 1`. It can be extended to `|z| \ge 1` by the process of
313
+ analytic continuation, with a branch cut along the positive real axis
314
+ from `1` to `+\infty`. A ``NaN`` value may be returned for floating
315
+ point arguments that are on the branch cut.
316
+
317
+ EXAMPLES::
318
+
319
+ sage: # needs sage.symbolic
320
+ sage: polylog(2.7, 0)
321
+ 0.000000000000000
322
+ sage: polylog(2, 1)
323
+ 1/6*pi^2
324
+ sage: polylog(2, -1)
325
+ -1/12*pi^2
326
+ sage: polylog(3, -1)
327
+ -3/4*zeta(3)
328
+ sage: polylog(2, I)
329
+ I*catalan - 1/48*pi^2
330
+ sage: polylog(4, 1/2)
331
+ polylog(4, 1/2)
332
+ sage: polylog(4, 0.5)
333
+ 0.517479061673899
334
+
335
+ sage: # needs sage.symbolic
336
+ sage: polylog(1, x)
337
+ -log(-x + 1)
338
+ sage: polylog(2, x^2 + 1)
339
+ dilog(x^2 + 1)
340
+ sage: f = polylog(4, 1); f
341
+ 1/90*pi^4
342
+ sage: f.n()
343
+ 1.08232323371114
344
+ sage: polylog(4, 2).n()
345
+ 2.42786280675470 - 0.174371300025453*I
346
+ sage: complex(polylog(4, 2))
347
+ (2.4278628067547032-0.17437130002545306j)
348
+ sage: float(polylog(4, 0.5))
349
+ 0.5174790616738993
350
+ sage: z = var('z')
351
+ sage: polylog(2, z).series(z==0, 5)
352
+ 1*z + 1/4*z^2 + 1/9*z^3 + 1/16*z^4 + Order(z^5)
353
+
354
+ sage: loads(dumps(polylog))
355
+ polylog
356
+
357
+ sage: latex(polylog(5, x)) # needs sage.symbolic
358
+ {\rm Li}_{5}(x)
359
+ sage: polylog(x, x)._sympy_() # needs sympy sage.symbolic
360
+ polylog(x, x)
361
+
362
+ TESTS:
363
+
364
+ Check if :issue:`8459` is fixed::
365
+
366
+ sage: t = maxima(polylog(5,x)).sage(); t # needs sage.symbolic
367
+ polylog(5, x)
368
+ sage: t.operator() == polylog # needs sage.symbolic
369
+ True
370
+ sage: t.subs(x=.5).n() # needs sage.symbolic
371
+ 0.50840057924226...
372
+
373
+ Check if :issue:`18386` is fixed::
374
+
375
+ sage: polylog(2.0, 1) # needs sage.symbolic
376
+ 1.64493406684823
377
+ sage: polylog(2, 1.0) # needs sage.symbolic
378
+ 1.64493406684823
379
+ sage: polylog(2.0, 1.0) # needs sage.symbolic
380
+ 1.64493406684823
381
+
382
+ sage: # needs sage.libs.flint
383
+ sage: polylog(2, RealBallField(100)(1/3))
384
+ [0.36621322997706348761674629766... +/- ...]
385
+ sage: polylog(2, ComplexBallField(100)(4/3))
386
+ [2.27001825336107090380391448586 +/- ...] + [-0.90377988538400159956755721265 +/- ...]*I
387
+ sage: polylog(2, CBF(1/3))
388
+ [0.366213229977063 +/- ...]
389
+ sage: parent(_)
390
+ Complex ball field with 53 bits of precision
391
+ sage: polylog(2, CBF(1))
392
+ [1.644934066848226 +/- ...]
393
+ sage: parent(_)
394
+ Complex ball field with 53 bits of precision
395
+
396
+ sage: polylog(1, -1) # known bug # needs sage.symbolic
397
+ -log(2)
398
+
399
+ Check for :issue:`21907`::
400
+
401
+ sage: bool(x*polylog(x,x)==0) # needs sage.symbolic
402
+ False
403
+ """
404
+ GinacFunction.__init__(self, "polylog", nargs=2,
405
+ conversions=dict(mathematica='PolyLog',
406
+ magma='Polylog',
407
+ matlab='polylog',
408
+ sympy='polylog'))
409
+
410
+ def _maxima_init_evaled_(self, *args):
411
+ """
412
+ EXAMPLES:
413
+
414
+ These are indirect doctests for this function::
415
+
416
+ sage: polylog(2, x)._maxima_() # needs sage.symbolic
417
+ li[2](_SAGE_VAR_x)
418
+ sage: polylog(4, x)._maxima_() # needs sage.symbolic
419
+ polylog(4,_SAGE_VAR_x)
420
+ """
421
+ args_maxima = []
422
+ for a in args:
423
+ if isinstance(a, str):
424
+ args_maxima.append(a)
425
+ elif hasattr(a, '_maxima_init_'):
426
+ args_maxima.append(a._maxima_init_())
427
+ else:
428
+ args_maxima.append(str(a))
429
+
430
+ n, x = args_maxima
431
+ if int(n) in [1, 2, 3]:
432
+ return 'li[%s](%s)' % (n, x)
433
+ else:
434
+ return 'polylog(%s, %s)' % (n, x)
435
+
436
+ def _method_arguments(self, k, z):
437
+ r"""
438
+ TESTS::
439
+
440
+ sage: b = RBF(1/2, .0001) # needs sage.libs.flint
441
+ sage: polylog(2, b) # needs sage.libs.flint
442
+ [0.582 +/- ...]
443
+ """
444
+ return [z, k]
445
+
446
+
447
+ polylog = Function_polylog()
448
+
449
+
450
+ class Function_dilog(GinacFunction):
451
+ def __init__(self):
452
+ r"""
453
+ The dilogarithm function
454
+ `\text{Li}_2(z) = \sum_{k=1}^{\infty} z^k / k^2`.
455
+
456
+ This is simply an alias for ``polylog(2, z)``.
457
+
458
+ EXAMPLES::
459
+
460
+ sage: # needs sage.symbolic
461
+ sage: dilog(1)
462
+ 1/6*pi^2
463
+ sage: dilog(1/2)
464
+ 1/12*pi^2 - 1/2*log(2)^2
465
+ sage: dilog(x^2+1)
466
+ dilog(x^2 + 1)
467
+ sage: dilog(-1)
468
+ -1/12*pi^2
469
+ sage: dilog(-1.0)
470
+ -0.822467033424113
471
+ sage: dilog(-1.1)
472
+ -0.890838090262283
473
+ sage: dilog(1/2)
474
+ 1/12*pi^2 - 1/2*log(2)^2
475
+ sage: dilog(.5)
476
+ 0.582240526465012
477
+ sage: dilog(1/2).n()
478
+ 0.582240526465012
479
+ sage: var('z')
480
+ z
481
+ sage: dilog(z).diff(z, 2)
482
+ log(-z + 1)/z^2 - 1/((z - 1)*z)
483
+ sage: dilog(z).series(z==1/2, 3)
484
+ (1/12*pi^2 - 1/2*log(2)^2) + (-2*log(1/2))*(z - 1/2)
485
+ + (2*log(1/2) + 2)*(z - 1/2)^2 + Order(1/8*(2*z - 1)^3)
486
+
487
+ sage: latex(dilog(z)) # needs sage.symbolic
488
+ {\rm Li}_2\left(z\right)
489
+
490
+ Dilog has a branch point at `1`. Sage's floating point libraries
491
+ may handle this differently from the symbolic package::
492
+
493
+ sage: # needs sage.symbolic
494
+ sage: dilog(1)
495
+ 1/6*pi^2
496
+ sage: dilog(1.)
497
+ 1.64493406684823
498
+ sage: dilog(1).n()
499
+ 1.64493406684823
500
+ sage: float(dilog(1))
501
+ 1.6449340668482262
502
+
503
+ TESTS:
504
+
505
+ ``conjugate(dilog(x))==dilog(conjugate(x))`` unless on the branch cuts
506
+ which run along the positive real axis beginning at 1.::
507
+
508
+ sage: # needs sage.symbolic
509
+ sage: conjugate(dilog(x))
510
+ conjugate(dilog(x))
511
+ sage: var('y', domain='positive')
512
+ y
513
+ sage: conjugate(dilog(y))
514
+ conjugate(dilog(y))
515
+ sage: conjugate(dilog(1/19))
516
+ dilog(1/19)
517
+ sage: conjugate(dilog(1/2*I))
518
+ dilog(-1/2*I)
519
+ sage: dilog(conjugate(1/2*I))
520
+ dilog(-1/2*I)
521
+ sage: conjugate(dilog(2))
522
+ conjugate(dilog(2))
523
+
524
+ Check that return type matches argument type where possible
525
+ (:issue:`18386`)::
526
+
527
+ sage: dilog(0.5) # needs sage.symbolic
528
+ 0.582240526465012
529
+ sage: dilog(-1.0) # needs sage.symbolic
530
+ -0.822467033424113
531
+
532
+ sage: # needs sage.rings.real_mpfr sage.symbolic
533
+ sage: y = dilog(RealField(13)(0.5))
534
+ sage: parent(y)
535
+ Real Field with 13 bits of precision
536
+ sage: dilog(RealField(13)(1.1))
537
+ 1.96 - 0.300*I
538
+ sage: parent(_)
539
+ Complex Field with 13 bits of precision
540
+ """
541
+ GinacFunction.__init__(self, 'dilog',
542
+ conversions=dict(maxima='li[2]',
543
+ magma='Dilog',
544
+ fricas='(x+->dilog(1-x))'))
545
+
546
+ def _sympy_(self, z):
547
+ r"""
548
+ Special case for sympy, where there is no dilog function.
549
+
550
+ EXAMPLES::
551
+
552
+ sage: w = dilog(x)._sympy_(); w # needs sympy sage.symbolic
553
+ polylog(2, x)
554
+ sage: w.diff() # needs sympy sage.symbolic
555
+ polylog(1, x)/x
556
+ sage: w._sage_() # needs sympy sage.symbolic
557
+ dilog(x)
558
+ """
559
+ return _sympy_polylog(2, _sympify(z, evaluate=False))
560
+
561
+
562
+ dilog = Function_dilog()
563
+
564
+
565
+ class Function_lambert_w(BuiltinFunction):
566
+ r"""
567
+ The integral branches of the Lambert W function `W_n(z)`.
568
+
569
+ This function satisfies the equation
570
+
571
+ .. MATH::
572
+
573
+ z = W_n(z) e^{W_n(z)}
574
+
575
+ INPUT:
576
+
577
+ - ``n`` -- integer; `n=0` corresponds to the principal branch
578
+
579
+ - ``z`` -- a complex number
580
+
581
+ If called with a single argument, that argument is ``z`` and the branch ``n`` is
582
+ assumed to be 0 (the principal branch).
583
+
584
+ ALGORITHM:
585
+
586
+ Numerical evaluation is handled using the mpmath and SciPy libraries.
587
+
588
+ REFERENCES:
589
+
590
+ - :wikipedia:`Lambert_W_function`
591
+
592
+ EXAMPLES:
593
+
594
+ Evaluation of the principal branch::
595
+
596
+ sage: lambert_w(1.0) # needs scipy
597
+ 0.567143290409784
598
+ sage: lambert_w(-1).n() # needs mpmath
599
+ -0.318131505204764 + 1.33723570143069*I
600
+ sage: lambert_w(-1.5 + 5*I) # needs mpmath sage.symbolic
601
+ 1.17418016254171 + 1.10651494102011*I
602
+
603
+ Evaluation of other branches::
604
+
605
+ sage: lambert_w(2, 1.0) # needs scipy
606
+ -2.40158510486800 + 10.7762995161151*I
607
+
608
+ Solutions to certain exponential equations are returned in terms of lambert_w::
609
+
610
+ sage: S = solve(e^(5*x)+x==0, x, to_poly_solve=True) # needs sage.symbolic
611
+ sage: z = S[0].rhs(); z # needs sage.symbolic
612
+ -1/5*lambert_w(5)
613
+ sage: N(z) # needs sage.symbolic
614
+ -0.265344933048440
615
+
616
+ Check the defining equation numerically at `z=5`::
617
+
618
+ sage: N(lambert_w(5)*exp(lambert_w(5)) - 5) # needs mpmath
619
+ 0.000000000000000
620
+
621
+ There are several special values of the principal branch which
622
+ are automatically simplified::
623
+
624
+ sage: lambert_w(0) # needs mpmath
625
+ 0
626
+ sage: lambert_w(e) # needs sage.symbolic
627
+ 1
628
+ sage: lambert_w(-1/e) # needs sage.symbolic
629
+ -1
630
+
631
+ Integration (of the principal branch) is evaluated using Maxima::
632
+
633
+ sage: integrate(lambert_w(x), x) # needs sage.symbolic
634
+ (lambert_w(x)^2 - lambert_w(x) + 1)*x/lambert_w(x)
635
+ sage: integrate(lambert_w(x), x, 0, 1) # needs sage.symbolic
636
+ (lambert_w(1)^2 - lambert_w(1) + 1)/lambert_w(1) - 1
637
+ sage: integrate(lambert_w(x), x, 0, 1.0) # needs sage.symbolic
638
+ 0.3303661247616807
639
+
640
+ Warning: The integral of a non-principal branch is not implemented,
641
+ neither is numerical integration using GSL. The :meth:`numerical_integral`
642
+ function does work if you pass a lambda function::
643
+
644
+ sage: numerical_integral(lambda x: lambert_w(x), 0, 1) # needs scipy sage.modules
645
+ (0.33036612476168054, 3.667800782666048e-15)
646
+ """
647
+
648
+ def __init__(self):
649
+ r"""
650
+ See the docstring for :meth:`Function_lambert_w`.
651
+
652
+ EXAMPLES::
653
+
654
+ sage: lambert_w(0, 1.0) # needs scipy
655
+ 0.567143290409784
656
+ sage: lambert_w(x, x)._sympy_() # needs sympy sage.symbolic
657
+ LambertW(x, x)
658
+
659
+ TESTS:
660
+
661
+ Check that :issue:`25987` is fixed::
662
+
663
+ sage: lambert_w(x)._fricas_() # optional - fricas, needs sage.symbolic
664
+ lambertW(x)
665
+
666
+ sage: fricas(lambert_w(x)).eval(x=-1/e) # optional - fricas, needs sage.symbolic
667
+ - 1
668
+
669
+ The two-argument form of Lambert's function is not supported
670
+ by FriCAS, so we return a generic operator::
671
+
672
+ sage: var("n") # needs sage.symbolic
673
+ n
674
+ sage: lambert_w(n, x)._fricas_() # optional - fricas, needs sage.symbolic
675
+ generalizedLambertW(n,x)
676
+ """
677
+ BuiltinFunction.__init__(self, "lambert_w", nargs=2,
678
+ conversions={'mathematica': 'ProductLog',
679
+ 'maple': 'LambertW',
680
+ 'matlab': 'lambertw',
681
+ 'maxima': 'generalized_lambert_w',
682
+ 'fricas': "((n,z)+->(if n=0 then lambertW(z) else operator('generalizedLambertW)(n,z)))",
683
+ 'sympy': 'LambertW'})
684
+
685
+ def __call__(self, *args, **kwds):
686
+ r"""
687
+ Custom call method allows the user to pass one argument or two. If
688
+ one argument is passed, we assume it is ``z`` and that ``n=0``.
689
+
690
+ EXAMPLES::
691
+
692
+ sage: lambert_w(1) # needs sage.symbolic
693
+ lambert_w(1)
694
+ sage: lambert_w(1, 2) # needs sage.symbolic
695
+ lambert_w(1, 2)
696
+ """
697
+ if len(args) == 2:
698
+ return BuiltinFunction.__call__(self, *args, **kwds)
699
+ elif len(args) == 1:
700
+ return BuiltinFunction.__call__(self, 0, args[0], **kwds)
701
+ else:
702
+ raise TypeError("lambert_w takes either one or two arguments.")
703
+
704
+ def _method_arguments(self, n, z):
705
+ r"""
706
+ TESTS::
707
+
708
+ sage: # needs sage.libs.flint
709
+ sage: b = RBF(1, 0.001)
710
+ sage: lambert_w(b)
711
+ [0.567 +/- 6.44e-4]
712
+ sage: lambert_w(CBF(b))
713
+ [0.567 +/- 6.44e-4]
714
+ sage: lambert_w(2r, CBF(b))
715
+ [-2.40 +/- 2.79e-3] + [10.78 +/- 4.91e-3]*I
716
+ sage: lambert_w(2, CBF(b))
717
+ [-2.40 +/- 2.79e-3] + [10.78 +/- 4.91e-3]*I
718
+ """
719
+ if n == 0:
720
+ return [z]
721
+ else:
722
+ return [z, n]
723
+
724
+ def _eval_(self, n, z):
725
+ """
726
+ EXAMPLES::
727
+
728
+ sage: lambert_w(6.0) # needs scipy
729
+ 1.43240477589830
730
+ sage: lambert_w(1) # needs sage.symbolic
731
+ lambert_w(1)
732
+ sage: lambert_w(x + 1) # needs sage.symbolic
733
+ lambert_w(x + 1)
734
+
735
+ There are three special values which are automatically simplified::
736
+
737
+ sage: lambert_w(0) # needs mpmath
738
+ 0
739
+ sage: lambert_w(e) # needs sage.symbolic
740
+ 1
741
+ sage: lambert_w(-1/e) # needs sage.symbolic
742
+ -1
743
+ sage: lambert_w(SR(0)) # needs sage.symbolic
744
+ 0
745
+
746
+ The special values only hold on the principal branch::
747
+
748
+ sage: lambert_w(1, e) # needs sage.symbolic
749
+ lambert_w(1, e)
750
+ sage: lambert_w(1, e.n()) # needs sage.symbolic
751
+ -0.532092121986380 + 4.59715801330257*I
752
+
753
+ TESTS:
754
+
755
+ When automatic simplification occurs, the parent of the output
756
+ value should be either the same as the parent of the input, or
757
+ a Sage type::
758
+
759
+ sage: parent(lambert_w(int(0))) # needs mpmath
760
+ <... 'int'>
761
+ sage: parent(lambert_w(Integer(0))) # needs mpmath
762
+ Integer Ring
763
+ sage: parent(lambert_w(e)) # needs sage.symbolic
764
+ Symbolic Ring
765
+ """
766
+ if not isinstance(z, Expression):
767
+ if n == 0 and z == 0:
768
+ return s_parent(z)(0)
769
+ elif n == 0:
770
+ if z.is_trivial_zero():
771
+ return s_parent(z)(Integer(0))
772
+ elif (z - const_e).is_trivial_zero():
773
+ return s_parent(z)(Integer(1))
774
+ elif (z + 1 / const_e).is_trivial_zero():
775
+ return s_parent(z)(Integer(-1))
776
+
777
+ def _evalf_(self, n, z, parent=None, algorithm=None):
778
+ """
779
+ EXAMPLES::
780
+
781
+ sage: N(lambert_w(1)) # needs sage.symbolic
782
+ 0.567143290409784
783
+ sage: lambert_w(RealField(100)(1)) # needs sage.rings.real_mpfr
784
+ 0.56714329040978387299996866221
785
+
786
+ SciPy is used to evaluate for float, RDF, and CDF inputs::
787
+
788
+ sage: # needs scipy
789
+ sage: lambert_w(RDF(1))
790
+ 0.5671432904097838
791
+ sage: lambert_w(float(1))
792
+ 0.5671432904097838
793
+ sage: lambert_w(CDF(1))
794
+ 0.5671432904097838
795
+ sage: lambert_w(complex(1))
796
+ (0.5671432904097838+0j)
797
+ sage: lambert_w(RDF(-1)) # abs tol 2e-16
798
+ -0.31813150520476413 + 1.3372357014306895*I
799
+ sage: lambert_w(float(-1)) # abs tol 2e-16
800
+ (-0.31813150520476413+1.3372357014306895j)
801
+ """
802
+ R = parent or s_parent(z)
803
+ if R is float or R is RDF:
804
+ res = _scipy_lambertw(z, n)
805
+ # SciPy always returns a complex value, make it real if possible
806
+ if not res.imag:
807
+ return R(res.real)
808
+ elif R is float:
809
+ return complex(res)
810
+ else:
811
+ return CDF(res)
812
+ elif R is complex or R is CDF:
813
+ return R(_scipy_lambertw(z, n))
814
+ else:
815
+ return _mpmath_utils_call(_mpmath_lambertw, z, n, parent=R)
816
+
817
+ def _derivative_(self, n, z, diff_param=None):
818
+ r"""
819
+ The derivative of `W_n(x)` is `W_n(x)/(x \cdot W_n(x) + x)`.
820
+
821
+ EXAMPLES::
822
+
823
+ sage: x = var('x') # needs sage.symbolic
824
+ sage: derivative(lambert_w(x), x) # needs sage.symbolic
825
+ lambert_w(x)/(x*lambert_w(x) + x)
826
+
827
+ sage: derivative(lambert_w(2, exp(x)), x) # needs sage.symbolic
828
+ e^x*lambert_w(2, e^x)/(e^x*lambert_w(2, e^x) + e^x)
829
+
830
+ TESTS:
831
+
832
+ Differentiation in the first parameter raises an error :issue:`14788`::
833
+
834
+ sage: n = var('n') # needs sage.symbolic
835
+ sage: lambert_w(n, x).diff(n) # needs sage.symbolic
836
+ Traceback (most recent call last):
837
+ ...
838
+ ValueError: cannot differentiate lambert_w in the first parameter
839
+ """
840
+ if diff_param == 0:
841
+ raise ValueError("cannot differentiate lambert_w in the first parameter")
842
+
843
+ return lambert_w(n, z) / (z * lambert_w(n, z) + z)
844
+
845
+ def _maxima_init_evaled_(self, n, z):
846
+ """
847
+ EXAMPLES:
848
+
849
+ These are indirect doctests for this function.::
850
+
851
+ sage: lambert_w(0, x)._maxima_() # needs sage.symbolic
852
+ lambert_w(_SAGE_VAR_x)
853
+ sage: lambert_w(1, x)._maxima_() # needs sage.symbolic
854
+ generalized_lambert_w(1,_SAGE_VAR_x)
855
+
856
+ TESTS::
857
+
858
+ sage: lambert_w(x)._maxima_()._sage_() # needs sage.symbolic
859
+ lambert_w(x)
860
+ sage: lambert_w(2, x)._maxima_()._sage_() # needs sage.symbolic
861
+ lambert_w(2, x)
862
+ """
863
+ if isinstance(z, str):
864
+ maxima_z = z
865
+ elif hasattr(z, '_maxima_init_'):
866
+ maxima_z = z._maxima_init_()
867
+ else:
868
+ maxima_z = str(z)
869
+ if n == 0:
870
+ return "lambert_w(%s)" % maxima_z
871
+ else:
872
+ return "generalized_lambert_w(%s,%s)" % (n, maxima_z)
873
+
874
+ def _print_(self, n, z):
875
+ """
876
+ Custom _print_ method to avoid printing the branch number if
877
+ it is zero.
878
+
879
+ EXAMPLES::
880
+
881
+ sage: lambert_w(1) # needs sage.symbolic
882
+ lambert_w(1)
883
+ sage: lambert_w(0, x) # needs sage.symbolic
884
+ lambert_w(x)
885
+ """
886
+ if n == 0:
887
+ return "lambert_w(%s)" % z
888
+ else:
889
+ return "lambert_w(%s, %s)" % (n, z)
890
+
891
+ def _print_latex_(self, n, z):
892
+ r"""
893
+ Custom _print_latex_ method to avoid printing the branch
894
+ number if it is zero.
895
+
896
+ EXAMPLES::
897
+
898
+ sage: # needs sage.symbolic
899
+ sage: latex(lambert_w(1))
900
+ \operatorname{W}({1})
901
+ sage: latex(lambert_w(0, x))
902
+ \operatorname{W}({x})
903
+ sage: latex(lambert_w(1, x))
904
+ \operatorname{W_{1}}({x})
905
+ sage: latex(lambert_w(1, x + exp(x)))
906
+ \operatorname{W_{1}}({x + e^{x}})
907
+ """
908
+ if n == 0:
909
+ return r"\operatorname{W}({%s})" % z._latex_()
910
+ else:
911
+ return r"\operatorname{W_{%s}}({%s})" % (n, z._latex_())
912
+
913
+
914
+ lambert_w = Function_lambert_w()
915
+
916
+
917
+ class Function_exp_polar(BuiltinFunction):
918
+ def __init__(self):
919
+ r"""
920
+ Representation of a complex number in a polar form.
921
+
922
+ INPUT:
923
+
924
+ - ``z`` -- a complex number `z = a + ib`
925
+
926
+ OUTPUT:
927
+
928
+ A complex number with modulus `\exp(a)` and argument `b`.
929
+
930
+ If `-\pi < b \leq \pi` then `\operatorname{exp\_polar}(z)=\exp(z)`.
931
+ For other values of `b` the function is left unevaluated.
932
+
933
+ EXAMPLES:
934
+
935
+ The following expressions are evaluated using the exponential
936
+ function::
937
+
938
+ sage: exp_polar(pi*I/2) # needs sage.symbolic
939
+ I
940
+ sage: x = var('x', domain='real') # needs sage.symbolic
941
+ sage: exp_polar(-1/2*I*pi + x) # needs sage.symbolic
942
+ e^(-1/2*I*pi + x)
943
+
944
+ The function is left unevaluated when the imaginary part of the
945
+ input `z` does not satisfy `-\pi < \Im(z) \leq \pi`::
946
+
947
+ sage: exp_polar(2*pi*I) # needs sage.symbolic
948
+ exp_polar(2*I*pi)
949
+ sage: exp_polar(-4*pi*I) # needs sage.symbolic
950
+ exp_polar(-4*I*pi)
951
+
952
+ This fixes :issue:`18085`::
953
+
954
+ sage: integrate(1/sqrt(1+x^3), x, algorithm='sympy') # needs sage.symbolic
955
+ 1/3*x*gamma(1/3)*hypergeometric((1/3, 1/2), (4/3,), -x^3)/gamma(4/3)
956
+
957
+
958
+ .. SEEALSO::
959
+
960
+ `Examples in Sympy documentation <http://docs.sympy.org/latest/modules/functions/special.html?highlight=exp_polar>`_,
961
+ `Sympy source code of exp_polar <http://docs.sympy.org/0.7.4/_modules/sympy/functions/elementary/exponential.html>`_
962
+
963
+ REFERENCES:
964
+
965
+ :wikipedia:`Complex_number#Polar_form`
966
+ """
967
+ BuiltinFunction.__init__(self, "exp_polar",
968
+ latex_name=r"\operatorname{exp\_polar}",
969
+ conversions=dict(sympy='exp_polar'))
970
+
971
+ def _evalf_(self, z, parent=None, algorithm=None):
972
+ r"""
973
+ EXAMPLES:
974
+
975
+ If the imaginary part of `z` obeys `-\pi < z \leq \pi`, then
976
+ `\operatorname{exp\_polar}(z)` is evaluated as `\exp(z)`::
977
+
978
+ sage: exp_polar(1.0 + 2.0*I) # needs sage.symbolic
979
+ -1.13120438375681 + 2.47172667200482*I
980
+
981
+ If the imaginary part of `z` is outside of that interval the
982
+ expression is left unevaluated::
983
+
984
+ sage: exp_polar(-5.0 + 8.0*I) # needs sage.symbolic
985
+ exp_polar(-5.00000000000000 + 8.00000000000000*I)
986
+
987
+ An attempt to numerically evaluate such an expression raises an error::
988
+
989
+ sage: exp_polar(-5.0 + 8.0*I).n() # needs sage.symbolic
990
+ Traceback (most recent call last):
991
+ ...
992
+ ValueError: invalid attempt to numerically evaluate exp_polar()
993
+ """
994
+ if (not isinstance(z, Expression) and
995
+ bool(-const_pi < imag(z) <= const_pi)):
996
+ return exp(z)
997
+ else:
998
+ raise ValueError("invalid attempt to numerically evaluate exp_polar()")
999
+
1000
+ def _eval_(self, z):
1001
+ """
1002
+ EXAMPLES::
1003
+
1004
+ sage: exp_polar(3*I*pi) # needs sage.symbolic
1005
+ exp_polar(3*I*pi)
1006
+ sage: x = var('x', domain='real') # needs sage.symbolic
1007
+ sage: exp_polar(4*I*pi + x) # needs sage.symbolic
1008
+ exp_polar(4*I*pi + x)
1009
+
1010
+ TESTS:
1011
+
1012
+ Check that :issue:`24441` is fixed::
1013
+
1014
+ sage: exp_polar(arcsec(jacobi_sn(1.1*I*x, x))) # should be fast # needs sage.symbolic
1015
+ exp_polar(arcsec(jacobi_sn(1.10000000000000*I*x, x)))
1016
+ """
1017
+ try:
1018
+ im = z.imag_part()
1019
+ if not im.variables() and (-const_pi < im <= const_pi):
1020
+ return exp(z)
1021
+ except AttributeError:
1022
+ pass
1023
+
1024
+
1025
+ exp_polar = Function_exp_polar()
1026
+
1027
+
1028
+ class Function_harmonic_number_generalized(BuiltinFunction):
1029
+ r"""
1030
+ Harmonic and generalized harmonic number functions,
1031
+ defined by:
1032
+
1033
+ .. MATH::
1034
+
1035
+ H_{n}=H_{n,1}=\sum_{k=1}^n\frac{1}{k}
1036
+
1037
+ H_{n,m}=\sum_{k=1}^n\frac{1}{k^m}
1038
+
1039
+ They are also well-defined for complex argument, through:
1040
+
1041
+ .. MATH::
1042
+
1043
+ H_{s}=\int_0^1\frac{1-x^s}{1-x}
1044
+
1045
+ H_{s,m}=\zeta(m)-\zeta(m,s-1)
1046
+
1047
+ If called with a single argument, that argument is ``s`` and ``m`` is
1048
+ assumed to be 1 (the normal harmonic numbers `H_s`).
1049
+
1050
+ ALGORITHM:
1051
+
1052
+ Numerical evaluation is handled using the mpmath and FLINT libraries.
1053
+
1054
+ REFERENCES:
1055
+
1056
+ - :wikipedia:`Harmonic_number`
1057
+
1058
+ EXAMPLES:
1059
+
1060
+ Evaluation of integer, rational, or complex argument::
1061
+
1062
+ sage: harmonic_number(5) # needs mpmath
1063
+ 137/60
1064
+
1065
+ sage: # needs sage.symbolic
1066
+ sage: harmonic_number(3, 3)
1067
+ 251/216
1068
+ sage: harmonic_number(5/2)
1069
+ -2*log(2) + 46/15
1070
+ sage: harmonic_number(3., 3)
1071
+ zeta(3) - 0.0400198661225573
1072
+ sage: harmonic_number(3., 3.)
1073
+ 1.16203703703704
1074
+ sage: harmonic_number(3, 3).n(200)
1075
+ 1.16203703703703703703703...
1076
+ sage: harmonic_number(1 + I, 5)
1077
+ harmonic_number(I + 1, 5)
1078
+ sage: harmonic_number(5, 1. + I)
1079
+ 1.57436810798989 - 1.06194728851357*I
1080
+
1081
+ Solutions to certain sums are returned in terms of harmonic numbers::
1082
+
1083
+ sage: k = var('k') # needs sage.symbolic
1084
+ sage: sum(1/k^7,k,1,x) # needs sage.symbolic
1085
+ harmonic_number(x, 7)
1086
+
1087
+ Check the defining integral at a random integer::
1088
+
1089
+ sage: n = randint(10,100)
1090
+ sage: bool(SR(integrate((1-x^n)/(1-x),x,0,1)) == harmonic_number(n)) # needs sage.symbolic
1091
+ True
1092
+
1093
+ There are several special values which are automatically simplified::
1094
+
1095
+ sage: harmonic_number(0) # needs mpmath
1096
+ 0
1097
+ sage: harmonic_number(1) # needs mpmath
1098
+ 1
1099
+ sage: harmonic_number(x, 1) # needs sage.symbolic
1100
+ harmonic_number(x)
1101
+ """
1102
+
1103
+ def __init__(self):
1104
+ r"""
1105
+ EXAMPLES::
1106
+
1107
+ sage: loads(dumps(harmonic_number(x, 5))) # needs sage.symbolic
1108
+ harmonic_number(x, 5)
1109
+ sage: harmonic_number(x, x)._sympy_() # needs sympy sage.symbolic
1110
+ harmonic(x, x)
1111
+ """
1112
+ BuiltinFunction.__init__(self, "harmonic_number", nargs=2,
1113
+ conversions={'sympy': 'harmonic'})
1114
+
1115
+ def __call__(self, z, m=1, **kwds):
1116
+ r"""
1117
+ Custom call method allows the user to pass one argument or two. If
1118
+ one argument is passed, we assume it is ``z`` and that `m=1`.
1119
+
1120
+ EXAMPLES::
1121
+
1122
+ sage: harmonic_number(x) # needs sage.symbolic
1123
+ harmonic_number(x)
1124
+ sage: harmonic_number(x, 1) # needs sage.symbolic
1125
+ harmonic_number(x)
1126
+ sage: harmonic_number(x, 2) # needs sage.symbolic
1127
+ harmonic_number(x, 2)
1128
+ """
1129
+ return BuiltinFunction.__call__(self, z, m, **kwds)
1130
+
1131
+ def _eval_(self, z, m):
1132
+ """
1133
+ EXAMPLES::
1134
+
1135
+ sage: harmonic_number(5) # needs mpmath
1136
+ 137/60
1137
+
1138
+ sage: # needs sage.symbolic
1139
+ sage: harmonic_number(x, 0)
1140
+ x
1141
+ sage: harmonic_number(x, 1)
1142
+ harmonic_number(x)
1143
+ sage: harmonic_number(3, 3)
1144
+ 251/216
1145
+ sage: harmonic_number(3, 3).n() # this goes from rational to float
1146
+ 1.16203703703704
1147
+ sage: harmonic_number(3, 3.) # the following uses zeta functions
1148
+ 1.16203703703704
1149
+ sage: harmonic_number(3., 3)
1150
+ zeta(3) - 0.0400198661225573
1151
+ sage: harmonic_number(0.1, 5)
1152
+ zeta(5) - 0.650300133161038
1153
+ sage: harmonic_number(0.1, 5).n()
1154
+ 0.386627621982332
1155
+ sage: harmonic_number(3, 5/2)
1156
+ 1/27*sqrt(3) + 1/8*sqrt(2) + 1
1157
+
1158
+ TESTS::
1159
+
1160
+ sage: harmonic_number(int(3), int(3)) # needs sage.symbolic
1161
+ 1.162037037037037
1162
+ """
1163
+ if m == 0:
1164
+ return z
1165
+ elif m == 1:
1166
+ return harmonic_m1._eval_(z)
1167
+
1168
+ if z in ZZ and z >= 0:
1169
+ return sum(ZZ(k) ** (-m) for k in range(1, z + 1))
1170
+
1171
+ def _evalf_(self, z, m, parent=None, algorithm=None):
1172
+ """
1173
+ EXAMPLES::
1174
+
1175
+ sage: # needs sage.symbolic
1176
+ sage: harmonic_number(3., 3)
1177
+ zeta(3) - 0.0400198661225573
1178
+ sage: harmonic_number(3., 3.)
1179
+ 1.16203703703704
1180
+ sage: harmonic_number(3, 3).n(200)
1181
+ 1.16203703703703703703703...
1182
+ sage: harmonic_number(5, I).n()
1183
+ 2.36889632899995 - 3.51181956521611*I
1184
+ """
1185
+ if m == 0:
1186
+ if parent is None:
1187
+ return z
1188
+ return parent(z)
1189
+ elif m == 1:
1190
+ return harmonic_m1._evalf_(z, parent, algorithm)
1191
+
1192
+ return zeta(m) - hurwitz_zeta(m, z + 1)
1193
+
1194
+ def _maxima_init_evaled_(self, n, z):
1195
+ """
1196
+ EXAMPLES::
1197
+
1198
+ sage: maxima_calculus(harmonic_number(x, 2)) # needs sage.symbolic
1199
+ gen_harmonic_number(2,_SAGE_VAR_x)
1200
+ sage: maxima_calculus(harmonic_number(3, harmonic_number(x,3), hold=True)) # needs sage.symbolic
1201
+ 1/3^gen_harmonic_number(3,_SAGE_VAR_x)+1/2^gen_harmonic_number(3,_SAGE_VAR_x)+1
1202
+ """
1203
+ if isinstance(n, str):
1204
+ maxima_n = n
1205
+ elif hasattr(n, '_maxima_init_'):
1206
+ maxima_n = n._maxima_init_()
1207
+ else:
1208
+ maxima_n = str(n)
1209
+ if isinstance(z, str):
1210
+ maxima_z = z
1211
+ elif hasattr(z, '_maxima_init_'):
1212
+ maxima_z = z._maxima_init_()
1213
+ else:
1214
+ maxima_z = str(z)
1215
+ return "gen_harmonic_number(%s,%s)" % (maxima_z, maxima_n) # swap arguments
1216
+
1217
+ def _derivative_(self, n, m, diff_param=None):
1218
+ """
1219
+ The derivative of `H_{n,m}`.
1220
+
1221
+ EXAMPLES::
1222
+
1223
+ sage: # needs sage.symbolic
1224
+ sage: k,m,n = var('k,m,n')
1225
+ sage: sum(1/k, k, 1, x).diff(x)
1226
+ 1/6*pi^2 - harmonic_number(x, 2)
1227
+ sage: harmonic_number(x, 1).diff(x)
1228
+ 1/6*pi^2 - harmonic_number(x, 2)
1229
+ sage: harmonic_number(n, m).diff(n)
1230
+ -m*(harmonic_number(n, m + 1) - zeta(m + 1))
1231
+ sage: harmonic_number(n, m).diff(m)
1232
+ Traceback (most recent call last):
1233
+ ...
1234
+ ValueError: cannot differentiate harmonic_number in the second parameter
1235
+ """
1236
+ if diff_param == 1:
1237
+ raise ValueError("cannot differentiate harmonic_number in the second parameter")
1238
+ if m == 1:
1239
+ return harmonic_m1(n).diff()
1240
+ else:
1241
+ return m * (zeta(m + 1) - harmonic_number(n, m + 1))
1242
+
1243
+ def _print_(self, z, m):
1244
+ """
1245
+ EXAMPLES::
1246
+
1247
+ sage: harmonic_number(x) # needs sage.symbolic
1248
+ harmonic_number(x)
1249
+ sage: harmonic_number(x, 2) # needs sage.symbolic
1250
+ harmonic_number(x, 2)
1251
+ """
1252
+ if m == 1:
1253
+ return "harmonic_number(%s)" % z
1254
+ else:
1255
+ return "harmonic_number(%s, %s)" % (z, m)
1256
+
1257
+ def _print_latex_(self, z, m):
1258
+ """
1259
+ EXAMPLES::
1260
+
1261
+ sage: latex(harmonic_number(x)) # needs sage.symbolic
1262
+ H_{x}
1263
+ sage: latex(harmonic_number(x, 2)) # needs sage.symbolic
1264
+ H_{{x},{2}}
1265
+ """
1266
+ if m == 1:
1267
+ return r"H_{%s}" % z
1268
+ else:
1269
+ return r"H_{{%s},{%s}}" % (z, m)
1270
+
1271
+
1272
+ harmonic_number = Function_harmonic_number_generalized()
1273
+
1274
+
1275
+ class _Function_swap_harmonic(BuiltinFunction):
1276
+ r"""
1277
+ Harmonic number function with swapped arguments. For internal use only.
1278
+
1279
+ EXAMPLES::
1280
+
1281
+ sage: # needs sage.symbolic
1282
+ sage: maxima(harmonic_number(x, 2)) # maxima expect interface
1283
+ gen_harmonic_number(2,_SAGE_VAR_x)
1284
+ sage: from sage.calculus.calculus import symbolic_expression_from_maxima_string as sefms
1285
+ sage: sefms('gen_harmonic_number(3,x)')
1286
+ harmonic_number(x, 3)
1287
+ sage: from sage.interfaces.maxima_lib import maxima_lib, max_to_sr
1288
+ sage: c = maxima_lib(harmonic_number(x,2)); c
1289
+ gen_harmonic_number(2,_SAGE_VAR_x)
1290
+ sage: max_to_sr(c.ecl())
1291
+ harmonic_number(x, 2)
1292
+ """
1293
+ def __init__(self):
1294
+ BuiltinFunction.__init__(self, "_swap_harmonic", nargs=2)
1295
+
1296
+ def _eval_(self, a, b, **kwds):
1297
+ return harmonic_number(b, a, **kwds)
1298
+
1299
+
1300
+ _swap_harmonic = _Function_swap_harmonic()
1301
+
1302
+
1303
+ register_symbol(_swap_harmonic, {'maxima': 'gen_harmonic_number'})
1304
+ register_symbol(_swap_harmonic, {'maple': 'harmonic'})
1305
+
1306
+
1307
+ class Function_harmonic_number(BuiltinFunction):
1308
+ r"""
1309
+ Harmonic number function, defined by:
1310
+
1311
+ .. MATH::
1312
+
1313
+ H_{n}=H_{n,1}=\sum_{k=1}^n\frac1k
1314
+
1315
+ H_{s}=\int_0^1\frac{1-x^s}{1-x}
1316
+
1317
+ See the docstring for :meth:`Function_harmonic_number_generalized`.
1318
+
1319
+ This class exists as callback for ``harmonic_number`` returned by Maxima.
1320
+ """
1321
+
1322
+ def __init__(self):
1323
+ r"""
1324
+ EXAMPLES::
1325
+
1326
+ sage: k = var('k') # needs sage.symbolic
1327
+ sage: loads(dumps(sum(1/k, k, 1, x))) # needs sage.symbolic
1328
+ harmonic_number(x)
1329
+ sage: harmonic_number(x)._sympy_() # needs sympy sage.symbolic
1330
+ harmonic(x)
1331
+ """
1332
+ BuiltinFunction.__init__(self, "harmonic_number", nargs=1,
1333
+ conversions={'mathematica': 'HarmonicNumber',
1334
+ 'maple': 'harmonic',
1335
+ 'maxima': 'harmonic_number',
1336
+ 'sympy': 'harmonic'})
1337
+
1338
+ def _eval_(self, z, **kwds):
1339
+ """
1340
+ EXAMPLES::
1341
+
1342
+ sage: harmonic_number(0) # needs mpmath
1343
+ 0
1344
+ sage: harmonic_number(1) # needs mpmath
1345
+ 1
1346
+ sage: harmonic_number(20) # needs mpmath
1347
+ 55835135/15519504
1348
+ sage: harmonic_number(5/2) # needs sage.symbolic
1349
+ -2*log(2) + 46/15
1350
+ sage: harmonic_number(2*x) # needs sage.symbolic
1351
+ harmonic_number(2*x)
1352
+ """
1353
+ if z in ZZ:
1354
+ if z == 0:
1355
+ return Integer(0)
1356
+ elif z == 1:
1357
+ return Integer(1)
1358
+ elif z > 1:
1359
+ return _flint_harmonic_number(z)
1360
+ elif z in QQ:
1361
+ return psi1(z + 1) - psi1(1)
1362
+
1363
+ def _evalf_(self, z, parent=None, algorithm='mpmath'):
1364
+ """
1365
+ EXAMPLES::
1366
+
1367
+ sage: # needs mpmath
1368
+ sage: harmonic_number(20).n() # this goes from rational to float
1369
+ 3.59773965714368
1370
+ sage: harmonic_number(20).n(200)
1371
+ 3.59773965714368191148376906...
1372
+ sage: harmonic_number(20.) # this computes the integral with mpmath
1373
+ 3.59773965714368
1374
+ sage: harmonic_number(1.0*I) # needs sage.symbolic
1375
+ 0.671865985524010 + 1.07667404746858*I
1376
+ """
1377
+ return _mpmath_utils_call(_mpmath_harmonic, z, parent=parent)
1378
+
1379
+ def _derivative_(self, z, diff_param=None):
1380
+ """
1381
+ The derivative of `H_x`.
1382
+
1383
+ EXAMPLES::
1384
+
1385
+ sage: k = var('k') # needs sage.symbolic
1386
+ sage: sum(1/k, k, 1, x).diff(x) # needs sage.symbolic
1387
+ 1/6*pi^2 - harmonic_number(x, 2)
1388
+ """
1389
+ return zeta(2) - harmonic_number(z, 2)
1390
+
1391
+ def _print_latex_(self, z):
1392
+ """
1393
+ EXAMPLES::
1394
+
1395
+ sage: k = var('k') # needs sage.symbolic
1396
+ sage: latex(sum(1/k, k, 1, x)) # needs sage.symbolic
1397
+ H_{x}
1398
+ """
1399
+ return r"H_{%s}" % z
1400
+
1401
+
1402
+ harmonic_m1 = Function_harmonic_number()