
    Owge^                        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y)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	d!d	       Z
e	d!d
       Ze	d!d       Ze	d"d       Zd#dZe	d!d       Ze	d"d       Zd$d%dZ	 d&	 	 	 	 	 	 	 	 	 d'dZd(d)dZ	 d*	 	 	 	 	 	 	 	 	 d+dZ	 	 	 	 	 	 d,	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d-dZd$d.dZd.dZd.dZd.dZd/dZd.dZ	 	 	 	 	 	 d0dZ	 	 	 	 	 	 d0dZy)1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_deltaNc                   || _         || _        | 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                  j%                         D ]^  \  }}t!        |t              r| dn|}	|	| j                  |<   |s/t!        |t&              s@|D ]  }
|	| j                  t)        |
      <    ` y )NTzdisplay.html.borderpx)fmtclassesframetr_framecolumnselements	bold_rowsescapeshow_dimensionsr   intr	   bordertable_idrender_links	col_space
isinstancer   itemstuplestr)self	formatterr   r$   r%   r&   is_multi_indexcolumnvaluecol_space_valuecolumn_indexs              M/var/www/horilla/myenv/lib/python3.12/site-packages/pandas/io/formats/html.py__init__zHTMLFormatter.__init__2   sA    XX^^
xx((00#%++hhoo#xx77>Vt^#z*?@AFF (#DLL*=!XX//557 	HMFE.8.Drl%O%4DNN6" *VU";$* HL8GDNN3|#45H	H    c                    | j                         }t        d |D              r|D cg c]  }t        |       }}dj                  |      S c c}w )Nc              3  <   K   | ]  }t        |t                y wN)r(   r+   ).0xs     r3   	<genexpr>z*HTMLFormatter.to_string.<locals>.<genexpr>Y   s     1az!S!1s   
)renderanyr+   join)r,   linesr:   s      r3   	to_stringzHTMLFormatter.to_stringW   sF    1511%*+SV+E+yy ,s   Ac           
         | j                          | j                  rVt        d      }| j                  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,   bys     r3   r=   zHTMLFormatter.render]   si    &&SBJJc$**o&fRD#djj6H6H2I1J,W }}r5   c                .    | j                   j                  S r8   )r   rF   r,   s    r3   rF   z$HTMLFormatter.should_show_dimensionsh   s    xx...r5   c                .    | j                   j                  S r8   )r   show_row_idx_namesrL   s    r3   rN   z HTMLFormatter.show_row_idx_namesl       xx***r5   c                .    | j                   j                  S r8   )r   show_col_idx_namesrL   s    r3   rQ   z HTMLFormatter.show_col_idx_namesp   rO   r5   c                    | j                   j                  r | j                  j                  j                  S | j                  ryy)N   r   )r   indexr   nlevelsrQ   rL   s    r3   
row_levelszHTMLFormatter.row_levelst   s4    88>>::##+++$$ r5   c                    | j                   S r8   )r   rL   s    r3   _get_columns_formatted_valuesz+HTMLFormatter._get_columns_formatted_values   s    ||r5   c                .    | j                   j                  S r8   )r   is_truncatedrL   s    r3   rZ   zHTMLFormatter.is_truncated   s    xx$$$r5   c                T    t        | j                  j                  j                        S r8   )rI   r   r   r   rL   s    r3   ncolszHTMLFormatter.ncols   s    488$$,,--r5   c                \    t        |      }| j                  j                  d|z  |z          y )NrD   )r   r   append)r,   sindentrss       r3   rH   zHTMLFormatter.write   s&    !_S6\B./r5   c                    | j                   j                  |d      }|r||xs d}|d| dz  }| j                  |d||       y)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`   tags)r'   get_write_cell)r,   r_   headerr`   rg   r'   s         r3   write_thzHTMLFormatter.write_th   sV    2 NN&&q$/	i+:2D(266Df4@r5   c                .    | j                  |d||       y )Ntdre   )ri   )r,   r_   r`   rg   s       r3   write_tdzHTMLFormatter.write_td   s    f4@r5   c                @   |
d| d| d}nd| d}| j                   rdddd}ni }t        ||      j                         }| j                  r2t	        |      r't        |i       j                         }|d	| d
z  }d}	nd}	| j                  | | |	 d| d|       y )N<rD   >z&amp;z&lt;z&gt;)&rp   rq   )escape_charsz	<a href="z" target="_blank">z</a>rc   z</)r!   r   stripr&   r   rH   )
r,   r_   rf   r`   rg   	start_tagescra   rs_unescapedend_as
             r3   ri   zHTMLFormatter._write_cell   s     D64&*ID6I;; wW=CC!#.446';AACL9\N2DEEIEE

