Validates a tuple, checking it against an optional schema.

    The schema should be a list of expected values replaced by functions which will be called to
    with the corresponding value in the input.

    A simple example:

        >>> certifier = certify_tuple(schema=(
        ...     certify_key(kind='Model'),
        ...     certify_int(min=0),
        ...     ))
        >>> certifier((self.key, self.count))

    :param tuple value:
        The value to be certified.
    :param func certifier:
        A function to be called on each value in the iterable to check that it is valid.
    :param int min_len:
        The minimum acceptable length for the iterable.  If None, the minimum length is not checked.
    :param int max_len:
        The maximum acceptable length for the iterable.  If None, the maximum length is not checked.
    :param bool required:
        Whether the value can't be `None`. Defaults to True.
    :param tuple schema:
        The schema against which the value should be checked.
        For single-item tuple make sure to add comma at the end of schema tuple, that is,
        for example: schema=(certify_int(),)
    :return:
        The certified tuple.
    :rtype:
        tuple
    :raises CertifierTypeError:
        The type is invalid
    :raises CertifierValueError:
        The valid is invalid

def certify_tuple(value, certifier=None, min_len=None, max_len=None, required=True, schema=None):
    """
    Validates a tuple, checking it against an optional schema.

    The schema should be a list of expected values replaced by functions which will be called to
    with the corresponding value in the input.

    A simple example:

        >>> certifier = certify_tuple(schema=(
        ...     certify_key(kind='Model'),
        ...     certify_int(min=0),
        ...     ))
        >>> certifier((self.key, self.count))

    :param tuple value:
        The value to be certified.
    :param func certifier:
        A function to be called on each value in the iterable to check that it is valid.
    :param int min_len:
        The minimum acceptable length for the iterable.  If None, the minimum length is not checked.
    :param int max_len:
        The maximum acceptable length for the iterable.  If None, the maximum length is not checked.
    :param bool required:
        Whether the value can't be `None`. Defaults to True.
    :param tuple schema:
        The schema against which the value should be checked.
        For single-item tuple make sure to add comma at the end of schema tuple, that is,
        for example: schema=(certify_int(),)
    :return:
        The certified tuple.
    :rtype:
        tuple
    :raises CertifierTypeError:
        The type is invalid
    :raises CertifierValueError:
        The valid is invalid
    """
    certify_iterable(
        value=value,
        types=tuple([tuple]),
        certifier=certifier,
        min_len=min_len,
        max_len=max_len,
        schema=schema,
        required=required,
    )