---
{"title": "Bottleneck vs JAX in 2026: Pricing, Setup and Features", "description": "Bottleneck and JAX side by side on what each does, licence and price, install steps and what to check, with PyOverdrive as a third NumPy option.", "url": "https://saydeploy.com/bottleneck-vs-jax/", "date": "2026-10-10"}
---
Bottleneck and JAX side by side on what each does, licence and price, install steps and what to check, with PyOverdrive as a third NumPy option.

Bottleneck gives a developer a set of NumPy array functions written in C [^1]. JAX uses XLA to compile and scale NumPy programs on TPUs, GPUs and other hardware accelerators [^2]. PyOverdrive patches supported NumPy functions when you call pyoverdrive.enable(), so existing code uses faster paths [^3]. None of the three sources given here publishes a price.

| Option | Licence | Price | Install |
|---|---|---|---|
| Bottleneck | Simplified BSD license [^1] | Not published | Binary wheels on PyPI for the most common platforms [^1]; source install needs Python >3.9 and NumPy 1.16.0+ [^1] |
| JAX | Apache-2.0 [^2] | Not published | CPU: pip install -U jax [^2] |
| PyOverdrive | MIT License [^3] | Not published | pip straight from the GitHub repository [^3]; needs Python 3.12 or newer [^3] |

## The short answer

Bottleneck gives a developer a set of fast NumPy array functions written in C [^1]. JAX compiles and scales NumPy programs on TPUs, GPUs and other hardware accelerators [^2]. PyOverdrive swaps in faster paths for supported NumPy functions once you call pyoverdrive.enable() [^3].

On needs, Bottleneck's page says arrays of int32, int64, float32 and float64 are accelerated [^1], and that it comes with a benchmark suite [^1]. JAX's page says it supports reverse-mode and forward-mode differentiation, composable to any order [^2]. PyOverdrive includes a command that compares every fast path with stock NumPy on your machine [^3].

## What Bottleneck and JAX are built for

**Bottleneck.** Its own page calls it a collection of fast NumPy array functions written in C [^1]. Only arrays with the data types int32, int64, float32 and float64 are accelerated [^1]. It comes with a benchmark suite [^1]. It is distributed under a Simplified BSD license [^1].

**JAX.** Its page says JAX uses XLA to compile and scale your NumPy programs on TPUs, GPUs and other hardware accelerators [^2]. It supports reverse-mode differentiation, also called backpropagation, through jax.grad, and forward-mode differentiation too, composable to any order [^2]. The page describes it as a research project, not an official Google product [^2]. It is licensed under Apache-2.0 [^2].

## What PyOverdrive is built for

PyOverdrive is made by the team that publishes this site.

Calling pyoverdrive.enable() patches supported NumPy functions so your existing code uses faster paths, and calls it does not support run on stock NumPy [^3]. A fast path runs only when a check confirms the input is in its measured range, and anything else goes to stock NumPy [^3].

Threaded paths cover np.sin, cos, tan, exp, log, log10 and tanh on C-contiguous float64 and float32 arrays, above a size floor of 3e5 to 3e6 elements calibrated per operation and data type [^3]. For np.linalg.qr on large batches of small 3x3 matrices, and np.linalg.eigvalsh on batches of small 2x2 and 3x3 float matrices above a size threshold, it uses shortcut formulas made for those small sizes [^3]. Large np.einsum calls, once they pass a measured size, are sent through NumPy's own option that plans the order of the work [^3]. np.isin on one-dimensional arrays of text or general objects can use a lookup set instead of the default method [^3].

pyoverdrive.explain() tells you which path a call would take and why, without running the call [^3].

## Pricing and fees

Bottleneck is distributed under a Simplified BSD license [^1]. The Bottleneck sources given here state no price, so a price is not published here.

JAX is licensed under Apache-2.0 [^2]. The JAX sources given here state no price either, so a price is not published here. Cloud TPU or GPU hardware you might run it on is a separate matter that these sources do not cover.

PyOverdrive is open source under the MIT License [^3]. Its sources state no price and no paid tier, so a price is not published here.

In short, the sources name licences for all three and no dollar amounts for any. Check each project's own pages before you rely on that.

## Setting it up and daily use

