B
    He              	   @   s  d dl mZmZmZ d dlmZmZmZmZm	Z	m
Z
mZmZmZ ddlmZmZ ddlmZmZ ddlmZ ddlmZmZ ddlmZ dd	lmZ dd
lmZ ddlm Z m!Z! ddl"m#Z# ddl$m%Z% ddl&m'Z'm(Z( ddl)m*Z*m+Z+ erddl,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2 eG dd dZ3eG dd dZ4G dd de	Z5G dd deZ6e7dkrd dl8m-Z- d dl9m:Z: d dl;m6Z6 ddl<m=Z= e=d~ e6dd d!d"Z>e>j?d#d$d%d&d' e>j?d(d)d* e>j?d+d!d,d- e>@d.d/d0 e>@d1d2d3 e>j@d4d5d6d7d&d8 e>@d9d:d; eAd<d=d>d?ZBe- Z,e: ZCeBd@ e,jDe>dAdB d&e>_EeBdC e,De> dDe>_FeBdE e,jDe>dAdB d<e>_FdFe>_EdGdHge>_GeBdI e,jDe>dAdB d<e>_FdFe>_EdGdHge>_Gde>_HeBdJ e,jDe>dAdB d<e>_FdFe>_EdGdHge>_Gd&e>_Id e>_HeBdK e,jDe>dAdB W d<Q R X d<S )L    )	dataclassfieldreplace)	TYPE_CHECKINGDictIterableList
NamedTupleOptionalSequenceTupleUnion   )boxerrors)loop_first_last	loop_last)	pick_bool)ratio_distributeratio_reduce)VerticalAlignMethod)JupyterMixin)Measurement)PaddingPaddingDimensions)is_renderable)Segment)Style	StyleType)TextTextType)ConsoleConsoleOptionsJustifyMethodOverflowMethodRenderableTypeRenderResultc               @   s  e Zd ZU dZdZded< dZded< dZeed< dZ	eed< dZ
eed< d	Zd
ed< dZded< dZded< dZee ed< dZee ed< dZee ed< dZee ed< dZeed< dZeed< eedZed ed< d dddZeed dd d!Zeedd"d#ZdS )$Columna
  Defines a column within a ~Table.

    Args:
        title (Union[str, Text], optional): The title of the table rendered at the top. Defaults to None.
        caption (Union[str, Text], optional): The table caption rendered below. Defaults to None.
        width (int, optional): The width in characters of the table, or ``None`` to automatically fit. Defaults to None.
        min_width (Optional[int], optional): The minimum width of the table, or ``None`` for no minimum. Defaults to None.
        box (box.Box, optional): One of the constants in box.py used to draw the edges (see :ref:`appendix_box`), or ``None`` for no box lines. Defaults to box.HEAVY_HEAD.
        safe_box (Optional[bool], optional): Disable box characters that don't display on windows legacy terminal with *raster* fonts. Defaults to True.
        padding (PaddingDimensions, optional): Padding for cells (top, right, bottom, left). Defaults to (0, 1).
        collapse_padding (bool, optional): Enable collapsing of padding around cells. Defaults to False.
        pad_edge (bool, optional): Enable padding of edge cells. Defaults to True.
        expand (bool, optional): Expand the table to fit the available space if ``True``, otherwise the table width will be auto-calculated. Defaults to False.
        show_header (bool, optional): Show a header row. Defaults to True.
        show_footer (bool, optional): Show a footer row. Defaults to False.
        show_edge (bool, optional): Draw a box around the outside of the table. Defaults to True.
        show_lines (bool, optional): Draw lines between every row. Defaults to False.
        leading (bool, optional): Number of blank lines between rows (precludes ``show_lines``). Defaults to 0.
        style (Union[str, Style], optional): Default style for the table. Defaults to "none".
        row_styles (List[Union, str], optional): Optional list of row styles, if more than one style is given then the styles will alternate. Defaults to None.
        header_style (Union[str, Style], optional): Style of the header. Defaults to "table.header".
        footer_style (Union[str, Style], optional): Style of the footer. Defaults to "table.footer".
        border_style (Union[str, Style], optional): Style of the border. Defaults to None.
        title_style (Union[str, Style], optional): Style of the title. Defaults to None.
        caption_style (Union[str, Style], optional): Style of the caption. Defaults to None.
        title_justify (str, optional): Justify method for title. Defaults to "center".
        caption_justify (str, optional): Justify method for caption. Defaults to "center".
        highlight (bool, optional): Highlight cell contents (if str). Defaults to False.
     r%   headerfooterheader_stylefooter_stylestyleleftr#   justifytopr   verticalellipsisr$   overflowNwidth	min_width	max_widthratioFno_wrapr   _index)default_factory_cells)returnc             C   s   t | g dS )zReturn a copy of this Column.)r;   )r   )self r>   j/var/www/downstreamdata.science/rtclock/rtclock-venv/lib/python3.7/site-packages/pip/_vendor/rich/table.pycopyr   s    zColumn.copyc             c   s   | j E dH  dS )z2Get all cells in the column, not including header.N)r;   )r=   r>   r>   r?   cellsv   s    zColumn.cellsc             C   s
   | j dk	S )z!Check if this column is flexible.N)r7   )r=   r>   r>   r?   flexible{   s    zColumn.flexible) __name__