i[UG2dV15v>r5   c                ^   |i }|| j                  d|       n| j                  d| d|       ||z  }t        |      D ]T  \  }}	|j                  |d       }
|s| j                  r||k  r| j	                  |	|||
       A| j                  |	||
       V ||z  }| j                  d|       y )Nz<tr>z<tr style="text-align: z;">)r`   rj   rg   )rg   z</tr>)rH   	enumeraterh   r    rk   rn   )r,   liner`   r   rj   alignrg   nindex_levelsir_   val_tags              r3   write_trzHTMLFormatter.write_tr   s     <D=JJvv&JJ0s;VD,dO 	7DAqhhq$'G$..Q->avGLag6	7 	,

7F#r5   c           	     :   dg}t        d      }|s|j                  d       | j                  t        | j                  t              r| j                  j                         | _        t        | j                  t        t        f      s!t        dt        | j                               |j                  | j                         | j                  d}nd| j                   d}| j                  d}nd| j                   d}| j                  d	| d
dj                  |       d| d|       | j                  j                   s| j"                  r| j%                  || j&                  z          | j)                  || j&                  z          | j                  d|       y )N	dataframezdisplay.html.use_mathjaxtex2jax_ignorez.classes must be a string, list, or tuple, not rc   z id=""z	 border="z<tablez class="rD   rq   z</table>)r	   r^   r   r(   r+   splitlistr*   	TypeErrortypeextendr%   r$   rH   r?   r   rj   rN   _write_headerr   _write_body)r,   r`   _classesuse_mathjax
id_sectionborder_attrs         r3   rE   zHTMLFormatter._write_table   sb   = !;<OO,-<<#$,,,#||113dllT5M:%%)$,,%7$8:  OODLL)== J q1J;;K%dkk]!4K

[M#((8*<)=Qzl!L	

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

:v&r5   c                   | j                   j                  }t        | j                  t              rd}| j                   j
                  rt        j                  }nd}| j                  j                  |d      }t        ||      }t        |      dz
  }t        t        ||            D ];  \  }\  }	}
|r| j                   j                  }| j                   j
                  ri }t        |	j                               D ]n  \  }}||k\  r	|||dz   <   n?||z   |kD  r2|dz   ||<   ||k(  r|
d | dz   |
|d  z   }
n|
d | |
|dz
     fz   |
|d  z   }
n|||<   ||z   |k(  s\d||<   |
d | dz   |
|d  z   }
p |}	t        |      dz
  }||k(  rRd|	|<   nLi }t        |	j                               D ]  \  }}||k\  r	|||dz   <   |||<    d||<   |}	|
d | dgz   |
|d  z   }
dg| j                   dz
  z  }| j                   j"                  s| j$                  r_| j                   j&                  r8| j                  j(                  |   }|j+                  t-        |xs d             n|j+                  d       i }t        |      }t        |
      D ]A  \  }}||	v r!|	|   dkD  r|j/                  |	|         ||<   n,|dz  }|j+                  |       C | j1                  ||| j2                  |d	
       > y dg| j                   dz
  z  }| j                   j"                  s| j$                  rQ| j                   j&                  r*|j+                  | j                  j4                  xs d       n|j+                  d       |j7                  | j9                                | j                   j:                  }|r5| j                   | j                   j                  z   }|j=                  |d       | j1                  ||| j2                  d	|       y )Nz colspan="{span:d}" halign="left"Fsparsifyinclude_namesrS   )...r   rc   spanT)rg   rj   )rj   r|   )r   is_truncated_horizontallyr(   r   r   r   r
   
