Spaces:
Running on Zero
Running on Zero
| import torch | |
| import pandas as pd | |
| def cn_len(s): | |
| length = 0 | |
| for char in s: | |
| if '\u4e00' <= char <= '\u9fff': # 中文字符的 unicode 范围 | |
| length += 2 | |
| else: | |
| length += 1 | |
| return length | |
| def format_s(s, max_width): | |
| """ | |
| Format string to specified max width. Chinese characters are counted as 2 characters. | |
| """ | |
| if cn_len(s) <= max_width: | |
| return s | |
| start, end = 0, len(s) | |
| count_length_left = 0 | |
| count_length_right = 0 | |
| flag = True | |
| while count_length_left + count_length_right < max_width - 3: | |
| if flag: | |
| count_length_left += 2 if '\u4e00' <= s[start] <= '\u9fff' else 1 | |
| start += 1 | |
| else: | |
| count_length_right += 2 if '\u4e00' <= s[end - 1] <= '\u9fff' else 1 | |
| end -= 1 | |
| flag = not flag | |
| return s[:start] + '...' + s[end:] | |
| def stylize_dataframe(df, max_width): | |
| """ | |
| Stylize dataframe according to specified column widths. | |
| Parameters: | |
| df: pandas DataFrame | |
| max_width: dictionary mapping column names to desired max widths | |
| Returns: | |
| df: stylized DataFrame | |
| """ | |
| df = df.copy() | |
| df.set_index('id', inplace=True) | |
| for col in df.columns: | |
| df[col] = df[col].astype(str).apply(lambda x: format_s(x, max_width)) | |
| return df | |
| def batch_data_repr(batch, max_width=100): | |
| """ | |
| Format batch to specified max width. Chinese characters are counted as 2 characters. | |
| Parameters: | |
| batch: dictionary mapping keys to values | |
| max_width: int | |
| Returns: | |
| batch: list of formatted strings | |
| """ | |
| new_batch = {} | |
| for k, v in batch.items(): | |
| if isinstance(v, torch.Tensor): | |
| new_batch[k] = v.tolist() | |
| else: | |
| new_batch[k] = v | |
| df = pd.DataFrame(batch) | |
| df = stylize_dataframe(df, max_width) | |
| return df | |