__module____qualname____doc__r)   __annotations__r*   r+   r   r,   r-   r/   r1   r3   r4   r
   intr5   r6   r7   r8   boolr9   r   listr;   r   r@   propertyr   rA   rB   r>   r>   r>   r?   r'   &   s*   
r'   c               @   s.   e Zd ZU dZdZee ed< dZe	ed< dS )RowzInformation regarding a row.Nr-   Fend_section)
rC   rD   rE   rF   r-   r
   r   rG   rM   rI   r>   r>   r>   r?   rL      s   
rL   c               @   s*   e Zd ZU dZeed< ded< eed< dS )_CellzA single cell in a table.r-   r%   
renderabler1   N)rC   rD   rE   rF   r   rG   r   r>   r>   r>   r?   rN      s
   
rN   c               @   s  e Zd ZU dZee ed< ee ed< ddddej	ddddddddddd	dd
dddddddde
eef ee ee ee ee eej ee eeeeeeeeeeeee  ee ee ee ee ee ddeddddZeddddde
eef eeeed dddZeedddZejeddddZeedddZeedddZdeed d!d"Zdd#ed$d%d&Zeeeeeef dd'd(Z e jed d)d*d(Z dPdddd,d-d.dddddd/d0d0ee ee ee dd1d2ee ee ee ee edd3d4d5Z!ddd6ed0 ee edd7d8d9Z"ddd:d;Z#dd#d<d$d=d>Z$dd#ee d$d?d@Z%eee ee eee dAdBdCZ&deeee' dDdEdFZ(eedGdHdIZ)dd#eedJdKdLZ*dd#ee d<dMdNdOZ+dS )QTablea  A console renderable to draw a table.

    Args:
        *headers (Union[Column, str]): Column headers, either as a string, or :class:`~rich.table.Column` instance.
        title (Union[str, Text], optional): The title of the table rendered at the top. Defaults to None.
        caption (Union[str, Text], optional): The table caption rendered below. Defaults to None.
        width (int, optional): The width in characters of the table, or ``None`` to automatically fit. Defaults to None.
        min_width (Optional[int], optional): The minimum width of the table, or ``None`` for no minimum. Defaults to None.
        box (box.Box, optional): One of the constants in box.py used to draw the edges (see :ref:`appendix_box`), or ``None`` for no box lines. Defaults to box.HEAVY_HEAD.
        safe_box (Optional[bool], optional): Disable box characters that don't display on windows legacy terminal with *raster* fonts. Defaults to True.
        padding (PaddingDimensions, optional): Padding for cells (top, right, bottom, left). Defaults to (0, 1).
        collapse_padding (bool, optional): Enable collapsing of padding around cells. Defaults to False.
        pad_edge (bool, optional): Enable padding of edge cells. Defaults to True.
        expand (bool, optional): Expand the table to fit the available space if ``True``, otherwise the table width will be auto-calculated. Defaults to False.
        show_header (bool, optional): Show a header row. Defaults to True.
        show_footer (bool, optional): Show a footer row. Defaults to False.
        show_edge (bool, optional): Draw a box around the outside of the table. Defaults to True.
        show_lines (bool, optional): Draw lines between every row. Defaults to False.
        leading (bool, optional): Number of blank lines between rows (precludes ``show_lines``). Defaults to 0.
        style (Union[str, Style], optional): Default style for the table. Defaults to "none".
        row_styles (List[Union, str], optional): Optional list of row styles, if more than one style is given then the styles will alternate. Defaults to None.
        header_style (Union[str, Style], optional): Style of the header. Defaults to "table.header".
        footer_style (Union[str, Style], optional): Style of the footer. Defaults to "table.footer".
        border_style (Union[str, Style], optional): Style of the border. Defaults to None.
        title_style (Union[str, Style], optional): Style of the title. Defaults to None.
        caption_style (Union[str, Style], optional): Style of the caption. Defaults to None.
        title_justify (str, optional): Justify method for title. Defaults to "center".
        caption_justify (str, optional): Justify method for caption. Defaults to "center".
        highlight (bool, optional): Highlight cell contents (if str). Defaults to False.
    columnsrowsN)r   r   FTr   noneztable.headerztable.footercenter)titlecaptionr4   r5   r   safe_boxpaddingcollapse_paddingpad_edgeexpandshow_headershow_footer	show_edge
show_linesleadingr-   
row_stylesr+   r,   border_styletitle_stylecaption_styletitle_justifycaption_justify	highlightr#   )headersrU   rV   r4   r5   r   rW   rX   rY   rZ   r[   r\   r]   r^   r_   r`   r-   ra   r+   r,   rb   rc   rd   re   rf   rg   r<   c            G   s   g | _ g | _|| _|| _|| _|| _|| _|| _t	|| _
|	| _|
| _|| _|| _|| _|| _|| _|| _|| _|pxd| _|pd| _|| _|| _|| _|| _|| _|| _t|pg | _| j j}x8|D ]0}t|t r| j!|d qt"| j |_#|| qW d S )Nr(   )r)   )$rQ   rR   rU   rV   r4   r5   r   rW   r   unpack_paddingrZ   _expandr\   r]   r^   r_   r`   rY   r-   r+   r,   rb   rc   rd   re   rf   rg   rJ   ra   append
isinstancestr
add_columnlenr9   )r=   rU   rV   r4   r5   r   rW   rX   rY   rZ   r[   r\   r]   r^   r_   r`   r-   ra   r+   r,   rb   rc   rd   re   rf   rg   rh   append_columnr)   r>   r>   r?   __init__   sB    



zTable.__init__)rX   rY   rZ   r[   )rh   rX   rY   rZ   r[   r<   c            G   s   | |d||ddd||dS )a  Get a table with no lines, headers, or footer.

        Args:
            *headers (Union[Column, str]): Column headers, either as a string, or :class:`~rich.table.Column` instance.
            padding (PaddingDimensions, optional): Get padding around cells. Defaults to 0.
            collapse_padding (bool, optional): Enable collapsing of padding around cells. Defaults to True.
            pad_edge (bool, optional): Enable padding around edges of table. Defaults to False.
            expand (bool, optional): Expand the table to fit the available space if ``True``, otherwise the table width will be auto-calculated. Defaults to False.

        Returns:
            Table: A table instance.
        NF)r   rX   rY   r\   r]   r^   rZ   r[   r>   )clsrX   rY   rZ   r[   rh   r>   r>   r?   grid   s    z
Table.grid)r<   c             C   s   | j p| jdk	S )z-Setting a non-None self.width implies expand.N)rk   r4   )r=   r>   r>   r?   r[     s    zTable.expand)r[   r<   c             C   s
   || _ dS )zSet expand.N)rk   )r=   r[   r>   r>   r?   r[   !  s    c             C   s4   d}| j r| jr|d7 }| j r0|t| jd 7 }|S )z'Get extra width to add to cell content.r      r   )r   r^   rp   rQ   )r=   r4   r>   r>   r?   _extra_width&  s    zTable._extra_widthc             C   s
   t | jS )zGet the current number of rows.)rp   rR   )r=   r>   r>   r?   	row_count0  s    zTable.row_countr!   )consoleindexr<   c             C   sR   t  }| jr,||| j|t| j  7 }| j| j}|dk	rN|||7 }|S )zGet the current row style.N)r   nullra   	get_stylerp   rR   r-   )r=   rx   ry   r-   	row_styler>   r>   r?   get_row_style5  s    zTable.get_row_styler"   )rx   optionsr<   c                s   j | jd k	r| jdk r(tddS | j}t| | | j  fdd| jD }tdd |D | }| jd krtdd |D | n| j}t||}|	| j
}|S )Nr   c                s   g | ]}  |qS r>   )update_width).0column)_measure_columnrx   r6   r~   r>   r?   
<listcomp>Q  s   z*Table.__rich_measure__.<locals>.<listcomp>c             s   s   | ]}|j V  qd S )N)minimum)r   measurementr>   r>   r?   	<genexpr>U  s    z)Table.__rich_measure__.<locals>.<genexpr>c             s   s   | ]}|j V  qd S )N)maximum)r   r   r>   r>   r?   r   X  s    )r6   r4   r   rv   sum_calculate_column_widthsr   r   rQ   clampr5   )r=   rx   r~   extra_widthmeasurementsminimum_widthmaximum_widthr   r>   )r   rx   r6   r~   r?   __rich_measure__?  s$    


 
zTable.__rich_measure__c             C   s   | j S )zGet cell padding.)rj   )r=   r>   r>   r?   rX   `  s    zTable.padding)rX   r<   c             C   s   t || _| S )zSet cell padding.)r   ri   rj   )r=   rX   r>   r>   r?   rX   e  s    r(   r.   r0   r2   )r+   r,   r-   r/   r1   r3   r4   r5   r6   r7   r8   r%   r   r$   )r)   r*   r+   r,   r-   r/   r1   r3   r4   r5   r6   r7   r8   r<   c            C   sF   t t| j|||pd|pd|p d||||	|
|||d}| j| dS )a  Add a column to the table.

        Args:
            header (RenderableType, optional): Text or renderable for the header.
                Defaults to "".
            footer (RenderableType, optional): Text or renderable for the footer.
                Defaults to "".
            header_style (Union[str, Style], optional): Style for the header, or None for default. Defaults to None.
            footer_style (Union[str, Style], optional): Style for the footer, or None for default. Defaults to None.
            style (Union[str, Style], optional): Style for the column cells, or None for default. Defaults to None.
            justify (JustifyMethod, optional): Alignment for cells. Defaults to "left".
            vertical (VerticalAlignMethod, optional): Vertical alignment, one of "top", "middle", or "bottom". Defaults to "top".
            overflow (OverflowMethod): Overflow method: "crop", "fold", "ellipsis". Defaults to "ellipsis".
            width (int, optional): Desired width of column in characters, or None to fit to contents. Defaults to None.
            min_width (Optional[int], optional): Minimum width of column, or ``None`` for no minimum. Defaults to None.
            max_width (Optional[int], optional): Maximum width of column, or ``None`` for no maximum. Defaults to None.
            ratio (int, optional): Flexible ratio for the column (requires ``Table.expand`` or ``Table.width``). Defaults to None.
            no_wrap (bool, optional): Set to ``True`` to disable wrapping of this column.
        r(   )r9   r)   r*   r+   r,   r-   r/   r1   r3   r4   r5   r6   r7   r8   N)r'   rp   rQ   rl   )r=   r)   r*   r+   r,   r-   r/   r1   r3   r4   r5   r6   r7   r8   r   r>   r>   r?   ro   k  s     %zTable.add_column)r-   rM   )renderablesr-   rM   r<   c            G   s  t ddddd}t|}| j}t|t|k rJ|dgt|t|  }xt|D ]\}}|t|krt |d}	x| jD ]}
||	td qzW | j|	 n|| }	|dkr||	d qTt|r||	| qTt	
dt|j d	qTW | jt||d
 dS )a  Add a row of renderables.

        Args:
            *renderables (None or renderable): Each cell in a row must be a renderable object (including str),
                or ``None`` for a blank cell.
            style (StyleType, optional): An optional style to apply to the entire row. Defaults to None.
            end_section (bool, optional): End a section and draw a line. Defaults to False.

        Raises:
            errors.NotRenderableError: If you add something that can't be rendered.
        r%   N)r   rO   r<   c             S   s   | j | d S )N)r;   rl   )r   rO   r>   r>   r?   add_cell  s    zTable.add_row.<locals>.add_cell)r9   r(   zunable to render z1; a string or other renderable object is required)r-   rM   )r'   rJ   rQ   rp   	enumeraterR   r   rl   r   r   NotRenderableErrortyperC   rL   )r=   r-   rM   r   r   cell_renderablesrQ   ry   rO   r   _r>   r>   r?   add_row  s(    
zTable.add_rowc             C   s   | j rd| j d _dS )z2Add a new section (draw a line after current row).TN)rR   rM   )r=   r>   r>   r?   add_section  s    zTable.add_sectionr&   c             #   s   | j stdV  d S |j}| jd k	r*| j}| j}|  ||| }t|| }|j|| j	d ddt
tddd fdd}| jr|| jt| jd	| jd
E d H  |  |E d H  | jr|| jt| jd| jd
E d H  d S )N
)r4   rg   heightrT   r#   r&   )textr-   r/   r<   c                s4   t | tr j| |ddn| } j|j|ddS )NF)r-   rg   )r/   )r~   )rm   rn   
render_strrenderupdate)r   r-   r/   render_text)rx   render_optionsr>   r?   render_annotation  s    z1Table.__rich_console__.<locals>.render_annotationztable.title)r-   r/   ztable.caption)rT   )rQ   r   r6   r4   rv   r   r   r   r   rg   r    r   rU   r   
pick_firstrc   re   _renderrV   rd   rf   )r=   rx   r~   r6   r   widthstable_widthr   r>   )rx   r   r?   __rich_console__  s2    


