<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def _bisect(self, begin, end, listener):
 """This method search for the zero-crossing of the watched parameter Args: begin (Orbit):
 end (Orbit) listener (Listener) Return Return """


        step = (end.date - begin.date) / 2

        while abs(step) >= self._eps_bisect:
            date = begin.date + step
            if self.SPEAKER_MODE == "global":
                orb = self.propagate(date)
            else:
                orb = begin.propagate(date)
            if listener(begin) * listener(orb) > 0:
                begin = orb
            else:
                end = orb
            step = (end.date - begin.date) / 2
        else:
            end.event = listener.info(end)
            return end