a
    j=ic[                     @  s   d Z ddlmZ ddlmZ ddlmZmZmZm	Z	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 dd	lmZmZ dd
lmZ G dd dZG dd deZdS )z,
Module for formatting output data in HTML.
    )annotations)dedent)AnyFinalHashableIterableMappingcast)
get_option)lib)
MultiIndexoption_context)is_url)DataFrameFormatterget_level_lengths)pprint_thingc                
   @  s  e Zd ZU dZdZded< dNddd	d
dddddZddddZddddZe	ddddZ
e	ddddZe	ddddZe	ddddZd dd!d"Ze	ddd#d$Ze	ddd%d&ZdOd(ddd)d*d+ZdPd(ddd
dd,d-d.ZdQd(dd
dd/d0d1ZdRd(ddd
dd3d4d5ZdSd dddd
d6ddd7d8d9ZdTddd:d;d<Zddd:d=d>Zddd:d?d@Zddd:dAdBZdCddDdEZddd:dFdGZdHdddIdJdKZdHdddIdLdMZdS )UHTMLFormatterac  
    Internal class for formatting output data in html.
    This class is intended for shared functionality between
    DataFrame.to_html() and DataFrame._repr_html_().
    Any logic in common with other output formatting methods
    should ideally be inherited from classes in format.py
    and this class responsible for only producing html markup.
       r   indent_deltaNFr   z(str | list[str] | tuple[str, ...] | Nonezint | bool | Nonez
str | NoneboolNone)	formatterclassesbordertable_idrender_linksreturnc                 C  s   || _ || _| j j| _| j jj| _g | _| j j| _| j j| _| j j| _|d u sV|du rft	t
td}n|snd }|| _|| _|| _dd | j j D | _d S )NTzdisplay.html.borderc                 S  s*   i | ]"\}}|t |tr"| d n|qS )Zpx)
isinstanceint).0columnvalue r"   g/home/droni/.local/share/virtualenvs/DPS-5Je3_V2c/lib/python3.9/site-packages/pandas/io/formats/html.py
<dictcomp>G   s   z*HTMLFormatter.__init__.<locals>.<dictcomp>)fmtr   frametr_framecolumnselements	bold_rowsescapeZshow_dimensionsr	   r   r
   r   r   r   	col_spaceitems)selfr   r   r   r   r   r"   r"   r#   __init__-   s$    




zHTMLFormatter.__init__strr   c                 C  s2   |   }tdd |D r(dd |D }d|S )Nc                 s  s   | ]}t |tV  qd S N)r   r0   r   xr"   r"   r#   	<genexpr>N       z*HTMLFormatter.to_string.<locals>.<genexpr>c                 S  s   g | ]}t |qS r"   )r0   r3   r"   r"   r#   
<listcomp>O   r6   z+HTMLFormatter.to_string.<locals>.<listcomp>
)renderanyjoin)r.   linesr"   r"   r#   	to_stringL   s    zHTMLFormatter.to_string	list[str]c              	   C  sH   |    | jrBtd}| dt| j d| dt| jj d | jS )N   z<p>z rows  z columns</p>)_write_tableshould_show_dimensionschrwritelenr&   r(   r)   )r.   Zbyr"   r"   r#   r9   R   s    $zHTMLFormatter.renderc                 C  s   | j jS r2   )r%   rB   r.   r"   r"   r#   rB   ]   s    z$HTMLFormatter.should_show_dimensionsc                 C  s   | j jS r2   )r%   show_row_idx_namesrF   r"   r"   r#   rG   a   s    z HTMLFormatter.show_row_idx_namesc                 C  s   | j jS r2   )r%   show_col_idx_namesrF   r"   r"   r#   rH   e   s    z HTMLFormatter.show_col_idx_namesr   c                 C  s    | j jr| jjjS | jrdS dS )N   r   )r%   indexr&   nlevelsrH   rF   r"   r"   r#   
row_levelsi   s
    