zTable.__rich_console__c                s  j }j} fdd|D }dd |D }jj}jrdd |D }t|rdd t||D }	fdd|D }
|t|	 }t|||
}t	|}x.t
|D ]"\}}|jr|	| t| ||< qW t|}||kr\|dd |D |}t|}||kr2|| }t|dgt| ||}t|} fd	dt||D }d
d |D }||k rnjsjdk	r|j| k r̈jdkr|ntj| |}t|| |}dd t||D }|S )zNCalculate the widths of each column, including padding, not including borders.c                s   g | ]}  |qS r>   )r   )r   r   )rx   r~   r=   r>   r?   r     s    z2Table._calculate_column_widths.<locals>.<listcomp>c             S   s   g | ]}|j pd qS )r   )r   )r   _ranger>   r>   r?   r     s    c             S   s   g | ]}|j r|jpd qS )r   )rB   r7   )r   colr>   r>   r?   r     s    c             S   s    g | ]\}}|j rd n|jqS )r   )rB   r   )r   r   r   r>   r>   r?   r     s   c                s&   g | ]}|j r|jpd  |j qS )r   )rB   r4   r9   )r   r   )get_padding_widthr>   r?   r     s   c             S   s   g | ]}|j d ko|j qS )N)r4   r8   )r   r   r>   r>   r?   r   *  s    r   c                s$   g | ]\}}  ||qS r>   )r   r   )r   r4   r   )rx   r~   r=   r>   r?   r   5  s   c             S   s   g | ]}|j pd qS )r   )r   )r   r   r>   r>   r?   r   8  s    Nc             S   s   g | ]\}}|| qS r>   r>   )r   _widthpadr>   r>   r?   r   C  s    )r6   rQ   _get_padding_widthrv   r[   anyzipr   r   iterr   rB   next_collapse_widthsr   rp   r5   min)r=   rx   r~   r6   rQ   width_rangesr   r   ratiosfixed_widthsflex_minimumflexible_widthflex_widthsiter_flex_widthsry   r   r   excess_width
_max_width
pad_widthsr>   )rx   r   r~   r=   r?   r     sP    


zTable._calculate_column_widths)r   wrapabler6   r<   c       
         s   t |}|| }t|rx|r|dkrtdd t||D  t fddt||D } | } fddt||D }t|r|sP t||gt| }	t|||	|}t |}|| }qW |S )aM  Reduce widths so that the total is under max_width.

        Args:
            widths (List[int]): List of widths.
            wrapable (List[bool]): List of booleans that indicate if a column may shrink.
            max_width (int): Maximum width to reduce to.

        Returns:
            List[int]: A new list of widths.
        r   c             s   s   | ]\}}|r|V  qd S )Nr>   )r   r4   
