@@ -36,9 +36,24 @@ Base.propertynames(d::Affine{N}) where {N} = N ∪ (:parent,)
36
36
end
37
37
end
38
38
39
- logdensity (d :: Affine{(:μ,:σ)} , x) = logdensity (d . parent, d . σ \ (x - d . μ)) - log (d . σ)
40
- logdensity (d:: Affine{(:μ,:ω)} , x) = logdensity (d . parent, d . ω * (x - d . μ)) + log (d . ω )
39
+ # Note: We could also write
40
+ # logdensity(d::Affine, x) = logdensity(inv(getfield(d, :f)), x )
41
41
42
- logdensity (d:: Affine{(:σ,)} , x) = logdensity (d. parent, d. σ \ x) - log (d. σ)
43
- logdensity (d:: Affine{(:ω,)} , x) = logdensity (d. parent, d. ω * x) + log (d. ω)
42
+ logdensity (d:: Affine{(:μ,:σ)} , x) = logdensity (d. parent, d. σ \ (x - d. μ))
43
+ logdensity (d:: Affine{(:μ,:ω)} , x) = logdensity (d. parent, d. ω * (x - d. μ))
44
+ logdensity (d:: Affine{(:σ,)} , x) = logdensity (d. parent, d. σ \ x)
45
+ logdensity (d:: Affine{(:ω,)} , x) = logdensity (d. parent, d. ω * x)
44
46
logdensity (d:: Affine{(:μ,)} , x) = logdensity (d. parent, x - d. μ)
47
+
48
+ basemeasure (d:: Affine ) = Affine (d. f, basemeasure (d. parent))
49
+
50
+ basemeasure (d:: Affine{N,L} ) where {N, L<: Lebesgue } = d. parent
51
+
52
+ logdensity (d:: Affine{N,L} , x) where {N,L<: Lebesgue } = logjac (getfield (d, :f ))
53
+
54
+ # TODO : `log` doesn't work for the multivariate case, we need the log absolute determinant
55
+ logjac (:: AffineTransform{(:μ,:σ)} ) = - log (d. σ)
56
+ logjac (:: AffineTransform{(:μ,:ω)} ) = log (d. ω)
57
+ logjac (:: AffineTransform{(:σ,)} ) = - log (d. σ)
58
+ logjac (:: AffineTransform{(:ω,)} ) = log (d. ω)
59
+ logjac (:: AffineTransform{(:μ,)} ) = 0.0
0 commit comments