I've started work on a cython_optimize.zeros package to address the need for fast looping of scalar zero methods over arrays, see issues 8354 and 7242. https://github.com/scipy/scipy/pull/8431 This PR is still a work in progress. I wanted to get feedback on the API(s) that would be most useful. I don't think there should be too many versions but it should be something widely acceptible. Sorry if my proposals are a bit premature or insufficiently developed, but I wanted to start the discussion. Here are some ideas to start with: Option 1: ctypedef double (*callback_type_tup)(double, tuple) - takes a double and a Python tuple with extra arguments, this is the only interface implemented so far, and only for bisect and a super-lite version of newton, it is modeled after the existing Python C-API methods in zeros.c for bisect and other solvers, see description in cython_optimize/__init__.py Option 2: ctypedef double (*callback_type_struct)(double, void*) - takes a double and a structure that contains a structure with the extra arguments, uses a wrapper to extract the extra arguments and call the function Option 3: ctypedef double (*callback_type)(double, void*) - takes a double and a structure that contains the extra arguments, this implementation does not have a wrapper function to extract the args and call the function Option 4: ctypedef double (*callback_type_array)(double, void*) - takes a double and a structure that contains an array with the extra arguments, this method uses a wrapper to extract the extra arguments and call the function I guess I'm leaning toward either option 2 or 3, but perhaps there are other API(s) that are more desirable? Also there are other questions that this PR raises like: is it okay to split up Newton, Halley, and secant? And is it okay to *not* return a `RootsResult` object from the Ridder, Brent, and bisect methods, or should the API(s) match their Python equivalents? Should there be a numpy cython API for super fast looping with native numpy arrays (or other array type like what?) Also note there is a parallel effort in PR 8357 which uses numpy but only with scipy.optimize.zeros.newton. IMHO both of these efforts are desirable and do not compete against each other. Thanks for your feedback!