a
    é´«je^  ã                   @  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 erœddlmZmZ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)ÚTYPE_CHECKINGÚAnyÚFinalÚcast)Ú
get_option)Úlib)Ú
MultiIndexÚoption_context)Úis_url)ÚDataFrameFormatterÚget_level_lengths)Úpprint_thing)ÚHashableÚIterableÚMappingc                
   @  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 }|| _|| _|| _i | _t| jtƒ}| j j ¡ D ]P\}}t|t
ƒrº|› d�n|}	|	| j|< |ržt|tƒrž|D ]}
|	| jt|
ƒ< qÚqžd S )NTzdisplay.html.borderZpx)Úfmtr   ÚframeÚtr_frameÚcolumnsÚelementsÚ	bold_rowsÚescapeZshow_dimensionsr   Úintr   r   r   r   Ú	col_spaceÚ
isinstancer
   ÚitemsÚtupleÚstr)Úselfr   r   r   r   r   Zis_multi_indexÚcolumnÚvalueZcol_space_valueÚcolumn_index© r/   úU/var/www/html/laksyashrimp/venv/lib/python3.9/site-packages/pandas/io/formats/html.pyÚ__init__2   s.    




zHTMLFormatter.__init__r*   ©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*   ©Ú.0Úxr/   r/   r0   Ú	<genexpr>Y   ó    z*HTMLFormatter.to_string.<locals>.<genexpr>c                 S  s   g | ]}t |ƒ‘qS r/   )r*   r4   r/   r/   r0   Ú
<listcomp>Z   r8   z+HTMLFormatter.to_string.<locals>.<listcomp>Ú
)ÚrenderÚanyÚjoin)r+   Úlinesr/   r/   r0   Ú	to_stringW   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/   r0   r;   ]   s    $ÿzHTMLFormatter.renderc                 C  s   | j jS r3   )r   rD   ©r+   r/   r/   r0   rD   h   s    z$HTMLFormatter.should_show_dimensionsc                 C  s   | j jS r3   )r   Úshow_row_idx_namesrH   r/   r/   r0   rI   l   s    z HTMLFormatter.show_row_idx_namesc                 C  s   | j jS r3   )r   Úshow_col_idx_namesrH   r/   r/   r0   rJ   p   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   ÚnlevelsrJ   rH   r/   r/   r0   Ú
row_levelst   s
    
zHTMLFormatter.row_levelsr   c                 C  s   | j S r3   )r!   rH   r/   r/   r0   Ú_get_columns_formatted_valuesƒ   s    z+HTMLFormatter._get_columns_formatted_valuesc                 C  s   | j jS r3   )r   Úis_truncatedrH   r/   r/   r0   rP   †   s    zHTMLFormatter.is_truncatedc                 C  s   t | jjjƒS r3   )rG   r   r    r!   rH   r/   r/   r0   ÚncolsŠ   s    zHTMLFormatter.ncolsr   r   )ÚsÚindentr   c                 C  s    t |ƒ}| j d| | ¡ d S )NrB   )r   r"   Úappend)r+   rR   rS   Úrsr/   r/   r0   rF   Ž   s    zHTMLFormatter.write)rR   ÚheaderrS   Ú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©ÚkindrS   rW   )r&   ÚgetÚ_write_cell)r+   rR   rV   rS   rW   r&   r/   r/   r0   Úwrite_th’   s
    zHTMLFormatter.write_th)rR   rS   rW   r   c                 C  s   | j |d||d� d S )NÚtdrZ   )r]   )r+   rR   rS   rW   r/   r/   r0   Úwrite_td³   s    zHTMLFormatter.write_tdr_   )rR   r[   rS   rW   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ú<rB   ú>z&amp;z&lt;z&gt;)ú&ra   rb   )Zescape_charsz	<a href="z" target="_blank">z</a>rX   z</)r$   r   Ústripr   r   rF   )
r+   rR   r[   rS   rW   Z	start_tagÚescrU   Zrs_unescapedZend_ar/   r/   r0   r]   ¶   s    zHTMLFormatter._write_cellzdict[int, str] | None)ÚlinerS   r   rV   ÚalignrW   Ú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;">)rS   rV   rW   )rW   z</tr>)rF   Ú	enumerater\   r#   r^   r`   )r+   rf   rS   r   rV   rg   rW   rh   ÚirR   Zval_tagr/   r/   r0   Úwrite_trÏ   s    
zHTMLFormatter.write_tr)rS   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 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 rX   z id="ú"z	 border="z<tablez class="rB   rb   z</table>)r   rT   r   r'   r*   ÚsplitÚlistr)   Ú	TypeErrorÚtypeÚextendr   r   rF   r=   r   rV   rI   Ú_write_headerr   Ú_write_body)r+   rS   Z_classesZuse_mathjaxZ
id_sectionZborder_attrr/   r/   r0   rC   ì   s8    

ÿÿ

þzHTMLFormatter._write_tablec                 C  sT  | j j}t| jtƒ�r¸d}| j jr*tj}nd}| jj|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�r0| jj| }| t|�p(dƒ¡ n
| d¡ i }t
|ƒ}t|
ƒD ]N\}}||	v �rN|	| dk�rˆ|j|	| d�||< n�qN|d7 }| |¡ �qN| j||| j|d	d
� qbn˜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include_namesrK   )ú...rv   rX   ©ÚspanT)rW   rV   )rV   rg   )r   Úis_truncated_horizontallyr'   r!   r
   ru   r	   Ú
