Skip to content

Commit

Permalink
Remove another breaking change
Browse files Browse the repository at this point in the history
  • Loading branch information
devmotion committed Nov 29, 2021
1 parent e1fa4b5 commit 55e6c5b
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 6 deletions.
7 changes: 7 additions & 0 deletions src/multivariate/product.jl
Original file line number Diff line number Diff line change
Expand Up @@ -47,3 +47,10 @@ entropy(d::Product) = sum(entropy, d.v)
insupport(d::Product, x::AbstractVector) = all(insupport.(d.v, x))
minimum(d::Product) = map(minimum, d.v)
maximum(d::Product) = map(maximum, d.v)

# TODO: remove deprecation when `Product` is removed
# it will return a `ProductDistribution` then which is already the default for
# higher-dimensional arrays and distributions
Base.@deprecate product_distribution(
dists::AbstractVector{<:UnivariateDistribution}
) Product(dists)
24 changes: 18 additions & 6 deletions test/product.jl
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ end
ubound = rand(N)
ds = Uniform.(-ubound, ubound)
x = rand.(ds)
d_product = @test_deprecated(Product(ds))
d_product = @test_deprecated(product_distribution(ds))
@test d_product isa Product
# Check that methods for `Product` are consistent.
@test length(d_product) == length(ds)
Expand Down Expand Up @@ -68,7 +68,7 @@ end
support = fill(a, N)
ds = DiscreteNonParametric.(support, Ref([0.5, 0.5]))
x = rand.(ds)
d_product = @test_deprecated(Product(ds))
d_product = @test_deprecated(product_distribution(ds))
@test d_product isa Product
# Check that methods for `Product` are consistent.
@test length(d_product) == length(ds)
Expand Down Expand Up @@ -127,14 +127,20 @@ end
ubound = rand(N)

ds1 = Uniform.(0.0, ubound)
d_product1 = @inferred(product_distribution(ds1))
# Replace with
# d_product1 = @inferred(product_distribution(ds1))
# when `Product` is removed
d_product1 = @inferred(Distributions.ProductDistribution(ds1))
@test d_product1 isa Distributions.VectorOfUnivariateDistribution{<:Vector,Continuous,Float64}

d_product2 = @inferred(product_distribution(ntuple(i -> Uniform(0.0, ubound[i]), 11)...))
@test d_product2 isa Distributions.VectorOfUnivariateDistribution{<:Tuple,Continuous,Float64}

ds3 = Fill(Uniform(0.0, first(ubound)), N)
d_product3 = @inferred(product_distribution(ds3))
# Replace with
# d_product3 = @inferred(product_distribution(ds3))
# when `Product` is removed
d_product3 = @inferred(Distributions.ProductDistribution(ds3))
@test d_product3 isa Distributions.VectorOfUnivariateDistribution{<:Fill,Continuous,Float64}

# Check that methods for `VectorOfUnivariateDistribution` are consistent.
Expand Down Expand Up @@ -171,14 +177,20 @@ end
for a in ([0, 1], [-0.5, 0.5])
# Construct independent distributions and `ProductDistribution` from these.
ds1 = DiscreteNonParametric.(fill(a, N), Ref([0.5, 0.5]))
d_product1 = @inferred(product_distribution(ds1))
# Replace with
# d_product1 = @inferred(product_distribution(ds1))
# when `Product` is removed
d_product1 = @inferred(Distributions.ProductDistribution(ds1))
@test d_product1 isa Distributions.VectorOfUnivariateDistribution{<:Vector{<:DiscreteNonParametric},Discrete,eltype(a)}

d_product2 = @inferred(product_distribution(ntuple(_ -> DiscreteNonParametric(a, [0.5, 0.5]), 11)...))
@test d_product2 isa Distributions.VectorOfUnivariateDistribution{<:NTuple{N,<:DiscreteNonParametric},Discrete,eltype(a)}

ds3 = Fill(DiscreteNonParametric(a, [0.5, 0.5]), N)
d_product3 = @inferred(product_distribution(ds3))
# Replace with
# d_product3 = @inferred(product_distribution(ds3))
# when `Product` is removed
d_product3 = @inferred(Distributions.ProductDistribution(ds3))
@test d_product3 isa Distributions.VectorOfUnivariateDistribution{<:Fill{<:DiscreteNonParametric,1},Discrete,eltype(a)}

# Check that methods for `VectorOfUnivariateDistribution` are consistent.
Expand Down

0 comments on commit 55e6c5b

Please sign in to comment.