Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
225 commits
Select commit Hold shift + click to select a range
b9af61c
Fix Kappa Four zero-kappa formulas
HadenSmith Jul 24, 2026
d0bab1c
Fix parameter-adjusted RMSE residual sum
HadenSmith Jul 24, 2026
48c99a2
Add Kappa Four finite-shape regression
HadenSmith Jul 24, 2026
600e83a
Add univariate function serialization and the function factory
HadenSmith Jul 25, 2026
251dd8b
Add the BaRatin addition-mode SegmentedPowerFunction
HadenSmith Jul 25, 2026
32f3bb2
Add the weighted CompositeFunction with average and mixture modes
HadenSmith Jul 25, 2026
c339d13
Add the posterior EnsembleFunction with pure clone sampling
HadenSmith Jul 25, 2026
0bb1e89
Fix the EmpiricalDistribution and KernelDensity XElement round-trips
HadenSmith Jul 25, 2026
fe9a52d
Add the acceptance-aware node recorder to AdaptiveGaussKronrod
HadenSmith Jul 25, 2026
5637331
Add atom-aware discrete convolution and a log-spaced output option
HadenSmith Jul 25, 2026
9249440
Pin the Vegas power-transform Jacobian in the handed weight
HadenSmith Jul 25, 2026
46854e4
Add the pooled IndependentExclusive overload with a truncation flag
HadenSmith Jul 25, 2026
013c46d
Document the univariate functions namespace
HadenSmith Jul 25, 2026
dfb1c6b
Seed the multivariate normal quadrature deterministically
HadenSmith Jul 26, 2026
0d650d5
Make the bootstrap uncertainty reductions deterministic
HadenSmith Jul 26, 2026
1f4a012
Enumerate exclusive combinations lazily
HadenSmith Jul 27, 2026
1346baf
Raise the Vegas dimension guard from 20 to 50
HadenSmith Jul 27, 2026
a076538
Pool the Gauss-Kronrod recorder capture buffers
HadenSmith Jul 27, 2026
6058004
Fill failed replications in the processed parameter sets
HadenSmith Jul 27, 2026
6c551d1
Fix adaptive MCMC diagnostics and covariance tracking
HadenSmith Jul 27, 2026
cd9bf45
Fix numerical validation and edge cases
HadenSmith Jul 27, 2026
d5f8e46
Modernize MCMC convergence diagnostics
HadenSmith Jul 27, 2026
556d70f
Fix composite configured-child evaluation
HadenSmith Jul 27, 2026
542faf3
Complete XML documentation contracts
HadenSmith Jul 27, 2026
48b67d1
Restore generic MCMC result contracts
HadenSmith Jul 27, 2026
17b00b9
Handle degenerate kernel density samples
HadenSmith Jul 27, 2026
c5ef58d
Establish algorithm change authority
HadenSmith Jul 27, 2026
bf50fbe
Handle degenerate KDE bandwidth samples
HadenSmith Jul 27, 2026
5db695c
Keep MCMC diagnostics tests multi-target compatible
HadenSmith Jul 27, 2026
2f6bf24
Add lazy dependent probability enumeration
HadenSmith Jul 27, 2026
4a9cb3e
Fix the perfectly negative joint probability to the Frechet-Hoeffding…
HadenSmith Jul 29, 2026
7e5fda0
Restore the plotting-position bias-correction proportion
HadenSmith Jul 29, 2026
d067924
Pin the reading contract for version 2.1.4 distribution XML
HadenSmith Jul 29, 2026
c264392
Represent a constant kernel-density sample as a near-point mass
HadenSmith Jul 29, 2026
016a0b4
Harden the default MVN quadrature seed and document per-sampler accep…
HadenSmith Jul 29, 2026
3e69a93
Fix mixture simplex and positive-hurdle behavior
HadenSmith Jul 31, 2026
eea1777
Restore the finite tail-quantile lower bound in Mixture.CreateEmpiric…
HadenSmith Aug 3, 2026
cafe6cf
Honor competing-risk dependencies in simulation
HadenSmith Aug 3, 2026
0d617c2
Move misplaced regression tests into their subject test classes
HadenSmith Aug 3, 2026
5811681
Describe test contracts without change narration
HadenSmith Aug 3, 2026
3c3aaa3
Remove dead code and console output from the numerical library
HadenSmith Aug 3, 2026
34b5186
Align the dynamic-optimization test files with the naming convention
HadenSmith Aug 3, 2026
e07f80a
Fix BinaryHeap.Replace ordering and complete the heap documentation
HadenSmith Aug 3, 2026
4a880eb
Harden Dijkstra.Solve with validation, exact heap sizing, and compact…
HadenSmith Aug 3, 2026
108793f
Add path reconstruction and single-pass nearest-destination solves to…
HadenSmith Aug 3, 2026
e9d8ece
Repair Network construction and custom-weight solves
HadenSmith Aug 3, 2026
aa177f9
Reimplement Network.GetPath alternate-path routing
HadenSmith Aug 3, 2026
c361f28
Document the shortest-path cluster
HadenSmith Aug 3, 2026
e57af20
Preserve log distribution base when cloning
HadenSmith Aug 3, 2026
e92c6a3
Satisfy the MSTEST0037 collection-assert analyzer in the Dynamic tests
HadenSmith Aug 3, 2026
2530f91
Add forward conditional and scalar inverse-conditional copula functions
HadenSmith Aug 3, 2026
242b304
Add the zero-parameter Independence copula
HadenSmith Aug 3, 2026
7673ac2
Add copula XML serialization and the copula factory
HadenSmith Aug 3, 2026
6062044
Document the Independence copula and conditional copula functions
HadenSmith Aug 3, 2026
5ea77d3
Saturate the Gumbel and Joe conditional inverses at the probability b…
HadenSmith Aug 7, 2026
1753d2d
Stratify the competing-risks empirical CDF on log-spaced bins for any…
HadenSmith Aug 21, 2026
90a63a4
Describe the copula test references and contracts without change narr…
HadenSmith Aug 21, 2026
48b0380
Accumulate the L-moment probability weighted moment numerators in double
HadenSmith Aug 24, 2026
382c11c
Reject non-finite percentiles and make the BCa and kernel density red…
HadenSmith Aug 24, 2026
e9a3f27
Make the tie-sensitive k-NN, MLSL and MCMC initialization sorts deter…
HadenSmith Aug 24, 2026
5a4bc3e
Validate leave-one-out statistics and correct the bootstrap exception…
HadenSmith Aug 24, 2026
def4eb9
Cover the k-NN prediction tie-break and keep the MLSL sample list ins…
HadenSmith Aug 24, 2026
f2fcf75
Add the method of moments fit to the Joe and Frank copulas
HadenSmith Aug 24, 2026
116fbc2
Add a thresholded log pseudo-determinant to the singular value decomp…
HadenSmith Aug 24, 2026
3ca7432
Support singular value decomposition in the multivariate normal distr…
HadenSmith Aug 24, 2026
1151c1b
Move the order-1 Debye function into the Debye class and narrow the t…
HadenSmith Aug 24, 2026
00e7405
Characterize the matrix regularization ridge escalation
HadenSmith Aug 24, 2026
abf0537
Reject Cholesky pivots that are negligible relative to their own diag…
HadenSmith Aug 24, 2026
c8e5218
Adopt the scipy zero-eigenvalue threshold in the multivariate normal …
HadenSmith Aug 24, 2026
e8ad6d8
Document the residual rank-deficiency the Cholesky pivot test does no…
HadenSmith Aug 25, 2026
1333366
Pin the linear moments to an exact rational oracle on a skewed large …
HadenSmith Aug 25, 2026
142f6e9
Factorize the multivariate normal once on the non-throwing parameter …
HadenSmith Aug 25, 2026
1f93736
Report the MCMC transition counts and the parallel likelihood contract
HadenSmith Aug 25, 2026
8ff91f1
Expose the multivariate Student t lattice generator and pin the D>=3 …
HadenSmith Aug 25, 2026
b54c8e8
Correct the central moment overload docs and record three known behav…
HadenSmith Aug 25, 2026
e5a1da6
Store the adapted NUTS metric as the inverse mass and stop flooring it
HadenSmith Aug 25, 2026
5390272
Adapt the NUTS diagonal mass matrix by default
HadenSmith Aug 25, 2026
9bdf629
Document the multivariate Student t CDF thread-safety loss and correc…
HadenSmith Aug 25, 2026
15a78e9
Take the NUTS variance floor scale from measured variances only
HadenSmith Aug 25, 2026
61758ac
Make the NUTS target acceptance rate settable
HadenSmith Aug 25, 2026
a080f05
Reuse the gradient a NUTS leapfrog step already evaluated
HadenSmith Aug 25, 2026
01c85a1
Correct the sample-length count and variance floor scale in documenta…
HadenSmith Aug 25, 2026
4154eb8
Record why the BFGS dfpmin parameter-change exit is not implemented
HadenSmith Aug 25, 2026
7ab2044
Correct the NUTS gradient memo aliasing contract and guard its copies
HadenSmith Aug 25, 2026
4b78bce
Correct the inverted ArgumentException argument order at 51 call sites
HadenSmith Aug 25, 2026
0d49965
Pass the parameter bounds to the finite-difference gradient in BFGS, …
HadenSmith Aug 25, 2026
ed51f14
Pass the parameter bounds to the end-of-run Hessian in Optimizer
HadenSmith Aug 25, 2026
edca9a1
Correct the last inverted ArgumentException site and widen the guard
HadenSmith Aug 25, 2026
48b80ac
Stop MultiStart and MLSL from mutating their own InitialValues
HadenSmith Aug 25, 2026
7f3d081
Confine the Powell search to its declared feasible region
HadenSmith Aug 25, 2026
8a1d833
Cover the Powell feasible region and every local method
HadenSmith Aug 25, 2026
5657a5f
Keep the Powell line search out of the clamped plateau
HadenSmith Aug 25, 2026
4075186
Pin each Powell line-search guard with a discriminating test
HadenSmith Aug 25, 2026
2c066b0
Make the MLSL InitialValues test detect the aliasing it guards
HadenSmith Aug 25, 2026
c200452
Remove process narration from the shipping documentation
HadenSmith Aug 26, 2026
1a1bd1e
State the test documentation as invariants rather than change history
HadenSmith Aug 26, 2026
3083d5a
Keep the Powell direction set alive through the zero-step fallback
HadenSmith Aug 26, 2026
0c00e83
Repair local-search starting points into a copy instead of the caller…
HadenSmith Aug 26, 2026
6137387
Make the memo-ordering and percentile guards observable to their tests
HadenSmith Aug 26, 2026
9b1f47f
Pin the seeded tree and forest contracts with goldens and an exact-ar…
HadenSmith Aug 26, 2026
c68f852
Keep the golden serializer inside the non-nullable annotation context
HadenSmith Aug 26, 2026
83f0bab
Share the parent impurity, skip searches at leaves, and stream the sp…
HadenSmith Aug 26, 2026
d547320
Make the forest mean reduction sequential and pin all four prediction…
HadenSmith Aug 26, 2026
4994462
Grow trees over partitioned indices with a sorted single-sweep split …
HadenSmith Aug 26, 2026
d7797b9
Index the standard deviation recurrence by the observed count so miss…
HadenSmith Aug 26, 2026
3526b00
Guard the min helpers with the infinity sentinel and NaN-aware index …
HadenSmith Aug 26, 2026
4aab2e9
Accumulate the product moment power sums about a shifted origin
HadenSmith Aug 26, 2026
b35c890
Record the trace as shallow best-so-far entries and state the read-on…
HadenSmith Aug 26, 2026
78cf9d8
Evaluate the workhorse univariate log densities in log space
HadenSmith Aug 26, 2026
cdade0f
Synchronize the child reporter registry and snapshot its enumeration
HadenSmith Aug 26, 2026
404468e
Preallocate the without-replacement bins and pin the seeded draw sequ…
HadenSmith Aug 26, 2026
4af8c78
Let the incomplete gamma continued fraction iterate to its convergenc…
HadenSmith Aug 26, 2026
b232525
Preserve the eigen input matrix and scale the Jacobi threshold to the…
HadenSmith Aug 26, 2026
8bfbe50
Report the full Gaussian mixture log-likelihood at every iteration
HadenSmith Aug 26, 2026
1eeeb56
Correct the Mann-Kendall and Mann-Whitney tie terms with full group s…
HadenSmith Aug 26, 2026
5a6a824
Shift the within-class variance accumulation and floor degenerate dev…
HadenSmith Aug 26, 2026
ff3e303
Make the SVD non-convergence guard reachable and route it through val…
HadenSmith Aug 26, 2026
a68d71a
Convert the non-convergence rejection to the validation exception type
HadenSmith Aug 26, 2026
89f294a
Mix an instance counter into the clock seed and pin the canonical see…
HadenSmith Aug 26, 2026
4f0d4f0
Hold relative accuracy in the far normal and complement error functio…
HadenSmith Aug 26, 2026
01cf4ee
Relocate emptied clusters, validate the cluster count, and guard zero…
HadenSmith Aug 26, 2026
894dbc3
Add a globally adaptive two-dimensional Gauss-Kronrod integrator
HadenSmith Aug 27, 2026
069751f
Add weighted percentile and weighted product moments to Statistics
HadenSmith Aug 27, 2026
78bce26
Add sided transform-aware extrapolation to the ordered paired data lo…
HadenSmith Aug 27, 2026
ffdb44d
Add seeded linear-matrix scrambling with a digital shift to the Sobol…
HadenSmith Aug 27, 2026
a2b5523
Add the equicorrelated single-factor union and conditional-probabilit…
HadenSmith Aug 27, 2026
7f03540
Add given-data global sensitivity estimators
HadenSmith Aug 27, 2026
dc5b17c
Preserve the ordered-paired-data lookup binary signatures
HadenSmith Aug 27, 2026
866b3fc
Reuse the HMC trajectory-start gradient and copy the chain state for …
HadenSmith Aug 27, 2026
7875480
Guard the weighted moment poles and the percentile cancellation
HadenSmith Aug 27, 2026
8c4e24e
Harden the paired-data guards and simplification tails and restore th…
HadenSmith Aug 27, 2026
3215988
Surface the single-factor union budget stop and hold Expm1 finite thr…
HadenSmith Aug 27, 2026
78880c4
Freeze unbisectable regions in the two-dimensional Gauss-Kronrod inte…
HadenSmith Aug 27, 2026
7d37e8a
Name the offending sensitivity sample and finish the Sobol constructo…
HadenSmith Aug 27, 2026
c6c6ebf
Validate the k-NN query shape and make the remaining mean reductions …
HadenSmith Aug 27, 2026
f6437ca
Reject Jenks natural breaks data without two distinct values
HadenSmith Aug 27, 2026
95c5a3e
Compute the k-means centroid before a first-iteration convergence exit
HadenSmith Aug 27, 2026
55bde0d
Scale the augmented Lagrangian objective for maximization
HadenSmith Aug 27, 2026
aa2c619
Assert the generalized linear model information criteria
HadenSmith Aug 27, 2026
2bfbc35
Refresh the README and docs feature and count claims
HadenSmith Aug 27, 2026
7d7d6aa
Merge remote-tracking branch 'origin/main' into bug-fixes-and-enhance…
HadenSmith Aug 27, 2026
8e4f08a
Prepare v2.2.0 release
HadenSmith Aug 28, 2026
91ccaf9
Carry the extrapolation policy on the tabular function and empirical …
HadenSmith Aug 28, 2026
6e0b11c
Record trailing tie runs in RanksInPlace and make ParallelMean sequen…
HadenSmith Aug 28, 2026
21e63db
Align UncertainOrdinate X equality with Ordinate and document the pro…
HadenSmith Aug 28, 2026
548666b
Factorize the RWMH proposal once and translate only the mean per iter…
HadenSmith Aug 28, 2026
7b9a32e
Make the SNIS resampling sort stable
HadenSmith Aug 28, 2026
d3054a8
Apply the discarded M-step positive-definite repair to the mixture co…
HadenSmith Aug 28, 2026
95f8765
Stop regression tree growth at pure nodes
HadenSmith Aug 28, 2026
54d0f60
Implement the dfpmin parameter-change exit in BFGS
HadenSmith Aug 28, 2026
175e884
Scale the correlated-search windows with table size so the hunt path …
HadenSmith Aug 28, 2026
9449130
Allow a negative log-space mean in the LogNormal and LP3 parameter co…
HadenSmith Aug 28, 2026
3d2405b
Expose the peaks-over-threshold smoothing preprocessing as SmoothedSe…
HadenSmith Aug 28, 2026
fa91884
Expose seeded scrambled Sobol driving points on the Vegas integrator
HadenSmith Aug 28, 2026
f0e0e6d
Make ParallelMean genuinely parallel with a deterministic fixed-chunk…
HadenSmith Aug 28, 2026
cce9f52
Preserve the cumulative-sum interval and align the indexed overload g…
HadenSmith Aug 28, 2026
79aedf6
Satisfy the MSTEST0037 analyzer in the remaining comparison asserts
HadenSmith Aug 28, 2026
06f17d6
Align the guides with the rank-normalized diagnostics and index the f…
HadenSmith Aug 28, 2026
8e0dde9
Correct the XML remarks and restate comment rationales as invariants
HadenSmith Aug 28, 2026
69f3ebd
Pin the review-identified contracts and restate test documentation as…
HadenSmith Aug 28, 2026
8d084f4
Refresh the v2.2.0 release metadata and notes
HadenSmith Aug 28, 2026
3cafca4
Correct the bivnor and BCa documentation, wire the functions guide in…
HadenSmith Aug 28, 2026
5b56a01
Report BFGS line search failures distinctly
HadenSmith Aug 28, 2026
46134b9
Pin impossible mixture EM row failure
HadenSmith Aug 28, 2026
747cb87
Report Cholesky failures at workflow boundaries
HadenSmith Aug 28, 2026
bd4fa39
Saturate Expm1 at the deep-negative rounding boundary
HadenSmith Aug 28, 2026
f9e3eda
Reject zero HMC step sizes
HadenSmith Aug 29, 2026
7f6c78a
Close concurrency and reproducibility review findings
HadenSmith Aug 29, 2026
d24db68
Restore bootstrap summary binary signatures
HadenSmith Aug 29, 2026
9b8e0ae
Disambiguate ensemble index sampling
HadenSmith Aug 29, 2026
7599512
Reject unsupported tabular ensembles
HadenSmith Aug 29, 2026
d6f6daa
Harden function XML deserialization
HadenSmith Aug 29, 2026
fb81336
Initialize empty paired data as valid
HadenSmith Aug 29, 2026
eba08cb
Reject NaN uncertain ordinate equality
HadenSmith Aug 29, 2026
122d998
Document expected probability overloads
HadenSmith Aug 29, 2026
7c61843
Correct validation parameter names
HadenSmith Aug 29, 2026
4cdb8d9
Document Simpson 2D constructor guards
HadenSmith Aug 29, 2026
43deb62
Guard dense probability enumeration
HadenSmith Aug 29, 2026
14fa353
Clarify Frechet lower-bound semantics
HadenSmith Aug 29, 2026
99db59a
Stabilize logarithmic distribution lower tails
HadenSmith Aug 29, 2026
23dd96b
Make EVD effective sample size scale invariant
HadenSmith Aug 29, 2026
c082c9d
Route custom-weight network detours consistently
HadenSmith Aug 29, 2026
cf5175d
Reject negative network edge indices
HadenSmith Aug 29, 2026
657dc03
Preserve survival precision in hurdle CDF
HadenSmith Aug 29, 2026
ed32cf5
Document singular boundary log densities
HadenSmith Aug 29, 2026
f4c4c93
Preserve logarithm bases in resampling
HadenSmith Aug 29, 2026
fb88800
Floor automatic subnormal KDE bandwidths
HadenSmith Aug 29, 2026
2dbfa7f
Round-trip empirical probability order
HadenSmith Aug 29, 2026
138c065
Harden uncertainty ensemble filtering
HadenSmith Aug 29, 2026
14d547e
Remove dead bootstrap standard error path
HadenSmith Aug 29, 2026
033949b
Stabilize global sensitivity tie ranks
HadenSmith Aug 29, 2026
b7afd7f
Harden Archimedean conditional boundaries
HadenSmith Aug 29, 2026
00a9a57
Reject indexed time series division by zero
HadenSmith Aug 29, 2026
4f63ac9
Correct table path nullability contract
HadenSmith Aug 29, 2026
9b66ad7
Fix exponential MLE location constraint
HadenSmith Aug 30, 2026
7e59af7
Condition GMM covariance and align competing-risk recovery tests
HadenSmith Aug 30, 2026
2b57771
Improve Differential Evolution boundary repair
HadenSmith Sep 2, 2026
7a3f0e4
Support legacy competing-risks matrix placeholders
HadenSmith Sep 5, 2026
43a6927
Pin the 2-D Gauss-Kronrod recorder's exhaustion-flush and mass contracts
HadenSmith Sep 5, 2026
94d1713
Fix the AdaptiveGaussKronrod source file name spelling
HadenSmith Sep 6, 2026
c0d67b9
Repair KappaFour numerical evaluation and fitting
HadenSmith Sep 8, 2026
532026f
Reuse shared APIs and remove redundant private helpers
HadenSmith Sep 8, 2026
d80bfa8
Serialize test execution
HadenSmith Sep 8, 2026
b8bf912
Repair distribution tails, moments, and uncertainty
HadenSmith Sep 8, 2026
a3bd2af
Merge current Numerics branch with distribution repairs
HadenSmith Sep 8, 2026
46792b4
Restore distribution constraints and fitting performance
HadenSmith Sep 9, 2026
4ded6ae
Changing testing settings
HadenSmith Sep 9, 2026
62424a2
Merge distribution regression repairs into local Numerics branch
HadenSmith Sep 9, 2026
376e200
Complete distribution XML documentation and helper cleanup
HadenSmith Sep 9, 2026
1b90450
Restore class-level test parallelism
HadenSmith Sep 9, 2026
645aebb
Generalize the configuration snapshot beyond all-Weibull components
HadenSmith Sep 9, 2026
7b53a84
Short-circuit the mixture configuration refresh with the bitwise snap…
HadenSmith Sep 9, 2026
73e1dfe
Gate mixture validation and support bounds on the certified snapshot
HadenSmith Sep 9, 2026
3a9e598
Guard the configuration snapshot with round-trip and completeness sweeps
HadenSmith Sep 9, 2026
ab0ee28
Route the log-Pearson hot paths through static Pearson evaluators
HadenSmith Sep 9, 2026
7a80e35
Co-locate single-consumer helpers and move the kappa kernels to Base
HadenSmith Sep 9, 2026
202095a
Minor changes to parameter constraints
HadenSmith Sep 11, 2026
2bba500
Fixing exponential back to MLE bounds for location.
HadenSmith Sep 15, 2026
e485640
Repin parameter constraint test baselines
HadenSmith Sep 15, 2026
156204f
Repair BFGS convergence and safeguarded bounded line search
HadenSmith Sep 17, 2026
189a597
Avoid Cholesky probe exceptions and verify every ridge candidate
HadenSmith Sep 17, 2026
c949397
Handle objective rounding in BFGS convergence
HadenSmith Sep 17, 2026
0c3b495
Prepare v2.2.0 release
HadenSmith Sep 18, 2026
2bd9abc
Exclude live BOM tests from PR integration
HadenSmith Sep 18, 2026
f983559
Stabilize PR tests and isolate live service checks
HadenSmith Sep 18, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
32 changes: 28 additions & 4 deletions .github/workflows/Integration.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,31 @@ on:

