bpo-1635741: Port math module to multiphase initialization (GH-19243)
This commit is contained in:
parent
1cb763b880
commit
5be8241392
|
@ -0,0 +1 @@
|
|||
Port :mod:`math` to multiphase initialization (:pep:`489`).
|
|
@ -3421,6 +3421,29 @@ math_ulp_impl(PyObject *module, double x)
|
|||
return x2 - x;
|
||||
}
|
||||
|
||||
static int
|
||||
math_exec(PyObject *module)
|
||||
{
|
||||
if (PyModule_AddObject(module, "pi", PyFloat_FromDouble(Py_MATH_PI)) < 0) {
|
||||
return -1;
|
||||
}
|
||||
if (PyModule_AddObject(module, "e", PyFloat_FromDouble(Py_MATH_E)) < 0) {
|
||||
return -1;
|
||||
}
|
||||
// 2pi
|
||||
if (PyModule_AddObject(module, "tau", PyFloat_FromDouble(Py_MATH_TAU)) < 0) {
|
||||
return -1;
|
||||
}
|
||||
if (PyModule_AddObject(module, "inf", PyFloat_FromDouble(m_inf())) < 0) {
|
||||
return -1;
|
||||
}
|
||||
#if !defined(PY_NO_SHORT_FLOAT_REPR) || defined(Py_NAN)
|
||||
if (PyModule_AddObject(module, "nan", PyFloat_FromDouble(m_nan())) < 0) {
|
||||
return -1;
|
||||
}
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
||||
static PyMethodDef math_methods[] = {
|
||||
{"acos", math_acos, METH_O, math_acos_doc},
|
||||
|
@ -3479,41 +3502,26 @@ static PyMethodDef math_methods[] = {
|
|||
{NULL, NULL} /* sentinel */
|
||||
};
|
||||
|
||||
static PyModuleDef_Slot math_slots[] = {
|
||||
{Py_mod_exec, math_exec},
|
||||
{0, NULL}
|
||||
};
|
||||
|
||||
PyDoc_STRVAR(module_doc,
|
||||
"This module provides access to the mathematical functions\n"
|
||||
"defined by the C standard.");
|
||||
|
||||
|
||||
static struct PyModuleDef mathmodule = {
|
||||
PyModuleDef_HEAD_INIT,
|
||||
"math",
|
||||
module_doc,
|
||||
-1,
|
||||
math_methods,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL
|
||||
.m_name = "math",
|
||||
.m_doc = module_doc,
|
||||
.m_size = 0,
|
||||
.m_methods = math_methods,
|
||||
.m_slots = math_slots,
|
||||
};
|
||||
|
||||
PyMODINIT_FUNC
|
||||
PyInit_math(void)
|
||||
{
|
||||
PyObject *m;
|
||||
|
||||
m = PyModule_Create(&mathmodule);
|
||||
if (m == NULL)
|
||||
goto finally;
|
||||
|
||||
PyModule_AddObject(m, "pi", PyFloat_FromDouble(Py_MATH_PI));
|
||||
PyModule_AddObject(m, "e", PyFloat_FromDouble(Py_MATH_E));
|
||||
PyModule_AddObject(m, "tau", PyFloat_FromDouble(Py_MATH_TAU)); /* 2pi */
|
||||
PyModule_AddObject(m, "inf", PyFloat_FromDouble(m_inf()));
|
||||
#if !defined(PY_NO_SHORT_FLOAT_REPR) || defined(Py_NAN)
|
||||
PyModule_AddObject(m, "nan", PyFloat_FromDouble(m_nan()));
|
||||
#endif
|
||||
|
||||
finally:
|
||||
return m;
|
||||
return PyModuleDef_Init(&mathmodule);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue