a
    Ofe^                     @  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rd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|< |rt|tr|D ]}
|	| jt|
< qqd 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/   O/var/www/ai-form-bot/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rt|rt|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 rd}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rd}| 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rd||< |
d | d |
|d   }
q|}	t
|d }||krd|	|< nfi }t|	 D ]*\}}||kr|||d < n|||< qd||< |}	|
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
 qbndg| jd  }| j js| jr| j jr|| jjpd 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rd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rt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rd||< |dkr||tdgt|  q|rt	|| }d||| < t|||< q|||< qd|| |<  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 qng }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 qd 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