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
: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.