Skip to main content

High-performance SDE solver with JIT compilation and parallel execution

Project description

PyIto

High-performance SDE solver with JIT compilation and parallel execution.

License: MIT Python 3.8+ Code Style: Black

PyIto is a Python library for simulating Stochastic Differential Equations (SDEs). Built on the Numba compiler, it translates Python model definitions into optimized machine code (LLVM) and automatically parallelizes Monte Carlo simulations across all available CPU cores.

It is designed for quantitative finance and research applications where execution speed and memory efficiency are critical.


✨ Key Features

  • 🚀 JIT Compilation: Compiles drift and diffusion functions to machine code for C-like performance.
  • 🔥 Auto-Parallelism: Automatically distributes paths across CPU cores using numba.prange.
  • 📉 Zero-RAM Noise Generation: Generates Brownian motion on-the-fly, allowing for millions of paths without memory overhead.
  • 🧠 Derivative-Free Milstein: Achieves Strong Order 1.0 accuracy without requiring manual calculation of diffusion derivatives.
  • 📊 Flexible Memory Management: Choose to store full path histories or only terminal states to optimize RAM usage.

🛠️ Installation

pip install pyito

Requirements: numpy, numba*


⚡ Quick Start

Here is a minimal example simulating a mean-reverting Ornstein-Uhlenbeck process: $$ dX_t = \theta(\mu - X_t)dt + \sigma dW_t $$

import numpy as np
from numba import njit
from pyito import SDE, integrate

# 1. Define Physics (Must be JIT-compatible)
@njit
def drift(t, x, args):
    theta, mu, sigma = args
    return theta * (mu - x)

@njit
def diffusion(t, x, args):
    theta, mu, sigma = args
    return sigma  # Constant volatility

# 2. Setup Model
# Params: theta=0.7, mu=1.5, sigma=0.3
sde = SDE(drift, diffusion, args=(0.7, 1.5, 0.3))

# 3. Run Simulation
# Simulates 100,000 paths in parallel
# Returns only the final state (at t=1.0) to save memory
results = integrate(sde, y0=0.0, tspan=(0, 1.0), dt=0.01, n_paths=100_000)

print(f"Mean: {np.mean(results):.4f}")
print(f"Std:  {np.std(results):.4f}")

🧮 Supported Algorithms

PyIto supports the following solvers via the method argument:

Method Strong Order Description
euler_maruyama 0.5 The standard, efficient default solver.
milstein 1.0 Higher accuracy for multiplicative noise. Requires providing diffusion_deriv.
df_milstein 1.0 Derivative-Free Milstein. Approximates derivatives numerically. Recommended for high accuracy without the math overhead.

📚 Advanced Usage

1. Derivative-Free Milstein

To get higher accuracy without calculating manually, use the derivative-free solver. It uses a finite-difference approximation inside the kernel.

results = integrate(sde, ..., method='df_milstein')

2. Correlated Noise (Multi-Dimensional)

PyIto natively handles correlated noise for systems like the Heston model. If your diffusion function returns a matrix, the solver infers a correlated structure.

  • Scalar Output: Single-factor noise.
  • Vector Output: Independent diagonal noise.
  • Matrix Output: Correlated noise (Diffusion Matrix such that ).

3. Memory Optimization

For large-scale Monte Carlo (e.g., 10 million paths), storing the full history is impossible. PyIto allows you to control output verbosity:

# Returns array of shape (Steps, Paths, Dims) - RAM Heavy
history = integrate(..., output='all')

# Returns array of shape (Paths, Dims) - RAM Efficient
terminal_values = integrate(..., output='final')

⚠️ Performance Note

PyIto is optimized to saturate your CPU.

  • Laptop Users: Ensure your OS power plan is set to "Best Performance". In "Power Saver" mode, operating systems often park high-performance cores, significantly throttling the parallel speedup.
  • Warm-up: The first call to integrate will take an extra 1-2 seconds while Numba compiles your functions. Subsequent runs will be instant.

🤝 Contributing

Contributions are welcome!

  1. Fork the repository.
  2. Create your feature branch.
  3. Install dev dependencies: pip install -e .[dev]
  4. Run tests: pytest tests/

📄 License

Distributed under the MIT License. See LICENSE for more information.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pyito-0.1.0.tar.gz (20.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pyito-0.1.0-py3-none-any.whl (11.8 kB view details)

Uploaded Python 3

File details

Details for the file pyito-0.1.0.tar.gz.

File metadata

  • Download URL: pyito-0.1.0.tar.gz
  • Upload date:
  • Size: 20.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.5

File hashes

Hashes for pyito-0.1.0.tar.gz
Algorithm Hash digest
SHA256 c9c93e8b844e25381b375718556c9546a054e6ebe830db8af297c7a52f23a849
MD5 a20a7204ccdb83c89550ca9b6dfd2863
BLAKE2b-256 31c8e5f688c23da9ad5f81760008674aef78d48bfd0e0c9aa64ff45ff5c61a93

See more details on using hashes here.

File details

Details for the file pyito-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: pyito-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 11.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.5

File hashes

Hashes for pyito-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 ee1bd0f09beac490bf11198d286685d598dae380df83181541971839c8f23ae3
MD5 67ba853696e4eb32dac1ddbd4c037c46
BLAKE2b-256 5e60d86ea5a60d3c7f2ec48f17444046a41623f2bea2049037ce9b7331c1961e

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page