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:
- 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:
- 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
- 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.
- 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)
- 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.
- _compute_spatial_derivative(u, beta, dx)[source]
Compute spatial fractional derivative.
- Parameters:
u (ndarray) – Solution at current time
beta (float | FractionalOrder) – Spatial fractional order
dx (float) – Spatial step size
- Returns:
Spatial derivative
- Return type:
- _build_spatial_matrix(nx, beta, diffusion_coeff, dx, dt, alpha, side='lhs')[source]
Build spatial discretization matrix.
- Parameters:
nx (int) – Number of spatial points
beta (float | FractionalOrder) – Spatial fractional order
diffusion_coeff (float) – Diffusion coefficient
dx (float) – Spatial step size
dt (float) – Temporal step size
alpha (float | FractionalOrder) – Temporal fractional order
side (str) – ‘lhs’ for left-hand side of the equation, ‘rhs’ for right-hand side
- Returns:
Sparse matrix for spatial discretization
- Return type:
- 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.
- _build_spatial_matrix(nx, beta, diffusion_coeff, dx, dt, alpha, side='lhs')[source]
Build spatial discretization matrix.
- Parameters:
nx (int) – Number of spatial points
beta (float | FractionalOrder) – Spatial fractional order
diffusion_coeff (float) – Diffusion coefficient
dx (float) – Spatial step size
dt (float) – Temporal step size
alpha (float | FractionalOrder) – Temporal fractional order
side (str) – ‘lhs’ for left-hand side of the equation, ‘rhs’ for right-hand side
- Returns:
Sparse matrix for spatial discretization
- Return type:
- 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:
- fractional_order: float | FractionalOrder
- 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
- abstract solve(drift, diffusion, x0, t_span, **kwargs)[source]
Solve fractional SDE.
- Parameters:
- Returns:
SDESolution object containing trajectory
- Return type:
- class hpfracc.solvers.sde_solvers.FastHistoryConvolution(alpha, num_steps, dim)[source]
Bases:
objectHelper class for efficient history convolution in fractional SDE solvers.
Currently uses optimized dot product (O(N^2)), but structured to support FFT-based block convolution (O(N log N)) in future updates.
- 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
- class hpfracc.solvers.sde_solvers.FractionalMilstein(*args, **kwargs)[source]
Bases:
FractionalSDESolverFractional Milstein method for solving fractional SDEs.
This is a second-order strong convergence method with improved accuracy.
- __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
- hpfracc.solvers.sde_solvers.solve_fractional_sde(drift, diffusion, x0, t_span, fractional_order=0.5, method='euler_maruyama', num_steps=100, seed=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_maruyama”, “milstein”, “predictor_corrector”)
num_steps (int) – Number of time steps
seed (int | None) – Random seed for Wiener process
**kwargs – Additional solver parameters
- Returns:
SDESolution object
- Return type:
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, **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
**kwargs – Additional parameters
- Returns:
SDESolution object
- Return type:
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.
- 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
- 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).
- 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.
- 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.
- 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:
- 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: