docs: def find_port(ids, strict=True):
      """ Find the port with the specified attached motor ids.
  
          :param list ids: list of motor ids to find
          :param bool strict: specify if all ids should be find (when set to False, only half motor must be found)
  
          .. warning:: If two (or more) ports are attached to the same list of motor ids the first match will be returned.
  
      """
      ids_founds = []
      for port in get_available_ports():
          for DxlIOCls in (DxlIO, Dxl320IO):
              try:
                  with DxlIOCls(port) as dxl:
                      _ids_founds = dxl.scan(ids)
                      ids_founds += _ids_founds
  
                      if strict and len(_ids_founds) == len(ids):
                          return port
  
                      if not strict and len(_ids_founds) >= len(ids) / 2:
                          logger.warning('Missing ids: {}'.format(ids, list(set(ids) - set(_ids_founds))))
                          return port
  
                      if len(ids_founds) > 0:
                          logger.warning('Port:{} ids found:{}'.format(port, _ids_founds))
  
              except DxlError:
                  logger.warning('DxlError on port {}'.format(port))
                  continue
  
      raise IndexError('No suitable port found for ids {}. These ids are missing {} !'.format(
          ids, list(set(ids) - set(ids_founds))))