U
    ÎZjÜ[  ã                   @  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 ksV|dk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"   úY/var/www/html/TRUCKING_PROJECT/venv/lib/python3.8/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   s     z*HTMLFormatter.to_string.<locals>.<genexpr>c                 S  s   g | ]}t |ƒ‘qS r"   )r0   r3   r"   r"   r#   Ú
<listcomp>O   s     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#   r8   R   s    $ÿzHTMLFormatter.renderc                 C  s   | j jS r2   )r%   rA   ©r.   r"   r"   r#   rA   ]   s    z$HTMLFormatter.should_show_dimensionsc                 C  s   | j jS r2   )r%   Úshow_row_idx_namesrE   r"   r"   r#   rF   a   s    z HTMLFormatter.show_row_idx_namesc                 C  s   | j jS r2   )r%   Úshow_col_idx_namesrE   r"   r"   r#   rG   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&   ÚnlevelsrG   rE   r"   r"   r#   Ú
row_levelsi   s
    
zHTMLFormatter.row_levelsr   c                 C  s   | j S r2   )r(   rE   r"   r"   r#   Ú_get_columns_formatted_valuesx   s    z+HTMLFormatter._get_columns_formatted_valuesc                 C  s   | j jS r2   )r%   Úis_truncatedrE   r"   r"   r#   rM   {   s    zHTMLFormatter.is_truncatedc                 C  s   t | jjjƒS r2   )rD   r%   r'   r(   rE   r"   r"   r#   Úncols   s    zHTMLFormatter.ncolsr   r   )ÚsÚindentr   c                 C  s    t |ƒ}| j d| | ¡ d S )Nr?   )r   r)   Úappend)r.   rO   rP   Úrsr"   r"   r#   rC   ƒ   s    zHTMLFormatter.write)rO   ÚheaderrP   Útagsr   c                 C  sH   | j  |d¡}|r2|dk	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©ÚkindrP   rT   )r,   ÚgetÚ_write_cell)r.   rO   rS   rP   rT   r,   r"   r"   r#   Úwrite_th‡   s
    zHTMLFormatter.write_th)rO   rP   rT   r   c                 C  s   | j |d||d� d S )NÚtdrW   )rZ   )r.   rO   rP   rT   r"   r"   r#   Úwrite_td¨   s    zHTMLFormatter.write_tdr\   )rO   rX   rP   rT   r   c           
      C  s¬   |d k	rd|› d|› d�}nd|› d�}| j r<ddddœ}ni }t||d� ¡ }| jr„t|ƒr„t|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>rU   z</)r+   r   Ústripr   r   rC   )
r.   rO   rX   rP   rT   Z	start_tagÚescrR   Zrs_unescapedZend_ar"   r"   r#   rZ   «   s    zHTMLFormatter._write_cellzdict[int, str] | None)ÚlinerP   r   rS   ÚalignrT   Únindex_levelsr   c                 C  sª   |d kri }|d k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;">)rP   rS   rT   )rT   z</tr>)rC   Ú	enumeraterY   r*   r[   r]   )r.   rc   rP   r   rS   rd   rT   re   ÚirO   Zval_tagr"   r"   r#   Úwrite_trÄ   s    
zHTMLFormatter.write_tr)rP   r   c              	   C  s  dg}t dƒ}|s| d¡ | jd k	rnt| jtƒr>| j ¡ | _t| jttfƒsbtdt	| jƒ› �ƒ‚| 
| j¡ | jd kr~d}nd| j› d�}| jd krœd}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 rU   z id="ú"z	 border="z<tablez class="r?   r_   z</table>)r
   rQ   r   r   r0   ÚsplitÚlistÚtupleÚ	TypeErrorÚtypeÚextendr   r   rC   r:   r%   rS   rF   Ú_write_headerr   Ú_write_body)r.   rP   Z_classesZuse_mathjaxZ
id_sectionZborder_attrr"   r"   r#   r@   á   s4    

ÿ

