summaryrefslogtreecommitdiffstats
path: root/Modules/clinic
diff options
context:
space:
mode:
authorSerhiy Storchaka <storchaka@gmail.com>2019-06-01 19:09:02 (GMT)
committerGitHub <noreply@github.com>2019-06-01 19:09:02 (GMT)
commit2b843ac0ae745026ce39514573c5d075137bef65 (patch)
tree8e176372e55d171590b4c798d6deaf9311cbef8c /Modules/clinic
parent9843bc110dc4241ba7cb05f3d3ef74ac6c77caf2 (diff)
downloadcpython-2b843ac0ae745026ce39514573c5d075137bef65.zip
cpython-2b843ac0ae745026ce39514573c5d075137bef65.tar.gz
cpython-2b843ac0ae745026ce39514573c5d075137bef65.tar.bz2
bpo-35431: Refactor math.comb() implementation. (GH-13725)
* Fixed some bugs. * Added support for index-likes objects. * Improved error messages. * Cleaned up and optimized the code. * Added more tests.
Diffstat (limited to 'Modules/clinic')
-rw-r--r--Modules/clinic/mathmodule.c.h24
1 files changed, 6 insertions, 18 deletions
diff --git a/Modules/clinic/mathmodule.c.h b/Modules/clinic/mathmodule.c.h
index cba791e..92ec4be 100644
--- a/Modules/clinic/mathmodule.c.h
+++ b/Modules/clinic/mathmodule.c.h
@@ -639,10 +639,10 @@ exit:
}
PyDoc_STRVAR(math_comb__doc__,
-"comb($module, /, n, k)\n"
+"comb($module, n, k, /)\n"
"--\n"
"\n"
-"Number of ways to choose *k* items from *n* items without repetition and without order.\n"
+"Number of ways to choose k items from n items without repetition and without order.\n"
"\n"
"Also called the binomial coefficient. It is mathematically equal to the expression\n"
"n! / (k! * (n - k)!). It is equivalent to the coefficient of k-th term in\n"
@@ -652,38 +652,26 @@ PyDoc_STRVAR(math_comb__doc__,
"Raises ValueError if the arguments are negative or if k > n.");
#define MATH_COMB_METHODDEF \
- {"comb", (PyCFunction)(void(*)(void))math_comb, METH_FASTCALL|METH_KEYWORDS, math_comb__doc__},
+ {"comb", (PyCFunction)(void(*)(void))math_comb, METH_FASTCALL, math_comb__doc__},
static PyObject *
math_comb_impl(PyObject *module, PyObject *n, PyObject *k);
static PyObject *
-math_comb(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
+math_comb(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
{
PyObject *return_value = NULL;
- static const char * const _keywords[] = {"n", "k", NULL};
- static _PyArg_Parser _parser = {NULL, _keywords, "comb", 0};
- PyObject *argsbuf[2];
PyObject *n;
PyObject *k;
- args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 2, 2, 0, argsbuf);
- if (!args) {
- goto exit;
- }
- if (!PyLong_Check(args[0])) {
- _PyArg_BadArgument("comb", 1, "int", args[0]);
+ if (!_PyArg_CheckPositional("comb", nargs, 2, 2)) {
goto exit;
}
n = args[0];
- if (!PyLong_Check(args[1])) {
- _PyArg_BadArgument("comb", 2, "int", args[1]);
- goto exit;
- }
k = args[1];
return_value = math_comb_impl(module, n, k);
exit:
return return_value;
}
-/*[clinic end generated code: output=00aa76356759617a input=a9049054013a1b77]*/
+/*[clinic end generated code: output=6709521e5e1d90ec input=a9049054013a1b77]*/