
    cMhe^                        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          Z G 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                  `   e Zd ZU dZdZded<   	 	 	 	 d=d>dZd?dZd@dZe	dAd            Z
e	dAd            Ze	dAd            Ze	dBd            ZdCdZe	dAd            Ze	dBd             ZdDdEd%Z	 dFdGd(ZdHdId)Z	 dJdKd,Z	 	 	 	 	 	 dLdMd1ZdDdNd2ZdNd3ZdNd4ZdNd5ZdOd7ZdNd8ZdPd;ZdPd<ZdS )Q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                   || _         || _        | j         j        | _        | j         j        j        | _        g | _        | j         j        | _        | j         j        | _        | j         j        | _        ||du r#t          t          t          d                    }n|sd }|| _        || _        || _        i | _        t!          | j        t"                    }| j         j                                        D ]^\  }}t!          |t                    r| dn|}	|	| j        |<   |r1t!          |t&                    r|D ]}
|	| j        t)          |
          <   _d 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_indexs              V/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/pandas/io/formats/html.py__init__zHTMLFormatter.__init__2   s[    X^
x(0#%+ho#x7>Vt^^#z*?@@AAFF 	F (#DL*==!X/5577 	H 	HMFE.8.D.DOllll%O%4DN6"  H*VU";"; H$* H HL8GDN3|#4#455	H 	H    r2   c                    |                                  }t          d |D                       rd |D             }d                    |          S )Nc              3  @   K   | ]}t          |t                    V  d S N)r/   r2   .0xs     r9   	<genexpr>z*HTMLFormatter.to_string.<locals>.<genexpr>Y   s,      11az!S!!111111r;   c                ,    g | ]}t          |          S  )r2   r?   s     r9   
<listcomp>z+HTMLFormatter.to_string.<locals>.<listcomp>Z   s    +++SVV+++r;   
)renderanyjoin)r3   liness     r9   	to_stringzHTMLFormatter.to_stringW   sS    11511111 	,++U+++Eyyr;   	list[str]c           
         |                                   | j        rWt          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)   )r3   bys     r9   rG   zHTMLFormatter.render]   s}    & 	SBJJWc$*ooWWRWW#dj6H2I2IWWW   }r;   c                    | j         j        S r>   )r%   rQ   r3   s    r9   rQ   z$HTMLFormatter.should_show_dimensionsh   s    x..r;   c                    | j         j        S r>   )r%   show_row_idx_namesrW   s    r9   rY   z HTMLFormatter.show_row_idx_namesl       x**r;   c                    | j         j        S r>   )r%   show_col_idx_namesrW   s    r9   r\   z HTMLFormatter.show_col_idx_namesp   rZ   r;   r-   c                R    | j         j        r| j        j        j        S | j        rdS dS )N   r   )r%   indexr&   nlevelsr\   rW   s    r9   
row_levelszHTMLFormatter.row_levelst   s3    8> 		:#++$ 	 1qr;   r   c                    | j         S r>   )r(   rW   s    r9   _get_columns_formatted_valuesz+HTMLFormatter._get_columns_formatted_values   s
    |r;   c                    | j         j        S r>   )r%   is_truncatedrW   s    r9   re   zHTMLFormatter.is_truncated   s    x$$r;   c                >    t          | j        j        j                  S r>   )rT   r%   r'   r(   rW   s    r9   ncolszHTMLFormatter.ncols   s    48$,---r;   r   sr   indentc                d    t          |          }| j                            d|z  |z              d S )NrO   )r   r)   append)r3   rh   ri   rss       r9   rS   zHTMLFormatter.write   s2    !__S6\B./////r;   headertagsc                    | j                             |d          }|r||pd}|d| dz  }|                     |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kindri   rn   )r.   get_write_cell)r3   rh   rm   ri   rn   r.   s         r9   write_thzHTMLFormatter.write_th   sj    2 N&&q$//	 	7i+:2D66666Df4@@@@@r;   c                8    |                      |d||           d S )Ntdrr   )ru   )r3   rh   ri   rn   s       r9   write_tdzHTMLFormatter.write_td   s%    f4@@@@@r;   rx   rs   c                ^   |
d| d| d}nd| d}| j         rdddd}ni }t          ||                                          }| j        r>t	          |          r/t          |i                                           }|d	| d
z  }d}	nd}	|                     | | |	 d| d|           d S )N<rO   >z&amp;z&lt;z&gt;)&r{   r|   )escape_charsz	<a href="z" target="_blank">z</a>rp   z</)r+   r   stripr   r   rS   )
r3   rh   rs   ri   rn   	start_tagescrl   rs_unescapedend_as
             r9   ru   zHTMLFormatter._write_cell   s     *D**4***II#DI; 	 wW==CCC!#...4466 	 	';;;AACCLE\EEEEIEEE

i55U55d555v>>>>>r;   linealigndict[int, str] | Nonenindex_levelsc                   |i }||                      d|           n|                      d| d|           ||z  }t          |          D ]\\  }}	|                    |d           }
|s| j        r ||k     r|                     |	|||
           D|                     |	||
           ]||z  }|                      d|           d S )Nz<tr>z<tr style="text-align: z;">)ri   rm   rn   )rn   z</tr>)rS   	enumeratert   r*   rv   ry   )r3   r   ri   r   rm   r   rn   r   irh   val_tags              r9   write_trzHTMLFormatter.write_tr   s     <D=JJvv&&&&JJ;;;;VDDD,dOO 	7 	7DAqhhq$''G 7$. 7Q->->avGLLLLag6666,

7F#####r;   c           	        dg}t          d          }|s|                    d           | j        t          | j        t                    r| j                                        | _        t          | j        t          t          f          s$t          dt          | j                             |
                    | j                   | j        d}nd| j         d}| j        d}nd| j         d}|                     d	| d
d                    |           d| d|           | j        j        s| j        r|                     || j        z              |                     || j        z              |                     d|           d S )N	dataframezdisplay.html.use_mathjaxtex2jax_ignorez.classes must be a string, list, or tuple, not rp   z id=""z	 border="z<tablez class="rO   r|   z</table>)r	   rk   r   r/   r2   splitlistr1   	TypeErrortypeextendr   r   rS   rI   r%   rm   rY   _write_headerr   _write_body)r3   ri   _classesuse_mathjax
id_sectionborder_attrs         r9   rP   zHTMLFormatter._write_table   s   = !;<< 	.OO,---<#$,,, 4#|1133dlT5M:: :%)$,%7%7: :   OODL)))= JJ1111J;KK4dk444K

L[LL#((8*<*<LLzLLL	
 	
 	

 8? 	;d5 	;v(99:::$"33444

:v&&&&&r;   c                   | j         j        }t          | j        t                    rd}| j         j        rt          j        }nd}| j                            |d          }t          ||          }t          |          dz
  }t          t          ||                    D ]`\  }\  }	}
