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,1212 @@
1
+ # sage_setup: distribution = sagemath-categories
2
+ r"""
3
+ Miscellaneous special functions
4
+
5
+ This module provides easy access to many of Maxima and PARI's
6
+ special functions.
7
+
8
+ Maxima's special functions package (which includes spherical
9
+ harmonic functions, spherical Bessel functions (of the 1st and 2nd
10
+ kind), and spherical Hankel functions (of the 1st and 2nd kind))
11
+ was written by Barton Willis of the University of Nebraska at
12
+ Kearney. It is released under the terms of the General Public
13
+ License (GPL).
14
+
15
+ Support for elliptic functions and integrals was written by Raymond
16
+ Toy. It is placed under the terms of the General Public License
17
+ (GPL) that governs the distribution of Maxima.
18
+
19
+ Next, we summarize some of the properties of the functions
20
+ implemented here.
21
+
22
+ - **Spherical harmonics**: Laplace's equation in spherical coordinates is:
23
+
24
+ .. MATH::
25
+
26
+ \frac{1}{r^2} \frac{\partial}{\partial r}
27
+ \left( r^2 \frac{\partial f}{\partial r} \right) +
28
+ \frac{1}{r^2\sin\theta} \frac{\partial}{\partial \theta}
29
+ \left( \sin\theta \frac{\partial f}{\partial \theta} \right) +
30
+ \frac{1}{r^2\sin^2\theta} \frac{\partial^2 f}{\partial \varphi^2} = 0.
31
+
32
+ Note that the spherical coordinates `\theta` and `\varphi` are defined here
33
+ as follows: `\theta` is the colatitude or polar angle, ranging from
34
+ `0\leq\theta\leq\pi` and `\varphi` the azimuth or longitude, ranging from
35
+ `0\leq\varphi<2\pi`.
36
+
37
+ The general solution which remains finite towards infinity is a linear
38
+ combination of functions of the form
39
+
40
+ .. MATH::
41
+
42
+ r^{-1-\ell} \cos (m \varphi) P_\ell^m (\cos{\theta} )
43
+
44
+ and
45
+
46
+ .. MATH::
47
+
48
+ r^{-1-\ell} \sin (m \varphi) P_\ell^m (\cos{\theta} )
49
+
50
+ where `P_\ell^m` are the associated Legendre polynomials
51
+ (cf. :class:`~sage.functions.orthogonal_polys.Func_assoc_legendre_P`),
52
+ and with integer parameters `\ell \ge 0` and `m` from `0` to `\ell`. Put in
53
+ another way, the solutions with integer parameters `\ell \ge 0` and
54
+ `- \ell\leq m\leq \ell`, can be written as linear combinations of:
55
+
56
+ .. MATH::
57
+
58
+ U_{\ell,m}(r,\theta , \varphi ) =
59
+ r^{-1-\ell} Y_\ell^m( \theta , \varphi )
60
+
61
+ where the functions `Y` are the spherical harmonic functions with
62
+ parameters `\ell`, `m`, which can be written as:
63
+
64
+ .. MATH::
65
+
66
+ Y_\ell^m( \theta , \varphi ) =
67
+ \sqrt{ \frac{(2\ell+1)}{4\pi} \frac{(\ell-m)!}{(\ell+m)!} }
68
+ \, e^{i m \varphi } \, P_\ell^m ( \cos{\theta} ) .
69
+
70
+ The spherical harmonics obey the normalisation condition
71
+
72
+ .. MATH::
73
+
74
+ \int_{\theta=0}^\pi\int_{\varphi=0}^{2\pi}
75
+ Y_\ell^mY_{\ell'}^{m'*}\,d\Omega =
76
+ \delta_{\ell\ell'}\delta_{mm'}\quad\quad d\Omega =
77
+ \sin\theta\,d\varphi\,d\theta .
78
+
79
+ - The **incomplete elliptic integrals** (of the first kind, etc.) are:
80
+
81
+ .. MATH::
82
+
83
+ \begin{array}{c}
84
+ \displaystyle\int_0^\phi \frac{1}{\sqrt{1 - m\sin(x)^2}}\, dx,\\
85
+ \displaystyle\int_0^\phi \sqrt{1 - m\sin(x)^2}\, dx,\\
86
+ \displaystyle\int_0^\phi \frac{\sqrt{1-mt^2}}{\sqrt(1 - t^2)}\, dx,\\
87
+ \displaystyle\int_0^\phi
88
+ \frac{1}{\sqrt{1 - m\sin(x)^2\sqrt{1 - n\sin(x)^2}}}\, dx,
89
+ \end{array}
90
+
91
+ and the complete ones are obtained by taking `\phi =\pi/2`.
92
+
93
+ .. WARNING::
94
+
95
+ SciPy's versions are poorly documented and seem less accurate than the
96
+ Maxima and PARI versions. Typically they are limited by hardware floats
97
+ precision.
98
+
99
+ REFERENCES:
100
+
101
+ - Abramowitz and Stegun: *Handbook of Mathematical Functions* [AS1964]_
102
+
103
+ - :wikipedia:`Spherical_harmonics`
104
+
105
+ - :wikipedia:`Helmholtz_equation`
106
+
107
+ - `Online Encyclopedia of Special Functions
108
+ <http://algo.inria.fr/esf/index.html>`_
109
+
110
+ AUTHORS:
111
+
112
+ - David Joyner (2006-13-06): initial version
113
+
114
+ - David Joyner (2006-30-10): bug fixes to pari wrappers of Bessel
115
+ functions, hypergeometric_U
116
+
117
+ - William Stein (2008-02): Impose some sanity checks.
118
+
119
+ - David Joyner (2008-02-16): optional calls to scipy and replace all ``#random`` by ``...``
120
+
121
+ - David Joyner (2008-04-23): addition of elliptic integrals
122
+
123
+ - Eviatar Bach (2013): making elliptic integrals symbolic
124
+
125
+ - Eric Gourgoulhon (2022): add Condon-Shortley phase to spherical harmonics
126
+ """
127
+
128
+ # ****************************************************************************
129
+ # Copyright (C) 2006 William Stein <wstein@gmail.com>
130
+ # 2006 David Joyner <wdj@usna.edu>
131
+ #
132
+ # Distributed under the terms of the GNU General Public License (GPL)
133
+ #
134
+ # This code is distributed in the hope that it will be useful,
135
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
136
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
137
+ # General Public License for more details.
138
+ #
139
+ # The full text of the GPL is available at:
140
+ #
141
+ # https://www.gnu.org/licenses/
142
+ # ****************************************************************************
143
+
144
+ import sage.rings.abc
145
+
146
+ from sage.misc.functional import sqrt
147
+ from sage.misc.lazy_import import lazy_import
148
+ from sage.rings.integer import Integer
149
+ from sage.rings.integer_ring import ZZ
150
+ from sage.structure.element import parent as s_parent
151
+ from sage.symbolic.function import BuiltinFunction
152
+
153
+ lazy_import('sage.functions.jacobi', 'jacobi_am_f')
154
+ lazy_import('sage.functions.log', ['exp'])
155
+ lazy_import('sage.functions.trig', ['sin', 'cot'])
156
+
157
+ lazy_import('sage.misc.latex', 'latex')
158
+
159
+ lazy_import('sage.symbolic.constants', ['I', 'pi'])
160
+
161
+ lazy_import('sage.libs.mpmath.utils', 'call', as_='_mpmath_utils_call')
162
+ lazy_import('mpmath',
163
+ ['spherharm', 'ellipe', 'ellipf', 'ellipk', 'ellippi'],
164
+ as_=['_mpmath_spherharm', '_mpmath_ellipe', '_mpmath_ellipf',
165
+ '_mpmath_ellipk', '_mpmath_ellippi'])
166
+
167
+
168
+ class SphericalHarmonic(BuiltinFunction):
169
+ r"""
170
+ Return the spherical harmonic function `Y_n^m(\theta, \varphi)`.
171
+
172
+ For integers `n > -1`, `|m| \leq n`, simplification is done automatically.
173
+ Numeric evaluation is supported for complex `n` and `m`.
174
+
175
+ EXAMPLES::
176
+
177
+ sage: # needs sage.symbolic
178
+ sage: x, y = var('x, y')
179
+ sage: spherical_harmonic(3, 2, x, y)
180
+ 1/8*sqrt(30)*sqrt(7)*cos(x)*e^(2*I*y)*sin(x)^2/sqrt(pi)
181
+ sage: spherical_harmonic(3, 2, 1, 2)
182
+ 1/8*sqrt(30)*sqrt(7)*cos(1)*e^(4*I)*sin(1)^2/sqrt(pi)
183
+ sage: spherical_harmonic(3 + I, 2., 1, 2)
184
+ -0.351154337307488 - 0.415562233975369*I
185
+ sage: latex(spherical_harmonic(3, 2, x, y, hold=True))
186
+ Y_{3}^{2}\left(x, y\right)
187
+ sage: spherical_harmonic(1, 2, x, y)
188
+ 0
189
+
190
+ The degree `n` and the order `m` can be symbolic::
191
+
192
+ sage: # needs sage.symbolic
193
+ sage: n, m = var('n m')
194
+ sage: spherical_harmonic(n, m, x, y)
195
+ spherical_harmonic(n, m, x, y)
196
+ sage: latex(spherical_harmonic(n, m, x, y))
197
+ Y_{n}^{m}\left(x, y\right)
198
+ sage: diff(spherical_harmonic(n, m, x, y), x)
199
+ m*cot(x)*spherical_harmonic(n, m, x, y)
200
+ + sqrt(-(m + n + 1)*(m - n))*e^(-I*y)*spherical_harmonic(n, m + 1, x, y)
201
+ sage: diff(spherical_harmonic(n, m, x, y), y)
202
+ I*m*spherical_harmonic(n, m, x, y)
203
+
204
+ The convention regarding the Condon-Shortley phase `(-1)^m` is the same
205
+ as for SymPy's spherical harmonics and :wikipedia:`Spherical_harmonics`::
206
+
207
+ sage: # needs sage.symbolic
208
+ sage: spherical_harmonic(1, 1, x, y)
209
+ -1/4*sqrt(3)*sqrt(2)*e^(I*y)*sin(x)/sqrt(pi)
210
+ sage: from sympy import Ynm # needs sympy
211
+ sage: Ynm(1, 1, x, y).expand(func=True) # needs sympy
212
+ -sqrt(6)*exp(I*y)*sin(x)/(4*sqrt(pi))
213
+ sage: spherical_harmonic(1, 1, x, y) - Ynm(1, 1, x, y) # needs sympy
214
+ 0
215
+
216
+ It also agrees with SciPy's spherical harmonics::
217
+
218
+ sage: spherical_harmonic(1, 1, pi/2, pi).n() # abs tol 1e-14 # needs sage.symbolic
219
+ 0.345494149471335
220
+
221
+ sage: # needs scipy sage.symbolic
222
+ sage: import numpy as np
223
+ sage: if int(np.version.short_version[0]) > 1:
224
+ ....: _ = np.set_printoptions(legacy="1.25")
225
+ sage: import scipy.version
226
+ sage: if scipy.version.version < '1.15.0':
227
+ ....: from scipy.special import sph_harm # NB: arguments x and y are swapped
228
+ ....: sph_harm(1, 1, pi.n(), (pi/2).n()) # abs tol 1e-14
229
+ ....: else:
230
+ ....: from scipy.special import sph_harm_y
231
+ ....: sph_harm_y(1, 1, (pi/2).n(), pi.n()).item() # abs tol 1e-9
232
+ (0.3454941494713355-4.231083042742082e-17j)
233
+
234
+ Note that this convention differs from the one in Maxima, as revealed by
235
+ the sign difference for odd values of `m`::
236
+
237
+ sage: maxima.spherical_harmonic(1, 1, x, y).sage() # needs sage.symbolic
238
+ 1/2*sqrt(3/2)*e^(I*y)*sin(x)/sqrt(pi)
239
+
240
+ It follows that, contrary to Maxima, SageMath uses the same sign convention
241
+ for spherical harmonics as SymPy, SciPy, Mathematica and
242
+ :wikipedia:`Table_of_spherical_harmonics`.
243
+
244
+ REFERENCES:
245
+
246
+ - :wikipedia:`Spherical_harmonics`
247
+ """
248
+ def __init__(self):
249
+ r"""
250
+ TESTS::
251
+
252
+ sage: n, m, theta, phi = var('n m theta phi') # needs sage.symbolic
253
+ sage: spherical_harmonic(n, m, theta, phi)._sympy_() # needs sympy sage.symbolic
254
+ Ynm(n, m, theta, phi)
255
+ """
256
+ BuiltinFunction.__init__(self, 'spherical_harmonic', nargs=4,
257
+ conversions=dict(
258
+ maple='SphericalY',
259
+ mathematica='SphericalHarmonicY',
260
+ maxima='spherical_harmonic',
261
+ sympy='Ynm'))
262
+
263
+ def _eval_(self, n, m, theta, phi, **kwargs):
264
+ r"""
265
+ TESTS::
266
+
267
+ sage: # needs sage.symbolic
268
+ sage: x, y = var('x y')
269
+ sage: spherical_harmonic(1, 2, x, y)
270
+ 0
271
+ sage: spherical_harmonic(1, -2, x, y)
272
+ 0
273
+ sage: spherical_harmonic(1/2, 2, x, y)
274
+ spherical_harmonic(1/2, 2, x, y)
275
+ sage: spherical_harmonic(3, 2, x, y)
276
+ 1/8*sqrt(30)*sqrt(7)*cos(x)*e^(2*I*y)*sin(x)^2/sqrt(pi)
277
+ sage: spherical_harmonic(3, 2, 1, 2)
278
+ 1/8*sqrt(30)*sqrt(7)*cos(1)*e^(4*I)*sin(1)^2/sqrt(pi)
279
+ sage: spherical_harmonic(3 + I, 2., 1, 2)
280
+ -0.351154337307488 - 0.415562233975369*I
281
+
282
+ Check that :issue:`20939` is fixed::
283
+
284
+ sage: ex = spherical_harmonic(3, 2, 1, 2*pi/3) # needs sage.symbolic
285
+ sage: QQbar(ex * sqrt(pi)/cos(1)/sin(1)^2).minpoly() # needs sage.rings.number_field sage.symbolic
286
+ x^4 + 105/32*x^2 + 11025/1024
287
+
288
+ Check whether Sage yields correct results compared to Maxima,
289
+ up to the Condon-Shortley phase factor `(-1)^m`
290
+ (see :issue:`25034` and :issue:`33117`)::
291
+
292
+ sage: # needs sage.symbolic
293
+ sage: spherical_harmonic(1, 1, pi/3, pi/6).n() # abs tol 1e-14
294
+ -0.259120612103502 - 0.149603355150537*I
295
+ sage: maxima.spherical_harmonic(1, 1, pi/3, pi/6).n() # abs tol 1e-14
296
+ 0.259120612103502 + 0.149603355150537*I
297
+ sage: spherical_harmonic(1, -1, pi/3, pi/6).n() # abs tol 1e-14
298
+ 0.259120612103502 - 0.149603355150537*I
299
+ sage: maxima.spherical_harmonic(1, -1, pi/3, pi/6).n() # abs tol 1e-14
300
+ -0.259120612103502 + 0.149603355150537*I
301
+
302
+ Check that :issue:`33501` is fixed::
303
+
304
+ sage: spherical_harmonic(2, 1, x, y) # needs sage.symbolic
305
+ -1/4*sqrt(6)*sqrt(5)*cos(x)*e^(I*y)*sin(x)/sqrt(pi)
306
+ sage: spherical_harmonic(5, -3, x, y) # needs sage.symbolic
307
+ -1/32*(9*sqrt(385)*sin(x)^4 - 8*sqrt(385)*sin(x)^2)*e^(-3*I*y)*sin(x)/sqrt(pi)
308
+ """
309
+ if n in ZZ and m in ZZ and n > -1:
310
+ if abs(m) > n:
311
+ return ZZ(0)
312
+ if m == 0 and theta.is_zero():
313
+ return sqrt((2*n+1)/4/pi)
314
+ from sage.arith.misc import factorial
315
+ from sage.functions.trig import cos
316
+ from sage.functions.orthogonal_polys import gen_legendre_P
317
+ res = (sqrt(factorial(n-m) * (2*n+1) / (4*pi * factorial(n+m)))
318
+ * gen_legendre_P(n, m, cos(theta))
319
+ * exp(I*m*phi)).simplify_trig()
320
+ res = res.substitute({sqrt(sin(theta)**2): sin(theta)})
321
+ return res
322
+
323
+ def _evalf_(self, n, m, theta, phi, parent=None, **kwds):
324
+ r"""
325
+ TESTS::
326
+
327
+ sage: spherical_harmonic(3 + I, 2, 1, 2).n(100) # needs sage.symbolic
328
+ -0.35115433730748836508201061672 - 0.41556223397536866209990358597*I
329
+ sage: spherical_harmonic(I, I, I, I).n() # needs sage.symbolic
330
+ 7.66678546069894 - 0.265754432549751*I
331
+
332
+ Consistency with ``_eval_``::
333
+
334
+ sage: d = lambda a, b: abs(spherical_harmonic(a, b, 1., 2.)
335
+ ....: - spherical_harmonic(a, b, 1, 2).n())
336
+ sage: ab = [(0, 0), (1, -1), (1, 0), (1, 1), (3, 2), (3, 3)]
337
+ sage: all(d(a, b) < 1e-14 for a, b in ab) # needs sage.symbolic
338
+ True
339
+ """
340
+ return _mpmath_utils_call(_mpmath_spherharm, n, m, theta, phi, parent=parent)
341
+
342
+ def _derivative_(self, n, m, theta, phi, diff_param):
343
+ r"""
344
+ TESTS::
345
+
346
+ sage: # needs sage.symbolic
347
+ sage: n, m, theta, phi = var('n m theta phi')
348
+ sage: Ynm = spherical_harmonic(n, m, theta, phi)
349
+ sage: DY_theta = Ynm.diff(theta); DY_theta
350
+ m*cot(theta)*spherical_harmonic(n, m, theta, phi)
351
+ + sqrt(-(m + n + 1)*(m - n))*e^(-I*phi)*spherical_harmonic(n, m + 1, theta, phi)
352
+ sage: Ynm.diff(phi)
353
+ I*m*spherical_harmonic(n, m, theta, phi)
354
+
355
+ Check that :issue:`33117` is fixed::
356
+
357
+ sage: # needs sage.symbolic
358
+ sage: DY_theta.subs({n: 1, m: 0})
359
+ -1/2*sqrt(3)*sin(theta)/sqrt(pi)
360
+ sage: Ynm.subs({n: 1, m: 0}).diff(theta)
361
+ -1/2*sqrt(3)*sin(theta)/sqrt(pi)
362
+ sage: bool(DY_theta.subs({n: 1, m: 0}) == Ynm.subs({n: 1, m: 0}).diff(theta))
363
+ True
364
+ sage: bool(DY_theta.subs({n: 1, m: 1}) == Ynm.subs({n: 1, m: 1}).diff(theta))
365
+ True
366
+ sage: bool(DY_theta.subs({n: 1, m: -1}) == Ynm.subs({n: 1, m: -1}).diff(theta))
367
+ True
368
+ """
369
+ if diff_param == 2:
370
+ return (m * cot(theta) * spherical_harmonic(n, m, theta, phi) +
371
+ sqrt((n - m) * (n + m + 1)) * exp(-I * phi) *
372
+ spherical_harmonic(n, m + 1, theta, phi))
373
+ if diff_param == 3:
374
+ return I * m * spherical_harmonic(n, m, theta, phi)
375
+
376
+ raise ValueError('only derivative with respect to theta or phi'
377
+ ' supported')
378
+
379
+ def _latex_(self):
380
+ r"""
381
+ TESTS::
382
+
383
+ sage: latex(spherical_harmonic)
384
+ Y_n^m
385
+ """
386
+ return r"Y_n^m"
387
+
388
+ def _print_latex_(self, n, m, theta, phi):
389
+ r"""
390
+ TESTS::
391
+
392
+ sage: y = var('y') # needs sage.symbolic
393
+ sage: latex(spherical_harmonic(3, 2, x, y, hold=True)) # needs sage.symbolic
394
+ Y_{3}^{2}\left(x, y\right)
395
+ """
396
+ return r"Y_{{{}}}^{{{}}}\left({}, {}\right)".format(
397
+ latex(n), latex(m), latex(theta), latex(phi))
398
+
399
+
400
+ spherical_harmonic = SphericalHarmonic()
401
+
402
+
403
+ # elliptic functions and integrals
404
+
405
+ def elliptic_j(z, prec=53):
406
+ r"""
407
+ Return the elliptic modular `j`-function evaluated at `z`.
408
+
409
+ INPUT:
410
+
411
+ - ``z`` -- complex; a complex number with positive imaginary part
412
+
413
+ - ``prec`` -- (default: 53) precision in bits for the complex field
414
+
415
+ OUTPUT: (complex) the value of `j(z)`
416
+
417
+ ALGORITHM:
418
+
419
+ Calls the ``pari`` function ``ellj()``.
420
+
421
+ AUTHOR:
422
+
423
+ John Cremona
424
+
425
+ EXAMPLES::
426
+
427
+ sage: # needs sage.libs.pari
428
+ sage: elliptic_j(CC(i)) # needs sage.rings.real_mpfr sage.symbolic
429
+ 1728.00000000000
430
+ sage: elliptic_j(sqrt(-2.0)) # needs sage.rings.complex_double
431
+ 8000.00000000000
432
+ sage: z = ComplexField(100)(1, sqrt(11))/2 # needs sage.rings.real_mpfr sage.symbolic
433
+ sage: elliptic_j(z) # needs sage.rings.real_mpfr sage.symbolic
434
+ -32768.000...
435
+ sage: elliptic_j(z).real().round() # needs sage.rings.real_mpfr sage.symbolic
436
+ -32768
437
+
438
+ ::
439
+
440
+ sage: tau = (1 + sqrt(-163))/2 # needs sage.symbolic
441
+ sage: (-elliptic_j(tau.n(100)).real().round())^(1/3) # needs sage.symbolic
442
+ 640320
443
+
444
+ This example shows the need for higher precision than the default one of
445
+ the `ComplexField`, see :issue:`28355`::
446
+
447
+ sage: # needs sage.symbolic
448
+ sage: -elliptic_j(tau) # rel tol 1e-2
449
+ 2.62537412640767e17 - 732.558854258998*I
450
+ sage: -elliptic_j(tau, 75) # rel tol 1e-2
451
+ 2.625374126407680000000e17 - 0.0001309913593909879441262*I
452
+ sage: -elliptic_j(tau, 100) # rel tol 1e-2
453
+ 2.6253741264076799999999999999e17 - 1.3012822400356887122945119790e-12*I
454
+ sage: (-elliptic_j(tau, 100).real().round())^(1/3)
455
+ 640320
456
+ """
457
+ CC = z.parent()
458
+ if not isinstance(CC, sage.rings.abc.ComplexField):
459
+ from sage.rings.complex_mpfr import ComplexField
460
+ CC = ComplexField(prec)
461
+ try:
462
+ z = CC(z)
463
+ except ValueError:
464
+ raise ValueError("elliptic_j only defined for complex arguments.")
465
+ from sage.libs.pari import pari
466
+ return CC(pari(z).ellj())
467
+
468
+
469
+ # elliptic integrals
470
+
471
+ class EllipticE(BuiltinFunction):
472
+ r"""
473
+ Return the incomplete elliptic integral of the
474
+ second kind:
475
+
476
+ .. MATH::
477
+
478
+ E(\varphi\,|\,m)=\int_0^\varphi \sqrt{1 - m\sin(x)^2}\, dx.
479
+
480
+ EXAMPLES::
481
+
482
+ sage: z = var("z") # needs sage.symbolic
483
+ sage: elliptic_e(z, 1) # needs sage.symbolic
484
+ elliptic_e(z, 1)
485
+ sage: elliptic_e(z, 1).simplify() # not tested # needs sage.symbolic
486
+ 2*round(z/pi) - sin(pi*round(z/pi) - z)
487
+ sage: elliptic_e(z, 0) # needs sage.symbolic
488
+ z
489
+ sage: elliptic_e(0.5, 0.1) # abs tol 2e-15 # needs mpmath
490
+ 0.498011394498832
491
+ sage: elliptic_e(1/2, 1/10).n(200) # needs sage.symbolic
492
+ 0.4980113944988315331154610406...
493
+
494
+ .. SEEALSO::
495
+
496
+ - Taking `\varphi = \pi/2` gives
497
+ :func:`elliptic_ec()<sage.functions.special.EllipticEC>`.
498
+
499
+ - Taking `\varphi = \operatorname{arc\,sin}(\operatorname{sn}(u,m))`
500
+ gives :func:`elliptic_eu()<sage.functions.special.EllipticEU>`.
501
+
502
+ REFERENCES:
503
+
504
+ - :wikipedia:`Elliptic_integral#Incomplete_elliptic_integral_of_the_second_kind`
505
+
506
+ - :wikipedia:`Jacobi_elliptic_functions`
507
+ """
508
+ def __init__(self):
509
+ r"""
510
+ TESTS::
511
+
512
+ sage: loads(dumps(elliptic_e))
513
+ elliptic_e
514
+ sage: elliptic_e(x, x)._sympy_() # needs sympy sage.symbolic
515
+ elliptic_e(x, x)
516
+
517
+ Check that :issue:`34085` is fixed::
518
+
519
+ sage: _ = var("x y") # needs sage.symbolic
520
+ sage: fricas(elliptic_e(x, y)) # optional - fricas, needs sage.symbolic
521
+ ellipticE(sin(x),y)
522
+
523
+ However, the conversion is only correct in the interval
524
+ `[-\pi/2, \pi/2]`::
525
+
526
+ sage: fricas(elliptic_e(x, y)).D(x).sage()/elliptic_e(x, y).diff(x) # optional - fricas, needs sage.symbolic
527
+ cos(x)/sqrt(-sin(x)^2 + 1)
528
+
529
+ Numerically::
530
+
531
+ sage: f = lambda x, y: elliptic_e(arcsin(x), y).subs(x=x, y=y)
532
+ sage: g = lambda x, y: fricas.ellipticE(x, y).sage()
533
+ sage: d = lambda x, y: f(x, y) - g(x, y)
534
+ sage: [d(N(-pi/2 + x), y) # abs tol 1e-8 # optional - fricas, needs sage.symbolic
535
+ ....: for x in range(1, 3) for y in range(-2, 2)]
536
+ [0.000000000000000,
537
+ 0.000000000000000,
538
+ 0.000000000000000,
539
+ 0.000000000000000,
540
+ 5.55111512312578e-17,
541
+ 0.000000000000000,
542
+ 0.000000000000000,
543
+ 0.000000000000000]
544
+ """
545
+ BuiltinFunction.__init__(self, 'elliptic_e', nargs=2,
546
+ # Maple conversion left out since it uses
547
+ # k instead of m as the second argument
548
+ conversions=dict(mathematica='EllipticE',
549
+ maxima='elliptic_e',
550
+ sympy='elliptic_e',
551
+ fricas='((x,y)+->ellipticE(sin(x), y))'))
552
+
553
+ def _eval_(self, z, m):
554
+ """
555
+ EXAMPLES::
556
+
557
+ sage: # needs sage.symbolic
558
+ sage: z = var("z")
559
+ sage: elliptic_e(0, x)
560
+ 0
561
+ sage: elliptic_e(pi/2, x)
562
+ elliptic_ec(x)
563
+ sage: elliptic_e(z, 0)
564
+ z
565
+ sage: elliptic_e(z, 1)
566
+ elliptic_e(z, 1)
567
+
568
+ Here arccoth doesn't have 1 in its domain, so we just hold the expression::
569
+
570
+ sage: elliptic_e(arccoth(1), x^2*e) # needs sage.symbolic
571
+ elliptic_e(+Infinity, x^2*e)
572
+ """
573
+ if z == 0:
574
+ return Integer(0)
575
+ elif z == pi / 2:
576
+ return elliptic_ec(m)
577
+ elif m == 0:
578
+ return z
579
+
580
+ def _evalf_(self, z, m, parent=None, algorithm=None):
581
+ """
582
+ EXAMPLES::
583
+
584
+ sage: elliptic_e(0.5, 0.1) # needs mpmath
585
+ 0.498011394498832
586
+ sage: elliptic_e(1/2, 1/10).n(200) # needs sage.symbolic
587
+ 0.4980113944988315331154610406...
588
+ sage: elliptic_e(I, I).n() # needs sage.symbolic
589
+ -0.189847437084712 + 1.03209769372160*I
590
+
591
+ TESTS:
592
+
593
+ This gave an error in Maxima (:issue:`15046`)::
594
+
595
+ sage: elliptic_e(2.5, 2.5) # needs mpmath
596
+ 0.535647771608740 + 1.63996015168665*I
597
+ """
598
+ R = parent or s_parent(z)
599
+ return _mpmath_utils_call(_mpmath_ellipe, z, m, parent=R)
600
+
601
+ def _derivative_(self, z, m, diff_param):
602
+ """
603
+ EXAMPLES::
604
+
605
+ sage: x, z = var('x,z') # needs sage.symbolic
606
+ sage: elliptic_e(z, x).diff(z, 1) # needs sage.symbolic
607
+ sqrt(-x*sin(z)^2 + 1)
608
+ sage: elliptic_e(z, x).diff(x, 1) # needs sage.symbolic
609
+ 1/2*(elliptic_e(z, x) - elliptic_f(z, x))/x
610
+ """
611
+ if diff_param == 0:
612
+ return sqrt(Integer(1) - m * sin(z) ** Integer(2))
613
+ elif diff_param == 1:
614
+ return (elliptic_e(z, m) - elliptic_f(z, m)) / (Integer(2) * m)
615
+
616
+ def _print_latex_(self, z, m):
617
+ r"""
618
+ EXAMPLES::
619
+
620
+ sage: latex(elliptic_e(pi, x)) # needs sage.symbolic
621
+ E(\pi\,|\,x)
622
+ """
623
+ return r"E(%s\,|\,%s)" % (latex(z), latex(m))
624
+
625
+
626
+ elliptic_e = EllipticE()
627
+
628
+
629
+ class EllipticEC(BuiltinFunction):
630
+ r"""
631
+ Return the complete elliptic integral of the second kind:
632
+
633
+ .. MATH::
634
+
635
+ E(m)=\int_0^{\pi/2} \sqrt{1 - m\sin(x)^2}\, dx.
636
+
637
+ EXAMPLES::
638
+
639
+ sage: elliptic_ec(0.1) # needs mpmath
640
+ 1.53075763689776
641
+ sage: elliptic_ec(x).diff() # needs sage.symbolic
642
+ 1/2*(elliptic_ec(x) - elliptic_kc(x))/x
643
+
644
+ .. SEEALSO::
645
+
646
+ - :func:`elliptic_e()<sage.functions.special.EllipticE>`.
647
+
648
+ REFERENCES:
649
+
650
+ - :wikipedia:`Elliptic_integral#Complete_elliptic_integral_of_the_second_kind`
651
+ """
652
+ def __init__(self):
653
+ """
654
+ EXAMPLES::
655
+
656
+ sage: loads(dumps(elliptic_ec))
657
+ elliptic_ec
658
+ sage: elliptic_ec(x)._sympy_() # needs sage.symbolic
659
+ elliptic_e(x)
660
+
661
+ TESTS::
662
+
663
+ sage: fricas(elliptic_ec(x)) # optional - fricas, needs sage.symbolic
664
+ ellipticE(x)
665
+
666
+ sage: elliptic_ec(0.5) # abs tol 1e-8 # needs sage.symbolic
667
+ 1.35064388104768
668
+ sage: fricas.ellipticE(0.5).sage() # abs tol 1e-8 # optional - fricas, needs sage.symbolic
669
+ 1.3506438810476755025201749
670
+ """
671
+ BuiltinFunction.__init__(self, 'elliptic_ec', nargs=1, latex_name='E',
672
+ conversions=dict(mathematica='EllipticE',
673
+ maxima='elliptic_ec',
674
+ sympy='elliptic_e',
675
+ fricas='ellipticE'))
676
+
677
+ def _eval_(self, x):
678
+ """
679
+ EXAMPLES::
680
+
681
+ sage: elliptic_ec(0) # needs sage.symbolic
682
+ 1/2*pi
683
+ sage: elliptic_ec(1) # needs sage.symbolic
684
+ 1
685
+ sage: elliptic_ec(x) # needs sage.symbolic
686
+ elliptic_ec(x)
687
+ """
688
+ if x == 0:
689
+ return pi / Integer(2)
690
+ elif x == 1:
691
+ return Integer(1)
692
+
693
+ def _evalf_(self, x, parent=None, algorithm=None):
694
+ """
695
+ EXAMPLES::
696
+
697
+ sage: elliptic_ec(sqrt(2)/2).n() # needs sage.symbolic
698
+ 1.23742252487318
699
+ sage: elliptic_ec(sqrt(2)/2).n(200) # needs sage.symbolic
700
+ 1.237422524873181672854746084083...
701
+ sage: elliptic_ec(I).n() # needs sage.symbolic
702
+ 1.63241178144043 - 0.369219492375499*I
703
+ """
704
+ R = parent or s_parent(x)
705
+ return _mpmath_utils_call(_mpmath_ellipe, x, parent=R)
706
+
707
+ def _derivative_(self, x, diff_param):
708
+ """
709
+ EXAMPLES::
710
+
711
+ sage: elliptic_ec(x).diff() # needs sage.symbolic
712
+ 1/2*(elliptic_ec(x) - elliptic_kc(x))/x
713
+ """
714
+ return (elliptic_ec(x) - elliptic_kc(x)) / (Integer(2) * x)
715
+
716
+
717
+ elliptic_ec = EllipticEC()
718
+
719
+
720
+ class EllipticEU(BuiltinFunction):
721
+ r"""
722
+ Return Jacobi's form of the incomplete elliptic integral of the second kind:
723
+
724
+ .. MATH::
725
+
726
+ E(u,m)=
727
+ \int_0^u \mathrm{dn}(x,m)^2\, dx = \int_0^\tau
728
+ \frac{\sqrt{1-m x^2}}{\sqrt{1-x^2}}\, dx.
729
+
730
+ where `\tau = \mathrm{sn}(u, m)`.
731
+
732
+ Also, ``elliptic_eu(u, m) = elliptic_e(asin(sn(u,m)),m)``.
733
+
734
+ EXAMPLES::
735
+
736
+ sage: elliptic_eu(0.5, 0.1) # needs mpmath
737
+ 0.496054551286597
738
+
739
+ .. SEEALSO::
740
+
741
+ - :func:`elliptic_e()<sage.functions.special.EllipticE>`.
742
+
743
+ REFERENCES:
744
+
745
+ - :wikipedia:`Elliptic_integral#Incomplete_elliptic_integral_of_the_second_kind`
746
+
747
+ - :wikipedia:`Jacobi_elliptic_functions`
748
+ """
749
+ def __init__(self):
750
+ r"""
751
+ EXAMPLES::
752
+
753
+ sage: loads(dumps(elliptic_eu))
754
+ elliptic_eu
755
+ """
756
+ BuiltinFunction.__init__(self, 'elliptic_eu', nargs=2,
757
+ conversions=dict(maxima='elliptic_eu'))
758
+
759
+ def _eval_(self, u, m):
760
+ """
761
+ EXAMPLES::
762
+
763
+ sage: elliptic_eu(1, 1) # needs sage.symbolic
764
+ elliptic_eu(1, 1)
765
+ """
766
+ pass
767
+
768
+ def _evalf_(self, u, m, parent=None, algorithm=None):
769
+ """
770
+ EXAMPLES::
771
+
772
+ sage: elliptic_eu(1, 1).n() # needs sage.symbolic
773
+ 0.761594155955765
774
+ sage: elliptic_eu(1, 1).n(200) # needs sage.symbolic
775
+ 0.7615941559557648881194582...
776
+ """
777
+ R = parent or s_parent(u)
778
+ return _mpmath_utils_call(elliptic_eu_f, u, m, parent=R)
779
+
780
+ def _derivative_(self, u, m, diff_param):
781
+ """
782
+ EXAMPLES::
783
+
784
+ sage: x, m = var('x,m') # needs sage.symbolic
785
+ sage: elliptic_eu(x, m).diff(x) # needs sage.symbolic
786
+ sqrt(-m*jacobi_sn(x, m)^2 + 1)*jacobi_dn(x, m)
787
+ sage: elliptic_eu(x, m).diff(m) # needs sage.symbolic
788
+ 1/2*(elliptic_eu(x, m)
789
+ - elliptic_f(jacobi_am(x, m), m))/m
790
+ - 1/2*(m*jacobi_cn(x, m)*jacobi_sn(x, m)
791
+ - (m - 1)*x
792
+ - elliptic_eu(x, m)*jacobi_dn(x, m))*sqrt(-m*jacobi_sn(x, m)^2 + 1)/((m - 1)*m)
793
+ """
794
+ from sage.functions.jacobi import jacobi, jacobi_am
795
+ if diff_param == 0:
796
+ return (sqrt(-m * jacobi('sn', u, m) ** Integer(2) +
797
+ Integer(1)) * jacobi('dn', u, m))
798
+ elif diff_param == 1:
799
+ return (Integer(1) / Integer(2) *
800
+ (elliptic_eu(u, m) - elliptic_f(jacobi_am(u, m), m)) / m -
801
+ Integer(1) / Integer(2) * sqrt(-m * jacobi('sn', u, m) **
802
+ Integer(2) + Integer(1)) * (m * jacobi('sn', u, m) *
803
+ jacobi('cn', u, m) - (m - Integer(1)) * u -
804
+ elliptic_eu(u, m) * jacobi('dn', u, m)) /
805
+ ((m - Integer(1)) * m))
806
+
807
+ def _print_latex_(self, u, m):
808
+ """
809
+ EXAMPLES::
810
+
811
+ sage: latex(elliptic_eu(1, x)) # needs sage.symbolic
812
+ E(1;x)
813
+ """
814
+ return r"E(%s;%s)" % (latex(u), latex(m))
815
+
816
+
817
+ def elliptic_eu_f(u, m):
818
+ r"""
819
+ Internal function for numeric evaluation of ``elliptic_eu``, defined as
820
+ `E\left(\operatorname{am}(u, m)|m\right)`, where `E` is the incomplete
821
+ elliptic integral of the second kind and `\operatorname{am}` is the Jacobi
822
+ amplitude function.
823
+
824
+ EXAMPLES::
825
+
826
+ sage: from sage.functions.special import elliptic_eu_f
827
+ sage: elliptic_eu_f(0.5, 0.1) # needs mpmath
828
+ mpf('0.49605455128659691')
829
+ """
830
+ from mpmath import mp as ctx
831
+ prec = ctx.prec
832
+ try:
833
+ u = ctx.convert(u)
834
+ m = ctx.convert(m)
835
+ ctx.prec += 10
836
+ return ctx.ellipe(jacobi_am_f(u, m), m)
837
+ finally:
838
+ ctx.prec = prec
839
+
840
+
841
+ elliptic_eu = EllipticEU()
842
+
843
+
844
+ class EllipticF(BuiltinFunction):
845
+ r"""
846
+ Return the incomplete elliptic integral of the first kind.
847
+
848
+ .. MATH::
849
+
850
+ F(\varphi\,|\,m)=\int_0^\varphi \frac{dx}{\sqrt{1 - m\sin(x)^2}},
851
+
852
+ Taking `\varphi = \pi/2` gives
853
+ :func:`elliptic_kc()<sage.functions.special.EllipticKC>`.
854
+
855
+ EXAMPLES::
856
+
857
+ sage: z = var("z") # needs sage.symbolic
858
+ sage: elliptic_f(z, 0) # needs sage.symbolic
859
+ z
860
+ sage: elliptic_f(z, 1).simplify() # needs sage.symbolic
861
+ log(tan(1/4*pi + 1/2*z))
862
+ sage: elliptic_f(0.2, 0.1) # needs mpmath
863
+ 0.200132506747543
864
+
865
+ .. SEEALSO::
866
+
867
+ - :func:`elliptic_e()<sage.functions.special.EllipticE>`.
868
+
869
+ REFERENCES:
870
+
871
+ - :wikipedia:`Elliptic_integral#Incomplete_elliptic_integral_of_the_first_kind`
872
+ """
873
+ def __init__(self):
874
+ r"""
875
+ EXAMPLES::
876
+
877
+ sage: loads(dumps(elliptic_f))
878
+ elliptic_f
879
+ sage: elliptic_f(x, 2)._sympy_() # needs sympy sage.symbolic
880
+ elliptic_f(x, 2)
881
+
882
+ Check that :issue:`34186` is fixed::
883
+
884
+ sage: _ = var("x y") # needs sage.symbolic
885
+ sage: fricas(elliptic_f(x, y)) # optional - fricas, needs sage.symbolic
886
+ ellipticF(sin(x),y)
887
+
888
+ However, the conversion is only correct in the interval
889
+ `[-\pi/2, \pi/2]`::
890
+
891
+ sage: fricas(elliptic_f(x, y)).D(x).sage()/elliptic_f(x, y).diff(x) # optional - fricas, needs sage.symbolic
892
+ cos(x)/sqrt(-sin(x)^2 + 1)
893
+
894
+ Numerically::
895
+
896
+ sage: f = lambda x, y: elliptic_f(arcsin(x), y).subs(x=x, y=y)
897
+ sage: g = lambda x, y: fricas.ellipticF(x, y).sage()
898
+ sage: d = lambda x, y: f(x, y) - g(x, y)
899
+ sage: [d(N(-pi/2 + x), y) # abs tol 1e-8 # optional - fricas, needs sage.symbolic
900
+ ....: for x in range(1, 3) for y in range(-2,2)]
901
+ [0.000000000000000,
902
+ 0.000000000000000,
903
+ 0.000000000000000,
904
+ 0.000000000000000,
905
+ 5.55111512312578e-17,
906
+ 0.000000000000000,
907
+ 0.000000000000000,
908
+ 0.000000000000000]
909
+ """
910
+ BuiltinFunction.__init__(self, 'elliptic_f', nargs=2,
911
+ conversions=dict(mathematica='EllipticF',
912
+ maxima='elliptic_f',
913
+ fricas='((x,y)+->ellipticF(sin(x), y))',
914
+ sympy='elliptic_f'))
915
+
916
+ def _eval_(self, z, m):
917
+ """
918
+ EXAMPLES::
919
+
920
+ sage: # needs sage.symbolic
921
+ sage: elliptic_f(x, 1)
922
+ elliptic_f(x, 1)
923
+ sage: elliptic_f(x, 0)
924
+ x
925
+ sage: elliptic_f(0, 1)
926
+ 0
927
+ sage: elliptic_f(pi/2, x)
928
+ elliptic_kc(x)
929
+ """
930
+ if m == 0:
931
+ return z
932
+ elif z == 0:
933
+ return Integer(0)
934
+ elif z == pi / 2:
935
+ return elliptic_kc(m)
936
+
937
+ def _evalf_(self, z, m, parent=None, algorithm=None):
938
+ """
939
+ EXAMPLES::
940
+
941
+ sage: elliptic_f(1, 1).n() # needs sage.symbolic
942
+ 1.22619117088352
943
+ sage: elliptic_f(1, 1).n(200) # needs sage.symbolic
944
+ 1.22619117088351707081306096...
945
+ sage: elliptic_f(I, I).n() # needs sage.symbolic
946
+ 0.149965060031782 + 0.925097284105771*I
947
+ """
948
+ R = parent or s_parent(z)
949
+ return _mpmath_utils_call(_mpmath_ellipf, z, m, parent=R)
950
+
951
+ def _derivative_(self, z, m, diff_param):
952
+ """
953
+ EXAMPLES::
954
+
955
+ sage: x, m = var('x,m') # needs sage.symbolic
956
+ sage: elliptic_f(x, m).diff(x) # needs sage.symbolic
957
+ 1/sqrt(-m*sin(x)^2 + 1)
958
+ sage: elliptic_f(x, m).diff(m) # needs sage.symbolic
959
+ -1/2*elliptic_f(x, m)/m
960
+ + 1/4*sin(2*x)/(sqrt(-m*sin(x)^2 + 1)*(m - 1))
961
+ - 1/2*elliptic_e(x, m)/((m - 1)*m)
962
+ """
963
+ if diff_param == 0:
964
+ return Integer(1) / sqrt(Integer(1) - m * sin(z) ** Integer(2))
965
+ elif diff_param == 1:
966
+ return (elliptic_e(z, m) / (Integer(2) * (Integer(1) - m) * m) -
967
+ elliptic_f(z, m) / (Integer(2) * m) -
968
+ (sin(Integer(2) * z) /
969
+ (Integer(4) * (Integer(1) - m) *
970
+ sqrt(Integer(1) - m * sin(z) ** Integer(2)))))
971
+
972
+ def _print_latex_(self, z, m):
973
+ r"""
974
+ EXAMPLES::
975
+
976
+ sage: latex(elliptic_f(x, pi)) # needs sage.symbolic
977
+ F(x\,|\,\pi)
978
+ """
979
+ return r"F(%s\,|\,%s)" % (latex(z), latex(m))
980
+
981
+
982
+ elliptic_f = EllipticF()
983
+
984
+
985
+ class EllipticKC(BuiltinFunction):
986
+ r"""
987
+ Return the complete elliptic integral of the first kind:
988
+
989
+ .. MATH::
990
+
991
+ K(m)=\int_0^{\pi/2} \frac{dx}{\sqrt{1 - m\sin(x)^2}}.
992
+
993
+ EXAMPLES::
994
+
995
+ sage: elliptic_kc(0.5) # needs mpmath
996
+ 1.85407467730137
997
+
998
+ .. SEEALSO::
999
+
1000
+ - :func:`elliptic_f()<sage.functions.special.EllipticF>`.
1001
+
1002
+ - :func:`elliptic_ec()<sage.functions.special.EllipticEC>`.
1003
+
1004
+ REFERENCES:
1005
+
1006
+ - :wikipedia:`Elliptic_integral#Complete_elliptic_integral_of_the_first_kind`
1007
+
1008
+ - :wikipedia:`Elliptic_integral#Incomplete_elliptic_integral_of_the_first_kind`
1009
+ """
1010
+ def __init__(self):
1011
+ """
1012
+ EXAMPLES::
1013
+
1014
+ sage: loads(dumps(elliptic_kc))
1015
+ elliptic_kc
1016
+ sage: elliptic_kc(x)._sympy_() # needs sage.symbolic
1017
+ elliptic_k(x)
1018
+
1019
+ TESTS::
1020
+
1021
+ sage: fricas(elliptic_kc(x)) # optional - fricas, needs sage.symbolic
1022
+ ellipticK(x)
1023
+
1024
+ sage: elliptic_kc(0.3) # abs tol 1e-8 # needs mpmath
1025
+ 1.71388944817879
1026
+ sage: fricas.ellipticK(0.3).sage() # abs tol 1e-3 # optional - fricas, needs sage.symbolic
1027
+ 1.7138894481787910555457043
1028
+ """
1029
+ BuiltinFunction.__init__(self, 'elliptic_kc', nargs=1, latex_name='K',
1030
+ conversions=dict(mathematica='EllipticK',
1031
+ maxima='elliptic_kc',
1032
+ sympy='elliptic_k',
1033
+ fricas='ellipticK'))
1034
+
1035
+ def _eval_(self, z):
1036
+ """
1037
+ EXAMPLES::
1038
+
1039
+ sage: elliptic_kc(0) # needs sage.symbolic
1040
+ 1/2*pi
1041
+ sage: elliptic_kc(1/2) # needs sage.symbolic
1042
+ elliptic_kc(1/2)
1043
+
1044
+ TESTS:
1045
+
1046
+ Check if complex numbers in the arguments are converted to maxima
1047
+ correctly (see :issue:`7557`)::
1048
+
1049
+ sage: t = jacobi_sn(1.2 + 2*I*elliptic_kc(1 - .5), .5) # needs sage.symbolic
1050
+ sage: maxima(t) # abs tol 1e-13 # needs sage.symbolic
1051
+ 0.88771548861928029 - 1.7301614091485560e-15*%i
1052
+ sage: t.n() # abs tol 1e-13 # needs sage.symbolic
1053
+ 0.887715488619280 - 1.73016140914856e-15*I
1054
+ """
1055
+ if z == 0:
1056
+ return pi / 2
1057
+ else:
1058
+ return None
1059
+
1060
+ def _evalf_(self, z, parent=None, algorithm=None):
1061
+ """
1062
+ EXAMPLES::
1063
+
1064
+ sage: elliptic_kc(1/2).n() # needs sage.symbolic
1065
+ 1.85407467730137
1066
+ sage: elliptic_kc(1/2).n(200) # needs sage.symbolic
1067
+ 1.85407467730137191843385034...
1068
+ sage: elliptic_kc(I).n() # needs sage.symbolic
1069
+ 1.42127228104504 + 0.295380284214777*I
1070
+ """
1071
+ R = parent or s_parent(z)
1072
+ return _mpmath_utils_call(_mpmath_ellipk, z, parent=R)
1073
+
1074
+ def _derivative_(self, z, diff_param):
1075
+ """
1076
+ EXAMPLES::
1077
+
1078
+ sage: elliptic_kc(x).diff(x) # needs sage.symbolic
1079
+ -1/2*((x - 1)*elliptic_kc(x)
1080
+ + elliptic_ec(x))/((x - 1)*x)
1081
+ """
1082
+ return ((elliptic_ec(z) - (Integer(1) - z) * elliptic_kc(z)) /
1083
+ (Integer(2) * (Integer(1) - z) * z))
1084
+
1085
+
1086
+ elliptic_kc = EllipticKC()
1087
+
1088
+
1089
+ class EllipticPi(BuiltinFunction):
1090
+ r"""
1091
+ Return the incomplete elliptic integral of the third kind:
1092
+
1093
+ .. MATH::
1094
+
1095
+ \Pi(n, t, m) = \int_0^t \frac{dx}{(1 - n \sin(x)^2)\sqrt{1 - m \sin(x)^2}}.
1096
+
1097
+ INPUT:
1098
+
1099
+ - ``n`` -- a real number, called the "characteristic"
1100
+
1101
+ - ``t`` -- a real number, called the "amplitude"
1102
+
1103
+ - ``m`` -- a real number, called the "parameter"
1104
+
1105
+ EXAMPLES::
1106
+
1107
+ sage: N(elliptic_pi(1, pi/4, 1)) # needs sage.symbolic
1108
+ 1.14779357469632
1109
+
1110
+ Compare the value computed by Maxima to the definition as a definite integral
1111
+ (using GSL)::
1112
+
1113
+ sage: elliptic_pi(0.1, 0.2, 0.3) # needs mpmath
1114
+ 0.200665068220979
1115
+ sage: numerical_integral(1/(1-0.1*sin(x)^2)/sqrt(1-0.3*sin(x)^2), 0.0, 0.2) # needs sage.symbolic
1116
+ (0.2006650682209791, 2.227829789769088e-15)
1117
+
1118
+ REFERENCES:
1119
+
1120
+ - :wikipedia:`Elliptic_integral#Incomplete_elliptic_integral_of_the_third_kind`
1121
+ """
1122
+ def __init__(self):
1123
+ """
1124
+ EXAMPLES::
1125
+
1126
+ sage: loads(dumps(elliptic_pi))
1127
+ elliptic_pi
1128
+ sage: elliptic_pi(x, pi/4, 1)._sympy_() # needs sympy sage.symbolic
1129
+ elliptic_pi(x, pi/4, 1)
1130
+ """
1131
+ BuiltinFunction.__init__(self, 'elliptic_pi', nargs=3,
1132
+ conversions=dict(mathematica='EllipticPi',
1133
+ maxima='EllipticPi',
1134
+ # fricas='ellipticPi', doubt
1135
+ sympy='elliptic_pi'))
1136
+
1137
+ def _eval_(self, n, z, m):
1138
+ """
1139
+ EXAMPLES::
1140
+
1141
+ sage: elliptic_pi(x, x, pi) # needs sympy sage.symbolic
1142
+ elliptic_pi(x, x, pi)
1143
+ sage: elliptic_pi(0, x, pi) # needs sympy sage.symbolic
1144
+ elliptic_f(x, pi)
1145
+ """
1146
+ if n == 0:
1147
+ return elliptic_f(z, m)
1148
+
1149
+ def _evalf_(self, n, z, m, parent=None, algorithm=None):
1150
+ """
1151
+ EXAMPLES::
1152
+
1153
+ sage: # needs sage.symbolic
1154
+ sage: elliptic_pi(pi, 1/2, 1).n()
1155
+ 0.795062820631931
1156
+ sage: elliptic_pi(pi, 1/2, 1).n(200)
1157
+ 0.79506282063193125292514098445...
1158
+ sage: elliptic_pi(pi, 1, 1).n()
1159
+ 0.0991592574231369 - 1.30004368185937*I
1160
+ sage: elliptic_pi(pi, I, I).n()
1161
+ 0.0542471560940594 + 0.552096453413081*I
1162
+ """
1163
+ R = parent or s_parent(z)
1164
+ return _mpmath_utils_call(_mpmath_ellippi, n, z, m, parent=R)
1165
+
1166
+ def _derivative_(self, n, z, m, diff_param):
1167
+ """
1168
+ EXAMPLES::
1169
+
1170
+ sage: # needs sage.symbolic
1171
+ sage: n, z, m = var('n,z,m')
1172
+ sage: elliptic_pi(n, z, m).diff(n)
1173
+ 1/4*(sqrt(-m*sin(z)^2 + 1)*n*sin(2*z)/(n*sin(z)^2 - 1)
1174
+ + 2*(m - n)*elliptic_f(z, m)/n
1175
+ + 2*(n^2 - m)*elliptic_pi(n, z, m)/n
1176
+ + 2*elliptic_e(z, m))/((m - n)*(n - 1))
1177
+ sage: elliptic_pi(n, z, m).diff(z)
1178
+ -1/(sqrt(-m*sin(z)^2 + 1)*(n*sin(z)^2 - 1))
1179
+ sage: elliptic_pi(n, z, m).diff(m)
1180
+ 1/4*(m*sin(2*z)/(sqrt(-m*sin(z)^2 + 1)*(m - 1))
1181
+ - 2*elliptic_e(z, m)/(m - 1)
1182
+ - 2*elliptic_pi(n, z, m))/(m - n)
1183
+ """
1184
+ if diff_param == 0:
1185
+ return ((Integer(1) / (Integer(2) * (m - n) * (n - Integer(1)))) *
1186
+ (elliptic_e(z, m) + ((m - n) / n) * elliptic_f(z, m) +
1187
+ ((n ** Integer(2) - m) / n) * elliptic_pi(n, z, m) -
1188
+ (n * sqrt(Integer(1) - m * sin(z) ** Integer(2)) *
1189
+ sin(Integer(2) * z)) /
1190
+ (Integer(2) * (Integer(1) - n * sin(z) ** Integer(2)))))
1191
+ elif diff_param == 1:
1192
+ return (Integer(1) /
1193
+ (sqrt(Integer(1) - m * sin(z) ** Integer(Integer(2))) *
1194
+ (Integer(1) - n * sin(z) ** Integer(2))))
1195
+ elif diff_param == 2:
1196
+ return ((Integer(1) / (Integer(2) * (n - m))) *
1197
+ (elliptic_e(z, m) / (m - Integer(1)) +
1198
+ elliptic_pi(n, z, m) - (m * sin(Integer(2) * z)) /
1199
+ (Integer(2) * (m - Integer(1)) *
1200
+ sqrt(Integer(1) - m * sin(z) ** Integer(2)))))
1201
+
1202
+ def _print_latex_(self, n, z, m):
1203
+ r"""
1204
+ EXAMPLES::
1205
+
1206
+ sage: latex(elliptic_pi(x, pi, 0)) # needs sage.symbolic
1207
+ \Pi(x,\pi,0)
1208
+ """
1209
+ return r"\Pi(%s,%s,%s)" % (latex(n), latex(z), latex(m))
1210
+
1211
+
1212
+ elliptic_pi = EllipticPi()