docs: def visibility(cls, orb, **kwargs):
          """Visibility from a topocentric frame
  
          see :py:meth:`Propagator.iter() <beyond.propagators.base.Propagator.iter>`
          for description of arguments handling.
  
          Args:
              orb (Orbit): Orbit to compute visibility from the station with
  
          Keyword Args:
              start (Date): starting date of the visibility search
              stop (Date or datetime.timedelta) end of the visibility search
              step (datetime.timedelta): step of the computation
              events (bool, Listener or list): If evaluate to True, compute
                  AOS, LOS and MAX elevation for each pass on this station.
                  If 'events' is a Listener or an iterable of Listeners, they
                  will be added to the computation
  
          Any other keyword arguments are passed to the propagator.
  
          Yield:
              Orbit: In-visibility point of the orbit. This Orbit is already
                  in the frame of the station and in spherical form.
          """
  
          from ..orbits.listeners import stations_listeners, Listener
  
          listeners = kwargs.setdefault('listeners', [])
          events = kwargs.pop('events', None)
          event_classes = tuple()
  
          if events:
              # Handling of the listeners passed in the 'events' kwarg
              # and merging them with the `listeners` kwarg
              if isinstance(events, Listener):
                  listeners.append(events)
              elif isinstance(events, (list, tuple)):
                  listeners.extend(events)
  
              sta_list = stations_listeners(cls)
              listeners.extend(sta_list)
  
              # Only the events present in the `event_classes` list will be yielded
              # outside of visibility. This list was created in order to force
              # the yield of AOS and LOS.
  
              event_classes = tuple(listener.event for listener in sta_list)
  
          for point in orb.iter(**kwargs):
              point.frame = cls
              point.form = 'spherical'
  
              # Not very clean !
              if point.phi < 0 and not isinstance(point.event, event_classes):
                  continue
  
              yield point