**Bottleneck.** It provides binary wheels on PyPI, the Python package index, for the most common platforms [^1]. A source install requires Python >3.9 and NumPy 1.16.0+ [^1]. For daily use, its page says it comes with a benchmark suite [^1]. The sources here say nothing more about routine use.

**JAX.** The CPU install command is pip install -U jax [^2]. The sources here say nothing about installing for TPUs or GPUs, or about daily use.

**PyOverdrive.** You install it with pip straight from the GitHub repository [^3]. It needs Python 3.12 or newer [^3]. The package is marked OS independent, and the test suite has been run on Windows and on Linux x86-64 [^3]. The version is 1.0.0 and its status is Beta [^3].

Daily, you call pyoverdrive.enable() once [^3]. python -m pyoverdrive --demo times the headline operations with stock NumPy and with PyOverdrive on your machine, in about 20 seconds [^3]. python -m pyoverdrive --calibrate re-times the threaded paths on your CPU and switches off any that do not pay there [^3]. You can turn off one fast path with disable_path() or PYOVERDRIVE_DISABLE, or call pyoverdrive.disable() to restore the original NumPy functions [^3].

## Things to check before you choose

Ask what kind of work you need faster: calls to NumPy array functions, or whole programs compiled for accelerators. Bottleneck's page speaks of fast NumPy array functions [^1], and JAX's page speaks of compiling NumPy programs for TPUs, GPUs and other hardware [^2].

Check your data types. Bottleneck accelerates int32, int64, float32 and float64 arrays only [^1].

Check your Python and NumPy versions. Bottleneck's source install lists Python >3.9 and NumPy 1.16.0+ [^1], and PyOverdrive needs Python 3.12 or newer [^3].

Check maturity. JAX's page calls it a research project, not an official Google product [^2], and PyOverdrive's status is Beta [^3].

Check how results are verified on your hardware. PyOverdrive offers a self check against stock NumPy [^3]. For the other two, the facts here do not say, so look at their own pages.

## How to choose

If you want fast NumPy array functions written in C, Bottleneck's page describes that [^1].

If you want a built-in benchmark suite, Bottleneck's page says it comes with one [^1].

If you want to compile and scale NumPy programs on TPUs, GPUs or other accelerators, JAX's page describes that [^2].

If you want differentiation through jax.grad and forward-mode differentiation, JAX's page says it supports both [^2].

If you want existing NumPy code to use faster paths after one call, with unsupported calls running on stock NumPy, PyOverdrive's claims describe that [^3].

If you want to see which path a call would take and why, or to switch a path off, PyOverdrive's claims describe both [^3] [^3].

## Frequently asked questions

### Does Bottleneck cost anything?

Bottleneck is distributed under a Simplified BSD license [^1]. The sources given here state no price for it, so a price is not published here. Check the project's own pages if you need more detail, and confirm the licence terms fit how you plan to use it.

### How do you install JAX on a CPU?

The CPU install command on JAX's page is pip install -U jax [^2]. The sources given here do not say how to install it for TPUs, GPUs or other accelerators, so check JAX's own pages for those. JAX is licensed under Apache-2.0 [^2].

### Which array types does Bottleneck speed up?

Bottleneck's page says only arrays with data type int32, int64, float32 and float64 are accelerated [^1]. If your data uses other types, check the project's own pages for how they are handled before choosing it.

### Can JAX do differentiation as well as compile NumPy programs?

JAX's page says it uses XLA to compile and scale NumPy programs on TPUs, GPUs and other hardware accelerators [^2]. It also supports reverse-mode differentiation through jax.grad and forward-mode differentiation, composable to any order [^2]. The page calls it a research project, not an official Google product [^2].

### What does PyOverdrive need, and what happens to calls it does not support?

PyOverdrive needs Python 3.12 or newer [^3] and installs with pip straight from the GitHub repository [^3]. Calls it does not support run on stock NumPy [^3]. Its version is 1.0.0 and its status is Beta [^3].

It is open source under the MIT License. [^3] - [Visit PyOverdrive](/go/bottleneck-vs-jax)

## Sources

[^1]: Bottleneck, github.com/pydata/bottleneck, read 2026-10-07 (https://github.com/pydata/bottleneck)
[^2]: JAX, github.com/jax-ml/jax, read 2026-10-07 (https://github.com/jax-ml/jax)
[^3]: PyOverdrive's own description of itself (the product of this site's publisher) (/go/bottleneck-vs-jax)
