bpo-1635741: Port math module to multiphase initialization (GH-19243)

This commit is contained in:
Dong-hee Na 2020-03-31 23:33:22 +09:00 committed by GitHub
parent 1cb763b880
commit 5be8241392
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 34 additions and 25 deletions

View file

@ -0,0 +1 @@
Port :mod:`math` to multiphase initialization (:pep:`489`).

View file

@ -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);
}