def main(argv):
  if len(argv) < 2:
    print HELP_MESSAGE
    return
  file_template = DIRECTORY + FILENAME
  system, planner = argv[:2]
  data = defaultdict(list)
  problems = []
  configurations = []
  for _, p, c, d in (read_pickle(file_template%(system, planner, date)) for date in argv[2:]):
    for x in p:
      if x not in problems:
        problems.append(x)
    for x in c:
      if x not in configurations:
        configurations.append(x)
    for k, v in d.items():
      data[k] += v

  if CONVERT_FAILURES: convert_failures(data)
  data_stats = data_statistics(data)

  if HISTOGRAMS:
    for i, problem in enumerate(problems):
      for j, configuration in enumerate(configurations):
        histogram('problem%d-%d'%(i, j), 'runtime', map(attrgetter('time'), data[(problem, configuration)])) # TODO - use problem and configuration names

  print
  for i, configuration in enumerate(configurations):
    print i, str_object(configuration)
  print SEPARATOR

  for problem in problems:
    # TODO - print problem dependent sample time here
    print problem
    for i, configuration in enumerate(configurations):
      if (problem, configuration) not in data_stats: continue
      trials, percent_success, result = data_stats[(problem, configuration)]

      cost_median, cost_mad = np.nan, np.nan # TODO - put these in the clean itself
      if result.plan is not None:
        cost_median, cost_mad = result.plan.cost.median, result.plan.cost.mad

      if not PRINT_TABLE:
        #print '{}) {} | {}% | {} | {} | {}'.format(i, trials, int(100*percent_success), clean(result.time.median),
        # clean(result.time.mad), clean(result.state_space.median))
        print '{}) {} | {}% | {} ({}) | {} ({}) | {} ({})'.format(i, trials, clean(100*percent_success),
          clean(result.time.mean), clean(result.time.std),
          clean(result.time.median), clean(result.time.mad),
          clean(result.state_space.median), clean(result.state_space.mad))
      else:
        print '{} & {} ({}) & {} ({}) & {} ({})'.format(clean(100*percent_success),
                                                clean(result.time.median), clean(result.time.mad),
                                                clean(cost_median), clean(cost_mad),
                                                clean(result.expansion.median), clean(result.expansion.mad)) + \
              (' &' if i != len(configurations) - 1 else ' \\\\')
    print
def load_custom_ir(robot):
  filename = FILENAME%get_ir_hash(robot)
  ir_database = read_pickle(filename)
  if DEBUG: print 'Loaded', filename
  return ir_database