Module pandas_profiling.report.presentation.flavours.widget.sequence

Expand source code
from ipywidgets import widgets

from pandas_profiling.report.presentation.abstract.renderable import Renderable
from pandas_profiling.report.presentation.core.sequence import Sequence


def get_name(item: Renderable):
    if hasattr(item, "name"):
        return item.name
    else:
        return item.anchor_id


def get_tabs(items):
    children = []
    titles = []
    for item in items:
        children.append(item.render())
        titles.append(get_name(item))

    tab = widgets.Tab()
    tab.children = children
    for id, title in enumerate(titles):
        tab.set_title(id, title)
    return tab


def get_list(items):
    return widgets.VBox(
        [
            widgets.VBox(
                [
                    widgets.HTML("<strong>{name}</strong>".format(name=get_name(item))),
                    item.render(),
                ]
            )
            for item in items
        ]
    )


def get_row(items):
    if len(items) == 1:
        layout = widgets.Layout(width="100%", grid_template_columns="100%")
    elif len(items) == 2:
        layout = widgets.Layout(width="100%", grid_template_columns="50% 50%")
    elif len(items) == 3:
        layout = widgets.Layout(width="100%", grid_template_columns="25% 25% 50%")
    elif len(items) == 4:
        layout = widgets.Layout(width="100%", grid_template_columns="25% 25% 25% 25%")
    else:
        raise ValueError("Layout undefined for this number of columns")

    return widgets.GridBox([item.render() for item in items], layout=layout)


def get_accordion(items):
    children = []
    titles = []
    for item in items:
        children.append(item.render())
        titles.append(get_name(item))

    accordion = widgets.Accordion(children=children)
    for id, title in enumerate(titles):
        accordion.set_title(id, title)

    return accordion


class WidgetSequence(Sequence):
    def render(self):
        if self.sequence_type == "list":
            widget = get_list(self.content["items"])
        elif self.sequence_type in ["tabs", "sections"]:
            widget = get_tabs(self.content["items"])
        elif self.sequence_type == "accordion":
            widget = get_accordion(self.content["items"])
        elif self.sequence_type == "grid":
            widget = get_row(self.content["items"])
        else:
            raise ValueError("widget type not understood", self.sequence_type)

        return widget

Functions

def get_accordion(items)
Expand source code
def get_accordion(items):
    children = []
    titles = []
    for item in items:
        children.append(item.render())
        titles.append(get_name(item))

    accordion = widgets.Accordion(children=children)
    for id, title in enumerate(titles):
        accordion.set_title(id, title)

    return accordion
def get_list(items)
Expand source code
def get_list(items):
    return widgets.VBox(
        [
            widgets.VBox(
                [
                    widgets.HTML("<strong>{name}</strong>".format(name=get_name(item))),
                    item.render(),
                ]
            )
            for item in items
        ]
    )
def get_name(item)
Expand source code
def get_name(item: Renderable):
    if hasattr(item, "name"):
        return item.name
    else:
        return item.anchor_id
def get_row(items)
Expand source code
def get_row(items):
    if len(items) == 1:
        layout = widgets.Layout(width="100%", grid_template_columns="100%")
    elif len(items) == 2:
        layout = widgets.Layout(width="100%", grid_template_columns="50% 50%")
    elif len(items) == 3:
        layout = widgets.Layout(width="100%", grid_template_columns="25% 25% 50%")
    elif len(items) == 4:
        layout = widgets.Layout(width="100%", grid_template_columns="25% 25% 25% 25%")
    else:
        raise ValueError("Layout undefined for this number of columns")

    return widgets.GridBox([item.render() for item in items], layout=layout)
def get_tabs(items)
Expand source code
def get_tabs(items):
    children = []
    titles = []
    for item in items:
        children.append(item.render())
        titles.append(get_name(item))

    tab = widgets.Tab()
    tab.children = children
    for id, title in enumerate(titles):
        tab.set_title(id, title)
    return tab

Classes

class WidgetSequence (items, sequence_type, **kwargs)

Helper class that provides a standard way to create an ABC using inheritance.

Expand source code
class WidgetSequence(Sequence):
    def render(self):
        if self.sequence_type == "list":
            widget = get_list(self.content["items"])
        elif self.sequence_type in ["tabs", "sections"]:
            widget = get_tabs(self.content["items"])
        elif self.sequence_type == "accordion":
            widget = get_accordion(self.content["items"])
        elif self.sequence_type == "grid":
            widget = get_row(self.content["items"])
        else:
            raise ValueError("widget type not understood", self.sequence_type)

        return widget

Ancestors

Methods

def render(self)
Expand source code
def render(self):
    if self.sequence_type == "list":
        widget = get_list(self.content["items"])
    elif self.sequence_type in ["tabs", "sections"]:
        widget = get_tabs(self.content["items"])
    elif self.sequence_type == "accordion":
        widget = get_accordion(self.content["items"])
    elif self.sequence_type == "grid":
        widget = get_row(self.content["items"])
    else:
        raise ValueError("widget type not understood", self.sequence_type)

    return widget