zHTMLFormatter.row_levelsr   c                 C  s   | j S r2   )r(   rF   r"   r"   r#   _get_columns_formatted_valuesx   s    z+HTMLFormatter._get_columns_formatted_valuesc                 C  s   | j jS r2   )r%   is_truncatedrF   r"   r"   r#   rN   {   s    zHTMLFormatter.is_truncatedc                 C  s   t | jjjS r2   )rE   r%   r'   r(   rF   r"   r"   r#   ncols   s    zHTMLFormatter.ncolsr   r   )sindentr   c                 C  s    t |}| jd| |  d S )Nr@   )r   r)   append)r.   rP   rQ   rsr"   r"   r#   rD      s    zHTMLFormatter.write)rP   headerrQ   tagsr   c                 C  sH   | j |d}|r2|dur2|p d}|d| d7 }| j|d||d dS )a  
        Method for writing a formatted <th> cell.

        If col_space is set on the formatter then that is used for
        the value of min-width.

        Parameters
        ----------
        s : object
            The data to be written inside the cell.
        header : bool, default False
            Set to True if the <th> is for use inside <thead>.  This will
            cause min-width to be set if there is one.
        indent : int, default 0
            The indentation level of the cell.
        tags : str, default None
            Tags to include in the cell.

        Returns
        -------
        A written <th> cell.
        N zstyle="min-width: z;"thkindrQ   rU   )r,   get_write_cell)r.   rP   rT   rQ   rU   r,   r"   r"   r#   write_th   s
    zHTMLFormatter.write_th)rP   rQ   rU   r   c                 C  s   | j |d||d d S )NtdrX   )r[   )r.   rP   rQ   rU   r"   r"   r#   write_td   s    zHTMLFormatter.write_tdr]   )rP   rY   rQ   rU   r   c           
      C  s   |d urd| d| d}nd| d}| j r<dddd}ni }t||d }| jrt|rt|i d }|d	| d
7 }d}	nd}	| | | |	 d| d| d S )N<r@   >z&amp;z&lt;z&gt;)&r_   r`   )Zescape_charsz	<a href="z" target="_blank">z</a>rV   z</)r+   r   stripr   r   rD   )
r.   rP   rY   rQ   rU   Z	start_tagescrS   Zrs_unescapedZend_ar"   r"   r#   r[      s    zHTMLFormatter._write_cellzdict[int, str] | None)linerQ   r   rT   alignrU   nindex_levelsr   c                 C  s   |d u ri }|d u r"|  d| n|  d| d| ||7 }t|D ]J\}}	||d }
|sl| jr||k r| j|	|||
d qF| j|	||
d qF||8 }|  d| d S )Nz<tr>z<tr style="text-align: z;">)rQ   rT   rU   )rU   z</tr>)rD   	enumeraterZ   r*   r\   r^   )r.   rd   rQ   r   rT   re   rU   rf   irP   Zval_tagr"   r"   r#   write_tr   s    
zHTMLFormatter.write_tr)rQ   r   c              	   C  s  dg}t d}|s|d | jd urnt| jtr>| j | _t| jttfsbtdt	| j |
| j | jd u r~d}nd| j d}| jd u rd}nd| j d}| d	| d
d| d| d| | jjs| jr| || j  | || j  | d| d S )NZ	dataframezdisplay.html.use_mathjaxZtex2jax_ignorez.classes must be a string, list, or tuple, not rV   z id=""z	 border="z<tablez class="r@   r`   z</table>)r
   rR   r   r   r0   splitlisttuple	TypeErrortypeextendr   r   rD   r;   r%   rT   rG   _write_headerr   _write_body)r.   rQ   Z_classesZuse_mathjaxZ
id_sectionZborder_attrr"   r"   r#   rA      s8    



zHTMLFormatter._write_tablec                 C  sV  | j j}t| jtrd}| j jr*tj}nd}| jj|ddd}t	||}t
|d }tt||D ]P\}\}	}
|r| j j}| j jr~i }t|	 D ]\}}||kr|||d < np|| |kr |d ||< ||kr|
d | d |
|d   }
n&|
d | |
|d  f |
|d   }
n|||< || |krd||< |
d | d |
|d   }
q|}	t
|d }||krd|	|< nfi }t|	 D ]*\}}||kr|||d < n|||< qd||< |}	|
d | dg |
|d   }
dg| jd  }| j js| jr<| j jr2| jj| }|t|p*d n
|d i }t
|}t|
D ]N\}}||	v rP|	| dkr|j|	| d||< nqP|d7 }|| qP| j||| j|d	d
 qdndg| jd  }| j js| jr| j jr|| jjpd n