no_default_format_multir   rI   rz   zip
tr_col_numr   r)   rV   rT   rQ   show_index_namesnamesr^   r   formatr   r   namer   rX   justifyinsert)r,   r`   r   templatesentinellevelslevel_lengths	inner_lvllnumrecordsvaluesins_colrecs_newtagr   rowr   rg   jr~   vr|   s                         r3   _write_col_headerzHTMLFormatter._write_col_header  s   $(HH$F$F!dllJ/9H xx  >> \\//QV/WF-fh?MM*Q.I+4S5O+P LV''w,"hh11Gxx((#%)-gmmo)> XIC"g~48q 1!$tg!504q#'9#4(.x(88(CfWXFV(V %+ )/x(8+1'A++>*@)A*0*:); %+ 15  #TzW445 1)/)9H)DvghGW)W-X. #+$'$6$:	9,/0GG,#%)-gmmo)> 5IC"g~48q 104	5
 -.)"*!'!1UG!;fWX>N!N ddoo1288>>T%<%< xx00#||11$7

<
#;<

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

7E*MM#vt'8'8UMSr5   c                   | j                   j                  }| j                  j                  j                  D cg c]  }||nd
 c}dg| j
                  |rdndz   z  z   }| j                  ||| j                  d       y c c}w )Nrc   rS   r   T)rj   )r   r   r   rT   r   r\   r   r   )r,   r`   r   r:   r   s        r3   _write_row_headerzHTMLFormatter._write_row_header  s}    $(HH$F$F!37::3C3C3I3IJaAMqr)JbTJJ8!a@N
 
 	c64#4#4TB Ks   Bc                   | j                  d|       | j                  j                  r| j                  || j                  z          | j
                  r| j                  || j                  z          | j                  d|       y )Nz<thead>z</thead>)rH   r   rj   r   r   rN   r   )r,   r`   s     r3   r   zHTMLFormatter._write_header  sd    

9f%88??""6D,=,=#=>""""6D,=,=#=>

:v&r5   c                    t        dd       5  t        | j                        D ci c]  }|| j                  j	                  |        }}d d d        |S c c}w # 1 sw Y   S xY w)Nzdisplay.max_colwidth)r   ranger\   r   
format_col)r,   r~   
fmt_valuess      r3   _get_formatted_valuesz#HTMLFormatter._get_formatted_values  sb    2D9 	P=B4::=NO!TXX0033OJO	P P	Ps   A#AAAA#c                ^   | j                  d|       | j                         }| j                  j                  rDt	        | j
                  j                  t              r | j                  ||| j                  z          n| j                  ||| j                  z          | j                  d|       y )Nz<tbody>z</tbody>)
rH   r   r   rT   r(   r   r   _write_hierarchical_rowsr   _write_regular_rows)r,   r`   r   s      r3   r   zHTMLFormatter._write_body  s    

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

:v&r5   c                F   | j                   j                  }| j                   j                  }t        | j                   j                        }| j                   j
                  r}| j                   j                  d      }|0| j                   j                  j
                  j                  |      }n0| j                   j                  j
                  j                  d      }g }t        |      D ]0  |rR| j                   j                  k(  r9dgt        |      z  }	| j                  |	|| j                  d | j                         g }| j                   j
                  r|j                            n| j                  r|j                  d       |j!                  fdt        | j"                        D               |r5| j                   j$                  | j                  z   }
|j'                  |
d       | j                  ||| j                  d | j                         3 y )N	__index__Finclude_namer   rg   r}   rc   c              3  .   K   | ]  }|        y wr8    r9   r   r   r~   s     r3   r;   z4HTMLFormatter._write_regular_rows.<locals>.<genexpr>  s     CAz!}Q'C   )r   r   is_truncated_verticallyrI   r   rT   _get_formattermap_format_flatr   
tr_row_numr   r   rV   r^   rQ   r   r\   r   r   )r,   r   r`   r   r   nrowsr   index_valuesr   str_sep_row
dot_col_ixr~   s    `         @r3   r   z!HTMLFormatter._write_regular_rows  s    %)HH$F$F!"&(("B"BDHH%%&88>>(())+6C#xx0066::3?  $xx0066CCQVCWu 	A&11D1D+E$gC0%%"&//   Cxx~~

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

2JJCtzz1BCC(!XX004??B


:u-MMVT..T  3	r5   c                T	   d}| j                   j                  }| j                   j                  }| j                   j                  }t	        |      }t        |j                  t              sJ |j                  j                  dd      }t        t        |       }| j                   j                  rt        j                  }	|j                  j                  |	d      }
t        |
|	      }t	        |      dz
  }|r_| j                   j                  }d}t!        |      D ]  \  }}i }t        |j#                               D ]  \  }}||k\  r	|||dz   <   np||z   |kD  rc|dz   ||<   |s4t        ||dz
           }d|d<   |j%                  |t'        |             d}n*t        ||         }d|||z
  <   t'        |      ||<   n|||<   ||z   |k(  sd||<   |dk(  r)|j%                  |t'        dgt	        |      z               |st        ||         }d|||z
  <   t'        |      ||<    |||<    d||   |<   D ]  }|   j%                  |d        |dz  }t)        |      D ]  g }i }d}d}t        ||         D ]F  \  }}|v r!|   dkD  r|j+                  |   	      ||<   n|dz  }1|dz  }|j-                  |       H |j/                  fd
