Solvers API Reference๏
ODE, PDE, and SDE solvers.
ODE Solvers๏
Fractional Ordinary Differential Equation Solvers
This module provides comprehensive solvers for fractional ODEs including various numerical methods, adaptive step size control, and error estimation.
Performance Note: - Uses FFT-based convolution for O(N log N) history summation instead of O(Nยฒ) - Intelligent backend selection for optimal performance (v2.1.0)
- hpfracc.solvers.ode_solvers._get_gamma_function()[source]
Get gamma function through adapter system.
- hpfracc.solvers.ode_solvers._get_intelligent_selector()[source]
Get intelligent backend selector instance.
- hpfracc.solvers.ode_solvers._select_fft_backend(data_size)[source]
Select optimal FFT backend based on data size.
- Parameters:
data_size (int) โ Number of elements to process
- Returns:
โnumpyโ, โjaxโ, or โscipyโ
- Return type:
Backend name
- hpfracc.solvers.ode_solvers._fft_convolution(coeffs, values, axis=0)[source]
Fast convolution using FFT for O(N log N) performance with intelligent backend selection.
This replaces the O(Nยฒ) direct summation loop for history terms in fractional ODEs. Now uses intelligent backend selection to choose optimal FFT implementation.
- Parameters:
- Returns:
Convolution result (same shape as values)
- Return type:
- Mathematical basis:
conv(C, Y) = ifft(fft(C) * fft(Y))
- Performance:
Direct summation: O(Nยฒ)
FFT-based: O(N log N)
Backend selection: < 0.001 ms overhead
- hpfracc.solvers.ode_solvers._fast_history_sum(coeffs, f_hist, reverse=True, verbose=False)[source]
Compute weighted sum of history using FFT-based convolution.
- This is the key optimization for fractional ODE solvers, replacing:
sum_{j=0}^{n} coeffs[n-j] * f_hist[j]
with an O(N log N) FFT-based approach instead of O(Nยฒ) direct summation.
- Parameters:
- Returns:
Weighted sum result (scalar or array of length m)
- Return type:
- class hpfracc.solvers.ode_solvers.FixedStepODESolver(derivative_type='caputo', method='predictor_corrector', adaptive=True, tol=1e-06, max_iter=1000, *, fractional_order=None, rtol=None, atol=None, order=1, min_h=None, max_h=None, min_step=None, max_step=None)[source]
Bases:
objectBase class for fixed-step fractional ODE solvers.
Provides common functionality for solving fractional ordinary differential equations of the form:
D^ฮฑ y(t) = f(t, y(t))
where D^ฮฑ is a fractional derivative operator.
- Parameters:
- __init__(derivative_type='caputo', method='predictor_corrector', adaptive=True, tol=1e-06, max_iter=1000, *, fractional_order=None, rtol=None, atol=None, order=1, min_h=None, max_h=None, min_step=None, max_step=None)[source]
Initialize fractional ODE solver.
- Parameters:
derivative_type (str) โ Type of fractional derivative (โcaputoโ, โriemann_liouvilleโ, โgrunwald_letnikovโ)
method (str) โ Numerical method (โpredictor_correctorโ, โadams_bashforthโ, โrunge_kuttaโ)
adaptive (bool) โ Use adaptive step size control
tol (float) โ Tolerance for convergence
max_iter (int) โ Maximum number of iterations
fractional_order (float | FractionalOrder | None)
rtol (float | None)
atol (float | None)
order (int)
min_h (float | None)
max_h (float | None)
min_step (float | None)
max_step (float | None)
- _validate_alpha(alpha)[source]
Validate the fractional order.
- Parameters:
alpha (float | FractionalOrder)
- solve(f, t_span, y0, alpha, h=None, **kwargs)[source]
Solve fractional ODE.
- Parameters:
- Returns:
Tuple of (t_values, y_values)
- Return type:
- _solve_predictor_corrector(f, t0, tf, y0, alpha, h, **kwargs)[source]
Solve using Adams-Bashforth-Moulton predictor-corrector for Caputo fractional ODEs.
Based on the Volterra integral formulation: y(t) = y_0 + (1/ฮ(ฮฑ)) โซ_0^t (t-ฯ)^(ฮฑ-1) f(ฯ, y(ฯ)) dฯ
Reference: Diethelm, K. (2010). The Analysis of Fractional Differential Equations.
- _solve_adams_bashforth(f, t0, tf, y0, alpha, h, **kwargs)[source]
Solve using Adams-Bashforth method.
- Parameters:
- Returns:
Tuple of (t_values, y_values)
- Return type:
- _solve_runge_kutta(f, t0, tf, y0, alpha, h, **kwargs)[source]
Solve using fractional Runge-Kutta method.
- Parameters:
- Returns:
Tuple of (t_values, y_values)
- Return type:
- _solve_euler(f, t0, tf, y0, alpha, h, **kwargs)[source]
Solve using fractional Euler method.
- Parameters:
- Returns:
Tuple of (t_values, y_values)
- Return type:
- _euler_step(f, t_values, y_values, n, alpha, h)[source]
Minimal fractional Euler update for 0<ฮฑโค1.
y_n = y_{n-1} + h^ฮฑ / ฮ(ฮฑ+1) * f(t_{n-1}, y_{n-1})
- _adams_bashforth_step(f, t_values, y_values, n, alpha, coeffs, h)[source]
Compute one fractional Adams-Bashforth-like explicit step.
Uses available history with precomputed coefficients. For the first step, it falls back to Euler behavior.
- _runge_kutta_step(f, t_values, y_values, n, alpha, h)[source]
Compute one fractional RK2-style step.
Uses midpoint evaluation with fractional scaling factor.
- _compute_fractional_coefficients(alpha, N)[source]
Compute fractional derivative coefficients.
- Parameters:
alpha (float | FractionalOrder) โ Fractional order
N (int) โ Number of time steps
- Returns:
Array of coefficients
- Return type:
- hpfracc.solvers.ode_solvers.solve_fractional_ode(f, t_span, y0, alpha, derivative_type='caputo', method='predictor_corrector', adaptive=False, h=None, **kwargs)[source]
Solve fractional ODE.
- hpfracc.solvers.ode_solvers.solve_fractional_system(f, t_span, y0, alpha, derivative_type='caputo', method='predictor_corrector', **kwargs)[source]
Solve system of fractional ODEs.
- Parameters:
f (Callable) โ Right-hand side function f(t, y)
y0 (ndarray) โ Initial conditions
alpha (float | ndarray) โ Fractional order (scalar only). Per-component orders are not implemented.
derivative_type (str) โ Type of fractional derivative
method (str) โ Numerical method
**kwargs โ Additional solver parameters
- Returns:
Tuple of (t_values, y_values)
- Return type:
PDE Solvers๏
Fractional Partial Differential Equation Solvers
This module provides comprehensive solvers for fractional PDEs including finite difference methods, spectral methods, and adaptive mesh refinement.
Performance Note (v2.1.0): - Intelligent backend selection for sparse matrix operations - Optimal array operations based on problem size - GrรผnwaldโLetnikov interior spatial operator is assembled directly in CSR (no dense fill)
- hpfracc.solvers.pde_solvers._get_intelligent_selector()[source]
Get intelligent backend selector instance for PDE solvers.
- hpfracc.solvers.pde_solvers._select_array_backend(data_size, operation_type='element_wise')[source]
Select optimal backend for array operations in PDE solving.
- hpfracc.solvers.pde_solvers._select_fft_backend(data_size)[source]
Select optimal FFT backend.
- hpfracc.solvers.pde_solvers._fft_convolution(coeffs, values, axis=0)[source]
Fast convolution with backend selection.
- hpfracc.solvers.pde_solvers._grunwald_letnikov_coeffs_pde(order, n_points)[source]
GrรผnwaldโLetnikov coefficients c_k for spatial discretization (recursive form).
- hpfracc.solvers.pde_solvers._grunwald_letnikov_interior_sparse(nx, beta, dx)[source]
Sparse interior GrรผnwaldโLetnikov spatial operator (Toeplitz lower triangular).
Interior unknowns correspond to physical indices 1 .. nx-2; entry (i, j) uses offset k = i - j >= 0 with GL coefficient c_k, scaled by dx**(-beta).
- Parameters:
nx (int)
beta (float | FractionalOrder)
dx (float)
- Return type:
- class hpfracc.solvers.pde_solvers.FractionalPDESolver(pde_type='diffusion', method='finite_difference', spatial_order=2, temporal_order=1, adaptive=False, *, fractional_order=None, boundary_conditions=None)[source]
Bases:
objectBase class for fractional PDE solvers.
Provides common functionality for solving fractional partial differential equations of various types.
- Parameters:
- __init__(pde_type='diffusion', method='finite_difference', spatial_order=2, temporal_order=1, adaptive=False, *, fractional_order=None, boundary_conditions=None)[source]
Initialize fractional PDE solver.
- Parameters:
pde_type (str) โ Type of PDE (โdiffusionโ, โadvectionโ, โreaction_diffusionโ)
method (str) โ Numerical method (โfinite_differenceโ, โspectralโ, โfinite_elementโ)
spatial_order (int) โ Order of spatial discretization
temporal_order (int) โ Order of temporal discretization
adaptive (bool) โ Use adaptive mesh refinement
fractional_order (float | FractionalOrder | None)
boundary_conditions (str | None)
- _validate_orders(alpha, beta)[source]
Validate fractional orders for PDE solver.
- _grunwald_letnikov_coeffs(order, n_points)[source]
Compute GrรผnwaldโLetnikov coefficients (shared by FD spatial operators).
- _get_spatial_operator(nx, beta, dx)[source]
Interior GrรผnwaldโLetnikov operator as CSR (no dense fill).
- Parameters:
nx (int)
beta (float | FractionalOrder)
dx (float)
- Return type:
- _build_spatial_matrix(nx, beta, diffusion_coeff, dx, dt, alpha, side='lhs')[source]
Build spatial discretization matrix for interior unknowns (sparse assembly).
Combines identity and scaled GrรผnwaldโLetnikov operator without forming a dense intermediate.
- Parameters:
nx (int)
beta (float | FractionalOrder)
diffusion_coeff (float)
dx (float)
dt (float)
alpha (float | FractionalOrder)
side (str)
- Return type:
- solve(t_span, x_span, initial_condition, boundary_conditions, alpha, beta, **kwargs)[source]
Solve the fractional PDE.
- class hpfracc.solvers.pde_solvers.FractionalDiffusionSolver(method='finite_difference', spatial_order=2, temporal_order=1, derivative_type='caputo')[source]
Bases:
FractionalPDESolverSolver for fractional diffusion equations.
Solves equations of the form: โ^ฮฑ u/โt^ฮฑ = D โ^ฮฒ u/โx^ฮฒ + f(x, t, u)
where ฮฑ and ฮฒ are fractional orders.
- __init__(method='finite_difference', spatial_order=2, temporal_order=1, derivative_type='caputo')[source]
Initialize fractional diffusion solver.
- solve(x_span, t_span, initial_condition, boundary_conditions, alpha, beta, diffusion_coeff=1.0, source_term=None, nx=100, nt=100, **kwargs)[source]
Solve fractional diffusion equation.
- Parameters:
initial_condition (Callable) โ Initial condition u(x, 0)
boundary_conditions (Tuple[Callable, Callable]) โ Boundary conditions (left_bc, right_bc)
alpha (float | FractionalOrder) โ Temporal fractional order
beta (float | FractionalOrder) โ Spatial fractional order
diffusion_coeff (float) โ Diffusion coefficient
source_term (Callable | None) โ Source term f(x, t, u)
nx (int) โ Number of spatial grid points
nt (int) โ Number of temporal grid points
**kwargs โ Additional solver parameters
- Returns:
Tuple of (t_values, x_values, solution)
- Return type:
- _solve_spatial_step(solution, n, x_values, t_values, alpha, beta, source_term, nx, nt, pde_params)[source]
Solve spatial problem at current time step.
- Parameters:
solution (ndarray) โ Solution array
n (int) โ Current time step
x_values (ndarray) โ Spatial grid
t_values (ndarray) โ Time grid
alpha (float | FractionalOrder) โ Temporal fractional order
beta (float | FractionalOrder) โ Spatial fractional order
source_term (Callable | None) โ Source term
nx (int) โ Number of spatial grid points
nt (int) โ Number of temporal grid points
pde_params (dict) โ Dictionary of parameters (diffusion_coeff, dx, dt)
- Returns:
Solution at interior points
- Return type:
- _finite_difference_step(solution, n, x_values, t_values, alpha, beta, source_term, nx, nt, pde_params)[source]
Finite difference step.
- Parameters:
solution (ndarray) โ Solution array
n (int) โ Current time step
x_values (ndarray) โ Spatial grid
t_values (ndarray) โ Time grid
alpha (float | FractionalOrder) โ Temporal fractional order
beta (float | FractionalOrder) โ Spatial fractional order
source_term (Callable | None) โ Source term
nx (int) โ Number of spatial grid points
nt (int) โ Number of temporal grid points
pde_params (dict) โ Dictionary of parameters (diffusion_coeff, dx, dt)
- Returns:
Solution at interior points
- Return type:
- _spectral_step(solution, n, x_values, t_values, alpha, beta, source_term, nx, nt, pde_params)[source]
Correct, efficient, diagonal spectral solve for periodic BCs.
- _compute_temporal_derivative(solution, n, alpha, dt, **kwargs)[source]
Computes the RHS vector of the system, based on previous time steps.
- class hpfracc.solvers.pde_solvers.FractionalAdvectionSolver(method='finite_difference', spatial_order=2, temporal_order=1, derivative_type='caputo')[source]
Bases:
FractionalPDESolverSolver for fractional advection-diffusion equations.
- Solves equations of the form:
D_t^ฮฑ u = v * D_x^ฮฒ u
Currently, only integer orders (alpha=1, beta=1) are supported.
- __init__(method='finite_difference', spatial_order=2, temporal_order=1, derivative_type='caputo')[source]
Initialize fractional PDE solver.
- Parameters:
pde_type โ Type of PDE (โdiffusionโ, โadvectionโ, โreaction_diffusionโ)
method (str) โ Numerical method (โfinite_differenceโ, โspectralโ, โfinite_elementโ)
spatial_order (int) โ Order of spatial discretization
temporal_order (int) โ Order of temporal discretization
adaptive โ Use adaptive mesh refinement
derivative_type (str)
- solve(t_span, x_span, initial_condition, boundary_conditions, alpha, beta, **kwargs)[source]
Solve the fractional advection equation.
- class hpfracc.solvers.pde_solvers.FractionalReactionDiffusionSolver(method='finite_difference', spatial_order=2, temporal_order=1, derivative_type='caputo')[source]
Bases:
FractionalPDESolverSolver for fractional reaction-diffusion equations.
Solves equations of the form: โ^ฮฑ u/โt^ฮฑ = D โ^ฮฒ u/โx^ฮฒ + R(u) + f(x, t, u)
where ฮฑ and ฮฒ are fractional orders and R(u) is the reaction term.
- __init__(method='finite_difference', spatial_order=2, temporal_order=1, derivative_type='caputo')[source]
Initialize fractional reaction-diffusion solver.
- solve(x_span, t_span, initial_condition, boundary_conditions, alpha, beta, diffusion_coeff=1.0, reaction_term=None, source_term=None, nx=100, nt=100, **kwargs)[source]
Solve fractional reaction-diffusion equation.
- Parameters:
initial_condition (Callable) โ Initial condition u(x, 0)
boundary_conditions (Tuple[Callable, Callable]) โ Boundary conditions (left_bc, right_bc)
alpha (float | FractionalOrder) โ Temporal fractional order
beta (float | FractionalOrder) โ Spatial fractional order
diffusion_coeff (float) โ Diffusion coefficient
reaction_term (Callable | None) โ Reaction term R(u)
source_term (Callable | None) โ Source term f(x, t, u)
nx (int) โ Number of spatial grid points
nt (int) โ Number of temporal grid points
**kwargs โ Additional solver parameters
- Returns:
Tuple of (t_values, x_values, solution)
- Return type:
- hpfracc.solvers.pde_solvers.solve_fractional_diffusion(x_span, t_span, initial_condition, boundary_conditions, alpha, beta, diffusion_coeff=1.0, source_term=None, method='finite_difference', nx=100, nt=100, **kwargs)[source]
Solve fractional diffusion equation.
- Parameters:
initial_condition (Callable) โ Initial condition u(x, 0)
boundary_conditions (Tuple[Callable, Callable]) โ Boundary conditions (left_bc, right_bc)
alpha (float | FractionalOrder) โ Temporal fractional order
beta (float | FractionalOrder) โ Spatial fractional order
diffusion_coeff (float) โ Diffusion coefficient
source_term (Callable | None) โ Source term f(x, t, u)
method (str) โ Numerical method
nx (int) โ Number of spatial grid points
nt (int) โ Number of temporal grid points
**kwargs โ Additional solver parameters
- Returns:
Tuple of (t_values, x_values, solution)
- Return type:
- hpfracc.solvers.pde_solvers.solve_fractional_advection(x_span, t_span, initial_condition, boundary_conditions, alpha, beta, velocity=1.0, source_term=None, method='finite_difference', nx=100, nt=100, **kwargs)[source]
Solve fractional advection equation.
- Parameters:
initial_condition (Callable) โ Initial condition u(x, 0)
boundary_conditions (Tuple[Callable, Callable]) โ Boundary conditions (left_bc, right_bc)
alpha (float | FractionalOrder) โ Temporal fractional order
beta (float | FractionalOrder) โ Spatial fractional order
velocity (float) โ Advection velocity
source_term (Callable | None) โ Source term f(x, t, u)
method (str) โ Numerical method
nx (int) โ Number of spatial grid points
nt (int) โ Number of temporal grid points
**kwargs โ Additional solver parameters
- Returns:
Tuple of (t_values, x_values, solution)
- Return type:
- hpfracc.solvers.pde_solvers.solve_fractional_reaction_diffusion(x_span, t_span, initial_condition, boundary_conditions, alpha, beta, diffusion_coeff=1.0, reaction_term=None, source_term=None, method='finite_difference', nx=100, nt=100, **kwargs)[source]
Solve fractional reaction-diffusion equation.
- Parameters:
initial_condition (Callable) โ Initial condition u(x, 0)
boundary_conditions (Tuple[Callable, Callable]) โ Boundary conditions (left_bc, right_bc)
alpha (float | FractionalOrder) โ Temporal fractional order
beta (float | FractionalOrder) โ Spatial fractional order
diffusion_coeff (float) โ Diffusion coefficient
reaction_term (Callable | None) โ Reaction term R(u)
source_term (Callable | None) โ Source term f(x, t, u)
method (str) โ Numerical method
nx (int) โ Number of spatial grid points
nt (int) โ Number of temporal grid points
**kwargs โ Additional solver parameters
- Returns:
Tuple of (t_values, x_values, solution)
- Return type:
- hpfracc.solvers.pde_solvers.solve_fractional_pde(x_span, t_span, initial_condition, boundary_conditions, alpha, beta, equation_type='diffusion', **kwargs)[source]
Generic solver for fractional PDEs.
- Parameters:
initial_condition (Callable) โ Initial condition u(x, 0)
boundary_conditions (Tuple[Callable, Callable]) โ Boundary conditions (left_bc, right_bc)
alpha (float | FractionalOrder) โ Temporal fractional order
beta (float | FractionalOrder) โ Spatial fractional order
equation_type (str) โ Type of PDE (โdiffusionโ, โadvectionโ, โreaction_diffusionโ)
**kwargs โ Additional solver parameters
- Returns:
Tuple of (t_values, x_values, solution)
- Return type:
SDE Solvers๏
Fractional Stochastic Differential Equation Solvers
This module provides comprehensive solvers for fractional SDEs including various numerical methods, adaptive step size control, and error estimation.
Performance Note: - Uses FFT-based convolution for O(N log N) history summation instead of O(Nยฒ) - Intelligent backend selection for optimal performance - Multi-backend support (PyTorch, JAX, NumPy/Numba)
- hpfracc.solvers.sde_solvers._get_gamma_function()[source]
Get gamma function through adapter system.
- hpfracc.solvers.sde_solvers._get_intelligent_selector()[source]
Get intelligent backend selector instance.
- hpfracc.solvers.sde_solvers._fft_convolution(coeffs, values, axis=0)[source]
Fast convolution using FFT for O(N log N) performance.
- class hpfracc.solvers.sde_solvers.SDESolution(t, y, fractional_order, method, drift_func, diffusion_func, metadata=None)[source]
Bases:
objectSolution object for SDE solvers.
- Parameters:
- t: ndarray
- y: ndarray
- fractional_order: float | FractionalOrder
- method: str
- drift_func: Callable
- diffusion_func: Callable
- class hpfracc.solvers.sde_solvers.FractionalSDESolver(fractional_order, definition='caputo', adaptive=False, rtol=1e-05, atol=1e-08)[source]
Bases:
ABCBase class for fractional SDE solvers.
- A fractional SDE takes the form:
D^ฮฑ X(t) = f(t, X(t)) dt + g(t, X(t)) dW(t)
- where:
ฮฑ is the fractional order
f is the drift function
g is the diffusion function
W(t) is a Wiener process
- Parameters:
- __init__(fractional_order, definition='caputo', adaptive=False, rtol=1e-05, atol=1e-08)[source]
Initialize fractional SDE solver.
- Parameters:
fractional_order (float | FractionalOrder) โ Fractional order (0 < ฮฑ < 2)
definition (str) โ Type of fractional derivative (โcaputoโ or โriemann_liouvilleโ)
adaptive (bool) โ Use adaptive step size
rtol (float) โ Relative tolerance for adaptive stepping
atol (float) โ Absolute tolerance for adaptive stepping
- abstractmethod solve(drift, diffusion, x0, t_span, noise_model=None, **kwargs)[source]
Solve fractional SDE.
- Parameters:
drift (Callable[[float, ndarray], ndarray]) โ Drift function f(t, x) -> R^d
diffusion (Callable[[float, ndarray], ndarray]) โ Diffusion function g(t, x) -> R^(d x m) where m is dimension of noise
x0 (ndarray) โ Initial condition
**kwargs โ Additional solver parameters
noise_model (NoiseModel | None)
- Returns:
SDESolution object containing trajectory
- Return type:
SDESolution
- class hpfracc.solvers.sde_solvers.FastHistoryConvolution(alpha, num_steps, dim)[source]
Bases:
objectHelper class for efficient history convolution in fractional SDE solvers.
Features: - Pre-allocated arrays to avoid list overhead (O(N) -> O(1) allocation) - Dynamic switching between direct dot product (small N) and FFT (large N) - JAX/SciPy/NumPy backend support via _fft_convolution
- hpfracc.solvers.sde_solvers._milstein_fd_eps(x, base=1e-06)[source]
Scale-aware finite-difference step for โg/โx.
- hpfracc.solvers.sde_solvers._milstein_correction_diagonal(diffusion, t, x, g_vec, dW, dt)[source]
Diagonal / independent-noise Milstein correction:
0.5 * sum_i g_i(t,x) * (โg_i/โx_i) * (dW_i^2 - dt)
with โg_i/โx_i approximated by central differences on x_i.
- hpfracc.solvers.sde_solvers._milstein_correction_single_wiener(diffusion, t, x, g_vec, dW, dt)[source]
Milstein correction for a single driving Wiener process (m=1, dW scalar):
0.5 * (dW^2 - dt) * sum_j g_j * (โg_k/โx_j) for each component k.
Uses central differences in the state directions x_j.
- class hpfracc.solvers.sde_solvers.FractionalEulerMaruyama(*args, **kwargs)[source]
Bases:
FractionalSDESolverFractional Euler-Maruyama method for solving fractional SDEs.
This is a first-order strong convergence method.
- __init__(*args, **kwargs)[source]
Initialize fractional SDE solver.
- Parameters:
fractional_order โ Fractional order (0 < ฮฑ < 2)
definition โ Type of fractional derivative (โcaputoโ or โriemann_liouvilleโ)
adaptive โ Use adaptive step size
rtol โ Relative tolerance for adaptive stepping
atol โ Absolute tolerance for adaptive stepping
- solve(drift, diffusion, x0, t_span, num_steps=100, seed=None, noise_model=None, **kwargs)[source]
Solve fractional SDE using Euler-Maruyama method.
- Parameters:
drift (Callable) โ Drift function f(t, x)
diffusion (Callable) โ Diffusion function g(t, x)
x0 (ndarray) โ Initial condition
num_steps (int) โ Number of time steps
seed (int | None) โ Random seed for Wiener process
noise_model (NoiseModel | None) โ Optional noise model for non-Brownian noise
- Returns:
SDESolution object
- Return type:
SDESolution
- class hpfracc.solvers.sde_solvers.FractionalMilstein(*args, **kwargs)[source]
Bases:
FractionalSDESolverFractional SDE integrator with the same history-convolution path as EulerโMaruyama, plus a Milstein correction where supported.
The correction uses the standard form
0.5 * (dW^2 - dt)multiplied by terms involving spatial derivatives of the diffusion, approximated by central finite differences.Supported
Diagonal noise:
g(t,x)returns a vector of lengthd; one Brownian increment per component (same layout as EulerโMaruyama).Single Wiener process:
g(t,x)returns shape(d, 1); scalardW.
Not implemented
General matrix diffusion with
m > 1independent Wiener processes (Levy area / non-commutative terms not included). Use diagonal or scalar noise, or extend the solver.
- __init__(*args, **kwargs)[source]
Initialize fractional SDE solver.
- Parameters:
fractional_order โ Fractional order (0 < ฮฑ < 2)
definition โ Type of fractional derivative (โcaputoโ or โriemann_liouvilleโ)
adaptive โ Use adaptive step size
rtol โ Relative tolerance for adaptive stepping
atol โ Absolute tolerance for adaptive stepping
- solve(drift, diffusion, x0, t_span, num_steps=100, seed=None, noise_model=None, **kwargs)[source]
Integrate with fractional history terms and Milstein correction (supported cases).
- hpfracc.solvers.sde_solvers.solve_fractional_sde(drift, diffusion, x0, t_span, fractional_order=0.5, method='euler_maruyama', num_steps=100, seed=None, noise_model=None, **kwargs)[source]
Solve a fractional SDE.
- Parameters:
drift (Callable) โ Drift function f(t, x) -> R^d
diffusion (Callable) โ Diffusion function g(t, x) -> R^(d x m)
x0 (ndarray) โ Initial condition
fractional_order (float | FractionalOrder) โ Fractional order (0 < ฮฑ < 2)
method (str) โ Solver method (
euler_maruyamaormilstein).milsteinadds a finite-difference Milstein correction for diagonal noise or a single Wiener driver; seeFractionalMilstein.num_steps (int) โ Number of time steps
seed (int | None) โ Random seed for Wiener process
**kwargs โ Additional solver parameters
noise_model (NoiseModel | None)
- Returns:
SDESolution object
- Return type:
SDESolution
Example
>>> def drift(t, x): ... return -0.5 * x >>> def diffusion(t, x): ... return 0.2 * np.eye(1) >>> x0 = np.array([1.0]) >>> sol = solve_fractional_sde(drift, diffusion, x0, (0, 1), 0.5, num_steps=100) >>> print(sol.y[-1])
- hpfracc.solvers.sde_solvers.solve_fractional_sde_system(drift, diffusion, x0, t_span, fractional_order, method='euler_maruyama', noise_type='additive', num_steps=100, seed=None, noise_model=None, **kwargs)[source]
Solve a system of coupled fractional SDEs.
- Parameters:
drift (Callable) โ Drift function f(t, x) -> R^d
diffusion (Callable) โ Diffusion function g(t, x) -> R^(d x m)
x0 (ndarray) โ Initial condition
fractional_order (float | FractionalOrder | List[float]) โ Fractional order(s) for system
method (str) โ Solver method
noise_type (str) โ Type of noise (โadditiveโ or โmultiplicativeโ)
num_steps (int) โ Number of time steps
seed (int | None) โ Random seed
noise_model (NoiseModel | None) โ Optional noise model
**kwargs โ Additional parameters
- Returns:
SDESolution object
- Return type:
SDESolution
Noise Models๏
Stochastic Noise Models for Fractional SDEs
This module provides various noise models including Brownian motion, fractional Brownian motion, Lรฉvy processes, and coloured noise.
- class hpfracc.solvers.noise_models.NoiseModel[source]
Bases:
ABCBase class for stochastic noise models.
- abstractmethod generate_increment(t, dt, size=(), seed=None)[source]
Generate noise increment.
- class hpfracc.solvers.noise_models.BrownianMotion(scale=1.0)[source]
Bases:
NoiseModelStandard Brownian motion (Wiener process).
Generates independent Gaussian increments with variance dt.
- Parameters:
scale (float)
- __init__(scale=1.0)[source]
Initialize Brownian motion.
- Parameters:
scale (float) โ Scaling factor for noise
- generate_increment(t, dt, size=(), seed=None)[source]
Generate Wiener increment.
- class hpfracc.solvers.noise_models.FractionalBrownianMotion(hurst=0.5, scale=1.0)[source]
Bases:
NoiseModelFractional Brownian motion (fBm).
A Gaussian process with long-range dependence characterized by the Hurst exponent H (0 < H < 1).
- __init__(hurst=0.5, scale=1.0)[source]
Initialize fractional Brownian motion.
- prepare(num_steps, dt, size=())[source]
Pre-compute fBm increments using Davies-Harte method (FFT).
- generate_increment(t, dt, size=(), seed=None)[source]
Generate fractional Brownian motion increment.
Uses precomputed Davies-Harte increments if available, otherwise falls back to simplified independent increments (with warning).
- property is_standard_bm: bool
Check if this is standard Brownian motion.
- class hpfracc.solvers.noise_models.LevyNoise(alpha=1.5, beta=0.0, scale=1.0, location=0.0)[source]
Bases:
NoiseModelLรฉvy noise for jump diffusions.
Uses stable distributions to model heavy-tailed noise.
- __init__(alpha=1.5, beta=0.0, scale=1.0, location=0.0)[source]
Initialize Lรฉvy noise.
- class hpfracc.solvers.noise_models.ColouredNoise(correlation_time=1.0, amplitude=1.0, seed=None)[source]
Bases:
NoiseModelColoured noise (Ornstein-Uhlenbeck process).
Gaussian noise with exponential autocorrelation.
- __init__(correlation_time=1.0, amplitude=1.0, seed=None)[source]
Initialize coloured noise.
- generate_increment(t, dt, size=(), seed=None)[source]
Generate coloured noise increment.
- reset()[source]
Reset the noise process state.
- hpfracc.solvers.noise_models.numpyro_brownian_noise(t, dt, scale=1.0)[source]
NumPyro model for Brownian noise.
- hpfracc.solvers.noise_models.numpyro_fractional_brownian_noise(t, dt, hurst=0.5, scale=1.0)[source]
NumPyro model for fractional Brownian noise.
- hpfracc.solvers.noise_models.numpyro_levy_noise(t, dt, alpha=1.5, scale=1.0)[source]
NumPyro model for Lรฉvy noise.
Note: NumPyro doesnโt have stable distribution, so uses approximation.
- class hpfracc.solvers.noise_models.NoiseConfig(noise_type='brownian', hurst=0.5, scale=1.0, alpha=1.5, beta=0.0, correlation_time=1.0, amplitude=1.0)[source]
Bases:
objectConfiguration for noise models.
- Parameters:
- noise_type: str = 'brownian'
- hurst: float = 0.5
- scale: float = 1.0
- alpha: float = 1.5
- beta: float = 0.0
- correlation_time: float = 1.0
- amplitude: float = 1.0
- hpfracc.solvers.noise_models.create_noise_model(config)[source]
Create a noise model from configuration.
- Parameters:
config (NoiseConfig) โ Noise configuration
- Returns:
NoiseModel instance
- Return type:
NoiseModel
- hpfracc.solvers.noise_models.generate_noise_trajectory(noise_model, t_span, num_steps, size=(), seed=None)[source]
Generate a complete noise trajectory.
- Parameters:
- Returns:
Tuple of (time array, noise increments array)
- Return type:
Coupled graphโSDE solvers๏
Coupled System Solvers for Graph-SDE Dynamics
This module provides numerical solvers for systems of coupled spatial-temporal dynamics, integrating graph-based spatial evolution with fractional SDE temporal evolution.
Modeling scope (read before interpreting results)
Spatial track: explicit Euler on
graph_dynamics(state, adjacency)(one step per substep). No fractional derivative in space unlessgraph_dynamicsimplements it.Temporal track: history convolutions via
FastHistoryConvolutionwithgamma(alpha+1)scaling and a singledt**alphafactor per stepโan engineering approximation to fractional SDE memory, not a full rigorous discretization proof.Coupling: both solvers add
coupling_strength * (spatial - temporal)into the temporal drift (operator splitting: after the spatial half-step; monolithic: inside the combined drift). The spatial ODE does not receive an symmetric pull from temporal inOperatorSplittingSolver(onlyMonolithicSolveraddsk*(V-U)todspatial).API:
coupling_typeinsolve_coupled_graph_sde()is reserved and not used; onlycoupling_strengthand the solver choice affect dynamics.``multiscale``: not implemented; raises
ValueError.
For production experiments, validate against a reference integrator or reduce step size when coupling is strong; splitting error can dominate.
- class hpfracc.solvers.coupled_solvers.CoupledSolution(t, spatial, temporal, coupling, metadata=None)[source]
Bases:
objectSolution object for coupled graph-SDE systems.
- Parameters:
- t: ndarray
- spatial: ndarray
- temporal: ndarray
- coupling: ndarray
- class hpfracc.solvers.coupled_solvers.CoupledSystemSolver(fractional_orders, coupling_strength=1.0)[source]
Bases:
ABCBase class for coupled system solvers.
- Parameters:
- __init__(fractional_orders, coupling_strength=1.0)[source]
Initialize coupled system solver.
- abstractmethod solve(graph_dynamics, sde_drift, sde_diffusion, adjacency, node_features, t_span, **kwargs)[source]
Solve coupled system.
- class hpfracc.solvers.coupled_solvers.OperatorSplittingSolver(fractional_orders, coupling_strength=1.0, split_order=2)[source]
Bases:
CoupledSystemSolverOperator splitting solver for graph-SDE dynamics.
Spatial evolution uses
graph_dynamicson the spatial track. The temporal (fractional SDE) track adds an explicit coupling term to the drift:drift_total = sde_drift(t, temporal) + coupling_strength * (spatial - temporal)
using the current spatial state after the preceding spatial substeps in the split. This matches the spirit of
MonolithicSolver(coupling in the temporal drift).- Parameters:
- __init__(fractional_orders, coupling_strength=1.0, split_order=2)[source]
Initialize operator splitting solver.
- solve(graph_dynamics, sde_drift, sde_diffusion, adjacency, node_features, t_span, num_steps=100, seed=None, **kwargs)[source]
Solve using operator splitting.
For Strang splitting (order 2): - Half step of spatial dynamics - Full step of temporal dynamics - Half step of spatial dynamics
- _spatial_step(graph_dynamics, adjacency, state, dt)[source]
Single spatial (graph) evolution step.
- _temporal_step(drift, diffusion, state, t, dt, drift_conv, diffusion_conv, gamma_factor, alpha, initial_state, spatial_for_coupling, rng)[source]
Temporal fractional SDE substep with explicit drift coupling to the spatial track.
- class hpfracc.solvers.coupled_solvers.MonolithicSolver(fractional_orders, coupling_strength=1.0)[source]
Bases:
CoupledSystemSolverMonolithic solver for strongly coupled graph-SDE systems.
Solves the full coupled system simultaneously for better accuracy in strongly coupled regimes, at the cost of higher memory usage.
- Parameters:
- solve(graph_dynamics, sde_drift, sde_diffusion, adjacency, node_features, t_span, num_steps=100, seed=None, **kwargs)[source]
Solve monolithic coupled system.
- hpfracc.solvers.coupled_solvers.solve_coupled_graph_sde(graph_dynamics, sde_drift, sde_diffusion, adjacency, node_features, t_span, fractional_orders=0.5, coupling_type='bidirectional', coupling_strength=1.0, solver='operator_splitting', **kwargs)[source]
Solve coupled graph-SDE system.
See module docstring for limitations (unused
coupling_type, approximate temporal fractional path, asymmetric coupling in operator splitting).- Parameters:
graph_dynamics (Callable) โ Spatial dynamics
f(spatial, adjacency).sde_drift (Callable) โ Temporal drift
f(t, temporal).sde_diffusion (Callable) โ Temporal diffusion
g(t, temporal).adjacency (ndarray) โ Graph adjacency matrix.
node_features (ndarray) โ Initial node features (shared as spatial/temporal initial shape).
fractional_orders (float | FractionalOrder | Dict[str, float]) โ Scalar or dict with
'spatial'/'temporal'keys; temporal order drivesFastHistoryConvolution.coupling_type (str) โ Reserved for future use; currently ignored.
coupling_strength (float) โ Prefactor on
(spatial - temporal)in the temporal drift.solver (str) โ
"operator_splitting"or"monolithic".**kwargs โ Passed to the solverโs
solve(e.g.num_steps,seed).
- Returns:
CoupledSolution
- Return type:
CoupledSolution
JAX / Diffrax utilities (optional)๏
Imported explicitly as hpfracc.solvers.solvers_jax_utils (not re-exported from
hpfracc.solvers). Autodoc of this submodule is skipped here because optional JAX /
Diffrax stacks and version-specific internals often fail on documentation builders; see
docs/development/SOLVERS_ARCHITECTURE.md in the repository for exports and extras.