o
    Û­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rNd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                   @  sB  e Zd ZU dZdZded< 				dTdUdd„ZdVdd„ZdWdd„Ze	dXdd„ƒZ
e	dXdd„ƒZe	dXdd „ƒZe	dYd"d#„ƒZdZd%d&„Ze	dXd'd(„ƒZe	dYd)d*„ƒZd[d\d/d0„Z	d]d^d3d4„Zd_d`d5d6„Z	dadbd9d:„Z	+	+				+dcddd?d@„Zd[dedAdB„ZdedCdD„ZdedEdF„ZdedGdH„ZdfdJdK„ZdedLdM„ZdgdPdQ„ZdgdRdS„ZdS )hÚ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_deltaNFÚ	formatterr   Úclassesú(str | list[str] | tuple[str, ...] | NoneÚborderúint | bool | 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 s+|du r3t	t
tdƒƒ}n|s7d }|| _|| _|| _i | _t| jtƒ}| j j ¡ D ](\}}t|t
ƒr]|› d�n|}	|	| j|< |rwt|tƒrw|D ]	}
|	| jt|
ƒ< qmqOd S )NTzdisplay.html.borderÚpx)Úfmtr   ÚframeÚtr_frameÚcolumnsÚelementsÚ	bold_rowsÚescapeÚshow_dimensionsr   Úintr   r   r   r   Ú	col_spaceÚ
isinstancer
   ÚitemsÚtupleÚstr)Úselfr   r   r   r   r   Úis_multi_indexÚcolumnÚvalueÚcol_space_valueÚcolumn_index© r6   úS/var/www/html/CropPilot/venv/lib/python3.10/site-packages/pandas/io/formats/html.pyÚ__init__2   s2   




€ùzHTMLFormatter.__init__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Úxr6   r6   r7   Ú	<genexpr>Y   s   € z*HTMLFormatter.to_string.<locals>.<genexpr>c                 S  s   g | ]}t |ƒ‘qS r6   )r/   r:   r6   r6   r7   Ú
<listcomp>Z   s    z+HTMLFormatter.to_string.<locals>.<listcomp>Ú
)ÚrenderÚanyÚjoin)r0   Úlinesr6   r6   r7   Ú	to_stringW   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   Úbyr6   r6   r7   r@   ]   s   $ÿzHTMLFormatter.renderc                 C  ó   | j jS r9   )r"   rI   ©r0   r6   r6   r7   rI   h   ó   z$HTMLFormatter.should_show_dimensionsc                 C  rN   r9   )r"   Úshow_row_idx_namesrO   r6   r6   r7   rQ   l   rP   z HTMLFormatter.show_row_idx_namesc                 C  rN   r9   )r"   Úshow_col_idx_namesrO   r6   r6   r7   rR   p   rP   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#   ÚnlevelsrR   rO   r6   r6   r7   Ú
row_levelst   s
   
zHTMLFormatter.row_levelsr   c                 C  s   | j S r9   )r%   rO   r6   r6   r7   Ú_get_columns_formatted_valuesƒ   s   z+HTMLFormatter._get_columns_formatted_valuesc                 C  rN   r9   )r"   Úis_truncatedrO   r6   r6   r7   rX   †   rP   zHTMLFormatter.is_truncatedc                 C  s   t | jjjƒS r9   )rL   r"   r$   r%   rO   r6   r6   r7   ÚncolsŠ   ó   zHTMLFormatter.ncolsr   Úsr   Úindentc                 C  s    t |ƒ}| j d| | ¡ d S )NrG   )r   r&   Úappend)r0   r[   r\   Úrsr6   r6   r7   rK   Ž   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©Úkindr\   r`   )r+   ÚgetÚ_write_cell)r0   r[   r_   r\   r`   r+   r6   r6   r7   Úwrite_th’   s
   zHTMLFormatter.write_thc                 C  s   | j |d||d� d S )NÚtdrc   )rf   )r0   r[   r\   r`   r6   r6   r7   Úwrite_td³   s   zHTMLFormatter.write_tdrh   rd   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ú<rG   ú>z&amp;z&lt;z&gt;)ú&rj   rk   )Úescape_charsz	<a href="z" target="_blank">z</a>ra   z</)r(   r   Ústripr   r   rK   )
r0   r[   rd   r\   r`   Ú	start_tagÚescr^   Úrs_unescapedÚend_ar6   r6   r7   rf   ¶   s   $zHTMLFormatter._write_cellÚlineÚ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;">)r\   r_   r`   )r`   z</tr>)rK   Ú	enumeratere   r'   rg   ri   )r0   rs   r\   r   r_   rt   r`   rv   Úir[   Úval_tagr6   r6   r7   Ú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�}| jd u rNd}nd| j› d�}|  d	|› d
d |¡› d|› d�|¡ | jjso| jrw|  || j ¡ |  || j ¡ |  d|¡ d S )NÚ	dataframezdisplay.html.use_mathjaxÚtex2jax_ignorez.classes must be a string, list, or tuple, not ra   z id="ú"z	 border="z<tablez class="rG   rk   z</table>)r   r]   r   r,   r/   ÚsplitÚlistr.   Ú	TypeErrorÚtypeÚextendr   r   rK   rB   r"   r_   rQ   Ú_write_headerr   Ú_write_body)r0   r\   Ú_classesÚuse_mathjaxÚ
id_sectionÚborder_attrr6   r6   r7   rH   ì   s8   

