class tinygp.kernels.stationary.Stationary(scale: tinygp.helpers.JAXArray = <factory>, distance: tinygp.kernels.distance.Distance = L1Distance())[source]#

Bases: tinygp.kernels.base.Kernel

A stationary kernel is defined with respect to a distance metric

Note that a stationary kernel is always isotropic. If you need more non-isotropic length scales, wrap your kernel in a transform using tinygp.transforms.Linear or tinygp.transforms.Cholesky.

  • scale – The length scale, in the same units as distance for the kernel. This must be a scalar.

  • distance – An object that implements distance and squared_distance methods. Typically a subclass of tinygp.kernels.stationary.Distance. Each stationary kernel also has a default_distance property that is used when distance isn’t provided.

abstract evaluate(X1: tinygp.helpers.JAXArray, X2: tinygp.helpers.JAXArray) tinygp.helpers.JAXArray#

Evaluate the kernel at a pair of input coordinates

This should be overridden be subclasses to return the kernel-specific value. Two things to note:

  1. Users shouldn’t generally call Kernel.evaluate(). Instead, always “call” the kernel instance directly; for example, you can evaluate the Matern-3/2 kernel using Matern32(1.5)(x1, x2), for arrays of input coordinates x1 and x2.

  2. When implementing a custom kernel, this method should treat X1 and X2 as single datapoints. In other words, these inputs will typically either be scalars of have shape n_dim, where n_dim is the number of input dimensions, rather than n_data or (n_data, n_dim), and you should let the Kernel vmap magic handle all the broadcasting for you.

evaluate_diag(X: tinygp.helpers.JAXArray) tinygp.helpers.JAXArray#

Evaluate the kernel on its diagonal

The default implementation simply calls Kernel.evaluate() with X as both arguments, but subclasses can use this to make diagonal calcuations more efficient.