2026-09-03 10:00:00 +02:00
|
|
|
|
# Changelog
|
|
|
|
|
|
|
|
|
|
|
|
All notable changes to **Tensor** are documented in this file.
|
|
|
|
|
|
|
|
|
|
|
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
|
|
|
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
|
|
|
|
|
2026-09-27 11:12:43 +02:00
|
|
|
|
## [development]
|
|
|
|
|
|
|
|
|
|
|
|
### Fixed
|
|
|
|
|
|
|
|
|
|
|
|
**Linear algebra.**
|
|
|
|
|
|
|
|
|
|
|
|
- `Cholesky`, `Eigen`, `EigenComplex` and the Cholesky rank-one
|
|
|
|
|
|
update refuse a matrix or vector holding a NaN or infinity instead
|
|
|
|
|
|
of returning an all-NaN factor or spectrum with a nil error, the
|
|
|
|
|
|
refusal the sparse solvers already make.
|
2026-09-27 11:58:07 +02:00
|
|
|
|
- `EigenComplex` converges on a Hermitian matrix whose off-diagonal
|
|
|
|
|
|
entries all sit just under the per-entry skip level: the sweep no
|
|
|
|
|
|
longer exhausts its passes on a matrix it should have declared
|
|
|
|
|
|
converged.
|
2026-09-27 11:12:43 +02:00
|
|
|
|
|
2026-09-27 14:23:51 +02:00
|
|
|
|
**Statistics.**
|
|
|
|
|
|
|
|
|
|
|
|
- `FitHiddenMarkovModel` fits a single-observation sequence instead of
|
|
|
|
|
|
crashing the process: a transition row with no evidence keeps its
|
|
|
|
|
|
previous estimate rather than dividing by zero.
|
2026-09-27 15:41:19 +02:00
|
|
|
|
- `Viterbi` refuses a sequence of probability zero under the model,
|
|
|
|
|
|
the same refusal `Forward` makes, instead of returning a meaningless
|
|
|
|
|
|
path beside a log probability of -Inf.
|
2026-09-27 17:03:36 +02:00
|
|
|
|
- The Student-t tails stay accurate past the point t squared
|
|
|
|
|
|
overflows float64: `StudentTCDF`, the regression coefficient
|
|
|
|
|
|
p-values and `NoncentralTCDF` at extreme t answer the tail the
|
|
|
|
|
|
format still holds instead of a silent zero or an error naming a
|
|
|
|
|
|
NaN.
|
2026-09-27 19:26:04 +02:00
|
|
|
|
- `LinearRegression` and `WeightedLinearRegression` keep their
|
|
|
|
|
|
inference alive when the squared deviations underflow to zero: the
|
|
|
|
|
|
standard errors, t and F statistics read factored sums of squares
|
|
|
|
|
|
instead of reporting infinity beside zero evidence.
|
2026-09-27 14:23:51 +02:00
|
|
|
|
|
2026-09-28 09:34:28 +02:00
|
|
|
|
**Integration and optimisation.**
|
|
|
|
|
|
|
|
|
|
|
|
- `TriangleMesh2D.BoundaryEdges` returns the mesh's own edges: the
|
|
|
|
|
|
boundary pairs sort as pairs, never as one flat index list that
|
|
|
|
|
|
interleaves the endpoints of unrelated edges.
|
2026-09-28 10:21:52 +02:00
|
|
|
|
- `IntegrateFunction` names itself in its errors; the adaptive
|
|
|
|
|
|
quadrature no longer reports under a name absent from the surface.
|
2026-09-28 09:34:28 +02:00
|
|
|
|
|
2026-09-03 10:00:00 +02:00
|
|
|
|
## [1.0.0] - 2026-09-03
|
|
|
|
|
|
|
|
|
|
|
|
The initial release of Tensor, a scientific computing library in pure
|
|
|
|
|
|
Go: immutable n-dimensional arrays over a wide element-type set,
|
|
|
|
|
|
dense and sparse linear algebra, differential equations, quadrature,
|
|
|
|
|
|
signal transforms, statistics up to mixed models and hidden Markov
|
|
|
|
|
|
models, optimisation from simplex to stochastic global search, a
|
|
|
|
|
|
reverse-mode differentiable core, deterministic SVG plotting and an
|
|
|
|
|
|
experimental SPMD package, with no third-party dependencies and a
|
|
|
|
|
|
deterministic, parallel execution model.
|
|
|
|
|
|
|
|
|
|
|
|
The module is one core package plus one package per domain:
|
|
|
|
|
|
`sourcedock.dev/petrbalvin/tensor` carries the `Array` core with
|
|
|
|
|
|
element-wise math, special functions and the reproducible generator,
|
|
|
|
|
|
re-exporting the whole surface of every domain package; `linalg` the
|
|
|
|
|
|
dense and sparse solvers; `signal` the transforms, filters and
|
|
|
|
|
|
stencils; `integrate` the differential equations and quadrature;
|
|
|
|
|
|
`stats` the distributions and inference; `optim` the fitting and root
|
|
|
|
|
|
finding; `io` the CSV, FITS, HDF5, NetCDF and memory-mapped readers
|
|
|
|
|
|
and writers; `grad` the differentiable core; `plot` the deterministic
|
|
|
|
|
|
figures. Import what you use: the domain packages depend on the core,
|
|
|
|
|
|
never on each other except through five one-directional edges, and
|
|
|
|
|
|
nothing below the root imports the root. The experimental `spmd`
|
|
|
|
|
|
package stands beside them, imported explicitly: a distributed
|
|
|
|
|
|
program names it, the facade does not.
|
|
|
|
|
|
|
|
|
|
|
|
### Added
|
|
|
|
|
|
|
|
|
|
|
|
**Core arrays.**
|
|
|
|
|
|
|
|
|
|
|
|
- Immutable, shape-checked n-dimensional arrays over int64, float32,
|
|
|
|
|
|
float64, complex128, IEEE 754 float16 and the narrow integer types
|
|
|
|
|
|
Int8, Uint8, Int16, Uint16, Int32 and Uint32, with Bool beside
|
|
|
|
|
|
them, under a strict promotion ladder, row-major layout and
|
|
|
|
|
|
multi-rank text formatting. Constructors cover literals
|
|
|
|
|
|
(`FromInts`, `FromFloat32s`, `FromFloats`, `FromComplexes`,
|
|
|
|
|
|
`FromFloat16s`, `FromInt8s` and the family around them), filled and
|
|
|
|
|
|
ranged builders (`Zeros`, `Ones`, `FullI`/`FullF`/`FullC`, `Range`,
|
|
|
|
|
|
`RangeBy`, `Linspace`, `Grid`), byte loading and dtype conversions
|
|
|
|
|
|
(`WithInt`/`WithFloat`/`WithComplex`, and `Astype`, which
|
|
|
|
|
|
range-checks every conversion into a narrow target with an error
|
|
|
|
|
|
naming the value and its index).
|
|
|
|
|
|
- Element-wise arithmetic with scalar variants, transcendentals,
|
|
|
|
|
|
comparisons that answer a bool mask of one byte per element
|
|
|
|
|
|
composing through `And`, `Or`, `Xor` and `Not` (`Where` and
|
|
|
|
|
|
`Select` keep the int mask), and reductions from `Sum`, `Mean`,
|
|
|
|
|
|
`Min`/`Max`, `Prod` and `Dot` through axis variants, `ArgMax`,
|
|
|
|
|
|
`TopK`, `CumSum` and `CumProd` to `SumKahan` compensated summation.
|
|
|
|
|
|
Every float fold cuts its line through a canonical partition fixed
|
|
|
|
|
|
by the length alone and combines the partials through a balanced
|
|
|
|
|
|
tree, so a reduction's answer is a function of the data alone,
|
|
|
|
|
|
never of the machine, and `CumSum` carries a Neumaier compensation
|
|
|
|
|
|
term so a long prefix sheds no small addend.
|
|
|
|
|
|
- Shape operations (`Reshape`, `Flatten`, `Squeeze`, `Transpose`,
|
|
|
|
|
|
`TransposeAxes`, `MoveAxis`, `Pad`, `Tile`, `Repeat`, `Flip`, `Roll`,
|
|
|
|
|
|
`Diag`, triangular extractions), indexing (contiguous `Slice`
|
|
|
|
|
|
selections as read-only payload views, `Gather`, `Scatter`, `Take`,
|
|
|
|
|
|
`Nonzero`, `Argwhere`, `SearchSorted`), and the toolkit pieces
|
|
|
|
|
|
`Einsum`, `Unique`, `OneHot`, `CrossProduct`, `Sort`, `ArgSort`,
|
|
|
|
|
|
and the numeric `Jacobian` of a vector function by central
|
|
|
|
|
|
differences.
|
|
|
|
|
|
- `MatMul2D`, the parallel cache-friendly kernel; sparse matrices as
|
|
|
|
|
|
`SparseCOO`; interpolation (`Interpolate`, the Fritsch-Carlson
|
|
|
|
|
|
`InterpolateMonotone`, `Interpolate2D`, `InterpolateGrid`, natural
|
|
|
|
|
|
cubic splines); and special functions: the gamma and beta families,
|
|
|
|
|
|
error functions, Bessel of integer order and, through
|
|
|
|
|
|
`BesselJRealOrder`, of any real order, Airy and Fresnel families,
|
|
|
|
|
|
exponential integrals, orthogonal polynomials, spherical harmonics,
|
|
|
|
|
|
elliptic integrals and Jacobi functions, and `Cosm1` for
|
|
|
|
|
|
`cos(x) − 1` at the arguments where the direct subtraction has no
|
|
|
|
|
|
correct significant bit.
|
|
|
|
|
|
- Quasirandom sequences for Monte Carlo integration: `HaltonPoints`
|
|
|
|
|
|
and the base-2 digital `SobolPoints` (Joe and Kuo initialisation,
|
|
|
|
|
|
40 dimensions).
|
|
|
|
|
|
- Parallel execution across every core with a fixed reduction order,
|
|
|
|
|
|
`SetNumCPU` to pin the worker count, and pooled scratch buffers
|
|
|
|
|
|
whose borrow path zeroes the window.
|
|
|
|
|
|
- The reproducible `Generator`: xoshiro256++ seeded through
|
|
|
|
|
|
splitmix64, stable across Go releases, with uniform, normal and
|
|
|
|
|
|
truncated-normal draws, shuffles and permutations; `Splitmix64` and
|
|
|
|
|
|
`Substream` are exported for callers who seed their own streams.
|
|
|
|
|
|
The distribution draws of the `stats` package take the same
|
|
|
|
|
|
generator, so a seeded program replays exactly.
|
|
|
|
|
|
|
|
|
|
|
|
**Linear algebra.**
|
|
|
|
|
|
|
|
|
|
|
|
- Dense factorisations and solves: LU (`Solve`, `Inv`, `Det`), QR
|
|
|
|
|
|
beside `RRQR`, the rank-revealing column-pivoted factorisation with
|
|
|
|
|
|
`RRQRRank` and `SolveRRQR`, whose rank-deficient path answers the
|
|
|
|
|
|
minimum-norm solution, Cholesky with rank-one update and downdate,
|
|
|
|
|
|
`LeastSquares`, the tridiagonal and cyclic-tridiagonal solvers,
|
|
|
|
|
|
`Pinverse`, `MatrixRank`, `Cond`.
|
|
|
|
|
|
- Eigenproblems in the symmetric, Hermitian-complex, general and
|
|
|
|
|
|
generalised forms; `SVD` and `SVDComplex` in real and complex
|
|
|
|
|
|
arithmetic; `SchurComplex`; the matrix functions `MatrixExp`,
|
|
|
|
|
|
`MatrixSqrt` and `MatrixLog`.
|
|
|
|
|
|
- Regularised and truncated solves for ill-posed systems:
|
|
|
|
|
|
`SolveTruncated` (rank truncation of the singular spectrum) and
|
|
|
|
|
|
`SolveTikhonov` (Tikhonov damping through the SVD).
|
|
|
|
|
|
- Sparse direct factorisations: `CSCFromCOO` and the `SparseCSC` view
|
|
|
|
|
|
with `ToCSR`/`ToCSC` conversions, `NewSparseCholesky`, the sparse
|
|
|
|
|
|
Cholesky with the elimination tree, the natural, reverse
|
|
|
|
|
|
Cuthill-McKee and minimum-degree orderings and the rank-one
|
|
|
|
|
|
`Update` and `Downdate`, and `NewSparseLU`, the Gilbert-Peierls
|
|
|
|
|
|
left-looking elimination with partial pivoting. One factorisation
|
|
|
|
|
|
solves any number of right-hand sides.
|
|
|
|
|
|
- Sparse iterative methods on the CSR view: `SpSolve` (conjugate
|
|
|
|
|
|
gradient), `SpSolveBiCGSTAB`, `SpLSQR` and `SpLSMR` for
|
|
|
|
|
|
overdetermined systems, the ILU(0) preconditioner, the Lanczos
|
|
|
|
|
|
eigensolver `SpEigen` with its general Arnoldi form, and
|
|
|
|
|
|
`SpExpApply`, the Krylov action of a matrix exponential. The
|
|
|
|
|
|
complex side mirrors it for Hermitian positive-definite and general
|
|
|
|
|
|
non-Hermitian operators, the shape Helmholtz and electromagnetics
|
|
|
|
|
|
problems need.
|
|
|
|
|
|
- Polynomial fitting, roots through the companion matrix, and the
|
|
|
|
|
|
fluent `Pipeline` chain over the element-wise surface.
|
|
|
|
|
|
|
|
|
|
|
|
**Signal and transforms.**
|
|
|
|
|
|
|
|
|
|
|
|
- Fourier transforms of any length: `FFT`/`IFFT`, `FFT2`, `FFT3`,
|
|
|
|
|
|
`FFTN`/`IFFTN`, the real-input `RFFT`/`IRFFT` pair and `FFTFreq`.
|
|
|
|
|
|
- Cosine and sine transforms (orthonormal types I to IV), the
|
|
|
|
|
|
type-1 non-uniform FFT by Gaussian gridding, and the short-time
|
|
|
|
|
|
Fourier transform with window choice.
|
|
|
|
|
|
- Spectral estimation: `WelchPSD`, `Spectrogram`, `LombScargle` for
|
|
|
|
|
|
unevenly sampled data, and the spectral Poisson solves in periodic,
|
|
|
|
|
|
Dirichlet and Neumann boundaries.
|
|
|
|
|
|
- Sample-rate conversion: `Decimate` behind a Kaiser anti-alias
|
|
|
|
|
|
filter, rational `Resample` and exact band-limited
|
|
|
|
|
|
`ResampleFourier`; the Hilbert `AnalyticSignal` and `Envelope`; and
|
|
|
|
|
|
`Chirp`, the linear frequency sweep synthesised from the
|
|
|
|
|
|
closed-form phase at each sample.
|
|
|
|
|
|
- Filter design: Butterworth, Chebyshev, inverse Chebyshev and
|
|
|
|
|
|
elliptic (Cauer) responses in low-pass, high-pass, band-pass and
|
|
|
|
|
|
band-stop forms with explicit ripple and attenuation budgets,
|
|
|
|
|
|
applied through `FilterApply` and, zero phase, through `Filtfilt`.
|
|
|
|
|
|
- Correlation and wavelets: FFT-based `Autocorrelate` and
|
|
|
|
|
|
`CrossCorrelate`, `PartialAutocorrelate`, the Haar `DWT`/`IDWT` and
|
|
|
|
|
|
the Daubechies families db2 to db8, and the analytic `CWT` (Morlet
|
|
|
|
|
|
and Mexican hat).
|
|
|
|
|
|
- Convolutions, pooling and windows: `Conv1D`/`Conv2D`/`Conv3D` with
|
|
|
|
|
|
groups and dilation, `ConvTranspose2D`, the max, average, adaptive
|
|
|
|
|
|
and global pooling families, the `MedianFilter` and `RankFilter`
|
|
|
|
|
|
families in one and two dimensions, the `SavitzkyGolay` smoother,
|
|
|
|
|
|
the `Gradient1D`/`Laplacian` stencils, and the public window
|
|
|
|
|
|
catalogue `WindowHann` through `WindowBox`, each in the symmetric
|
|
|
|
|
|
and the periodic convention.
|
|
|
|
|
|
- Time-series estimation: `KalmanFilter`, `ExtendedKalmanFilter` and
|
|
|
|
|
|
`UnscentedKalmanFilter` with the filtered states, covariance
|
|
|
|
|
|
history, innovations and the summed log likelihood;
|
|
|
|
|
|
`EstimateAR` through Yule-Walker over the Levinson recursion,
|
|
|
|
|
|
`EstimateARMA` through Hannan-Rissanen innovations, `SelectARMA`
|
|
|
|
|
|
over a lag grid by information criterion, and `ARMASpectrum` for
|
|
|
|
|
|
the theoretical one-sided spectrum.
|
|
|
|
|
|
|
|
|
|
|
|
**Differential equations and quadrature.**
|
|
|
|
|
|
|
|
|
|
|
|
- Initial value problems: `IntegrateODE` (adaptive Dormand-Prince
|
|
|
|
|
|
4(5)) with path and step recording, `IntegrateBDF2` and
|
|
|
|
|
|
`IntegrateBDFVar` (variable order 1 to 5, VODE-style step and order
|
|
|
|
|
|
adaptation) for stiff systems, `IntegrateROS4`, the L-stable
|
|
|
|
|
|
Rosenbrock-Wanner solver, `IntegrateBackwardEuler`, `IntegrateRK4`,
|
|
|
|
|
|
event detection with direction filters, `IntegrateDAE` for
|
|
|
|
|
|
semi-explicit index-1 differential-algebraic systems in mass-matrix
|
|
|
|
|
|
form, and the symplectic `IntegrateVerlet` beside `IntegrateYoshida4`
|
|
|
|
|
|
and `IntegrateMidpoint` for separable and general Hamiltonians.
|
|
|
|
|
|
- Boundary values: `IntegrateBoundary` by damped shooting with the
|
|
|
|
|
|
root finder of `optim`, and `SolveBoundaryCollocation` by
|
|
|
|
|
|
three-point Lobatto IIIA collocation on an adaptively refined mesh.
|
|
|
|
|
|
- Quadrature: adaptive Gauss-Legendre `IntegrateFunction`, fixed-node
|
|
|
|
|
|
`GaussLegendreNodes`, `IntegrateND`, globally adaptive cubature
|
|
|
|
|
|
over hyperrectangles, and `IntegrateFilon` for the oscillatory
|
|
|
|
|
|
integrals of a smooth amplitude against a cosine or sine carrier.
|
|
|
|
|
|
- Turnkey PDE evolution: the heat equation by Crank-Nicolson in one
|
|
|
|
|
|
dimension and Peaceman-Rachford ADI in two, the wave equation by
|
|
|
|
|
|
velocity Verlet in one dimension and an explicit central stencil in
|
|
|
|
|
|
two, advection by the monotone upwind and Koren-limited fluxes and
|
|
|
|
|
|
their advection-diffusion combination, CFL enforced everywhere.
|
|
|
|
|
|
- Finite elements: structured and arbitrary triangular meshes in two
|
|
|
|
|
|
dimensions and tetrahedral meshes in three, with
|
|
|
|
|
|
`SolvePoissonFEM2D` and `SolvePoissonFEM3D`, the piecewise-linear
|
|
|
|
|
|
Poisson assemblies through the sparse direct factorisation, with
|
|
|
|
|
|
Dirichlet lifting and natural Neumann boundaries.
|
|
|
|
|
|
|
|
|
|
|
|
**Statistics.**
|
|
|
|
|
|
|
|
|
|
|
|
- Distributions: CDFs, quantiles and matched random draws for the
|
|
|
|
|
|
normal, exponential, gamma, chi-square, Student t, F and their
|
|
|
|
|
|
noncentral forms, Poisson, binomial, negative binomial, Weibull,
|
|
|
|
|
|
lognormal, Pareto and Dirichlet laws, built on the incomplete gamma
|
|
|
|
|
|
and beta functions.
|
|
|
|
|
|
- Descriptives: mean-free moments, `Median`, `Quantile`, histograms
|
|
|
|
|
|
in one and two dimensions, the robust `MedianAbsoluteDeviation` and
|
|
|
|
|
|
`TrimmedMean`, and the rolling windows.
|
|
|
|
|
|
- Inference: `WelchTTest`, `KolmogorovSmirnovTest`, `MannWhitneyU`,
|
|
|
|
|
|
one-way `ANOVAOneWay`, `ChiSquareGoodnessOfFit`, `BootstrapCI`, the
|
|
|
|
|
|
rank correlations `SpearmanRho` and `KendallTau`, the
|
|
|
|
|
|
multiple-testing corrections `Bonferroni`, `Holm` and
|
|
|
|
|
|
`BenjaminiHochberg`, and the contingency table analyses
|
|
|
|
|
|
`FisherExactTest`, `ChiSquareIndependence`, `McNemarTest` and
|
|
|
|
|
|
`CramersV`.
|
|
|
|
|
|
- Models: `LinearRegression` with standard errors, t-tests, p-values,
|
|
|
|
|
|
R² and the model F-test, `WeightedLinearRegression`,
|
|
|
|
|
|
`LogisticRegression` and `PoissonRegression` on the exact
|
|
|
|
|
|
likelihood with Wald inference, `HuberRegression`,
|
|
|
|
|
|
`TheilSenRegression` and `QuantileRegression` for the robust and
|
|
|
|
|
|
distribution-free fits, lasso and elastic net over a documented
|
|
|
|
|
|
regularisation path, `PCA`, `KMeans` with k-means++ seeding,
|
|
|
|
|
|
`GaussianMixture` selected over a component grid by
|
|
|
|
|
|
`GaussianMixtureBIC`, Gaussian-process regression over
|
|
|
|
|
|
squared-exponential, Matern 3/2 and 5/2 and periodic kernels,
|
|
|
|
|
|
multivariate normal densities and draws, Gaussian `KernelDensity`,
|
|
|
|
|
|
`LinearMixedModel`, the Gaussian linear mixed model with grouped
|
|
|
|
|
|
random effects estimated by residual maximum likelihood, the
|
|
|
|
|
|
discrete hidden Markov model with its `Forward`, `Smooth` and
|
|
|
|
|
|
`Viterbi` recursions and its Baum-Welch fit, and
|
|
|
|
|
|
`HierarchicalClustering`, the agglomerative dendrogram with the
|
|
|
|
|
|
single, complete, average, centroid and Ward linkages and the
|
|
|
|
|
|
`Dendrogram` cuts into flat clusters.
|
|
|
|
|
|
|
|
|
|
|
|
**Optimisation.**
|
|
|
|
|
|
|
|
|
|
|
|
- Local: `Minimise` (Nelder-Mead simplex), `MinimiseLBFGS` with box
|
|
|
|
|
|
bounds and a projected-gradient convergence measure, and
|
|
|
|
|
|
`LevenbergMarquardt` with an optional analytic Jacobian. The
|
|
|
|
|
|
`LevenbergMarquardtFit` form reports χ², a named `FitStatus` and,
|
|
|
|
|
|
on request, the parameter covariance and per-residual weights
|
|
|
|
|
|
through `Sigma`, and the least squares and system solvers take
|
|
|
|
|
|
`ParallelJacobian`, an explicit opt-in that spreads the
|
|
|
|
|
|
finite-difference columns across workers with bit-identical
|
|
|
|
|
|
answers.
|
|
|
|
|
|
- Constrained: `MinimiseConstrained`, the augmented Lagrangian over
|
|
|
|
|
|
the box, so equality and inequality rows of `LinearConstraints`
|
|
|
|
|
|
compose with the walls, and `MinimiseNonlinearConstrained` for rows
|
|
|
|
|
|
that are arbitrary functions.
|
|
|
|
|
|
- Global: `MinimiseDifferentialEvolution` for multimodal,
|
|
|
|
|
|
derivative-free landscapes, `MinimiseCMAES` (the rank-one and
|
|
|
|
|
|
rank-mu update set, seeded through the generator) and
|
|
|
|
|
|
`MinimiseSimulatedAnnealing` (geometric cooling), all deterministic
|
|
|
|
|
|
under a seed and all honest about an exhausted budget.
|
|
|
|
|
|
- Programming: `MinimiseLinear` and `MinimiseLinearRows`, the revised
|
|
|
|
|
|
simplex with a two-phase start over standard-form and two-sided row
|
|
|
|
|
|
programs, and `MinimiseQP`, the active-set method for the strictly
|
|
|
|
|
|
convex program with the multipliers returned.
|
|
|
|
|
|
- Root finding: `FindRoot` (Brent), `FindRootBrent` for a scalar
|
|
|
|
|
|
bracketed root, `FindRootNewton` and `FindRootSystem` (damped
|
|
|
|
|
|
Newton with Armijo backtracking and an optional Broyden rank-one
|
|
|
|
|
|
update in place of repeated Jacobian builds). A solver that
|
|
|
|
|
|
exhausts its budget is refused with an error unless the
|
|
|
|
|
|
best-effort exit is requested by name.
|
|
|
|
|
|
|
|
|
|
|
|
**Automatic differentiation.**
|
|
|
|
|
|
|
|
|
|
|
|
- A reverse-mode graph over the arithmetic surface, the matrix
|
|
|
|
|
|
products (single and batched), the reductions, slicing,
|
|
|
|
|
|
concatenation, axis permutation and the Fourier transforms; every
|
|
|
|
|
|
float leaf accumulates through `Backward`.
|
|
|
|
|
|
- Complex tensors differentiate under the Wirtinger convention, the
|
|
|
|
|
|
loss stays real, and mixed real-complex graphs compose exactly
|
|
|
|
|
|
through the 2·Re narrowing.
|
|
|
|
|
|
- Second order: `Hessian` (forward-over-reverse) and
|
|
|
|
|
|
`HessianVectorProduct` in two gradient evaluations.
|
|
|
|
|
|
- On top of the graph: `MinimiseNewtonCG` (truncated-CG Newton with
|
|
|
|
|
|
an Armijo line search), `SampleHMC` (Hamiltonian Monte Carlo on any
|
|
|
|
|
|
differentiable unnormalised density) and `AdjointODE` (adjoint
|
|
|
|
|
|
sensitivities at the cost of one extra solve).
|
|
|
|
|
|
|
|
|
|
|
|
**Plotting.**
|
|
|
|
|
|
|
|
|
|
|
|
- The `plot` package: deterministic SVG line charts of computed
|
|
|
|
|
|
series. Linear axes with five ticks, one legend line per series, a
|
|
|
|
|
|
`Line` constructor straight from two rank-1 arrays through the
|
|
|
|
|
|
promotion ladder, and a byte-identical file on every run, so a
|
|
|
|
|
|
figure in a paper is compared exactly like any other computed
|
|
|
|
|
|
number.
|
|
|
|
|
|
|
|
|
|
|
|
**Distributed execution.**
|
|
|
|
|
|
|
|
|
|
|
|
- The experimental `spmd` package: explicit SPMD worlds, one program
|
|
|
|
|
|
on many ranks, over TCP between machines or in one process over
|
|
|
|
|
|
channels, launched, listened for and joined through `Launch`,
|
|
|
|
|
|
`Listen` and `Join`. The movement collectives `Broadcast`,
|
|
|
|
|
|
`Scatter`, `Gather` and `AllGather` move arrays between ranks; the
|
|
|
|
|
|
sharded reductions cut a global array on the canonical fold
|
|
|
|
|
|
partition's block boundaries and combine the partials through the
|
|
|
|
|
|
same balanced tree the single-array fold uses, so `Sum`, `Min`,
|
|
|
|
|
|
`Max`, `Any`, `All`, `Prod`, the norm and the dot families answer
|
|
|
|
|
|
the single-array reduction's exact bits at any world size, whatever
|
|
|
|
|
|
the order the frames arrive in; `Reduce` and `AllReduce` fold the
|
|
|
|
|
|
ranks' same-shaped arrays elementwise in rank index order.
|
|
|
|
|
|
`ExchangeHalos` and `ExchangeHalosOnGrid` hand each rank's boundary
|
|
|
|
|
|
slabs to the neighbours of a decomposition laid out on a row-major
|
|
|
|
|
|
process grid. Every failure or deadline fails the whole world
|
|
|
|
|
|
loudly, and no collective ever returns a partial numeric result.
|
|
|
|
|
|
|
|
|
|
|
|
**Data I/O.**
|
|
|
|
|
|
|
|
|
|
|
|
- CSV reading and writing, with or without a header row, every stored
|
|
|
|
|
|
numeric dtype written and read.
|
|
|
|
|
|
- FITS images with header cards in both directions, and binary and
|
|
|
|
|
|
ASCII table extensions.
|
|
|
|
|
|
- HDF5 in both directions: `LoadHDF5` reads the default and the
|
|
|
|
|
|
"latest" file formats (contiguous, compact and chunked storage, the
|
|
|
|
|
|
deflate, shuffle and fletcher32 filters, superblocks of versions 2
|
|
|
|
|
|
and 3 with the lookup3 checksum of each verified, group attributes
|
|
|
|
|
|
merged into each dataset), and `SaveHDF5` with `SaveHDF5Text`
|
|
|
|
|
|
writes every stored dtype at its native width, booleans through the
|
|
|
|
|
|
HDF5 enumeration convention, nested groups, attributes and optional
|
|
|
|
|
|
filters, byte-deterministic on every run. Unsupported format
|
|
|
|
|
|
features are refused by name, and cyclic or over-deep group walks
|
|
|
|
|
|
are refused.
|
|
|
|
|
|
- `LoadNetCDF`/`SaveNetCDF` for the NetCDF classic model (CDF-1 and
|
|
|
|
|
|
CDF-2), with named dimensions, text attributes and record
|
|
|
|
|
|
dimensions in both directions, and fixed-point variables landing at
|
|
|
|
|
|
their own width and sign.
|
|
|
|
|
|
- Memory mapping: `MapFloats`, `MapFloat32s` and `MapInts` open
|
|
|
|
|
|
native-endian files as read-only arrays without reading them, and
|
|
|
|
|
|
`SaveNativeFloats` writes the format they read.
|
|
|
|
|
|
|
|
|
|
|
|
**Examples.**
|
|
|
|
|
|
|
|
|
|
|
|
- Thirteen runnable workflows in `examples/`: ODE parameter fitting
|
|
|
|
|
|
by adjoint sensitivities, PSF deconvolution, HMC sampling, spectral
|
|
|
|
|
|
analysis, wavelet denoising, the exact pendulum period through
|
|
|
|
|
|
`EllipticK`, a Helmholtz system on the complex sparse solvers,
|
|
|
|
|
|
quasi-Monte Carlo integration, heat and wave evolution, regression
|
|
|
|
|
|
inference, a FITS star field, a NetCDF climate round trip and an
|
|
|
|
|
|
FFT tour.
|
|
|
|
|
|
|
|
|
|
|
|
**Project.**
|
|
|
|
|
|
|
|
|
|
|
|
- A determinism oracle pinning fixed workloads through the facade by
|
|
|
|
|
|
SHA-256 digest of the output bits, and a resource-leak harness
|
|
|
|
|
|
holding the goroutine count and live heap to baseline under
|
|
|
|
|
|
repeated heavy runs.
|
|
|
|
|
|
- Gitea Actions pipelines for test, race and release, with the
|
|
|
|
|
|
release notes extracted from this file's matching section.
|
|
|
|
|
|
- The document set: this changelog, the README, the API reference,
|
|
|
|
|
|
the architecture, the development guide, the benchmarking method,
|
|
|
|
|
|
the contribution rules and the security policy, under the MIT
|
|
|
|
|
|
licence.
|