|rK| j         j        }| j         j        ri }t          |	                                          D ]\  }}||k    r	|||dz   <   nX||z   |k    rJ|dz   ||<   ||k    r|
d |         dz   |
|d          z   }
n(|
d |         |
|dz
           fz   |
|d          z   }
n|||<   ||z   |k    rd||<   |
d |         dz   |
|d          z   }
|}	t          |          dz
  }||k    rd|	|<   n]i }t          |	                                          D ]\  }}||k    r	|||dz   <   |||<   d||<   |}	|
d |         dgz   |
|d          z   }
dg| j        dz
  z  }| j         j        s| j        rX| j         j        r7| j        j        |         }|                    t-          |pd                     n|                    d           i }t          |          }t          |
          D ]P\  }}||	v r,|	|         dk    r|                    |	|                   ||<   n6|dz  }|                    |           Q|                     ||| j        |d	
           bd S dg| j        dz
  z  }| j         j        s| j        rC| j         j        r"|                    | j        j        pd           n|                    d           |                    |                                            | j         j        }|r*| j        | j         j        z   }|                    |d           |                     ||| j        d	|           d S )Nz colspan="{span:d}" halign="left"Fsparsifyinclude_namesr^   )...r   rp   spanT)rn   rm   )rm   r   )r%   is_truncated_horizontallyr/   r(   r   r   r
   
