o
    gZ                     @  s   d Z ddlmZ ddlmZ ddl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IterableMappingcast)
get_option)lib)
MultiIndexoption_context)is_url)DataFrameFormatterget_level_lengths)pprint_thingc                   @  s6  e Zd ZdZdZ				dSdTddZdUddZdVddZedd Z	edWddZ
edWddZedXd d!ZdYd#d$ZedWd%d&ZedXd'd(ZdZd[d-d.Z	d\d]d1d2Zd^d_d3d4Z	d`dad7d8Z	)	)				)dbdcd>d?ZdZddd@dAZdddBdCZdddDdEZdddFdGZdedIdJZdddKdLZdfdOdPZdfdQdRZdS )g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.
       NF	formatterr   classes(str | list[str] | tuple[str, ...] | Noneborder
int | Nonetable_id
str | Nonerender_linksboolreturnNonec                 C  s   || _ || _| j j| _| j jj| _g | _| j j| _| j j| _| j j| _|d u r.t	t
td}|| _|| _|| _dd | j j D | _d S )Nzdisplay.html.borderc                 S  s*   i | ]\}}|t |tr| d n|qS )px)
isinstanceint).0columnvalue r#   T/home/ubuntu/cloudmapper/venv/lib/python3.10/site-packages/pandas/io/formats/html.py
<dictcomp>B   s    z*HTMLFormatter.__init__.<locals>.<dictcomp>)fmtr   frametr_framecolumnselements	bold_rowsescapeshow_dimensionsr   r   r   r   r   r   	col_spaceitems)selfr   r   r   r   r   r#   r#   r$   __init__+   s    




zHTMLFormatter.__init__strc                 C  s2   |   }tdd |D rdd |D }d|S )Nc                 s  s    | ]}t |tV  qd S N)r   r2   r    xr#   r#   r$   	<genexpr>I   s    z*HTMLFormatter.to_string.<locals>.<genexpr>c                 S  s   g | ]}t |qS r#   )r2   r4   r#   r#   r$   
<listcomp>J   s    z+HTMLFormatter.to_string.<locals>.<listcomp>
)renderanyjoin)r0   linesr#   r#   r$   	to_stringG   s   
zHTMLFormatter.to_string	list[str]c              	   C  sH   |    | jr!t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*   )r0   byr#   r#   r$   r9   M   s   $zHTMLFormatter.renderc                 C     | j jS r3   )r&   rB   r0   r#   r#   r$   rB   X      z$HTMLFormatter.should_show_dimensionsc                 C  rG   r3   )r&   show_row_idx_namesrH   r#   r#   r$   rJ   \   rI   z HTMLFormatter.show_row_idx_namesc                 C  rG   r3   )r&   show_col_idx_namesrH   r#   r#   r$   rK   `   rI   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'   nlevelsrK   rH   r#   r#   r$   
row_levelsd   s
   
zHTMLFormatter.row_levelsr   c                 C  s   | j S r3   )r)   rH   r#   r#   r$   _get_columns_formatted_valuess   s   z+HTMLFormatter._get_columns_formatted_valuesc                 C  rG   r3   )r&   is_truncatedrH   r#   r#   r$   rQ   v   rI   zHTMLFormatter.is_truncatedc                 C  s   t | jjjS r3   )rE   r&   r(   r)   rH   r#   r#   r$   ncolsz   s   zHTMLFormatter.ncolsr   sr   indentc                 C  s    t |}| jd| |  d S )Nr@   )r   r*   append)r0   rS   rT   rsr#   r#   r$   rD   ~   s   zHTMLFormatter.writeheadertagsc                 C  sH   | j |d}|r|dur|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kindrT   rX   )r.   get_write_cell)r0   rS   rW   rT   rX   r.   r#   r#   r$   write_th   s
   zHTMLFormatter.write_thc                 C  s   | j |d||d d S )Ntdr[   )r^   )r0   rS   rT   rX   r#   r#   r$   write_td   s   zHTMLFormatter.write_tdr`   r\   c           
      C  s   |d urd| d| d}nd| d}| j rdddd}ni }t||d }| jrBt|rBt|i d }|d	| d
