Skip to content

Prepare v2.1.3 release#143

Merged
HadenSmith merged 11 commits into
mainfrom
bug-fixes-and-enhancements
Jul 15, 2026
Merged

Prepare v2.1.3 release#143
HadenSmith merged 11 commits into
mainfrom
bug-fixes-and-enhancements

Conversation

@HadenSmith

Copy link
Copy Markdown
Collaborator

Summary

  • Refresh package, citation, CodeMeta, and snapshot metadata for the v2.1.3 release.
  • Enforce XML documentation warnings in build output.
  • Harden distribution parameter validation across univariate, multivariate, and copula implementations.
  • Add non-throwing mutable covariance support plus marginal and conditional utilities for MultivariateNormal.
  • Fix audited Numerics port edge cases in interpolation/search, histogram bounds, probability calculations, MVNDST/COVSRT, Brent bracketing, and atomic double addition.
  • Expand regression coverage for parameter validity, covariance mutation, Brent bracketing, search behavior, interpolation transforms, MCMC initialization, and utility edge cases.

Validation

  • dotnet restore
  • dotnet build Numerics/Numerics.csproj -c Release /p:Version=2.1.3
  • dotnet test -c Release with VSTEST_CONNECTION_TIMEOUT=600
  • dotnet pack Numerics/Numerics.csproj -c Release /p:Version=2.1.3 --no-build -o ./packages
  • Inspect the .nupkg metadata and confirm version 2.1.3 and release notes are correct.

…copy marginals

ArchimedeanCopula.ValidateParameter returned a non-null 'Parameter is valid'
exception for in-range parameters; the Theta setter derives ParametersValid
from a null return, so every family relying on the base implementation
(Clayton, Gumbel, Joe) reported ParametersValid = false for valid parameters.
The statistical functions tolerated it because their throwException guard path
does not throw for valid values, which is why the defect never surfaced in
computations. Valid parameters now return null, matching the Normal, StudentT,
Frank, and AMH validators.

Every copula Clone() also passed its marginal distributions by reference.
Distributions memoize internal state lazily, so clones sharing marginals are
not safe to use concurrently (one clone per thread in Monte Carlo frameworks,
or parallel likelihood evaluation over IFM/full likelihoods). Clones now
deep-copy attached marginals through a shared CloneMarginal helper; a marginal
implementation outside UnivariateDistributionBase falls back to the shared
reference, preserving the previous behavior for exotic implementations.

Regression tests added for every family: ParametersValid tracks the theta
range (fails before the fix for Clayton, Gumbel, and Joe) and Clone produces
independent marginals with identical quantiles (fails before the fix for all
seven families).
@HadenSmith
HadenSmith merged commit b5ae6ff into main Jul 15, 2026
1 check passed
@HadenSmith HadenSmith mentioned this pull request Jul 17, 2026
5 tasks
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