Skip to content

Commit fdab860

Browse files
henryiiirwgk
andauthored
feat: drop PYBIND11_NUMPY_1_ONLY (#5595)
* feat: drop PYBIND11_NUMPY_1_ONLY Signed-off-by: Henry Schreiner <[email protected]> * Add #error "PYBIND11_NUMPY_1_ONLY is no longer supported." in pybind11/numpy.h --------- Signed-off-by: Henry Schreiner <[email protected]> Co-authored-by: Ralf W. Grosse-Kunstleve <[email protected]>
1 parent 55b1357 commit fdab860

File tree

6 files changed

+5
-72
lines changed

6 files changed

+5
-72
lines changed

CMakeLists.txt

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -92,8 +92,6 @@ option(PYBIND11_DISABLE_HANDLE_TYPE_NAME_DEFAULT_IMPLEMENTATION
9292
"To enforce that a handle_type_name<> specialization exists" OFF)
9393
option(PYBIND11_SIMPLE_GIL_MANAGEMENT
9494
"Use simpler GIL management logic that does not support disassociation" OFF)
95-
option(PYBIND11_NUMPY_1_ONLY
96-
"Disable NumPy 2 support to avoid changes to previous pybind11 versions." OFF)
9795
set(PYBIND11_INTERNALS_VERSION
9896
""
9997
CACHE STRING "Override the ABI version, may be used to enable the unstable ABI.")
@@ -105,9 +103,6 @@ endif()
105103
if(PYBIND11_SIMPLE_GIL_MANAGEMENT)
106104
add_compile_definitions(PYBIND11_SIMPLE_GIL_MANAGEMENT)
107105
endif()
108-
if(PYBIND11_NUMPY_1_ONLY)
109-
add_compile_definitions(PYBIND11_NUMPY_1_ONLY)
110-
endif()
111106

112107
cmake_dependent_option(
113108
USE_PYTHON_INCLUDE_DIR

include/pybind11/detail/common.h

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -251,10 +251,6 @@
251251
# endif
252252
#endif
253253

254-
#if defined(PYBIND11_NUMPY_1_ONLY)
255-
# define PYBIND11_INTERNAL_NUMPY_1_ONLY_DETECTED
256-
#endif
257-
258254
#if (defined(PYPY_VERSION) || defined(GRAALVM_PYTHON)) && !defined(PYBIND11_SIMPLE_GIL_MANAGEMENT)
259255
# define PYBIND11_SIMPLE_GIL_MANAGEMENT
260256
#endif

include/pybind11/numpy.h

Lines changed: 4 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,8 @@
2929
#include <utility>
3030
#include <vector>
3131

32-
#if defined(PYBIND11_NUMPY_1_ONLY) && !defined(PYBIND11_INTERNAL_NUMPY_1_ONLY_DETECTED)
33-
# error PYBIND11_NUMPY_1_ONLY must be defined before any pybind11 header is included.
32+
#if defined(PYBIND11_NUMPY_1_ONLY)
33+
# error "PYBIND11_NUMPY_1_ONLY is no longer supported (see PR #5595)."
3434
#endif
3535

3636
/* This will be true on all flat address space platforms and allows us to reduce the
@@ -80,7 +80,6 @@ struct PyArrayDescr1_Proxy {
8080
PyObject *names;
8181
};
8282

83-
#ifndef PYBIND11_NUMPY_1_ONLY
8483
struct PyArrayDescr_Proxy {
8584
PyObject_HEAD
8685
PyObject *typeobj;
@@ -91,10 +90,6 @@ struct PyArrayDescr_Proxy {
9190
int type_num;
9291
/* Additional fields are NumPy version specific. */
9392
};
94-
#else
95-
/* NumPy 1.x only, we can expose all fields */
96-
using PyArrayDescr_Proxy = PyArrayDescr1_Proxy;
97-
#endif
9893

9994
/* NumPy 2 proxy, including legacy fields */
10095
struct PyArrayDescr2_Proxy {
@@ -179,14 +174,6 @@ PYBIND11_NOINLINE module_ import_numpy_core_submodule(const char *submodule_name
179174
object numpy_version = numpy_lib.attr("NumpyVersion")(version_string);
180175
int major_version = numpy_version.attr("major").cast<int>();
181176

182-
#ifdef PYBIND11_NUMPY_1_ONLY
183-
if (major_version >= 2) {
184-
throw std::runtime_error(
185-
"This extension was built with PYBIND11_NUMPY_1_ONLY defined, "
186-
"but NumPy 2 is used in this process. For NumPy2 compatibility, "
187-
"this extension needs to be rebuilt without the PYBIND11_NUMPY_1_ONLY define.");
188-
}
189-
#endif
190177
/* `numpy.core` was renamed to `numpy._core` in NumPy 2.0 as it officially
191178
became a private module. */
192179
std::string numpy_core_path = major_version >= 2 ? "numpy._core" : "numpy.core";
@@ -300,16 +287,6 @@ struct npy_api {
300287
PyObject *(*PyArray_FromAny_)(PyObject *, PyObject *, int, int, int, PyObject *);
301288
int (*PyArray_DescrConverter_)(PyObject *, PyObject **);
302289
bool (*PyArray_EquivTypes_)(PyObject *, PyObject *);
303-
#ifdef PYBIND11_NUMPY_1_ONLY
304-
int (*PyArray_GetArrayParamsFromObject_)(PyObject *,
305-
PyObject *,
306-
unsigned char,
307-
PyObject **,
308-
int *,
309-
Py_intptr_t *,
310-
PyObject **,
311-
PyObject *);
312-
#endif
313290
PyObject *(*PyArray_Squeeze_)(PyObject *);
314291
// Unused. Not removed because that affects ABI of the class.
315292
int (*PyArray_SetBaseObject_)(PyObject *, PyObject *);
@@ -337,9 +314,6 @@ struct npy_api {
337314
API_PyArray_View = 137,
338315
API_PyArray_DescrConverter = 174,
339316
API_PyArray_EquivTypes = 182,
340-
#ifdef PYBIND11_NUMPY_1_ONLY
341-
API_PyArray_GetArrayParamsFromObject = 278,
342-
#endif
343317
API_PyArray_SetBaseObject = 282
344318
};
345319

@@ -374,9 +348,6 @@ struct npy_api {
374348
DECL_NPY_API(PyArray_View);
375349
DECL_NPY_API(PyArray_DescrConverter);
376350
DECL_NPY_API(PyArray_EquivTypes);
377-
#ifdef PYBIND11_NUMPY_1_ONLY
378-
DECL_NPY_API(PyArray_GetArrayParamsFromObject);
379-
#endif
380351
DECL_NPY_API(PyArray_SetBaseObject);
381352

382353
#undef DECL_NPY_API
@@ -760,21 +731,14 @@ class dtype : public object {
760731
}
761732

762733
/// Size of the data type in bytes.
763-
#ifdef PYBIND11_NUMPY_1_ONLY
764-
ssize_t itemsize() const { return detail::array_descriptor_proxy(m_ptr)->elsize; }
765-
#else
766734
ssize_t itemsize() const {
767735
if (detail::npy_api::get().PyArray_RUNTIME_VERSION_ < 0x12) {
768736
return detail::array_descriptor1_proxy(m_ptr)->elsize;
769737
}
770738
return detail::array_descriptor2_proxy(m_ptr)->elsize;
771739
}
772-
#endif
773740

774741
/// Returns true for structured data types.
775-
#ifdef PYBIND11_NUMPY_1_ONLY
776-
bool has_fields() const { return detail::array_descriptor_proxy(m_ptr)->names != nullptr; }
777-
#else
778742
bool has_fields() const {
779743
if (detail::npy_api::get().PyArray_RUNTIME_VERSION_ < 0x12) {
780744
return detail::array_descriptor1_proxy(m_ptr)->names != nullptr;
@@ -785,7 +749,6 @@ class dtype : public object {
785749
}
786750
return proxy->names != nullptr;
787751
}
788-
#endif
789752

790753
/// Single-character code for dtype's kind.
791754
/// For example, floating point types are 'f' and integral types are 'i'.
@@ -824,29 +787,21 @@ class dtype : public object {
824787
/// Single character for byteorder
825788
char byteorder() const { return detail::array_descriptor_proxy(m_ptr)->byteorder; }
826789

827-
/// Alignment of the data type
828-
#ifdef PYBIND11_NUMPY_1_ONLY
829-
int alignment() const { return detail::array_descriptor_proxy(m_ptr)->alignment; }
830-
#else
790+
/// Alignment of the data type
831791
ssize_t alignment() const {
832792
if (detail::npy_api::get().PyArray_RUNTIME_VERSION_ < 0x12) {
833793
return detail::array_descriptor1_proxy(m_ptr)->alignment;
834794
}
835795
return detail::array_descriptor2_proxy(m_ptr)->alignment;
836796
}
837-
#endif
838797

839-
/// Flags for the array descriptor
840-
#ifdef PYBIND11_NUMPY_1_ONLY
841-
char flags() const { return detail::array_descriptor_proxy(m_ptr)->flags; }
842-
#else
798+
/// Flags for the array descriptor
843799
std::uint64_t flags() const {
844800
if (detail::npy_api::get().PyArray_RUNTIME_VERSION_ < 0x12) {
845801
return (unsigned char) detail::array_descriptor1_proxy(m_ptr)->flags;
846802
}
847803
return detail::array_descriptor2_proxy(m_ptr)->flags;
848804
}
849-
#endif
850805

851806
private:
852807
static object &_dtype_from_pep3118() {

tests/conftest.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,6 @@ def pytest_report_header():
229229
f"{pybind11_tests.cpp_std}",
230230
f"{pybind11_tests.PYBIND11_INTERNALS_ID}",
231231
f"PYBIND11_SIMPLE_GIL_MANAGEMENT={pybind11_tests.PYBIND11_SIMPLE_GIL_MANAGEMENT}",
232-
f"PYBIND11_NUMPY_1_ONLY={pybind11_tests.PYBIND11_NUMPY_1_ONLY}",
233232
]
234233
if "__graalpython__" in sys.modules:
235234
cpp_info.append(

tests/pybind11_tests.cpp

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -97,12 +97,6 @@ PYBIND11_MODULE(pybind11_tests, m, py::mod_gil_not_used()) {
9797
#else
9898
false;
9999
#endif
100-
m.attr("PYBIND11_NUMPY_1_ONLY") =
101-
#if defined(PYBIND11_NUMPY_1_ONLY)
102-
true;
103-
#else
104-
false;
105-
#endif
106100

107101
bind_ConstructorStats(m);
108102

tests/test_numpy_dtypes.py

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
import pytest
66

77
import env # noqa: F401
8-
from pybind11_tests import PYBIND11_NUMPY_1_ONLY
98
from pybind11_tests import numpy_dtypes as m
109

1110
np = pytest.importorskip("numpy")
@@ -181,12 +180,7 @@ def test_dtype(simple_dtype):
181180
assert m.test_dtype_num() == [np.dtype(ch).num for ch in expected_chars]
182181
assert m.test_dtype_byteorder() == [np.dtype(ch).byteorder for ch in expected_chars]
183182
assert m.test_dtype_alignment() == [np.dtype(ch).alignment for ch in expected_chars]
184-
if not PYBIND11_NUMPY_1_ONLY:
185-
assert m.test_dtype_flags() == [np.dtype(ch).flags for ch in expected_chars]
186-
else:
187-
assert m.test_dtype_flags() == [
188-
chr(np.dtype(ch).flags) for ch in expected_chars
189-
]
183+
assert m.test_dtype_flags() == [np.dtype(ch).flags for ch in expected_chars]
190184

191185
for a, b in m.test_dtype_num_of():
192186
assert a == b

0 commit comments

Comments
 (0)