jobs:
CI:
uses: HydrologicEngineeringCenter/dotnet-workflows/.github/workflows/integration.yml@main
with:
dotnet-version: '10.0.x'
run-tests: true
# Preserve the check name used by the previous reusable workflow.
name: CI / CI
runs-on: windows-latest
timeout-minutes: 90

steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Setup .NET SDKs
uses: actions/setup-dotnet@v4
with:
dotnet-version: |
8.0.x
9.0.x
10.0.x

- name: Build
run: dotnet build -c Release

- name: Test
env:
VSTEST_CONNECTION_TIMEOUT: '600'
# Live provider outages and full-record download timeouts must not block PRs.
# Keep deterministic download, parsing, validation, and numerical tests in the gate.
run: dotnet test -c Release --no-build --filter "TestCategory!=LiveServiceIntegration"
4 changes: 2 additions & 2 deletions .github/workflows/Snapshot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@ jobs:
with:
dotnet-version: '10.0.x'
project-names: 'Numerics'
# Snapshot workflow appends .<run_number>-dev, so this tracks the next development patch after v2.1.4.
version: '2.1.5'
# Snapshot workflow appends .<run_number>-dev, so this tracks the next development patch after v2.2.0.
version: '2.2.1'
# PR integration already runs the full multi-target test suite.
run-tests: false
nuget-source: 'https://www.hec.usace.army.mil/nexus/repository/consequences-nuget-public/'
Expand Down
4 changes: 0 additions & 4 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -372,9 +372,5 @@ MigrationBackup/
/TestResults

