docs: def compare(self, other, analysis_set, output_directory, unique_ajps, verbose = True, compile_pdf = True):
          """
          Generate comparison latex report in specified output directory
          Returns LatexReport object
          """
          self_unique_name = self.get_definitive_name(unique_ajps)
          other_unique_name = other.get_definitive_name(unique_ajps)
  
          output_directory = os.path.join(output_directory, os.path.join(self_unique_name, other_unique_name) )
          assert( not os.path.isdir( output_directory ) )
  
          subplot_directory = os.path.join(output_directory, 'plots')
          if not os.path.isdir(subplot_directory):
              os.makedirs(subplot_directory)
  
          report = lr.LatexReport( table_of_contents = False )
  
          # Construct dataframe comparing our predictions to other's predictions
          both_predictions = pandas.concat(
              [
                  self.add_identifying_columns_to_df(self.dataframe[['Predicted']], unique_ajps),
                  other.add_identifying_columns_to_df(other.dataframe[['Predicted']], unique_ajps),
              ],
              join = 'outer',
          ).sort_index()
          both_predictions_subtracted = subtract_row_pairs_for_display(
              both_predictions,
              output_csv = os.path.join(output_directory, 'predictions_v_predictions.csv'),
              merge_df = self.dataframe,
              verbose = verbose,
          )
  
          # Construct dataframe comparing our diff with experimental values to other's
          self_diff = self.get_pred_minus_exp_dataframe(analysis_set, unique_ajps)
          other_diff = other.get_pred_minus_exp_dataframe(analysis_set, unique_ajps)
          diffs_df = pandas.concat(
              [self_diff, other_diff],
              join = 'outer',
          )
  
          diffs_df = subtract_row_pairs_for_display(
              diffs_df,
              output_csv = os.path.join(output_directory, 'diffs_v_diffs.csv'),
              merge_df = self.dataframe,
              verbose = verbose,
          )
  
          report.set_title_page(
              '%s vs %s' % (
                  self.get_definitive_name(unique_ajps, join_character = '\n'),
                  other.get_definitive_name(unique_ajps, join_character = '\n')
              )
          )
          predictions_v_predictions_df = self.dataframe[['Predicted']].merge(
              other.dataframe[['Predicted']],
              left_index = True,
              right_index = True,
          )
          predictions_v_predictions_df.columns = [self_unique_name, other_unique_name]
          report.add_plot( general_matplotlib.make_corr_plot(predictions_v_predictions_df, predictions_v_predictions_df.columns.values[0], predictions_v_predictions_df.columns.values[1], output_directory = subplot_directory, plot_title = 'Prediction comparison', axis_label_size = 8.0, output_name = 'vs_scatter', fig_height = 7, fig_width = 8, verbose = verbose, plot_11_line = True ), plot_title = 'Experimental vs. Predicted scatterplot (with density binning)' )
  
          diff_v_diff_dataframe = self.get_pred_minus_exp_dataframe(analysis_set).merge(
              other.get_pred_minus_exp_dataframe(analysis_set),
              left_index = True,
              right_index = True,
          )
          report.add_section_page( title = 'Plots' )
          diff_v_diff_dataframe.columns = [self_unique_name, other_unique_name]
          report.add_plot( general_matplotlib.make_corr_plot(diff_v_diff_dataframe, diff_v_diff_dataframe.columns.values[0], diff_v_diff_dataframe.columns.values[1], output_directory = subplot_directory, plot_title = 'Error v. Error', axis_label_size = 7.0, output_name = 'diff_vs_scatter', fig_height = 7, fig_width = 8, verbose = verbose, plot_11_line = True ), plot_title = 'Outliers --- Error (Predicted - Experimental) v. error. \\ x-axis=%s \\ y-axis=%s' % (diff_v_diff_dataframe.columns.values[0], diff_v_diff_dataframe.columns.values[1]) )
  
          report.add_section_page( title = 'Tables' )
  
          report.content.append( lr.LatexPandasTable(
              diffs_df, float_format = float_format_2sigfig,
              caption_text = 'Outliers --- Comparison of error (Predicted - Experimental) for first prediction set (%s) vs second set of predictions (%s). Values sorted by descending absolute delta.' % (self_unique_name, other_unique_name),
          ) )
  
          report.content.append( lr.LatexPandasTable(
              both_predictions_subtracted, float_format = float_format_2sigfig,
              caption_text = 'Direct comparison of predicted values. Values sorted by descending absolute delta.',
          ) )
  
          # Get joined stats comparison dataframe
          for case_table in BenchmarkRun.make_case_description_tables(BenchmarkRun.get_stats_comparison_dataframe(
                  [self, other], unique_ajps,
                  output_csv = os.path.join(output_directory, 'comparison_metrics.csv'),
          )):
              report.content.append( case_table )
  
          report.generate_pdf_report(
              os.path.join(output_directory, 'comparison.pdf'),
              verbose = verbose,
              compile_pdf = compile_pdf,
          )
          if verbose:
              print 'Comparison report saved to:', os.path.join(output_directory, 'comparison.pdf')
          return report