ÿÿ

þzHTMLFormatter._write_tablec                 C  sH  | j j}t| jtƒ�rVd}| j jrtj}nd}| jj|dd�}t	||ƒ}t
|ƒd }tt||ƒƒD �]!\}\}	}
|rë| j j}| j jrºi }t|	 ¡ ƒD ]^\}}||krY|||d < n7|| |krŒ|d ||< ||krx|
d |… d |
|d …  }
n|
d |… |
|d  f |
|d …  }
n|||< || |kr¨d||< |
d |… d |
|d …  }
qJ|}	t
|ƒd }||kr¹d|	|< n1i }t|	 ¡ ƒD ]\}}||krÑ|||d < qÂ|||< qÂd||< |}	|
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
� q1d S dg| jd  }| j j�sg| j�r|| j j�rw| | jj�ptd¡ n| d¡ | |  ¡ ¡ | j j}|�r—| j| j j }| |d¡ | j||| jd	|d� d S )Nz colspan="{span:d}" halign="left"F©ÚsparsifyÚinclude_namesrS   )ú...rŒ   ra   ©ÚspanT)r`   r_   )r_   rt   )r"   Úis_truncated_horizontallyr,   r%   r
   rŠ   r	   Ú
no_defaultÚ_format_multir   rL   rw   ÚzipÚ
tr_col_numr   r-   rV   rT   rR   Úshow_index_namesÚnamesr]   r   Úformatrz   r   Únamer‚   rW   ÚjustifyÚinsert)r0   r\   r�   ÚtemplateÚsentinelÚlevelsÚlevel_lengthsÚ	inner_lvlÚlnumÚrecordsÚvaluesÚins_colÚrecs_newÚtagrŽ   Úrowr—   r`   Újrx   Úvrt   r6   r6   r7   Ú_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 )Nra   r6   r:   r6   r6   r7   r>   Š  s    z3HTMLFormatter._write_row_header.<locals>.<listcomp>ra   rS   r   T)r_   )r"   r�   r#   rT   r•   rY   rz   r   )r0   r\   r�   r¥   r6   r6   r7   Ú_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>)rK   r"   r_   r¨   r   rQ   r©   )r0   r\   r6   r6   r7   rƒ   �  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 r6   ©r"   Ú
format_col©r;   rx   rO   r6   r7   Ú
<dictcomp>œ  ó    z7HTMLFormatter._get_formatted_values.<locals>.<dictcomp>)r   ÚrangerY   )r0   Ú
fmt_valuesr6   rO   r7   Ú_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>)
rK   r³   r"   rT   r,   r#   r
   Ú_write_hierarchical_rowsr   Ú_write_regular_rows)r0   r\   r²   r6   r6   r7   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jdd�}g }t	|ƒD ]^‰|rQˆ| j j
