Release notes
ConvolvedDistributions.jl follows a hybrid changelog approach:
GitHub Releases: All releases (automatically generated by TagBot)
NEWS.md: Major releases requiring detailed context (shown below)
See GitHub Releases for minor/patch release information.
0.2.0
Breaking changes relative to 0.1.0, with migration notes:
convolve_seriesno longer discretises continuous delays. ADiscreteUnivariateDistributionconvolves via its own PMF (pdf(delay, k)at integer lags); a continuous delay throws. Migration: discretise explicitly —convolve_series(discretise_pmf(delay, length(series) - 1), series)for interval-censored-secondary masses (exact primary event), or build double-interval-censored masses with CensoredDistributions.jl'sconvolve_seriesextension when the primary event is only known to the day — then convolve the resulting PMF.Family names.
AbstractCombinedDistributionis nowAbstractConvolvedDistribution, andTestUtils.test_combined_interfaceistest_convolved_interface. Migration: rename references; behaviour is unchanged.
Additions and improvements:
product(x, y)(public typeProduct) adds the Mellin convolutionZ = X * Yfor independent components with non-negative support:LogNormal * LogNormalclosed form, AD-safe Mellin quadrature otherwise, exact independent-product moments, andquantilevia the Optimization extension. Sign-crossing supports throw and are future work.discretise_pmf(delay, maxlag; interval)builds a reusable publicDelayPMF(raw CDF-difference masses, clamped at zero, never renormalised) withpdf(pmf, lag)mass reads, andconvolve_seriesaccepts aDelayPMFor any raw PMF vector, with masses used exactly as given. ADelayPMFcarries its grid width: the series is read at steps ofpmf.interval, so weekly-binned masses convolve weekly series.Batched numeric
cdf/pdf/logpdfnow integrate every point over its own scalar-path window on a shared composite panel grid: batched and scalar log densities agree to well within1e-8(typically near machine precision; previously up to ~2e-3in wide-batch tails) while the batched path remains 1.6-2.2x faster than broadcasting (#29).The AD-safe component hook family and the tape-strip pair moved to EpiAwareADTools.jl under underscore-free names, together with the analytic gamma-CDF derivative machinery and its per-backend rules. Wrapper packages now depend on EpiAwareADTools directly and extend its names; this package no longer declares its own hooks. Migration:
Old ( ConvolvedDistributions)New ( EpiAwareADTools)_cdf_ad_safecdf_ad_safe_logcdf_ad_safelogcdf_ad_safe_ccdf_ad_safeccdf_ad_safe_logccdf_ad_safelogccdf_ad_safe_pdf_ad_safepdf_ad_safe_primalprimal_primal_distributionprimal_distributionThe extension
quantileis now accurate in the far tails: the solve minimises the log-odds residual rather than the near-flat squared probability residual (relative error atp = 0.999down from ~0.16 to ~4e-6 on the analytic product pair) (#48).cdf/pdfno longer throw on distributions whose components are themselves composites (for example adifferenceof twoConvolvedtotals): composite integration windows recurse over the nested components with union-bound tail trims (#45).The batched
cdf/pdf/logpdfmethods now differentiate: AD tracers on component parameters survive the final convert (#43), ReverseDiff works with respect to the evaluation points (the per-point assembly no longer mutates tracked storage) (#44), and batched-path AD scenarios run on all six backend tags in CI.Numeric quadrature windows are split at the integration component's quantiles, so node density follows its mass: heavy-tailed components no longer starve the transition region (worst measured case, a
GammaxLogNormal(0, 1.5)product CDF, improved from ~1.4e-2 absolute error to ~5e-11) and most scalar paths got slightly faster (#49).
0.1.0
Initial release. Raw-distribution convolution machinery for any Distributions.jl univariate distribution, split out of CensoredDistributions.jl:
convolved(dists...)(public typeConvolved): sums of independent components with analytic fast paths (Normal+Normal, equal-scaleGamma, equal-rateExponential) and an AD-safe fixed-node Gauss-Legendre quadrature fallback; scalar and batchedcdf/pdf/logpdf; exact additive moments.difference(x, y)(exported typeDifference): theZ = X - Ydual with theNormal-Normalclosed form and numeric cross-correlation.convolve_series: causal convolution of a numeric series with a delay PMF (the renewal-style observation layer).quantileforConvolved/Differencevia the Optimization + OptimizationOptimJL extension.The
AbstractCombinedDistributionfamily supertype with shippedTestUtilsinterface verifiers.AD extensions (ChainRulesCore, ForwardDiff, ReverseDiff, Mooncake, Enzyme) with analytic gamma-CDF rules; gradients tested on all backends in CI.
This file tracks notes for major releases and significant milestones; GitHub Releases (auto-generated from merged PRs) cover every release in between.