Advanced Topics
Backends and Performance
sandalwood is designed for high performance by abstracting key numerical operations to a flexible backend system. This allows the library to leverage optimized libraries like NumPy and PyTorch.
The Backend System
The backend.py module defines a set of static methods for common
tensor operations (e.g., power, prod, dot). The neval
method in MultivariateTaylorFunction automatically selects the appropriate
backend class based on the input array type by calling get_backend(array).
get_backend returns the backend class (not an instance). Because
all backend methods are @staticmethod, the class itself is the callable,
so no object is constructed on each dispatch call.
NumPy Backend
This is the default backend and is used when the input to neval is a
NumPy array. All operations are performed using NumPy’s highly optimized
C and Fortran libraries, providing excellent performance for CPU-based
computation.
Memory semantics
NumpyBackend.from_numpy(a, copy=True) (the default) always returns a
fresh copy. Pass copy=False only when you need a zero-cost view and are
certain no in-place mutation will occur.
PyTorch Backend
When a PyTorch Tensor is passed to neval, sandalwood automatically
switches to the PyTorch backend. This provides two key advantages:
GPU Acceleration: PyTorch’s native CUDA support allows operations to be executed on an NVIDIA GPU, dramatically speeding up computations on large batches of data.
Vector and Matrix Operations: PyTorch’s backend is specifically optimized for deep learning, making it exceptionally fast for the types of vectorized operations used in sandalwood.
Device and gradient safety
TorchBackend.to_numpy handles all common failure modes that would
otherwise cause opaque RuntimeError exceptions:
Autograd-tracked tensors (
requires_grad=True): detached from the computation graph before conversion. AUserWarningis emitted.Non-CPU tensors (CUDA, MPS, …): copied to CPU host before conversion. A
UserWarningis emitted because this incurs a device-to-host transfer.
import torch
from sandalwood.backend import TorchBackend
# Safe: detaches and warns
t = torch.tensor([1.0, 2.0], requires_grad=True)
arr = TorchBackend.to_numpy(t) # emits UserWarning
# Safe: moves to CPU and warns
t_gpu = torch.tensor([1.0, 2.0]).cuda()
arr = TorchBackend.to_numpy(t_gpu) # emits UserWarning
Behavioural fixes vs previous versions
Scenario |
Before |
After |
|---|---|---|
|
|
detach + |
|
|
|
|
|
global reduction |
|
shape |
shape |
|
zero-copy shared buffer |
independent copy |
COSY Backend (Fortran)
For maximum performance at extremely high orders (e.g., order 20+) or for specific differential algebraic operators like Poisson brackets and map composition, sandalwood provides a bridge to the COSY Infinity core.
High-Order Stability: COSY is globally recognized for its numerical stability in high-order Taylor expansions.
Symplectic Tracking: Optimized routines for particle tracking in accelerator physics.
O(1) Memory Management: Uses a raw Fortran stack for ultra-fast allocation and deallocation.
Thread-safety (Python layer):
CosyIndexPoolis protected by athreading.RLock;initialize_mtfis protected by a module-levelRLock. The underlying Fortran routines are still single-threaded.
For more details on the COSY backend architecture, see COSY Infinity Backend Architecture.
Future Work
This section outlines potential future directions for sandalwood, ranging from incremental improvements to more ambitious features.
### Expanded Functionality
Automatic Differentiation (AD): Implement support for AD to allow for the computation of gradients, Jacobians, and Hessians of Taylor maps.
Advanced Elementary Functions: Add support for more advanced elementary functions, such as Bessel functions, gamma functions, and error functions.
Non-linear Equation Solver: Implement a solver for systems of non-linear equations using Taylor series methods (e.g., Newton’s method with high-order corrections).
### Improved User Experience
Symbolic API: Develop a more intuitive API for creating and manipulating Taylor maps, perhaps with a more “symbolic” feel.
Example Gallery: Create a “gallery” of examples in the documentation showcasing real-world applications of sandalwood in physics, engineering, and other fields.
Improved Error Messages: Add more detailed error messages and warnings to help users debug their code.