krQdgt|ƒ }	| j|	|| jd | jd� g }| j jr_| |ˆ ¡ n| jrg| d¡ | ‡ ‡fdd„t	| jƒD ƒ¡ |r†| j j| j }
| |
d¡ | j||| jd | jd� q4d S )	NÚ	__index__F©Úinclude_namerŒ   ©r`   rv   ra   c                 3  ó   � | ]	}ˆ | ˆ V  qd S r9   r6   ©r;   r¦   ©r²   rx   r6   r7   r=   Ð  ó   € z4HTMLFormatter._write_regular_rows.<locals>.<genexpr>)r"   r�   Úis_truncated_verticallyrL   r$   rT   Ú_get_formatterÚmapÚ_format_flatr±   Ú
tr_row_numrz   r   rV   r]   rR   r‚   rY   r“   r™   )r0   r²   r\   r�   r¿   Únrowsr"   Úindex_valuesr¥   Ústr_sep_rowÚ
dot_col_ixr6   r½   r7   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�}t	t
|Ž ƒ}| j j�rftj}	|jj|	dd�}
t|
|	ƒ}t|ƒd }|ró| j j}d}t|ƒD ]Œ\}}i }t	| ¡ ƒD ]{\}}||krj|||d < n<|| |kr¢|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[|||< qOd|| |< ˆ 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 ƒ¡ |�rT| | j| | j j d¡ | j||| j|t|
ƒ| d� q÷d S 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� �qnd S )Nzrowspan="{span}" valign="top"Fr‰   rS   rŒ   éÿÿÿÿTr   r�   c                 3  r»   r9   r6   r¼   r½   r6   r7   r=   -  r¾   z9HTMLFormatter._write_hierarchical_rows.<locals>.<genexpr>rº   c                 3  r»   r9   r6   r¼   r½   r6   r7   r=   K  r¾   )r"   r�   r¿   r$   rL   r,   rT   r
   r‘   r   r’   rŠ   r	   r�   r   rÃ   rw   r-   r™   r.   r±   r–   r]   r‚   rY   rV   r“   rz   r   rU   )r0   r²   r\   rš   r�   r¿   r#   rÄ   Ú
idx_valuesr›   rœ   r�   rž   Úins_rowÚinsertedrŸ   r    Úrec_newr¤   rŽ   Údot_rowÚix_colr¥   r`   Úsparse_offsetr¦   r§   rÆ   r6   r½   r7   r´   Ù  sÌ   

ÿ€

€ ÿ
ûêûÿ 
ûíz&HTMLFormatter._write_hierarchical_rows)NNNF)r   r   r   r   r   r   r   r   r   r   r   r    )r   r/   ©r   rE   )r   r   )r   r*   )r   r   )r   )r[   r   r\   r*   r   r    )Fr   N)
r[   r   r_   r   r\   r*   r`   r   r   r    )r   N)r[   r   r\   r*   r`   r   r   r    )rh   r   N)
r[   r   rd   r/   r\   r*   r`   r   r   r    )r   r   FNNr   )rs   r   r\   r*   r   r*   r_   r   rt   r   r`   ru   rv   r*   r   r    )r\   r*   r   r    ©r   rª   )r²   r¶   r\   r*   r   r    )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Ú__annotations__r8   rD   r@   ÚpropertyrI   rQ   rR   rV   rW   rX   rY   rK   rg   ri   rf   rz   rH   r¨   r©   rƒ   r³   r„   rµ   r´   r6   r6   r6   r7   r   &   sX   
 	ú
%

ÿ!ÿø
%
w



.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«   r6   r¬   r®   rO   r6   r7   r¯   _  r°   z;NotebookFormatter._get_formatted_values.<locals>.<dictcomp>)r±   rY   rO   r6   rO   r7   r³   ^  s   z'NotebookFormatter._get_formatted_valuesrE   c                 C  s   | j jdd�S )NFr¸   )r%   rÂ   rO   r6   r6   r7   rW   a  rZ   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	 ‡ 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 r9   r6   )r;   Út©Útemplate_selectr6   r7   r=   }  s   € z0NotebookFormatter.write_style.<locals>.<genexpr>r?   )r,   r%   r
   r]   rQ   rB   r   rK   )r0   Útemplate_firstÚtemplate_lastÚelement_propsÚtemplate_midrš   r6   rà   r7   Úwrite_stylee  s"   þ
ÿ€
zNotebookFormatter.write_stylec                   s,   |   d¡ |  ¡  tƒ  ¡  |   d¡ | jS )Nz<div>z</div>)rK   ræ   Úsuperr@   r&   rO   ©Ú	__class__r6   r7   r@   �  s
   


zNotebookFormatter.renderrÑ   rÐ   )r   r    )	rÒ   rÓ   rÔ   rÕ   r³   rW   ræ   r@   Ú__classcell__r6   r6   rè   r7   rØ   W  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   Úcollections.abcr   r   r   r   rØ   r6   r6   r6   r7   Ú<module>   s$        5