Skip to content

Commit 6b667ce

Browse files
committed
Merge branch 'master' into DistributionMeasures
2 parents 9c41980 + 6a42ef6 commit 6b667ce

File tree

7 files changed

+49
-40
lines changed

7 files changed

+49
-40
lines changed

Project.toml

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
name = "MeasureTheory"
22
uuid = "eadaa1a4-d27c-401d-8699-e962e1bbc33b"
33
authors = ["Chad Scherrer <[email protected]> and contributors"]
4-
version = "0.16.6"
4+
version = "0.17.2"
55

66
[deps]
77
Accessors = "7d9f7c33-5ae7-4f3b-8dc6-eff91059b697"
@@ -27,14 +27,13 @@ MacroTools = "1914dd2f-81c6-5fcd-8719-6d5c9610ff09"
2727
MappedArrays = "dbb5928d-eab1-5f90-85c2-b9b0edb7c900"
2828
MeasureBase = "fa1605e6-acd5-459c-a1e6-7e635759db14"
2929
NamedTupleTools = "d9ec5142-1e00-5aa0-9d6a-321866360f50"
30-
NestedTuples = "a734d2a7-8d68-409b-9419-626914d4061d"
3130
PositiveFactorizations = "85a6dd25-e78a-55b7-8502-1745935b8125"
3231
PrettyPrinting = "54e16d92-306c-5ea0-a30b-337be88ac337"
3332
Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c"
3433
Reexport = "189a3867-3050-52da-a836-e630ba90ab69"
3534
SpecialFunctions = "276daf66-3868-5448-9aa4-cd146d93841b"
3635
Static = "aedffcd0-7271-4cad-89d0-dc628f76c6d3"
37-
StaticArrays = "90137ffa-7385-5640-81b9-e52037218182"
36+
StaticArraysCore = "1e83bf80-4336-4d27-bf5d-d5a4f845583c"
3837
Statistics = "10745b16-79ce-11e8-11f9-7d13ad32a3b2"
3938
StatsBase = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91"
4039
StatsFuns = "4c63d2b9-4356-54db-8cca-17b64c39e42c"
@@ -44,10 +43,11 @@ Tricks = "410a4b4d-49e4-4fbc-ab6d-cb71b17b3775"
4443
[compat]
4544
Accessors = "0.1"
4645
ChangesOfVariables = "0.1"
47-
Compat = "3.35, 4"
46+
Compat = "3.42, 4"
4847
ConcreteStructs = "0.2"
4948
ConstructionBase = "1.3"
5049
DensityInterface = "0.4"
50+
DistributionMeasures = "0.2"
5151
Distributions = "0.25"
5252
DynamicIterators = "0.4"
5353
FillArrays = "0.12, 0.13"
@@ -60,15 +60,14 @@ LogExpFunctions = "0.3.3"
6060
MLStyle = "0.4"
6161
MacroTools = "0.5"
6262
MappedArrays = "0.4"
63-
MeasureBase = "0.12"
63+
MeasureBase = "0.13"
6464
NamedTupleTools = "0.13, 0.14"
65-
NestedTuples = "0.3"
6665
PositiveFactorizations = "0.2"
6766
PrettyPrinting = "0.3, 0.4"
6867
Reexport = "1"
6968
SpecialFunctions = "1, 2"
7069
Static = "0.5, 0.6"
71-
StaticArrays = "1.3"
70+
StaticArraysCore = "1"
7271
StatsBase = "0.32, 0.33"
7372
StatsFuns = "0.9, 1"
7473
TransformVariables = "0.5, 0.6"

src/MeasureTheory.jl

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
module MeasureTheory
22

3+
using Compat
34
using Random
45

56
using MeasureBase
67
using MLStyle
7-
using NestedTuples
88
import TransformVariables
99
const TV = TransformVariables
1010

11+
using DistributionMeasures
1112
using TransformVariables: asℝ₊, as𝕀, asℝ, transform
1213

1314
import Base
@@ -65,13 +66,12 @@ using MeasureBase: AbstractTransitionKernel
6566

6667
import Statistics: mean, var, std
6768

68-
import MeasureBase: likelihood
69-
export likelihood
69+
import MeasureBase: likelihoodof
70+
export likelihoodof
7071
export log_likelihood_ratio
7172

7273
using DistributionMeasures
73-
74-
using StaticArrays
74+
using StaticArraysCore
7575

7676
import PrettyPrinting
7777

src/combinators/exponential-families.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ end
9797

9898
# end
9999

100-
function MeasureBase.likelihood(fam::ExponentialFamily, y)
100+
function MeasureBase.likelihoodof(fam::ExponentialFamily, y)
101101
c = logdensityof(fam.base, y)
102102
t = ApplyArray(vcat, (f.(y) for f in fam.t)...)
103103
tᵀx = t' * fam.x