# Local developer guidance and settings. These files are for developer machines only.
/CLAUDE.md
/Claude.md
/AGENTS.md
/Agents.md
/.claude/
/.agents/
121 changes: 121 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,121 @@
# Numerics Local Development Rules

## Technical Authority and Algorithm Change Control (NON-NEGOTIABLE)

Haden Smith is the final technical and numerical authority for this repository. AI agents,
including Codex and Claude, must never change an established algorithm, formula,
probability-combination rule, numerical method, convergence rule, default tolerance,
random-seed behavior, clipping or normalization policy, or reference-result contract without
Haden Smith's explicit prior approval. A failing test authorizes diagnosis and a proposed fix
only; it does not authorize tuning or replacing the algorithm. When an agent's reasoning
conflicts with Haden Smith's direction or domain judgment, the agent must stop, present the
evidence, and request a decision. AI confidence is not technical authority.

## Quality Gate

- No compiler errors.
- No compiler warnings.
- Do not suppress warnings to make a build pass; fix the code, XML documentation, or invalid reference.
- Empty catch blocks are not allowed. Preserve exception context when rethrowing or wrapping.

## XML Documentation

- XML documentation is mandatory for all public API additions and changes.
- Public classes, structs, interfaces, enums, constructors, properties, methods, events, and fields require accurate XML documentation.
- Private or internal methods with non-obvious algorithms should also be documented.
- Include `<summary>`, `<param>`, `<returns>`, `<exception>`, and `<remarks>` whenever they apply.
- Use `<remarks>` for numerical method notes, assumptions, references, and domain-specific constraints.
- XML documentation warnings `CS1570`, `CS1571`, `CS1572`, `CS1573`, `CS1574`, `CS1584`, `CS1587`, `CS1589`, and `CS1591` are build errors when `EnforceXmlDocumentation=true`.