|d ||   | j j}|r<| j| j j }||d | j||| jd	|d d S )Nz colspan="{span:d}" halign="left"FsparsifyZadjoinnamesrI   )...rv   rV   spanT)rU   rT   )rT   re   )r%   is_truncated_horizontallyr   r(   r   rt   r   
no_defaultformatr   rE   rg   zip
tr_col_numrl   r-   rL   rJ   rH   Zshow_index_namesru   rR   r   ri   r   namerp   rM   justifyinsert)r.   rQ   ry   templatesentinellevelslevel_lengths	inner_lvllnumrecordsvaluesZins_colZrecs_newtagrx   rowr~   rU   jrh   vre   r"   r"   r#   _write_col_header  s    











zHTMLFormatter._write_col_headerc                 C  sL   | j j}dd | jjjD dg| j|r*dnd   }| j||| jdd d S )Nc                 S  s   g | ]}|d ur|ndqS )NrV   r"   r3   r"   r"   r#   r7     r6   z3HTMLFormatter._write_row_header.<locals>.<listcomp>rV   rI   r   T)rT   )r%   ry   r&   rJ   ru   rO   ri   r   )r.   rQ   ry   r   r"   r"   r#   _write_row_header}  s
    zHTMLFormatter._write_row_headerc                 C  sJ   |  d| | jjr$| || j  | jr:| || j  |  d| d S )Nz<thead>z</thead>)rD   r%   rT   r   r   rG   r   )r.   rQ   r"   r"   r#   rq     s    zHTMLFormatter._write_headerdict[int, list[str]]c                   sF   t dd (  fddt jD }W d    n1 s80    Y  |S )Nzdisplay.max_colwidthc                   s   i | ]}| j |qS r"   r%   Z
format_colr   rh   rF   r"   r#   r$     r6   z7HTMLFormatter._get_formatted_values.<locals>.<dictcomp>)r   rangerO   )r.   
fmt_valuesr"   rF   r#   _get_formatted_values  s    6z#HTMLFormatter._get_formatted_valuesc                 C  s`   |  d| |  }| jjr>t| jjtr>| ||| j  n| 	||| j  |  d| d S )Nz<tbody>z</tbody>)
rD   r   r%   rJ   r   r&   r   _write_hierarchical_rowsr   _write_regular_rows)r.   rQ   r   r"   r"   r#   rr     s    zHTMLFormatter._write_bodyzMapping[int, list[str]])r   rQ   r   c                   s(  | j j}| j j}t| j j}| j jrX| j d}|d urJ| j jj|}n| j jj }g }t	|D ]|r| j j
krdgt| }	| j|	|| jd | jd g }| j jr||  n| jr|d | fddt	| jD  |r
| j j| j }
||
d | j||| jd | jd qdd S )N	__index__rv   rU   rf   rV   c                 3  s   | ]} |  V  qd S r2   r"   r   r   r   rh   r"   r#   r5     r6   z4HTMLFormatter._write_regular_rows.<locals>.<genexpr>)r%   ry   is_truncated_verticallyrE   r'   rJ   _get_formattermapr{   r   
tr_row_numri   r   rL   rR   rH   rp   rO   r}   r   )r.   r   rQ   ry   r   nrowsr%   Zindex_valuesr   str_sep_rowZ
dot_col_ixr"   r   r#   r     s>    
 z!HTMLFormatter._write_regular_rowsc              	     s  d}| j j}| j j}| j j}t|}t|jts4J |jjdddd}t	t
