class_docstr: Buckets with exponentially increasing width:
  :math:`w_i = bucket\_len\_step * w_{i-1}` for all :math:`i \geq 2`.
  
  Parameters
  ----------
  bucket_len_step
      This is the increasing factor for the bucket width.
class_docstr_tok: ["Buckets","with","exponentially","increasing","width",":",":","math",":","`","w_i","=","bucket\\_len\\_step","*","w_","{","i-1","}","`","for","all",":","math",":","`","i","\\geq","2","`",".","Parameters","--","--","--","--","--","bucket_len_step","This","is","the","increasing","factor","for","the","bucket","width","."]
docstr: This function generates bucket keys exponentially increasing bucket width.
  
  Parameters
  ----------
  max_lengths
      Maximum of lengths of sequences.
  min_lengths
      Minimum of lengths of sequences.
  num_buckets
      Number of buckets
  
  Returns
  -------
  bucket_keys
      A list including the keys of the buckets.
docstr_tok: ["This","function","generates","bucket","keys","exponentially","increasing","bucket","width",".","Parameters","--","--","--","--","--","max_lengths","Maximum","of","lengths","of","sequences",".","min_lengths","Minimum","of","lengths","of","sequences",".","num_buckets","Number","of","buckets","Returns","--","--","--","-","bucket_keys","A","list","including","the","keys","of","the","buckets","."]
code: def __call__(
      self,
      max_lengths: Union[int, Sequence[int]],
      min_lengths: Union[int, Sequence[int]],
      num_buckets: int,
  ) -> List[int]:
      r"""This function generates bucket keys exponentially increasing bucket width.
  
      Parameters
      ----------
      max_lengths
          Maximum of lengths of sequences.
      min_lengths
          Minimum of lengths of sequences.
      num_buckets
          Number of buckets
  
      Returns
      -------
      bucket_keys
          A list including the keys of the buckets.
      """
      if not isinstance(max_lengths, INT_TYPES):
          initial_width_l = [
              (max_len - min_len)
              * (self.bucket_len_step - 1)
              / (math.pow(self.bucket_len_step, num_buckets) - 1)
              for max_len, min_len in zip(max_lengths, min_lengths)
          ]
          bucket_keys = [
              tuple(
                  int(
                      round(
                          min_len
                          + initial_width
                          * (math.pow(self.bucket_len_step, i + 1) - 1)
                          / (self.bucket_len_step - 1)
                      )
                  )
                  for min_len, initial_width in zip(
                      min_lengths, initial_width_l
                  )
              )
              for i in range(num_buckets)
          ]
          bucket_keys[-1] = tuple(
              max(max_bucket_key, max_len)
              for max_bucket_key, max_len in zip(
                  bucket_keys[-1], max_lengths
              )
          )
      else:
          initial_width = (
              (max_lengths - min_lengths)
              * (self.bucket_len_step - 1)
              / (math.pow(self.bucket_len_step, num_buckets) - 1)
          )
          bucket_keys = [
              int(
                  round(
                      min_lengths
                      + initial_width
                      * (math.pow(self.bucket_len_step, i + 1) - 1)
                      / (self.bucket_len_step - 1)
                  )
              )
              for i in range(num_buckets)
          ]
          bucket_keys[-1] = max(bucket_keys[-1], max_lengths)
      return bucket_keys
  
imports: import math
  import random
  import warnings
  import numpy
  import abc
  import logging
  from typing import Union, Sequence, Optional, List
  from ..base import INT_TYPES
label_desc: Use image node_id 2 for calling the ExpWidthBucket obj's underlying member method code with example usage: obj.__call__(max_lengths, min_lengths, num_buckets) and returns: bucket_keys