## Unit Tests

- Every behavior change must include unit tests or an explicit reason no test is useful.
- Every new public class requires corresponding coverage in `Test_Numerics`.
- Statistical and numerical methods must cover known values, edge cases, invalid inputs, and regression cases.
- Use small inline fixtures in tests unless a shared fixture already exists for the exact scenario.

## Required Validation

Run validation before committing:

```powershell
dotnet build -c Release
dotnet test -c Release --no-build
```

Both commands must complete with zero errors, zero warnings, and zero failed tests. If validation fails, fix the issue before committing.

## Git Workflow

- Commit after successful build and test validation for the completed logical change.
- Stage only files that belong to the validated change.
- Do not include unrelated tracked changes or untracked local files.
- Use concise commit messages that describe the change.
- Do not push unless explicitly asked.

## PR and Release Workflow

Use this workflow for release-preparation pull requests and public package releases.

### Release PR Planning

- Base release PRs on `bug-fixes-and-enhancements` targeting `main` unless the user gives a different branch plan.
- Identify the last merged PR from the release branch and list every commit since that merge.
- Merge `origin/main` into the release branch before editing so current README, JOSS, citation, and metadata updates are preserved.
- Define the release outcome up front, including the exact `RMC.Numerics` version that NuGet.org must show as the latest public package after publishing.

