'A summary of all the main results.
Parameters
alpha : float
`1 - alpha` is the nominal coverage probability of the
confidence intervals.
float_format : string
Used for formatting numeric values in the summary.
method : string
The method for producing the confidence interval.  Currently
must be \'normal\' which uses the normal approximation.'

def summary(self, alpha=0.05, float_format='%.3f', method='normal'):

    def fmt(x):
        if (type(x) is str):
            return x
        return (float_format % x)
    (co_lcb, co_ucb) = self.oddsratio_pooled_confint(alpha=alpha, method=method)
    (clo_lcb, clo_ucb) = self.logodds_pooled_confint(alpha=alpha, method=method)
    headers = ['Estimate', 'LCB', 'UCB']
    stubs = ['Pooled    odds', 'Pooled    log    odds', 'Pooled    risk    ratio', '']
    data = [[fmt(x) for x in [self.oddsratio_pooled, co_lcb, co_ucb]], [fmt(x) for x in [self.logodds_pooled, clo_lcb, clo_ucb]], [fmt(x) for x in [self.risk_pooled, '', '']], ['', '', '']]
    tab1 = iolib.SimpleTable(data, headers, stubs, data_aligns='r', table_dec_above='')
    headers = ['Statistic', 'P-value', '']
    stubs = ['Test    of    OR=1', 'Test    constant    OR']
    rslt1 = self.test_null_odds()
    rslt2 = self.test_equal_odds()
    data = [[fmt(x) for x in [rslt1.statistic, rslt1.pvalue, '']], [fmt(x) for x in [rslt2.statistic, rslt2.pvalue, '']]]
    tab2 = iolib.SimpleTable(data, headers, stubs, data_aligns='r')
    tab1.extend(tab2)
    headers = ['', '', '']
    stubs = ['Number    of    tables', 'Min    n', 'Max    n', 'Avg    n', 'Total    n']
    ss = self.table.sum(0).sum(0)
    data = [[('%d' % self.table.shape[2]), '', ''], [('%d' % min(ss)), '', ''], [('%d' % max(ss)), '', ''], [('%.0f' % np.mean(ss)), '', ''], [('%d' % sum(ss)), '', '', '']]
    tab3 = iolib.SimpleTable(data, headers, stubs, data_aligns='r')
    tab1.extend(tab3)
    return tab1
