--- tags: NumPy, NumPy2 --- # NumPy2 lighning talk: Change `np.int`_ to `np.int64` on all platforms Today `np.int_` reflects the C `long` type, which is 32-bits for MSVC (windows) and 64-bits on all other 64-bit platforms, and 32-bits on 32-bit platforms. The relevant issues discussing this: [9464](ttps://github.com/numpy/numpy/issues/9464), [12332](https://github.com/numpy/numpy/issues/12332), [17531](https://github.com/numpy/numpy/issues/17351) (which points out that the canonical name for `np.int32` on win64 is `np.intc`), [17640](https://github.com/numpy/numpy/issues/17640) [18540](https://github.com/numpy/numpy/issues/18540) ## Implications for Array API compatibility Under Dtypes, the Array API spec [says](https://data-apis.org/array-api/latest/API_specification/data_types.html#default-data-types): > The default integer data type should be the same across platforms, but the default may vary depending on whether Python is 32-bit or 64-bit. So this change would bring NumPy into compliance with the Array API ## Who is in favor? The difference confuses some users, who expect `np.array(2**31)` to have the same dtype as `np.array(2**30)` on all platforms. There were comments from the CuPy developers on one of the linked issues that they needed to adjusts tests for windows because of this. ## What will break? Cython imports `npy_long` and uses it. We would have to check the implications of making `npy_long` 64-bits everywhere, or if there would be problems with inconsistencies between `npy_long` and `np.int_`. ## Why not make the change? It would be disruptive. In the best case, SciPy users (to take a concrete example) would silently get different results on windows when updating NumPy to 2.0. In a worse case, their programs might crash if this affects Cython. We could develop a strategy to migitate this with a legacy code-path when `import_array()` is called in Scipy, which would cause all SciPy code to use the older dtype and prevent crashes, but that is really complicated and might not work. ## Is it worth it? <Discussion></Discussion> ## Decision <Discussion></Discussion>