Initializing JetGP Modules#
Overview#
This guide provides detailed instructions for initializing each JetGP module. All modules share common parameters but differ in how they structure training data and incorporate derivative information. This page walks through the initialization signature for each module and explains the purpose and format of each argument.
Common Parameters#
The following parameters appear across most or all JetGP modules:
- X_train
Training input locations.
Type:
numpy.ndarrayShape:
(num_training_points, dimension)Description: Array of input coordinates where function and derivative observations are available.
- n_order
Maximum derivative order used in training.
Type:
intDescription: Specifies the highest-order derivatives included in the model. For weighted models (WDEGP), different submodels may use different derivative orders, but
n_orderrepresents the maximum across all submodels.
- n_bases
Problem dimension.
Type:
intDescription: Number of input variables (same as
X_train.shape[1]).
der_indices Specifies which derivatives are included in the model. This argument is a nested list, where each sublist contains all derivative components of a particular order. Each derivative component is itself a list specifying the variable indices and derivative order. Examples:
1D function
der_indices = [[[[1, 1]]]] # first-order derivative
der_indices = [[[[1, 1]], [[1, 2]]]] # first- and second-order derivatives
2D function – all derivatives up to second order
der_indices = [
[ [[1, 1]], [[2, 1]] ], # first-order derivatives
[ [[1, 2]], [[1, 1], [2, 1]], [[2, 2]] ] # second-order derivatives
]
2D function – all derivatives up to third order
der_indices = [
[ [[1, 1]], [[2, 1]] ], # first-order
[ [[1, 2]], [[1, 1], [2, 1]], [[2, 2]] ], # second-order
[ [[1, 3]], [[1, 2], [2, 1]], [[1, 1], [2, 2]], [[2, 3]] ] # third-order
]
derivative_locations
Specifies which training points have each derivative defined in der_indices.
This argument is a list of lists, where each sublist contains the training point indices
for the corresponding derivative. The structure must match der_indices exactly—one entry
per derivative. Indices can be non-contiguous (e.g., [0, 2, 5, 7] is valid).
For weighted models (WDEGP), an additional outer list is added for submodels:
derivative_locations[submodel_idx][deriv_idx] = [list of point indices].
Examples:
DEGP – 1D function, first-order derivative at subset of points
der_indices = [[[[1, 1]]]]
derivative_locations = [[2, 3, 4, 5]] # 1 derivative → 1 entry
DEGP – 1D function, first and second-order at different locations
der_indices = [[[[1, 1]], [[1, 2]]]]
derivative_locations = [
[0, 1, 2, 3, 4, 5], # df/dx at all 6 points
[2, 3, 4] # d²f/dx² at middle 3 points only
]
DEGP – 2D function, different coverage per derivative
der_indices = [
[ [[1, 1]], [[2, 1]] ], # 2 first-order derivatives
[ [[1, 2]], [[1, 1], [2, 1]], [[2, 2]] ] # 3 second-order derivatives
]
derivative_locations = [
[0, 1, 2, 3, 4, 5, 6, 7, 8], # ∂f/∂x₁ at all 9 points
[0, 1, 2, 3, 4, 5, 6, 7, 8], # ∂f/∂x₂ at all 9 points
[4, 5, 7, 8], # ∂²f/∂x₁² at interior only
[4, 5, 7, 8], # ∂²f/∂x₁∂x₂ at interior only
[4, 5, 7, 8] # ∂²f/∂x₂² at interior only
]
WDEGP – 2 submodels with different derivative coverage
# Submodel 0: even-indexed points
# Submodel 1: odd-indexed points
# IMPORTANT: Derivative locations must be DISJOINT across submodels!
der_indices = [
[[[[1, 1]], [[2, 1]]]], # Submodel 0: 1st order derivatives
[[[[1, 1]], [[2, 1]]]] # Submodel 1: 1st order derivatives
]
derivative_locations = [
# Submodel 0: derivatives at even indices
[
[0, 2, 4, 6, 8], # ∂f/∂x₁ at even points
[0, 2, 4, 6, 8] # ∂f/∂x₂ at even points
],
# Submodel 1: derivatives at odd indices (DISJOINT from Submodel 0)
[
[1, 3, 5, 7, 9], # ∂f/∂x₁ at odd points
[1, 3, 5, 7, 9] # ∂f/∂x₂ at odd points
]
]
WDEGP – submodels with different derivative orders
# Submodel 0: boundary points with 1st order only
# Submodel 1: interior points with 1st and 2nd order
# IMPORTANT: Derivative locations must be DISJOINT across submodels!
der_indices = [
# Submodel 0: 1st order only
[[[[1, 1]], [[2, 1]]]],
# Submodel 1: 1st and 2nd order
[[[[1, 1]], [[2, 1]]], [[[1, 2]], [[1,1],[2,1]], [[2, 2]]]]
]
derivative_locations = [
# Submodel 0: boundary points
[
[0, 1, 2, 6, 7, 8], # 1st order at boundary
[0, 1, 2, 6, 7, 8]
],
# Submodel 1: interior points (DISJOINT from Submodel 0)
[
[3, 4, 5], # 1st order at interior
[3, 4, 5],
[3, 4, 5], # 2nd order at interior
[3, 4, 5],
[3, 4, 5]
]
]
Note
When WDEGP is configured with a single submodel, it reduces to the standard DEGP case. The only structural difference is the additional outer list for the submodel dimension. For example, these configurations are functionally equivalent:
DEGP:
derivative_locations = [
[0, 1, 2, 3, 4], # df/dx1
[0, 1, 2, 3, 4] # df/dx2
]
WDEGP (single submodel):
derivative_locations = [
[ # Submodel 0
[0, 1, 2, 3, 4], # df/dx1
[0, 1, 2, 3, 4] # df/dx2
]
]
In single-submodel mode, WDEGP also supports return_deriv=True for derivative
predictions, just like DEGP.
- normalize
Enable data normalization.
Type:
boolDefault: Typically
TrueDescription: When
True, inputs and outputs are standardized for improved numerical stability. See the normalize documentation for details.
- kernel
Kernel function selection.
Type:
strOptions:
"SE","RQ","Matern","SineExp"Description: Specifies the covariance kernel. See kernel for formulas.
- kernel_type
Kernel parameterization.
Type:
strOptions:
"isotropic","anisotropic"Description: Determines whether a single length scale (isotropic) or dimension-specific length scales (anisotropic) are used.
Module-Specific Initialization#
1. DEGP (Derivative-Enhanced Gaussian Process)#
Location: full_degp/degp.py
Signature:
from jetgp.full_degp.degp import degp
gp = degp(
X_train,
y_train,
n_order,
n_bases,
der_indices,
derivative_locations=derivative_locations,
normalize=True,
kernel="SE",
kernel_type="anisotropic"
)
Module-Specific Parameters:
- y_train
Training observations for function and derivatives.
Type:
listofnumpy.ndarrayDescription: Ordered list of training data arrays. The first element contains function values at all training points, and subsequent elements contain derivative observations. The order of derivative arrays must match
der_indices. When usingderivative_locations, each derivative array length must match the corresponding entry inderivative_locations.Example structure (all derivatives at all points):
y_train = [ y_vals.reshape(-1, 1), # shape: (num_training_points, 1) dy_dx1.reshape(-1, 1), # shape: (num_training_points, 1) dy_dx2.reshape(-1, 1), # shape: (num_training_points, 1) ]
Example structure (derivatives at subset of points):
# derivative_locations = [[2, 3, 4, 5], [2, 3, 4, 5]] y_train = [ y_vals.reshape(-1, 1), # shape: (6, 1) - all points dy_dx1[derivative_locations[0]].reshape(-1, 1), # shape: (4, 1) - points 2,3,4,5 dy_dx2[derivative_locations[1]].reshape(-1, 1), # shape: (4, 1) - points 2,3,4,5 ]
- derivative_locations
Training point indices for each derivative.
Type:
listoflistofintDescription: Specifies which training points have each derivative defined in
der_indices. The structure must matchder_indicesexactly—one entry per derivative. Indices can be non-contiguous (e.g.,[0, 2, 5, 7]is valid).Example (1D, first-order derivative at subset of points):
der_indices = [[[[1, 1]]]] derivative_locations = [[2, 3, 4, 5]] # df/dx at points 2, 3, 4, 5 only
Example (2D, different coverage per derivative):
der_indices = [[ [[1, 1]], [[2, 1]] ]] derivative_locations = [ [0, 1, 2, 3, 4, 5, 6, 7, 8], # ∂f/∂x₁ at all 9 points [4, 5, 7, 8] # ∂f/∂x₂ at interior 4 points only ]
Usage Notes:
DEGP incorporates specified derivatives at the training points defined by
derivative_locations.The first element of
y_train(function values) always has lengthnum_training_points.Each subsequent array in
y_trainmust have length matching the corresponding entry inderivative_locations.The correspondence between
y_train,der_indices, andderivative_locationsmust be exact.
2. DDEGP (Directional Derivative-Enhanced Gaussian Process)#
Location: full_ddegp/ddegp.py
Signature:
from jetgp.full_ddegp.ddegp import ddegp
gp = ddegp(
X_train,
y_train,
n_order,
der_indices,
derivative_locations,
rays,
normalize=True,
kernel="SE",
kernel_type="anisotropic"
)
Module-Specific Parameters:
- y_train
Training observations for function and directional derivatives.
Type:
listofnumpy.ndarrayDescription: Same format as
y_trainin DEGP. Contains function values followed by directional derivative observations. Order must matchder_indices.Shape correspondence:
y_train[0]has shape(n_train, 1)for function values.y_train[i+1]has shape(len(derivative_locations[i]), 1)for directioni.
- rays
Global directional derivative directions.
Type:
numpy.ndarrayShape:
(dimension, n_directions)Description: Defines the direction vectors along which derivatives are evaluated. All training points that have a given direction share the same ray vector (global directions). Direction vectors should be normalized to unit length (norm = 1) for proper interpretation.
Example for 2D problem with 3 directions:
rays = np.array([ [1.0, 0.5, 0.0], # x-components of 3 directions [0.0, 0.5, 1.0] # y-components of 3 directions ]) # Normalize each direction to unit length for i in range(rays.shape[1]): rays[:, i] = rays[:, i] / np.linalg.norm(rays[:, i])
- derivative_locations
Specifies which training points have which directional derivatives.
Type:
listoflistofint, orNoneDefault:
None(all directions at all training points)Description: Each inner list contains the training point indices where that direction’s derivative is available. Indices do NOT need to be contiguous.
Length: Must match the number of directions (columns in
rays).Correspondence:
derivative_locations[i]specifies which points have directioni, andy_train[i+1]must have lengthlen(derivative_locations[i]).Example:
# 10 training points, 3 directional derivatives # Direction 0: at all points # Direction 1: at points 0-4 only # Direction 2: at points 5-9 only derivative_locations = [ [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], # Direction 0 [0, 1, 2, 3, 4], # Direction 1 [5, 6, 7, 8, 9] # Direction 2 ] # y_train shapes: # y_train[0]: (10, 1) - function values at all points # y_train[1]: (10, 1) - direction 0 derivatives # y_train[2]: (5, 1) - direction 1 derivatives # y_train[3]: (5, 1) - direction 2 derivatives
Usage Notes:
DDEGP uses global directional derivatives: the ray vectors are the same at all points that have a given direction.
Direction vectors should be normalized to unit length for proper interpretation of directional derivatives.
Use
derivative_locationsfor selective coverage: different points can have different subsets of the available directions.When
derivative_locations=None, all directions are assumed to be available at all training points.This approach is suited for problems with known global sensitivity directions, such as fixed sensor orientations or wind directions.
3. GDDEGP (Generalized Directional Derivative-Enhanced Gaussian Process)#
Location: full_gddegp/gddegp.py
Signature:
from jetgp.full_gddegp.gddegp import gddegp
gp = gddegp(
X_train,
y_train,
n_order,
rays_list,
derivative_locations,
der_indices,
normalize=True,
kernel="SE",
kernel_type="anisotropic"
)
Module-Specific Parameters:
- y_train
Training observations for function and directional derivatives.
Type:
listofnumpy.ndarrayDescription: Same format as in DEGP. Contains function values followed by directional derivative observations in order matching
der_indices.Shape correspondence:
y_train[0]has shape(n_train, 1)for function values.y_train[i+1]has shape(len(derivative_locations[i]), 1)for directioni.
- rays_list
Point-specific directional derivative directions.
Type:
listofnumpy.ndarrayLength: Number of directional derivative types (must match length of
derivative_locations)Description: Each element
rays_list[i]is an array of shape(dimension, len(derivative_locations[i])). Unlike DDEGP where all points share the same ray vectors, GDDEGP allows each training point to have unique direction vectors. Direction vectors should be normalized to unit length (norm = 1) for proper interpretation.Correspondence:
rays_list[i][:, j]is the ray vector for training pointderivative_locations[i][j].Example for 2D problem, 12 training points, 2 directions at interior points only:
# Suppose interior_indices = [2, 3, 5, 7, 8, 10] (6 interior points) interior_indices = [2, 3, 5, 7, 8, 10] n_interior = len(interior_indices) # Build point-specific rays (e.g., gradient-aligned and perpendicular) rays_dir1 = np.zeros((2, n_interior)) # Direction 1 at interior points rays_dir2 = np.zeros((2, n_interior)) # Direction 2 at interior points for j, idx in enumerate(interior_indices): # Compute gradient direction at this point gradient = compute_gradient(X_train[idx]) grad_norm = np.linalg.norm(gradient) # Direction 1: normalized gradient rays_dir1[:, j] = gradient / grad_norm # Direction 2: perpendicular (90° rotation in 2D) rays_dir2[:, j] = np.array([-rays_dir1[1, j], rays_dir1[0, j]]) rays_list = [rays_dir1, rays_dir2]
- derivative_locations
Specifies which training points have which directional derivatives.
Type:
listoflistofintDescription: Each inner list contains the training point indices where that direction’s derivative is available. Indices do NOT need to be contiguous. Different directions can have different point sets.
Length: Must match the length of
rays_list.Correspondence:
derivative_locations[i][j]is the training point indexrays_list[i][:, j]is the ray vector for that pointy_train[i+1][j]is the derivative value at that point
Example:
# 12 training points total # Direction 1 (gradient): at interior points [2, 3, 5, 7, 8, 10] # Direction 2 (perpendicular): at same interior points derivative_locations = [ [2, 3, 5, 7, 8, 10], # Direction 1 [2, 3, 5, 7, 8, 10] # Direction 2 ] # rays_list shapes: # rays_list[0]: (2, 6) - unique ray at each of 6 interior points # rays_list[1]: (2, 6) - unique ray at each of 6 interior points # y_train shapes: # y_train[0]: (12, 1) - function values at all points # y_train[1]: (6, 1) - direction 1 derivatives at interior points # y_train[2]: (6, 1) - direction 2 derivatives at interior points
Mixed coverage example (different points have different directions):
# Direction 1: at points [0, 1, 2, 3, 4] # Direction 2: at points [3, 4, 5, 6, 7] # Points 3, 4 have BOTH directions derivative_locations = [ [0, 1, 2, 3, 4], # Direction 1 [3, 4, 5, 6, 7] # Direction 2 ] # rays_list[0]: (d, 5) - rays for points 0, 1, 2, 3, 4 # rays_list[1]: (d, 5) - rays for points 3, 4, 5, 6, 7
Usage Notes:
GDDEGP allows spatially varying directional derivatives: each point can have unique ray directions.
Direction vectors should be normalized to unit length for proper interpretation of directional derivatives.
Use
derivative_locationsto specify selective coverage: not all points need derivatives, and different points can have different subsets of directions.Key difference from DDEGP: In DDEGP,
rays.shape = (d, n_directions)and all points share the same rays. In GDDEGP,rays_list[i].shape = (d, len(derivative_locations[i]))with unique rays per point.Prediction flexibility: A key advantage of GDDEGP is that predictions can be made along any direction via
rays_predict—not just the directions used during training. The only restriction is that the derivative order must have been included in training.This formulation is useful when local sensitivity varies across the input space, such as gradient-aligned directions or adaptive directional sampling.
4. WDEGP (Weighted Derivative-Enhanced Gaussian Process)#
Location: wdegp/wdegp.py
WDEGP is a unified framework that supports three submodel types via the submodel_type parameter:
'degp'– Coordinate-aligned partial derivatives (default)'ddegp'– Global directional derivatives'gddegp'– Point-wise directional derivatives
Signature:
from jetgp.wdegp.wdegp import wdegp
gp = wdegp(
X_train,
y_train,
n_order,
n_bases,
derivative_locations,
der_indices,
submodel_type='degp', # 'degp', 'ddegp', or 'gddegp'
rays=None, # Required if submodel_type='ddegp'
rays_list=None, # Required if submodel_type='gddegp'
normalize=True,
kernel="SE",
kernel_type="anisotropic"
)
Module-Specific Parameters:
- y_train
Training data for each submodel.
Type:
listoflistofnumpy.ndarrayDescription: Outer list contains one entry per submodel. Each submodel entry is itself a list of arrays (function values followed by derivatives) similar to
y_trainin DEGP. Important: All submodels share the same function values array.Example:
# All submodels use the same function values y_vals = f(X_train).reshape(-1, 1) # shape: (n_train, 1) # Derivatives at submodel-specific points dy_sm1 = df(X_train[sm1_indices]).reshape(-1, 1) dy_sm2 = df(X_train[sm2_indices]).reshape(-1, 1) y_train = [ [y_vals, dy_sm1], # Submodel 1 data [y_vals, dy_sm2], # Submodel 2 data ]
- derivative_locations
Training point assignments for submodels.
Type:
listoflistoflistofintDescription: Specifies which training point(s) are associated with each derivative type for each submodel. The structure is nested three levels deep:
Outermost list: one entry per submodel
Middle list: one entry per derivative type in that submodel
Inner list: indices of training points that have this derivative type
Indices correspond to rows in
X_trainand can be non-contiguous.
Warning
Derivative locations must be DISJOINT across submodels.
Each training point’s derivatives can only belong to one submodel. Overlapping derivative locations will cause incorrect covariance computations.
Valid (disjoint):
derivative_locations = [
[[0, 2, 4, 6, 8], [0, 2, 4, 6, 8]], # Submodel 1: even indices
[[1, 3, 5, 7, 9], [1, 3, 5, 7, 9]] # Submodel 2: odd indices
]
Invalid (overlapping):
derivative_locations = [
[[0, 1, 2, 3, 4], [0, 1, 2, 3, 4]], # Submodel 1
[[3, 4, 5, 6, 7], [3, 4, 5, 6, 7]] # Submodel 2: indices 3, 4 overlap!
]
- der_indices
Derivative components for each submodel.
Type:
listof (nested derivative specification lists)Description: Specifies which derivatives each submodel incorporates. The structure is:
Outermost list: one entry per submodel
Each submodel entry follows the standard
der_indicesformat
Example (both submodels have same derivatives):
der_indices = [ [[[[1, 1]], [[2, 1]]]], # Submodel 1: 1st order in both dims [[[[1, 1]], [[2, 1]]]] # Submodel 2: 1st order in both dims ]
Example (submodels with different derivative orders):
der_indices = [ # Submodel 1: 1st order only [[[[1, 1]], [[2, 1]]]], # Submodel 2: 1st and 2nd order [[[[1, 1]], [[2, 1]]], [[[1, 2]], [[1,1],[2,1]], [[2, 2]]]] ]
- submodel_type
Specifies the type of GP model used for each submodel.
Type:
strOptions:
'degp'(default),'ddegp','gddegp'Description:
'degp'– Coordinate-aligned partial derivatives'ddegp'– Global directional derivatives (requiresrays)'gddegp'– Point-wise directional derivatives (requiresrays_list)
- rays
Global directional vectors (required if
submodel_type='ddegp').Type:
numpy.ndarrayShape:
(d, n_directions)Description: Global directional vectors shared by all submodels. Same format as in DDEGP.
Example:
# 2D problem with 2 global directions (x-axis and y-axis) rays = np.array([ [1.0, 0.0], # x-components [0.0, 1.0] # y-components ])
- rays_list
Point-wise directional vectors (required if
submodel_type='gddegp').Type:
listoflistofnumpy.ndarrayDescription: Point-wise directional vectors for each submodel. Structure:
rays_list[submodel_idx][direction_idx]has shape(d, n_points_in_submodel_with_direction).Example:
# Build rays for each submodel rays_list = [ [rays_dir1_sm1, rays_dir2_sm1], # Submodel 1 rays [rays_dir1_sm2, rays_dir2_sm2] # Submodel 2 rays ] # rays_dir1_sm1.shape = (d, len(derivative_locations[0][0])) # rays_dir2_sm1.shape = (d, len(derivative_locations[0][1]))
Complete Example (DEGP Submodels):
from jetgp.wdegp.wdegp import wdegp
import numpy as np
# 10 training points, alternating submodel assignment
X_train = np.linspace(0.5, 2.5, 10).reshape(-1, 1)
sm1_indices = [0, 2, 4, 6, 8] # Even indices → Submodel 1
sm2_indices = [1, 3, 5, 7, 9] # Odd indices → Submodel 2
# Function and derivative values
y_vals = f(X_train).reshape(-1, 1)
dy_sm1 = df(X_train[sm1_indices]).reshape(-1, 1)
dy_sm2 = df(X_train[sm2_indices]).reshape(-1, 1)
# WDEGP data structure
y_train = [
[y_vals, dy_sm1], # Submodel 1
[y_vals, dy_sm2] # Submodel 2
]
der_indices = [
[[[[1, 1]]]], # Submodel 1: first-order derivative
[[[[1, 1]]]] # Submodel 2: first-order derivative
]
derivative_locations = [
[sm1_indices], # Submodel 1 derivative locations
[sm2_indices] # Submodel 2 derivative locations (DISJOINT!)
]
model = wdegp(
X_train, y_train, n_order=1, n_bases=1,
derivative_locations=derivative_locations,
der_indices=der_indices,
submodel_type='degp',
normalize=True, kernel="SE", kernel_type="anisotropic"
)
Complete Example (GDDEGP Submodels):
from jetgp.wdegp.wdegp import wdegp
import numpy as np
# Partition by distance from origin
distances = np.linalg.norm(X_train, axis=1)
median_dist = np.median(distances)
sm1_indices = [i for i in range(len(X_train)) if distances[i] < median_dist]
sm2_indices = [i for i in range(len(X_train)) if distances[i] >= median_dist]
# Build point-wise rays for each submodel
def build_rays(indices):
n = len(indices)
rays_dir1 = np.zeros((2, n))
rays_dir2 = np.zeros((2, n))
for j, idx in enumerate(indices):
grad = 2 * X_train[idx] # Gradient of f = x² + y²
grad_norm = np.linalg.norm(grad)
if grad_norm > 1e-10:
rays_dir1[:, j] = grad / grad_norm
rays_dir2[:, j] = [-rays_dir1[1, j], rays_dir1[0, j]]
else:
rays_dir1[:, j] = [1, 0]
rays_dir2[:, j] = [0, 1]
return rays_dir1, rays_dir2
rays_dir1_sm1, rays_dir2_sm1 = build_rays(sm1_indices)
rays_dir1_sm2, rays_dir2_sm2 = build_rays(sm2_indices)
# rays_list[submodel_idx][direction_idx] = (d, n_points_in_submodel)
rays_list = [
[rays_dir1_sm1, rays_dir2_sm1], # Submodel 1 rays
[rays_dir1_sm2, rays_dir2_sm2] # Submodel 2 rays
]
model = wdegp(
X_train, y_train, n_order=1, n_bases=2,
derivative_locations=derivative_locations,
der_indices=der_indices,
submodel_type='gddegp',
rays_list=rays_list,
normalize=True, kernel="SE", kernel_type="anisotropic"
)
Usage Notes:
WDEGP partitions training data into submodels to reduce computational cost.
All submodels share the same function values but may incorporate different derivative information.
Derivative locations must be DISJOINT across submodels — each point’s derivatives belong to exactly one submodel.
Predictions are combined via weighted averaging across submodels.
Use
submodel_typeto select the derivative type:'degp'for coordinate-aligned partial derivatives'ddegp'for global directional derivatives (same directions at all points)'gddegp'for point-wise directional derivatives (unique directions per point)
Prediction flexibility with GDDEGP submodels: When
submodel_type='gddegp', you can predict directional derivatives along any direction viarays_predict—the restriction is on derivative order, not direction. Only orders present in all submodels can be predicted.
Best Practices#
Always enable normalization (
normalize=True) when using derivative information to ensure numerical stability.Match data order to derivative indices: The order of arrays in
y_trainmust exactly correspond to the structure defined inder_indices.Choose appropriate smoothness: When using the Matern kernel with derivative-enhanced GPs, set
smoothness_parameter ≥ 2 × n_orderto ensure the kernel is sufficiently smooth.WDEGP submodel design:
Balance the number of submodels against computational cost
Ensure derivative locations are DISJOINT across submodels
Choose
submodel_typebased on your derivative data structure
Direction vector normalization: Direction vectors in
raysandrays_listshould be normalized to unit length (norm = 1) for proper interpretation of directional derivatives.Anisotropic kernels: Use
kernel_type="anisotropic"when input dimensions have different characteristic length scales or when derivative information reveals directional dependencies.Leverage GDDEGP prediction flexibility: When using GDDEGP or WDEGP with GDDEGP submodels, you can predict directional derivatives along any direction—not limited to training directions.
Summary#
JetGP provides four module variants for incorporating derivative information into Gaussian Process models:
DEGP: Coordinate-aligned partial derivatives at flexible point locations
DDEGP: Global directional derivatives (same directions at all points)
GDDEGP: Point-specific directional derivatives with prediction flexibility
WDEGP: Unified weighted submodel framework supporting all three derivative types
Each module follows a consistent initialization pattern while accommodating different use cases for derivative-enhanced modeling. Choose the module based on your data availability, computational constraints, and the spatial characteristics of your problem.
For detailed information on making predictions with these models, see predictions.