diff --git a/matrepr/adapters/__init__.py b/matrepr/adapters/__init__.py index c6b3a8b..82f870a 100644 --- a/matrepr/adapters/__init__.py +++ b/matrepr/adapters/__init__.py @@ -242,28 +242,28 @@ def get_row_labels(self) -> Optional[Iterable[Optional[int]]]: return None if self.dot_row is None: - return self.orig_row_labels if self.orig_row_labels else [str(i) for i in range(self.orig_shape[0])] + return self.orig_row_labels if self.orig_row_labels else list(range(self.orig_shape[0])) else: pre_dot_end, post_dot_start = self.get_dot_indices_row() if self.orig_row_labels is None: # generate indices # noinspection PyTypeChecker - return [str(i) for i in range(pre_dot_end)] + [None]\ - + [str(i) for i in range(post_dot_start, self.orig_shape[0])] + return list(range(pre_dot_end)) + [None]\ + + list(range(post_dot_start, self.orig_shape[0])) else: return self.orig_row_labels[:pre_dot_end] + [None] \ + self.orig_row_labels[post_dot_start:self.orig_shape[0]] def get_col_labels(self) -> Iterable[Optional[int]]: if self.dot_col is None: - return self.orig_col_labels if self.orig_col_labels else [str(i) for i in range(self.orig_shape[1])] + return self.orig_col_labels if self.orig_col_labels else list(range(self.orig_shape[1])) else: pre_dot_end, post_dot_start = self.get_dot_indices_col() if self.orig_col_labels is None: # generate indices # noinspection PyTypeChecker - return [str(i) for i in range(pre_dot_end)] + [None]\ - + [str(i) for i in range(post_dot_start, self.orig_shape[1])] + return list(range(pre_dot_end)) + [None]\ + + list(range(post_dot_start, self.orig_shape[1])) else: return self.orig_col_labels[:pre_dot_end] + [None] \ + self.orig_col_labels[post_dot_start:self.orig_shape[1]] diff --git a/matrepr/html_formatter.py b/matrepr/html_formatter.py index b717c73..66b3f9d 100644 --- a/matrepr/html_formatter.py +++ b/matrepr/html_formatter.py @@ -44,10 +44,13 @@ def _attributes_to_string(self, attributes: dict) -> str: ret = " " + ret return ret - def pprint(self, obj, current_indent=0): + def pprint(self, obj, current_indent=0, is_index=False): if obj is None: return "" + if is_index and isinstance(obj, int): + return int(obj) + if isinstance(obj, (int, float)): return self.floatfmt(obj) @@ -107,7 +110,7 @@ def _write_matrix(self, mat: MatrixAdapterRow, self.write(f"", indent=cell_indent) for col_label in mat.get_col_labels(): attr = ' style="text-align: center;"' if self.center_header else "" - self.write(f"{self.pprint(col_label)}", indent=cell_indent) + self.write(f"{self.pprint(col_label, is_index=True)}", indent=cell_indent) self.write("", indent=body_indent) self.write("", indent=body_indent) @@ -116,7 +119,7 @@ def _write_matrix(self, mat: MatrixAdapterRow, for row_idx in range(nrows): self.write("", body_indent) if row_labels: - self.write(f"{self.pprint(next(row_labels))}", cell_indent) + self.write(f"{self.pprint(next(row_labels), is_index=True)}", cell_indent) col_range = (0, ncols) for col_idx, cell in enumerate(mat.get_dense_row(row_idx, col_range=col_range)): diff --git a/matrepr/latex_formatter.py b/matrepr/latex_formatter.py index 34efc6c..1a3ad12 100644 --- a/matrepr/latex_formatter.py +++ b/matrepr/latex_formatter.py @@ -64,10 +64,13 @@ def __init__(self, max_rows, max_cols, num_after_dots, title_latex, latex_matrix self.floatfmt = lambda f: python_scientific_to_latex_times10(format(f)) self.indent_width = 4 - def pprint(self, obj): + def pprint(self, obj, is_index=False): if obj is None: return "" + if is_index and isinstance(obj, int): + return int(obj) + if isinstance(obj, (int, float)): return self.floatfmt(obj) diff --git a/matrepr/list_converter.py b/matrepr/list_converter.py index 8906e63..ae827e0 100644 --- a/matrepr/list_converter.py +++ b/matrepr/list_converter.py @@ -2,6 +2,8 @@ # Use of this source code is governed by the BSD 2-clause license found in the LICENSE.txt file. # SPDX-License-Identifier: BSD-2-Clause +from typing import List, Optional + from .adapters import MatrixAdapter, MatrixAdapterRow, Truncated2DMatrix, to_trunc, DupeList from .base_formatter import unicode_dots @@ -30,6 +32,12 @@ def _single_line(s: str) -> str: return " ".join(lines) +def _to_str(iterable) -> Optional[List]: + if iterable is None: + return None + return [None if x is None else str(x) for x in iterable] + + class ListConverter: def __init__(self, max_rows, max_cols, num_after_dots, floatfmt, **_): super().__init__() @@ -119,4 +127,6 @@ def to_lists_and_labels(self, mat: MatrixAdapter, is_1d_ok=True): mat.get_shape()[1] > self.max_cols: mat = to_trunc(mat, self.max_rows, self.max_cols, self.num_after_dots) - return self._write_matrix(mat, is_vector=is_vector), mat.get_row_labels(), mat.get_col_labels() + return self._write_matrix(mat, is_vector=is_vector),\ + _to_str(mat.get_row_labels()),\ + _to_str(mat.get_col_labels())