“”” User Guide ==========
Welcome to the HPFRACC User Guide! This comprehensive guide will help you get started with the High-Performance Fractional Calculus Library v3.0.0, featuring Neural Fractional SDE Solvers, revolutionary intelligent backend selection, complete Fractional Autograd Framework, machine learning integration, and advanced optimization capabilities.
Installation
Basic Installation
Install the core library:
pip install hpfracc
Installation with GPU Support
For GPU acceleration with intelligent backend selection:
Recommended Installation for CUDA 12.8 (PyTorch) and CUDA 12 (JAX):
# Install PyTorch with CUDA 12.8 first
pip install torch==2.9.0 --index-url https://download.pytorch.org/whl/cu128
# Then install JAX with CUDA 12 support
pip install --upgrade "jax[cuda12]"
# Install HPFRACC with GPU extras
pip install hpfracc[gpu]
Note: JAX’s CUDA 12 wheels are built with CUDA 12.3 but are compatible with CUDA ≥12.1, which includes CUDA 12.8. CUDA libraries are backward compatible, so JAX will work correctly with PyTorch’s CUDA 12.8 installation.
Alternative (simpler but may have version conflicts):
pip install hpfracc[gpu]
Installation with Machine Learning Dependencies
For full machine learning capabilities including PyTorch, JAX, and NUMBA with intelligent backend selection:
pip install hpfracc[ml]
Development Installation
For development and contribution:
git clone https://github.com/dave2k77/fractional_calculus_library.git
cd fractional_calculus_library
pip install -e .[dev]
pip install -e .[ml]
Requirements
Python: 3.9+ (dropped 3.8 support)
Required: NumPy, SciPy, Matplotlib
Optional: PyTorch, JAX, Numba (for acceleration)
GPU: CUDA-compatible GPU (optional)
Quick Start
Intelligent Backend Selection (v2.2.0)
The revolutionary intelligent backend selection automatically optimizes performance:
import hpfracc
from hpfracc.ml.intelligent_backend_selector import IntelligentBackendSelector
from hpfracc.ml.intelligent_backend_selector import WorkloadCharacteristics
# Create intelligent backend selector
selector = IntelligentBackendSelector(enable_learning=True)
# Define workload characteristics
workload = WorkloadCharacteristics(
operation_type="fractional_derivative",
data_size=10000,
data_shape=(100, 100),
requires_gradient=True
)
# Select optimal backend automatically
backend = selector.select_backend(workload)
print(f"Selected backend: {backend}")
# Use with fractional operations
frac_deriv = hpfracc.create_fractional_derivative(alpha=0.5, definition="caputo")
result = frac_deriv(f, x) # Automatically uses optimal backend
Spectral Autograd Framework
The spectral autograd framework is the core innovation that enables gradient flow through fractional derivatives:
import torch
from hpfracc.ml import SpectralFractionalDerivative, BoundedAlphaParameter
# Create input with gradient support
x = torch.randn(32, requires_grad=True)
alpha = 0.5 # fractional order
# Apply spectral fractional derivative
result = SpectralFractionalDerivative.apply(x, alpha, -1, "fft")
# Gradients flow properly through fractional derivatives
loss = torch.sum(result)
loss.backward()
print(f"Input gradient norm: {x.grad.norm().item():.6f}")
Learnable Fractional Orders
Use bounded parameterization for adaptive fractional orders:
# Create learnable alpha parameter
alpha_param = BoundedAlphaParameter(alpha_init=1.0)
# Use in computation
alpha_val = alpha_param()
result = SpectralFractionalDerivative.apply(x, alpha_val, -1, "fft")
# Alpha gradients are computed automatically
loss = torch.sum(result)
loss.backward()
print(f"Alpha value: {alpha_val.item():.4f}")
print(f"Alpha gradient: {alpha_param.rho.grad.item():.6f}")
Basic Fractional Calculus Operations
Fractional Derivatives
from hpfracc import FractionalOrder, optimized_riemann_liouville
import numpy as np
# Define fractional order
alpha = FractionalOrder(0.5)
# Create a test function
def f(x):
return np.sin(x)
# Compute fractional derivative
x = np.linspace(0, 2*np.pi, 100)
result = optimized_riemann_liouville(x, f(x), alpha)
print(f"Fractional derivative of sin(x) with order {alpha}:")
print(result[:5]) # Show first 5 values
Fractional Integrals
from hpfracc import FractionalOrder, riemann_liouville_integral
import numpy as np
# Define fractional order
alpha = FractionalOrder(0.5)
# Create a test function
def f(x):
return x**2
# Compute fractional integral
x = np.linspace(0, 5, 100)
result = riemann_liouville_integral(x, f(x), alpha)
print(f"Fractional integral of x² with order {alpha}:")
print(result[:5]) # Show first 5 values
Advanced Fractional Operators
HPFRACC provides a comprehensive collection of fractional operators beyond the classical definitions:
from hpfracc.core.derivatives import create_fractional_derivative
from hpfracc.core.fractional_implementations import create_riesz_fisher_operator
import numpy as np
# Novel derivatives
cf_derivative = create_fractional_derivative('caputo_fabrizio', 0.5)
ab_derivative = create_fractional_derivative('atangana_baleanu', 0.5)
# Advanced methods
weyl_derivative = create_fractional_derivative('weyl', 0.5)
marchaud_derivative = create_fractional_derivative('marchaud', 0.5)
# Special operators
rf_operator = create_riesz_fisher_operator(0.5) # Derivative behavior
rf_integral = create_riesz_fisher_operator(-0.5) # Integral behavior
# Test function
def f(x): return np.exp(-x**2)
x = np.linspace(-2, 2, 100)
# Compute results
cf_result = cf_derivative.compute(f, x)
rf_result = rf_operator.compute(f, x)
print(f"Caputo-Fabrizio result shape: {cf_result.shape}")
print(f"Riesz-Fisher result shape: {rf_result.shape}")
Special Functions
from hpfracc.special import (
gamma_function, beta_function, binomial_coefficient,
mittag_leffler_function
)
import numpy as np
# Gamma function
x = 2.5
gamma_val = gamma_function(x)
print(f"Γ({x}) = {gamma_val}")
# Beta function
a, b = 2.0, 3.0
beta_val = beta_function(a, b)
print(f"B({a}, {b}) = {beta_val}")
# Binomial coefficient
n, k = 5, 2
binomial_val = binomial_coefficient(n, k)
print(f"({n} choose {k}) = {binomial_val}")
# Mittag-Leffler function
alpha, z = 0.5, 1.0
ml_val = mittag_leffler_function(alpha, z)
print(f"E_{alpha}({z}) = {ml_val}")
Backend Management
HPFRACC supports multiple computation backends:
from hpfracc.ml.backends import BackendManager, BackendType
# Check available backends
available = BackendManager.get_available_backends()
print(f"Available backends: {available}")
# Set preferred backend
BackendManager.set_backend(BackendType.JAX)
# Get current backend
current = BackendManager.get_current_backend()
print(f"Current backend: {current}")
Core Features
Fractional Derivatives
HPFRACC provides multiple definitions of fractional derivatives:
Riemann-Liouville Definition:
from hpfracc import FractionalOrder, optimized_riemann_liouville
# Create Riemann-Liouville fractional derivative
alpha = FractionalOrder(0.5)
# Apply to function
def f(x):
return np.sin(x)
x = np.linspace(0, 2*np.pi, 100)
result = optimized_riemann_liouville(x, f(x), alpha)
Caputo Definition:
from hpfracc import optimized_caputo
# Create Caputo fractional derivative
result = optimized_caputo(x, f(x), alpha)
Grünwald-Letnikov Definition:
from hpfracc import optimized_grunwald_letnikov
# Create Grünwald-Letnikov fractional derivative
result = optimized_grunwald_letnikov(x, f(x), alpha)
Fractional Integrals
HPFRACC supports various types of fractional integrals:
Riemann-Liouville Integral:
from hpfracc import riemann_liouville_integral
# Create Riemann-Liouville fractional integral
alpha = FractionalOrder(0.5)
# Apply to function
def f(x):
return x**2
x = np.linspace(0, 5, 100)
result = riemann_liouville_integral(x, f(x), alpha)
Caputo Integral:
from hpfracc.core.integrals import CaputoIntegral
# Create Caputo fractional integral (supports all orders α ≥ 0)
# For 0 < α < 1
integral_05 = CaputoIntegral(0.5)
result = integral_05(f, x)
# For α ≥ 1 (newly implemented)
integral_15 = CaputoIntegral(1.5)
result = integral_15(f, x)
Note: Caputo integral now supports all fractional orders α ≥ 0. For 0 < α < 1, it equals the Riemann-Liouville integral. For α ≥ 1, it uses a decomposition method. Weyl and Hadamard integrals are available but require specific implementations.
Special Functions
Gamma and Beta Functions:
from hpfracc.special import gamma_function, beta_function
# Gamma function
x = np.linspace(0.1, 5, 100)
gamma_vals = [gamma_function(xi) for xi in x]
# Beta function
a, b = 2.0, 3.0
beta_val = beta_function(a, b)
Binomial Coefficients:
from hpfracc.special import binomial_coefficient, generalized_binomial
# Standard binomial coefficient
n, k = 5, 2
binomial_val = binomial_coefficient(n, k)
# Fractional binomial coefficient
alpha = 0.5
frac_binomial_val = generalized_binomial(alpha, k)
Mittag-Leffler Functions:
from hpfracc.special import mittag_leffler_function
# One-parameter Mittag-Leffler function
alpha = 0.5
z = np.linspace(-5, 5, 100)
ml_vals = [mittag_leffler_function(alpha, zi) for zi in z]
# Green’s functions have been removed from this release # They will be re-implemented in future releases with improved stability
# Focus on implemented methods # They will be re-implemented in future releases with improved stability
Mathematical Utilities
HPFRACC provides various mathematical utilities:
Validation Functions:
from hpfracc.core.utilities import (
validate_fractional_order, validate_function,
validate_tensor_input
)
# Validate fractional order
is_valid = validate_fractional_order(0.5) # True
is_valid = validate_fractional_order(-1.0) # False
# Validate function
def test_func(x):
return x**2
is_valid = validate_function(test_func) # True
is_valid = validate_function("not a function") # False
# Validate tensor input
import numpy as np
tensor = np.random.randn(10, 5)
is_valid = validate_tensor_input(tensor) # True
Mathematical Functions:
from hpfracc.core.utilities import (
factorial_fractional, binomial_coefficient,
pochhammer_symbol, hypergeometric_series
)
# Fractional factorial
x = 2.5
factorial_val = factorial_fractional(x)
# Binomial coefficient
n, k = 5, 2
binomial_val = binomial_coefficient(n, k)
# Pochhammer symbol
a, n = 0.5, 3
pochhammer_val = pochhammer_symbol(a, n)
# Hypergeometric series
a, b, c, z = 1, 1, 1, 0.5
hypergeometric_val = hypergeometric_series(a, b, c, z)
Performance Monitoring:
from hpfracc.core.utilities import (
timing_decorator, memory_usage_decorator,
PerformanceMonitor
)
# Timing decorator
@timing_decorator
def expensive_function(n):
return sum(i**2 for i in range(n))
result = expensive_function(10000)
# Memory usage decorator
@memory_usage_decorator
def memory_intensive_function(n):
return np.random.randn(n, n)
result = memory_intensive_function(1000)
# Performance monitor
monitor = PerformanceMonitor()
with monitor.timer("computation"):
result = expensive_function(10000)
print(f"Computation time: {monitor.get_timing('computation')}")
Fractional Neural Networks
Create and use fractional neural networks:
from hpfracc.ml import FractionalNeuralNetwork
from hpfracc.core.definitions import FractionalOrder
from hpfracc.ml.backends import BackendType
import numpy as np
# Create a fractional neural network
model = FractionalNeuralNetwork(
input_dim=10,
hidden_dims=[64, 32, 16],
output_dim=1,
fractional_order=FractionalOrder(0.5),
activation='relu',
dropout_rate=0.2
)
# Generate sample data
X = np.random.randn(1000, 10)
y = np.sum(X**2, axis=1) + 0.1 * np.random.randn(1000)
# Train the model
history = model.fit(
X, y,
epochs=100,
batch_size=32,
learning_rate=0.001,
verbose=True
)
# Make predictions
predictions = model.predict(X)
Graph Neural Networks
Work with fractional graph neural networks:
from hpfracc.ml.gnn_layers import FractionalGraphConvolution
from hpfracc.core.definitions import FractionalOrder
import numpy as np
import networkx as nx
# Create a graph
G = nx.erdos_renyi_graph(20, 0.3)
adj_matrix = nx.adjacency_matrix(G).toarray()
# Create node features
node_features = np.random.randn(20, 5)
# Create fractional graph convolution layer
fractional_order = FractionalOrder(0.5)
fgc_layer = FractionalGraphConvolution(
input_dim=5,
output_dim=3,
fractional_order=fractional_order,
activation='relu'
)
# Apply fractional graph convolution
output_features = fgc_layer(adj_matrix, node_features)
Advanced Usage
Error Analysis and Validation
Numerical Error Analysis:
from hpfracc.core.derivatives import create_fractional_derivative
from hpfracc.core.definitions import FractionalOrder
import numpy as np
def analytical_solution(x, alpha):
"""Analytical solution for D^α sin(x)."""
return np.sin(x + alpha * np.pi / 2)
# Compare numerical and analytical solutions
x = np.linspace(0, 2*np.pi, 100)
alpha = 0.5
# Numerical solution
deriv = create_fractional_derivative(FractionalOrder(alpha), method="RL")
numerical = deriv(lambda x: np.sin(x), x)
# Analytical solution
analytical = analytical_solution(x, alpha)
# Compute error
error = np.mean(np.abs((numerical - analytical) / analytical))
print(f"Relative error: {error:.6f}")
Convergence Analysis:
# HPM solver removed - focusing on implemented methods
# Focus on implemented methods: SDE solvers, fractional operators, and ML integration
print("HPM solver removed - focusing on implemented methods")
Performance Optimization
GPU Acceleration:
from hpfracc.ml.backends import BackendManager, BackendType
from hpfracc.core.derivatives import create_fractional_derivative
from hpfracc.core.definitions import FractionalOrder
import time
def benchmark_cpu_vs_gpu(data_size):
# Generate data
x = np.linspace(0, 10, data_size)
signal = np.sin(2*np.pi*x) + 0.1*np.random.randn(data_size)
# CPU computation
BackendManager.set_backend(BackendType.NUMPY)
deriv_cpu = create_fractional_derivative(FractionalOrder(0.5), method="RL")
start_time = time.time()
result_cpu = deriv_cpu(lambda x: signal, x)
cpu_time = time.time() - start_time
# GPU computation (if available)
if BackendManager.is_backend_available(BackendType.TORCH):
BackendManager.set_backend(BackendType.TORCH)
deriv_gpu = create_fractional_derivative(FractionalOrder(0.5), method="RL")
start_time = time.time()
result_gpu = deriv_gpu(lambda x: signal, x)
gpu_time = time.time() - start_time
print(f"CPU time: {cpu_time:.4f}s")
print(f"GPU time: {gpu_time:.4f}s")
print(f"Speedup: {cpu_time/gpu_time:.2f}x")
Memory Optimization:
from hpfracc.core.utilities import memory_usage_decorator
import numpy as np
@memory_usage_decorator
def memory_intensive_computation(data_size):
# Generate large dataset
x = np.linspace(0, 10, data_size)
signal = np.sin(2*np.pi*x) + 0.1*np.random.randn(data_size)
# Create multiple fractional derivatives
derivatives = []
for alpha in [0.1, 0.3, 0.5, 0.7, 0.9]:
from hpfracc.core.derivatives import create_fractional_derivative
from hpfracc.core.definitions import FractionalOrder
deriv = create_fractional_derivative(FractionalOrder(alpha), method="RL")
result = deriv(lambda x: signal, x)
derivatives.append(result)
return derivatives
# Test memory usage
result = memory_intensive_computation(10000)
Signal Processing Applications
Fractional Signal Processing:
from hpfracc.core.derivatives import create_fractional_derivative
from hpfracc.core.definitions import FractionalOrder
import numpy as np
from scipy.fft import fft, fftfreq
# Generate test signal
t = np.linspace(0, 10, 1000)
signal = np.sin(2*np.pi*t) + 0.5*np.sin(4*np.pi*t) + 0.1*np.random.randn(len(t))
# Apply fractional derivatives
alpha_values = [0.1, 0.3, 0.5, 0.7, 0.9]
derivatives = {}
for alpha in alpha_values:
deriv = create_fractional_derivative(FractionalOrder(alpha), method="RL")
derivatives[alpha] = deriv(lambda x: signal, t)
# Frequency domain analysis
fft_original = np.abs(fft(signal))
fft_derivatives = {}
for alpha in alpha_values:
fft_derivatives[alpha] = np.abs(fft(derivatives[alpha]))
Image Processing Applications
Fractional Image Processing:
from hpfracc.core.derivatives import create_fractional_derivative
from hpfracc.core.definitions import FractionalOrder
import numpy as np
from scipy import ndimage
# Create a test image
x, y = np.meshgrid(np.linspace(-2, 2, 100), np.linspace(-2, 2, 100))
image = np.sin(x) * np.cos(y) + 0.1 * np.random.randn(100, 100)
# Apply fractional derivatives in x and y directions
alpha = 0.5
deriv_x = create_fractional_derivative(FractionalOrder(alpha), method="RL")
deriv_y = create_fractional_derivative(FractionalOrder(alpha), method="RL")
# Compute fractional gradients
gradient_x = np.zeros_like(image)
gradient_y = np.zeros_like(image)
for i in range(image.shape[0]):
gradient_x[i, :] = deriv_x(lambda x: image[i, :], np.arange(image.shape[1]))
for j in range(image.shape[1]):
gradient_y[:, j] = deriv_y(lambda y: image[:, j], np.arange(image.shape[0]))
# Compute gradient magnitude
gradient_magnitude = np.sqrt(gradient_x**2 + gradient_y**2)
Configuration and Settings
Precision Settings
from hpfracc.core.utilities import (
get_default_precision, set_default_precision,
get_available_methods, get_method_properties
)
# Get current precision settings
precision = get_default_precision()
print(f"Current precision: {precision}")
# Set precision
set_default_precision(64) # Use 64-bit precision
# Get available methods
methods = get_available_methods()
print(f"Available methods: {methods}")
# Get method properties
properties = get_method_properties("riemann_liouville")
print(f"Riemann-Liouville properties: {properties}")
Logging Configuration
from hpfracc.core.utilities import setup_logging, get_logger
# Setup logging
logger = setup_logging(level="INFO", log_file="hpfracc.log")
# Get logger for specific module
logger = get_logger("hpfracc.core.derivatives")
# Use logger
logger.info("Starting fractional derivative computation")
logger.debug("Computing with alpha=0.5")
logger.warning("Large data size detected")
logger.error("Computation failed")
Troubleshooting
Common Issues
Import Errors:
# If you get import errors, check your installation
import hpfracc
print(hpfracc.__version__)
# Check available backends
from hpfracc.ml.backends import BackendManager
available = BackendManager.get_available_backends()
print(f"Available backends: {available}")
Memory Issues:
# For large computations, use memory-efficient processing
from hpfracc.core.utilities import memory_usage_decorator
import gc
@memory_usage_decorator
def process_large_data(data, chunk_size=1000):
results = []
for i in range(0, len(data), chunk_size):
chunk = data[i:i+chunk_size]
# Process chunk
chunk_result = process_chunk(chunk)
results.append(chunk_result)
# Clear memory
del chunk
gc.collect()
return np.concatenate(results)
Performance Issues:
# Use GPU acceleration when available
from hpfracc.ml.backends import BackendManager, BackendType
# Try different backends
backends_to_try = [BackendType.TORCH, BackendType.JAX, BackendType.NUMBA]
for backend in backends_to_try:
if BackendManager.is_backend_available(backend):
BackendManager.set_backend(backend)
print(f"Using backend: {backend}")
break
Validation Errors:
from hpfracc.core.utilities import validate_fractional_order, validate_function
# Validate inputs before computation
alpha = 0.5
if not validate_fractional_order(alpha):
raise ValueError(f"Invalid fractional order: {alpha}")
def f(x):
return x**2
if not validate_function(f):
raise ValueError("Invalid function")
Best Practices
Code Organization:
# Organize your code with proper imports
import numpy as np
from hpfracc.core.definitions import FractionalOrder
from hpfracc.core.derivatives import create_fractional_derivative
from hpfracc.core.integrals import create_fractional_integral
from hpfracc.special import gamma_function, mittag_leffler_function
# Use consistent naming conventions
alpha = FractionalOrder(0.5)
x = np.linspace(0, 10, 100)
# Create reusable functions
def compute_fractional_derivative(f, alpha, method="RL"):
deriv = create_fractional_derivative(alpha, method=method)
return deriv(f, x)
Error Handling:
import numpy as np
from hpfracc.core.utilities import validate_fractional_order
def safe_fractional_derivative(f, alpha, method="RL"):
"""Safely compute fractional derivative with error handling."""
try:
# Validate inputs
if not validate_fractional_order(alpha):
raise ValueError(f"Invalid fractional order: {alpha}")
# Create derivative
from hpfracc.core.derivatives import create_fractional_derivative
from hpfracc.core.definitions import FractionalOrder
deriv = create_fractional_derivative(FractionalOrder(alpha), method=method)
# Compute result
x = np.linspace(0, 10, 100)
result = deriv(f, x)
return result
except Exception as e:
print(f"Error computing fractional derivative: {e}")
return None
Performance Optimization:
from hpfracc.core.utilities import timing_decorator
from hpfracc.ml.backends import BackendManager, BackendType
@timing_decorator
def optimized_computation(data, alpha, method="RL"):
"""Optimized computation with backend selection."""
# Choose best available backend
if BackendManager.is_backend_available(BackendType.TORCH):
BackendManager.set_backend(BackendType.TORCH)
elif BackendManager.is_backend_available(BackendType.JAX):
BackendManager.set_backend(BackendType.JAX)
else:
BackendManager.set_backend(BackendType.NUMPY)
# Perform computation
from hpfracc.core.derivatives import create_fractional_derivative
from hpfracc.core.definitions import FractionalOrder
deriv = create_fractional_derivative(FractionalOrder(alpha), method=method)
return deriv(lambda x: data, np.arange(len(data)))
Documentation and Testing:
def well_documented_function(f, alpha, method="RL"):
"""
Compute fractional derivative with comprehensive documentation.
Parameters:
-----------
f : callable
Function to differentiate
alpha : float
Fractional order (0 < alpha < 2)
method : str, optional
Method to use ("RL", "Caputo", "GL")
Returns:
--------
numpy.ndarray
Fractional derivative values
Raises:
-------
ValueError
If alpha is not in valid range
TypeError
If f is not callable
Examples:
--------
>>> def f(x): return np.sin(x)
>>> result = well_documented_function(f, 0.5)
"""
# Input validation
if not validate_fractional_order(alpha):
raise ValueError(f"Invalid fractional order: {alpha}")
if not validate_function(f):
raise TypeError("f must be callable")
# Computation
from hpfracc.core.derivatives import create_fractional_derivative
from hpfracc.core.definitions import FractionalOrder
deriv = create_fractional_derivative(FractionalOrder(alpha), method=method)
x = np.linspace(0, 10, 100)
return deriv(f, x)
This comprehensive user guide covers all the major features of HPFRACC, from basic usage to advanced applications. For more detailed examples and tutorials, see the Examples & Tutorials section. “””