@@ -3,43 +3,43 @@ import Distributions
3
3
export Dists
4
4
const Dists = Distributions
5
5
6
- function Measure (dist:: Dists.Distribution{F,S} ) where {F,S}
7
- X = Base. eltype (dist)
8
- DistributionMeasure {F,S,X} (dist)
9
- end
10
6
11
- struct DistributionMeasure{F,S,X} <: AbstractMeasure
12
- dist:: Dists.Distribution{F,S}
13
- end
14
7
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
18
12
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:\n as($d )" )
21
14
end
22
15
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
26
17
27
- basemeasure (d:: Dists.AbstractMvNormal ) = Lebesgue (ℝ)^ size (d)
18
+ function asTransform (supp:: Dists.RealInterval )
19
+ (lb, ub) = (supp. lb, supp. ub)
28
20
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)
31
25
end
32
26
33
- @inline function basemeasure (μ:: Dists.Distribution{Dists.Univariate,Dists.Discrete} )
34
- return CountingMeasure (ℤ)
35
- end
27
+ as (μ:: AbstractMeasure , _data:: NamedTuple ) = as (μ)
36
28
37
- ∫ ( :: typeof (identity), :: Dists.Distribution ) = 1.0
29
+ as (d :: Dists.AbstractMvNormal , _data :: NamedTuple = NamedTuple ()) = TV . as (Array, size (d))
38
30
39
- logdensity_def (μ:: Dists.Distribution , x) = Dists. logpdf (μ, x)
40
31
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
42
38
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
44
44
45
- insupport (d :: Dists.Distribution , x ) = logdensityof (d, x) > - Inf
45
+ as (m :: DistributionMeasures.DistributionMeasure ) = as (m . d)
0 commit comments