Skip to content

Commit 095633c

Browse files
committed
Enforce display of deprecation warnings
1 parent 71309bc commit 095633c

File tree

9 files changed

+141
-59
lines changed

9 files changed

+141
-59
lines changed

Project.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name = "Distributions"
22
uuid = "31c24e10-a181-5473-b8eb-7969acd0382f"
3-
version = "0.25.123"
3+
version = "0.25.124"
44
authors = ["JuliaStats"]
55

66
[deps]

src/Distributions.jl

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,6 @@ export
122122
Lindley,
123123
LKJ,
124124
LKJCholesky,
125-
LocationScale,
126125
Logistic,
127126
LogLogistic,
128127
LogNormal,
@@ -154,7 +153,6 @@ export
154153
Pareto,
155154
PGeneralizedGaussian,
156155
SkewedExponentialPower,
157-
Product, # deprecated
158156
Poisson,
159157
PoissonBinomial,
160158
QQPair,
@@ -169,7 +167,6 @@ export
169167
TDist,
170168
TriangularDist,
171169
Triweight,
172-
Truncated,
173170
Uniform,
174171
UnivariateGMM,
175172
VonMises,

src/deprecates.jl

Lines changed: 140 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,28 @@
11
#### Deprecate on 0.6 (to be removed on 0.7)
22

3-
@Base.deprecate expected_logdet meanlogdet
3+
export expected_logdet
4+
@noinline function expected_logdet(d::Wishart)
5+
Base.depwarn("`expected_logdet(d::Wishart)` is deprecated, use `meanlogdet(d)` instead.", :expected_logdet; force = true)
6+
return meanlogdet(d)
7+
end
48

5-
function probs(d::DiscreteUnivariateDistribution)
6-
Base.depwarn("probs(d::$(typeof(d))) is deprecated. Please use pdf(d) instead.", :probs)
9+
@noinline function probs(d::DiscreteUnivariateDistribution)
10+
Base.depwarn("`probs(d::DiscreteUnivariateDistribution)` is deprecated, use `pdf(d)` instead.", :probs; force = true)
711
return pdf(d)
812
end
913

10-
function Binomial(n::Real, p::Real)
11-
Base.depwarn("Binomial(n::Real, p) is deprecated. Please use Binomial(n::Integer, p) instead.", :Binomial)
14+
@noinline function Binomial(n::Real, p::Real)
15+
Base.depwarn("`Binomial(n::Real, p::Real)` is deprecated, use `Binomial(Int(n), p)` instead.", :Binomial; force = true)
1216
Binomial(Int(n), p)
1317
end
1418

15-
function Binomial(n::Real)
16-
Base.depwarn("Binomial(n::Real) is deprecated. Please use Binomial(n::Integer) instead.", :Binomial)
19+
@noinline function Binomial(n::Real)
20+
Base.depwarn("`Binomial(n::Real)` is deprecated, use `Binomial(Int(n))` instead.", :Binomial; force = true)
1721
Binomial(Int(n))
1822
end
1923

20-
function BetaBinomial(n::Real, α::Real, β::Real)
21-
Base.depwarn("BetaBinomial(n::Real, α, β) is deprecated. Please use BetaBinomial(n::Integer, α, β) instead.", :BetaBinomial)
24+
@noinline function BetaBinomial(n::Real, α::Real, β::Real)
25+
Base.depwarn("`BetaBinomial(n::Real, α::Real, β::Real)` is deprecated, use `BetaBinomial(Int(n), α, β)` instead.", :BetaBinomial; force = true)
2226
BetaBinomial(Int(n), α, β)
2327
end
2428

