From 6c314d27f350e0bc2a9206ad33b10b3ccf1d1282 Mon Sep 17 00:00:00 2001 From: Sofie Van Landeghem Date: Tue, 16 Jan 2024 11:34:48 +0100 Subject: [PATCH 1/3] Fix strings2array (#918) * remove slow marker from basic tagger test * fix strings2array * isort --- thinc/layers/strings2arrays.py | 7 ++++--- thinc/tests/layers/test_basic_tagger.py | 1 - 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/thinc/layers/strings2arrays.py b/thinc/layers/strings2arrays.py index ed40b1e88..eba2c983d 100644 --- a/thinc/layers/strings2arrays.py +++ b/thinc/layers/strings2arrays.py @@ -1,3 +1,4 @@ +from ctypes import c_uint64 from typing import Callable, List, Sequence, Tuple from murmurhash import hash_unicode @@ -17,9 +18,9 @@ def strings2arrays() -> Model[InT, OutT]: def forward(model: Model[InT, OutT], Xs: InT, is_train: bool) -> Tuple[OutT, Callable]: - hashes = model.ops.asarray2i( - [[hash_unicode(word) for word in X] for X in Xs], dtype="int32" - ) + # Cast 32-bit (signed) integer to 64-bit unsigned, since such casting + # is deprecated in NumPy. + hashes = [[c_uint64(hash_unicode(word)).value for word in X] for X in Xs] hash_arrays = [model.ops.asarray1i(h, dtype="uint64") for h in hashes] arrays = [model.ops.reshape2i(array, -1, 1) for array in hash_arrays] diff --git a/thinc/tests/layers/test_basic_tagger.py b/thinc/tests/layers/test_basic_tagger.py index 855a6d6ad..3bc772940 100644 --- a/thinc/tests/layers/test_basic_tagger.py +++ b/thinc/tests/layers/test_basic_tagger.py @@ -60,7 +60,6 @@ def get_shuffled_batches(Xs, Ys, batch_size): yield list(batch_X), list(batch_Y) -@pytest.mark.slow @pytest.mark.parametrize( ("depth", "width", "vector_width", "nb_epoch"), [(2, 32, 16, 5)] ) From 307a4f83465c132f0a4d6d6af83c029d9eaea3bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dani=C3=ABl=20de=20Kok?= Date: Wed, 7 Feb 2024 15:37:29 +0100 Subject: [PATCH 2/3] Fix `cupy.cublas` import (#921) * Fix `cupy.cublas` import Reported in #920. * Update mypy to work with recent Torch versions * CI: Do not run MyPy on Python 3.6/3.7. --- .github/workflows/tests.yml | 4 +++- requirements.txt | 2 +- thinc/backends/cupy_ops.py | 4 ++-- thinc/compat.py | 3 +++ thinc/shims/torchscript.py | 2 +- 5 files changed, 10 insertions(+), 5 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 035be0baf..1ed106d59 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -87,7 +87,9 @@ jobs: - name: Run mypy run: python -m mypy thinc --no-implicit-reexport - if: matrix.python_version != '3.6' + if: | + matrix.python_version != '3.6' && + matrix.python_version != '3.7' - name: Delete source directory run: rm -rf thinc diff --git a/requirements.txt b/requirements.txt index b7682e738..3e3c9901e 100644 --- a/requirements.txt +++ b/requirements.txt @@ -25,7 +25,7 @@ pytest-cov>=2.7.0,<5.0.0 coverage>=5.0.0,<8.0.0 mock>=2.0.0,<3.0.0 flake8>=3.5.0,<3.6.0 -mypy>=1.0.0,<1.1.0; python_version >= "3.7" +mypy>=1.5.0,<1.6.0; platform_machine != "aarch64" and python_version >= "3.8" types-mock>=0.1.1 types-contextvars>=0.1.2; python_version < "3.7" types-dataclasses>=0.1.3; python_version < "3.7" diff --git a/thinc/backends/cupy_ops.py b/thinc/backends/cupy_ops.py index 1e1e5b92b..472b6c542 100644 --- a/thinc/backends/cupy_ops.py +++ b/thinc/backends/cupy_ops.py @@ -1,7 +1,7 @@ import numpy from .. import registry -from ..compat import cupy, cupyx +from ..compat import cublas, cupy, cupyx from ..types import DeviceTypes from ..util import ( is_cupy_array, @@ -257,7 +257,7 @@ def clip_gradient(self, gradient, threshold): # implementation. def frobenius_norm(X): X_vec = X.reshape(-1) - return cupy.cublas.nrm2(X_vec) + return cublas.nrm2(X_vec) grad_norm = cupy.maximum(frobenius_norm(gradient), 1e-12) gradient *= cupy.minimum(threshold, grad_norm) / grad_norm diff --git a/thinc/compat.py b/thinc/compat.py index 5d600796a..c7b47cbe6 100644 --- a/thinc/compat.py +++ b/thinc/compat.py @@ -4,9 +4,11 @@ try: # pragma: no cover import cupy + import cupy.cublas import cupyx has_cupy = True + cublas = cupy.cublas cupy_version = Version(cupy.__version__) try: cupy.cuda.runtime.getDeviceCount() @@ -20,6 +22,7 @@ else: cupy_from_dlpack = cupy.fromDlpack except (ImportError, AttributeError): + cublas = None cupy = None cupyx = None cupy_version = Version("0.0.0") diff --git a/thinc/shims/torchscript.py b/thinc/shims/torchscript.py index 6c05c8a9b..9d413f93a 100644 --- a/thinc/shims/torchscript.py +++ b/thinc/shims/torchscript.py @@ -30,7 +30,7 @@ class TorchScriptShim(PyTorchShim): def __init__( self, - model: Optional["torch.ScriptModule"], + model: Optional["torch.jit.ScriptModule"], config=None, optimizer: Any = None, mixed_precision: bool = False, From 3aae298d32adc167ac57e0791a5a8c0544b1e8a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dani=C3=ABl=20de=20Kok?= Date: Wed, 7 Feb 2024 16:14:19 +0100 Subject: [PATCH 3/3] Set version to v8.2.3 (#922) --- thinc/about.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/thinc/about.py b/thinc/about.py index 394a8253e..e7455c55b 100644 --- a/thinc/about.py +++ b/thinc/about.py @@ -1,2 +1,2 @@ -__version__ = "8.2.2" +__version__ = "8.2.3" __release__ = True