allow_wrapr>   r>   r?   r   Z  s    z)Table._collapse_widths.<locals>.<genexpr>c             3   s&   | ]\}}|r| kr|nd V  qdS )r   Nr>   )r   r4   r   )
max_columnr>   r?   r   ]  s   c                s$   g | ]\}}| kr|rd ndqS )r   r   r>   )r   r4   r   )r   r>   r?   r   b  s   z*Table._collapse_widths.<locals>.<listcomp>)r   r   maxr   r   rp   r   )
rs   r   r   r6   total_widthr   second_max_columncolumn_differencer   
max_reducer>   )r   r?   r   G  s&    

zTable._collapse_widths)rx   column_indexr   r<   c             #   s  | j | j| jt}|dk|t| jd ki  tttttttf d fdd}g }|j	}|j
}| jr|| jpd||j }	||	|jf ||jpd}
x|jD ]}||
|f qW | jr|| jpd||j }|||jf |rJt}xzt|D ]:\}}\}}t||||||t|ddp<|jV  q
W n2x0|D ](\}}t||t|ddpp|jV  qPW dS )	z3Get all the cells with padding and optional header.r   r   )	first_rowlast_rowr<   c                s     | |f}|r|S \}}}}rJs8td|| }|sJtd|| }snrVd}r^d}| rfd}|rnd}||||f}| | |f< |S )Nr   )getr   )r   r   cachedr0   rightbottomr.   rj   )_padding_cacherY   first_columnlast_columnrZ   rX   r>   r?   get_padding}  s*    z%Table._get_cells.<locals>.get_paddingr(   r1   N)rY   rZ   rX   r   rp   rQ   rI   r   rH   rl   r{   r\   r+   r)   r-   rA   r]   r,   r*   r   r   rN   getattrr1   )r=   rx   r   r   any_paddingr   	raw_cells_appendr{   r+   
cell_stylecellr,   _Paddingfirstlastr-   rO   r>   )r   rY   r   r   rZ   rX   r?   
_get_cellsn  sD    ,

 zTable._get_cells)r   r<   c             C   s2   | j \}}}}| jr*|dkr*td|| }|| S )zGet extra width from padding.r   )rX   rY   r   )r=   r   r   	pad_rightpad_leftr>   r>   r?   r     s
    zTable._get_padding_width)rx   r~   r   r<   c             C   s   |j }|dk rtddS | |j}|jdk	rJt|j| |j| |S g }g }|j}|j}	tj}
x:| ||j|D ]&}|
|||j	\}}|| |	| qvW t|rt
|nd|rt
|n||}||jdkrdn|j| |j dkrdn|j | }|S )z0Get the minimum and maximum width of the column.r   r   N)r6   r   r   r9   r4   with_maximumrl   r   r   rO   r   r   r5   )r=   rx   r~   r   r6   padding_width
min_widths
max_widths
append_min
append_maxget_render_widthr   _min_maxr   r>   r>   r?   r     s2    

zTable._measure_column)rx   r~   r   r<   c       %   	   #   s   	jpd}| 	jpd }	fddt	jD }tt| }	jrj	jj|t		j
j
dnd }|r	js| n|}t }		j}
	j}	j}	j}	j}	j}t |r> |j| |j| |j|f |j| |j| |j|f |j| |j| |j|fg}|rB |||V  |	V  ng }	j}j x<tt|D ]*\}\}}}|ov||o|ss	j||  nd }dg }srt ! n||r|d n|xjt|||
D ]Z\}}}|j"||j#|j$|j%d d}j&|j'||j d}t(t)||*| qW t(dd |D t+t+t  d	t,t t+t+t  d
 fdd fddt||||
