Skip to content

Commit 71812c3

Browse files
authored
Reintroduce deprecations from Base (#16)
This requires introducing a dependency on Compat, which provides the requisite macros for deprecating implicitly vectorized functions in favor of dot-broadcasts.
1 parent a90b7d2 commit 71812c3

File tree

3 files changed

+79
-0
lines changed

3 files changed

+79
-0
lines changed

REQUIRE

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
11
julia 0.5
2+
Compat 0.9.1

src/SpecialFunctions.jl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,5 +58,6 @@ module SpecialFunctions
5858
include("bessel.jl")
5959
include("erf.jl")
6060
include("gamma.jl")
61+
include("deprecated.jl")
6162

6263
end # module

src/deprecated.jl

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
# This file contains code that was formerly a part of Julia. License is MIT: http://julialang.org/license
2+
3+
using Base: @deprecate, depwarn
4+
using Compat: @dep_vectorize_1arg, @dep_vectorize_2arg
5+
6+
for f in (:digamma, :trigamma, :zeta, :eta, :erfcx, :erfi, :dawson, :airyai, :airyaiprime,
7+
:airybi, :airybiprime, :besselj0, :besselj1, :bessely0, :bessely1, :erf, :erfc)
8+
@eval @dep_vectorize_1arg Number $f
9+
end
10+
11+
for f in (:invdigamma, :erfinc, :erfcinv)
12+
@eval @dep_vectorize_1arg Real $f
13+
end
14+
15+
for f in (:polygamma, :zeta, :besseli, :besselix, :besselj, :besseljx, :besselk, :besselkx,
16+
:bessely, :besselyx, :besselh, :besselhx, :hankelh1, :hankelh2, :hankelh1x, :hankelh2x)
17+
@eval @dep_vectorize_2arg Number $f
18+
end
19+
20+
@deprecate airy(z::Number) airyai(z)
21+
@deprecate airyx(z::Number) airyaix(z)
22+
@deprecate airyprime(z::Number) airyaiprime(z)
23+
@deprecate airy{T<:Number}(x::AbstractArray{T}) airyai.(x)
24+
@deprecate airyx{T<:Number}(x::AbstractArray{T}) airyaix.(x)
25+
@deprecate airyprime{T<:Number}(x::AbstractArray{T}) airyprime.(x)
26+
27+
function _airy(k::Integer, z::Complex128)
28+
depwarn("`airy(k,x)` is deprecated, use `airyai(x)`, `airyaiprime(x)`, `airybi(x)` or `airybiprime(x)` instead.",:airy)
29+
id = Int32(k==1 || k==3)
30+
if k == 0 || k == 1
31+
return _airy(z, id, Int32(1))
32+
elseif k == 2 || k == 3
33+
return _biry(z, id, Int32(1))
34+
else
35+
throw(ArgumentError("k must be between 0 and 3"))
36+
end
37+
end
38+
function _airyx(k::Integer, z::Complex128)
39+
depwarn("`airyx(k,x)` is deprecated, use `airyaix(x)`, `airyaiprimex(x)`, `airybix(x)` or `airybiprimex(x)` instead.",:airyx)
40+
id = Int32(k==1 || k==3)
41+
if k == 0 || k == 1
42+
return _airy(z, id, Int32(2))
43+
elseif k == 2 || k == 3
44+
return _biry(z, id, Int32(2))
45+
else
46+
throw(ArgumentError("k must be between 0 and 3"))
47+
end
48+
end
49+
50+
for afn in (:airy,:airyx)
51+
_afn = Symbol("_"*string(afn))
52+
suf = string(afn)[5:end]
53+
@eval begin
54+
function $afn(k::Integer, z::Complex128)
55+
afn = $(QuoteNode(afn))
56+
suf = $(QuoteNode(suf))
57+
depwarn("`$afn(k,x)` is deprecated, use `airyai$suf(x)`, `airyaiprime$suf(x)`, `airybi$suf(x)` or `airybiprime$suf(x)` instead.",$(QuoteNode(afn)))
58+
$_afn(k,z)
59+
end
60+
61+
$afn(k::Integer, z::Complex) = $afn(k, float(z))
62+
$afn{T<:AbstractFloat}(k::Integer, z::Complex{T}) = throw(MethodError($afn,(k,z)))
63+
$afn(k::Integer, z::Complex64) = Complex64($afn(k, Complex128(z)))
64+
$afn(k::Integer, x::Real) = $afn(k, float(x))
65+
$afn(k::Integer, x::AbstractFloat) = real($afn(k, complex(x)))
66+
67+
function $afn{T<:Number}(k::Number, x::AbstractArray{T})
68+
$afn.(k,x)
69+
end
70+
function $afn{S<:Number}(k::AbstractArray{S}, x::Number)
71+
$afn.(k,x)
72+
end
73+
function $afn{S<:Number,T<:Number}(k::AbstractArray{S}, x::AbstractArray{T})
74+
$afn.(k,x)
75+
end
76+
end
77+
end

0 commit comments

Comments
 (0)