7 }d}	nd}	| | | |	 d| d| d S )N<r@   >z&amp;z&lt;z&gt;)&rb   rc   )escape_charsz	<a href="z" target="_blank">z</a>rY   z</)r,   r   stripr   r   rD   )
r0   rS   r\   rT   rX   	start_tagescrV   rs_unescapedend_ar#   r#   r$   r^      s   $zHTMLFormatter._write_celllineindent_deltaaligndict[int, str] | Nonenindex_levelsc                 C  s   |d u ri }|d u r|  d| n
|  d| d| ||7 }t|D ]%\}}	||d }
|s6| jr@||k r@| j|	|||
d q#| j|	||
d q#||8 }|  d| d S )Nz<tr>z<tr style="text-align: z;">)rT   rW   rX   )rX   z</tr>)rD   	enumerater]   r+   r_   ra   )r0   rk   rT   rl   rW   rm   rX   ro   irS   val_tagr#   r#   r$   write_tr   s   
zHTMLFormatter.write_trc              	   C  s   dg}t d}|s|d | jd ur7t| jtr| j | _t| jttfs1tdt	| j |
| j | jd u r?d}nd| j d}| d| j d	d
| d| d| | jjsa| jri| || j  | || j  | d| d S )N	dataframezdisplay.html.use_mathjaxtex2jax_ignorez.classes must be a string, list, or tuple, not rY   z id=""z<table border="z	" class="r@   rc   z</table>)r   rU   r   r   r2   splitlisttuple	TypeErrortypeextendr   rD   r   r;   r&   rW   rJ   _write_headerrl   _write_body)r0   rT   _classesuse_mathjax
id_sectionr#   r#   r$   rA      s2   


zHTMLFormatter._write_tablec                 C  sJ  | j j}t| jtrWd}| j jrtj}nd}| jj|ddd}t	||}t
|d }tt||D ]!\}\}	}
|r| j j}| j jri }t|	 D ]^\}}||krZ|||d < n7|| |kr|d ||< ||kry|
d | d |
|d   }
n|
d | |
|d  f |
|d   }
n|||< || |krd||< |
d | d |
|d   }
qK|}	t
|d }||krd|	|< n1i }t|	 D ]\}}||kr|||d < q|||< qd||< |}	|
d | dg |
|d   }
dg| jd  }| j js| jr| j jr| jj| }|t|pd n|d i }t
|}t|
D ]'\}}||	v r<|	| dkr;|j|	| d||< nq!|d7 }|| q!| j||| j|d	d
 q2d S dg| jd  }| j jsh| jr}| j jrx|| jjpud n|d ||   | j j}|r| j| j j }||d | j||| jd	|d d S )Nz colspan="{span:d}" halign="left"FsparsifyadjoinnamesrL   )...r   rY   spanT)rX   rW   )rW   rm   )r&   is_truncated_horizontallyr   r)   r
   r   r	   
no_defaultformatr   rE   rp   zip
tr_col_numrx   r/   rO   rM   rK   show_index_namesr   rU   r   rs   rl   namer|   rP   justifyinsert)r0   rT   r   templatesentinellevelslevel_lengths	inner_lvllnumrecordsvaluesins_colrecs_newtagr   rowr   rX   jrq   vrm   r#   r#   r$   _write_col_header   s   






T

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 )NrY   r#   r4   r#   r#   r$   r7   t  s    z3HTMLFormatter._write_row_header.<locals>.<listcomp>rY   rL   r   T)rW   )r&   r   r'   rM   r   rR   rs   rl   )r0   rT   r   r   r#   r#   r$   _write_row_headerr  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&   rW   r   rl   rJ   r   )r0   rT   r#   r#   r$   r}   y  s   zHTMLFormatter._write_headerdict[int, list[str]]c                   sH   t dd   fddt jD }W d    |S 1 sw   Y  |S )Nzdisplay.max_colwidthc                      i | ]	}| j |qS r#   r&   
format_colr    rq   rH   r#   r$   r%         z7HTMLFormatter._get_formatted_values.<locals>.<dictcomp>)r   rangerR   )r0   
fmt_valuesr#   rH   r$   _get_formatted_values  s   
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&   rM   r   r'   r
   _write_hierarchical_rowsrl   _write_regular_rows)r0   rT   r   r#   r#   r$   r~     s   zHTMLFormatter._write_bodyr   Mapping[int, list[str]]c                   s&  | j j}| j j}t| j j}| j jr,| j d}|d ur%| j jj|}n| j jj }g }t	|D ]^|rO| j j
