docs: def find_all_controllers(**kwargs) -> [ControllerDiscovery]:
      """
      :return:
          A list of :class:`~approxeng.input.controllers.ControllerDiscovery` instances corresponding to controllers
          attached to this host, ordered by the ordering on ControllerDiscovery. Any controllers found will be
          constructed with kwargs passed to their constructor function, particularly useful for dead and hot zone
          parameters.
      """
  
      def get_controller_classes() -> [{}]:
          """
          Scans for subclasses of :class:`~approxeng.input.Controller` and reads out data from their
          :meth:`~approxeng.input.Controller.registrations_ids` method. This should return a list of
          tuples of `(vendor_id, product_id)` which are then used along with the subclass itself to
          populate a registry of known subclasses.
  
          :return:
              A generator that produces known subclasses and their registration information
          """
          for controller_class in Controller.__subclasses__():
              for vendor_id, product_id in controller_class.registration_ids():
                  yield {'constructor': controller_class,
                         'vendor_id': vendor_id,
                         'product_id': product_id}
  
      id_to_constructor = {'{}-{}'.format(c['vendor_id'], c['product_id']): c['constructor'] for c in
                           get_controller_classes()}
  
      def controller_constructor(d: InputDevice):
          id = '{}-{}'.format(d.info.vendor, d.info.product)
          if id in id_to_constructor:
              return id_to_constructor[id]
          return None
  
      all_devices = list(InputDevice(path) for path in list_devices())
  
      devices_by_name = {name: list(e for e in all_devices if unique_name(e) == name) for name in
                         set(unique_name(e) for e in all_devices if
                             controller_constructor(e) is not None)}
  
      controllers = sorted(
          ControllerDiscovery(controller=controller_constructor(devices[0])(**kwargs), devices=devices, name=name) for
          name, devices in devices_by_name.items())
  
      return controllers