Skip to content

chore(deps): upgrade to ConvolvedDistributions 0.4 - #147

Draft
seabbs-bot wants to merge 3 commits into
mainfrom
feat/convd-04-upgrade
Draft

chore(deps): upgrade to ConvolvedDistributions 0.4#147
seabbs-bot wants to merge 3 commits into
mainfrom
feat/convd-04-upgrade

Conversation

@seabbs-bot

@seabbs-bot seabbs-bot commented Aug 10, 2026

Copy link
Copy Markdown
Collaborator

Summary

Audits this package's ConvolvedDistributions (CD) integration against the
six changes in CD 0.4.0 (released 2026-08-06) and widens the compat bound.
Supersedes dependabot #139's narrower ConvolvedDistributions edit (that PR
also bundles an unrelated EpiAwarePackageTools bump, left untouched here).

What broke

Nothing in ext/ModifiedDistributionsConvolvedDistributionsExt.jl itself.
Verified against a real ConvolvedDistributions 0.4.1 checkout (registry has
0.4.0) in an isolated scratch environment: all 96 assertions in
test/ConvolvedDistributionsExt.jl pass (94 pre-existing + 2 new, see
below).

One test assertion elsewhere was pinned to CD's old behaviour and needed
updating: test/integration.jl asserted ArgumentError from a bare
convolve_series(continuous_delay, series) call — CD 0.4 removed that
checked gate (CD#95), so the call now raises a plain MethodError
instead. Fixed to accept either, so the assertion holds across the whole
0.2, 0.3, 0.4 compat range.

What I checked, one item per CD 0.4 change — all verified by running, not just reading

  1. Continuous-delay gate removed (ArgumentError -> MethodError).
    Confirmed directly: convolve_series(convolved(...), series) throws
    MethodError under real CD 0.4.1, ArgumentError under 0.3.1. Only
    test/integration.jl exercised the bare gate directly; fixed (above).

  2. convolve_series now takes a vector of per-time-point delays (new
    in 0.4 — confirmed absent from the 0.2/0.3.1 source). Ran the exact
    scenario against real CD 0.4.1: a Vector of thin-wrapped delays with
    different thin factors, including the same base delay recurring
    with different factors (to exercise CD's ===-keyed masses
    de-duplication cache). Result matched the hand-computed "ops applied"
    expectation exactly and diverged from the "ops silently dropped"
    hypothesis — confirming CD's new delay_masses hook's default (which
    bounces back through a delay's own single-delay convolve_series)
    correctly reaches our Transformed/AbstractModifiedDistribution
    methods via ordinary dispatch, so forward ops are not lost. No code
    change needed; added a regression test
    (test/ConvolvedDistributionsExt.jl, gated on
    pkgversion(ConvolvedDistributions) since the method doesn't exist
    pre-0.4) plus documentation in the extension itself.

  3. Internal renames (_causal_convolve -> _convolve_series_fixed,
    _convolve_series -> _convolve_series_varying). Grepped the whole
    repo: neither name is referenced anywhere. Not applicable.

  4. delay_masses hook now public. Compared against our private
    _discretised_masses: not the same thing. delay_masses's default has
    no continuous-discretisation logic of its own (a bare continuous delay
    still MethodErrors through it — same as point 1) and its signature
    (delay_masses(d, n::Int)) has no interval grid-width argument ours
    exposes and callers use. Left _discretised_masses as is. Deliberately
    did not add a delay_masses method for our wrapper types: the
    symbol does not exist in CD 0.2/0.3 (verified via CD's git history —
    introduced by the same commit series as the 0.4 vector feature), so an
    unconditional import ConvolvedDistributions: delay_masses would break
    extension loading against this package's still-supported 0.2/0.3
    compat range — for zero behavioural gain, since point 2 already showed
    the default composition gives the identical, correct result.

  5. New Ratio type (+ pgf, quantile_by_optimization). Checked at
    runtime, not just by reading source:
    which(logpdf/pdf/cdf, Tuple{Ratio, Vector{Float64}}) (also Product,
    Difference) all resolve to Distributions.jl's generic elementwise
    fallback (deprecated.jl), not a ConvolvedDistributions-owned batched
    method — only Convolved has one (Convolved.jl). Left
    _has_batched_method covering only Convolved; a false declaration
    would have routed a whole vector into a method that doesn't exist.

  6. Solver dispatch for analytic pairs / exact discrete support.
    Checked with ConvolvedDistributions.evaluation_path on the existing
    "modifiers as convolution components" scenarios (an affine-wrapped
    Gamma component, an affine-wrapped unbounded Normal as the last
    component): both still report :numeric under CD 0.4 — that new
    dispatch keys on concrete Distributions.jl types (e.g. Normal+
    Normal), not our wrapper types, so our primal_distribution
    quadrature-window reconstruction stays necessary and is still exercised
    and correct.

Why the resolved version stays at 0.3.1 for now

Bumping the ConvolvedDistributions compat bound here is necessary but not
sufficient: ComposedDistributions is a co-dependency in the shared
test/docs/benchmark environments (for the separate Composed x Convolved
integration tests), and its own ConvolvedDistributions compat — both the
registered 0.1.1 and the unreleased main branch (0.2.0-dev, compat
"0.2, 0.3, 1") — has a gap between 0.3 and 1.0 that excludes CD's
0.4.x. So this repo's compat bump is a safe no-op today: Pkg.resolve()
still picks ConvolvedDistributions 0.3.1, and the full test suite
(2194 pass + 1 skip + 116 quality) passes against that. It'll pick up 0.4
automatically once ComposedDistributions widens its own bound — no
further change needed on this side. The new gated test (point 2 above)
will start actually running once that happens.

I looked at re-pinning ComposedDistributions to its main branch via
[sources] (the pattern this repo used for the earlier CD 0.2 pin,
ModifiedDistributions #87) but reverted it: main's own compat already
excludes CD 0.4.x too, so the pin doesn't unblock anything and only adds
an extra unregistered git dependency.

What I left alone

  • The EpiAwarePackageTools compat bump dependabot chore(deps): bump the julia group with 2 updates #139 also carries —
    unrelated to this task, left for that PR (or a separate one) to handle.
  • No delay_masses method for our modifier types (point 4 above) —
    correct by construction to add, but unsafe to add unconditionally given
    the current compat range, and there's no behavioural gap to justify the
    version-gating complexity.

Test plan

  • test/ConvolvedDistributionsExt.jl (96 assertions, including the
    new time-varying-vector test) passes against a real
    ConvolvedDistributions 0.4.1 in an isolated scratch env
  • Full suite (skip_quality): 2194 pass, 1 skipped (the new
    version-gated test, correctly skipping against the resolved 0.3.1)
  • Quality suite (quality_only, Aqua/formatter/etc.): 116/116 pass
  • Fresh Pkg.resolve() from a clean Manifest confirms no accidental
    pins

This was opened by a bot. Please ping @seabbs for any questions.

Bumps the ConvolvedDistributions compat bound to "0.2, 0.3, 0.4"
across the root, test, docs, benchmark, test/ad and test/ADFixtures
environments (supersedes dependabot #139's narrower ConvolvedDistributions
edit).

The actual resolved version stays at 0.3.1 for now: ComposedDistributions
(a co-dependency in the shared test/docs/benchmark environments, used
for the separate Composed x Convolved integration tests) has not yet
widened its own ConvolvedDistributions compat past 0.3 in either its
registered release (0.1.1) or its unreleased main branch (0.2.0-dev,
compat "0.2, 0.3, 1" — the gap between 0.3 and 1.0 excludes 0.4.x).
This bump is a safe no-op until that upstream gap closes; it does not
change what CI actually resolves or runs today.
ConvolvedDistributions 0.4 removed the checked ArgumentError gate on
convolve_series(continuous_delay, series) (CD#95): an unwrapped
continuous delay now simply matches no method, so the call raises a
plain MethodError instead. Verified directly against a local
ConvolvedDistributions 0.4.1 checkout (registry has 0.4.0): the same
call that threw ArgumentError under 0.2/0.3 now throws MethodError.

This env cannot yet resolve ConvolvedDistributions 0.4 end to end (see
the previous commit), so the assertion still runs against 0.3.1 today;
widening it to accept either exception type keeps the test correct
across the whole declared compat range once CD 0.4 becomes reachable.
ConvolvedDistributions 0.4 added convolve_series(delays::AbstractVector,
series) — one delay per time point, dispatched element-by-element
through the newly public delay_masses hook. Ran it directly against a
real ConvolvedDistributions 0.4.1 checkout: delay_masses's default
bounces back through a delay's own single-delay convolve_series, which
already reaches our Transformed/AbstractModifiedDistribution methods,
so a Vector of forward-wrapped delays (thin, in particular) composes
correctly with no extra method needed, including through
ConvolvedDistributions' ===-keyed masses de-duplication cache for
repeated delays. Added a regression test for this, gated on
pkgversion(ConvolvedDistributions) since the vector form and
delay_masses do not exist before 0.4 (confirmed absent from the 0.2/0.3
source) — it runs for real once CD 0.4 is reachable in this env (see
the previous two commits) and skips cleanly today.

Also audited and documented, in the extension itself, the remaining CD
0.4 changes flagged for this upgrade:

- delay_masses vs our private _discretised_masses: not the same thing.
  delay_masses's default has no continuous-discretisation logic of its
  own (a bare continuous delay still MethodErrors through it) and its
  signature has no interval grid-width argument ours exposes. Left
  _discretised_masses as is, and did not add a delay_masses method
  (the symbol does not exist pre-0.4, so importing it unconditionally
  would break loading against this package's still-supported 0.2/0.3
  compat range for zero behavioural gain over the default).
- _has_batched_method and the new Ratio type: checked with
  which(logpdf/pdf/cdf, Tuple{Ratio, Vector{Float64}}) (also Product,
  Difference) — all resolve to Distributions.jl's generic elementwise
  fallback, not a ConvolvedDistributions-owned batched method. No
  declaration added.
- Solver dispatch for analytic pairs / exact discrete support: confirmed
  with ConvolvedDistributions.evaluation_path that our wrapper types
  still take the :numeric route (that dispatch keys on concrete
  Distributions.jl types), so the primal_distribution quadrature-window
  reconstruction stays necessary and correct under 0.4.
@github-actions

Copy link
Copy Markdown
Contributor

Try this Pull Request!

Option 1: Julia Package Manager

Open Julia and type:

import Pkg
Pkg.activate(temp=true)
Pkg.add(url="https://github.com/EpiAware/ModifiedDistributions.jl", rev="feat/convd-04-upgrade")
using ModifiedDistributions

Option 2: Local Checkout

If you have the repo locally:

git checkout feat/convd-04-upgrade
julia --project=. -e "using Pkg; Pkg.instantiate()"

@codecov

codecov Bot commented Aug 10, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

Flag Coverage Δ
ad-enzyme-forward 27.14% <ø> (ø)
ad-enzyme-reverse 27.14% <ø> (ø)
ad-forwarddiff 16.16% <ø> (ø)
ad-mooncake-forward 16.16% <ø> (ø)
ad-mooncake-reverse 16.16% <ø> (ø)
ad-reversediff 16.16% <ø> (ø)
unit 97.42% <ø> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@github-actions

Copy link
Copy Markdown
Contributor

Benchmark comparison vs base

Minimum time per call. Buckets are PR time as a % of base, so lower is faster (🟢 faster, ⚪ within 5%, 🔴 slower). Counts of benchmarks per bucket:

Group 🟢 <50% 🟢 50–75% 🟢 75–95% ⚪ 95–105% 🔴 105–125% 🔴 125–150% 🔴 >150%
Evaluation · · · 40 · · ·
ForwardDiff · · · 11 · · ·
ReverseDiff (tape) · · · 11 · · ·
Mooncake reverse · · 1 10 · · ·
Mooncake forward · · · 11 · · ·
Enzyme reverse · · · 11 · · ·
Enzyme forward · · · 11 · · ·
Evaluation — 40 benchmarks (by time change)
Benchmark base PR time memory
Baseline / LogNormal / quantile 380.0 ns 390.0 ns ⚪ 1.03× ⚪ 1.0×
Weighted / Product / logpdf 1.74 μs 1.72 μs ⚪ 0.99× ⚪ 1.0×
Modified / IdentityLink / rand 614.88 μs 608.14 μs ⚪ 0.99× ⚪ 1.0×
Affine / LogNormal / cdf 3.56 μs 3.54 μs ⚪ 0.99× ⚪ 1.0×
Modified / LogLink / rand 4.56 μs 4.54 μs ⚪ 1.0× ⚪ 1.0×
Affine / LogNormal / logpdf 2.62 μs 2.61 μs ⚪ 1.0× ⚪ 1.0×
Baseline / LogNormal / cdf 2.7 μs 2.69 μs ⚪ 1.0× ⚪ 1.0×
Baseline / LogNormal / pdf 3.34 μs 3.34 μs ⚪ 1.0× ⚪ 1.0×
Modified / IdentityLink / cdf 8.08 μs 8.06 μs ⚪ 1.0× ⚪ 1.0×
Modified / LogLink / logpdf 7.74 μs 7.76 μs ⚪ 1.0× ⚪ 1.0×
Affine / LogNormal / pdf 4.23 μs 4.22 μs ⚪ 1.0× ⚪ 1.0×
Modified / IdentityLink / ccdf 8.5 μs 8.48 μs ⚪ 1.0× ⚪ 1.0×
Modified / IdentityLink / pdf 14.29 μs 14.32 μs ⚪ 1.0× ⚪ 1.0×
Modified / LogLink / ccdf 6.13 μs 6.12 μs ⚪ 1.0× ⚪ 1.0×
Modified / LogLink / pdf 8.84 μs 8.83 μs ⚪ 1.0× ⚪ 1.0×
Modified / IdentityLink / logpdf 11.71 μs 11.7 μs ⚪ 1.0× ⚪ 1.0×
Modified / IdentityLink / quantile 117.64 μs 117.66 μs ⚪ 1.0× ⚪ 1.0×
Affine / LogNormal / ccdf 3.5 μs 3.5 μs ⚪ 1.0× ⚪ 1.0×
Affine / LogNormal / construction 30.0 ns 30.0 ns ⚪ 1.0×
Affine / LogNormal / quantile 400.0 ns 400.0 ns ⚪ 1.0× ⚪ 1.0×
Affine / LogNormal / rand 811.0 ns 811.0 ns ⚪ 1.0× ⚪ 1.0×
Baseline / LogNormal / ccdf 2.7 μs 2.7 μs ⚪ 1.0× ⚪ 1.0×
Baseline / LogNormal / construction 30.0 ns 30.0 ns ⚪ 1.0×
Baseline / LogNormal / logpdf 1.51 μs 1.51 μs ⚪ 1.0× ⚪ 1.0×
Baseline / LogNormal / rand 620.0 ns 620.0 ns ⚪ 1.0× ⚪ 1.0×
Modified / IdentityLink / construction 30.0 ns 30.0 ns ⚪ 1.0×
Modified / LogLink / cdf 6.67 μs 6.67 μs ⚪ 1.0× ⚪ 1.0×
Modified / LogLink / construction 30.0 ns 30.0 ns ⚪ 1.0×
Modified / LogLink / quantile 811.0 ns 811.0 ns ⚪ 1.0× ⚪ 1.0×
Transformed / cumulative / cdf 2.7 μs 2.7 μs ⚪ 1.0× ⚪ 1.0×
Transformed / cumulative / construction 30.0 ns 30.0 ns ⚪ 1.0×
Transformed / cumulative / logpdf 1.51 μs 1.51 μs ⚪ 1.0× ⚪ 1.0×
Transformed / cumulative / rand 620.0 ns 620.0 ns ⚪ 1.0× ⚪ 1.0×
Transformed / thin / cdf 2.7 μs 2.7 μs ⚪ 1.0× ⚪ 1.0×
Transformed / thin / construction 30.0 ns 30.0 ns ⚪ 1.0×
Transformed / thin / logpdf 1.51 μs 1.51 μs ⚪ 1.0× ⚪ 1.0×
Transformed / thin / rand 620.0 ns 620.0 ns ⚪ 1.0× ⚪ 1.0×
Weighted / Product / construction 170.0 ns 170.0 ns ⚪ 1.0× ⚪ 1.0×
Weighted / scalar / construction 30.0 ns 30.0 ns ⚪ 1.0×
Weighted / scalar / logpdf 1.6 μs 1.6 μs ⚪ 1.0× ⚪ 1.0×
AD gradients — 66 benchmarks (by time change)
Benchmark base PR time memory
AD gradients / Weighted Sequential observed-total logpdf / Mooncake reverse 1.15 ms 1.08 ms 🟢 0.94× ⚪ 1.0×
AD gradients / Product{Weighted} LogNormal vector logpdf / ForwardDiff 590.0 ns 611.0 ns ⚪ 1.04× ⚪ 1.0×
AD gradients / Affine LogNormal scale+shift logpdf / Mooncake forward 6.89 μs 7.12 μs ⚪ 1.03× ⚪ 1.0×
AD gradients / Affine LogNormal scale+shift logpdf / ForwardDiff 640.0 ns 661.0 ns ⚪ 1.03× ⚪ 1.0×
AD gradients / Modified LogNormal log-link logpdf / ReverseDiff (tape) 25.09 μs 24.44 μs ⚪ 0.97× ⚪ 1.0×
AD gradients / Weighted Affine LogNormal nested logpdf / Enzyme reverse 791.0 ns 771.0 ns ⚪ 0.97× ⚪ 1.0×
AD gradients / Transformed thin LogNormal logpdf / Enzyme reverse 1.91 μs 1.95 μs ⚪ 1.02× ⚪ 1.0×
AD gradients / Transformed thin LogNormal logpdf / ForwardDiff 500.0 ns 510.0 ns ⚪ 1.02× ⚪ 1.0×
AD gradients / Weighted Sequential observed-total logpdf / Mooncake forward 405.59 μs 398.03 μs ⚪ 0.98× ⚪ 1.0×
AD gradients / Affine LogNormal scale+shift logpdf / Mooncake reverse 16.39 μs 16.67 μs ⚪ 1.02× ⚪ 1.0×
AD gradients / Weighted Affine LogNormal nested logpdf / ForwardDiff 660.0 ns 671.0 ns ⚪ 1.02× ⚪ 1.0×
AD gradients / Product{Weighted} LogNormal vector logpdf / Mooncake forward 6.76 μs 6.65 μs ⚪ 0.98× ⚪ 1.0×
AD gradients / Weighted LogNormal scalar logpdf / Enzyme reverse 1.17 μs 1.15 μs ⚪ 0.98× ⚪ 1.0×
AD gradients / Modified LogNormal log-link logpdf / Enzyme forward 8.03 μs 7.9 μs ⚪ 0.98× ⚪ 1.0×
AD gradients / Modified LogNormal identity-link logpdf / Mooncake reverse 29.57 μs 29.15 μs ⚪ 0.99× ⚪ 1.0×
AD gradients / Weighted LogNormal observation-time weight logpdf / Mooncake forward 5.92 μs 6.0 μs ⚪ 1.01× ⚪ 1.0×
AD gradients / Modified LogNormal log-link logpdf / Enzyme reverse 3.38 μs 3.42 μs ⚪ 1.01× ⚪ 1.0×
AD gradients / Affine LogNormal scale+shift logpdf / Enzyme forward 7.79 μs 7.7 μs ⚪ 0.99× ⚪ 1.0×
AD gradients / Weighted LogNormal scalar logpdf / Mooncake forward 6.0 μs 6.07 μs ⚪ 1.01× ⚪ 1.0×
AD gradients / Modified LogNormal log-link logpdf / Mooncake reverse 27.81 μs 27.49 μs ⚪ 0.99× ⚪ 1.0×
AD gradients / Transformed cumulative LogNormal logpdf / Enzyme reverse 1.92 μs 1.94 μs ⚪ 1.01× ⚪ 1.0×
AD gradients / Modified LogNormal identity-link logpdf / ForwardDiff 981.0 ns 991.0 ns ⚪ 1.01× ⚪ 1.0×
AD gradients / Thinned convolved series sum / Mooncake reverse 25.91 μs 25.65 μs ⚪ 0.99× ⚪ 1.0×
AD gradients / Weighted LogNormal observation-time weight logpdf / Enzyme forward 7.32 μs 7.39 μs ⚪ 1.01× ⚪ 1.0×
AD gradients / Weighted LogNormal observation-time weight logpdf / ReverseDiff (tape) 15.83 μs 15.68 μs ⚪ 0.99× ⚪ 1.0×
AD gradients / Product{Weighted} LogNormal vector logpdf / Mooncake reverse 23.4 μs 23.62 μs ⚪ 1.01× ⚪ 1.0×
AD gradients / Product{Weighted} LogNormal vector logpdf / ReverseDiff (tape) 15.17 μs 15.03 μs ⚪ 0.99× ⚪ 1.0×
AD gradients / Weighted Affine LogNormal nested logpdf / Enzyme forward 7.64 μs 7.57 μs ⚪ 0.99× ⚪ 1.0×
AD gradients / Weighted Sequential observed-total logpdf / Enzyme reverse 299.36 μs 296.8 μs ⚪ 0.99× ⚪ 1.0×
AD gradients / Modified LogNormal identity-link logpdf / Enzyme reverse 4.75 μs 4.79 μs ⚪ 1.01× ⚪ 1.0×
AD gradients / Weighted Affine LogNormal nested logpdf / Mooncake reverse 17.47 μs 17.34 μs ⚪ 0.99× ⚪ 1.0×
AD gradients / Thinned convolved series sum / Enzyme forward 9.92 μs 9.99 μs ⚪ 1.01× ⚪ 1.0×
AD gradients / Transformed cumulative LogNormal logpdf / ReverseDiff (tape) 13.68 μs 13.59 μs ⚪ 0.99× ⚪ 1.0×
AD gradients / Transformed thin LogNormal logpdf / ReverseDiff (tape) 13.53 μs 13.61 μs ⚪ 1.01× ⚪ 1.0×
AD gradients / Transformed cumulative LogNormal logpdf / Enzyme forward 7.44 μs 7.4 μs ⚪ 0.99× ⚪ 1.0×
AD gradients / Weighted Affine LogNormal nested logpdf / Mooncake forward 7.38 μs 7.42 μs ⚪ 1.01× ⚪ 1.0×
AD gradients / Transformed thin LogNormal logpdf / Enzyme forward 7.42 μs 7.38 μs ⚪ 0.99× ⚪ 1.0×
AD gradients / Product{Weighted} LogNormal vector logpdf / Enzyme forward 7.58 μs 7.62 μs ⚪ 1.01× ⚪ 1.0×
AD gradients / Modified LogNormal identity-link logpdf / ReverseDiff (tape) 29.34 μs 29.5 μs ⚪ 1.01× ⚪ 1.0×
AD gradients / Modified LogNormal identity-link logpdf / Enzyme forward 8.07 μs 8.03 μs ⚪ 1.0× ⚪ 1.0×
AD gradients / Transformed thin LogNormal logpdf / Mooncake forward 5.46 μs 5.44 μs ⚪ 1.0× ⚪ 1.0×
AD gradients / Affine LogNormal scale+shift logpdf / Enzyme reverse 2.86 μs 2.88 μs ⚪ 1.0× ⚪ 1.0×
AD gradients / Transformed cumulative LogNormal logpdf / Mooncake forward 5.46 μs 5.48 μs ⚪ 1.0× ⚪ 1.0×
AD gradients / Weighted LogNormal observation-time weight logpdf / Mooncake reverse 17.59 μs 17.53 μs ⚪ 1.0× ⚪ 1.0×
AD gradients / Weighted Sequential observed-total logpdf / ReverseDiff (tape) 2.11 ms 2.1 ms ⚪ 1.0× ⚪ 1.0×
AD gradients / Affine LogNormal scale+shift logpdf / ReverseDiff (tape) 14.91 μs 14.96 μs ⚪ 1.0× ⚪ 1.0×
AD gradients / Weighted LogNormal scalar logpdf / Mooncake reverse 19.07 μs 19.13 μs ⚪ 1.0× ⚪ 1.0×
AD gradients / Thinned convolved series sum / ForwardDiff 3.28 μs 3.3 μs ⚪ 1.0× ⚪ 1.0×
AD gradients / Weighted Affine LogNormal nested logpdf / ReverseDiff (tape) 16.7 μs 16.66 μs ⚪ 1.0× ⚪ 1.0×
AD gradients / Thinned convolved series sum / ReverseDiff (tape) 33.84 μs 33.74 μs ⚪ 1.0× ⚪ 1.0×
AD gradients / Thinned convolved series sum / Mooncake forward 12.29 μs 12.32 μs ⚪ 1.0× ⚪ 1.0×
AD gradients / Modified LogNormal identity-link logpdf / Mooncake forward 8.55 μs 8.53 μs ⚪ 1.0× ⚪ 1.0×
AD gradients / Weighted LogNormal scalar logpdf / Enzyme forward 7.36 μs 7.37 μs ⚪ 1.0× ⚪ 1.0×
AD gradients / Weighted Sequential observed-total logpdf / Enzyme forward 111.36 μs 111.52 μs ⚪ 1.0× ⚪ 1.0×
AD gradients / Modified LogNormal log-link logpdf / Mooncake forward 7.64 μs 7.65 μs ⚪ 1.0× ⚪ 1.0×
AD gradients / Weighted Sequential observed-total logpdf / ForwardDiff 85.27 μs 85.38 μs ⚪ 1.0× ⚪ 1.0×
AD gradients / Weighted LogNormal scalar logpdf / ReverseDiff (tape) 15.62 μs 15.64 μs ⚪ 1.0× ⚪ 1.0×
AD gradients / Transformed thin LogNormal logpdf / Mooncake reverse 15.76 μs 15.78 μs ⚪ 1.0× ⚪ 1.0×
AD gradients / Weighted LogNormal observation-time weight logpdf / Enzyme reverse 1.17 μs 1.17 μs ⚪ 1.0× ⚪ 1.0×
AD gradients / Thinned convolved series sum / Enzyme reverse 14.34 μs 14.34 μs ⚪ 1.0× ⚪ 1.0×
AD gradients / Modified LogNormal log-link logpdf / ForwardDiff 881.0 ns 881.0 ns ⚪ 1.0× ⚪ 1.0×
AD gradients / Product{Weighted} LogNormal vector logpdf / Enzyme reverse 721.0 ns 721.0 ns ⚪ 1.0× ⚪ 1.0×
AD gradients / Transformed cumulative LogNormal logpdf / ForwardDiff 500.0 ns 500.0 ns ⚪ 1.0× ⚪ 1.0×
AD gradients / Transformed cumulative LogNormal logpdf / Mooncake reverse 15.92 μs 15.92 μs ⚪ 1.0× ⚪ 1.0×
AD gradients / Weighted LogNormal observation-time weight logpdf / ForwardDiff 530.0 ns 530.0 ns ⚪ 1.0× ⚪ 1.0×
AD gradients / Weighted LogNormal scalar logpdf / ForwardDiff 540.0 ns 540.0 ns ⚪ 1.0× ⚪ 1.0×

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant