a
    oÝEbÔZ  ã                   @  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                
   @  sº  e Zd ZdZdZdLddddd	d
dœdd„Zddœdd„Zddœdd„Ze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dMd&dd
d'œd(d)„ZdNd&d	ddd
d*œd+d,„ZdOd&ddd
d-œd.d/„ZdPd&dddd
d1œd2d3„ZdQdddd	dd4dd
d5œd6d7„ZdRdd
d8œd9d:„Zdd
d8œd;d<„Zdd
d8œd=d>„Zdd
d8œd?d@„ZdAdœdBdC„Zdd
d8œdDdE„ZdFdd
dGœdHdI„ZdFdd
dGœdJdK„ZdS )SÚ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.
    é   NFr   z(str | list[str] | tuple[str, ...] | Nonez
int | 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 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 )Zpx)Ú
isinstanceÚint)Ú.0ÚcolumnÚvalue© r   úV/home/ja/django-apps/lartica_env/lib/python3.9/site-packages/pandas/io/formats/html.pyÚ
<dictcomp>B   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   r-   ©r   Úxr   r   r    Ú	<genexpr>I   ó    z*HTMLFormatter.to_string.<locals>.<genexpr>c                 S  s   g | ]}t |ƒ‘qS r   )r-   r0   r   r   r    Ú
<listcomp>J   r3   z+HTMLFormatter.to_string.<locals>.<listcomp>Ú
)ÚrenderÚanyÚjoin)r+   Úlinesr   r   r    Ú	to_stringG   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    r6   M   s    $ÿzHTMLFormatter.renderc                 C  s   | j jS r/   )r"   r?   ©r+   r   r   r    r?   X   s    z$HTMLFormatter.should_show_dimensionsc                 C  s   | j jS r/   )r"   Úshow_row_idx_namesrC   r   r   r    rD   \   s    z HTMLFormatter.show_row_idx_namesc                 C  s   | j jS r/   )r"   Úshow_col_idx_namesrC   r   r   r    rE   `   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#   ÚnlevelsrE   rC   r   r   r    Ú
row_levelsd   s
    
zHTMLFormatter.row_levelsr   c                 C  s   | j S r/   )r%   rC   r   r   r    Ú_get_columns_formatted_valuess   s    z+HTMLFormatter._get_columns_formatted_valuesc                 C  s   | j jS r/   )r"   Úis_truncatedrC   r   r   r    rK   v   s    zHTMLFormatter.is_truncatedc                 C  s   t | jjjƒS r/   )rB   r"   r$   r%   rC   r   r   r    Úncolsz   s    zHTMLFormatter.ncolsr   r   )ÚsÚindentr   c                 C  s    t |ƒ}| j d| | ¡ d S )Nr=   )r   r&   Úappend)r+   rM   rN   Úrsr   r   r    rA   ~   s    zHTMLFormatter.write)rM   ÚheaderrN   Ú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©ÚkindrN   rR   )r)   ÚgetÚ_write_cell)r+   rM   rQ   rN   rR   r)   r   r   r    Úwrite_th‚   s
    zHTMLFormatter.write_th)rM   rN   rR   r   c                 C  s   | j |d||d� d S )NÚtdrU   )rX   )r+   rM   rN   rR   r   r   r    Úwrite_td£   s    zHTMLFormatter.write_tdrZ   )rM   rV   rN   rR   r   c           
      C  s¬   |d u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>rS   z</)r(   r   Ústripr   r   rA   )
r+   rM   rV   rN   rR   Z	start_tagÚescrP   Zrs_unescapedZend_ar   r   r    rX   ¦   s    zHTMLFormatter._write_cellzdict[int, str] | None)ÚlinerN   Úindent_deltarQ   ÚalignrR   Ú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;">)rN   rQ   rR   )rR   z</tr>)rA   Ú	enumeraterW   r'   rY   r[   )r+   ra   rN   rb   rQ   rc   rR   rd   ÚirM   Zval_tagr   r   r    Úwrite_tr¿   s    
zHTMLFormatter.write_tr)rN   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�}|  d| j› 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 rS   z id="ú"z<table border="z	" class="r=   r]   z</table>)r   rO   r   r   r-   ÚsplitÚlistÚtupleÚ	TypeErrorÚtypeÚextendr   rA   r   r8   r"   rQ   rD   Ú_write_headerrb   Ú_write_body)r+   rN   Z_classesZuse_mathjaxZ
id_sectionr   r   r    r>   Ü   s2    

ÿÿ
þ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\}}||	v �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ÚnamesrF   )ú...rt   rS   ©ÚspanT)rR   rQ   )rQ   rc   )r"   Úis_truncated_horizontallyr   r%   r
   rr   r	   Ú
no_defaultÚformatr   rB   re   ÚzipÚ
tr_col_numrj   r*   rI   rG   rE   Zshow_index_namesrs   rO   r   rg   rb   Únamern   rJ   ÚjustifyÚinsert)r+   rN   rw   ÚtemplateÚsentinelÚlevelsÚlevel_lengthsÚ	inner_lvlÚlnumÚrecordsÚvaluesZins_colZrecs_newÚtagrv   Úrowr|   rR   Újrf   Úvrc   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 )NrS   r   r0   r   r   r    r4   t  r3   z3HTMLFormatter._write_row_header.<locals>.<listcomp>rS   rF   r   T)rQ   )r"   rw   r#   rG   rs   rL   rg   rb   )r+   rN   rw   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>)rA   r"   rQ   r‹   rb   rD   rŒ   )r+   rN   r   r   r    ro   y  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   rf   rC   r   r    r!   †  r3   z7HTMLFormatter._get_formatted_values.<locals>.<dictcomp>)r   ÚrangerL   )r+   Ú
fmt_valuesr   rC   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>)
rA   r’   r"   rG   r   r#   r
   Ú_write_hierarchical_rowsrb   Ú_write_regular_rows)r+   rN   r‘   r   r   r    rp   ‰  s    zHTMLFormatter._write_bodyzMapping[int, list[str]])r‘   rN   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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__rt   ©rR   rd   rS   c                 3  s   | ]}ˆ | ˆ V  qd S r/   r   ©r   r‰   ©r‘   rf   r   r    r2   º  r3   z4HTMLFormatter._write_regular_rows.<locals>.<genexpr>)r"   rw   Úis_truncated_verticallyrB   r$   rG   Ú_get_formatterÚmapry   r�   Ú
tr_row_numrg   rb   rI   rO   rE   rn   rL   r{   r~   )r+   r‘   rN   rw   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�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\}}ˆ|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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"Frq   rF   rt   éÿÿÿÿTr   ru   c                 3  s   | ]}ˆ | ˆ V  qd S r/   r   r—   r˜   r   r    r2     r3   z9HTMLFormatter._write_hierarchical_rows.<locals>.<genexpr>r–   c                 3  s   | ]}ˆ | ˆ V  qd S r/   r   r—   r˜   r   r    r2   5  r3   )r"   rw   r™   r$   rB   r   rG   r
   ry   rj   rz   rr   r	   rx   r   rœ   re   r*   r~   rk   r�   rO   rn   rL   rI   r{   rg   rb   rH   )r+   r‘   rN   r   rw   r™   r#   r�   Z
idx_valuesr€   r�   r‚   rƒ   Zins_rowZinsertedr„   r…   Zrec_newr‡   rv   Zdot_rowZix_colrˆ   rR   Zsparse_offsetr‰   rŠ   rž   r   r˜   r    r“   Ã  sÄ    


ÿ

 ÿ
ûûÿ ûz&HTMLFormatter._write_hierarchical_rows)NNNF)r   )Fr   N)r   N)rZ   r   N)r   r   FNNr   )r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__rb   r,   r:   r6   Úpropertyr?   rD   rE   rI   rJ   rK   rL   rA   rY   r[   rX   rg   r>   r‹   rŒ   ro   r’   rp   r”   r“   r   r   r   r    r      sV   	    ú
 ÿ! ÿ      ø v.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�   r.   c                   s   ‡ fdd„t ˆ jƒD ƒS )Nc                   s   i | ]}|ˆ j  |¡“qS r   rŽ   r�   rC   r   r    r!   I  r3   z;NotebookFormatter._get_formatted_values.<locals>.<dictcomp>)r�   rL   rC   r   rC   r    r’   H  s    z'NotebookFormatter._get_formatted_valuesr;   c                 C  s
   | j  ¡ S r/   )r%   ry   rC   r   r   r    rJ   K  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 r/   r   )Út©Ztemplate_selectr   r    Ú<lambda>f  r3   z/NotebookFormatter.write_style.<locals>.<lambda>r5   )	r   r%   r
   rO   rD   r8   r›   r   rA   )r+   Ztemplate_firstZtemplate_lastZelement_propsZtemplate_midr   r   r­   r    Úwrite_styleN  s     þ
ÿ
zNotebookFormatter.write_stylec                   s,   |   d¡ |  ¡  tƒ  ¡  |   d¡ | jS )Nz<div>z</div>)rA   r¯   Úsuperr6   r&   rC   ©Ú	__class__r   r    r6   j  s
    


zNotebookFormatter.render)	r    r¡   r¢   r£   r’   rJ   r¯   r6   Ú__classcell__r   r   r±   r    r¥   A  s
   r¥   N)r£   Ú
__future__r   Útextwrapr   Útypingr   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       &