From d69081d8c7306c728dad50cbea1a468c27787775 Mon Sep 17 00:00:00 2001 From: Seth Axen Date: Mon, 30 Jan 2023 20:41:56 +0100 Subject: [PATCH 1/4] Throw error if transform not supported --- src/bijectors/ordered.jl | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/bijectors/ordered.jl b/src/bijectors/ordered.jl index d1bfd8f0..afb0f829 100644 --- a/src/bijectors/ordered.jl +++ b/src/bijectors/ordered.jl @@ -14,7 +14,12 @@ struct OrderedBijector <: Bijector{1} end Return a `Distribution` whose support are ordered vectors, i.e., vectors with increasingly ordered elements. """ -ordered(d::ContinuousMultivariateDistribution) = Bijectors.transformed(d, OrderedBijector()) +function ordered(d::ContinuousMultivariateDistribution) + if !isa(bijector(d), Identity) + throw(ArgumentError("ordered transform is currently only supported for unconstrained distributions.")) + end + return Bijectors.transformed(d, OrderedBijector()) +end (b::OrderedBijector)(y::AbstractVecOrMat) = _transform_ordered(y) From bae11132292ea9c49cb6c6bbe68ba9b04172b46c Mon Sep 17 00:00:00 2001 From: Seth Axen Date: Mon, 30 Jan 2023 20:42:08 +0100 Subject: [PATCH 2/4] Document requirements of ordered --- src/bijectors/ordered.jl | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/bijectors/ordered.jl b/src/bijectors/ordered.jl index afb0f829..6e66bf71 100644 --- a/src/bijectors/ordered.jl +++ b/src/bijectors/ordered.jl @@ -13,6 +13,8 @@ struct OrderedBijector <: Bijector{1} end ordered(d::Distribution) Return a `Distribution` whose support are ordered vectors, i.e., vectors with increasingly ordered elements. + +This transformation is currently only supported for otherwise unconstrained distributions. """ function ordered(d::ContinuousMultivariateDistribution) if !isa(bijector(d), Identity) From e606dec12407491766dc90775e5e08bec9a96fcb Mon Sep 17 00:00:00 2001 From: Seth Axen Date: Mon, 30 Jan 2023 20:42:14 +0100 Subject: [PATCH 3/4] Add ordered test --- test/bijectors/ordered.jl | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/test/bijectors/ordered.jl b/test/bijectors/ordered.jl index 1bf53931..2de88f03 100644 --- a/test/bijectors/ordered.jl +++ b/test/bijectors/ordered.jl @@ -1,4 +1,5 @@ -import Bijectors: OrderedBijector +import Bijectors: OrderedBijector, ordered +using LinearAlgebra @testset "OrderedBijector" begin b = OrderedBijector() @@ -20,3 +21,22 @@ import Bijectors: OrderedBijector @test sort(ys[:, 1]) == ys[:, 1] @test sort(ys[:, 2]) == ys[:, 2] end + +@testset "ordered" begin + d = MvNormal(1:5, Diagonal(6:10)) + d_ordered = ordered(d) + @test d_ordered isa Bijectors.TransformedDistribution + @test d_ordered.dist === d + @test d_ordered.transform isa OrderedBijector + y = randn(5) + x = inv(bijector(d_ordered))(y) + @test issorted(x) + + d = Product(fill(Normal(), 5)) + # currently errors because `bijector(Product(fill(Normal(), 5)))` is not an `Identity` + @test_broken ordered(d) isa Bijectors.TransformedDistribution + + # non-Identity bijector is not supported + d = Dirichlet(ones(5)) + @test_throws ArgumentError ordered(d) +end From 354dae0ce583261e3fce7598b972cabffc4772de Mon Sep 17 00:00:00 2001 From: Hong Ge <3279477+yebai@users.noreply.github.com> Date: Thu, 2 Feb 2023 18:18:41 +0000 Subject: [PATCH 4/4] Update Project.toml --- Project.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Project.toml b/Project.toml index 938d4735..0612e18d 100644 --- a/Project.toml +++ b/Project.toml @@ -1,6 +1,6 @@ name = "Bijectors" uuid = "76274a88-744f-5084-9051-94815aaf08c4" -version = "0.10.6" +version = "0.11.1" [deps] ArgCheck = "dce04be8-c92d-5529-be00-80e4d2c0e197"