D |d d < |r|r|r |j-|d|d|V  |	V  ||rdn|rdnd \}}}|j./ r|n |j.j0|j } xt1D ]V}!|rD|V  x0t2|D ]$\}"}#|#|! E d H  |"sN| V  qNW |r|V  |	V  q4W n8x6t1D ]*}!x|D ]}#|#|! E d H  qW |	V  qW |r|r|r |j-|d|d|V  |	V  |o|j3}$|r^|s|s|$r^|s^|r:|t)|d ks^|rFs^|rj |j-|d|d| |V  n |j-|d|d|V  |	V  q^W |r|r |4||V  |	V  d S )Nr(   c             3   s    | ]\}}  ||V  qd S )N)r   )r   r   r   )rx   r=   r>   r?   r     s   z Table._render.<locals>.<genexpr>)safer   )r4   r/   r8   r3   r   )r-   c             s   s   | ]}t |V  qd S )N)rp   )r   r   r>   r>   r?   r   @  s    r   )r   r1   r4   r-   r<   c                sR   r
d}nrd}|dkr*  | ||S |dkrB | ||S  | ||S )Nr   r0   middle)	align_topalign_middlealign_bottom)r   r1   r4   r-   )_Segment
footer_row
header_row
row_heightr>   r?   
align_cellB  s    z!Table._render.<locals>.align_cellc          
      s8   g | ]0\}}}}  ||j||j |qS r>   )	set_shaper1   r-   )r   r4   _cellr   r   )r   r   r{   
max_heightr|   r>   r?   r   T  s   
z!Table._render.<locals>.<listcomp>foot)edger   ru   headmidrow)5r{   r-   rb   r   rQ   rJ   r   r   
substituter   rW   r\   Zget_plain_headed_boxr   liner]   r^   r_   r`   	head_left
head_righthead_vertical	foot_left
foot_rightfoot_verticalmid_left	mid_rightmid_verticalget_topr}   r   rR   r   rz   r   r/   r8   r3   render_linesrO   r   rp   rl   r   rH   get_rowr   stripbackground_styleranger   rM   
get_bottom)%r=   rx   r~   r   table_stylerb   _column_cells	row_cells_boxnew_linerQ   r\   r]   r^   r_   r`   box_segmentsr}   ry   r   r   row_cellr   rA   r4   r   r   r   linesr.   r   _dividerdividerline_no	last_cellrendered_cellrM   r>   )
r   r   rx   r   r{   r   r   r   r|   r=   r?   r     s     





 



 
"

zTable._render)r(   r(   ),rC   rD   rE   rF   r   r'   rG   rL   r   
HEAVY_HEADr   rn   r
   r    rH   BoxrI   r   r   r   rr   classmethodrt   rK   r[   setterrv   rw   r}   r   r   r   rX   ro   r   r   r   r   r   rN   r   r   r   r   r>   r>   r>   r?   rP      s   
x%	 <**/>%G
$
rP   __main__)r!   )ReprHighlighter)rP   )timerzTable renderzStar Wars MovieszRich example tabler   )rU   rV   rf   ZReleasedbright_cyancyanT)r+   r-   r8   ZTitlemagenta)r-   z
Box Officegreen)r/   r-   zDec 20, 2019z Star Wars: The Rise of Skywalkerz$952,110,690zMay 25, 2018zSolo: A Star Wars Storyz$393,151,347zDec 15, 2017z!Star Wars Ep. V111: The Last Jediz$1,332,539,889zon black)r-   rM   zDec 16, 2016zRogue One: A Star Wars Storyz$1,332,439,889N)r   r<   c             C   s"   t   t t|  t   d S )N)rx   printrulerg   )r   r>   r>   r?   r)     s    r)   zExample TablerT   )r/   zexpand=True2   zwidth=50FdimrS   zrow_styles=['dim', 'none']z%leading=1, row_styles=['dim', 'none']z+show_lines=True, row_styles=['dim', 'none'])Jdataclassesr   r   r   typingr   r   r   r   r	   r
   r   r   r   r(   r   r   _loopr   r   _pickr   _ratior   r   alignr   jupyterr   measurer   rX   r   r   protocolr   segmentr   r-   r   r   r   r   r    rx   r!   r"   r#   r$   r%   r&   r'   rL   rN   rP   rC   pip._vendor.rich.consoleZpip._vendor.rich.highlighterr  pip._vendor.rich.tableZ_timerr  tablero   r   rn   r)   rg   r"  r[   r4   ra   r`   r_   r>   r>   r>   r?   <module>   s   , 
[      




