@@ -545,67 +545,20 @@ Exactly like `LogLikelihoodAccumulator`, but calls `Libtask.produce` on change o
545
545
# Fields
546
546
$(TYPEDFIELDS)
547
547
"""
548
- struct ProduceLogLikelihoodAccumulator{T<: Real } <: DynamicPPL.AbstractAccumulator
548
+ struct ProduceLogLikelihoodAccumulator{T<: Real } <: DynamicPPL.LogProbAccumulator{T}
549
549
" the scalar log likelihood value"
550
550
logp:: T
551
551
end
552
552
553
- """
554
- ProduceLogLikelihoodAccumulator{T}()
555
-
556
- Create a new `ProduceLogLikelihoodAccumulator` accumulator with the log likelihood of zero.
557
- """
558
- ProduceLogLikelihoodAccumulator {T} () where {T<: Real } =
559
- ProduceLogLikelihoodAccumulator (zero (T))
560
- function ProduceLogLikelihoodAccumulator ()
561
- return ProduceLogLikelihoodAccumulator {DynamicPPL.LogProbType} ()
562
- end
563
-
564
- Base. copy (acc:: ProduceLogLikelihoodAccumulator ) = acc
565
-
566
- function Base. show (io:: IO , acc:: ProduceLogLikelihoodAccumulator )
567
- return print (io, " ProduceLogLikelihoodAccumulator($(repr (acc. logp)) )" )
568
- end
569
-
570
- function Base.:(== )(
571
- acc1:: ProduceLogLikelihoodAccumulator , acc2:: ProduceLogLikelihoodAccumulator
572
- )
573
- return acc1. logp == acc2. logp
574
- end
575
-
576
- function Base. isequal (
577
- acc1:: ProduceLogLikelihoodAccumulator , acc2:: ProduceLogLikelihoodAccumulator
578
- )
579
- return isequal (acc1. logp, acc2. logp)
580
- end
581
-
582
- function Base. hash (acc:: ProduceLogLikelihoodAccumulator , h:: UInt )
583
- return hash ((ProduceLogLikelihoodAccumulator, acc. logp), h)
584
- end
585
-
586
553
# Note that this uses the same name as `LogLikelihoodAccumulator`. Thus only one of the two
587
554
# can be used in a given VarInfo.
588
555
DynamicPPL. accumulator_name (:: Type{<:ProduceLogLikelihoodAccumulator} ) = :LogLikelihood
556
+ DynamicPPL. logp (acc:: ProduceLogLikelihoodAccumulator ) = acc. logp
589
557
590
- function DynamicPPL. split (:: ProduceLogLikelihoodAccumulator{T} ) where {T}
591
- return ProduceLogLikelihoodAccumulator (zero (T))
592
- end
593
-
594
- function DynamicPPL. combine (
595
- acc:: ProduceLogLikelihoodAccumulator , acc2:: ProduceLogLikelihoodAccumulator
596
- )
597
- return ProduceLogLikelihoodAccumulator (acc. logp + acc2. logp)
598
- end
599
-
600
- function Base.:+ (
601
- acc1:: ProduceLogLikelihoodAccumulator , acc2:: DynamicPPL.LogLikelihoodAccumulator
602
- )
603
- Libtask. produce (acc2. logp)
604
- return ProduceLogLikelihoodAccumulator (acc1. logp + acc2. logp)
605
- end
606
-
607
- function Base. zero (acc:: ProduceLogLikelihoodAccumulator )
608
- return ProduceLogLikelihoodAccumulator (zero (acc. logp))
558
+ function DynamicPPL. acclogp (acc1:: ProduceLogLikelihoodAccumulator , val)
559
+ # The below line is the only difference from `LogLikelihoodAccumulator`.
560
+ Libtask. produce (val)
561
+ return ProduceLogLikelihoodAccumulator (acc1. logp + val)
609
562
end
610
563
611
564
function DynamicPPL. accumulate_assume!! (
616
569
function DynamicPPL. accumulate_observe!! (
617
570
acc:: ProduceLogLikelihoodAccumulator , right, left, vn
618
571
)
619
- return acc +
620
- DynamicPPL. LogLikelihoodAccumulator (Distributions. loglikelihood (right, left))
621
- end
622
-
623
- function Base. convert (
624
- :: Type{ProduceLogLikelihoodAccumulator{T}} , acc:: ProduceLogLikelihoodAccumulator
625
- ) where {T}
626
- return ProduceLogLikelihoodAccumulator (convert (T, acc. logp))
627
- end
628
- function DynamicPPL. convert_eltype (
629
- :: Type{T} , acc:: ProduceLogLikelihoodAccumulator
630
- ) where {T}
631
- return ProduceLogLikelihoodAccumulator (convert (T, acc. logp))
572
+ return DynamicPPL. acclogp (acc, Distributions. loglikelihood (right, left))
632
573
end
633
574
634
575
# We need to tell Libtask which calls may have `produce` calls within them. In practice most
0 commit comments