@@ -34,23 +38,54 @@ for fun in [:pdf, :logpdf,
3438
fun! = Symbol(fun, '!')
3539

3640
@eval begin
37-
@deprecate ($_fun!)(r::AbstractArray{<:Real}, d::UnivariateDistribution, X::AbstractArray{<:Real}) r .= Base.Fix1($fun, d).(X) false
38-
@deprecate ($fun!)(r::AbstractArray{<:Real}, d::UnivariateDistribution, X::AbstractArray{<:Real}) r .= Base.Fix1($fun, d).(X) false
39-
@deprecate ($fun)(d::UnivariateDistribution, X::AbstractArray{<:Real}) map(Base.Fix1($fun, d), X)
41+
export $(fun!)
42+
@noinline function ($_fun!)(r::AbstractArray{<:Real}, d::UnivariateDistribution, X::AbstractArray{<:Real})
43+
Base.depwarn("`$(string(_fun!))(r::AbstractArray{<:Real}, d::UnivariateDistribution, X::AbstractArray{<:Real})` is deprecated, use `r .= $(string(fun)).(d, X)` instead.", $(QuoteNode(_fun!)); force = true)
44+
r .= $(fun).(d, X)
45+
end
46+
@noinline function ($fun!)(r::AbstractArray{<:Real}, d::UnivariateDistribution, X::AbstractArray{<:Real})
47+
Base.depwarn("`$(string(fun!))(r::AbstractArray{<:Real}, d::UnivariateDistribution, X::AbstractArray{<:Real})` is deprecated, use `r .= $(string(fun)).(d, X)` instead.", $(QuoteNode(fun!)); force = true)
48+
r .= $(fun).(d, X)
49+
end
50+
@noinline function ($fun)(d::UnivariateDistribution, X::AbstractArray{<:Real})
51+
Base.depwarn("`$(string(fun))(d::UnivariateDistribution, X::AbstractArray{<:Real})` is deprecated, use `$(string(fun)).(d, X)` instead.", $(QuoteNode(fun)); force = true)
52+
$(fun).(d, X)
53+
end
4054
end
4155
end
4256

43-
@deprecate pdf(d::DiscreteUnivariateDistribution) map(Base.Fix1(pdf, d), support(d))
57+
@noinline function pdf(d::DiscreteUnivariateDistribution)
58+
Base.depwarn("`pdf(d::DiscreteUnivariateDistribution)` is deprecated, please use `pdf.(d, support(d))` instead.", :pdf; force = true)
59+
pdf.(d, support(d))
60+
end
4461

4562
# Wishart constructors
46-
@deprecate Wishart(df::Real, S::AbstractPDMat, warn::Bool) Wishart(df, S)
47-
@deprecate Wishart(df::Real, S::Matrix, warn::Bool) Wishart(df, S)
48-
@deprecate Wishart(df::Real, S::Cholesky, warn::Bool) Wishart(df, S)
63+
@noinline function Wishart(df::Real, S::AbstractPDMat, ::Bool)
64+
Base.depwarn("`Wishart(df::Real, S::AbstractPDMat, warn::Bool)` is deprecated, use `Wishart(df, S)` instead.", :Wishart; force = true)
65+
Wishart(df, S)
66+
end
67+
@noinline function Wishart(df::Real, S::Matrix, ::Bool)
68+
Base.depwarn("`Wishart(df::Real, S::Matrix, warn::Bool)` is deprecated, use `Wishart(df, S)` instead.", :Wishart; force = true)
69+
Wishart(df, S)
70+
end
71+
@noinline function Wishart(df::Real, S::Cholesky, ::Bool)
72+
Base.depwarn("`Wishart(df::Real, S::Cholesky, warn::Bool)` is deprecated, use `Wishart(df, S)` instead.", :Wishart; force = true)
73+
Wishart(df, S)
74+
end
4975

5076
# Deprecate 3 arguments expectation and once with function in second place
51-
@deprecate expectation(distr::DiscreteUnivariateDistribution, g::Function, epsilon::Real) expectation(g, distr; epsilon=epsilon) false
52-
@deprecate expectation(distr::ContinuousUnivariateDistribution, g::Function, epsilon::Real) expectation(g, distr) false
53-
@deprecate expectation(distr::Union{UnivariateDistribution,MultivariateDistribution}, g::Function; kwargs...) expectation(g, distr; kwargs...) false
77+
@noinline function expectation(distr::DiscreteUnivariateDistribution, g::Function, epsilon::Real)
78+
Base.depwarn("`expectation(d::DiscreteUnivariateDistribution, g::Function, epsilon::Real)` is deprecated, use `expectation(g, d; epsilon)` instead.", :expectation; force = true)
79+
expectation(g, distr; epsilon=epsilon)
80+
end
81+
@noinline function expectation(distr::ContinuousUnivariateDistribution, g::Function, ::Real)
82+
Base.depwarn("`expectation(d::ContinuousUnivariateDistribution, g::Function, epsilon::Real)` is deprecated, use `expectation(g, d)` instead.", :expectation; force = true)
83+
expectation(g, distr)
84+
end
85+
@noinline function expectation(distr::Union{UnivariateDistribution,MultivariateDistribution}, g::Function; kwargs...)
86+
Base.depwarn("`expectation(d::ContinuousUnivariateDistribution, g::Function; kwargs...)` is deprecated, use `expectation(g, d; kwargs...)` instead.", :expectation; force = true)
87+
expectation(g, distr; kwargs...)
88+
end
5489

5590
# Deprecate `MatrixReshaped`
5691
# This is very similar to `Base.@deprecate_binding MatrixReshaped{...} ReshapedDistribution{...}`
@@ -64,10 +99,94 @@ Base.deprecate(@__MODULE__, :MatrixReshaped)
6499
# In Julia >= 1.6, instead of a new alias we could have defined a method for (ReshapedDistribution{2,S,D} where {S<:ValueSupport,D<:MultivariateDistribution{S}})
65100
const _MatrixReshaped{S<:ValueSupport,D<:MultivariateDistribution{S}} = ReshapedDistribution{2,S,D}
66101
function _MatrixReshaped(d::MultivariateDistribution, n::Integer, p::Integer=n)
67-
Base.depwarn("`MatrixReshaped(d, n, p)` is deprecated, use `reshape(d, (n, p))` instead.", :MatrixReshaped)
102+
Base.depwarn("`MatrixReshaped(d::MultivariateDistribution, n::Integer, p::Integer=n)` is deprecated, use `reshape(d, (n, p))` instead.", :MatrixReshaped; force = true)
68103
return reshape(d, (n, p))
69104
end
70105

106+
export dim
71107
for D in (:InverseWishart, :LKJ, :MatrixBeta, :MatrixFDist, :Wishart)
72-
@eval @deprecate dim(d::$D) size(d, 1)
108+
@eval begin
109+
@noinline function dim(d::$D)
110+
Base.depwarn("`dim(d::$(QuoteNode(D)))` is deprecated, use `size(d, 1)` instead.", :dim; force = true)
111+
size(d, 1)
112+
end
113+
end
114+
end
115+
116+
# deprecated 12 September 2016
117+
export circvar
118+
@noinline function circvar(d)
119+
Base.depwarn("`circvar(d)` is deprecated, use `var(d)` instead.", :circvar; force = true)
120+
var(d)
121+
end
122+
123+
# deprecated constructors with standard deviations
124+
@noinline function MvNormal::AbstractVector{<:Real}, σ::AbstractVector{<:Real})
125+
Base.depwarn("`MvNormal(μ::AbstractVector{<:Real}, σ::AbstractVector{<:Real})` is deprecated, use `MvNormal(μ, LinearAlgebra.Diagonal(map(abs2, σ)))` instead.", :MvNormal; force = true)
126+
MvNormal(μ, Diagonal(map(abs2, σ)))
127+
end
128+
@noinline function MvNormal::AbstractVector{<:Real}, σ::Real)
129+
Base.depwarn("`MvNormal(μ::AbstractVector{<:Real}, σ::Real)` is deprecated, use `MvNormal(μ, σ^2 * LinearAlgebra.I)` instead.", :MvNormal; force = true)
130+
MvNormal(μ, σ^2 * I)
73131
end
132+
@noinline function MvNormal::AbstractVector{<:Real})
133+
Base.depwarn("`MvNormal(σ::AbstractVector{<:Real})` is deprecated, use `MvNormal(LinearAlgebra.Diagonal(map(abs2, σ)))` instead.", :MvNormal; force = true)
134+
MvNormal(Diagonal(map(abs2, σ)))
135+
end
136+
@noinline function MvNormal(d::Int, σ::Real)
137+
Base.depwarn("`MvNormal(d::Int, σ::Real)` is deprecated, use `MvNormal(LinearAlgebra.Diagonal(FillArrays.Fill(σ^2, d)))` instead.", :MvNormal; force = true)
138+
MvNormal(Diagonal(Fill^2, d)))
139+
end
140+
141+
# Deprecated constructors
142+
@noinline function MvNormalCanon(h::AbstractVector{<:Real}, prec::AbstractVector{<:Real})
143+
Base.depwarn("`MvNormalCanon(h::AbstractVector{<:Real}, prec::AbstractVector{<:Real})` is deprecated, use `MvNormalCanon(h, LinearAlgebra.Diagonal(prec))` instead.", :MvNormalCanon; force = true)
144+
MvNormalCanon(h, Diagonal(prec))
145+
end
146+
@noinline function MvNormalCanon(h::AbstractVector{<:Real}, prec::Real)
147+
Base.depwarn("`MvNormalCanon(h::AbstractVector{<:Real}, prec::Real)` is deprecated, use `MvNormalCanon(h, prec * LinearAlgebra.I)` instead.", :MvNormalCanon; force = true)
148+
MvNormalCanon(h, prec * I)
149+
end
150+
@noinline function MvNormalCanon(prec::AbstractVector)
151+
Base.depwarn("`MvNormalCanon(prec::AbstractVector)` is deprecated, use `MvNormalCanon(LinearAlgebra.Diagonal(prec))` instead.", :MvNormalCanon; force = true)
152+
MvNormalCanon(Diagonal(prec))
153+
end
154+
@noinline function MvNormalCanon(d::Int, prec::Real)
155+
Base.depwarn("`MvNormalCanon(d::Int, prec::Real)` is deprecated, use `MvNormalCanon(LinearAlgebra.Diagonal(FillArrays.Fill(prec, d)))` instead.", :MvNormalCanon; force = true)
156+
MvNormalCanon(Diagonal(Fill(prec, d)))
157+
end
158+
159+
### Constructors of `Truncated` are deprecated - users should call `truncated`
160+
export Truncated
161+
@noinline function Truncated(d::UnivariateDistribution, l::Real, u::Real)
162+
Base.depwarn("`Truncated(d::UnivariateDistribution, l::Real, u::Real)` is deprecated, use `truncated(d, l, u)` instead.", :Truncated; force = true)
163+
truncated(d, l, u)
164+
end
165+
@noinline function Truncated(d::UnivariateDistribution, l::T, u::T, lcdf::T, ucdf::T, tp::T, logtp::T) where {T <: Real}
166+
Base.depwarn("`Truncated(d::UnivariateDistribution, l::T, u::T, lcdf::T, ucdf::T, tp::T, logtp::T) where {T <: Real}` is deprecated, use `Truncated(d, l, u, log(lcdf), lcdf, ucdf, tp, logtp)` instead.", :Truncated; force = true)
167+
Truncated(d, l, u, log(lcdf), lcdf, ucdf, tp, logtp)
168+
end
169+
170+
export Product
171+
function Product(v::V) where {S<:ValueSupport,T<:UnivariateDistribution{S},V<:AbstractVector{T}}
172+
Base.depwarn(
173+
"`Product(v::AbstractVector{<:UnivariateDistribution})` is deprecated, use `product_distribution(v)`",
174+
:Product;
175+
force = true,
176+
)
177+
return Product{S, T, V}(v)
178+
end
179+
180+
export LocationScale
181+
const LocationScale{T,S,D} = AffineDistribution{T,S,D}
182+
function LocationScale::Real, σ::Real, ρ::UnivariateDistribution; check_args::Bool=true)
183+
Base.depwarn(
184+
"`LocationScale(μ::Real, σ::Real, ρ::UnivariateDistribution; check_args::Bool=true)` is deprecated, use `μ + σ * d` instead.",
185+
:LocationScale;
186+
force = true,
187+
)
188+
# preparation for future PR where I remove σ > 0 check
189+
@check_args LocationScale (σ, σ > zero(σ))
190+
return AffineDistribution(μ, σ, ρ; check_args=false)
191+
end
192+

