Hi all,
For each version of numba
, is there an easy way to determine what the corresponding minimum supported version of python
, numpy
and scipy
would be?
Hi all,
For each version of numba
, is there an easy way to determine what the corresponding minimum supported version of python
, numpy
and scipy
would be?
I usually get that info (sans scipy) from the .whl file, something like
if pip_file.endswith('.whl'):
with zipfile.ZipFile(pip_file) as pip_content:
pip_meta_file = next(_ for _ in pip_content.namelist() if _.endswith('.dist-info/METADATA'))
pip_meta = pip_content.read(pip_meta_file)
for _ in sorted(re.findall(r'^(\S+:\s+.+)$', pip_meta.decode(), re.MULTILINE)):
print(_)
snipped output
Requires-Dist: importlib-metadata ; python_version < “3.9”
Requires-Dist: llvmlite (<0.40,>=0.39.0dev0)
Requires-Dist: numpy (<1.24,>=1.18)
Requires-Dist: setuptools
Requires-Python: >=3.7
Summary: compiling Python code using LLVM
Version: 0.56.4
This might be useful too:
https://numba.readthedocs.io/en/stable/user/installing.html#version-support-information
Thank you all for your input. I ended up writing a small Python script that determines the minimum versions based on the following logic:
python
version to support (e.g., python 3.8
)numba
version that supports the minimum python
version based on this table (e.g., numba 0.57.0
) AND also get the corresponding minimum numpy
version (e.g., numpy 1.21
)scipy
version that supports the minimum python
and numpy
versions based on this table but note that the python
and numpy
versions supported are in ranges and your minimum versions are likely captured within (i.e., in the middle) of the rangeAll of this is handled within the aforementioned script.
import pandas as pd
from packaging.specifiers import SpecifierSet
from packaging.version import Version
def check_compatibility(row, min_python, min_numpy):
"""
Determines the Python and NumPy version compatibility
"""
python_compatible = min_python in (row.MIN_PYTHON_SPEC & row.MAX_PYTHON_SPEC)
numpy_compatible = min_numpy in (row.MIN_NUMPY_SPEC & row.MAX_NUMPY_SPEC)
return python_compatible & numpy_compatible
MIN_PYTHON = "3.8" # Change this
df = (
pd.read_html(
"https://numba.readthedocs.io/en/stable/user/installing.html#version-support-information" # noqa
)[0]
.dropna()
.query(f'Python.str.startswith("{MIN_PYTHON}")', engine="python")
.pipe(lambda df: df.assign(NumPy=df.NumPy.str.split().str[0]))
.iloc[-1]
)
MIN_NUMBA = df.Numba
MIN_NUMPY = df.NumPy
df = (
pd.read_html("https://docs.scipy.org/doc/scipy/dev/toolchain.html#numpy")[1]
.replace({".x": ""}, regex=True)
.rename(columns=lambda x: x.replace(" ", "_"))
.query('`Python_versions`.str.contains("2.7") == False')
.pipe(
lambda df: df.assign(
MIN_PYTHON_SPEC=df.Python_versions.str.split(",").str[0].apply(SpecifierSet)
)
)
.pipe(
lambda df: df.assign(
MAX_PYTHON_SPEC=df.Python_versions.str.split(",").str[1].apply(SpecifierSet)
)
)
.pipe(
lambda df: df.assign(
MIN_NUMPY_SPEC=df.NumPy_versions.str.split(",").str[0].apply(SpecifierSet)
)
)
.pipe(
lambda df: df.assign(
MAX_NUMPY_SPEC=df.NumPy_versions.str.split(",").str[1].apply(SpecifierSet)
)
)
.assign(
COMPATIBLE=lambda row: row.apply(
check_compatibility, axis=1, args=(Version(MIN_PYTHON), Version(MIN_NUMPY))
)
)
.query("COMPATIBLE == True")
.iloc[-1]
)
MIN_SCIPY = df.SciPy_version
print(
f"python: {MIN_PYTHON}\nnumba: {MIN_NUMBA}\nnumpy: {MIN_NUMPY}\nscipy: {MIN_SCIPY}"
)
For python 3.8
, this will print out the following minimum dependencies:
python: 3.8
numba: 0.57.0
numpy: 1.21
scipy: 1.10
Can you change the script to retrieve the latest patch release for Numba. In the above I think it would be 0.57.1 rather than 0.57.0.