### Version and Metadata Checklist

Update and cross-check every version-bearing file for each release:

- `Numerics/Numerics.csproj`: set `Version`, `AssemblyVersion`, and `PackageReleaseNotes`.
- `CITATION.cff`: set `version` and `date-released`.
- `codemeta.json`: set `version` and `dateModified`.
- `.github/workflows/Snapshot.yml`: advance the snapshot version to the next patch after the release.
- Keep `PackageReleaseNotes` concise because NuGet.org displays this field on the package page.

### PR Message Checklist

Use a title like `Prepare vX.Y.Z release`.

Include these sections in the PR body:

- `Summary`: package, citation, CodeMeta, and snapshot metadata updates.
- `Summary`: user-facing fixes, reliability changes, API changes, and test coverage added since the previous release branch merge.
- `Validation`: required commands and package inspection results.

Use this validation checklist:

```markdown
- [ ] `dotnet restore`
- [ ] `dotnet build Numerics/Numerics.csproj -c Release /p:Version=X.Y.Z`
- [ ] `dotnet test -c Release` with `VSTEST_CONNECTION_TIMEOUT=600`
- [ ] `dotnet pack Numerics/Numerics.csproj -c Release /p:Version=X.Y.Z --no-build -o ./packages`
- [ ] Inspect the `.nupkg` metadata and confirm version `X.Y.Z` and release notes are correct.
```

