@@ -545,67 +545,20 @@ Exactly like `LogLikelihoodAccumulator`, but calls `Libtask.produce` on change o
545545# Fields
546546$(TYPEDFIELDS)
547547"""
548- struct ProduceLogLikelihoodAccumulator{T<: Real } <: DynamicPPL.AbstractAccumulator
548+ struct ProduceLogLikelihoodAccumulator{T<: Real } <: DynamicPPL.LogProbAccumulator{T}
549549 " the scalar log likelihood value"
550550 logp:: T
551551end
552552
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-
586553# Note that this uses the same name as `LogLikelihoodAccumulator`. Thus only one of the two
587554# can be used in a given VarInfo.
588555DynamicPPL. accumulator_name (:: Type{<:ProduceLogLikelihoodAccumulator} ) = :LogLikelihood
556+ DynamicPPL. logp (acc:: ProduceLogLikelihoodAccumulator ) = acc. logp
589557
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)
609562end
610563
611564function DynamicPPL. accumulate_assume!! (
616569function DynamicPPL. accumulate_observe!! (
617570 acc:: ProduceLogLikelihoodAccumulator , right, left, vn
618571)
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))
632573end
633574
634575# We need to tell Libtask which calls may have `produce` calls within them. In practice most
0 commit comments