krOdgt| }	| j|	|| jd | jd g }| j jr]||  n| jre|d | fddt	| jD  |r| j j| j }
||
d | j||| jd | jd q2d S )N	__index__r   rX   ro   rY   c                 3      | ]	} |  V  qd S r3   r#   r    r   r   rq   r#   r$   r6         z4HTMLFormatter._write_regular_rows.<locals>.<genexpr>)r&   r   is_truncated_verticallyrE   r(   rM   _get_formattermapr   r   
tr_row_numrs   rl   rO   rU   rK   r|   rR   r   r   )r0   r   rT   r   r   nrowsr&   index_valuesr   str_sep_row
dot_col_ixr#   r   r$   r     s@   
 z!HTMLFormatter._write_regular_rowsc              	     s  d}| j j}| j j}| j j}t|}t|jtsJ |jjdddd}t	t
| }| j jrltj}	|jj|	ddd}
t|
|	}t|d }|r| j j}d}t|D ]\}}i }t	| D ]{\}}||krl|||d < n<|| |kr|d ||< |st	||d  }d|d< ||t| d}nt	|| }d||| < t|||< n|||< || |krd||< |dkr||tdgt|  q]|rt	|| }d||| < t|||< q]|||< qQd|| |< tt D ]
} | |d q|d7 }t|D ]lg }i }d}d}t
|| D ]+\}}|v r)| dkr(|j| d	||< n|d7 }q|d7 }|| q| fd
dt| jD  |rZ|| j| | j j d | j||| j|t|
| d qd S g }tt|D ]a|r| j jkrd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 qtd S )Nzrowspan="{span}" valign="top"Fr   rL   r   Tr   r   c                 3  r   r3   r#   r   r   r#   r$   r6     r   z9HTMLFormatter._write_hierarchical_rows.<locals>.<genexpr>r   c                 3  r   r3   r#   r   r   r#   r$   r6   5  r   )r&   r   r   r(   rE   r   rM   r
   r   rx   r   r   r	   r   r   r   rp   r/   r   ry   r   rU   r|   rR   rO   r   rs   rl   rN   )r0   r   rT   r   r   r   r'   r   
idx_valuesr   r   r   r   ins_rowinsertedr   r   rec_newr   r   dot_rowix_colr   rX   sparse_offsetr   r   r   r#   r   r$   r     s   



 
 
z&HTMLFormatter._write_hierarchical_rows)NNNF)r   r   r   r   r   r   r   r   r   r   r   r   )r   r2   r   r>   )r   r   )r   r   )r   r   )r   )rS   r   rT   r   r   r   )Fr   N)
rS   r   rW   r   rT   r   rX   r   r   r   )r   N)rS   r   rT   r   rX   r   r   r   )r`   r   N)
rS   r   r\   r2   rT   r   rX   r   r   r   )r   r   FNNr   )rk   r   rT   r   rl   r   rW   r   rm   r   rX   rn   ro   r   r   r   )rT   r   r   r   r   r   )r   r   rT   r   r   r   )__name__
__module____qualname____doc__rl   r1   r=   r9   propertyrB   rJ   rK   rO   rP   rQ   rR   rD   r_   ra   r^   rs   rA   r   r   r}   r   r~   r   r   r#   r#   r#   r$   r      sX    	



!
 
v



.r   c                      s@   e Zd ZdZdddZdddZdd
dZ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   r   c                   s    fddt  jD S )Nc                   r   r#   r   r   rH   r#   r$   r%   I  r   z;NotebookFormatter._get_formatted_values.<locals>.<dictcomp>)r   rR   rH   r#   rH   r$   r   H  s   z'NotebookFormatter._get_formatted_valuesr>   c                 C  s
   | j  S r3   )r)   r   rH   r#   r#   r$   rP   K  s   
z/NotebookFormatter._get_columns_formatted_valuesr   c                   s   d}d}d ddg}t | jtr|d | jr|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 r3   r#   )ttemplate_selectr#   r$   <lambda>f  s    z/NotebookFormatter.write_style.<locals>.<lambda>r8   )	r   r)   r
   rU   rJ   r;   r   r   rD   )r0   template_firsttemplate_lastelement_propstemplate_midr   r#   r   r$   write_styleN  s"   

zNotebookFormatter.write_stylec                   s,   |  d |   t   |  d | jS )Nz<div>z</div>)rD   r   superr9   r*   rH   	__class__r#   r$   r9   j  s
   


zNotebookFormatter.renderr   r   )r   r   )	r   r   r   r   r   rP   r   r9   __classcell__r#   r#   r   r$   r   A  s    


r   N)r   
__future__r   textwrapr   typingr   r   r   r   pandas._configr   pandas._libsr	   pandasr
   r   pandas.io.commonr   pandas.io.formats.formatr   r   pandas.io.formats.printingr   r   r   r#   r#   r#   r$   <module>   s         &