docs: def find_matching_controllers(*requirements, **kwargs) -> [ControllerDiscovery]:
      """
      Find a sequence of controllers which match the supplied requirements, or raise an error if no such controllers
      exist.
  
      :param requirements:
          Zero or more ControllerRequirement instances defining the requirements for controllers. If no item is passed it
          will be treated as a single requirement with no filters applied and will therefore match the first controller
          found.
      :return:
          A sequence of the same length as the supplied requirements array containing ControllerDiscovery instances which
          match the requirements supplied.
      :raises:
          ControllerNotFoundError if no appropriately matching controllers can be located
      """
      requirements = list(requirements)
      if requirements is None or len(requirements) == 0:
          requirements = [ControllerRequirement()]
  
      def pop_controller(r: ControllerRequirement, discoveries: [ControllerDiscovery]) -> ControllerDiscovery:
          """
          Find a single controller matching the supplied requirement from a list of ControllerDiscovery instances
  
          :param r:
              The ControllerRequirement to match
          :param discoveries:
              The [ControllerDiscovery] to search
          :return:
              A matching ControllerDiscovery. Modifies the supplied list of discoveries, removing the found item.
          :raises:
              ControllerNotFoundError if no matching controller can be found
          """
          for index, d in enumerate(discoveries):
              if r.accept(d):
                  return discoveries.pop(index)
          raise ControllerNotFoundError()
  
      all_controllers = find_all_controllers(**kwargs)
  
      try:
          return list(pop_controller(r, all_controllers) for r in requirements)
      except ControllerNotFoundError as exception:
          logger.info('Unable to satisfy controller requirements' +
                      ', required {}, found {}'.format(requirements, find_all_controllers(**kwargs)))
          raise exception