### Release Message Checklist

Create a GitHub Release titled `Numerics vX.Y.Z`.

Include these sections in the release body:

- `Highlights`: short release overview.
- `Reliability and Fixes`: behavior fixes and reliability improvements.
- Domain-specific sections for API, statistics, time-series, numerical methods, or other notable changes.
- `Install`: package install command.

Use this install command format:

```bash
dotnet add package RMC.Numerics --version X.Y.Z
```

### Publish Workflow

- Merge the validated PR to `main`.
- Tag the merge commit as `vX.Y.Z`.
- Push the tag so `.github/workflows/Release.yml` publishes to the internal Nexus feed.
- Create and publish a non-draft, non-prerelease GitHub Release for `vX.Y.Z`.
- Confirm `.github/workflows/NuGetPublish.yml` publishes `RMC.Numerics.X.Y.Z.nupkg` to NuGet.org.
- Verify NuGet.org shows `RMC.Numerics X.Y.Z` as the latest public package.
4 changes: 2 additions & 2 deletions CITATION.cff
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@ cff-version: 1.2.0
message: "If you use this software, please cite our article in the Journal of Open Source Software."
type: software
title: "Numerics: A .NET Library for Numerical Computing, Statistical Analysis, and Risk Assessment"
version: "2.1.4"
date-released: "2026-07-17"
version: "2.2.0"
date-released: "2026-09-18"
license: 0BSD
repository-code: "https://github.com/USACE-RMC/Numerics"
url: "https://github.com/USACE-RMC/Numerics"
Expand Down
121 changes: 121 additions & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,121 @@
# Numerics Local Development Rules

