Closed matthewfeickert closed 1 year ago
@agoose77 has suggested
that import should probably be behind a
if TYPE_CHECKING
guard, or bump the minimum NumPy version.
I think it is going to have to be adding a lower bound to NumPy as if the lines
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from numpy.typing import ArrayLike, DTypeLike, NBitBase, NDArray
are added to pyhf/tensor/numpy_backend.py
then things will still fail with
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/venv/lib/python3.8/site-packages/pyhf/__init__.py", line 3, in <module>
from pyhf.tensor.manager import get_backend
File "/venv/lib/python3.8/site-packages/pyhf/tensor/manager.py", line 49, in <module>
_default_backend: TensorBackend = BackendRetriever.numpy_backend()
File "/venv/lib/python3.8/site-packages/pyhf/tensor/__init__.py", line 20, in __getattr__
from pyhf.tensor.numpy_backend import numpy_backend
File "/venv/lib/python3.8/site-packages/pyhf/tensor/numpy_backend.py", line 17, in <module>
T = TypeVar("T", bound=NBitBase)
NameError: name 'NBitBase' is not defined
given
This isn't great (but also not terrible) in the grand scheme of giving control to scipy
as scipy
v1.5.1
was released 2020-07-04 (happy Higgspendence day :tada:) and numpy
v1.21.0
was released on 2021-06-22. So at this point in 2023-05 decently old, but at the same time a year after the oldest supported SciPy version. This gets worse if we were to additionally backport this as a fix to a v0.7.x
release as
and scipy
v1.2.0
was released in 2018.
You can make your TypeVar use strings (bound="NBitBase"
) to fix this particular problem!
You can make your TypeVar use strings (
bound="NBitBase"
) to fix this particular problem!
Ah, yes, right again! :smile: I really need to get better at typing :sweat_smile:
@kskovpen This is now guarded against in pyhf
v0.7.2
which was just released to PyPI.
Summary
@kskovpen noted on the IRIS-HEP Slack that they were having issues with older NumPy versions and
pyhf
v0.7.1
:@agoose77 correctly noted that
numpy.typing
wasn't introduced untilnumpy
v1.21.0
which is the version thatpyhf
tests against for our lower boundshttps://github.com/scikit-hep/pyhf/blob/22c1699f044f798f2d0fe904d336f3ce9ee50b92/tests/constraints.txt#L9
but that we don't explicitly enforce a lower bound as we defer to
scipy
to do that.https://github.com/scikit-hep/pyhf/blob/22c1699f044f798f2d0fe904d336f3ce9ee50b92/pyproject.toml#L51-L53
Though the lowest constraints possible on
numpy
come from the lower bound onscipy
which forscipy
v1.5.1
isnumpy>=1.14.5
:though the oldest Python 3.8
numpy
with wheels isv1.17.3
and indeed this problem becomes reproducible thenand stays that way until
numpy
v1.21.0
(which again is wherenumpy.typing
got added) is usedSo this
https://github.com/scikit-hep/pyhf/blob/22c1699f044f798f2d0fe904d336f3ce9ee50b92/src/pyhf/tensor/numpy_backend.py#L8
should be guarded against more.
@agoose77 has suggested
OS / Environment
Steps to Reproduce
File Upload (optional)
No response
Expected Results
For
pyhf
to properly enforce lower bounds.Actual Results
pyhf
allows for installation ofnumpy
versions beforenumpy.typing
was introduced.pyhf Version
Code of Conduct