docs: def _make_summary_tables(self):
          """
          prints the summary of the regression.  It shows
          the waveform metadata, diagnostics of the fit, and results of the
          hypothesis tests for each comparison encoded in the design matrix
          """
          try:
              self._Bhat
          except:
              raise Exception("Regression hasn't been fit yet.  run .fit()")
          else:
              # check degrees of freedom
              num_pcs = self._basis_object.get_params()['num_components']
              total_dof = self._X.shape[0] - self._X.shape[1] - num_pcs
              if total_dof <= 0.0:
                  raise ValueError("degrees of freedom <= 0, Hotellings T2 not defined")
  
              # print catalog and basis info
              cat_table = self._catalog_object.get_params().items()
              bas_table = self._basis_object.get_params().items()
              print tabulate(cat_table+bas_table,tablefmt='plain')
  
              # then print pvalues
              # make T^2 & pvalue table
              headers = self._results[0]
              table   = self._results[1:]
              print tabulate(table, headers, tablefmt="rst")
              print "Formula Used: %s" % self._designmatrix_object._formula
              print "Degrees of Freedom (n - p - k): %s" % str(total_dof)
              print "Condition Number of X^T*X: %.2f" % np.linalg.cond(np.dot(self._X.T, self._X))