Skip to content

Commit 7c3af32

Browse files
authored
Fix deprecation of Product (#1590)
* Fix deprecation of `Product` * Fix typo * Fix other deprecations * Fix deprecation warning in test
1 parent 0c9367c commit 7c3af32

File tree

4 files changed

+23
-22
lines changed

4 files changed

+23
-22
lines changed

Project.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
name = "Distributions"
22
uuid = "31c24e10-a181-5473-b8eb-7969acd0382f"
33
authors = ["JuliaStats"]
4-
version = "0.25.65"
4+
version = "0.25.66"
55

66
[deps]
77
ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4"

src/multivariate/product.jl

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -17,18 +17,19 @@ struct Product{
1717
V<:AbstractVector{T},
1818
} <: MultivariateDistribution{S}
1919
v::V
20-
function Product(v::V) where
21-
V<:AbstractVector{T} where
22-
T<:UnivariateDistribution{S} where
23-
S<:ValueSupport
24-
Base.depwarn(
25-
"`Product(v)` is deprecated, please use `product_distribution(v)`",
26-
:Product,
27-
)
28-
return new{S, T, V}(v)
20+
function Product{S,T,V}(v::V) where {S<:ValueSupport,T<:UnivariateDistribution{S},V<:AbstractVector{T}}
21+
return new{S,T,V}(v)
2922
end
3023
end
3124

25+
function Product(v::V) where {S<:ValueSupport,T<:UnivariateDistribution{S},V<:AbstractVector{T}}
26+
Base.depwarn(
27+
"`Product(v)` is deprecated, please use `product_distribution(v)`",
28+
:Product,
29+
)
30+
return Product{S, T, V}(v)
31+
end
32+
3233
length(d::Product) = length(d.v)
3334
function Base.eltype(::Type{<:Product{S,T}}) where {S<:ValueSupport,
3435
T<:UnivariateDistribution{S}}
@@ -48,9 +49,9 @@ insupport(d::Product, x::AbstractVector) = all(insupport.(d.v, x))
4849
minimum(d::Product) = map(minimum, d.v)
4950
maximum(d::Product) = map(maximum, d.v)
5051

51-
# TODO: remove deprecation when `Product` is removed
52+
# will be removed when `Product` is removed
5253
# it will return a `ProductDistribution` then which is already the default for
5354
# higher-dimensional arrays and distributions
54-
Base.@deprecate product_distribution(
55-
dists::AbstractVector{<:UnivariateDistribution}
56-
) Product(dists)
55+
function product_distribution(dists::V) where {S<:ValueSupport,T<:UnivariateDistribution{S},V<:AbstractVector{T}}
56+
return Product{S,T,V}(dists)
57+
end

src/product.jl

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ function ProductDistribution(dists::AbstractArray{<:Distribution{ArrayLikeVariat
2424
return ProductDistribution{M + N,M,typeof(dists)}(dists)
2525
end
2626

27-
function ProductDistribution(dists::Tuple{Vararg{<:Distribution{ArrayLikeVariate{M}},N}}) where {M,N}
27+
function ProductDistribution(dists::NTuple{N,Distribution{ArrayLikeVariate{M}}}) where {M,N}
2828
return ProductDistribution{M + 1,M,typeof(dists)}(dists)
2929
end
3030

@@ -33,10 +33,10 @@ _product_valuesupport(dists) = mapreduce(value_support ∘ typeof, promote_type,
3333
_product_eltype(dists) = mapreduce(eltype, promote_type, dists)
3434

3535
# type-stable and faster implementations for tuples
36-
function _product_valuesupport(dists::Tuple{Vararg{<:Distribution}})
36+
function _product_valuesupport(dists::NTuple{<:Any,Distribution})
3737
return __product_promote_type(value_support, typeof(dists))
3838
end
39-
function _product_eltype(dists::Tuple{Vararg{<:Distribution}})
39+
function _product_eltype(dists::NTuple{<:Any,Distribution})
4040
return __product_promote_type(eltype, typeof(dists))
4141
end
4242

@@ -54,7 +54,7 @@ function _product_size(dists::AbstractArray{<:Distribution{<:ArrayLikeVariate{M}
5454
size_dists = size(dists)
5555
return ntuple(i -> i <= M ? size_d[i] : size_dists[i-M], Val(M + N))
5656
end
57-
function _product_size(dists::Tuple{Vararg{<:Distribution{<:ArrayLikeVariate{M}},N}}) where {M,N}
57+
function _product_size(dists::NTuple{N,Distribution{<:ArrayLikeVariate{M}}}) where {M,N}
5858
size_d = size(first(dists))
5959
all(size(d) == size_d for d in dists) || error("all distributions must be of the same size")
6060
return ntuple(i -> i <= M ? size_d[i] : N, Val(M + 1))

test/product.jl

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ end
3939
ubound = rand(N)
4040
ds = Uniform.(-ubound, ubound)
4141
x = rand.(ds)
42-
d_product = @test_deprecated(product_distribution(ds))
42+
d_product = product_distribution(ds)
4343
@test d_product isa Product
4444
# Check that methods for `Product` are consistent.
4545
@test length(d_product) == length(ds)
@@ -70,7 +70,7 @@ end
7070
support = fill(a, N)
7171
ds = DiscreteNonParametric.(support, Ref([0.5, 0.5]))
7272
x = rand.(ds)
73-
d_product = @test_deprecated(product_distribution(ds))
73+
d_product = product_distribution(ds)
7474
@test d_product isa Product
7575
# Check that methods for `Product` are consistent.
7676
@test length(d_product) == length(ds)
@@ -92,7 +92,7 @@ end
9292
@testset "Testing iid product distributions" begin
9393
Random.seed!(123456)
9494
N = 11
95-
d = Product(Fill(Laplace(0.0, 2.3), N))
95+
d = @test_deprecated(Product(Fill(Laplace(0.0, 2.3), N)))
9696
@test N == length(unique(rand(d)));
9797
@test mean(d) === Fill(0.0, N)
9898
@test cov(d) === Diagonal(Fill(var(Laplace(0.0, 2.3)), N))
@@ -345,4 +345,4 @@ end
345345
@test length(unique(x)) == length(d_product)
346346
end
347347
end
348-
end
348+
end

0 commit comments

Comments
 (0)