def _repr_level_info(self): """ Returns a string representation of the footer.""" max_levels = (10 if get_option("display.max_levels") == 0 else get_option("display.max_levels")) level_strs = fmt.format_array(self.levels.get_values(), None) if len(level_strs) > max_levels: num = max_levels // 2 head = level_strs[:num] tail = level_strs[-(max_levels - num):] level_strs = head + ["..."] + tail # Strip all leading spaces, which format_array adds for columns... level_strs = [x.strip() for x in level_strs] levheader = "Levels (%d, %s): " % (len(self.levels), self.levels.dtype) width, height = get_terminal_size() max_width = (width if get_option("display.width") == 0 else get_option("display.width")) if com.in_ipython_frontend(): # 0 = no breaks max_width = 0 levstring = "" start = True cur_col_len = len(levheader) sep_len, sep = (3, " < ") if self.ordered else (2, ", ") for val in level_strs: if max_width != 0 and cur_col_len + sep_len + len(val) > max_width: levstring += "\n" + (" " * len(levheader)) cur_col_len = len(levheader) if not start: levstring += sep cur_col_len += len(val) levstring += val start = False # replace to simple save space by return levheader + "[" + levstring.replace(" < ... < ", " ... ") + "]"
def get_console_size(): """Return console size as tuple = (width, height). Returns (None,None) in non-interactive session. """ from pandas import get_option from pandas.core import common as com display_width = get_option('display.width') # deprecated. display_height = get_option('display.height', silent=True) # Consider # interactive shell terminal, can detect term size # interactive non-shell terminal (ipnb/ipqtconsole), cannot detect term # size non-interactive script, should disregard term size # in addition # width,height have default values, but setting to 'None' signals # should use Auto-Detection, But only in interactive shell-terminal. # Simple. yeah. if com.in_interactive_session(): if com.in_ipython_frontend(): # sane defaults for interactive non-shell terminal # match default for width,height in config_init from pandas.core.config import get_default_val terminal_width = get_default_val('display.width') terminal_height = get_default_val('display.height') else: # pure terminal terminal_width, terminal_height = get_terminal_size() else: terminal_width, terminal_height = None, None # Note if the User sets width/Height to None (auto-detection) # and we're in a script (non-inter), this will return (None,None) # caller needs to deal. return (display_width or terminal_width, display_height or terminal_height)
def _repr_categories_info(self): """ Returns a string representation of the footer.""" max_categories = (10 if get_option("display.max_categories") == 0 else get_option("display.max_categories")) category_strs = fmt.format_array(self.categories.get_values(), None) if len(category_strs) > max_categories: num = max_categories // 2 head = category_strs[:num] tail = category_strs[-(max_categories - num):] category_strs = head + ["..."] + tail # Strip all leading spaces, which format_array adds for columns... category_strs = [x.strip() for x in category_strs] levheader = "Categories (%d, %s): " % (len(self.categories), self.categories.dtype) width, height = get_terminal_size() max_width = (width if get_option("display.width") == 0 else get_option("display.width")) if com.in_ipython_frontend(): # 0 = no breaks max_width = 0 levstring = "" start = True cur_col_len = len(levheader) sep_len, sep = (3, " < ") if self.ordered else (2, ", ") for val in category_strs: if max_width != 0 and cur_col_len + sep_len + len(val) > max_width: levstring += "\n" + (" "* len(levheader)) cur_col_len = len(levheader) if not start: levstring += sep cur_col_len += len(val) levstring += val start = False # replace to simple save space by return levheader + "["+levstring.replace(" < ... < ", " ... ")+"]"