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.
- passagemath_categories-10.6.32.dist-info/METADATA +156 -0
- passagemath_categories-10.6.32.dist-info/RECORD +719 -0
- passagemath_categories-10.6.32.dist-info/WHEEL +5 -0
- passagemath_categories-10.6.32.dist-info/top_level.txt +2 -0
- passagemath_categories.libs/libgcc_s-2d945d6c.so.1 +0 -0
- passagemath_categories.libs/libgmp-28992bcb.so.10.5.0 +0 -0
- passagemath_categories.libs/libstdc++-85f2cd6d.so.6.0.33 +0 -0
- sage/all__sagemath_categories.py +28 -0
- sage/arith/all.py +38 -0
- sage/arith/constants.pxd +27 -0
- sage/arith/functions.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/arith/functions.pxd +4 -0
- sage/arith/functions.pyx +221 -0
- sage/arith/misc.py +6552 -0
- sage/arith/multi_modular.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/arith/multi_modular.pxd +39 -0
- sage/arith/multi_modular.pyx +994 -0
- sage/arith/rational_reconstruction.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/arith/rational_reconstruction.pxd +4 -0
- sage/arith/rational_reconstruction.pyx +115 -0
- sage/arith/srange.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/arith/srange.pyx +571 -0
- sage/calculus/all__sagemath_categories.py +2 -0
- sage/calculus/functional.py +481 -0
- sage/calculus/functions.py +151 -0
- sage/categories/additive_groups.py +73 -0
- sage/categories/additive_magmas.py +1044 -0
- sage/categories/additive_monoids.py +114 -0
- sage/categories/additive_semigroups.py +184 -0
- sage/categories/affine_weyl_groups.py +238 -0
- sage/categories/algebra_ideals.py +95 -0
- sage/categories/algebra_modules.py +96 -0
- sage/categories/algebras.py +349 -0
- sage/categories/algebras_with_basis.py +377 -0
- sage/categories/all.py +160 -0
- sage/categories/aperiodic_semigroups.py +29 -0
- sage/categories/associative_algebras.py +47 -0
- sage/categories/bialgebras.py +101 -0
- sage/categories/bialgebras_with_basis.py +414 -0
- sage/categories/bimodules.py +206 -0
- sage/categories/chain_complexes.py +268 -0
- sage/categories/classical_crystals.py +480 -0
- sage/categories/coalgebras.py +405 -0
- sage/categories/coalgebras_with_basis.py +232 -0
- sage/categories/coercion_methods.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/categories/coercion_methods.pyx +52 -0
- sage/categories/commutative_additive_groups.py +104 -0
- sage/categories/commutative_additive_monoids.py +45 -0
- sage/categories/commutative_additive_semigroups.py +48 -0
- sage/categories/commutative_algebra_ideals.py +87 -0
- sage/categories/commutative_algebras.py +94 -0
- sage/categories/commutative_ring_ideals.py +58 -0
- sage/categories/commutative_rings.py +736 -0
- sage/categories/complete_discrete_valuation.py +293 -0
- sage/categories/complex_reflection_groups.py +145 -0
- sage/categories/complex_reflection_or_generalized_coxeter_groups.py +1249 -0
- sage/categories/coxeter_group_algebras.py +186 -0
- sage/categories/coxeter_groups.py +3402 -0
- sage/categories/crystals.py +2628 -0
- sage/categories/cw_complexes.py +216 -0
- sage/categories/dedekind_domains.py +137 -0
- sage/categories/discrete_valuation.py +325 -0
- sage/categories/distributive_magmas_and_additive_magmas.py +100 -0
- sage/categories/division_rings.py +114 -0
- sage/categories/domains.py +95 -0
- sage/categories/drinfeld_modules.py +789 -0
- sage/categories/dual.py +42 -0
- sage/categories/enumerated_sets.py +1146 -0
- sage/categories/euclidean_domains.py +271 -0
- sage/categories/examples/algebras_with_basis.py +102 -0
- sage/categories/examples/all.py +1 -0
- sage/categories/examples/commutative_additive_monoids.py +130 -0
- sage/categories/examples/commutative_additive_semigroups.py +199 -0
- sage/categories/examples/coxeter_groups.py +8 -0
- sage/categories/examples/crystals.py +236 -0
- sage/categories/examples/cw_complexes.py +163 -0
- sage/categories/examples/facade_sets.py +187 -0
- sage/categories/examples/filtered_algebras_with_basis.py +204 -0
- sage/categories/examples/filtered_modules_with_basis.py +154 -0
- sage/categories/examples/finite_coxeter_groups.py +252 -0
- sage/categories/examples/finite_dimensional_algebras_with_basis.py +148 -0
- sage/categories/examples/finite_dimensional_lie_algebras_with_basis.py +495 -0
- sage/categories/examples/finite_enumerated_sets.py +208 -0
- sage/categories/examples/finite_monoids.py +150 -0
- sage/categories/examples/finite_semigroups.py +190 -0
- sage/categories/examples/finite_weyl_groups.py +191 -0
- sage/categories/examples/graded_connected_hopf_algebras_with_basis.py +152 -0
- sage/categories/examples/graded_modules_with_basis.py +168 -0
- sage/categories/examples/graphs.py +122 -0
- sage/categories/examples/hopf_algebras_with_basis.py +145 -0
- sage/categories/examples/infinite_enumerated_sets.py +190 -0
- sage/categories/examples/lie_algebras.py +352 -0
- sage/categories/examples/lie_algebras_with_basis.py +196 -0
- sage/categories/examples/magmas.py +162 -0
- sage/categories/examples/manifolds.py +94 -0
- sage/categories/examples/monoids.py +144 -0
- sage/categories/examples/posets.py +178 -0
- sage/categories/examples/semigroups.py +580 -0
- sage/categories/examples/semigroups_cython.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/categories/examples/semigroups_cython.pyx +221 -0
- sage/categories/examples/semirings.py +249 -0
- sage/categories/examples/sets_cat.py +706 -0
- sage/categories/examples/sets_with_grading.py +101 -0
- sage/categories/examples/with_realizations.py +542 -0
- sage/categories/fields.py +991 -0
- sage/categories/filtered_algebras.py +63 -0
- sage/categories/filtered_algebras_with_basis.py +548 -0
- sage/categories/filtered_hopf_algebras_with_basis.py +138 -0
- sage/categories/filtered_modules.py +210 -0
- sage/categories/filtered_modules_with_basis.py +1209 -0
- sage/categories/finite_complex_reflection_groups.py +1506 -0
- sage/categories/finite_coxeter_groups.py +1138 -0
- sage/categories/finite_crystals.py +103 -0
- sage/categories/finite_dimensional_algebras_with_basis.py +1860 -0
- sage/categories/finite_dimensional_bialgebras_with_basis.py +33 -0
- sage/categories/finite_dimensional_coalgebras_with_basis.py +33 -0
- sage/categories/finite_dimensional_graded_lie_algebras_with_basis.py +231 -0
- sage/categories/finite_dimensional_hopf_algebras_with_basis.py +38 -0
- sage/categories/finite_dimensional_lie_algebras_with_basis.py +2774 -0
- sage/categories/finite_dimensional_modules_with_basis.py +1407 -0
- sage/categories/finite_dimensional_nilpotent_lie_algebras_with_basis.py +167 -0
- sage/categories/finite_dimensional_semisimple_algebras_with_basis.py +270 -0
- sage/categories/finite_enumerated_sets.py +769 -0
- sage/categories/finite_fields.py +252 -0
- sage/categories/finite_groups.py +256 -0
- sage/categories/finite_lattice_posets.py +242 -0
- sage/categories/finite_monoids.py +316 -0
- sage/categories/finite_permutation_groups.py +339 -0
- sage/categories/finite_posets.py +1994 -0
- sage/categories/finite_semigroups.py +136 -0
- sage/categories/finite_sets.py +93 -0
- sage/categories/finite_weyl_groups.py +39 -0
- sage/categories/finitely_generated_lambda_bracket_algebras.py +112 -0
- sage/categories/finitely_generated_lie_conformal_algebras.py +114 -0
- sage/categories/finitely_generated_magmas.py +57 -0
- sage/categories/finitely_generated_semigroups.py +214 -0
- sage/categories/function_fields.py +76 -0
- sage/categories/g_sets.py +77 -0
- sage/categories/gcd_domains.py +65 -0
- sage/categories/generalized_coxeter_groups.py +94 -0
- sage/categories/graded_algebras.py +85 -0
- sage/categories/graded_algebras_with_basis.py +258 -0
- sage/categories/graded_bialgebras.py +32 -0
- sage/categories/graded_bialgebras_with_basis.py +32 -0
- sage/categories/graded_coalgebras.py +65 -0
- sage/categories/graded_coalgebras_with_basis.py +51 -0
- sage/categories/graded_hopf_algebras.py +41 -0
- sage/categories/graded_hopf_algebras_with_basis.py +169 -0
- sage/categories/graded_lie_algebras.py +91 -0
- sage/categories/graded_lie_algebras_with_basis.py +44 -0
- sage/categories/graded_lie_conformal_algebras.py +74 -0
- sage/categories/graded_modules.py +133 -0
- sage/categories/graded_modules_with_basis.py +329 -0
- sage/categories/graphs.py +138 -0
- sage/categories/group_algebras.py +430 -0
- sage/categories/groupoid.py +94 -0
- sage/categories/groups.py +667 -0
- sage/categories/h_trivial_semigroups.py +64 -0
- sage/categories/hecke_modules.py +185 -0
- sage/categories/highest_weight_crystals.py +980 -0
- sage/categories/hopf_algebras.py +219 -0
- sage/categories/hopf_algebras_with_basis.py +309 -0
- sage/categories/infinite_enumerated_sets.py +115 -0
- sage/categories/integral_domains.py +203 -0
- sage/categories/j_trivial_semigroups.py +29 -0
- sage/categories/kac_moody_algebras.py +82 -0
- sage/categories/kahler_algebras.py +203 -0
- sage/categories/l_trivial_semigroups.py +63 -0
- sage/categories/lambda_bracket_algebras.py +280 -0
- sage/categories/lambda_bracket_algebras_with_basis.py +107 -0
- sage/categories/lattice_posets.py +89 -0
- sage/categories/left_modules.py +49 -0
- sage/categories/lie_algebras.py +1070 -0
- sage/categories/lie_algebras_with_basis.py +261 -0
- sage/categories/lie_conformal_algebras.py +350 -0
- sage/categories/lie_conformal_algebras_with_basis.py +147 -0
- sage/categories/lie_groups.py +73 -0
- sage/categories/loop_crystals.py +1290 -0
- sage/categories/magmas.py +1189 -0
- sage/categories/magmas_and_additive_magmas.py +149 -0
- sage/categories/magmatic_algebras.py +365 -0
- sage/categories/manifolds.py +352 -0
- sage/categories/matrix_algebras.py +40 -0
- sage/categories/metric_spaces.py +387 -0
- sage/categories/modular_abelian_varieties.py +78 -0
- sage/categories/modules.py +989 -0
- sage/categories/modules_with_basis.py +2794 -0
- sage/categories/monoid_algebras.py +38 -0
- sage/categories/monoids.py +739 -0
- sage/categories/noetherian_rings.py +87 -0
- sage/categories/number_fields.py +242 -0
- sage/categories/ore_modules.py +189 -0
- sage/categories/partially_ordered_monoids.py +49 -0
- sage/categories/permutation_groups.py +63 -0
- sage/categories/pointed_sets.py +42 -0
- sage/categories/polyhedra.py +74 -0
- sage/categories/poor_man_map.py +270 -0
- sage/categories/posets.py +722 -0
- sage/categories/principal_ideal_domains.py +270 -0
- sage/categories/quantum_group_representations.py +543 -0
- sage/categories/quotient_fields.py +728 -0
- sage/categories/r_trivial_semigroups.py +45 -0
- sage/categories/regular_crystals.py +898 -0
- sage/categories/regular_supercrystals.py +170 -0
- sage/categories/right_modules.py +49 -0
- sage/categories/ring_ideals.py +74 -0
- sage/categories/rings.py +1904 -0
- sage/categories/rngs.py +175 -0
- sage/categories/schemes.py +393 -0
- sage/categories/semigroups.py +1060 -0
- sage/categories/semirings.py +71 -0
- sage/categories/semisimple_algebras.py +114 -0
- sage/categories/sets_with_grading.py +235 -0
- sage/categories/shephard_groups.py +43 -0
- sage/categories/signed_tensor.py +120 -0
- sage/categories/simplicial_complexes.py +134 -0
- sage/categories/simplicial_sets.py +1206 -0
- sage/categories/super_algebras.py +149 -0
- sage/categories/super_algebras_with_basis.py +144 -0
- sage/categories/super_hopf_algebras_with_basis.py +126 -0
- sage/categories/super_lie_conformal_algebras.py +193 -0
- sage/categories/super_modules.py +229 -0
- sage/categories/super_modules_with_basis.py +193 -0
- sage/categories/supercommutative_algebras.py +99 -0
- sage/categories/supercrystals.py +406 -0
- sage/categories/tensor.py +110 -0
- sage/categories/topological_spaces.py +170 -0
- sage/categories/triangular_kac_moody_algebras.py +439 -0
- sage/categories/tutorial.py +58 -0
- sage/categories/unique_factorization_domains.py +318 -0
- sage/categories/unital_algebras.py +426 -0
- sage/categories/vector_bundles.py +159 -0
- sage/categories/vector_spaces.py +357 -0
- sage/categories/weyl_groups.py +853 -0
- sage/combinat/all__sagemath_categories.py +34 -0
- sage/combinat/backtrack.py +180 -0
- sage/combinat/combinat.py +2269 -0
- sage/combinat/combinat_cython.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/combinat/combinat_cython.pxd +6 -0
- sage/combinat/combinat_cython.pyx +390 -0
- sage/combinat/combination.py +796 -0
- sage/combinat/combinatorial_map.py +416 -0
- sage/combinat/composition.py +2192 -0
- sage/combinat/dlx.py +510 -0
- sage/combinat/integer_lists/__init__.py +7 -0
- sage/combinat/integer_lists/base.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/combinat/integer_lists/base.pxd +16 -0
- sage/combinat/integer_lists/base.pyx +713 -0
- sage/combinat/integer_lists/invlex.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/combinat/integer_lists/invlex.pxd +4 -0
- sage/combinat/integer_lists/invlex.pyx +1650 -0
- sage/combinat/integer_lists/lists.py +328 -0
- sage/combinat/integer_lists/nn.py +48 -0
- sage/combinat/integer_vector.py +1818 -0
- sage/combinat/integer_vector_weighted.py +413 -0
- sage/combinat/matrices/all__sagemath_categories.py +5 -0
- sage/combinat/matrices/dancing_links.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/combinat/matrices/dancing_links.pyx +1159 -0
- sage/combinat/matrices/dancing_links_c.h +380 -0
- sage/combinat/matrices/dlxcpp.py +136 -0
- sage/combinat/partition.py +10070 -0
- sage/combinat/partitions.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/combinat/partitions.pyx +743 -0
- sage/combinat/permutation.py +10168 -0
- sage/combinat/permutation_cython.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/combinat/permutation_cython.pxd +11 -0
- sage/combinat/permutation_cython.pyx +407 -0
- sage/combinat/q_analogues.py +1090 -0
- sage/combinat/ranker.py +268 -0
- sage/combinat/subset.py +1561 -0
- sage/combinat/subsets_hereditary.py +202 -0
- sage/combinat/subsets_pairwise.py +184 -0
- sage/combinat/tools.py +63 -0
- sage/combinat/tuple.py +348 -0
- sage/data_structures/all.py +2 -0
- sage/data_structures/all__sagemath_categories.py +2 -0
- sage/data_structures/binary_matrix.pxd +138 -0
- sage/data_structures/binary_search.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/data_structures/binary_search.pxd +3 -0
- sage/data_structures/binary_search.pyx +66 -0
- sage/data_structures/bitset.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/data_structures/bitset.pxd +40 -0
- sage/data_structures/bitset.pyx +2385 -0
- sage/data_structures/bitset_base.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/data_structures/bitset_base.pxd +926 -0
- sage/data_structures/bitset_base.pyx +117 -0
- sage/data_structures/bitset_intrinsics.h +487 -0
- sage/data_structures/blas_dict.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/data_structures/blas_dict.pxd +12 -0
- sage/data_structures/blas_dict.pyx +469 -0
- sage/data_structures/list_of_pairs.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/data_structures/list_of_pairs.pxd +16 -0
- sage/data_structures/list_of_pairs.pyx +122 -0
- sage/data_structures/mutable_poset.py +3312 -0
- sage/data_structures/pairing_heap.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/data_structures/pairing_heap.h +346 -0
- sage/data_structures/pairing_heap.pxd +88 -0
- sage/data_structures/pairing_heap.pyx +1464 -0
- sage/data_structures/sparse_bitset.pxd +62 -0
- sage/data_structures/stream.py +5070 -0
- sage/databases/all__sagemath_categories.py +7 -0
- sage/databases/sql_db.py +2236 -0
- sage/ext/all__sagemath_categories.py +3 -0
- sage/ext/fast_callable.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/ext/fast_callable.pxd +4 -0
- sage/ext/fast_callable.pyx +2746 -0
- sage/ext/fast_eval.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/ext/fast_eval.pxd +1 -0
- sage/ext/fast_eval.pyx +102 -0
- sage/ext/interpreters/__init__.py +1 -0
- sage/ext/interpreters/all__sagemath_categories.py +2 -0
- sage/ext/interpreters/wrapper_el.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/ext/interpreters/wrapper_el.pxd +18 -0
- sage/ext/interpreters/wrapper_el.pyx +148 -0
- sage/ext/interpreters/wrapper_py.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/ext/interpreters/wrapper_py.pxd +17 -0
- sage/ext/interpreters/wrapper_py.pyx +133 -0
- sage/functions/airy.py +937 -0
- sage/functions/all.py +97 -0
- sage/functions/bessel.py +2102 -0
- sage/functions/error.py +784 -0
- sage/functions/exp_integral.py +1529 -0
- sage/functions/gamma.py +1087 -0
- sage/functions/generalized.py +672 -0
- sage/functions/hyperbolic.py +747 -0
- sage/functions/hypergeometric.py +1156 -0
- sage/functions/jacobi.py +1705 -0
- sage/functions/log.py +1402 -0
- sage/functions/min_max.py +338 -0
- sage/functions/orthogonal_polys.py +3106 -0
- sage/functions/other.py +2303 -0
- sage/functions/piecewise.py +1505 -0
- sage/functions/prime_pi.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/functions/prime_pi.pyx +262 -0
- sage/functions/special.py +1212 -0
- sage/functions/spike_function.py +278 -0
- sage/functions/transcendental.py +690 -0
- sage/functions/trig.py +1062 -0
- sage/functions/wigner.py +726 -0
- sage/geometry/abc.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/geometry/abc.pyx +82 -0
- sage/geometry/all__sagemath_categories.py +1 -0
- sage/groups/all__sagemath_categories.py +11 -0
- sage/groups/generic.py +1733 -0
- sage/groups/groups_catalog.py +113 -0
- sage/groups/perm_gps/all__sagemath_categories.py +1 -0
- sage/groups/perm_gps/partn_ref/all.py +1 -0
- sage/groups/perm_gps/partn_ref/all__sagemath_categories.py +1 -0
- sage/groups/perm_gps/partn_ref/automorphism_group_canonical_label.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/groups/perm_gps/partn_ref/automorphism_group_canonical_label.pxd +52 -0
- sage/groups/perm_gps/partn_ref/automorphism_group_canonical_label.pyx +906 -0
- sage/groups/perm_gps/partn_ref/canonical_augmentation.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/groups/perm_gps/partn_ref/canonical_augmentation.pxd +85 -0
- sage/groups/perm_gps/partn_ref/canonical_augmentation.pyx +534 -0
- sage/groups/perm_gps/partn_ref/data_structures.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/groups/perm_gps/partn_ref/data_structures.pxd +576 -0
- sage/groups/perm_gps/partn_ref/data_structures.pyx +1792 -0
- sage/groups/perm_gps/partn_ref/double_coset.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/groups/perm_gps/partn_ref/double_coset.pxd +45 -0
- sage/groups/perm_gps/partn_ref/double_coset.pyx +739 -0
- sage/groups/perm_gps/partn_ref/refinement_lists.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/groups/perm_gps/partn_ref/refinement_lists.pxd +18 -0
- sage/groups/perm_gps/partn_ref/refinement_lists.pyx +82 -0
- sage/groups/perm_gps/partn_ref/refinement_python.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/groups/perm_gps/partn_ref/refinement_python.pxd +16 -0
- sage/groups/perm_gps/partn_ref/refinement_python.pyx +564 -0
- sage/groups/perm_gps/partn_ref/refinement_sets.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/groups/perm_gps/partn_ref/refinement_sets.pxd +60 -0
- sage/groups/perm_gps/partn_ref/refinement_sets.pyx +858 -0
- sage/interfaces/abc.py +140 -0
- sage/interfaces/all.py +58 -0
- sage/interfaces/all__sagemath_categories.py +1 -0
- sage/interfaces/expect.py +1643 -0
- sage/interfaces/interface.py +1682 -0
- sage/interfaces/process.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/interfaces/process.pxd +5 -0
- sage/interfaces/process.pyx +288 -0
- sage/interfaces/quit.py +167 -0
- sage/interfaces/sage0.py +604 -0
- sage/interfaces/sagespawn.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/interfaces/sagespawn.pyx +308 -0
- sage/interfaces/tab_completion.py +101 -0
- sage/misc/all__sagemath_categories.py +78 -0
- sage/misc/allocator.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/misc/allocator.pxd +6 -0
- sage/misc/allocator.pyx +47 -0
- sage/misc/binary_tree.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/misc/binary_tree.pxd +29 -0
- sage/misc/binary_tree.pyx +537 -0
- sage/misc/callable_dict.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/misc/callable_dict.pyx +89 -0
- sage/misc/citation.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/misc/citation.pyx +159 -0
- sage/misc/converting_dict.py +293 -0
- sage/misc/defaults.py +129 -0
- sage/misc/derivative.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/misc/derivative.pyx +223 -0
- sage/misc/functional.py +2005 -0
- sage/misc/html.py +589 -0
- sage/misc/latex.py +2673 -0
- sage/misc/latex_macros.py +236 -0
- sage/misc/latex_standalone.py +1833 -0
- sage/misc/map_threaded.py +38 -0
- sage/misc/mathml.py +76 -0
- sage/misc/method_decorator.py +88 -0
- sage/misc/mrange.py +755 -0
- sage/misc/multireplace.py +41 -0
- sage/misc/object_multiplexer.py +92 -0
- sage/misc/parser.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/misc/parser.pyx +1107 -0
- sage/misc/random_testing.py +264 -0
- sage/misc/rest_index_of_methods.py +377 -0
- sage/misc/search.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/misc/search.pxd +2 -0
- sage/misc/search.pyx +68 -0
- sage/misc/stopgap.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/misc/stopgap.pyx +95 -0
- sage/misc/table.py +853 -0
- sage/monoids/all__sagemath_categories.py +1 -0
- sage/monoids/indexed_free_monoid.py +1071 -0
- sage/monoids/monoid.py +82 -0
- sage/numerical/all__sagemath_categories.py +1 -0
- sage/numerical/backends/all__sagemath_categories.py +1 -0
- sage/numerical/backends/generic_backend.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/numerical/backends/generic_backend.pxd +61 -0
- sage/numerical/backends/generic_backend.pyx +1893 -0
- sage/numerical/backends/generic_sdp_backend.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/numerical/backends/generic_sdp_backend.pxd +38 -0
- sage/numerical/backends/generic_sdp_backend.pyx +755 -0
- sage/parallel/all.py +6 -0
- sage/parallel/decorate.py +575 -0
- sage/parallel/map_reduce.py +1997 -0
- sage/parallel/multiprocessing_sage.py +76 -0
- sage/parallel/ncpus.py +35 -0
- sage/parallel/parallelism.py +364 -0
- sage/parallel/reference.py +47 -0
- sage/parallel/use_fork.py +333 -0
- sage/rings/abc.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/abc.pxd +31 -0
- sage/rings/abc.pyx +526 -0
- sage/rings/algebraic_closure_finite_field.py +1154 -0
- sage/rings/all__sagemath_categories.py +91 -0
- sage/rings/big_oh.py +227 -0
- sage/rings/continued_fraction.py +2754 -0
- sage/rings/continued_fraction_gosper.py +220 -0
- sage/rings/factorint.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/factorint.pyx +295 -0
- sage/rings/fast_arith.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/fast_arith.pxd +21 -0
- sage/rings/fast_arith.pyx +535 -0
- sage/rings/finite_rings/all__sagemath_categories.py +9 -0
- sage/rings/finite_rings/conway_polynomials.py +542 -0
- sage/rings/finite_rings/element_base.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/finite_rings/element_base.pxd +12 -0
- sage/rings/finite_rings/element_base.pyx +1176 -0
- sage/rings/finite_rings/finite_field_base.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/finite_rings/finite_field_base.pxd +7 -0
- sage/rings/finite_rings/finite_field_base.pyx +2171 -0
- sage/rings/finite_rings/finite_field_constructor.py +827 -0
- sage/rings/finite_rings/finite_field_prime_modn.py +372 -0
- sage/rings/finite_rings/galois_group.py +154 -0
- sage/rings/finite_rings/hom_finite_field.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/finite_rings/hom_finite_field.pxd +23 -0
- sage/rings/finite_rings/hom_finite_field.pyx +856 -0
- sage/rings/finite_rings/hom_prime_finite_field.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/finite_rings/hom_prime_finite_field.pxd +15 -0
- sage/rings/finite_rings/hom_prime_finite_field.pyx +164 -0
- sage/rings/finite_rings/homset.py +357 -0
- sage/rings/finite_rings/integer_mod.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/finite_rings/integer_mod.pxd +56 -0
- sage/rings/finite_rings/integer_mod.pyx +4586 -0
- sage/rings/finite_rings/integer_mod_limits.h +11 -0
- sage/rings/finite_rings/integer_mod_ring.py +2044 -0
- sage/rings/finite_rings/residue_field.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/finite_rings/residue_field.pxd +30 -0
- sage/rings/finite_rings/residue_field.pyx +1811 -0
- sage/rings/finite_rings/stdint.pxd +19 -0
- sage/rings/fraction_field.py +1452 -0
- sage/rings/fraction_field_element.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/fraction_field_element.pyx +1357 -0
- sage/rings/function_field/all.py +7 -0
- sage/rings/function_field/all__sagemath_categories.py +2 -0
- sage/rings/function_field/constructor.py +218 -0
- sage/rings/function_field/element.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/function_field/element.pxd +11 -0
- sage/rings/function_field/element.pyx +1008 -0
- sage/rings/function_field/element_rational.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/function_field/element_rational.pyx +513 -0
- sage/rings/function_field/extensions.py +230 -0
- sage/rings/function_field/function_field.py +1468 -0
- sage/rings/function_field/function_field_rational.py +1005 -0
- sage/rings/function_field/ideal.py +1155 -0
- sage/rings/function_field/ideal_rational.py +629 -0
- sage/rings/function_field/jacobian_base.py +826 -0
- sage/rings/function_field/jacobian_hess.py +1053 -0
- sage/rings/function_field/jacobian_khuri_makdisi.py +1027 -0
- sage/rings/function_field/maps.py +1039 -0
- sage/rings/function_field/order.py +281 -0
- sage/rings/function_field/order_basis.py +586 -0
- sage/rings/function_field/order_rational.py +576 -0
- sage/rings/function_field/place.py +426 -0
- sage/rings/function_field/place_rational.py +181 -0
- sage/rings/generic.py +320 -0
- sage/rings/homset.py +332 -0
- sage/rings/ideal.py +1885 -0
- sage/rings/ideal_monoid.py +215 -0
- sage/rings/infinity.py +1890 -0
- sage/rings/integer.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/integer.pxd +45 -0
- sage/rings/integer.pyx +7874 -0
- sage/rings/integer_ring.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/integer_ring.pxd +8 -0
- sage/rings/integer_ring.pyx +1693 -0
- sage/rings/laurent_series_ring.py +931 -0
- sage/rings/laurent_series_ring_element.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/laurent_series_ring_element.pxd +11 -0
- sage/rings/laurent_series_ring_element.pyx +1927 -0
- sage/rings/lazy_series.py +7815 -0
- sage/rings/lazy_series_ring.py +4356 -0
- sage/rings/localization.py +1043 -0
- sage/rings/morphism.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/morphism.pxd +39 -0
- sage/rings/morphism.pyx +3299 -0
- sage/rings/multi_power_series_ring.py +1145 -0
- sage/rings/multi_power_series_ring_element.py +2184 -0
- sage/rings/noncommutative_ideals.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/noncommutative_ideals.pyx +423 -0
- sage/rings/number_field/all__sagemath_categories.py +1 -0
- sage/rings/number_field/number_field_base.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/number_field/number_field_base.pxd +8 -0
- sage/rings/number_field/number_field_base.pyx +507 -0
- sage/rings/number_field/number_field_element_base.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/number_field/number_field_element_base.pxd +6 -0
- sage/rings/number_field/number_field_element_base.pyx +36 -0
- sage/rings/number_field/number_field_ideal.py +3550 -0
- sage/rings/padics/all__sagemath_categories.py +4 -0
- sage/rings/padics/local_generic.py +1670 -0
- sage/rings/padics/local_generic_element.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/padics/local_generic_element.pxd +5 -0
- sage/rings/padics/local_generic_element.pyx +1017 -0
- sage/rings/padics/misc.py +256 -0
- sage/rings/padics/padic_generic.py +1911 -0
- sage/rings/padics/pow_computer.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/padics/pow_computer.pxd +38 -0
- sage/rings/padics/pow_computer.pyx +671 -0
- sage/rings/padics/precision_error.py +24 -0
- sage/rings/polynomial/all__sagemath_categories.py +25 -0
- sage/rings/polynomial/commutative_polynomial.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/polynomial/commutative_polynomial.pxd +6 -0
- sage/rings/polynomial/commutative_polynomial.pyx +24 -0
- sage/rings/polynomial/cyclotomic.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/polynomial/cyclotomic.pyx +404 -0
- sage/rings/polynomial/flatten.py +711 -0
- sage/rings/polynomial/ideal.py +102 -0
- sage/rings/polynomial/infinite_polynomial_element.py +1768 -0
- sage/rings/polynomial/infinite_polynomial_ring.py +1653 -0
- sage/rings/polynomial/laurent_polynomial.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/polynomial/laurent_polynomial.pxd +18 -0
- sage/rings/polynomial/laurent_polynomial.pyx +2190 -0
- sage/rings/polynomial/laurent_polynomial_ideal.py +590 -0
- sage/rings/polynomial/laurent_polynomial_ring.py +832 -0
- sage/rings/polynomial/laurent_polynomial_ring_base.py +708 -0
- sage/rings/polynomial/multi_polynomial.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/polynomial/multi_polynomial.pxd +12 -0
- sage/rings/polynomial/multi_polynomial.pyx +3082 -0
- sage/rings/polynomial/multi_polynomial_element.py +2570 -0
- sage/rings/polynomial/multi_polynomial_ideal.py +5771 -0
- sage/rings/polynomial/multi_polynomial_ring.py +947 -0
- sage/rings/polynomial/multi_polynomial_ring_base.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/polynomial/multi_polynomial_ring_base.pxd +15 -0
- sage/rings/polynomial/multi_polynomial_ring_base.pyx +1855 -0
- sage/rings/polynomial/multi_polynomial_sequence.py +2204 -0
- sage/rings/polynomial/polydict.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/polynomial/polydict.pxd +45 -0
- sage/rings/polynomial/polydict.pyx +2701 -0
- sage/rings/polynomial/polynomial_compiled.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/polynomial/polynomial_compiled.pxd +59 -0
- sage/rings/polynomial/polynomial_compiled.pyx +509 -0
- sage/rings/polynomial/polynomial_element.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/polynomial/polynomial_element.pxd +64 -0
- sage/rings/polynomial/polynomial_element.pyx +13255 -0
- sage/rings/polynomial/polynomial_element_generic.py +1637 -0
- sage/rings/polynomial/polynomial_fateman.py +97 -0
- sage/rings/polynomial/polynomial_quotient_ring.py +2465 -0
- sage/rings/polynomial/polynomial_quotient_ring_element.py +779 -0
- sage/rings/polynomial/polynomial_ring.py +3784 -0
- sage/rings/polynomial/polynomial_ring_constructor.py +1051 -0
- sage/rings/polynomial/polynomial_ring_homomorphism.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/polynomial/polynomial_ring_homomorphism.pxd +5 -0
- sage/rings/polynomial/polynomial_ring_homomorphism.pyx +121 -0
- sage/rings/polynomial/polynomial_singular_interface.py +549 -0
- sage/rings/polynomial/symmetric_ideal.py +989 -0
- sage/rings/polynomial/symmetric_reduction.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/polynomial/symmetric_reduction.pxd +8 -0
- sage/rings/polynomial/symmetric_reduction.pyx +669 -0
- sage/rings/polynomial/term_order.py +2279 -0
- sage/rings/polynomial/toy_buchberger.py +449 -0
- sage/rings/polynomial/toy_d_basis.py +387 -0
- sage/rings/polynomial/toy_variety.py +362 -0
- sage/rings/power_series_mpoly.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/power_series_mpoly.pxd +9 -0
- sage/rings/power_series_mpoly.pyx +161 -0
- sage/rings/power_series_poly.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/power_series_poly.pxd +10 -0
- sage/rings/power_series_poly.pyx +1317 -0
- sage/rings/power_series_ring.py +1441 -0
- sage/rings/power_series_ring_element.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/power_series_ring_element.pxd +12 -0
- sage/rings/power_series_ring_element.pyx +3028 -0
- sage/rings/puiseux_series_ring.py +487 -0
- sage/rings/puiseux_series_ring_element.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/puiseux_series_ring_element.pxd +7 -0
- sage/rings/puiseux_series_ring_element.pyx +1055 -0
- sage/rings/qqbar_decorators.py +167 -0
- sage/rings/quotient_ring.py +1598 -0
- sage/rings/quotient_ring_element.py +979 -0
- sage/rings/rational.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/rational.pxd +20 -0
- sage/rings/rational.pyx +4284 -0
- sage/rings/rational_field.py +1730 -0
- sage/rings/real_double.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/real_double.pxd +16 -0
- sage/rings/real_double.pyx +2218 -0
- sage/rings/real_lazy.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/real_lazy.pxd +30 -0
- sage/rings/real_lazy.pyx +1773 -0
- sage/rings/ring.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/ring.pxd +30 -0
- sage/rings/ring.pyx +850 -0
- sage/rings/semirings/all.py +3 -0
- sage/rings/semirings/non_negative_integer_semiring.py +107 -0
- sage/rings/semirings/tropical_mpolynomial.py +972 -0
- sage/rings/semirings/tropical_polynomial.py +997 -0
- sage/rings/semirings/tropical_semiring.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/semirings/tropical_semiring.pyx +676 -0
- sage/rings/semirings/tropical_variety.py +1701 -0
- sage/rings/sum_of_squares.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/sum_of_squares.pxd +3 -0
- sage/rings/sum_of_squares.pyx +336 -0
- sage/rings/tests.py +504 -0
- sage/schemes/affine/affine_homset.py +508 -0
- sage/schemes/affine/affine_morphism.py +1574 -0
- sage/schemes/affine/affine_point.py +460 -0
- sage/schemes/affine/affine_rational_point.py +308 -0
- sage/schemes/affine/affine_space.py +1264 -0
- sage/schemes/affine/affine_subscheme.py +592 -0
- sage/schemes/affine/all.py +25 -0
- sage/schemes/all__sagemath_categories.py +5 -0
- sage/schemes/generic/algebraic_scheme.py +2092 -0
- sage/schemes/generic/all.py +5 -0
- sage/schemes/generic/ambient_space.py +400 -0
- sage/schemes/generic/divisor.py +465 -0
- sage/schemes/generic/divisor_group.py +313 -0
- sage/schemes/generic/glue.py +84 -0
- sage/schemes/generic/homset.py +820 -0
- sage/schemes/generic/hypersurface.py +234 -0
- sage/schemes/generic/morphism.py +2107 -0
- sage/schemes/generic/point.py +237 -0
- sage/schemes/generic/scheme.py +1190 -0
- sage/schemes/generic/spec.py +199 -0
- sage/schemes/product_projective/all.py +6 -0
- sage/schemes/product_projective/homset.py +236 -0
- sage/schemes/product_projective/morphism.py +517 -0
- sage/schemes/product_projective/point.py +568 -0
- sage/schemes/product_projective/rational_point.py +550 -0
- sage/schemes/product_projective/space.py +1301 -0
- sage/schemes/product_projective/subscheme.py +466 -0
- sage/schemes/projective/all.py +24 -0
- sage/schemes/projective/proj_bdd_height.py +453 -0
- sage/schemes/projective/projective_homset.py +718 -0
- sage/schemes/projective/projective_morphism.py +2792 -0
- sage/schemes/projective/projective_point.py +1484 -0
- sage/schemes/projective/projective_rational_point.py +569 -0
- sage/schemes/projective/projective_space.py +2571 -0
- sage/schemes/projective/projective_subscheme.py +1574 -0
- sage/sets/all.py +17 -0
- sage/sets/cartesian_product.py +376 -0
- sage/sets/condition_set.py +525 -0
- sage/sets/disjoint_set.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/sets/disjoint_set.pxd +36 -0
- sage/sets/disjoint_set.pyx +998 -0
- sage/sets/disjoint_union_enumerated_sets.py +625 -0
- sage/sets/family.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/sets/family.pxd +12 -0
- sage/sets/family.pyx +1556 -0
- sage/sets/finite_enumerated_set.py +406 -0
- sage/sets/finite_set_map_cy.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/sets/finite_set_map_cy.pxd +34 -0
- sage/sets/finite_set_map_cy.pyx +708 -0
- sage/sets/finite_set_maps.py +591 -0
- sage/sets/image_set.py +448 -0
- sage/sets/integer_range.py +829 -0
- sage/sets/non_negative_integers.py +241 -0
- sage/sets/positive_integers.py +93 -0
- sage/sets/primes.py +188 -0
- sage/sets/real_set.py +2760 -0
- sage/sets/recursively_enumerated_set.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/sets/recursively_enumerated_set.pxd +31 -0
- sage/sets/recursively_enumerated_set.pyx +2082 -0
- sage/sets/set.py +2083 -0
- sage/sets/set_from_iterator.py +1021 -0
- sage/sets/totally_ordered_finite_set.py +329 -0
- sage/symbolic/all__sagemath_categories.py +1 -0
- sage/symbolic/function.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/symbolic/function.pxd +29 -0
- sage/symbolic/function.pyx +1488 -0
- sage/symbolic/symbols.py +56 -0
- sage/tests/all__sagemath_categories.py +1 -0
- sage/tests/cython.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/tests/cython.pyx +37 -0
- sage/tests/stl_vector.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/tests/stl_vector.pyx +171 -0
- sage/typeset/all.py +6 -0
- sage/typeset/ascii_art.py +295 -0
- sage/typeset/character_art.py +789 -0
- sage/typeset/character_art_factory.py +572 -0
- sage/typeset/symbols.py +334 -0
- sage/typeset/unicode_art.py +183 -0
- 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)
|