Skip to content

Release notes

Every release of this package is published as a GitHub release. The most recent are reproduced below, as they were written there.

v0.4.2

Released 2026-08-13. Read it on GitHub.

Diff since v0.4.0

Updates the compat to support the latest version of EpiAwareADTools

Merged pull requests:

  • Honour custom numeric integration solver payloads (Convolved, Difference, Product, Ratio) — #92 (#149) (@seabbs-bot)

  • ci(deps): bump the github-actions group with 9 updates (#151) (@dependabot[bot])

  • docs: point release-notes header at GitHub Releases (#152) (@seabbs-bot)

  • feat: add public quantile_initial_guess hook (#150) (#156) (@seabbs-bot)

  • docs: point developer FAQ at Discourse/epinowcast, not GitHub Discussions (#157) (@seabbs-bot)

  • fix: closed-form logcdf/ccdf/logccdf for uniform-window pairs (#158) (@seabbs-bot)

  • Exact lattice quantile for discrete combinations (#159) (@seabbs-bot)

  • Add an output-position mask to convolve_series (#160) (@seabbs-bot)

  • feat: shared repeat mechanism, convolved(d, k) and product(d, k) (#165) (@seabbs-bot)

  • test(uniform_window): cover Weibull partial_expectation guards (#169) (@seabbs-bot)

  • docs: point remaining discussion mentions at Discourse/epinowcast (#171) (@seabbs-bot)

  • Migrate Difference onto the solver-dispatch generics (#176) (@seabbs-bot)

  • fix: forward discretisation keywords through the time-varying convolve_series path (#177) (@seabbs-bot)

  • test: AD coverage for custom solver payloads (#161) (#179) (@seabbs-bot)

  • fix: close the truncated testitem breaking main's test suite (#182) (@seabbs-bot)

  • chore: migrate to Runic and fix main CI (#183) (@seabbs-bot)

  • feat: migrate Product and Ratio onto the solver-dispatch generics (#184) (@seabbs-bot)

  • fix: stop benchmark-history aborting on commits that predate a benchmarked verb (#185) (@seabbs-bot)

  • ci: raise the docs build timeout to 90 minutes (#186) (@seabbs-bot)

  • feat: make the difference, product and ratio pair hooks public (#187) (@seabbs-bot)

  • fix: floor EpiAwareADTools at 0.2 and drop its internal _gamma_cdf (#189) (@seabbs-bot)

Closed issues:

  • Broaden test coverage: cross-method consistency suite and pair breadth (#57)

  • JuliaFormatter disagrees with the committed state of test/ADFixtures/src/ADFixtures.jl (#81)

  • Mixed discrete+continuous Convolved silently returns pdf 0.0 everywhere (#115)

  • Exact lattice quantile for discrete combinations (#116)

  • Convolved hard-codes {Univariate, Continuous}, blocking discrete closed forms (pmf) (#120)

  • Release docs are not building? (#125)

  • Support a masking vector for convolve series of some kind (#127)

  • Add convolution_power(d, k) for repeated self-convolution (#132)

  • Migrate Difference/Product/Ratio onto the solver-dispatch generics from #80 (#133)

  • Developer FAQ points at GitHub Discussions, which is disabled (both links 404) (#135)

  • Point the release-notes docs page at GitHub Releases (#136)

  • Mooncake AD failing on main (#145)

  • Design: make convolved(delay, Uniform) a drop-in for primary-censored delays — add log-space cdf/ccdf/logccdf for uniform-window pairs (#147)

  • Release v0.4.1: custom integration solver payloads honored (#148)

  • Add a public extension point for custom quantile initial-guess generation on Convolved (#150)

  • Remaining GitHub Discussions mentions outside developer/faq.md (#153)

  • convolve_series(delays::AbstractVector, series) cannot forward discretisation kwargs to delay_masses (#154)

  • AD coverage gap: custom solver payloads are never traced by any backend (#161)

  • test/ad environment cannot be instantiated locally: EpiAwareADTools pin conflict (#162)

  • Unit-test partial_expectation(::Weibull)'s non-positive-input guard (#167)

  • Quality: formatting testitem requires Runic, but package uses JuliaFormatter (#168)

  • EpiAwareADTools compat capped at 0.1 blocks the whole stack from adopting 0.2.0 and its logccdf_ad_safe(::Gamma) tail fix (#188)

v0.4.0

Released 2026-08-06. Read it on GitHub.

Diff since v0.3.1

Breaking changes
  • The continuous-delay error gate in convolve_series has been removed. A continuous delay is now a plain MethodError where it was previously a checked ArgumentError.
New types
  • Ratio type and ratio verb (Z = X / Y): the ratio of two independent non-negative distributions, using Gauss–Legendre quadrature. Supports pdf, cdf, quantile, rand, minimum/maximum, and all AD backends.
New features
  • pgf — probability generating function primitive for discrete distributions, with closed forms for standard count families (Poisson, Bernoulli, Binomial, Geometric, NegativeBinomial) and a truncated-series fallback for any DiscreteUnivariateDistribution.

  • quantile_by_optimization — shared numeric quantile inversion, usable from downstream packages and from the ConvolvedDistributionsOptimizationExt extension for Convolved, Difference, Product, and Ratio.

  • Time-varying delaysconvolve_series now accepts a vector of per-time-point delays (or delay-mass pairs), dispatching element-by-element. Supports both discrete and caller-supplied mass vectors.

Refactoring
  • Internal renames: _causal_convolve_convolve_series_fixed, _convolve_series_convolve_series_varying

  • The masses hook is now public API.

Documentation
  • New product-distributions tutorial page

  • PGF documentation in the module docstring

  • FAQ entries for dispatch and solver selection

Maintenance
  • Dependency updates (JET, GitHub Actions)

  • Version increment: 0.3.2 → 0.4.0

Merged pull requests:

  • chore: auto-increment version to 0.3.2 (#123) (@github-actions[bot])

  • ci(deps): bump the github-actions group with 9 updates (#128) (@dependabot[bot])

  • chore(deps): update JET requirement from 0.9, 0.10, 0.11 to 0.9, 0.10, 0.11, 0.12 in the julia group (#129) (@dependabot[bot])

  • Time-varying delays for convolve_series, and drop the continuous error gate (#126, #95) (#130) (@seabbs-bot)

  • feat: shared numeric quantile inversion, quantile_by_optimization (#112) (#131) (@seabbs-bot)

  • feat: add pgf primitive (#90) (#134) (@seabbs-bot)

  • feat!: solver dispatch for analytic pairs and exact discrete support (#137) (@seabbs-bot)

  • feat: add the Ratio type and ratio verb (Z = X / Y) (#140) (@seabbs-bot)

  • fix: exact fold for two-component mixed discrete/continuous combinations (#142) (@seabbs-bot)

  • chore: bump version to 0.4.0 (#143) (@seabbs-bot)

Closed issues:

  • Apply my readme style changes across our managed ecosystem (#69)

  • Host the analytic-pair registry + direct CDF-kernel solver (foundation for Censored#891) (#77)

  • Convolved hardcodes Continuous value support — discrete⊛discrete is mis-typed and blocks direct convolve_series (#85)

  • Exact discrete branch in the combination algebra (#89)

  • Probability generating function interface, iteration and fixed points (#90)

  • Remove the continuous-only error gate on convolve_series (#95)

  • _quantile_optimization is duplicated with CensoredDistributions — pick a shared home (#112)

  • docs/src/overall_trend.png is a build artefact but not gitignored (#114)

  • Add a ratio verb for Z = X / Y (#118)

  • TagBot: Manual intervention needed for releases (#124)

  • Support a vector of distributions for convolve_series (#126)

  • Product and ratio introduced with fluff text as if different from other operators (#141)

v0.3.1

Released 2026-07-31. Read it on GitHub.

Diff since v0.3.0

Streamlines docs and improves handling of survival distributions

v0.3.0

Released 2026-07-31. Read it on GitHub.

Diff since v0.2.0

Merged pull requests:

  • chore: auto-increment version to 0.2.1 (#46) (@github-actions[bot])

  • docs: add Plots dependency for the benchmark trend plot (#53) (@seabbs-bot)

  • docs: point at the real org setup guide, fix stale Discussions links (#65) (@seabbs-bot)

  • docs: motivation-framed Why bullets, add a Related packages section (#66) (@seabbs-bot)

  • fix!: remove discretise_pmf (#73) (@seabbs-bot)

  • docs: split the visualising-convolutions tutorial per operator (#74) (@seabbs-bot)

  • test: reconcile #50 with its actual fix (#49) (#75) (@seabbs-bot)

  • test: cover Distributions.jl's censored() composing over the family (#76) (@seabbs-bot)

  • ci: qualify the scaffold_update call ahead of the kit's export-to-public move (#78) (@seabbs-bot)

  • ci: bump downgrade-compat's Julia pin to unblock Dependabot PRs (#83) (@seabbs-bot)

  • feat!: retire DelayPMF, accept plain vectors and DiscreteNonParametric (#87) (@seabbs-bot)

  • test: cross-method consistency suite for Convolved/Difference/Product (#57) (#93) (@seabbs-bot)

  • feat: queryable evaluation path with no silent numeric fallback (#92) (#96) (@seabbs-bot)

  • ci: group Dependabot updates and repair template sync (#106) (@seabbs-bot)

  • Update Project.toml (#107) (@seabbs)

  • ci(deps): bump the github-actions group across 1 directory with 12 updates (#108) (@dependabot[bot])

  • chore(deps): bump the julia group with 2 updates (#109) (@dependabot[bot])

Closed issues:

  • 0.2.0 (unregistered) breaks resolution against ComposedDistributions 0.1 — ecosystem is unresolvable (#47)

  • Batched parameter gradients drift from the scalar path at the batch's left edge (#50)

  • Add downstream migration guidance for the convolve_series discretise-first change (#51)

  • Documenter deploy build crashes: inventory entry for an anchored header with an empty anchor id (#52)

  • TagBot: Manual intervention needed for releases (#61)

  • discretise_pmf is incorrect and we should not have it in the package (#68)

  • Visualise convolutions is heavily overloaded as a docs page (#70)

  • Integrals extension as in CensoredDistributions (#71)

  • censored support (#72)

  • Retire DelayPMF from the public surface: accept plain pmf vectors and DiscreteNonParametric (#79)

v0.2.0

Released 2026-07-18. Read it on GitHub.

0.2.0. Breaking: convolve_series no longer discretises continuous delays (discretise explicitly via discretise_pmf or CensoredDistributions.jl double-interval-censored masses); family renames (AbstractCombinedDistributionAbstractConvolvedDistribution, test_combined_interfacetest_convolved_interface); the AD-safe hook family and tape-strip pair moved to EpiAwareADTools.jl under underscore-free names. Additions: product/Product (Mellin convolution), DelayPMF with grid-width semantics, quantile-panelled quadrature (heavy-tail accuracy), batched-path AD on all six backends, far-tail-accurate extension quantile, nested-composite windows. Full notes in NEWS.md.

Merged pull requests:

  • chore: scaffold package with EpiAwarePackageTools (ad=true) (#17) (@seabbs-bot)

  • feat: port raw-distribution convolution + shared quadrature (#18) (@seabbs-bot)

  • chore: auto-increment version to 0.1.1 (#19) (@github-actions[bot])

  • chore: auto-increment version to 0.1.2 (#22) (@github-actions[bot])

  • chore: auto-increment version to 0.1.3 (#23) (@github-actions[bot])

  • feat: add _pdf_ad_safe extension hook for component densities (#27) (@seabbs-bot)

  • ci(deps): bump EpiAware/.github/.github/workflows/coverage.yml from dc919e0d1674c16d1518df07eda5ee0be09b47e2 to 6fcdcde033ec670ac3832b239427fd2ded591bbc (#33) (@dependabot[bot])

  • ci(deps): bump EpiAware/.github/.github/workflows/format-check.yml from dc919e0d1674c16d1518df07eda5ee0be09b47e2 to 6fcdcde033ec670ac3832b239427fd2ded591bbc (#34) (@dependabot[bot])

  • ci(deps): bump EpiAware/.github/.github/workflows/docs-preview-cleanup.yml from dc919e0d1674c16d1518df07eda5ee0be09b47e2 to 6fcdcde033ec670ac3832b239427fd2ded591bbc (#35) (@dependabot[bot])

  • ci(deps): bump EpiAware/.github/.github/workflows/documentation.yml from dc919e0d1674c16d1518df07eda5ee0be09b47e2 to 6fcdcde033ec670ac3832b239427fd2ded591bbc (#36) (@dependabot[bot])

  • ci(deps): bump EpiAware/.github/.github/workflows/tagbot.yml from dc919e0d1674c16d1518df07eda5ee0be09b47e2 to 6fcdcde033ec670ac3832b239427fd2ded591bbc (#37) (@dependabot[bot])

  • ci(deps): bump EpiAware/.github/.github/workflows/cancel-on-close.yml from 6d4e35e2515f947acbf7d2a683cbf02b341005c7 to 6fcdcde033ec670ac3832b239427fd2ded591bbc (#38) (@dependabot[bot])

  • ci(deps): bump EpiAware/.github/.github/workflows/tests.yml from dc919e0d1674c16d1518df07eda5ee0be09b47e2 to 6fcdcde033ec670ac3832b239427fd2ded591bbc (#39) (@dependabot[bot])

  • ci(deps): bump EpiAware/.github/.github/workflows/ad.yml from dc919e0d1674c16d1518df07eda5ee0be09b47e2 to 6fcdcde033ec670ac3832b239427fd2ded591bbc (#40) (@dependabot[bot])

  • ci(deps): bump EpiAware/.github/.github/workflows/downgrade.yml from dc919e0d1674c16d1518df07eda5ee0be09b47e2 to 6fcdcde033ec670ac3832b239427fd2ded591bbc (#41) (@dependabot[bot])

  • chore: scaffold_update convergence onto kit main + adopt AD-backends tutorial (#54) (@seabbs-bot)

  • feat: public components(::Convolved) accessor (#58) (@seabbs-bot)

  • fix: https:// scheme in docs deploy_url (CSS 404 hotfix) (#59) (@seabbs-bot)

Closed issues:

  • Scaffold with EpiAwarePackageTools (ad=true) (#1)

  • Port Convolved + public convolve_distributions (#2)

  • Port Difference (X−Y dual) (#3)

  • Port shared quadrature + solver abstraction (#4)

  • AD extensions for Convolved/Difference (#5)

  • Internal timeseries convolve (convolve_with_vector) — deferred/tracking (#6)

  • Restore quantile (inverse-CDF) for Convolved/Difference via an Optimization extension (#20)

  • Add CODECOV_TOKEN repo secret (coverage upload fails on protected main) (#21)

  • Reintroduce combination abstract supertype (AbstractCombinedDistribution) (#24)

  • Decide: adopt docs_subdomain like the sibling packages? (#26)

  • Port the build-once DelayPMF surface (discretise_pmf / pdf / convolve_distributions(pmf, series)) (#28)

  • Batched logpdf disagrees with scalar logpdf by ~1e-3 (shared quadrature window) (#29)

  • Registrator (#30)

  • Discretisation of delays (#31)

  • Docs should show composing on multiple dists (#32)

  • Decide: public surface for _primal / _primal_distribution (ModifiedDistributions extends them) (#42)

  • Batched cdf/pdf/logpdf error under AD with respect to distribution parameters (#43)

  • Batched composite quadrature path has no AD-tag coverage; ReverseDiff w.r.t. evaluation points throws (#44)

  • cdf(::Difference, ::Real) throws _primal(::Tuple) MethodError when ForwardDiff is loaded (#45)

  • Extension quantile is imprecise in far tails (flat squared-residual objective) (#48)

  • Numeric quadrature loses accuracy when a heavy-tailed component stretches the integration window (#49)

  • Add a LoweredDistributions bridge: lower(::Convolved) → dynamical-systems spec (#55)

  • Add a Turing fitting tutorial and MCMC integration test (#56)

Every release, including any older than those above, is listed on the releases page.