o
    RhY                     @   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rd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rd dl8m-Z- d dl9m:Z: 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.d/ e=?d0d1d2 e=j?d3d4d5d6d%d7 e=?d8d9d: d;e@d<d=fd>d?ZAe- Z,e: ZBeAd@ e,jCe=dAdB d%e=_DeAdC e,Ce= dDe=_EeAdE e,jCe=dAdB d=e=_EdFe=_DdGdHge=_FeAdI e,jCe=dAdB d=e=_EdFe=_DdGdHge=_Fde=_GeAdJ e,jCe=dAdB d=e=_EdFe=_DdGdHge=_Fd%e=_Hd e=_GeAdK e,jCe=dAdB W d=   d=S 1 sw   Y  d=S 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< 	 dZeed< 	 eedZed ed< d%dd Zeded fd!d"Zedef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 (int, 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_wrap	highlightr   _index)default_factory_cellsreturnc                 C   s   t | g dS )zReturn a copy of this Column.r<   )r   self rA   L/home/air/sanwanet/backup_V2/venv/lib/python3.10/site-packages/rich/table.pycopyu   s   zColumn.copyc                 c   s    | j E dH  dS )z2Get all cells in the column, not including header.Nr>   r?   rA   rA   rB   cellsy   s   zColumn.cellsc                 C   s
   | j duS )z!Check if this column is flexible.N)r7   r?   rA   rA   rB   flexible~      
zColumn.flexible)r=   r'   )!__name__
__module____qualname____doc__r)   __annotations__r*   r+   r   r,   r-   r/   r1   r3   r4   r
   intr5   r6   r7   r8   boolr9   r:   r   listr<   r   rC   propertyr   rD   rE   rA   rA   rA   rB   r'   &   sL   
 
r'   c                   @   s0   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)
rG   rH   rI   rJ   r-   r
   r   rK   rQ   rM   rA   rA   rA   rB   rP      s   
 rP   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)rG   rH   rI   rJ   r   rK   r   rA   rA   rA   rB   rR      s   
 rR   c                7   @   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de
eef dee dee dee dee deej dee dededededededededededeee  d ee d!ee d"ee d#ee d$ee d%d&d'd&d(ed)df6d*d+Zeddddd,de
eef dedededed)d fd-d.Zed)efd/d0Zejded)dfd1d0Zed)efd2d3Zed)efd4d5Zd6d7d8ed)efd9d:Zd6d7d;d<d)efd=d>Zed)eeeeef fd?d@Z e jded)d fdAd@Z 	B	BdndddddCdDdEddddddFdGdHdIdHd ee d(ee d!ee dee dJd&dKdLdMdNdee dee dOee dPee dQed)dfdRdSZ!dddTdUedH dee dVed)dfdWdXZ"dodYdZZ#	6	7	;	<	)	[dpd\d]Z$d6d7d;d<d)ee fd^d_Z%ed`ee daee dOed)ee fdbdcZ&d6d7ddedeed)ee' fdfdgZ(dded)efdhdiZ)d6d7d;d<deed)efdjdkZ*d6d7d;d<d`ee d)d[fdldm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 (int, 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_justifyr9   headersrY   rZ   r4   r5   r   r[   r\   r]   r^   r_   r`   ra   rb   rc   rd   r-   re   r+   r,   rf   rg   rh   ri   r#   rj   r9   r=   c                G   s   g | _ g | _|| _|| _|| _|| _|| _|| _t	|| _
|	| _|
| _|| _|| _|| _|| _|| _|| _|| _|p<d| _|pAd| _|| _|| _|| _|| _|| _|| _t|pYg | _| j j}|D ]}t|t rp| j!|d qbt"| j |_#|| qbd S )Nr(   )r)   )$rU   rV   rY   rZ   r4   r5   r   r[   r   unpack_paddingr^   _expandr`   ra   rb   rc   rd   r]   r-   r+   r,   rf   rg   rh   ri   rj   r9   rN   re   append
isinstancestr
add_columnlenr:   )r@   rY   rZ   r4   r5   r   r[   r\   r]   r^   r_   r`   ra   rb   rc   rd   r-   re   r+   r,   rf   rg   rh   ri   rj   r9   rk   append_columnr)   rA   rA   rB   __init__   sD   



zTable.__init__)r\   r]   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   r\   r]   r`   ra   rb   r^   r_   rA   )clsr\   r]   r^   r_   rk   rA   rA   rB   grid   s   z
Table.gridc                 C   s   | j p| jduS )z-Setting a non-None self.width implies expand.N)rn   r4   r?   rA   rA   rB   r_     s   zTable.expandc                 C   s
   || _ dS )zSet expand.N)rn   )r@   r_   rA   rA   rB   r_   #  rF   c                 C   s4   d}| j r| jr|d7 }| j r|t| jd 7 }|S )z'Get extra width to add to cell content.r      r   )r   rb   rs   rU   )r@   r4   rA   rA   rB   _extra_width(  s   zTable._extra_widthc                 C   s
   t | jS )zGet the current number of rows.)rs   rV   r?   rA   rA   rB   	row_count2  rF   zTable.row_countconsoler!   indexc                 C   sR   t  }| jr||| j|t| j  7 }| j| j}|dur'|||7 }|S )zGet the current row style.N)r   nullre   	get_stylers   rV   r-   )r@   r{   r|   r-   	row_stylerA   rA   rB   get_row_style7  s   zTable.get_row_styleoptionsr"   c                    s   j | jd ur| jdk rtddS | j}t| | | j  fdd| jD }tdd |D | }| jd u rOtdd |D | n| j}t||}|	| j
}|S )Nr   c                    s   g | ]}  |qS rA   )update_width.0column_measure_columnr{   r6   r   rA   rB   
<listcomp>R  s    z*Table.__rich_measure__.<locals>.<listcomp>c                 s       | ]}|j V  qd S N)minimumr   measurementrA   rA   rB   	<genexpr>W      z)Table.__rich_measure__.<locals>.<genexpr>c                 s   r   r   maximumr   rA   rA   rB   r   Z  r   )r6   r4   r   ry   sum_calculate_column_widthsr   r   rU   clampr5   )r@   r{   r   extra_widthmeasurementsminimum_widthmaximum_widthr   rA   r   rB   __rich_measure__A  s0   



zTable.__rich_measure__c                 C   s   | j S )zGet cell padding.)rm   r?   rA   rA   rB   r\   b  s   zTable.paddingc                 C   s   t || _| S )zSet cell padding.)r   rl   rm   )r@   r\   rA   rA   rB   r\   g  s   r(   r.   r0   r2   )r+   r9   r,   r-   r/   r1   r3   r4   r5   r6   r7   r8   r)   r%   r*   r/   r1   r   r3   r$   r6   r7   r8   c                C   sV   t t| j|||p
d|dur|n| j|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.
            highlight (bool, optional): Whether to highlight the text. The default of None uses the value of the table (self) object.
            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(   N)r:   r)   r*   r+   r9   r,   r-   r/   r1   r3   r4   r5   r6   r7   r8   )r'   rs   rU   r9   ro   )r@   r)   r*   r+   r9   r,   r-   r/   r1   r3   r4   r5   r6   r7   r8   r   rA   rA   rB   rr   m  s$   'zTable.add_columnr-   rQ   renderablesrQ   c                G   s  dt ddddfdd}t|}| j}t|t|k r)g |dgt|t|  }t|D ]H\}}|t|krRt || jd}	| jD ]	}
