<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 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))