Пример #1
0
 def __repr__(self):
     h, r = self._get_repr_()
     h, r = formatted_cells(r, header=h)
     result = simple_format(h, r, title=self.test_name)
     components = CategoryCounts(self.observed.to_dict(),
                                 expected=self.expected.to_dict())
     result = [result, str(components)]
     return "\n".join(result)
Пример #2
0
    def array_repr(self, a):
        if len(a.shape) == 1:
            heading = [str(n) for n in self.names[0]]
            a = a[numpy.newaxis, :]
        elif len(a.shape) == 2:
            heading = [""] + [str(n) for n in self.names[1]]
            a = [[str(name)] + list(row)
                 for (name, row) in zip(self.names[0], a)]
        else:
            return "%s dimensional %s" % (len(self.names), type(self).__name__)

        formatted = table.formatted_cells(rows=a, header=heading)
        return str(table.simple_format(formatted[0], formatted[1], space=4))
Пример #3
0
    def to_string(self,
                  format="",
                  borders=True,
                  sep=None,
                  center=False,
                  **kwargs):
        """Return the table as a formatted string.

        Parameters
        ----------
        format
            possible formats are 'rest'/'rst', 'markdown'/'md',
            'latex', 'html', 'phylip', 'bedgraph', 'csv', 'tsv', or 'simple'
            (default).
        sep
            A string separator for delineating columns, e.g. ',' or
            '\t'. Overrides format.
        center
            content is centered in the column, default is right
            justified

        NOTE: If format is bedgraph, assumes that column headers are chrom,
        start, end, value. In that order!
        """
        if format.lower() == "phylip":
            missing_data = "%.4f" % 0.0
        else:
            missing_data = self._missing_data

        if format.lower() in ("tsv", "csv"):
            sep = sep or {"tsv": "\t", "csv": ","}[format.lower()]
            format = ""

        # convert self to a 2D list
        formatted_table = self.array.tolist()
        if format != "bedgraph":
            header, formatted_table = table_format.formatted_cells(
                formatted_table,
                self.header,
                digits=self._digits,
                column_templates=self._column_templates,
                missing_data=missing_data,
                center=center,
            )
            args = (header, formatted_table, self.title, self.legend)
        if sep and format != "bedgraph":
            return table_format.separator_format(*args + (sep, ))
        elif format in ("rest", "rst"):
            return table_format.grid_table_format(*args)
        elif format in ("markdown", "md"):
            return table_format.markdown(header, formatted_table, **kwargs)
        elif format.endswith("tex"):
            caption = None
            if self.title or self.legend:
                caption = " ".join([self.title or "", self.legend or ""])
            return table_format.latex(formatted_table,
                                      header,
                                      caption=caption,
                                      **kwargs)
        elif format == "html":
            return self.to_rich_html(**kwargs)
        elif format == "phylip":
            # need to eliminate row identifiers
            formatted_table = [row[self._row_ids:] for row in formatted_table]
            header = header[self._row_ids:]
            return table_format.phylip_matrix(formatted_table, header)
        elif format == "bedgraph":
            assert self.shape[1] == 4, "bedgraph format is for 4 column tables"
            # assuming that header order is chrom, start, end, val
            formatted_table = bedgraph.bedgraph(self.sorted().array.tolist(),
                                                **kwargs)
            return formatted_table
        else:
            return table_format.simple_format(
                *args + (self._max_width, self._row_ids, borders, self.space))
Пример #4
0
    def _get_repr_(self, html=False):

        obs = self.observed.array.tolist()
        exp = self.expected.array.tolist()
        res = self.residuals.array.tolist()

        ndim = len(self.observed.shape)
        if ndim == 1:
            row_labels = "Observed", "Expected", "Residuals"
            row_cell_func = _format_row_cell(row_labels)
            col_labels = [str(c) for c in self.observed.template.names[0]]
            rows = []
            # format floats for expecteds and resid
            for row_label, row in zip(row_labels, [obs, exp, res]):
                if row_label == "Observed":
                    row = [row_label] + [f"{v:,}" for v in row]
                else:
                    row = [row_label] + [f"{v:,.2f}" for v in row]
                rows.append(row)

            if html:
                rows = rich_html(
                    rows,
                    header=[""] + col_labels,
                    row_cell_func=row_cell_func,
                    merge_identical=False,
                )
            else:
                header, rows = formatted_cells(rows, header=[""] + col_labels)
                rows = simple_format(header, rows)

        else:
            row_labels = self.observed.template.names[0]
            col_labels = self.observed.template.names[1]
            row_cell_func = _format_row_cell(row_labels)
            result = []
            for caption, table in zip(("Observed", "Expected", "Residuals"),
                                      (obs, exp, res)):
                rows = []
                for i, r in enumerate(table):
                    if caption == "Observed":
                        r = [f"{v:,}" for v in r]
                    else:
                        r = [f"{v:,.2f}" for v in r]
                    rows.append([row_labels[i]] + r)
                if html:
                    result.append(
                        rich_html(
                            rows,
                            header=[""] + col_labels,
                            caption=f"<b>{caption}</b>",
                            row_cell_func=row_cell_func,
                            merge_identical=False,
                        ))
                else:
                    header, rows = formatted_cells(rows,
                                                   header=[""] + col_labels)
                    result.append(simple_format(header, rows, title=caption))
            joiner = "<br>" if html else "\n"
            rows = joiner.join(result)
        return rows