no_default_format_multir   rT   r   zip
tr_col_numr   r0   ra   r_   r\   show_index_namesnamesrk   r   formatr   r   namer   rc   justifyinsert)r3   ri   r   templatesentinellevelslevel_lengths	inner_lvllnumrecordsvaluesins_colrecs_newtagr   rowr   rn   jr   vr   s                         r9   _write_col_headerzHTMLFormatter._write_col_header  s   $(H$F!dlJ// r	T9H x  !> \//QV/WWF-fh??MM**Q.I+4S5O5O+P+P LV LV''w, *O"h1Gx( 'O#%)-gmmoo)>)> X XIC"g~~48q 1 1!$tg!5!504q#'9#4#4(.xx(88(CfWXXFV(V %+F )/xx(8+1'A++>*@)A*0*:); %+F 15  #TzW4445 1)/)9H)DvghhGW)W"*$'$6$6$:	9,,/0GG,#%)-gmmoo)>)> 5 5IC"g~~48q 1 104,-)"*!'!1UG!;fWXX>N!N ddo128> 'T%< ' x0 '#|1$7

<
#;#;<<<<

2HH%f-- " "DAqG||"1:>>&.oo71:o&F&FDG FAJJqMMMMc64+<4PTUUUUYLV LVh $$/A-.Cx~ 	#!8 	# 8, #JJt|06B7777JJrNNNJJt99;;<<<H$E( +/DH,??

7E***MM#vt'8UMSSSSSr;   c                    | j         j        }d | j        j        j        D             dg| j        |rdndz   z  z   }|                     ||| j        d           d S )Nc                    g | ]}||nd	S )Nrp   rD   r?   s     r9   rE   z3HTMLFormatter._write_row_header.<locals>.<listcomp>  s     JJJaAMqqrJJJr;   rp   r^   r   T)rm   )r%   r   r&   r_   r   rg   r   r   )r3   ri   r   r   s       r9   _write_row_headerzHTMLFormatter._write_row_header  sp    $(H$F!JJ4:3C3IJJJbTJ8?!!a@N
 
 	c64#4TBBBBBr;   c                    |                      d|           | j        j        r|                     || j        z              | j        r|                     || j        z              |                      d|           d S )Nz<thead>z</thead>)rS   r%   rm   r   r   rY   r   )r3   ri   s     r9   r   zHTMLFormatter._write_header  s    

9f%%%8? 	?""6D,=#=>>>" 	?""6D,=#=>>>

:v&&&&&r;   dict[int, list[str]]c                     t          dd           5   fdt           j                  D             }d d d            n# 1 swxY w Y   |S )Nzdisplay.max_colwidthc                F    i | ]}|j                             |          S rD   r%   
format_colr@   r   r3   s     r9   
<dictcomp>z7HTMLFormatter._get_formatted_values.<locals>.<dictcomp>  s+    OOO!TX0033OOOr;   )r   rangerg   )r3   
fmt_valuess   ` r9   _get_formatted_valuesz#HTMLFormatter._get_formatted_values  s    2D99 	P 	POOOOU4:=N=NOOOJ	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	Ps   !?AAc                V   |                      d|           |                                 }| j        j        r>t	          | j        j        t                    r|                     ||| j        z              n| 	                    ||| j        z              |                      d|           d S )Nz<tbody>z</tbody>)
rS   r   r%   r_   r/   r&   r   _write_hierarchical_rowsr   _write_regular_rows)r3   ri   r   s      r9   r   zHTMLFormatter._write_body  s    

9f%%%//11
 8> 	Mj)9:FF 	M))*ft?P6PQQQQ$$Z$:K1KLLL

:v&&&&&r;   r   Mapping[int, list[str]]c                   | j         j        }| j         j        }t          | j         j                  }| j         j        rf| j                             d          }|%| j         j        j                            |          }n%| j         j        j                            d          }g }t          |          D ]|rG| j         j
        k    r7dgt          |          z  }	|                     |	|| j        d | j                   g }| j         j        r|                    |                    n| j        r|                    d           |                    fdt          | j                  D                        |r*| j         j        | j        z   }
|                    |
d           |                     ||| j        d | j                   d S )N	__index__Finclude_namer   rn   r   rp   c              3  4   K   | ]}|                  V  d S r>   rD   r@   r   r   r   s     r9   rB   z4HTMLFormatter._write_regular_rows.<locals>.<genexpr>  s,      CCAz!}Q'CCCCCCr;   )r%   r   is_truncated_verticallyrT   r'   r_   _get_formattermap_format_flatr   
tr_row_numr   r   ra   rk   r\   r   rg   r   r   )r3   r   ri   r   r   nrowsr%   index_valuesr   str_sep_row
dot_col_ixr   s    `         @r9   r   z!HTMLFormatter._write_regular_rows  s    %)H$F!"&("BDH%&&8> 	X())+66C#x06::3??  $x06CCQVCWWu 	 	A& 11D+E+E$gC0%"&/     Cx~ 

