-
Notifications
You must be signed in to change notification settings - Fork 104
/
Copy pathSpecialFunctions.jl
120 lines (112 loc) · 2.2 KB
/
SpecialFunctions.jl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
module SpecialFunctions
using IrrationalConstants:
twoπ,
halfπ,
sqrtπ,
sqrt2π,
invπ,
inv2π,
invsqrt2,
invsqrt2π,
logtwo,
logπ,
log2π
import LogExpFunctions
using OpenLibm_jll
using OpenSpecFun_jll
export
airyai,
airyaiprime,
airybi,
airybiprime,
airyaix,
airyaiprimex,
airybix,
airybiprimex,
besselh,
besselhx,
besseli,
besselix,
besselj,
sphericalbesselj,
besselj0,
besselj1,
besseljx,
besselk,
besselkx,
bessely,
sphericalbessely,
bessely0,
bessely1,
besselyx,
jinc,
dawson,
ellipk,
ellipe,
erf,
erfc,
erfcinv,
erfcx,
erfi,
erfinv,
logerf,
logerfc,
logerfcx,
faddeeva,
eta,
digamma,
invdigamma,
polygamma,
trigamma,
gamma_inc,
beta_inc,
beta_inc_inv,
gamma_inc_inv,
ncbeta,
ncF,
hankelh1,
hankelh1x,
hankelh2,
hankelh2x,
zeta,
expint,
expinti,
expintx,
sinint,
cosint,
lbinomial
include("amos/AMOS.jl")
include("bessel.jl")
include("erf.jl")
include("ellip.jl")
include("expint.jl")
include("sincosint.jl")
include("logabsgamma/e_lgammaf_r.jl")
include("logabsgamma/e_lgamma_r.jl")
include("gamma.jl")
include("gamma_inc.jl")
include("betanc.jl")
include("beta_inc.jl")
if !isdefined(Base, :get_extension)
include("../ext/SpecialFunctionsChainRulesCoreExt.jl")
end
include("deprecated.jl")
for f in (:digamma, :erf, :erfc, :erfcinv, :erfcx, :erfi, :erfinv, :logerfc, :logerfcx,
:eta, :gamma, :invdigamma, :logfactorial, :lgamma, :trigamma, :ellipk, :ellipe)
@eval $(f)(::Missing) = missing
end
for f in (:beta, :lbeta)
@eval $(f)(::Number, ::Missing) = missing
@eval $(f)(::Missing, ::Number) = missing
@eval $(f)(::Missing, ::Missing) = missing
end
polygamma(m::Integer, x::Missing) = missing
# In future just use `fastabs` from Base.Math
# https://github.com/JuliaLang/julia/blob/93fb785831dcfcc442f82fab8746f0244c5274ae/base/special/trig.jl#L1057
if isdefined(Base.Math, :fastabs)
import Base.Math: fastabs
else
fastabs(x::Number) = abs(x)
fastabs(x::Complex) = abs(real(x)) + abs(imag(x))
end
end # module