text: import os
  import sys
  import time
  import math
  
  ######### Hyperparameters #########
  # EBT 
  # Base network training
  base_epochs_ebt = [25] # Number of epochs to train for
  base_sched_ebt = [1e-1] # LR for minimally training a general model
  wd_ebt = 1e-4
  
  # Ortho network training 
  ortho_epochs_ebt = [24, 1] # 1 epoch of lower learning rate results in better orthonormality
  ortho_sched_ebt = [1e-1, 1e-2] # LR for minimally training an ortho model
  
  # Training pruned network
  pruned_sched_ebt = [1e-1, 1e-2, 1e-3]
  pruned_epochs_ebt = [60, 40, 40]
  
  # Iterative
  # Base network training
  base_sched_iter = [1e-1, 1e-2, 1e-3] # LR for fully training a general model
  base_epochs_iter = [80, 40, 40] # Number of epochs to train for
  wd_iter = 1e-4
  
  # Ortho network training
  ortho_sched_iter = [1e-1, 1e-2, 1e-3] # LR for ortho regularized training
  ortho_epochs_iter = [24, 1, 0] # Few epochs of lower learning rate result in better orthonormality
  
  # Retraining pruned network
  pruned_sched_iter = [1e-1, 1e-2, 1e-3]
  pruned_epochs_iter = [40, 40, 20]
  #pruned_epochs_iter = [0, 10, 10]
  
  ortho_pruned_sched_iter = [1e-1, 1e-2, 1e-3]
  ortho_pruned_epochs_iter = [35, 35, 10]
  
  ortho_pruned_sched_finetune = [1e-1, 1e-2, 1e-3]
  ortho_pruned_epochs_finetune = [24, 1, 0]
  
  # Determining gradient in importance estimates
  imp_samples = 10000
  GraSP_T = 200
  
  ######### Progress bar #########
  term_width = 150 
  TOTAL_BAR_LENGTH = 30.
  last_time = time.time()
  begin_time = last_time
  def progress_bar(current, total, msg=None):
      global last_time, begin_time
      if current == 0:
          begin_time = time.time()  # Reset for new bar.
      cur_len = int(TOTAL_BAR_LENGTH*current/total)
      rest_len = int(TOTAL_BAR_LENGTH - cur_len) - 1
      sys.stdout.write(' [')
      for i in range(cur_len):
          sys.stdout.write('=')
      sys.stdout.write('>')
      for i in range(rest_len):
          sys.stdout.write('.')
      sys.stdout.write(']')
      cur_time = time.time()
      step_time = cur_time - last_time
      last_time = cur_time
      tot_time = cur_time - begin_time
      L = []
      L.append('  Step: %s' % format_time(step_time))
      L.append(' | Tot: %s' % format_time(tot_time))
      if msg:
          L.append(' | ' + msg)
      msg = ''.join(L)
      sys.stdout.write(msg)
      for i in range(term_width-int(TOTAL_BAR_LENGTH)-len(msg)-3):
          sys.stdout.write(' ')
      # Go back to the center of the bar.
      for i in range(term_width-int(TOTAL_BAR_LENGTH/2)+2):
          sys.stdout.write('\b')
      sys.stdout.write(' %d/%d ' % (current+1, total))
      if current < total-1:
          sys.stdout.write('\r')
      else:
          sys.stdout.write('\n')
      sys.stdout.flush()
  
  def format_time(seconds):
      days = int(seconds / 3600/24)
      seconds = seconds - days*3600*24
      hours = int(seconds / 3600)
      seconds = seconds - hours*3600
      minutes = int(seconds / 60)
      seconds = seconds - minutes*60
      secondsf = int(seconds)
      seconds = seconds - secondsf
      millis = int(seconds*1000)
      f = ''
      i = 1
      if days > 0:
          f += str(days) + 'D'
          i += 1
      if hours > 0 and i <= 2:
          f += str(hours) + 'h'
          i += 1
      if minutes > 0 and i <= 2:
          f += str(minutes) + 'm'
          i += 1
      if secondsf > 0 and i <= 2:
          f += str(secondsf) + 's'
          i += 1
      if millis > 0 and i <= 2:
          f += str(millis) + 'ms'
          i += 1
      if f == '':
          f = '0ms'
      return f
  