Skip to content

Commit d32f6c2

Browse files
committed
simplify half-measures
1 parent 31693ea commit d32f6c2

File tree

2 files changed

+17
-28
lines changed

2 files changed

+17
-28
lines changed

src/combinators/half.jl

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,18 @@
11
export Half
22

33
struct Half{M} <: AbstractMeasure
4-
μ::M
4+
parent::M
5+
end
6+
7+
function Base.show(io::IO, μ::Half)
8+
print(io, "Half")
9+
show(io, μ.parent)
10+
end
11+
12+
unhalf::Half) = μ.parent
13+
14+
basemeasure::Half) = basemeasure.parent)
15+
16+
function Base.rand(rng::AbstractRNG, T::Type, μ::Half)
17+
return abs(rand(rng, T, unhalf(μ)))
518
end

src/macros.jl

Lines changed: 3 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -245,36 +245,12 @@ end
245245

246246
function _half(__module__, ex)
247247
@match ex begin
248-
:($dist($(args...))) => begin
248+
:($dist) => begin
249249
halfdist = esc(Symbol(:Half, dist))
250250

251251
quote
252-
struct $halfdist{N,T} <: ParameterizedMeasure{N}
253-
par :: NamedTuple{N,T}
254-
end
255-
256-
unhalf::$halfdist) = $dist(getfield(μ, :par))
257-
258-
function MeasureBase.basemeasure::$halfdist)
259-
b = basemeasure(unhalf(μ))
260-
@assert basemeasure(b) == Lebesgue(ℝ)
261-
lw = b.logweight
262-
return WeightedMeasure(logtwo + lw, Lebesgue(ℝ₊))
263-
end
264-
265-
function MeasureBase.logdensity::$halfdist, x)
266-
return logdensity(unhalf(μ), x)
267-
end
268-
269-
function Base.rand(rng::AbstractRNG, T::Type, μ::$halfdist)
270-
return abs(rand(rng, T, unhalf(μ)))
271-
end
272-
273-
function decompose::$halfdist)
274-
return Half($dist)
275-
end
276-
277-
(::$halfdist ::Lebesgue{ℝ₊}) = true
252+
$halfdist(args...) = Half($dist(args...))
253+
$halfdist(;kwargs...) = Half($dist(;kwargs...))
278254
end
279255
end
280256
end

0 commit comments

Comments
 (0)