Skip to main content

NumPy version information that type-checkers understand

Project description

numpy-typing-compat

NumPy version information that type-checkers understand

release typed license NumPy

Overview

This package provides version-specific boolean constants that allow library authors to write NumPy-version-dependent static type annotations. Similar to how you might use if sys.version_info >= (3, 12): for Python version checks, numpy-typing-compat enables static type-checkers to understand which NumPy version is being used and apply appropriate type annotations.

Use Case

This package is particularly useful for libraries that need to support multiple NumPy versions, for example because they follow SPEC 0. However, there may have been changes in NumPy that affect type annotations. For instance, the numpy.exceptions module was introduced in NumPy 1.25, and contains the exceptions that were previously in the global numpy namespace. In NumPy 2.0, these exceptions were removed from the global namespace. So if you support <1.25 and also >=2.0, you will need to conditionally import these exceptions to ensure compatibility across versions.

from numpy_typing_compat import NUMPY_GE_1_25

if NUMPY_GE_1_25:
    from numpy.exceptions import AxisError
else:
    from numpy import AxisError

Type checkers like mypy, pyright, and basedpyright understand these patterns and will apply the correct type annotations based on the installed NumPy version.

Installation

pip install numpy-typing-compat

The package automatically selects the appropriate version constants based on your installed NumPy version. It does so by requiring a specific version of NumPy in its pyproject.toml file, so that your package manager will install the correct version of numpy-typing-compat that matches the NumPy version you have installed.

For example, if you have numpy==2.1.3 pinned in your pyproject.toml, and you run uv add numpy-typing-compat, it will install numpy-typing-compat==2.1.*. That specific version has NUMPY_GE_2_1 = True, and NUMPY_GE_2_2 = False set.

Note that numpy-typing-compat does not import numpy, and instead relies on the package manager to install the correct version of numpy-typing-compat that matches the installed NumPy version.

Reference

Array API

Additionally, the package provides a numpy_typing_compat.array_api namespace that's a re-export of the numpy.array_api module on numpy < 2.0, or the main numpy module on numpy >= 2.0. Note that the numpy.array_api module was introduced in numpy >= 1.23, so it isn't available in numpy-typing-compat==1.22.*.

numpy.long

NumPy 2.0 introduced the new long and ulong scalar types, which are not available in numpy < 2.0, and instead went by the names int_ and uint (which in numpy >= 2.0 are aliases for intp and uintp). If you need to support both NumPy versions, you can use the long and ulong types from numpy_typing_compat, which on numpy < 2.0 are aliases for np.int_ and np.uint, and on numpy >= 2.0 are re-exports of np.long and np.ulong.

numpy.dtypes.StringDType

In NumPy 2.0, the numpy.dtypes.StringDType was introduced, but it wasn't until NumPy 2.1 that it was also available in the numpy stubs. The numpy_typing_compat.StringDType is a re-export of numpy.dtypes.StringDType on numpy >= 2.1, and an alias of np.dtype[Never] on numpy < 2.1. This allows type checkers to also accept StringDType as a valid type on numpy == 2.0.*.

Version constants

The following low-level boolean version constants are available:

Constant True when
NUMPY_GE_1_22 numpy >= 1.22
NUMPY_GE_1_23 numpy >= 1.23
NUMPY_GE_1_25 numpy >= 1.25
NUMPY_GE_2_0 numpy >= 2.0
NUMPY_GE_2_1 numpy >= 2.1
NUMPY_GE_2_2 numpy >= 2.2
NUMPY_GE_2_3 numpy >= 2.3

Each constant is typed as Literal[True] or Literal[False] depending on your NumPy version, allowing type checkers to perform accurate type narrowing.

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

numpy_typing_compat-1.25.20250725.tar.gz (3.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

numpy_typing_compat-1.25.20250725-py3-none-any.whl (5.3 kB view details)

Uploaded Python 3

File details

Details for the file numpy_typing_compat-1.25.20250725.tar.gz.

File metadata

File hashes

Hashes for numpy_typing_compat-1.25.20250725.tar.gz
Algorithm Hash digest
SHA256 64a00a546a3a33050a7997cdeb69ffaa5c97bbd9185128905ac37183b4eee03d
MD5 0e1dce64af33f81bf604b97365dee2a1
BLAKE2b-256 a2f08b52c045e3cc757cb59cb9fe794dd82a84fb7c59eec5ac2dc56b35e545d6

See more details on using hashes here.

Provenance

The following attestation bundles were made for numpy_typing_compat-1.25.20250725.tar.gz:

Publisher: publish-pypi.yml on jorenham/numpy-typing-compat

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file numpy_typing_compat-1.25.20250725-py3-none-any.whl.

File metadata

File hashes

Hashes for numpy_typing_compat-1.25.20250725-py3-none-any.whl
Algorithm Hash digest
SHA256 6d3db5a684321c7081fdb367bed49dd63adebc0d754d3df16d9a77d1ddb2d2d0
MD5 03b1ec26adb9b0f2805a436e00a0d50b
BLAKE2b-256 fd6f49b65b7c9c498afa08462023940d07b649b884e7c3c36d362720144d0dc8

See more details on using hashes here.

Provenance

The following attestation bundles were made for numpy_typing_compat-1.25.20250725-py3-none-any.whl:

Publisher: publish-pypi.yml on jorenham/numpy-typing-compat

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page