1. Simple extrapolation
Interpolations.jl takes several forms. The simplest, is when the extrapolation behavior can be described with the following pseudo-code:
if (the coordinate is outside the domain) then do something that is * well defined without looking at the data set * decides the outcome (error/return value) of the indexing operation end proceed to inbounds interpolation
An example of this interpolation behavior is
ExtrapError, which simply throws a bounds error if the coordinate is outside the domain.
Interpolations.jl could support, for example, the following variants:
ExtrapError: Throws a
BoundsError, just like
convert(T, NaN), where
ExtrapNull: Returns a value-less
2. Index transformation extrapolation
The next form is index transformation, which can be described as
if (the coordinate is outside the domain) then calculate an index that is inside the domain, which gives the extrapolated value end proceed to inbounds interpolation (using the transformed index)
An example here is
ExtrapPeriodic, which transforms the coordinate index to one which is inside the domain by means of modulo calculations. Another example is
ExtrapConstant, which clamps out-of-bounds coordinates to their nearest inbounds data point.
For some of these, extra care needs to be taken in higher dimensions, when deciding what happens in the "outside corners":
| | what happens here? | | ----------+---------------+-------- | | | the domain | | | ----------+---------------+-------- | | | | ...and here?