no_defaultÚ_format_multir   rG   ri   ÚzipÚ
tr_col_numrn   r(   rN   rL   rJ   Zshow_index_namesÚnamesrT   r   Úformatrk   r   Únamerq   rO   ÚjustifyÚinsert)r+   rS   ry   ÚtemplateÚsentinelÚlevelsÚlevel_lengthsÚ	inner_lvlÚlnumÚrecordsÚvaluesZins_colZrecs_newÚtagrx   Úrowr€   rW   Újrj   Úvrg   r/   r/   r0   Ú_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 )NrX   r/   r4   r/   r/   r0   r9   Š  r8   z3HTMLFormatter._write_row_header.<locals>.<listcomp>rX   rK   r   T)rV   )r   ry   r   rL   r~   rQ   rk   r   )r+   rS   ry   rŒ   r/   r/   r0   Ú_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>)rF   r   rV   r�   r   rI   r�   )r+   rS   r/   r/   r0   rr   �  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©r5   rj   rH   r/   r0   Ú
<dictcomp>œ  r8   z7HTMLFormatter._get_formatted_values.<locals>.<dictcomp>)r   ÚrangerQ   )r+   Ú
fmt_valuesr/   rH   r0   Ú_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>)
rF   r—   r   rL   r'   r   r
   Ú_write_hierarchical_rowsr   Ú_write_regular_rows)r+   rS   r–   r/   r/   r0   rs   Ÿ  s    zHTMLFormatter._write_bodyzMapping[int, list[str]])r–   rS   r   c                   s,  | j j}| j j}t| j jƒ}| j jr\| j  d¡}|d urJ| j jj |¡}n| j jjjdd�}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� qhd S )	NÚ	__index__F©Zinclude_namerv   ©rW   rh   rX   c                 3  s   | ]}ˆ | ˆ V  qd S r3   r/   ©r5   r�   ©r–   rj   r/   r0   r7   Ð  r8   z4HTMLFormatter._write_regular_rows.<locals>.<genexpr>)r   ry   Úis_truncated_verticallyrG   r    rL   Ú_get_formatterÚmapÚ_format_flatr•   Ú
tr_row_numrk   r   rN   rT   rJ   rq   rQ   r}   r‚   )r+   r–   rS   ry   rŸ   Únrowsr   Zindex_valuesrŒ   Ústr_sep_rowZ
dot_col_ixr/   rž   r0   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�}t	t
|Ž ƒ}| j j�rÚtj}	|jj|	dd�}
t|
|	ƒ}t|ƒd }|�rô| j j}d}t|ƒD �] \}}i }t	| ¡ ƒD � ]ü\}}||krÚ|||d < n||| |k�rN|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|| |< ˆ D ]}ˆ |  |d¡ �qÔ|d7 }t|ƒD ]Ú‰g }i }d}d}t
||ˆ ƒD ]V\}}ˆ|v �rT|ˆ dk�r`|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 ]À‰|�r(ˆ| j jk�r(dgt|ƒ }| j||| jd | jd� t	t
|jj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"Frt   rK   rv   éÿÿÿÿTr   rw   c                 3  s   | ]}ˆ | ˆ V  qd S r3   r/   r�   rž   r/   r0   r7   -  r8   z9HTMLFormatter._write_hierarchical_rows.<locals>.<genexpr>rœ   c                 3  s   | ]}ˆ | ˆ V  qd S r3   r/   r�   rž   r/   r0   r7   K  r8   )r   ry   rŸ   r    rG   r'   rL   r
   r{   rn   r|   ru   r	   rz   r   r£   ri   r(   r‚   r)   r•   r   rT   rq   rQ   rN   r}   rk   r   rM   )r+   r–   rS   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Œ   rW   Zsparse_offsetr�   rŽ   r¥   r/   rž   r0   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__r1   r?   r;   ÚpropertyrD   rI   rJ   rN   rO   rP   rQ   rF   r^   r`   r]   rk   rC   r�   r�   rr   r—   rs   r™   r˜   r/   r/   r/   r0   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‘   r2   c                   s   ‡ fdd„t ˆ jƒD ƒS )Nc                   s   i | ]}|ˆ j  |¡“qS r/   r’   r“   rH   r/   r0   r”   _  r8   z;NotebookFormatter._get_formatted_values.<locals>.<dictcomp>)r•   rQ   rH   r/   rH   r0   r—   ^  s    z'NotebookFormatter._get_formatted_valuesr@   c                 C  s   | j jdd�S )NFr›   )r!   r¢   rH   r/   r/   r0   rO   a  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	 ‡ fd
d„|D ƒ¡}t|› d|› d|› �ƒ}|  |¡ 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                 3  s   | ]}ˆ | V  qd S r3   r/   )r5   Út©Ztemplate_selectr/   r0   r7   }  r8   z0NotebookFormatter.write_style.<locals>.<genexpr>r:   )r'   r!   r
   rT   rI   r=   r   rF   )r+   Ztemplate_firstZtemplate_lastZelement_propsZtemplate_midrƒ   r/   rµ   r0   Úwrite_stylee  s     þ
ÿ
zNotebookFormatter.write_stylec                   s,   |   d¡ |  ¡  tƒ  ¡  |   d¡ | jS )Nz<div>z</div>)rF   r¶   Úsuperr;   r"   rH   ©Ú	__class__r/   r0   r;   �  s
    


zNotebookFormatter.render)	r§   r¨   r©   rª   r—   rO   r¶   r;   Ú__classcell__r/   r/   r¸   r0   r­   W  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   Úcollections.abcr   r   r   r   r­   r/   r/   r/   r0   Ú<module>   s"       5