0129 four numerics libraries read and three absences withdrawn - CyrilB1531/lodestar GitHub Wiki
0129 โ Four .NET numerics libraries read, and three absence claims withdrawn
Status: accepted ยท Date: 2026-09-14 ยท Amends: 0105, 0116 ยท Applies: 0074, 0075
Context
#676 listed five .NET numerics libraries this repository had never read: NumFlat, Meta.Numerics, Numerics.NET, Extreme Optimization and ILNumerics. Decision 0074 says a gap is claimed on what a package exports, never on its README, and 0096 and 0105 each replaced one of this project's own claims by doing so. The issue asked for the same reading here, recorded even where the answer is uncomfortable.
It is uncomfortable. Three sentences this repository publishes are false as written.
The reading
Read on 2026-09-14 with tools/survey.cs
(decision 0110); the
member count is the surveyor's first line, accessors excluded. Every licence was read from the
package, per decision 0075.
dotnet run tools/survey.cs -- Meta.Numerics 4.2.0 'PrincipalComponent|LjungBox|Autocovar'
dotnet run tools/survey.cs -- Numerics.NET 10.7.0 'PartialAutocorrelation|Kpss|VarianceInflation'
dotnet run tools/survey.cs -- ILNumerics.Toolboxes.MachineLearning 7.4.62 'pca$'
dotnet run tools/survey.cs -- NumFlat 1.3.4 'EigenValues|Regression'
| Meta.Numerics 4.2.0 | Numerics.NET 10.7.0 | ILNumerics 7.4.62 | NumFlat 1.3.4 | |
|---|---|---|---|---|
| published | 2025-07-14 | 2026-07-21 | 2026-08-25 | 2026-07-18 |
| licence, from the package | MS-PL, <license type="expression"> |
commercial: License.md, an ExoAnalytics Inc. agreement, requireLicenseAcceptance |
commercial: LICENSE.txt, ILNumerics GmbH's agreement, whose free plan excludes commercial use; requireLicenseAcceptance |
MIT, <license type="expression"> |
lib/ |
netstandard2.0 |
net462, netstandard2.0, net8.0, net9.0, net10.0 |
net461, netstandard2.1, net8.0 |
net8.0 |
| assembly read | Meta.Numerics.dll: 177 types, 1,644 members |
Numerics.NET.dll: 905 types, 13,839 members |
ILNumerics.Toolboxes.Statistics.dll: 513 types, 3,644 members; ILNumerics.Toolboxes.MachineLearning.dll: 312 types, 2,070 members |
NumFlat.dll: 123 types, 938 members, as 0116 recorded |
The five are four. Numerics.NET's own package description reads "formerly Extreme
Optimization Numerical Libraries for .NET", and Extreme.Numerics stopped at 8.1.25 on
2024-05-28. And Meta.Numerics is not six years stale: the issue saw 4.1.4 of 2020-08-21, and
4.2.0 followed on 2025-07-14.
What each exports that this repository had called absent
| subject | Meta.Numerics | Numerics.NET | ILNumerics | NumFlat |
|---|---|---|---|---|
| variance a principal component explains | PrincipalComponent.VarianceFraction, .CumulativeVarianceFraction |
PrincipalComponent.ProportionOfVariance, .CumulativeProportionOfVariance |
MachineLearning.pca(A, outWeights, outCenter, outScores) |
PrincipalComponentAnalysis.EigenValues |
| autocorrelation | TimeSeries.Autocovariance |
TimeSeriesFunctions.AutocorrelationFunction |
none | none |
| partial autocorrelation | none | TimeSeriesFunctions.PartialAutocorrelationFunction |
none | none |
| Ljung-Box | TimeSeries.LjungBoxTest |
Tests.LjungBoxTest |
none | none |
| stationarity | none | AugmentedDickeyFullerTest, KpssTest |
none | none |
| hypothesis tests | Univariate.StudentTTest, MannWhitneyTest, KruskalWallisTest, KolmogorovSmirnovTest, OneWayAnovaTest, ShapiroFranciaTest; Bivariate.WilcoxonSignedRankTest; BinaryContingencyTableOperations.FisherExactTest; ContingencyTable<,>.PearsonChiSquaredTest |
a Statistics.Tests namespace, Shapiro-Wilk, Anderson-Darling and Friedman among it |
distributions and descriptive statistics, no test | none |
| regression inference | Parameter.Estimate as an UncertainValue (Uncertainty, ConfidenceInterval); GeneralLinearRegressionResult.F, .RSquared, .Anova. No adjusted R-squared, no VIF, and Parameter carries no test of its own |
Parameter<T>.StandardError, .Statistic, .PValue, .GetConfidenceInterval; RegressionModel<T>.AdjustedRSquared, .FStatistic; LinearRegressionModel.VarianceInflationFactors |
none | coefficients, intercept and prediction only |
Searched for by name and found in none of the five assemblies above: Kaplan-Meier, Nelson-Aalen,
the log-rank test, proportional hazards, censoring, conformal prediction, and mixed or random
effects. The only Hazard members are Meta.Numerics' distribution hazard functions.
What is now false as written
- "Below
net8.0nothing in .NET could say how many components a projection should keep." 0116 said the explained variance "has no incumbent onnetstandard2.0", anddocs/reference/decomposition/factorization.md,docs/migration/sklearn.md,README.md's incumbent table and both benchmark pages repeated it. Meta.Numerics reports it onnetstandard2.0under MS-PL, and Numerics.NET does under a commercial licence. 0116 read the two PCA incumbents a reader was being pointed at, and the sentence reached further than the reading. - "No maintained .NET package carries" the time-series diagnostics. 0105 said "what nobody
maintained ships is the apparatus for deciding whether a series may be modelled at all", and
docs/migration/statsmodels.mdsaid the same. Numerics.NET ships the autocorrelation and partial autocorrelation functions, Ljung-Box, ADF and KPSS, and published this July. Meta.Numerics ships the autocovariance and Ljung-Box. - Accord.Statistics is "the one .NET library that did carry" hypothesis tests, and there is
"nothing maintained to benchmark against" โ
docs/guides/hypothesis-testing.md. Meta.Numerics carries eight of the ten familiesLodestar.Statsships, onnetstandard2.0, and Numerics.NET more.
A fourth is false in a smaller way. README.md says the standard errors, t and p values, intervals,
adjusted R-squared, F test and VIF of a regression "are in none of them". Numerics.NET exports
every one; Meta.Numerics exports the standard error, the interval and the F test.
What still holds
- Survival and conformal prediction have no .NET incumbent, commercial ones included.
README.md's items 4 and 7 and decision 0099 stand. - The free inference table is still incomplete. Meta.Numerics stops before the adjusted R-squared, the VIF and a test per coefficient, which is what 0096 called the gap: "a maintained, permissively licensed, framework-free OLS table". NumFlat returns coefficients only.
- A free partial autocorrelation, stationarity test or seasonal decomposition exists only in
Cortex.TimeSeries, which 0105 already recorded and set aside. - NumFlat changes nothing 0116 did not already record. Its PCA is measured
(#701), its regression has no inference,
and its four clustering algorithms against
Lodestar.Cluster's one are #681's measurement. That answers #676's last criterion: NumFlat is already a measured incumbent forDecomposition, and #681 makes it one forCluster.
Decision
Nothing already shipped is withdrawn, and every sentence above is corrected where it was written. 0105 and 0116 are amended on their absence claims; their decisions stand.
- A commercial incumbent is named, not delegated to. A migration row recommends what a reader
can install without buying a licence, as 0105 did for
Dew.Stats. Numerics.NET is now named beside each subject it covers, with its licence, so a reader who already holds one knows it answers the question. - Meta.Numerics is named as a free incumbent and delegated to for nothing yet.
PrincipalComponentVariance,SerialCorrelationand theLodestar.Statsfamilies stay. What they add over it is checkable rather than asserted: agreement with scikit-learn,statsmodelsandscipyat1e-9through a frozen corpus, confidence bands and a partial autocorrelation it does not export, and an Apache-2.0 span API. What they do not add is availability belownet8.0, and no document says so any more. - Meta.Numerics is measured before any number is claimed against it:
#756 adds it to
bench/for the explained variance and the hypothesis tests it shares withLodestar.Stats.
Options that lost
- Deprecate
PrincipalComponentVariancein favour of Meta.Numerics. Had this reading preceded 0119, 0116's reopening condition might have been met by a migration row. It did not, and the type shipped inLodestar.Decomposition0.3.0 with a frozen scikit-learn corpus that Meta.Numerics has never been held to. Retiring it on a member name, before #756 has checked that the two agree, would repeat the mistake this record corrects in the opposite direction. - Correct only the ADR. #676's third criterion refuses it, and so does the reason 0074 exists: a reader meets the claim in the migration page and the README, not in a decision record.
- Leave the commercial libraries unnamed, since nothing is delegated to them. An absence claim that is true only once commercial software is excluded has to say so, or it is false.
Consequences
README.md's item 6 and itsLodestar.DecompositionandLodestar.Statsincumbent rows name what these libraries export.- The PCA pages โ
docs/migration/sklearn.md,docs/reference/decomposition/factorization.mdand itsPrincipalComponentVariancepage,docs/equivalence.md's projection row,bench/README.mdsection 30 anddocs/guides/performance.mdโ name Meta.Numerics beside NumFlat and ML.NET.docs/guides/hypothesis-testing.mdlists the three libraries that carry tests, anddocs/migration/statsmodels.md's hypothesis-test row stops pointing at Math.NET, which ships none. docs/migration/statsmodels.md's time-series row splits and stops reading being written: #617 shipped the serial-correlation half, and #671 holds the rest, where Numerics.NET's ADF and KPSS are now on record.- #621 inherits one line of evidence: none of these four exports a mixed or random-effects member.