The parameter rising for the function bracket_and_solve_root seems to be redundant. This is because the input function f is assumed to be monotonic in the half of the real axis containing the input guess. Since f is monotonic, couldn't rising simply be inferred by looking at the slope between two points on the half of the real axis containing guess?
In a similar vein, does/should bracket_and_solve_root throw an error if f is not monotonic? I would think this could be calculated via the slope at each step.
Having the wrong input for rising has caused quite a bit of trouble for me.