<?++++
 ( 

2JJCCCCCtz1B1BCCCCCC( .!X04?B


:u---MMVT.T     3	 	r;   c                	   d}| j         j        }| j         j        }| j         j        }t	          |          }t          |j        t                    sJ |j                            dd          }t          t          |           }| j         j        rt          j        }	|j                            |	d          }
t          |
|	          }t	          |          dz
  }|r| j         j        }d}t!          |          D ]J\  }}i }t          |                                          D ]\  }}||k    r	|||dz   <   n||z   |k    r}|dz   ||<   |sCt          ||dz
                     }d|d<   |                    |t'          |                     d}n5t          ||                   }d|||z
  <   t'          |          ||<   n|||<   ||z   |k    rqd||<   |dk    r5|                    |t'          dgt	          |          z                       |r/t          ||                   }d|||z
  <   t'          |          ||<   |||<   Ld||         |<   D ]}|                             |d           |dz  }t)          |          D ]g }i }d}d}t          ||                   D ]U\  }}|v r,|         dk    r|                    |         	          ||<   n|dz  };|dz  }|                    |           V|                    fd
t)          | j                  D                        |r+|                    | j        |z
  | j         j        z   d           |                     ||| j        |t	          |
          |z
             	d S g }t)          t	          |                    D ] |rG| j         j        k    r7dgt	          |          z  }|                     ||| j        d | j                   t          t          |j                            dd                     }g }|                    |                    |                    fdt)          | j                  D                        |r(|                    | j        | j         j        z   d           |                     ||| j        d |j        j                   "d S )Nzrowspan="{span}" valign="top"Fr   r^   r   Tr   r   c              3  4   K   | ]}|                  V  d S r>   rD   r   s     r9   rB   z9HTMLFormatter._write_hierarchical_rows.<locals>.<genexpr>-  ,      GG:a=+GGGGGGr;   r   c              3  4   K   | ]}|                  V  d S r>   rD   r   s     r9   rB   z9HTMLFormatter._write_hierarchical_rows.<locals>.<genexpr>K  r   r;   )r%   r   r   r'   rT   r/   r_   r   r   r   r   r   r
   r   r   r   r   r0   r   r1   r   r   rk   r   rg   ra   r   r   r   r`   )r3   r   ri   r   r   r   r&   r   
idx_valuesr   r   r   r   ins_rowinsertedr   r   rec_newr   r   dot_rowix_colr   rn   sparse_offsetr   r   r   r   s    `                          @r9   r   z&HTMLFormatter._write_hierarchical_rows  s    3$(H$F!"&("B!E

%+z22222[..U.SS
#z*++
8 m	~H[..PU.VVF-fh??MM**Q.I& , (- %.}%=%= "2 "2MD' G%)'--//%:%: E E	T'>>/3GC!G,, 4Z'11+/!8GCL $, E*.z'A+/F*G*G.3 * 1 1'5>> J J J+/*.z'/B*C*C<A	D(8 96;Gnn
7 3 3+/GCL :00/0GG,#qyy * 1 1$+UE7S=O=O3O-P-P!" !" !" !"
 "* E*.z'/B*C*C<A	D(8 96;Gnn
7 3*1M$''45i(1( > >Fv&--gu====
5\\   !"%mZ]"C"C 	" 	"JGQG||"1:>>&.oo71:o&F&FDG%* FAJJqMMMM

GGGGGU4:5F5FGGGGGG, JJ-7$(:MMu   %"%f++"=     - < C3u::&&  * qTX5H/I/I#('CHH"4KMM#)!&*o "    "22EQV2WWX 
 

:a=)))

GGGGGU4:5F5FGGGGGG, MJJt1DDeLLL%"'+"5     ' r;   )NNNF)r   r   r   r   r   r   r   r   r   r    r!   r"   )r!   r2   r!   rL   )r!   r    )r!   r-   )r!   r   )r   )rh   r   ri   r-   r!   r"   )Fr   N)
rh   r   rm   r    ri   r-   rn   r   r!   r"   )r   N)rh   r   ri   r-   rn   r   r!   r"   )rx   r   N)
rh   r   rs   r2   ri   r-   rn   r   r!   r"   )r   r   FNNr   )r   r   ri   r-   r   r-   rm   r    r   r   rn   r   r   r-   r!   r"   )ri   r-   r!   r"   r!   r   )r   r   ri   r-   r!   r"   )__name__
__module____qualname____doc__r   __annotations__r:   rK   rG   propertyrQ   rY   r\   ra   rc   re   rg   rS   rv   ry   ru   r   rP   r   r   r   r   r   r   r   rD   r;   r9   r   r   &   s          L
 =A$(#"#H #H #H #H #HJ       	 	 	 	 / / / X/ + + + X+ + + + X+    X    % % % X% . . . X.0 0 0 0 0
 QUA A A A ABA A A A A MQ? ? ? ? ?8  &*$ $ $ $ $:#' #' #' #' #'JuT uT uT uTnC C C C	' 	' 	' 	'   

' 
' 
' 
', , , ,\{ { { { { {r;   r   c                  <     e Zd ZdZd
dZddZddZd fd	Z x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                D      fdt           j                  D             S )Nc                F    i | ]}|j                             |          S rD   r   r   s     r9   r   z;NotebookFormatter._get_formatted_values.<locals>.<dictcomp>_  s+    EEEa48&&q))EEEr;   )r   rg   rW   s   `r9   r   z'NotebookFormatter._get_formatted_values^  s'    EEEE53D3DEEEEr;   rL   c                8    | j                             d          S )NFr   )r(   r   rW   s    r9   rc   z/NotebookFormatter._get_columns_formatted_valuesa  s    |((e(<<<r;   r"   c                x   d}d}dddg}t          | j        t                    r2|                    d           | j        r|                    d           n|                    d           d	                    f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  "   K   | ]	}|z  V  
d S r>   rD   )r@   ttemplate_selects     r9   rB   z0NotebookFormatter.write_style.<locals>.<genexpr>}  s(      "N"N1?Q#6"N"N"N"N"N"Nr;   rF   )r/   r(   r   rk   rY   rI   r   rS   )r3   template_firsttemplate_lastelement_propstemplate_midr   r  s         @r9   write_stylezNotebookFormatter.write_stylee  s    
 E4
 dlJ// 	F  !FGGG& $$G     !DEEE{{"N"N"N"N"N"N"NNN^NN|NN}NNOO

8r;   c                    |                      d           |                                  t                                                       |                      d           | j        S )Nz<div>z</div>)rS   r  superrG   r)   )r3   	__class__s    r9   rG   zNotebookFormatter.render  sU    

7

8}r;   r   r   )r!   r"   )	r   r   r   r   r   rc   r  rG   __classcell__)r	  s   @r9   r   r   W  s         F F F F= = = =   8         r;   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   rD   r;   r9   <module>r     s    # " " " " "                  & % % % % %             
 $ # # # # #        4 3 3 3 3 3          n n n n n n n nb/ / / / / / / / / /r;   