||	td	 qA| j|	 n|| }	|du r`||	d	 q-t	|rj||	| q-t
d
t|j d| 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   rS   r%   r=   Nc                 S   s   | j | d S r   )r<   ro   )r   rS   rA   rA   rB   add_cell  s   zTable.add_row.<locals>.add_cell)r:   r9   r(   zunable to render z1; a string or other renderable object is requiredr   )r'   rN   rU   rs   	enumerater9   rV   r   ro   r   r   NotRenderableErrortyperG   rP   )r@   r-   rQ   r   r   cell_renderablesrU   r|   rS   r   _rA   rA   rB   add_row  s0   
zTable.add_rowc                 C   s   | j rd| j d _dS dS )z2Add a new section (draw a line after current row).TN)rV   rQ   r?   rA   rA   rB   add_section  s   zTable.add_sectionr&   c              	   #   s    | j stdV  d S |j}| jd ur| j}| j}|  ||| }t|| }|j|| j	d d	ddt
dtdddd	f fd
d}| jrY|| jt| jd| jdE d H  |  |E d H  | jry|| jt| jd| jdE d H  d S d S )N
)r4   r9   heightrX   textr-   r/   r#   r=   r&   c                    s4   t | tr j| |ddn| } j|j|ddS )NF)r-   r9   r/   )r   )rp   rq   
render_strrenderupdate)r   r-   r/   render_textr{   render_optionsrA   rB   render_annotation  s   z1Table.__rich_console__.<locals>.render_annotationztable.title)r-   r/   ztable.caption)rX   )rU   r   r6   r4   ry   r   r   r   r   r9   r    r   rY   r   
pick_firstrg   ri   _renderrZ   rh   rj   )r@   r{   r   r6   r   widthstable_widthr   rA   r   rB   __rich_console__  sN   

zTable.__rich_console__c                    s  j }j} fdd|D }dd |D }jj}jredd |D }t|redd t||D }	fdd|D }
|t|	 }t|||
}t	|}t
|D ]\}}|jrd|	| t| ||< qSt|}||kr|dd |D |}t|}||kr|| }t|dgt| ||}t|} fd	dt||D }d
d |D }||k rjsjdur|j| k r݈jdu 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 rA   )r   r   r{   r   r@   rA   rB   r     s    z2Table._calculate_column_widths.<locals>.<listcomp>c                 S      g | ]}|j pd qS r   r   r   _rangerA   rA   rB   r         c                 S   s   g | ]
}|j r|jpd qS r   )rE   r7   )r   colrA   rA   rB   r     s    c                 S   s    g | ]\}}|j rd n|jqS r   )rE   r   )r   r   r   rA   rA   rB   r     s    c                    s&   g | ]}|j r|jpd  |j qS r   )rE   r4   r:   r   )get_padding_widthrA   rB   r     s    c                 S   s   g | ]}|j d u o|j qS r   )r4   r8   r   rA   rA   rB   r   .  s    r   c                    s$   g | ]\}}  ||qS rA   )r   r   )r   r4   r   r   rA   rB   r   8      c                 S   r   r   r   r   rA   rA   rB   r   <  r   Nc                 S   s   g | ]\}}|| qS rA   rA   )r   _widthpadrA   rA   rB   r   G  s    )r6   rU   _get_padding_widthry   r_   anyzipr   r   iterr   rE   next_collapse_widthsr   rs   r5   min)r@   r{   r   r6   rU   width_rangesr   r   ratiosfixed_widthsflex_minimumflexible_widthflex_widthsiter_flex_widthsr|   r   r   excess_width
_max_width
pad_widthsrA   )r{   r   r   r@   rB   r     sb   

zTable._calculate_column_widthsr   wrapablec           
         s   t |}|| }t|rd|rd|dkrdtdd t||D  t fddt||D } | } fddt||D }t|rB|sE	 |S t||gt| }	t|||	|}t |}|| }|rd|dks|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 r   rA   r   r4   
allow_wraprA   rA   rB   r   ]  s    
z)Table._collapse_widths.<locals>.<genexpr>c                 3   s(    | ]\}}|r| kr|nd V  qdS )r   NrA   r   
max_columnrA   rB   r   `  s
    