þzHTMLFormatter._write_tablec                 C  sV  | j j}t| jtƒ�rºd}| 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ršd||< |
d |… d |
|d …  }
qš|}	t
|ƒd }||k�räd|	|< nfi }t|	 ¡ ƒD ]*\}}||k�r®|||d < n|||< �qŽd||< |}	|
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\}}||	k�rP|	| dk�rŠ|j|	| d�||< n�qP|d7 }| |¡ �qP| j||| j|d	d
� qdn˜dg| jd  }| j j�sÜ| j�r| j j�rü| | jj�pöd¡ n
| d¡ | |  ¡ ¡ | j j}|�r<| j| j j }| |d¡ | j||| jd	|d� d S )Nz colspan="{span:d}" halign="left"F©ÚsparsifyZadjoinÚnamesrH   )ú...ru   rU   ©ÚspanT)rT   rS   )rS   rd   )r%   Úis_truncated_horizontallyr   r(   r   rs   r   Ú
no_defaultÚformatr   rD   rf   ÚzipÚ
tr_col_numrk   r-   rK   rI   rG   Zshow_index_namesrt   rQ   r   rh   r   Únamero   rL   ÚjustifyÚinsert)r.   rP   rx   ÚtemplateÚsentinelÚlevelsÚlevel_lengthsÚ	inner_lvlÚlnumÚrecordsÚvaluesZins_colZrecs_newÚtagrw   Úrowr}   rT   Újrg   Úvrd   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 k	r|nd‘qS )NrU   r"   r3   r"   r"   r#   r6     s     z3HTMLFormatter._write_row_header.<locals>.<listcomp>rU   rH   r   T)rS   )r%   rx   r&   rI   rt   rN   rh   r   )r.   rP   rx   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>)rC   r%   rS   rŒ   r   rF   r�   )r.   rP   r"   r"   r#   rp   „  s    zHTMLFormatter._write_headerúdict[int, list[str]]c              	     s2   t dd ƒ� ‡ fdd„tˆ jƒD ƒ}W 5 Q R X |S )Nzdisplay.max_colwidthc                   s   i | ]}|ˆ j  |¡“qS r"   ©r%   Z
format_col©r   rg   rE   r"   r#   r$   ‘  s      z7HTMLFormatter._get_formatted_values.<locals>.<dictcomp>)r   ÚrangerN   )r.   Ú
fmt_valuesr"   rE   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>)
rC   r“   r%   rI   r   r&   r   Ú_write_hierarchical_rowsr   Ú_write_regular_rows)r.   rP   r’   r"   r"   r#   rq   ”  s    zHTMLFormatter._write_bodyzMapping[int, list[str]])r’   rP   r   c                   s(  | j j}| j j}t| j jƒ}| j jrX| j  d¡}|d k	rJ| j jj |¡}n| j jj ¡ }g }t	|ƒD ]¾‰|ržˆ| j j
kržd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__ru   ©rT   re   rU   c                 3  s   | ]}ˆ | ˆ V  qd S r2   r"   ©r   rŠ   ©r’   rg   r"   r#   r5   Å  s     z4HTMLFormatter._write_regular_rows.<locals>.<genexpr>)r%   rx   Úis_truncated_verticallyrD   r'   rI   Ú_get_formatterÚmaprz   r‘   Ú
tr_row_numrh   r   rK   rQ   rG   ro   rN   r|   r   )r.   r’   rP   rx   rš   Únrowsr%   Zindex_valuesr‰   Ústr_sep_rowZ
dot_col_ixr"   r™   r#   r•      sF    û
     ÿz!HTMLFormatter._write_regular_rowsc              	     s¾  d}| j j}| j j}| j j}t|ƒ}t|jtƒs4t‚|jj	dddd�}t
t|Ž ƒ}| j j�ræt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r¾d||< |dk�r”| |tdgt|ƒ ƒ¡ q¾|r¾t
|| ƒ}d||| < t|ƒ||< q¾|||< q¤d|| |< ttˆ ƒƒD ]}ˆ |  |d¡ �qà|d7 }t|ƒD ]Ú‰g }i }d}d}t||ˆ ƒD ]V\}}ˆ|k�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nÔg }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� �qöd S )Nzrowspan="{span}" valign="top"Frr   rH   ru   éÿÿÿÿTr   rv   c                 3  s   | ]}ˆ | ˆ V  qd S r2   r"   r˜   r™   r"   r#   r5   "  s     z9HTMLFormatter._write_hierarchical_rows.<locals>.<genexpr>r—   c                 3  s   | ]}ˆ | ˆ V  qd S r2   r"   r˜   r™   r"   r#   r5   @  s     )r%   rx   rš   r'   rD   r   rI   r   ÚAssertionErrorrz   rk   r{   rs   r   ry   r   r�   rf   r-   r   rl   r‘   rQ   ro   rN   rK   r|   rh   r   rJ   )r.   r’   rP   r€   rx   rš   r&   rž   Z
idx_valuesr�   r‚   rƒ   r„   Zins_rowZinsertedr…   r†   Zrec_newrˆ   rw   Zdot_rowZix_colr‰   rT   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<   r8   ÚpropertyrA   rF   rG   rK   rL   rM   rN   rC   r[   r]   rZ   rh   r@   rŒ   r�   rp   r“   rq   r•   r”   r"   r"   r"   r#   r   !   s^   
	    ú     ÿ!     ÿ      ø%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�   rE   r"   r#   r$   T  s      z;NotebookFormatter._get_formatted_values.<locals>.<dictcomp>)r‘   rN   rE   r"   rE   r#   r“   S  s    z'NotebookFormatter._get_formatted_valuesr=   c                 C  s
   | j  ¡ S r2   )r(   rz   rE   r"   r"   r#   rL   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  ó    z/NotebookFormatter.write_style.<locals>.<lambda>r7   )	r   r(   r   rQ   rF   r:   rœ   r   rC   )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>)rC   r³   Úsuperr8   r)   rE   ©Ú	__class__r"   r#   r8   u  s
    


zNotebookFormatter.render)	r¢   r£   r¤   r¥   r“   rL   r³   r8   Ú__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    	    /