Skip to content

Commit

Permalink
bpo-1635741: Port math module to multiphase initialization (GH-19243)
Browse files Browse the repository at this point in the history
  • Loading branch information
corona10 committed Mar 31, 2020
1 parent 1cb763b commit 5be8241
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 25 deletions.
@@ -0,0 +1 @@
Port :mod:`math` to multiphase initialization (:pep:`489`).
58 changes: 33 additions & 25 deletions Modules/mathmodule.c
Expand Up @@ -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},
Expand Down Expand Up @@ -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);
}

0 comments on commit 5be8241

Please sign in to comment.