src/multivariate/mvnormal.jl

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -213,12 +213,6 @@ Construct a multivariate normal distribution with zero mean and covariance matri
213213
"""
214214
MvNormal::AbstractMatrix{<:Real}) = MvNormal(Zeros{eltype(Σ)}(size(Σ, 1)), Σ)
215215

216-
# deprecated constructors with standard deviations
217-
Base.@deprecate MvNormal::AbstractVector{<:Real}, σ::AbstractVector{<:Real}) MvNormal(μ, LinearAlgebra.Diagonal(map(abs2, σ)))
218-
Base.@deprecate MvNormal::AbstractVector{<:Real}, σ::Real) MvNormal(μ, σ^2 * I)
219-
Base.@deprecate MvNormal::AbstractVector{<:Real}) MvNormal(LinearAlgebra.Diagonal(map(abs2, σ)))
220-
Base.@deprecate MvNormal(d::Int, σ::Real) MvNormal(LinearAlgebra.Diagonal(FillArrays.Fill^2, d)))
221-
222216
Base.eltype(::Type{<:MvNormal{T}}) where {T} = T
223217

224218
### Conversion

src/multivariate/mvnormalcanon.jl

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -110,12 +110,6 @@ precision matrix `J`.
110110
"""
111111
MvNormalCanon(J::AbstractMatrix{<:Real}) = MvNormalCanon(Zeros{eltype(J)}(size(J, 1)), J)
112112