t)        | j0                        D               |r6|j%                  | j2                  |z
  | j                   j4                  z   d       | j7                  ||| j8                  |t	        |
      |z
          y g }t)        t	        |            D ]0  |rR| j                   j                  k(  r9dgt	        |      z  }| j7                  ||| j8                  d | j2                         t        t        |j                  j                  dd             }g }|j/                  |          |j/                  fdt)        | j0                        D               |r3|j%                  | j2                  | j                   j4                  z   d       | j7                  ||| j8                  d |j                  j:                         3 y )Nzrowspan="{span}" valign="top"Fr   rS   r   Tr   r   c              3  .   K   | ]  }|        y wr8   r   r   s     r3   r;   z9HTMLFormatter._write_hierarchical_rows.<locals>.<genexpr>-       G:a=+Gr   r   c              3  .   K   | ]  }|        y wr8   r   r   s     r3   r;   z9HTMLFormatter._write_hierarchical_rows.<locals>.<genexpr>K  r   r   )r   r   r   r   rI   r(   rT   r   r   r   r   r   r
   r   r   r   rz   r)   r   r*   r   r   r^   r   r\   rV   r   r   r   rU   )r,   r   r`   r   r   r   r   r   
idx_valuesr   r   r   r   ins_rowinsertedr   r   rec_newr   r   dot_rowix_colr   rg   sparse_offsetr   r   r   r~   s    `                          @r3   r   z&HTMLFormatter._write_hierarchical_rows  s    3$(HH$F$F!"&(("B"B!!E
%++z222[[..U.S
#z*+
88~~H[[..PU.VF-fh?MM*Q.I& ((-- %.}%= "2MD' G%)'--/%: E	T'>/3GC!G, 4Z'1+/!8GCL $,*.z'A+/F*G.3 * 1 1'5> J+/*.z'/B*C<A	D(8 96;Gn
7 3+/GCL :0/0GG,#qy * 1 1$+UE7S=O3O-P!"
 "**.z'/B*C<A	D(8 96;Gn
7 3?E@ +2M$'E"2H 56i(1( >Fv&--gu=>
5\  !"%mZ]"C 	"JGQG|"1:>&.oo71:o&FDG%* FAJJqM	" 

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

:a=)

GU4::5FGG,JJt1D1DDeL%%"'++"5"5  'r5   )NNNF)r-   r   r   z(str | list[str] | tuple[str, ...] | Noner$   zint | bool | Noner%   
str | Noner&   boolreturnNone)r   r+   r   z	list[str])r   r   )r   r#   )r   r   )r   )r_   r   r`   r#   r   r   )Fr   N)
r_   r   rj   r   r`   r#   rg   r   r   r   )r   N)r_   r   r`   r#   rg   r   r   r   )rm   r   N)
r_   r   rf   r+   r`   r#   rg   r   r   r   )r   r   FNNr   )r{   r   r`   r#   r   r#   rj   r   r|   r   rg   zdict[int, str] | Noner}   r#   r   r   )r`   r#   r   r   r   zdict[int, list[str]])r   zMapping[int, list[str]]r`   r#   r   r   )__name__
__module____qualname____doc__r   __annotations__r4   rA   r=   propertyrF   rN   rQ   rV   rX   rZ   r\   rH   rk   rn   ri   r   rE   r   r   r   r   r   r   r   r   r5   r3   r   r   &   s3    L%
 =A$(#"#H%#H :#H "	#H
 #H #H 
#HJ 	 / / + + + +   % % . .0
 QUAA"A47ACMA	ABA MQ???03??I?	?8  &*$$ $ 	$
 $ $ $$ $ 
$:#'JuTnC	'

',1,;>,	,\{1{;>{	{r5   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)
    c                    t        | j                        D ci c]  }|| j                  j                  |        c}S c c}w r8   )r   r\   r   r   )r,   r~   s     r3   r   z'NotebookFormatter._get_formatted_values^  s3    383DEa488&&q))EEEs   #>c                :    | j                   j                  d      S )NFr   )r   r   rL   s    r3   rX   z/NotebookFormatter._get_columns_formatted_valuesa  s    ||((e(<<r5   c                J   d}d}dddg}t        | j                  t              r/|j                  d       | j                  r#|j                  d       n|j                  d       d	j                  fd
|D              }t        | d| d|       }| j                  |       y )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    y wr8   r   )r9   ttemplate_selects     r3   r;   z0NotebookFormatter.write_style.<locals>.<genexpr>}  s     "N1?Q#6"Ns   r<   )r(   r   r   r^   rN   r?   r   rH   )r,   template_firsttemplate_lastelement_propstemplate_midr   r   s         @r3   write_stylezNotebookFormatter.write_stylee  s    
 E4
 dllJ/  !FG&&$$G   !DE{{"N"NN^,B|nB}oNO

8r5   c                    | j                  d       | j                          t        |           | j                  d       | j                  S )Nz<div>z</div>)rH   r   superr=   r   )r,   	__class__s    r3   r=   zNotebookFormatter.render  s;    

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

8}}r5   r   r   )r   r   )	r   r   r   r   r   rX   r   r=   __classcell__)r   s   @r3   r   r   W  s"    F=8 r5   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   r   r5   r3   <module>r     s^    #   & 
 $ 4 n nb/ /r5   