src/combinators/product.jl

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@ function as(d::PowerMeasure)
22
as(Array, as(d.parent), length.(d.axes)...)
33
end
44

5+
function as(d::ProductMeasure{<:AbstractArray{<:Dirac}})
6+
return asConst(testvalue.(marginals(d)))
7+
end
8+
59
function as(d::ProductMeasure{A}) where {A<:AbstractArray}
610
mar = marginals(d)
711
ts = map(as, mar)

src/combinators/tweedie.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,7 @@ struct TweedieLikelihood{C,Θ,H,T,A} <: AbstractLikelihood
145145
a::A
146146
end
147147

148-
function likelihood(fam::Tweedie, x)
148+
function likelihoodof(fam::Tweedie, x)
149149
c = logdensityof(fam.base, x)
150150
t = fam.t(x)
151151
TweedieLikelihood(c, fam.θ, fam.η, t, fam.a)

src/distributions.jl

Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -3,43 +3,43 @@ import Distributions
33
export Dists
44
const Dists = Distributions
55

6-
function Measure(dist::Dists.Distribution{F,S}) where {F,S}
7-
X = Base.eltype(dist)
8-
DistributionMeasure{F,S,X}(dist)
9-
end
106

11-
struct DistributionMeasure{F,S,X} <: AbstractMeasure
12-
dist::Dists.Distribution{F,S}
13-
end
147

15-
@inline function basemeasure::DistributionMeasure{F,S,X}) where {F,S<:Dists.Continuous,X}
16-
return Lebesgue(X)
17-
end
8+
@inline function as(d, _data::NamedTuple)
9+
if hasmethod(Dists.support, (typeof(d),))
10+
return asTransform(Dists.support(d))
11+
end
1812

19-
@inline function logdensity_def::DistributionMeasure{F,S,X}, x::X) where {F,S,X}
20-
return Dists.logpdf.dist, x)
13+
error("Not implemented:\nas($d)")
2114
end
2215

23-
function Base.rand(rng::AbstractRNG, μ::DistributionMeasure{F,S,X}) where {F,S,X}
24-
return rand(rng, μ.dist)
25-
end
16+
using TransformVariables: ShiftedExp, ScaledShiftedLogistic
2617

27-
basemeasure(d::Dists.AbstractMvNormal) = Lebesgue(ℝ)^size(d)
18+
function asTransform(supp:: Dists.RealInterval)
19+
(lb, ub) = (supp.lb, supp.ub)
2820

29-
@inline function basemeasure::Dists.Distribution{Dists.Univariate,Dists.Continuous})
30-
return Lebesgue(ℝ)
21+
(lb, ub) == (-Inf, Inf) && (return asℝ)
22+
isinf(ub) && return ShiftedExp(true,lb)
23+
isinf(lb) && return ShiftedExp(false,lb)
24+
return ScaledShiftedLogistic(ub-lb, lb)
3125
end
3226

33-
@inline function basemeasure::Dists.Distribution{Dists.Univariate,Dists.Discrete})
34-
return CountingMeasure(ℤ)
35-
end
27+
as::AbstractMeasure, _data::NamedTuple) = as(μ)
3628

37-
(::typeof(identity), ::Dists.Distribution) = 1.0
29+
as(d::Dists.AbstractMvNormal, _data::NamedTuple = NamedTuple()) = TV.as(Array, size(d))
3830

39-
logdensity_def::Dists.Distribution, x) = Dists.logpdf(μ, x)
4031

41-
density_def::Dists.Distribution, x) = Dists.pdf(μ, x)
32+
function as(d::Dists.Distribution{Dists.Univariate}, _data::NamedTuple=NamedTuple())
33+
sup = Dists.support(d)
34+
lo = isinf(sup.lb) ? -TV.∞ : sup.lb
35+
hi = isinf(sup.ub) ? TV.∞ : sup.ub
36+
as(Real, lo,hi)
37+
end
4238

43-
testvalue(d::Dists.Distribution) = rand(d)
39+
function as(d::Dists.Product, _data::NamedTuple=NamedTuple())
40+
n = length(d)
41+
v = d.v
42+
as(Vector, as(v[1]), n)
43+
end
4444

45-
insupport(d::Dists.Distribution, x) = logdensityof(d, x) > -Inf
45+
as(m::DistributionMeasures.DistributionMeasure) = as(m.d)

test/runtests.jl

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -275,6 +275,12 @@ end
275275
end
276276
end
277277

278+
@testset "Product of Diracs" begin
279+
x = randn(3)
280+
t = as(productmeasure(Dirac.(x)))
281+
@test transform(t, []) == x
282+
end
283+
278284
# @testset "Univariate chain" begin
279285
# ξ0 = 1.
280286
# x = 1.2

0 commit comments

Comments
 (0)