c                    s$   g | ]\}}| kr|rd ndqS )r   r   rA   r   r   rA   rB   r   e  r   z*Table._collapse_widths.<locals>.<listcomp>)r   r   maxr   r   rs   r   )
rv   r   r   r6   total_widthr   second_max_columncolumn_differencer   
max_reducerA   r   rB   r   K  s.   
zTable._collapse_widthscolumn_indexr   c              
   #   sr   | j | j| jt}|dk|t| jd ki  dtdtdtttttf f fdd}g }|j	}|j
}| jrS|| jpEd||j }	||	|jf ||jpXd}
|jD ]}||
|f q]| jr||| jpnd||j }|||jf |rt}t|D ]\}}\}}t||||||t|d	d
p|jV  qd
S |D ]\}}t||t|d	d
p|jV  qd
S )z3Get all the cells with padding and optional header.r   r   	first_rowlast_rowr=   c                    s     | |f}|r|S \}}}}r%std|| }|s%td|| }s7r+d}r/d}| r3d}|r7d}||||f}| | |f< |S )Nr   )getr   )r   r   cachedr0   rightbottomr.   rm   _padding_cacher]   first_columnlast_columnr^   r\   rA   rB   get_padding  s*   z%Table._get_cells.<locals>.get_paddingr(   r1   N)r]   r^   r\   r   rs   rU   rM   r   rL   ro   r~   r`   r+   r)   r-   rD   ra   r,   r*   r   r   rR   getattrr1   )r@   r{   r   r   any_paddingr   	raw_cells_appendr~   r+   
cell_stylecellr,   _Paddingfirstlastr-   rS   rA   r   rB   
_get_cellsr  sR   0
zTable._get_cellsc                 C   s2   | j \}}}}| jr|dkrtd|| }|| S )zGet extra width from padding.r   )r\   r]   r   )r@   r   r   	pad_rightpad_leftrA   rA   rB   r     s
   zTable._get_padding_widthc                 C   s  |j }|dk rtddS | |j}|jdur%t|j| |j| |S g }g }|j}|j}	tj}
| ||j|D ]}|
|||j	\}}|| |	| q:t|rUt
|nd|r\t
|n||}||jdu rkdn|j| |j du ryd}|S |j | }|S )z0Get the minimum and maximum width of the column.r   r   N)r6   r   r   r:   r4   with_maximumro   r   r   rS   r   r   r5   )r@   r{   r   r   r6   padding_width
min_widths
max_widths
append_min
append_maxget_render_widthr   _min_maxr   rA   rA   rB   r     sB   


zTable._measure_columnc           %      #   s    	jpd}| 	jpd }	fddt	jD }tt| }	jr6	jj|t		j
j
dnd }|rA	jsA| n|}t }		j}
	j}	j}	j}	j}	j}t |r |j| |j| |j|f |j| |j| |j|f |j| |j| |j|fg}|r |||V  |	V  ng }	j}j tt|D ]\}\}}}|o||o|sǈsǈ	j||  nd }dg }sшrt ! n||r|d n|t|||
D ].\}}}|j"||j#|j$|j%d |j&d}j'|j(||j d}t)t*||+| qt)dd |D d	t,t,t  d
ddt-dt dt,t,t  f
 fdd fddt||||
D |d d < |r|rk|rk |j.|d|d|V  |	V  ||rqdn|rvdnd \}}}|j/0 r|n	 |j/j1|j } t2D ])}!|r|V  t3|D ]\}"}#|#|! E d H  |"s| V  q|r|V  |	V  qnt2D ]}!|D ]
}#|#|! E d H  q|	V  q|r|r|r |j.|d|d|V  |	V  |o|j4}$|r5|s|s|$r5|s5|r|t*|d ks5|rs5|r& |j.|d|d| |V  n |j.|d|d|V  |	V  q|rJ|rL |5||V  |	V  d S d S d S )Nr(   c                 3   s"    | ]\}}  ||V  qd S r   )r   )r   r   r   )r{   r@   rA   rB   r     s
    
z Table._render.<locals>.<genexpr>)safer   )r4   r/   r8   r3   r   r9   r-   c                 s   s    | ]}t |V  qd S r   )rs   )r   r   rA   rA   rB   r   E  s    r   r1   r   r4   r-   r=   c                    sR   rd}nr	d}|dkr  | ||S |dkr! | ||S  | ||S )Nr   r0   middle)	align_topalign_middlealign_bottom)r   r1   r4   r-   )_Segment
footer_row
header_row
row_heightrA   rB   
align_cellG  s   z!Table._render.<locals>.align_cellc              
      s8   g | ]\}}}}  ||j||j |qS rA   )	set_shaper1   r-   )r   r4   _cellr   r   )r  r  r~   
max_heightr   rA   rB   r   X  s    
z!Table._render.<locals>.<listcomp>foot)edger   rx   headmidrow)6r~   r-   rf   r   rU   rN   r   r   
substituter   r[   r`   get_plain_headed_boxr   linera   rb   rc   rd   	head_left
head_righthead_verticalmid_left	mid_rightmid_vertical	foot_left
foot_rightfoot_verticalget_topr   r   rV   r   r}   r   r/   r8   r3   r9   render_linesrS   r   rs   ro   r   rL   get_rowr   stripbackground_styleranger   rQ   
get_bottom)%r@   r{   r   r   table_stylerf   _column_cells	row_cells_boxnew_linerU   r`   ra   rb   rc   rd   box_segmentsr   r|   r   r   row_cellr  rD   r4   r   r   r   linesr.   r   _dividerdividerline_no	last_cellrendered_cellrQ   rA   )
r  r  r{   r  r~   r  r
  r  r   r@   rB   r     s*  











"


zTable._render)r(   r(   )r=   N)r{   r!   r   r"   r=   r&   ),rG   rH   rI   rJ   r   r'   rK   rP   r   
HEAVY_HEADr   rq   r
   r    rL   BoxrM   r   r   r   ru   classmethodrw   rO   r_   setterry   rz   r   r   r   r   r\   rr   r   r   r   r   r   rR   r   r   r   r   rA   rA   rA   rB   rT      s  
 
	


@
 	

!	

=

/
/
@&
I
(rT   __main__)r!   )ReprHighlighter)timerzTable renderzStar Wars MovieszRich example tabler   )rY   rZ   rj   Releasedbright_cyancyanT)r+   r-   r8   Titlemagentar   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 blackr   zDec 16, 2016zRogue One: A Star Wars Storyz$1,332,439,889r   r=   Nc                 C   s"   t   t t|  t   d S r   )r{   printruler9   )r   rA   rA   rB   r)     s   r)   zExample TablerX   r   zexpand=True2   zwidth=50FdimrW   zrow_styles=['dim', 'none']z%leading=1, row_styles=['dim', 'none']z+show_lines=True, row_styles=['dim', 'none'])Idataclassesr   r   r   typingr   r   r   r   r	   r
   r   r   r   r(   r   r   _loopr   r   _pickr   _ratior   r   alignr   jupyterr   measurer   r\   r   r   protocolr   segmentr   r-   r   r   r   r   r    r{   r!   r"   r#   r$   r%   r&   r'   rP   rR   rT   rG   rich.consolerich.highlighterr5  _timerr6  tablerr   r   rq   r)   r9   r=  r_   r4   re   rd   rc   rA   rA   rA   rB   <module>   s    , 
]
      





$