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/airy.py ADDED
@@ -0,0 +1,937 @@
1
+ # sage_setup: distribution = sagemath-categories
2
+ r"""
3
+ Airy functions
4
+
5
+ This module implements Airy functions and their generalized derivatives. It
6
+ supports symbolic functionality through Maxima and numeric evaluation through
7
+ mpmath and scipy.
8
+
9
+ Airy functions are solutions to the differential equation
10
+ `f''(x) - x f(x) = 0`.
11
+
12
+ Four global function symbols are immediately available, please see
13
+
14
+ - :func:`airy_ai`: for the Airy Ai function
15
+
16
+ - :func:`airy_ai_prime()<FunctionAiryAiPrime>`: for the first differential
17
+ of the Airy Ai function
18
+
19
+ - :func:`airy_bi`: for the Airy Bi function
20
+
21
+ - :func:`airy_bi_prime()<FunctionAiryBiPrime>`: for the first differential
22
+ of the Airy Bi function
23
+
24
+ AUTHORS:
25
+
26
+ - Oscar Gerardo Lazo Arjona (2010): initial version
27
+
28
+ - Douglas McNeil (2012): rewrite
29
+
30
+ EXAMPLES:
31
+
32
+ Verify that the Airy functions are solutions to the differential equation::
33
+
34
+ sage: diff(airy_ai(x), x, 2) - x * airy_ai(x) # needs sage.symbolic
35
+ 0
36
+ sage: diff(airy_bi(x), x, 2) - x * airy_bi(x) # needs sage.symbolic
37
+ 0
38
+ """
39
+
40
+ # ****************************************************************************
41
+ # Copyright (C) 2010 Oscar Gerardo Lazo Arjona <algebraicamente@gmail.com>
42
+ # Copyright (C) 2012 Douglas McNeil <dsm054@gmail.com>
43
+ #
44
+ # Distributed under the terms of the GNU General Public License (GPL)
45
+ # as published by the Free Software Foundation; either version 2 of
46
+ # the License, or (at your option) any later version.
47
+ # https://www.gnu.org/licenses/
48
+ # ****************************************************************************
49
+
50
+ from sage.calculus.functional import derivative
51
+ from sage.misc.lazy_import import lazy_import
52
+ from sage.rings.integer_ring import ZZ
53
+ from sage.structure.element import Expression
54
+ from sage.symbolic.function import BuiltinFunction
55
+
56
+ lazy_import('sage.symbolic.ring', 'SR')
57
+
58
+ lazy_import('sage.libs.mpmath.utils', 'call', as_='_mpmath_utils_call')
59
+ lazy_import('mpmath', ['airyai', 'airybi'],
60
+ as_=['_mpmath_airyai', '_mpmath_airybi'])
61
+
62
+
63
+ class FunctionAiryAiGeneral(BuiltinFunction):
64
+ def __init__(self):
65
+ r"""
66
+ The generalized derivative of the Airy Ai function.
67
+
68
+ INPUT:
69
+
70
+ - ``alpha`` -- return the `\alpha`-th order fractional derivative with
71
+ respect to `z`.
72
+ For `\alpha = n = 1,2,3,\ldots` this gives the derivative
73
+ `\operatorname{Ai}^{(n)}(z)`, and for `\alpha = -n = -1,-2,-3,\ldots`
74
+ this gives the `n`-fold iterated integral.
75
+
76
+ .. MATH::
77
+
78
+ f_0(z) = \operatorname{Ai}(z)
79
+
80
+ f_n(z) = \int_0^z f_{n-1}(t) dt
81
+
82
+ - ``x`` -- the argument of the function
83
+
84
+ EXAMPLES::
85
+
86
+ sage: # needs sage.symbolic
87
+ sage: from sage.functions.airy import airy_ai_general
88
+ sage: x, n = var('x n')
89
+ sage: airy_ai_general(-2, x)
90
+ airy_ai(-2, x)
91
+ sage: derivative(airy_ai_general(-2, x), x)
92
+ airy_ai(-1, x)
93
+ sage: airy_ai_general(n, x)
94
+ airy_ai(n, x)
95
+ sage: derivative(airy_ai_general(n, x), x)
96
+ airy_ai(n + 1, x)
97
+ """
98
+ BuiltinFunction.__init__(self, "airy_ai", nargs=2,
99
+ latex_name=r"\operatorname{Ai}")
100
+
101
+ def _derivative_(self, alpha, x, diff_param=None):
102
+ """
103
+ EXAMPLES::
104
+
105
+ sage: from sage.functions.airy import airy_ai_general
106
+ sage: x, n = var('x n') # needs sage.symbolic
107
+ sage: derivative(airy_ai_general(n, x), x) # needs sage.symbolic
108
+ airy_ai(n + 1, x)
109
+ sage: derivative(airy_ai_general(n, x), n) # needs sage.symbolic
110
+ Traceback (most recent call last):
111
+ ...
112
+ NotImplementedError: cannot differentiate airy_ai
113
+ in the first parameter
114
+ """
115
+ if diff_param == 0:
116
+ raise NotImplementedError("cannot differentiate airy_ai in the"
117
+ " first parameter")
118
+ return airy_ai_general(alpha + 1, x)
119
+
120
+ def _eval_(self, alpha, x):
121
+ """
122
+ EXAMPLES::
123
+
124
+ sage: from sage.functions.airy import airy_ai_general
125
+ sage: x, n = var('x n') # needs sage.symbolic
126
+ sage: airy_ai_general(-2, 1.0) # needs mpmath
127
+ 0.136645379421096
128
+ sage: airy_ai_general(n, 1.0) # needs sage.symbolic
129
+ airy_ai(n, 1.00000000000000)
130
+ """
131
+ if not isinstance(x, Expression) and \
132
+ not isinstance(alpha, Expression):
133
+ if self._is_numerical(x):
134
+ return self._evalf_(alpha, x)
135
+ if alpha == 0:
136
+ return airy_ai_simple(x)
137
+ if alpha == 1:
138
+ return airy_ai_prime(x)
139
+ if alpha == 2:
140
+ return x*airy_ai_simple(x)
141
+ else:
142
+ return None
143
+
144
+ def _evalf_(self, alpha, x, parent=None, algorithm=None):
145
+ """
146
+ EXAMPLES::
147
+
148
+ sage: from sage.functions.airy import airy_ai_general
149
+ sage: airy_ai_general(-2, 1.0) # needs mpmath
150
+ 0.136645379421096
151
+ """
152
+ return _mpmath_utils_call(_mpmath_airyai, x, derivative=alpha,
153
+ parent=parent)
154
+
155
+
156
+ class FunctionAiryAiSimple(BuiltinFunction):
157
+ def __init__(self):
158
+ """
159
+ The class for the Airy Ai function.
160
+
161
+ EXAMPLES::
162
+
163
+ sage: from sage.functions.airy import airy_ai_simple
164
+ sage: f = airy_ai_simple(x); f # needs sage.symbolic
165
+ airy_ai(x)
166
+ sage: airy_ai_simple(x)._sympy_() # needs sage.symbolic
167
+ airyai(x)
168
+ """
169
+ BuiltinFunction.__init__(self, 'airy_ai',
170
+ latex_name=r"\operatorname{Ai}",
171
+ conversions=dict(mathematica='AiryAi',
172
+ maxima='airy_ai',
173
+ sympy='airyai',
174
+ fricas='airyAi',
175
+ giac='Airy_Ai'))
176
+
177
+ def _derivative_(self, x, diff_param=None):
178
+ """
179
+ EXAMPLES::
180
+
181
+ sage: from sage.functions.airy import airy_ai_simple
182
+ sage: derivative(airy_ai_simple(x), x) # needs sage.symbolic
183
+ airy_ai_prime(x)
184
+ """
185
+ return airy_ai_prime(x)
186
+
187
+ def _eval_(self, x):
188
+ """
189
+ EXAMPLES::
190
+
191
+ sage: from sage.functions.airy import airy_ai_simple
192
+ sage: airy_ai_simple(0) # needs sage.symbolic
193
+ 1/3*3^(1/3)/gamma(2/3)
194
+ sage: airy_ai_simple(0.0) # needs mpmath
195
+ 0.355028053887817
196
+ sage: airy_ai_simple(I) # needs sage.symbolic
197
+ airy_ai(I)
198
+ sage: airy_ai_simple(1.0 * I) # needs sage.symbolic
199
+ 0.331493305432141 - 0.317449858968444*I
200
+ """
201
+ from .gamma import gamma
202
+ if x == 0:
203
+ r = ZZ(2) / 3
204
+ return 1 / (3 ** (r) * gamma(r))
205
+
206
+ def _evalf_(self, x, **kwargs):
207
+ """
208
+ EXAMPLES::
209
+
210
+ sage: from sage.functions.airy import airy_ai_simple
211
+ sage: airy_ai_simple(0.0) # needs mpmath
212
+ 0.355028053887817
213
+ sage: airy_ai_simple(1.0 * I) # needs sage.symbolic
214
+ 0.331493305432141 - 0.317449858968444*I
215
+
216
+ We can use several methods for numerical evaluation::
217
+
218
+ sage: # needs sage.symbolic
219
+ sage: airy_ai_simple(3).n(algorithm='mpmath')
220
+ 0.00659113935746072
221
+ sage: airy_ai_simple(3).n(algorithm='mpmath', prec=100)
222
+ 0.0065911393574607191442574484080
223
+ sage: airy_ai_simple(3).n(algorithm='scipy') # rel tol 1e-10 # needs scipy
224
+ 0.006591139357460719
225
+ sage: airy_ai_simple(I).n(algorithm='scipy') # rel tol 1e-10 # needs scipy
226
+ 0.33149330543214117 - 0.3174498589684438*I
227
+
228
+ TESTS::
229
+
230
+ sage: parent(airy_ai_simple(3).n(algorithm='scipy')) # needs scipy sage.rings.real_mpfr sage.symbolic
231
+ Real Field with 53 bits of precision
232
+ sage: airy_ai_simple(3).n(algorithm='scipy', prec=200) # needs scipy sage.symbolic
233
+ Traceback (most recent call last):
234
+ ...
235
+ NotImplementedError: airy_ai not implemented for precision > 53
236
+ """
237
+ algorithm = kwargs.get('algorithm', 'mpmath') or 'mpmath'
238
+ parent = kwargs.get('parent')
239
+ if algorithm == 'scipy':
240
+ if hasattr(parent, 'prec') and parent.prec() > 53:
241
+ raise NotImplementedError("%s not implemented for precision > 53" % self.name())
242
+ from sage.rings.real_mpfr import RR
243
+ from sage.rings.cc import CC
244
+ from sage.functions.other import real, imag
245
+ from scipy.special import airy
246
+ if x in RR:
247
+ y = airy(real(x))[0]
248
+ if parent is None:
249
+ return RR(y)
250
+ else:
251
+ y = airy(complex(real(x), imag(x)))[0]
252
+ if parent is None:
253
+ return CC(y)
254
+ return parent(y)
255
+ elif algorithm == 'mpmath':
256
+ return _mpmath_utils_call(_mpmath_airyai, x, parent=parent)
257
+ else:
258
+ raise ValueError("unknown algorithm '%s'" % algorithm)
259
+
260
+
261
+ class FunctionAiryAiPrime(BuiltinFunction):
262
+ def __init__(self):
263
+ """
264
+ The derivative of the Airy Ai function; see :func:`airy_ai`
265
+ for the full documentation.
266
+
267
+ EXAMPLES::
268
+
269
+ sage: # needs sage.symbolic
270
+ sage: x, n = var('x n')
271
+ sage: airy_ai_prime(x)
272
+ airy_ai_prime(x)
273
+ sage: airy_ai_prime(0)
274
+ -1/3*3^(2/3)/gamma(1/3)
275
+ sage: airy_ai_prime(x)._sympy_() # needs sympy
276
+ airyaiprime(x)
277
+ """
278
+ BuiltinFunction.__init__(self, 'airy_ai_prime',
279
+ latex_name=r"\operatorname{Ai}'",
280
+ conversions=dict(mathematica='AiryAiPrime',
281
+ maxima='airy_dai',
282
+ sympy='airyaiprime',
283
+ fricas='airyAiPrime'))
284
+
285
+ def _derivative_(self, x, diff_param=None):
286
+ """
287
+ EXAMPLES::
288
+
289
+ sage: derivative(airy_ai_prime(x), x) # needs sage.symbolic
290
+ x*airy_ai(x)
291
+ """
292
+ return x * airy_ai_simple(x)
293
+
294
+ def _eval_(self, x):
295
+ """
296
+ EXAMPLES::
297
+
298
+ sage: airy_ai_prime(0) # needs sage.symbolic
299
+ -1/3*3^(2/3)/gamma(1/3)
300
+ sage: airy_ai_prime(0.0) # needs mpmath
301
+ -0.258819403792807
302
+ """
303
+ from .gamma import gamma
304
+ if x == 0:
305
+ r = ZZ(1) / 3
306
+ return -1 / (3 ** (r) * gamma(r))
307
+
308
+ def _evalf_(self, x, **kwargs):
309
+ """
310
+ EXAMPLES::
311
+
312
+ sage: airy_ai_prime(0.0) # needs mpmath
313
+ -0.258819403792807
314
+
315
+ We can use several methods for numerical evaluation::
316
+
317
+ sage: # needs sage.symbolic
318
+ sage: airy_ai_prime(4).n(algorithm='mpmath')
319
+ -0.00195864095020418
320
+ sage: airy_ai_prime(4).n(algorithm='mpmath', prec=100)
321
+ -0.0019586409502041789001381409184
322
+ sage: airy_ai_prime(4).n(algorithm='scipy') # rel tol 1e-10 # needs scipy
323
+ -0.00195864095020418
324
+ sage: airy_ai_prime(I).n(algorithm='scipy') # rel tol 1e-10 # needs scipy
325
+ -0.43249265984180707 + 0.09804785622924324*I
326
+
327
+ TESTS::
328
+
329
+ sage: parent(airy_ai_prime(3).n(algorithm='scipy')) # needs scipy sage.rings.real_mpfr sage.symbolic
330
+ Real Field with 53 bits of precision
331
+ sage: airy_ai_prime(3).n(algorithm='scipy', prec=200) # needs scipy sage.symbolic
332
+ Traceback (most recent call last):
333
+ ...
334
+ NotImplementedError: airy_ai_prime not implemented
335
+ for precision > 53
336
+ """
337
+ algorithm = kwargs.get('algorithm', 'mpmath') or 'mpmath'
338
+ parent = kwargs.get('parent', None)
339
+ if algorithm == 'scipy':
340
+ if hasattr(parent, 'prec') and parent.prec() > 53:
341
+ raise NotImplementedError("%s not implemented for precision > 53" % self.name())
342
+ from sage.rings.real_mpfr import RR
343
+ from sage.rings.cc import CC
344
+ from sage.functions.other import real, imag
345
+ from scipy.special import airy
346
+ if x in RR:
347
+ y = airy(real(x))[1]
348
+ if parent is None:
349
+ return RR(y)
350
+ else:
351
+ y = airy(complex(real(x), imag(x)))[1]
352
+ if parent is None:
353
+ return CC(y)
354
+ return parent(y)
355
+ elif algorithm == 'mpmath':
356
+ return _mpmath_utils_call(_mpmath_airyai, x, derivative=1,
357
+ parent=parent)
358
+ else:
359
+ raise ValueError("unknown algorithm '%s'" % algorithm)
360
+
361
+
362
+ airy_ai_general = FunctionAiryAiGeneral()
363
+ airy_ai_simple = FunctionAiryAiSimple()
364
+ airy_ai_prime = FunctionAiryAiPrime()
365
+
366
+
367
+ def airy_ai(alpha, x=None, hold_derivative=True, **kwds):
368
+ r"""
369
+ The Airy Ai function.
370
+
371
+ The Airy Ai function `\operatorname{Ai}(x)` is (along with
372
+ `\operatorname{Bi}(x)`) one of the two linearly independent standard
373
+ solutions to the Airy differential equation `f''(x) - x f(x) = 0`. It is
374
+ defined by the initial conditions:
375
+
376
+ .. MATH::
377
+
378
+ \operatorname{Ai}(0)=\frac{1}{2^{2/3} \Gamma\left(\frac{2}{3}\right)},
379
+
380
+ \operatorname{Ai}'(0)=-\frac{1}{2^{1/3}\Gamma\left(\frac{1}{3}\right)}.
381
+
382
+ Another way to define the Airy Ai function is:
383
+
384
+ .. MATH::
385
+
386
+ \operatorname{Ai}(x)=\frac{1}{\pi}\int_0^\infty
387
+ \cos\left(\frac{1}{3}t^3+xt\right) dt.
388
+
389
+ INPUT:
390
+
391
+ - ``alpha`` -- return the `\alpha`-th order fractional derivative with
392
+ respect to `z`.
393
+ For `\alpha = n = 1,2,3,\ldots` this gives the derivative
394
+ `\operatorname{Ai}^{(n)}(z)`, and for `\alpha = -n = -1,-2,-3,\ldots`
395
+ this gives the `n`-fold iterated integral.
396
+
397
+ .. MATH::
398
+
399
+ f_0(z) = \operatorname{Ai}(z)
400
+
401
+ f_n(z) = \int_0^z f_{n-1}(t) dt
402
+
403
+ - ``x`` -- the argument of the function
404
+
405
+ - ``hold_derivative`` -- whether or not to stop from returning higher
406
+ derivatives in terms of `\operatorname{Ai}(x)` and
407
+ `\operatorname{Ai}'(x)`
408
+
409
+ .. SEEALSO:: :func:`airy_bi`
410
+
411
+ EXAMPLES::
412
+
413
+ sage: n, x = var('n x') # needs sage.symbolic
414
+ sage: airy_ai(x) # needs sage.symbolic
415
+ airy_ai(x)
416
+
417
+ It can return derivatives or integrals::
418
+
419
+ sage: # needs sage.symbolic
420
+ sage: airy_ai(2, x)
421
+ airy_ai(2, x)
422
+ sage: airy_ai(1, x, hold_derivative=False)
423
+ airy_ai_prime(x)
424
+ sage: airy_ai(2, x, hold_derivative=False)
425
+ x*airy_ai(x)
426
+ sage: airy_ai(-2, x, hold_derivative=False)
427
+ airy_ai(-2, x)
428
+ sage: airy_ai(n, x)
429
+ airy_ai(n, x)
430
+
431
+ It can be evaluated symbolically or numerically for real or complex
432
+ values::
433
+
434
+ sage: airy_ai(0) # needs sage.symbolic
435
+ 1/3*3^(1/3)/gamma(2/3)
436
+ sage: airy_ai(0.0) # needs mpmath
437
+ 0.355028053887817
438
+ sage: airy_ai(I) # needs sage.symbolic
439
+ airy_ai(I)
440
+ sage: airy_ai(1.0*I) # needs sage.symbolic
441
+ 0.331493305432141 - 0.317449858968444*I
442
+
443
+ The functions can be evaluated numerically either using mpmath. which
444
+ can compute the values to arbitrary precision, and scipy::
445
+
446
+ sage: airy_ai(2).n(prec=100) # needs sage.symbolic
447
+ 0.034924130423274379135322080792
448
+ sage: airy_ai(2).n(algorithm='mpmath', prec=100) # needs sage.symbolic
449
+ 0.034924130423274379135322080792
450
+ sage: airy_ai(2).n(algorithm='scipy') # rel tol 1e-10 # needs scipy sage.symbolic
451
+ 0.03492413042327323
452
+
453
+ And the derivatives can be evaluated::
454
+
455
+ sage: airy_ai(1, 0) # needs sage.symbolic
456
+ -1/3*3^(2/3)/gamma(1/3)
457
+ sage: airy_ai(1, 0.0) # needs mpmath
458
+ -0.258819403792807
459
+
460
+ Plots::
461
+
462
+ sage: plot(airy_ai(x), (x, -10, 5)) + plot(airy_ai_prime(x), # needs sage.plot sage.symbolic
463
+ ....: (x, -10, 5), color='red')
464
+ Graphics object consisting of 2 graphics primitives
465
+
466
+ REFERENCES:
467
+
468
+ - Abramowitz, Milton; Stegun, Irene A., eds. (1965), "Chapter 10"
469
+
470
+ - :wikipedia:`Airy_function`
471
+ """
472
+ # We catch the case with no alpha
473
+ if x is None:
474
+ x = alpha
475
+ return airy_ai_simple(x, **kwds)
476
+
477
+ # We take care of all other cases.
478
+ if alpha not in ZZ and not isinstance(alpha, Expression):
479
+ return airy_ai_general(alpha, x, **kwds)
480
+ if hold_derivative:
481
+ return airy_ai_general(alpha, x, **kwds)
482
+ elif alpha == 0:
483
+ return airy_ai_simple(x, **kwds)
484
+ elif alpha == 1:
485
+ return airy_ai_prime(x, **kwds)
486
+ elif alpha > 1:
487
+ # We use a different variable here because if x is a
488
+ # particular value, we would be differentiating a constant
489
+ # which would return 0. What we want is the value of
490
+ # the derivative at the value and not the derivative of
491
+ # a particular value of the function.
492
+ v = SR.symbol()
493
+ return derivative(airy_ai_simple(v, **kwds), v, alpha).subs({v: x})
494
+ else:
495
+ return airy_ai_general(alpha, x, **kwds)
496
+
497
+ ########################################################################
498
+ ########################################################################
499
+
500
+
501
+ class FunctionAiryBiGeneral(BuiltinFunction):
502
+ def __init__(self):
503
+ r"""
504
+ The generalized derivative of the Airy Bi function.
505
+
506
+ INPUT:
507
+
508
+ - ``alpha`` -- return the `\alpha`-th order fractional derivative with
509
+ respect to `z`.
510
+ For `\alpha = n = 1,2,3,\ldots` this gives the derivative
511
+ `\operatorname{Bi}^{(n)}(z)`, and for `\alpha = -n = -1,-2,-3,\ldots`
512
+ this gives the `n`-fold iterated integral.
513
+
514
+ .. MATH::
515
+
516
+ f_0(z) = \operatorname{Bi}(z)
517
+
518
+ f_n(z) = \int_0^z f_{n-1}(t) dt
519
+
520
+ - ``x`` -- the argument of the function
521
+
522
+ EXAMPLES::
523
+
524
+ sage: # needs sage.symbolic
525
+ sage: from sage.functions.airy import airy_bi_general
526
+ sage: x, n = var('x n')
527
+ sage: airy_bi_general(-2, x)
528
+ airy_bi(-2, x)
529
+ sage: derivative(airy_bi_general(-2, x), x)
530
+ airy_bi(-1, x)
531
+ sage: airy_bi_general(n, x)
532
+ airy_bi(n, x)
533
+ sage: derivative(airy_bi_general(n, x), x)
534
+ airy_bi(n + 1, x)
535
+ """
536
+ BuiltinFunction.__init__(self, "airy_bi", nargs=2,
537
+ latex_name=r"\operatorname{Bi}")
538
+
539
+ def _derivative_(self, alpha, x, diff_param=None):
540
+ """
541
+ EXAMPLES::
542
+
543
+ sage: from sage.functions.airy import airy_bi_general
544
+ sage: x, n = var('x n') # needs sage.symbolic
545
+ sage: derivative(airy_bi_general(n, x), x) # needs sage.symbolic
546
+ airy_bi(n + 1, x)
547
+ sage: derivative(airy_bi_general(n, x), n) # needs sage.symbolic
548
+ Traceback (most recent call last):
549
+ ...
550
+ NotImplementedError: cannot differentiate airy_bi
551
+ in the first parameter
552
+ """
553
+ if diff_param == 0:
554
+ raise NotImplementedError("cannot differentiate airy_bi in the"
555
+ " first parameter")
556
+ return airy_bi_general(alpha + 1, x)
557
+
558
+ def _eval_(self, alpha, x):
559
+ """
560
+ EXAMPLES::
561
+
562
+ sage: from sage.functions.airy import airy_bi_general
563
+ sage: x, n = var('x n') # needs sage.symbolic
564
+ sage: airy_bi_general(-2, 1.0) # needs mpmath
565
+ 0.388621540699059
566
+ sage: airy_bi_general(n, 1.0) # needs sage.symbolic
567
+ airy_bi(n, 1.00000000000000)
568
+ """
569
+ if not isinstance(x, Expression) and \
570
+ not isinstance(alpha, Expression):
571
+ if alpha == 0:
572
+ return airy_bi_simple(x)
573
+ if alpha == 1:
574
+ return airy_bi_prime(x)
575
+ if alpha == 2:
576
+ return x*airy_bi_simple(x)
577
+
578
+ def _evalf_(self, alpha, x, **kwargs):
579
+ """
580
+ EXAMPLES::
581
+
582
+ sage: from sage.functions.airy import airy_bi_general
583
+ sage: airy_bi_general(-2, 1.0) # needs mpmath
584
+ 0.388621540699059
585
+ """
586
+ parent = kwargs.get('parent')
587
+ import mpmath
588
+ from sage.libs.mpmath import utils as mpmath_utils
589
+ return _mpmath_utils_call(_mpmath_airybi, x, derivative=alpha,
590
+ parent=parent)
591
+
592
+
593
+ class FunctionAiryBiSimple(BuiltinFunction):
594
+ def __init__(self):
595
+ """
596
+ The class for the Airy Bi function.
597
+
598
+ EXAMPLES::
599
+
600
+ sage: from sage.functions.airy import airy_bi_simple
601
+ sage: f = airy_bi_simple(x); f # needs sage.symbolic
602
+ airy_bi(x)
603
+ sage: f._sympy_() # needs sympy sage.symbolic
604
+ airybi(x)
605
+ """
606
+ BuiltinFunction.__init__(self, 'airy_bi',
607
+ latex_name=r"\operatorname{Bi}",
608
+ conversions=dict(mathematica='AiryBi',
609
+ maxima='airy_bi',
610
+ sympy='airybi',
611
+ fricas='airyBi',
612
+ giac='Airy_Bi'))
613
+
614
+ def _derivative_(self, x, diff_param=None):
615
+ """
616
+ EXAMPLES::
617
+
618
+ sage: from sage.functions.airy import airy_bi_simple
619
+ sage: derivative(airy_bi_simple(x), x) # needs sage.symbolic
620
+ airy_bi_prime(x)
621
+ """
622
+ return airy_bi_prime(x)
623
+
624
+ def _eval_(self, x):
625
+ """
626
+ EXAMPLES::
627
+
628
+ sage: from sage.functions.airy import airy_bi_simple
629
+ sage: airy_bi_simple(0) # needs sage.symbolic
630
+ 1/3*3^(5/6)/gamma(2/3)
631
+ sage: airy_bi_simple(0.0) # needs mpmath
632
+ 0.614926627446001
633
+ sage: airy_bi_simple(0).n() == airy_bi(0.0) # needs mpmath sage.symbolic
634
+ True
635
+ sage: airy_bi_simple(I) # needs sage.symbolic
636
+ airy_bi(I)
637
+ sage: airy_bi_simple(1.0 * I) # needs sage.symbolic
638
+ 0.648858208330395 + 0.344958634768048*I
639
+ """
640
+ from .gamma import gamma
641
+ if x == 0:
642
+ one_sixth = ZZ(1) / 6
643
+ return 1 / (3 ** (one_sixth) * gamma(4 * one_sixth))
644
+
645
+ def _evalf_(self, x, **kwargs):
646
+ """
647
+ EXAMPLES::
648
+
649
+ sage: from sage.functions.airy import airy_bi_simple
650
+ sage: airy_bi_simple(0.0) # needs mpmath
651
+ 0.614926627446001
652
+ sage: airy_bi_simple(1.0 * I) # needs sage.symbolic
653
+ 0.648858208330395 + 0.344958634768048*I
654
+
655
+ We can use several methods for numerical evaluation::
656
+
657
+ sage: # needs sage.symbolic
658
+ sage: airy_bi_simple(3).n(algorithm='mpmath') # needs mpmath
659
+ 14.0373289637302
660
+ sage: airy_bi_simple(3).n(algorithm='mpmath', prec=100) # needs mpmath
661
+ 14.037328963730232031740267314
662
+ sage: airy_bi_simple(3).n(algorithm='scipy') # rel tol 1e-10 # needs scipy
663
+ 14.037328963730136
664
+ sage: airy_bi_simple(I).n(algorithm='scipy') # rel tol 1e-10 # needs scipy
665
+ 0.648858208330395 + 0.34495863476804844*I
666
+
667
+ TESTS::
668
+
669
+ sage: parent(airy_bi_simple(3).n(algorithm='scipy')) # needs scipy sage.rings.real_mpfr sage.symbolic
670
+ Real Field with 53 bits of precision
671
+ sage: airy_bi_simple(3).n(algorithm='scipy', prec=200) # needs scipy sage.symbolic
672
+ Traceback (most recent call last):
673
+ ...
674
+ NotImplementedError: airy_bi not implemented for precision > 53
675
+ """
676
+ algorithm = kwargs.get('algorithm', 'mpmath') or 'mpmath'
677
+ parent = kwargs.get('parent', None)
678
+ if algorithm == 'scipy':
679
+ if hasattr(parent, 'prec') and parent.prec() > 53:
680
+ raise NotImplementedError("%s not implemented for precision > 53" % self.name())
681
+ from sage.rings.real_mpfr import RR
682
+ from sage.rings.cc import CC
683
+ from sage.functions.other import real, imag
684
+ from scipy.special import airy
685
+ if x in RR:
686
+ y = airy(real(x))[2]
687
+ if parent is None:
688
+ return RR(y)
689
+ else:
690
+ y = airy(complex(real(x), imag(x)))[2]
691
+ if parent is None:
692
+ return CC(y)
693
+ return parent(y)
694
+ elif algorithm == 'mpmath':
695
+ import mpmath
696
+ from sage.libs.mpmath import utils as mpmath_utils
697
+ return _mpmath_utils_call(_mpmath_airybi, x, parent=parent)
698
+ else:
699
+ raise ValueError("unknown algorithm '%s'" % algorithm)
700
+
701
+
702
+ class FunctionAiryBiPrime(BuiltinFunction):
703
+ def __init__(self):
704
+ """
705
+ The derivative of the Airy Bi function; see :func:`airy_bi`
706
+ for the full documentation.
707
+
708
+ EXAMPLES::
709
+
710
+ sage: # needs sage.symbolic
711
+ sage: x, n = var('x n')
712
+ sage: airy_bi_prime(x)
713
+ airy_bi_prime(x)
714
+ sage: airy_bi_prime(0)
715
+ 3^(1/6)/gamma(1/3)
716
+ sage: airy_bi_prime(x)._sympy_() # needs sympy
717
+ airybiprime(x)
718
+ """
719
+ BuiltinFunction.__init__(self, 'airy_bi_prime',
720
+ latex_name=r"\operatorname{Bi}'",
721
+ conversions=dict(mathematica='AiryBiPrime',
722
+ maxima='airy_dbi',
723
+ sympy='airybiprime',
724
+ fricas='airyBiPrime'))
725
+
726
+ def _derivative_(self, x, diff_param=None):
727
+ """
728
+ EXAMPLES::
729
+
730
+ sage: derivative(airy_bi_prime(x), x) # needs sage.symbolic
731
+ x*airy_bi(x)
732
+ """
733
+ return x * airy_bi_simple(x)
734
+
735
+ def _eval_(self, x):
736
+ """
737
+ EXAMPLES::
738
+
739
+ sage: airy_bi_prime(0) # needs sage.symbolic
740
+ 3^(1/6)/gamma(1/3)
741
+ sage: airy_bi_prime(0.0) # needs mpmath
742
+ 0.448288357353826
743
+ """
744
+ from .gamma import gamma
745
+ if x == 0:
746
+ one_sixth = ZZ(1) / 6
747
+ return 3 ** (one_sixth) / gamma(2 * one_sixth)
748
+
749
+ def _evalf_(self, x, **kwargs):
750
+ """
751
+ EXAMPLES::
752
+
753
+ sage: airy_bi_prime(0.0) # needs mpmath
754
+ 0.448288357353826
755
+
756
+ We can use several methods for numerical evaluation::
757
+
758
+ sage: # needs sage.symbolic
759
+ sage: airy_bi_prime(4).n(algorithm='mpmath')
760
+ 161.926683504613
761
+ sage: airy_bi_prime(4).n(algorithm='mpmath', prec=100)
762
+ 161.92668350461340184309492429
763
+ sage: airy_bi_prime(4).n(algorithm='scipy') # rel tol 1e-10 # needs scipy
764
+ 161.92668350461398
765
+ sage: airy_bi_prime(I).n(algorithm='scipy') # rel tol 1e-10 # needs scipy
766
+ 0.135026646710819 - 0.1288373867812549*I
767
+
768
+ TESTS::
769
+
770
+ sage: parent(airy_bi_prime(3).n(algorithm='scipy')) # needs scipy sage.rings.real_mpfr sage.symbolic
771
+ Real Field with 53 bits of precision
772
+ sage: airy_bi_prime(3).n(algorithm='scipy', prec=200) # needs scipy sage.symbolic
773
+ Traceback (most recent call last):
774
+ ...
775
+ NotImplementedError: airy_bi_prime not implemented
776
+ for precision > 53
777
+ """
778
+ algorithm = kwargs.get('algorithm', 'mpmath') or 'mpmath'
779
+ parent = kwargs.get('parent', None)
780
+ if algorithm == 'scipy':
781
+ if hasattr(parent, 'prec') and parent.prec() > 53:
782
+ raise NotImplementedError("%s not implemented for precision > 53" % self.name())
783
+ from sage.rings.real_mpfr import RR
784
+ from sage.rings.cc import CC
785
+ from sage.functions.other import real, imag
786
+ from scipy.special import airy
787
+ if x in RR:
788
+ y = airy(real(x))[3]
789
+ if parent is None:
790
+ return RR(y)
791
+ else:
792
+ y = airy(complex(real(x), imag(x)))[3]
793
+ if parent is None:
794
+ return CC(y)
795
+ return parent(y)
796
+ elif algorithm == 'mpmath':
797
+ return _mpmath_utils_call(_mpmath_airybi, x, derivative=1,
798
+ parent=parent)
799
+ else:
800
+ raise ValueError("unknown algorithm '%s'" % algorithm)
801
+
802
+
803
+ airy_bi_general = FunctionAiryBiGeneral()
804
+ airy_bi_simple = FunctionAiryBiSimple()
805
+ airy_bi_prime = FunctionAiryBiPrime()
806
+
807
+
808
+ def airy_bi(alpha, x=None, hold_derivative=True, **kwds):
809
+ r"""
810
+ The Airy Bi function.
811
+
812
+ The Airy Bi function `\operatorname{Bi}(x)` is (along with
813
+ `\operatorname{Ai}(x)`) one of the two linearly independent standard
814
+ solutions to the Airy differential equation `f''(x) - x f(x) = 0`. It is
815
+ defined by the initial conditions:
816
+
817
+ .. MATH::
818
+
819
+ \operatorname{Bi}(0)=\frac{1}{3^{1/6} \Gamma\left(\frac{2}{3}\right)},
820
+
821
+ \operatorname{Bi}'(0)=\frac{3^{1/6}}{ \Gamma\left(\frac{1}{3}\right)}.
822
+
823
+ Another way to define the Airy Bi function is:
824
+
825
+ .. MATH::
826
+
827
+ \operatorname{Bi}(x)=\frac{1}{\pi}\int_0^\infty
828
+ \left[ \exp\left( xt -\frac{t^3}{3} \right)
829
+ +\sin\left(xt + \frac{1}{3}t^3\right) \right ] dt.
830
+
831
+ INPUT:
832
+
833
+ - ``alpha`` -- return the `\alpha`-th order fractional derivative with
834
+ respect to `z`.
835
+ For `\alpha = n = 1,2,3,\ldots` this gives the derivative
836
+ `\operatorname{Bi}^{(n)}(z)`, and for `\alpha = -n = -1,-2,-3,\ldots`
837
+ this gives the `n`-fold iterated integral.
838
+
839
+ .. MATH::
840
+
841
+ f_0(z) = \operatorname{Bi}(z)
842
+
843
+ f_n(z) = \int_0^z f_{n-1}(t) dt
844
+
845
+ - ``x`` -- the argument of the function
846
+
847
+ - ``hold_derivative`` -- boolean (default: ``True``); whether or not to
848
+ stop from returning higher derivatives in terms of `\operatorname{Bi}(x)`
849
+ and `\operatorname{Bi}'(x)`
850
+
851
+ .. SEEALSO:: :func:`airy_ai`
852
+
853
+ EXAMPLES::
854
+
855
+ sage: n, x = var('n x') # needs sage.symbolic
856
+ sage: airy_bi(x) # needs sage.symbolic
857
+ airy_bi(x)
858
+
859
+ It can return derivatives or integrals::
860
+
861
+ sage: # needs sage.symbolic
862
+ sage: airy_bi(2, x)
863
+ airy_bi(2, x)
864
+ sage: airy_bi(1, x, hold_derivative=False)
865
+ airy_bi_prime(x)
866
+ sage: airy_bi(2, x, hold_derivative=False)
867
+ x*airy_bi(x)
868
+ sage: airy_bi(-2, x, hold_derivative=False)
869
+ airy_bi(-2, x)
870
+ sage: airy_bi(n, x)
871
+ airy_bi(n, x)
872
+
873
+ It can be evaluated symbolically or numerically for real or complex
874
+ values::
875
+
876
+ sage: airy_bi(0) # needs sage.symbolic
877
+ 1/3*3^(5/6)/gamma(2/3)
878
+ sage: airy_bi(0.0) # needs mpmath
879
+ 0.614926627446001
880
+ sage: airy_bi(I) # needs sage.symbolic
881
+ airy_bi(I)
882
+ sage: airy_bi(1.0*I) # needs sage.symbolic
883
+ 0.648858208330395 + 0.344958634768048*I
884
+
885
+ The functions can be evaluated numerically using mpmath,
886
+ which can compute the values to arbitrary precision, and scipy::
887
+
888
+ sage: airy_bi(2).n(prec=100) # needs sage.symbolic
889
+ 3.2980949999782147102806044252
890
+ sage: airy_bi(2).n(algorithm='mpmath', prec=100) # needs sage.symbolic
891
+ 3.2980949999782147102806044252
892
+ sage: airy_bi(2).n(algorithm='scipy') # rel tol 1e-10 # needs scipy sage.symbolic
893
+ 3.2980949999782134
894
+
895
+ And the derivatives can be evaluated::
896
+
897
+ sage: airy_bi(1, 0) # needs sage.symbolic
898
+ 3^(1/6)/gamma(1/3)
899
+ sage: airy_bi(1, 0.0) # needs mpmath
900
+ 0.448288357353826
901
+
902
+ Plots::
903
+
904
+ sage: plot(airy_bi(x), (x, -10, 5)) + plot(airy_bi_prime(x), # needs sage.plot sage.symbolic
905
+ ....: (x, -10, 5), color='red')
906
+ Graphics object consisting of 2 graphics primitives
907
+
908
+ REFERENCES:
909
+
910
+ - Abramowitz, Milton; Stegun, Irene A., eds. (1965), "Chapter 10"
911
+
912
+ - :wikipedia:`Airy_function`
913
+ """
914
+ # We catch the case with no alpha
915
+ if x is None:
916
+ x = alpha
917
+ return airy_bi_simple(x, **kwds)
918
+
919
+ # We take care of all other cases.
920
+ if alpha not in ZZ and not isinstance(alpha, Expression):
921
+ return airy_bi_general(alpha, x, **kwds)
922
+ if hold_derivative:
923
+ return airy_bi_general(alpha, x, **kwds)
924
+ elif alpha == 0:
925
+ return airy_bi_simple(x, **kwds)
926
+ elif alpha == 1:
927
+ return airy_bi_prime(x, **kwds)
928
+ elif alpha > 1:
929
+ # We use a different variable here because if x is a
930
+ # particular value, we would be differentiating a constant
931
+ # which would return 0. What we want is the value of
932
+ # the derivative at the value and not the derivative of
933
+ # a particular value of the function.
934
+ v = SR.symbol()
935
+ return derivative(airy_bi_simple(v, **kwds), v, alpha).subs({v: x})
936
+ else:
937
+ return airy_bi_general(alpha, x, **kwds)