SayDeploy Plain comparisons of developer tools, AI coding tools included

Bottleneck vs Cython in 2026

Bottleneck, Cython and PyOverdrive set side by side: what each does, licences and prices, install steps, and questions to ask before you pick one.

By SayDeploy ยท

SayDeploy is published by LunarWerx, which makes some of the tools compared here.

Bottleneck is a collection of fast NumPy array functions written in C [1]. Cython is an optimising static compiler for Python and the extended Cython language [2]. PyOverdrive patches supported NumPy functions after one call so existing code uses faster paths [3].

OptionLicencePricePython versionInstall
BottleneckSimplified BSD [1]not publishedPython >3.9 and NumPy 1.16.0+ for a source install [1]Binary wheels on PyPI for the most common platforms [1]
CythonApache 2.0 [2]not publishedCython 3.0.x supports Python 2.7 and 3.5 and later [2]not published
PyOverdriveMIT [3]not publishedPython 3.12 or newer [3]pip straight from the GitHub repository [3]

The short answer

Bottleneck is a collection of fast NumPy array functions written in C [1]. Cython is an optimising static compiler for both the Python programming language and the extended Cython programming language [2]. PyOverdrive lets a developer call one function that patches supported NumPy functions, so existing code uses faster paths [3].

On needs, Bottleneck's page says arrays with the data types int32, int64, float32 and float64 are accelerated [1]. Cython's page says it covers compiling Python and its own extended language [2]. PyOverdrive's claims cover faster paths for supported NumPy calls, with stock NumPy used for calls it does not support [3].

What Bottleneck and Cython are built for

Bottleneck. Its own page calls it a collection of fast NumPy array functions written in C [1]. Its page says arrays with the data types int32, int64, float32 and float64 are accelerated [1]. It comes with a built-in benchmark suite [1]. It provides binary wheels on PyPI for the most common platforms [1]. It is distributed under a Simplified BSD license [1].

Cython. Its page describes it as an optimising static compiler for both the Python programming language and the extended Cython programming language [2]. The latest stable release is 3.2.9, released 2026-07-24 [2]. Cython 3.0.x supports Python 2.7 and 3.5 and later [2]. Support for the CPython Limited API and free-threading CPython is available in Cython 3.1 but considered experimental [2]. It is freely available under the open source Apache 2.0 License [2].

The sources given here say nothing more about either tool, so check their own pages for anything else you need.

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 faster path runs only when a check confirms the input is in its measured range, and anything else, or a faster path that raises an error, goes to stock NumPy [3].

The covered work includes threaded paths for the NumPy functions np.sin, cos, tan, exp, log, log10 and tanh on C-contiguous float64 and float32 arrays [3]. They run only above a minimum array size, set for each function and data type between 3e5 and 3e6 elements [3]. It also covers np.linalg.qr on large stacks of 3x3 matrices (benchmarked at 10k), using a vectorized closed-form Householder method [3]. For np.linalg.eigvalsh it has closed-form paths for 2x2 and 3x3 matrices in float batches above a set size [3]. Large np.einsum calls, which combine arrays in one expression, are handed to NumPy's own step-ordering option, which picks a cheaper order for the work, once they pass a measured size [3]. np.isin, which checks whether values appear in a list, can use hash-set membership instead of the default method on one-dimensional arrays of text (NumPy's StringDType) or of general Python objects [3].

You can see which path a call would take, and why, with pyoverdrive.explain(), without running the call [3]. Calling pyoverdrive.disable() restores the original NumPy functions [3].

Pricing and fees

Bottleneck is distributed under a Simplified BSD license [1]. Its sources here do not state a price, so a price is not published here.

Cython is freely available under the open source Apache 2.0 License [2].

PyOverdrive is open source under the MIT License [3]. Its claims state no price and no paid plan, so a price is not published here.

For all three, the sources given do not describe paid support, so check each project's own pages if you need that.

Setting it up and daily use

Bottleneck. It provides binary wheels on PyPI for the most common platforms [1]. A source install requires Python >3.9 and NumPy 1.16.0+ [1]. Bottleneck comes with a benchmark suite [1]. The sources here say nothing more about daily use.

Cython. The latest stable release is 3.2.9 [2], and Cython 3.0.x supports Python 2.7 and 3.5 and later [2]. The sources here give no install command and no description of how it is used day to day.

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]. Its version is 1.0.0 and its status is Beta [3].

Daily, you call pyoverdrive.enable() once [3]. python -m pyoverdrive --selfcheck compares every faster path with stock NumPy on your own machine [3]. python -m pyoverdrive --calibrate re-times the threaded paths on your CPU and switches off any that do not pay there [3]. python -m pyoverdrive --demo times the headline operations with stock NumPy and with PyOverdrive on your machine, in about 20 seconds [3].

Things to check before you choose

Ask what kind of work you need sped up. Bottleneck's page speaks of fast NumPy array functions [1], Cython's page speaks of a compiler for Python and its extended language [2], and PyOverdrive's claims speak of supported NumPy calls [3].

Check your array types. Bottleneck's page says arrays of int32, int64, float32 and float64 are accelerated [1].

Check your Python version. PyOverdrive needs Python 3.12 or newer [3], and Bottleneck's source install lists Python >3.9 [1]. For Cython, check its page for the version you run.

Check maturity. PyOverdrive is version 1.0.0 and in Beta [3]. Cython's latest stable release is 3.2.9 [2].

Check how the result compares on your own data. Bottleneck ships a benchmark suite [1], and PyOverdrive has a check against stock NumPy on your machine [3].

How to choose

If you want a collection of fast NumPy array functions written in C, Bottleneck's page describes that [1].

If you want a compiler for Python and the extended Cython language, Cython's page describes that [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 confirm results against stock NumPy on your own machine, PyOverdrive's claims describe a check for that [3].

If you want a built-in benchmark suite, Bottleneck's page says it has one [1].

If you want a permissive open source licence, Bottleneck uses Simplified BSD [1], Cython uses Apache 2.0 [2] and PyOverdrive uses MIT [3].

Frequently asked questions

Is Bottleneck free to use?

Bottleneck is distributed under a Simplified BSD license [1]. The facts given here do not state a price or any paid plan, so a price is not published here. Check the project's own pages if you need more detail on costs, support or terms before relying on it.

Is Cython free and open source?

Cython is freely available under the open source Apache 2.0 License [2]. The facts here state no other price, so check its own pages for anything more.

Which array types does Bottleneck accelerate?

Its page says arrays with the data types int32, int64, float32 and float64 are accelerated [1]. If your arrays use other types, check Bottleneck's own pages.

Which Python versions do Bottleneck, Cython and PyOverdrive need?

Bottleneck's source install lists Python >3.9 and NumPy 1.16.0+ [1]. Cython 3.0.x supports Python 2.7 and 3.5 and later [2]. PyOverdrive needs Python 3.12 or newer [3]. Check each project's pages for the exact release you plan to install.

How do you install Bottleneck, Cython and PyOverdrive?

Bottleneck provides binary wheels on PyPI for the most common platforms [1]. PyOverdrive is installed with pip straight from the GitHub repository [3]. The facts here give no install steps for Cython, only that its latest stable release is 3.2.9 [2], so check its own pages.

It is open source under the MIT License. [3]

Try PyOverdrive

Sources

  1. Bottleneck, github.com/pydata/bottleneck, read 2026-10-07
  2. Cython, cython.org, read 2026-10-07
  3. PyOverdrive's own description of itself (the product of this site's publisher)

Related comparisons