https://github.com/python/cpython/commit/2982bdb936f76518b29cf7de356eb5fafd22d112
commit: 2982bdb936f76518b29cf7de356eb5fafd22d112
branch: main
author: Victor Stinner <[email protected]>
committer: vstinner <[email protected]>
date: 2024-03-17T18:59:02+01:00
summary:
gh-85283: Build _statistics extension with the limited C API (#116927)
Argument Clinic now inlines _PyArg_CheckPositional() for the limited
C API. The generated code should be as fast or even a little bit
faster.
files:
M Doc/whatsnew/3.13.rst
M Misc/NEWS.d/next/C API/2024-03-14-10-33-58.gh-issue-85283.LOgmdU.rst
M Modules/_statisticsmodule.c
M Modules/clinic/_statisticsmodule.c.h
diff --git a/Doc/whatsnew/3.13.rst b/Doc/whatsnew/3.13.rst
index 3e08d804d9494d..a48db949d8f401 100644
--- a/Doc/whatsnew/3.13.rst
+++ b/Doc/whatsnew/3.13.rst
@@ -1482,7 +1482,8 @@ Build Changes
* The ``errno``, ``fcntl``, ``grp``, ``md5``, ``pwd``, ``resource``,
``termios``, ``winsound``,
``_ctypes_test``, ``_multiprocessing.posixshmem``, ``_scproxy``, ``_stat``,
- ``_testimportmultiple`` and ``_uuid`` C extensions are now built with the
+ ``_statistics``, ``_testimportmultiple`` and ``_uuid``
+ C extensions are now built with the
:ref:`limited C API <limited-c-api>`.
(Contributed by Victor Stinner in :gh:`85283`.)
diff --git a/Misc/NEWS.d/next/C
API/2024-03-14-10-33-58.gh-issue-85283.LOgmdU.rst b/Misc/NEWS.d/next/C
API/2024-03-14-10-33-58.gh-issue-85283.LOgmdU.rst
index bfb72db9d931d9..ef8a934b435a88 100644
--- a/Misc/NEWS.d/next/C API/2024-03-14-10-33-58.gh-issue-85283.LOgmdU.rst
+++ b/Misc/NEWS.d/next/C API/2024-03-14-10-33-58.gh-issue-85283.LOgmdU.rst
@@ -1,2 +1,2 @@
-The ``fcntl``, ``grp``, ``pwd`` and ``termios`` C extensions are now
+The ``fcntl``, ``grp``, ``pwd``, ``termios`` and ``_statistics`` C extensions
are now
built with the :ref:`limited C API <limited-c-api>`. Patch by Victor Stinner.
diff --git a/Modules/_statisticsmodule.c b/Modules/_statisticsmodule.c
index a04a2a779a5d3d..78a6552c4c9ec0 100644
--- a/Modules/_statisticsmodule.c
+++ b/Modules/_statisticsmodule.c
@@ -1,8 +1,9 @@
/* statistics accelerator C extension: _statistics module. */
-// clinic/_statisticsmodule.c.h uses internal pycore_modsupport.h API
-#ifndef Py_BUILD_CORE_BUILTIN
-# define Py_BUILD_CORE_MODULE 1
+// Need limited C API version 3.12 for Py_MOD_PER_INTERPRETER_GIL_SUPPORTED
+#include "pyconfig.h" // Py_GIL_DISABLED
+#ifndef Py_GIL_DISABLED
+# define Py_LIMITED_API 0x030c0000
#endif
#include "Python.h"
diff --git a/Modules/clinic/_statisticsmodule.c.h
b/Modules/clinic/_statisticsmodule.c.h
index 653a2138aaad70..cd5b9bea8db2f2 100644
--- a/Modules/clinic/_statisticsmodule.c.h
+++ b/Modules/clinic/_statisticsmodule.c.h
@@ -2,15 +2,13 @@
preserve
[clinic start generated code]*/
-#include "pycore_modsupport.h" // _PyArg_CheckPositional()
-
PyDoc_STRVAR(_statistics__normal_dist_inv_cdf__doc__,
"_normal_dist_inv_cdf($module, p, mu, sigma, /)\n"
"--\n"
"\n");
#define _STATISTICS__NORMAL_DIST_INV_CDF_METHODDEF \
- {"_normal_dist_inv_cdf",
_PyCFunction_CAST(_statistics__normal_dist_inv_cdf), METH_FASTCALL,
_statistics__normal_dist_inv_cdf__doc__},
+ {"_normal_dist_inv_cdf",
(PyCFunction)(void(*)(void))_statistics__normal_dist_inv_cdf, METH_FASTCALL,
_statistics__normal_dist_inv_cdf__doc__},
static double
_statistics__normal_dist_inv_cdf_impl(PyObject *module, double p, double mu,
@@ -25,38 +23,21 @@ _statistics__normal_dist_inv_cdf(PyObject *module, PyObject
*const *args, Py_ssi
double sigma;
double _return_value;
- if (!_PyArg_CheckPositional("_normal_dist_inv_cdf", nargs, 3, 3)) {
+ if (nargs != 3) {
+ PyErr_Format(PyExc_TypeError, "_normal_dist_inv_cdf expected 3
arguments, got %zd", nargs);
goto exit;
}
- if (PyFloat_CheckExact(args[0])) {
- p = PyFloat_AS_DOUBLE(args[0]);
- }
- else
- {
- p = PyFloat_AsDouble(args[0]);
- if (p == -1.0 && PyErr_Occurred()) {
- goto exit;
- }
- }
- if (PyFloat_CheckExact(args[1])) {
- mu = PyFloat_AS_DOUBLE(args[1]);
- }
- else
- {
- mu = PyFloat_AsDouble(args[1]);
- if (mu == -1.0 && PyErr_Occurred()) {
- goto exit;
- }
+ p = PyFloat_AsDouble(args[0]);
+ if (p == -1.0 && PyErr_Occurred()) {
+ goto exit;
}
- if (PyFloat_CheckExact(args[2])) {
- sigma = PyFloat_AS_DOUBLE(args[2]);
+ mu = PyFloat_AsDouble(args[1]);
+ if (mu == -1.0 && PyErr_Occurred()) {
+ goto exit;
}
- else
- {
- sigma = PyFloat_AsDouble(args[2]);
- if (sigma == -1.0 && PyErr_Occurred()) {
- goto exit;
- }
+ sigma = PyFloat_AsDouble(args[2]);
+ if (sigma == -1.0 && PyErr_Occurred()) {
+ goto exit;
}
_return_value = _statistics__normal_dist_inv_cdf_impl(module, p, mu,
sigma);
if ((_return_value == -1.0) && PyErr_Occurred()) {
@@ -67,4 +48,4 @@ _statistics__normal_dist_inv_cdf(PyObject *module, PyObject
*const *args, Py_ssi
exit:
return return_value;
}
-/*[clinic end generated code: output=e7cead17f9f3e19f input=a9049054013a1b77]*/
+/*[clinic end generated code: output=0f0c849d51f16f1b input=a9049054013a1b77]*/
_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-checkins.python.org/
Member address: [email protected]