## Technical Authority and Algorithm Change Control (NON-NEGOTIABLE)

Haden Smith is the final technical and numerical authority for this repository. AI agents,
including Codex and Claude, must never change an established algorithm, formula,
probability-combination rule, numerical method, convergence rule, default tolerance,
random-seed behavior, clipping or normalization policy, or reference-result contract without
Haden Smith's explicit prior approval. A failing test authorizes diagnosis and a proposed fix
only; it does not authorize tuning or replacing the algorithm. When an agent's reasoning
conflicts with Haden Smith's direction or domain judgment, the agent must stop, present the
evidence, and request a decision. AI confidence is not technical authority.

## Quality Gate

- No compiler errors.
- No compiler warnings.
- Do not suppress warnings to make a build pass; fix the code, XML documentation, or invalid reference.
- Empty catch blocks are not allowed. Preserve exception context when rethrowing or wrapping.

## XML Documentation

- XML documentation is mandatory for all public API additions and changes.
- Public classes, structs, interfaces, enums, constructors, properties, methods, events, and fields require accurate XML documentation.
- Private or internal methods with non-obvious algorithms should also be documented.
- Include `<summary>`, `<param>`, `<returns>`, `<exception>`, and `<remarks>` whenever they apply.
- Use `<remarks>` for numerical method notes, assumptions, references, and domain-specific constraints.
- XML documentation warnings `CS1570`, `CS1571`, `CS1572`, `CS1573`, `CS1574`, `CS1584`, `CS1587`, `CS1589`, and `CS1591` are build errors when `EnforceXmlDocumentation=true`.

## Unit Tests

- Every behavior change must include unit tests or an explicit reason no test is useful.
- Every new public class requires corresponding coverage in `Test_Numerics`.
- Statistical and numerical methods must cover known values, edge cases, invalid inputs, and regression cases.
- Use small inline fixtures in tests unless a shared fixture already exists for the exact scenario.

## Required Validation

Run validation before committing:

```powershell
dotnet build -c Release
dotnet test -c Release --no-build
```

Both commands must complete with zero errors, zero warnings, and zero failed tests. If validation fails, fix the issue before committing.

## Git Workflow

- Commit after successful build and test validation for the completed logical change.
- Stage only files that belong to the validated change.
- Do not include unrelated tracked changes or untracked local files.
- Use concise commit messages that describe the change.
- Do not push unless explicitly asked.

## PR and Release Workflow

Use this workflow for release-preparation pull requests and public package releases.

### Release PR Planning

- Base release PRs on `bug-fixes-and-enhancements` targeting `main` unless the user gives a different branch plan.
- Identify the last merged PR from the release branch and list every commit since that merge.
- Merge `origin/main` into the release branch before editing so current README, JOSS, citation, and metadata updates are preserved.
- Define the release outcome up front, including the exact `RMC.Numerics` version that NuGet.org must show as the latest public package after publishing.

### Version and Metadata Checklist

Update and cross-check every version-bearing file for each release:

- `Numerics/Numerics.csproj`: set `Version`, `AssemblyVersion`, and `PackageReleaseNotes`.
- `CITATION.cff`: set `version` and `date-released`.
- `codemeta.json`: set `version` and `dateModified`.
- `.github/workflows/Snapshot.yml`: advance the snapshot version to the next patch after the release.
- Keep `PackageReleaseNotes` concise because NuGet.org displays this field on the package page.

### PR Message Checklist

Use a title like `Prepare vX.Y.Z release`.

Include these sections in the PR body:

- `Summary`: package, citation, CodeMeta, and snapshot metadata updates.
- `Summary`: user-facing fixes, reliability changes, API changes, and test coverage added since the previous release branch merge.
- `Validation`: required commands and package inspection results.

Use this validation checklist:

```markdown
- [ ] `dotnet restore`
- [ ] `dotnet build Numerics/Numerics.csproj -c Release /p:Version=X.Y.Z`
- [ ] `dotnet test -c Release` with `VSTEST_CONNECTION_TIMEOUT=600`
- [ ] `dotnet pack Numerics/Numerics.csproj -c Release /p:Version=X.Y.Z --no-build -o ./packages`
- [ ] Inspect the `.nupkg` metadata and confirm version `X.Y.Z` and release notes are correct.
```

