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]

Reply via email to