Skip to main content

Modern Black, Black-Scholes, and Black-Scholes-Merton pricing and implied volatility with NumPy, PyTorch, and JAX backends.

Project description

fast-vollib icon

fast-vollib

Accelerated Black-Scholes pricing, implied volatility, and Greeks library with pluggable NumPy, PyTorch, and JAX backends.

PyPI version Python versions License: MIT Tests Docs

fast-vollib is an accelerated --- kernel-fused, optimized --- Python library for Black, Black-Scholes, and Black-Scholes-Merton option pricing, implied volatility solving, and Greeks — with pluggable NumPy, PyTorch, and JAX backends and a compatibility-first API modeled on py_vollib_vectorized.


Features

  • Three pricing models — Black-76, Black-Scholes, Black-Scholes-Merton
  • Vectorized IV solver — Halley's method with compiled bisection fallback
  • Full Greeks — delta, gamma, theta, rho, vega; all five in one get_all_greeks call
  • Pluggable backends — NumPy (default), PyTorch (CUDA), JAX (JIT)
  • Automatic backend selection — prefers CUDA > JAX > NumPy
  • DataFrame-nativeprice_dataframe works directly on a pandas.DataFrame
  • Drop-in compatibilitypatch_py_vollib() and patch_py_vollib_vectorized() patch the scalar and vectorized upstream namespaces

Install

pip install fast-vollib

Optional extras:

pip install "fast-vollib[torch]"       # PyTorch backend
pip install "fast-vollib[jax]"         # JAX backend
pip install "fast-vollib[torch,jax]"   # both backends

Development snapshots from TestPyPI

Stable releases are published from Git tags to PyPI. Development snapshots are available via to TestPyPI versions such as 0.1.2.dev3.

pip install --pre \
  --index-url https://test.pypi.org/simple/ \
  --extra-index-url https://pypi.org/simple/ \
  fast-vollib

Use the dev TestPyPI channel only if you want nightly or dev builds only.


Quick start

import numpy as np
import fast_vollib

# Price a batch of European options
prices = fast_vollib.fast_black_scholes(
    flag=np.array(["c", "c", "p"]),
    S=100.0,
    K=np.array([95, 100, 105]),
    t=0.25,
    r=0.05,
    sigma=0.20,
    return_as="numpy",
)

# Recover implied volatility
iv = fast_vollib.fast_implied_volatility(
    price=prices,
    S=100.0,
    K=np.array([95, 100, 105]),
    t=0.25,
    r=0.05,
    flag=np.array(["c", "c", "p"]),
    return_as="numpy",
)

# All Greeks in one call (returns a pandas DataFrame)
greeks = fast_vollib.get_all_greeks(
    flag=np.array(["c", "p"]),
    S=100.0, K=100.0, t=0.25, r=0.05, sigma=0.20,
)

DataFrame helper

import pandas as pd

df = pd.DataFrame({
    "flag": ["c", "p"],
    "S": [100, 100],
    "K": [100, 100],
    "t": [0.25, 0.25],
    "r": [0.05, 0.05],
    "sigma": [0.20, 0.20],
})

result = fast_vollib.price_dataframe(
    df,
    flag_col="flag",
    underlying_price_col="S",
    strike_col="K",
    annualized_tte_col="t",
    riskfree_rate_col="r",
    sigma_col="sigma",
)
# Columns: Price, delta, gamma, theta, rho, vega

Drop-in py_vollib_vectorized replacement

The py_vollib_vectorized API can be kept intact in your codebase via the included monkey-patching helper.

import fast_vollib
fast_vollib.patch_py_vollib_vectorized()

# All py_vollib_vectorized imports now use fast_vollib transparently
from py_vollib_vectorized import vectorized_black_scholes

Backend selection

# Automatic (CUDA > JAX > NumPy)
fast_vollib.get_backend()        # e.g. "torch"

# Set for the session
fast_vollib.set_backend("numpy")

# Override per call
price = fast_vollib.fast_black_scholes(..., backend="jax")

backend="auto" resolution order:

  1. Explicit backend= kwarg
  2. fast_vollib.set_backend() override
  3. FAST_VOLLIB_BACKEND environment variable
  4. torch when torch.cuda.is_available()
  5. jax when installed
  6. numpy

Public API

from fast_vollib import (
    # Pricing
    fast_black,
    fast_black_scholes,
    fast_black_scholes_merton,
    # Implied volatility
    fast_implied_volatility,
    fast_implied_volatility_black,
    # Greeks (compatibility aliases)
    vectorized_delta,
    vectorized_gamma,
    vectorized_rho,
    vectorized_theta,
    vectorized_vega,
    get_all_greeks,
    # Utilities
    price_dataframe,
    patch_py_vollib,
    patch_py_vollib_vectorized,
    get_backend,
    set_backend,
)

Full documentation: raeidsaqur.github.io/fast-vollib


Development

git clone https://github.com/raeidsaqur/fast-vollib.git
cd fast-vollib

uv sync --all-groups --extra torch --extra jax   # all deps + both backends
uv run pytest               # run tests
ruff check . --fix          # lint
ruff format .               # format
uv run mkdocs serve         # local docs server → http://localhost:8000

Release model

  • Tagged releases like v0.1.2 publish stable builds to PyPI.
  • PRs on main publish development snapshots to TestPyPI.
  • The package version is derived from Git tags with hatch-vcs, so version strings are no longer maintained manually in source files for each release

Contributing

Contributions are welcome. Please open an issue before sending a large pull request to discuss the change. See CONTRIBUTING.md if present, or follow the standard fork-and-PR workflow.


License

MIT — see LICENSE.

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

fast_vollib-0.1.4.tar.gz (363.7 kB view details)

Uploaded Source

Built Distribution

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

fast_vollib-0.1.4-py3-none-any.whl (66.1 kB view details)

Uploaded Python 3

File details

Details for the file fast_vollib-0.1.4.tar.gz.

File metadata

  • Download URL: fast_vollib-0.1.4.tar.gz
  • Upload date:
  • Size: 363.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for fast_vollib-0.1.4.tar.gz
Algorithm Hash digest
SHA256 fcbda6c26f24c721967acac1292ff4f859d317034e548fa7a9f4dc062743d2f4
MD5 5e180c39e109ec62827dd4ec411c44a8
BLAKE2b-256 3a3d577d75b1c23cff1c60a17f6d162c73aa0007c30b372474dad0a670b6dda8

See more details on using hashes here.

Provenance

The following attestation bundles were made for fast_vollib-0.1.4.tar.gz:

Publisher: release.yml on raeidsaqur/fast-vollib

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file fast_vollib-0.1.4-py3-none-any.whl.

File metadata

  • Download URL: fast_vollib-0.1.4-py3-none-any.whl
  • Upload date:
  • Size: 66.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for fast_vollib-0.1.4-py3-none-any.whl
Algorithm Hash digest
SHA256 0b1f2b30f06f642096e01835ffa2a2eb94828b6937ab14c83f4fab8cdb8838ca
MD5 883104b44aa3a6433a6d040db286e162
BLAKE2b-256 14822ff97ba6ec4b2072f47429efab92b8646903f2515399000e2505b4f83026

See more details on using hashes here.

Provenance

The following attestation bundles were made for fast_vollib-0.1.4-py3-none-any.whl:

Publisher: release.yml on raeidsaqur/fast-vollib

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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