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.22.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.22.20250725-py3-none-any.whl (5.3 kB view details)

Uploaded Python 3

File details

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

File metadata

File hashes

Hashes for numpy_typing_compat-1.22.20250725.tar.gz
Algorithm Hash digest
SHA256 ca5e58380460abcf9d7a0aabb5aaaec02978205548d80f283335e49df159ee1e
MD5 6684e9c5e6d116fef1b09dd47f01d700
BLAKE2b-256 cc47e63b1ddeeae825ccfb5481aaca9863ebc9e2f53f90d2f3b3ecb5aca7a28d

See more details on using hashes here.

Provenance

The following attestation bundles were made for numpy_typing_compat-1.22.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.22.20250725-py3-none-any.whl.

File metadata

File hashes

Hashes for numpy_typing_compat-1.22.20250725-py3-none-any.whl
Algorithm Hash digest
SHA256 9c2f1a5a625536117885267d0ce4930ef053c53782ce7ca0b6f5a114266f9693
MD5 a28c5f489c150fef2915b8e35ccd7245
BLAKE2b-256 d75069f008246d1b0e120cb1e3e268fb0ec09b857e051de71c94e1e098849dae

See more details on using hashes here.

Provenance

The following attestation bundles were made for numpy_typing_compat-1.22.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