Release notes#
1.2.1 (2026-09-14)#
gpyreg.GP.quad()returns the correct integral variance when the training noise is heteroskedastic, for example with user-provided observation variances. The variance previously collapsed to machine epsilon in that case.quadalso handlesSquaredExponentialIsotropicin more than one dimension, where it previously read the hyperparameters in the wrong order. Results with homoskedastic noise, and with the isotropic kernel in one dimension, are unchanged.gpyreg.GP.update()applies replacement hyperparameters passed together with a single new observation. The rank-one shortcut is taken only when the hyperparameters stay in place; it previously discarded the new values. Calls withouthypare unchanged.The rank-one update of a single appended observation extends the Cholesky factor with the noise scale the factor was built with, stored as the
gpyreg.gaussian_process.Posteriorattributesl. It is therefore exact for heteroskedastic noise, where it previously assumed the new point’s noise equal to the smallest training noise, and it works with output-dependent noise, which previously raised an error. The shortcut now also applies whens2_newis supplied, which previously triggered a full recomputation; the result is the same up to floating-point rounding. The homoskedastic case is unchanged.gpyreg.GP.update()keeps the stored user-provided noise aligned with the training inputs. Points added withouts2_newto a GP that storess2, or earlier points of a GP that receivess2_newfor the first time, get a variance of zero. Previouslys2could end up with fewer rows thanX, which made the next posterior computation fail, and in the second case a single new variance was silently applied to every training point.gpyreg.slice_sample.SliceSampleraccepts bounds and widths given as lists. A coordinate with equal list bounds is now recognized as fixed; previously it went undetected and list widths raised an error. The sampler also logs its no-violation message when the diagnostics report success, which previously never happened.gpyreg.slice_sample.SliceSamplerwithstep_out=Truein more than one dimension evaluates the stepping-out brackets on the current coordinate line. Previously the bracket ends of a later coordinate carried an earlier coordinate’s shrunk bracket edge. Sampling with the defaultstep_out=Falseis unchanged.The convergence diagnostics of
gpyreg.slice_sample.SliceSamplerreport a positive, bounded effective sample size, following Geyer’s initial positive sequence with the floor used by Stan and ArviZ; it could previously be negative. A coordinate fixed byLB == UBis excluded from the checks, and undefined diagnostics or fewer than eight recorded samples giveexit_flag-3 instead of reporting success.Rand the effective sample size are unchanged for chains that mix.The documentation gains a section on BLAS threading, and the attributes of
gpyreg.gaussian_process.Posteriorare documented.
1.2.0 (2026-09-13)#
gpyreg.GP.predict()accepts the keyword-only optionreturn_cross_covariance=True. It appends a tuple containing the latent training-to-prediction kernel matrix for each hyperparameter sample. Downstream calculations can reuse these matrices instead of computing them again. Ordinary calls retain their existing return values.Kernel matrices remain separate when predictions are averaged across hyperparameter samples. They exclude observation noise and are unconditioned kernels, rather than posterior predictive covariances. Prior-only GPs return
Nonefor each sample. See Gaussian processes for examples, shapes and memory considerations.The prediction reference corrects the documented default of
add_noisetoFalseand the averaged-output shape to(M, 1). These are documentation corrections; the corresponding behavior is unchanged.
1.1.0 (2026-09-05)#
gpyreg.GP.fit(),gpyreg.GP.random_function(),gpyreg.slice_sample.SliceSamplerandf_min_fillacceptrng=. Pass a NumPy generator to share a stream with the caller, or a seed to create a generator. The defaultrng=Nonecontinues to use NumPy’s global stream controlled bynp.random.seed. See Random number generation.Prediction and hyperparameter fitting have lower computational overhead, including batched evaluation of bundled mean functions and reuse of a factorization when only mean hyperparameters change during fitting. Custom mean and covariance implementations retain their supported paths.
gpyreg.GP.log_likelihood()andgpyreg.GP.log_posterior()correctly return(value, gradient)whencompute_grad=True; these calls previously raisedTypeError.Slice samplers using the default stream remain copyable and picklable. Their saved state does not capture NumPy’s global random state. Samplers with an explicit generator preserve its state when copied or pickled; older sampler saves resume using the global stream.