new_contents: import numpy as np
  
  
  def batch_generator(batch_size, data, labels=None):
      """
      Generates batches of samples
      :param data: array-like, shape = (n_samples, n_features)
      :param labels: array-like, shape = (n_samples, )
      :return:
      """
      n_batches = int(np.ceil(len(data) / float(batch_size)))
      idx = np.random.permutation(len(data))
      data_shuffled = data[idx]
      if labels is not None:
          labels_shuffled = labels[idx]
      for i in range(n_batches):
          start = i * batch_size
          end = start + batch_size
          if labels is not None:
              yield data_shuffled[start:end, :], labels_shuffled[start:end]
          else:
              yield data_shuffled[start:end, :]
  
  
  def to_categorical(labels, num_classes):
      """
      Converts labels as single integer to row vectors. For instance, given a three class problem, labels would be
      mapped as label_1: [1 0 0], label_2: [0 1 0], label_3: [0, 0, 1] where labels can be either int or string.
      :param labels: array-like, shape = (n_samples, )
      :return:
      """
      new_labels = np.zeros([len(labels), num_classes])
      label_to_idx_map, idx_to_label_map = dict(), dict()
      idx = 0
      for i, label in enumerate(labels):
          if label not in label_to_idx_map:
              label_to_idx_map[label] = idx
              idx_to_label_map[idx] = label
              idx += 1
          new_labels[i][label_to_idx_map[label]] = 1
      return new_labels, label_to_idx_map, idx_to_label_map
  
subject: add new module