def get_list_of_hyperparams_for_kernel(kernel_type):
  """ Returns the list of hyper-parameters for each kernel.
      It returns a 3-tuple of lists of equal length.
      The first is a list of strings describing each hyper-parameter.
      The second is a list of integers indicating the size/dimensionality of each
      hyper-parameter. If any element in this list is 'dim', it means the dimensionality
      is the dimensionality of the input space.
      The third is a list of strings indicating if they are float or integral. If its a
      list instead of a string, then it means the hyper-parameter is discrete with the
      elements in the list denoting possible values.
  """
  if kernel_type.lower() == 'se':
    return ['scale', 'dim_bandwidths'], [1, 'dim'], ['float', 'float']
  elif kernel_type.lower() == 'matern':
    return (['scale', 'dim_bandwidths', 'nu'], [1, 'dim', 1],
            ['float', 'float', [0.5, 1.5, 2.5]])
  elif kernel_type.lower() == 'espse':
    return ['esp_order', 'scale', 'dim_bandwidths'], [1, 'dim', 1], \
           ['float', 'float', 'int']
  elif kernel_type.lower() == 'espmatern':
    return (['esp_order', 'scale', 'dim_bandwidths', 'nu'], [1, 'dim', 1, 1],
            ['float', 'float', [0.5, 1.5, 2.5], 'int'])
  elif kernel_type.lower() == 'expdecay':
    raise NotImplementedError('Not implemented this function for ExpDecayKernel yet!')
  else:
    raise ValueError('Unidentified kernel type %s.'%(kernel_type))