### Release Message Checklist

Create a GitHub Release titled `Numerics vX.Y.Z`.

Include these sections in the release body:

- `Highlights`: short release overview.
- `Reliability and Fixes`: behavior fixes and reliability improvements.
- Domain-specific sections for API, statistics, time-series, numerical methods, or other notable changes.
- `Install`: package install command.

Use this install command format:

```bash
dotnet add package RMC.Numerics --version X.Y.Z
```

### Publish Workflow

- Merge the validated PR to `main`.
- Tag the merge commit as `vX.Y.Z`.
- Push the tag so `.github/workflows/Release.yml` publishes to the internal Nexus feed.
- Create and publish a non-draft, non-prerelease GitHub Release for `vX.Y.Z`.
- Confirm `.github/workflows/NuGetPublish.yml` publishes `RMC.Numerics.X.Y.Z.nupkg` to NuGet.org.
- Verify NuGet.org shows `RMC.Numerics X.Y.Z` as the latest public package.
2 changes: 1 addition & 1 deletion Numerics/Data/Interpolation/Polynomial.cs
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ public class Polynomial : Interpolater
/// <param name="sortOrder">The sort order of the x-values, either ascending or descending. Default = Ascending. </param>
public Polynomial(int order, IList<double> xValues, IList<double> yValues, SortOrder sortOrder = SortOrder.Ascending) : base(xValues, yValues, sortOrder)
{
if (order >= Count) throw new ArgumentException(nameof(order), "The order must be less than the length of the x value list.");
if (order >= Count) throw new ArgumentException("The order must be less than the length of the x value list.", nameof(order));
Order = order;

}
Expand Down
28 changes: 20 additions & 8 deletions Numerics/Data/Interpolation/Support/Interpolater.cs
Original file line number Diff line number Diff line change
Expand Up @@ -33,17 +33,20 @@ public Interpolater(IList<double> xValues, IList<double> yValues, SortOrder sort
Count = xValues.Count;

// Validate
if (yValues.Count != Count) throw new ArgumentException(nameof(xValues), "The x and y lists must be the same length.");
if (Count < 2) throw new ArgumentException(nameof(xValues), "The x list is too small. It must have at least 2 values.");
if (yValues.Count != Count) throw new ArgumentException("The x and y lists must be the same length.", nameof(xValues));
if (Count < 2) throw new ArgumentException("The x list is too small. It must have at least 2 values.", nameof(xValues));
for (int i = 1; i < xValues.Count; ++i)
{
if (xValues[i] == xValues[i - 1]) throw new ArgumentException(nameof(xValues), "All x values should be unique.");
if (sortOrder == SortOrder.Ascending && xValues[i] < xValues[i - 1]) throw new ArgumentException(nameof(xValues), "The x values are not in ascending order.");
if (sortOrder == SortOrder.Descending && xValues[i] > xValues[i - 1]) throw new ArgumentException(nameof(xValues), "The x values are not in descending order.");
if (xValues[i] == xValues[i - 1]) throw new ArgumentException("All x values should be unique.", nameof(xValues));
if (sortOrder == SortOrder.Ascending && xValues[i] < xValues[i - 1]) throw new ArgumentException("The x values are not in ascending order.", nameof(xValues));
if (sortOrder == SortOrder.Descending && xValues[i] > xValues[i - 1]) throw new ArgumentException("The x values are not in descending order.", nameof(xValues));
}
this.XValues = xValues;
this.YValues = yValues;
deltaStart = Math.Min(1, (int)Math.Pow((double)Count, 0.25));
this.YValues = yValues;
// Scale the correlated-search window with the table size (Numerical Recipes' N^0.25 hunt
// heuristic). Math.Max keeps the window at least 1 and lets it grow with the table; a
// window pinned to a constant starves the hunt path. See the remarks on deltaStart.
deltaStart = Math.Max(1, (int)Math.Pow((double)Count, 0.25));
SortOrder = sortOrder;

}
Expand All @@ -59,8 +62,17 @@ public Interpolater(IList<double> xValues, IList<double> yValues, SortOrder sort
public int SearchStart { get; set; } = 0;

/// <summary>
/// Keeps track of the difference is start locations.
/// The maximum distance between consecutive search results for which those searches are still
/// treated as correlated, selecting the hunt search over bisection.
/// </summary>
/// <remarks>
/// The constructor assigns <c>Math.Max(1, (int)Math.Pow(Count, 0.25))</c>, the Numerical
/// Recipes N^0.25 hunt heuristic, so the window grows with the table size. The value affects
/// only which search path runs — hunt and bisection return the same bracket for the same
/// input — so it is a performance characteristic rather than a correctness one.
/// <see cref="SearchStart"/> and <see cref="UseSmartSearch"/> are public and settable, so a
/// consumer that wants different search behaviour can steer the search directly.
/// </remarks>
protected int deltaStart = 0;

/// <summary>
Expand Down
Loading
Loading