113-
# Deprecated constructors
114-
Base.@deprecate MvNormalCanon(h::AbstractVector{<:Real}, prec::AbstractVector{<:Real}) MvNormalCanon(h, LinearAlgebra.Diagonal(prec))
115-
Base.@deprecate MvNormalCanon(h::AbstractVector{<:Real}, prec::Real) MvNormalCanon(h, prec * I)
116-
Base.@deprecate MvNormalCanon(prec::AbstractVector) MvNormalCanon(LinearAlgebra.Diagonal(prec))
117-
Base.@deprecate MvNormalCanon(d::Int, prec::Real) MvNormalCanon(LinearAlgebra.Diagonal(FillArrays.Fill(prec, d)))
118-
119113
### Show
120114

121115
distrname(d::IsoNormalCanon) = "IsoNormalCanon"

src/multivariate/product.jl

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -26,14 +26,6 @@ struct Product{
2626
end
2727
end
2828

29-
function Product(v::V) where {S<:ValueSupport,T<:UnivariateDistribution{S},V<:AbstractVector{T}}
30-
Base.depwarn(
31-
"`Product(v)` is deprecated, please use `product_distribution(v)`",
32-
:Product,
33-
)
34-
return Product{S, T, V}(v)
35-
end
36-
3729
length(d::Product) = length(d.v)
3830
function Base.eltype(::Type{<:Product{S,T}}) where {S<:ValueSupport,
3931
T<:UnivariateDistribution{S}}

src/truncate.jl

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -105,10 +105,6 @@ end
105105
const LeftTruncated{D<:UnivariateDistribution,S<:ValueSupport,T<:Real} = Truncated{D,S,T,T,Nothing}
106106
const RightTruncated{D<:UnivariateDistribution,S<:ValueSupport,T<:Real} = Truncated{D,S,T,Nothing,T}
107107

108-
### Constructors of `Truncated` are deprecated - users should call `truncated`
109-
@deprecate Truncated(d::UnivariateDistribution, l::Real, u::Real) truncated(d, l, u)
110-
@deprecate Truncated(d::UnivariateDistribution, l::T, u::T, lcdf::T, ucdf::T, tp::T, logtp::T) where {T <: Real} Truncated(d, l, u, log(lcdf), lcdf, ucdf, tp, logtp)
111-
112108
function truncated(d::Truncated, l::T, u::T) where {T<:Real}
113109
return truncated(
114110
d.untruncated,

src/univariate/continuous/vonmises.jl

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,6 @@ mean(d::VonMises) = d.μ
5656
median(d::VonMises) = d.μ
5757
mode(d::VonMises) = d.μ
5858
var(d::VonMises) = 1 - besselix(1, d.κ) / d.I0κx
59-
# deprecated 12 September 2016
60-
@deprecate circvar(d) var(d)
6159
entropy(d::VonMises) = log(twoπ * d.I0κx) + d.κ * (1 - besselix(1, d.κ) / d.I0κx)
6260

6361
cf(d::VonMises, t::Real) = (besselix(abs(t), d.κ) / d.I0κx) * cis(t * d.μ)

src/univariate/locationscale.jl

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -61,14 +61,6 @@ function AffineDistribution(μ::Real, σ::Real, ρ::UnivariateDistribution; chec
6161
end
6262

6363
# aliases
64-
const LocationScale{T,S,D} = AffineDistribution{T,S,D}
65-
function LocationScale::Real, σ::Real, ρ::UnivariateDistribution; check_args::Bool=true)
66-
Base.depwarn("`LocationScale` is deprecated. Use `+` and `*` instead", :LocationScale)
67-
# preparation for future PR where I remove σ > 0 check
68-
@check_args LocationScale (σ, σ > zero(σ))
69-
return AffineDistribution(μ, σ, ρ; check_args=false)
70-
end
71-
7264
const ContinuousAffineDistribution{T<:Real,D<:ContinuousUnivariateDistribution} = AffineDistribution{T,Continuous,D}
7365
const DiscreteAffineDistribution{T<:Real,D<:DiscreteUnivariateDistribution} = AffineDistribution{T,Discrete,D}
7466

0 commit comments

Comments
 (0)