summaryrefslogtreecommitdiffstats
path: root/Modules
diff options
context:
space:
mode:
authorVictor Stinner <vstinner@python.org>2024-03-17 17:59:02 (GMT)
committerGitHub <noreply@github.com>2024-03-17 17:59:02 (GMT)
commit2982bdb936f76518b29cf7de356eb5fafd22d112 (patch)
treea60a6907f80f776e83065e9398679662928b7350 /Modules
parent0634201f5391242524dbb5225de37f81a2cc1826 (diff)
downloadcpython-2982bdb936f76518b29cf7de356eb5fafd22d112.zip
cpython-2982bdb936f76518b29cf7de356eb5fafd22d112.tar.gz
cpython-2982bdb936f76518b29cf7de356eb5fafd22d112.tar.bz2
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.
Diffstat (limited to 'Modules')
-rw-r--r--Modules/_statisticsmodule.c7
-rw-r--r--Modules/clinic/_statisticsmodule.c.h45
2 files changed, 17 insertions, 35 deletions
diff --git a/Modules/_statisticsmodule.c b/Modules/_statisticsmodule.c
index a04a2a7..78a6552 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 653a213..cd5b9be 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]*/