Function used for checking if the shape of "devices" and "channels" fields of load function
    have the same shape (the number of elements in the list specified in "devices" is equal to
    the number of sublists inside "channels" field).
    Both "devices" and "channels" must be lists.

    ----------
    Parameters
    ----------
    devices : list ["mac_address_1" <str>, "mac_address_2" <str>...]
        List of devices selected by the user.

    channels : list [[mac_address_1_channel_1 <int>, mac_address_1_channel_2 <int>...],
                    [mac_address_2_channel_1 <int>...]...]
        From which channels will the data be loaded.

    Returns
    -------
    An error message when shape or type of the inputs is not valid.

def _check_shape_and_type(devices, channels):
    """
    Function used for checking if the shape of "devices" and "channels" fields of load function
    have the same shape (the number of elements in the list specified in "devices" is equal to
    the number of sublists inside "channels" field).
    Both "devices" and "channels" must be lists.

    ----------
    Parameters
    ----------
    devices : list ["mac_address_1" <str>, "mac_address_2" <str>...]
        List of devices selected by the user.

    channels : list [[mac_address_1_channel_1 <int>, mac_address_1_channel_2 <int>...],
                    [mac_address_2_channel_1 <int>...]...]
        From which channels will the data be loaded.

    Returns
    -------
    An error message when shape or type of the inputs is not valid.
    """

    if isinstance(devices, type(channels)):  # Comparision of type.
        dev_chn_type = type(devices)
        if devices is None:
            pass
        elif dev_chn_type == list:
            # Comparision of the shape.
            if len(devices) == sum(isinstance(i, list) for i in channels):
                # ----------- Verification if all mac addresses are in a string format ------------
                for dev_nbr, device in enumerate(devices):
                    # List element is a string and is one of the available devices.
                    if isinstance(device, str):
                        # ----------- Verification if all specified channels are integers ----------
                        # Each sublist must be composed by integers.
                        for channel in channels[dev_nbr]:
                            if isinstance(channel, int):
                                continue
                            else:
                                raise RuntimeError("At least one of the 'channels' elements is not "
                                                   "an integer")
                    else:
                        raise RuntimeError("At least one of the 'devices' elements is not a mac "
                                           "address string")
            else:
                raise RuntimeError("The shape of devices and channels lists are not the same. The "
                                   "number of sublists in the 'channels' input may be equal to the "
                                   "number of devices specified in 'devices' field.")
        else:
            raise RuntimeError("The chosen data type of 'devices' and 'channels' fields is not "
                               "supported.")

    elif devices is None and _is_instance(int, channels, condition="all"):
        pass

    else:
        raise RuntimeError("The input 'devices' and 'channels' must be of the same type "
                           "(None or list). When only one device is being used is also possible to "
                           "specify None as 'device' input and a list of integers in the 'channel' "
                           "field")