def __call__(self, max_lengths, min_lengths, num_buckets):
if not isinstance(max_lengths, INT_TYPES):<EOL><INDENT>bucket_width_l = [max((<NUM_LIT:1> + max_len - min_len) // num_buckets, <NUM_LIT:1>)<EOL>for max_len, min_len in<EOL>zip(max_lengths, min_lengths)]<EOL>bucket_keys =[tuple(max(max_len - i * width, min_len) for max_len, min_len, width in<EOL>zip(max_lengths, min_lengths, bucket_width_l))<EOL>for i in range(num_buckets)]<EOL><DEDENT>else:<EOL><INDENT>bucket_width = max((<NUM_LIT:1> + max_lengths - min_lengths) // num_buckets, <NUM_LIT:1>)<EOL>bucket_keys = [max(max_lengths - i * bucket_width, min_lengths)<EOL>for i in range(num_buckets)]<EOL><DEDENT>return bucket_keys<EOL>
r"""This generate bucket keys given that all the buckets have the same width.

        Parameters
        ----------
        max_lengths : int of list of int
            Maximum of lengths of sequences.
        min_lengths : int of list of int
            Minimum of lengths of sequences.
        num_buckets : int
            Number of buckets

        Returns
        -------
        bucket_keys : list of int
            A list including the keys of the buckets.