@@ -21,20 +21,11 @@ static PyMethodDef _simd_methods[] = {
21
21
{NULL ,NULL ,0 ,NULL }
22
22
};
23
23
24
- PyMODINIT_FUNC PyInit__simd (void )
24
+ static int
25
+ _simd_exec (PyObject * m )
25
26
{
26
- static struct PyModuleDef defs = {
27
- .m_base = PyModuleDef_HEAD_INIT ,
28
- .m_name = "numpy._core._simd" ,
29
- .m_size = -1 ,
30
- .m_methods = _simd_methods
31
- };
32
27
if (npy_cpu_init ()< 0 ) {
33
- return NULL ;
34
- }
35
- PyObject * m = PyModule_Create (& defs );
36
- if (m == NULL ) {
37
- return NULL ;
28
+ return -1 ;
38
29
}
39
30
PyObject * targets = PyDict_New ();
40
31
if (targets == NULL ) {
@@ -88,13 +79,31 @@ PyMODINIT_FUNC PyInit__simd(void)
88
79
NPY_MTARGETS_CONF_DISPATCH (NPY_CPU_HAVE ,ATTACH_MODULE ,MAKE_MSVC_HAPPY )
89
80
NPY_MTARGETS_CONF_BASELINE (ATTACH_BASELINE_MODULE ,MAKE_MSVC_HAPPY )
90
81
91
- #if Py_GIL_DISABLED
92
- // signal this module supports running with the GIL disabled
93
- PyUnstable_Module_SetGIL (m ,Py_MOD_GIL_NOT_USED );
82
+ return 0 ;
83
+ err :
84
+ return -1 ;
85
+ }
86
+
87
+ static struct PyModuleDef_Slot _simd_slots []= {
88
+ {Py_mod_exec ,_simd_exec },
89
+ #if PY_VERSION_HEX >=0x030c00f0 // Python 3.12+
90
+ {Py_mod_multiple_interpreters ,Py_MOD_MULTIPLE_INTERPRETERS_NOT_SUPPORTED },
91
+ #endif
92
+ #if PY_VERSION_HEX >=0x030d00f0 // Python 3.13+
93
+ // signal that this module supports running without an active GIL
94
+ {Py_mod_gil ,Py_MOD_GIL_NOT_USED },
94
95
#endif
96
+ {0 ,NULL },
97
+ };
95
98
96
- return m ;
97
- err :
98
- Py_DECREF (m );
99
- return NULL ;
99
+ static struct PyModuleDef defs = {
100
+ .m_base = PyModuleDef_HEAD_INIT ,
101
+ .m_name = "numpy._core._simd" ,
102
+ .m_size = 0 ,
103
+ .m_methods = _simd_methods ,
104
+ .m_slots = _simd_slots ,
105
+ };
106
+
107
+ PyMODINIT_FUNC PyInit__simd (void ) {
108
+ return PyModuleDef_Init (& defs );
100
109
}