]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Speed-up math.dist() by 30% (GH-9628)
authorRaymond Hettinger <rhettinger@users.noreply.github.com>
Sat, 29 Sep 2018 21:30:38 +0000 (14:30 -0700)
committerGitHub <noreply@github.com>
Sat, 29 Sep 2018 21:30:38 +0000 (14:30 -0700)
Modules/clinic/mathmodule.c.h
Modules/mathmodule.c

index c4d2786341013adffaa21a4a4c34effe8757217d..b40a227dbea522b32f8126254aec30587ae064d0 100644 (file)
@@ -294,8 +294,9 @@ math_dist(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
     PyObject *p;
     PyObject *q;
 
-    if (!_PyArg_ParseStack(args, nargs, "O!O!:dist",
-        &PyTuple_Type, &p, &PyTuple_Type, &q)) {
+    if (!_PyArg_UnpackStack(args, nargs, "dist",
+        2, 2,
+        &p, &q)) {
         goto exit;
     }
     return_value = math_dist_impl(module, p, q);
@@ -522,4 +523,4 @@ math_isclose(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject
 exit:
     return return_value;
 }
-/*[clinic end generated code: output=d936137c1189b89b input=a9049054013a1b77]*/
+/*[clinic end generated code: output=239c51a5acefbafb input=a9049054013a1b77]*/
index e872e473f5fe467b8cce6a76fb6817845af6e50f..e956314e27fca384ac34b9c0e18a229a16f32887 100644 (file)
@@ -2101,8 +2101,8 @@ vector_norm(Py_ssize_t n, double *vec, double max, int found_nan)
 /*[clinic input]
 math.dist
 
-    p: object(subclass_of='&PyTuple_Type')
-    q: object(subclass_of='&PyTuple_Type')
+    p: object
+    q: object
     /
 
 Return the Euclidean distance between two points p and q.
@@ -2116,7 +2116,7 @@ Roughly equivalent to:
 
 static PyObject *
 math_dist_impl(PyObject *module, PyObject *p, PyObject *q)
-/*[clinic end generated code: output=56bd9538d06bbcfe input=937122eaa5f19272]*/
+/*[clinic end generated code: output=56bd9538d06bbcfe input=8c83c07c7a524664]*/
 {
     PyObject *item;
     double max = 0.0;
@@ -2126,6 +2126,11 @@ math_dist_impl(PyObject *module, PyObject *p, PyObject *q)
     double diffs_on_stack[NUM_STACK_ELEMS];
     double *diffs = diffs_on_stack;
 
+    if (!PyTuple_Check(p) || !PyTuple_Check(q)) {
+        PyErr_SetString(PyExc_TypeError, "dist argument must be a tuple");
+        return NULL;
+    }
+
     m = PyTuple_GET_SIZE(p);
     n = PyTuple_GET_SIZE(q);
     if (m != n) {