| }| j jrtj}	|jj|	ddd}
t|
|	}t|d }|r | j j}d}t|D ] \}}i }t	| D  ]\}}||kr|||d < n||| |krR|d ||< |s,t	||d  }d|d< ||t| d}n$t	|| }d||| < t|||< n|||< || |krd||< |dkr||tdgt|  q|rt	|| }d||| < t|||< q|||< qd|| |< tt D ]} | |d q|d7 }t|D ]ډg }i }d}d}t
|| D ]V\}}|v r`| dkrl|j| d	||< n|d7 }q*|d7 }|| q*| fd
dt| jD  |r|| j| | j j d | j||| j|t|
| d qng }tt|D ]|r4| j jkr4dgt| }| j||| jd | jd t	t
|jjdddd }g }||  | fddt| jD  |r|| j| j j d | j||| jd |jjd qd S )Nzrowspan="{span}" valign="top"Frs   rI   rv   Tr   rw   c                 3  s   | ]} |  V  qd S r2   r"   r   r   r"   r#   r5   "  r6   z9HTMLFormatter._write_hierarchical_rows.<locals>.<genexpr>r   c                 3  s   | ]} |  V  qd S r2   r"   r   r   r"   r#   r5   @  r6   )r%   ry   r   r'   rE   r   rJ   r   r{   rl   r|   rt   r   rz   r   r   rg   r-   r   rm   r   rR   rp   rO   rL   r}   ri   r   rK   )r.   r   rQ   r   ry   r   r&   r   Z
idx_valuesr   r   r   r   Zins_rowZinsertedr   r   Zrec_newr   rx   Zdot_rowZix_colr   rU   Zsparse_offsetr   r   r   r"   r   r#   r     s    




 
 z&HTMLFormatter._write_hierarchical_rows)NNNF)r   )Fr   N)r   N)r]   r   N)r   r   FNNr   )r   )__name__
__module____qualname____doc__r   __annotations__r/   r=   r9   propertyrB   rG   rH   rL   rM   rN   rO   rD   r\   r^   r[   ri   rA   r   r   rq   r   rr   r   r   r"   r"   r"   r#   r   !   sV   
	     !       %w.r   c                      sP   e Zd ZdZddddZddddZd	dd
dZdd fddZ  ZS )NotebookFormatterz
    Internal class for formatting output data in html for display in Jupyter
    Notebooks. This class is intended for functionality specific to
    DataFrame._repr_html_() and DataFrame.to_html(notebook=True)
    r   r1   c                   s    fddt  jD S )Nc                   s   i | ]}| j |qS r"   r   r   rF   r"   r#   r$   T  r6   z;NotebookFormatter._get_formatted_values.<locals>.<dictcomp>)r   rO   rF   r"   rF   r#   r   S  s    z'NotebookFormatter._get_formatted_valuesr>   c                 C  s
   | j  S r2   )r(   r{   rF   r"   r"   r#   rM   V  s    z/NotebookFormatter._get_columns_formatted_valuesr   c                   s   d}d}d ddg}t | jtr<|d | jrF|d n
|d d	t fd
d|}td|||f}| | d S )Nz            <style scoped>z            </style>zM                .dataframe %s {
                    %s: %s;
                })ztbody tr th:only-of-typevertical-alignmiddle)ztbody tr thr   top)zthead tr th
text-alignleft)zthead tr:last-of-type thr   right)zthead thr   r   z

c                   s    |  S r2   r"   )tZtemplate_selectr"   r#   <lambda>q  r6   z/NotebookFormatter.write_style.<locals>.<lambda>r8   )	r   r(   r   rR   rG   r;   r   r   rD   )r.   Ztemplate_firstZtemplate_lastZelement_propsZtemplate_midr   r"   r   r#   write_styleY  s     

zNotebookFormatter.write_stylec                   s,   |  d |   t   |  d | jS )Nz<div>z</div>)rD   r   superr9   r)   rF   	__class__r"   r#   r9   u  s
    


zNotebookFormatter.render)	r   r   r   r   r   rM   r   r9   __classcell__r"   r"   r   r#   r   L  s
   r   N)r   
__future__r   textwrapr   typingr   r   r   r   r   r	   Zpandas._configr
   Zpandas._libsr   Zpandasr   r   Zpandas.io.commonr   Zpandas.io.formats.formatr   r   Zpandas.io.formats.printingr   r   r   r"   r"   r"   r#   <module>   s    	    /