
    d[                        d Z ddlmZ ddlmZ ddlmZmZ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  G d d          Z G d de          ZdS )z,
Module for formatting output data in HTML.
    )annotations)dedent)AnyFinalHashableIterableMappingcast)
get_option)lib)
MultiIndexoption_context)is_url)DataFrameFormatterget_level_lengths)pprint_thingc                  `   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 }|| _        || _        || _        d | j         j                                        D             | _        d S )NTzdisplay.html.borderc                N    i | ]"\  }}|t          |t                    r| d n|#S )px)
isinstanceint).0columnvalues      R/var/www/html/t/fyr/venv311/lib/python3.11/site-packages/pandas/io/formats/html.py
<dictcomp>z*HTMLFormatter.__init__.<locals>.<dictcomp>G   sG     
 
 
 Juc$:$:EuLLLL
 
 
    )fmtr   frametr_framecolumnselements	bold_rowsescapeshow_dimensionsr
   r&   r   r   r   r   	col_spaceitems)selfr   r   r   r   r   s         r*   __init__zHTMLFormatter.__init__-   s     X^
x(0#%+ho#x7>Vt^^#z*?@@AAFF 	F (
 
!%!3!9!9!;!;
 
 
r,   strc                    |                                  }t          d |D                       rd |D             }d                    |          S )Nc              3  @   K   | ]}t          |t                    V  d S N)r%   r9   r'   xs     r*   	<genexpr>z*HTMLFormatter.to_string.<locals>.<genexpr>N   s,      11az!S!!111111r,   c                ,    g | ]}t          |          S  )r9   r=   s     r*   
<listcomp>z+HTMLFormatter.to_string.<locals>.<listcomp>O   s    +++SVV+++r,   
)renderanyjoin)r7   liness     r*   	to_stringzHTMLFormatter.to_stringL   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.   r0   r1   )r7   bys     r*   rD   zHTMLFormatter.renderR   s}    & 	SBJJWc$*ooWWRWW#dj6H2I2IWWW   }r,   c                    | j         j        S r<   )r-   rN   r7   s    r*   rN   z$HTMLFormatter.should_show_dimensions]   s    x..r,   c                    | j         j        S r<   )r-   show_row_idx_namesrT   s    r*   rV   z HTMLFormatter.show_row_idx_namesa       x**r,   c                    | j         j        S r<   )r-   show_col_idx_namesrT   s    r*   rY   z HTMLFormatter.show_col_idx_namese   rW   r,   r&   c                R    | j         j        r| j        j        j        S | j        rdS dS )N   r   )r-   indexr.   nlevelsrY   rT   s    r*   
row_levelszHTMLFormatter.row_levelsi   s3    8> 		:#++$ 	 1qr,   r   c                    | j         S r<   )r0   rT   s    r*   _get_columns_formatted_valuesz+HTMLFormatter._get_columns_formatted_valuesx   s
    |r,   c                    | j         j        S r<   )r-   is_truncatedrT   s    r*   rb   zHTMLFormatter.is_truncated{   s    x$$r,   c                >    t          | j        j        j                  S r<   )rQ   r-   r/   r0   rT   s    r*   ncolszHTMLFormatter.ncols   s    48$,---r,   r   sr   indentc                d    t          |          }| j                            d|z  |z              d S )NrL   )r   r1   append)r7   re   rf   rss       r*   rP   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kindrf   rk   )r5   get_write_cell)r7   re   rj   rf   rk   r5   s         r*   write_thzHTMLFormatter.write_th   sj    2 N&&q$//	 	7i+:2D66666Df4@@@@@r,   c                8    |                      |d||           d S )Ntdro   )rr   )r7   re   rf   rk   s       r*   write_tdzHTMLFormatter.write_td   s%    f4@@@@@r,   ru   rp   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<rL   >z&amp;z&lt;z&gt;)&rx   ry   )escape_charsz	<a href="z" target="_blank">z</a>rm   z</)r3   r   stripr   r   rP   )
r7   re   rp   rf   rk   	start_tagescri   rs_unescapedend_as
             r*   rr   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;">)rf   rj   rk   )rk   z</tr>)rP   	enumeraterq   r2   rs   rv   )r7   r   rf   r   rj   r   rk   r   ire   val_tags              r*   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 rm   z id=""z	 border="z<tablez class="rL   ry   z</table>)r   rh   r   r%   r9   splitlisttuple	TypeErrortypeextendr   r   rP   rF   r-   rj   rV   _write_headerr   _write_body)r7   rf   _classesuse_mathjax
id_sectionborder_attrs         r*   rM   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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adjoinnamesr[   )...r   rm   spanT)rk   rj   )rj   r   )r-   is_truncated_horizontallyr%   r0   r   r   r   
no_defaultformatr   rQ   r   zip
tr_col_numr   r6   r^   r\   rY   show_index_namesr   rh   r   r   r   namer   r`   justifyinsert)r7   rf   r   templatesentinellevelslevel_lengths	inner_lvllnumrecordsvaluesins_colrecs_newtagr   rowr   rk   jr   vr   s                         r*   _write_col_headerzHTMLFormatter._write_col_header  s   $(H$F!dlJ// r	T9H x  !> \(((5PU(VVF-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 )Nrm   rA   r=   s     r*   rB   z3HTMLFormatter._write_row_header.<locals>.<listcomp>  s     JJJaAMqqrJJJr,   rm   r[   r   T)rj   )r-   r   r.   r\   r   rd   r   r   )r7   rf   r   r   s       r*   _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>)rP   r-   rj   r   r   rV   r   )r7   rf   s     r*   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 rA   r-   
format_colr'   r   r7   s     r*   r+   z7HTMLFormatter._get_formatted_values.<locals>.<dictcomp>  s+    OOO!TX0033OOOr,   )r   rangerd   )r7   
fmt_valuess   ` r*   _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>)
rP   r   r-   r\   r%   r.   r   _write_hierarchical_rowsr   _write_regular_rows)r7   rf   r   s      r*   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        rd| j                             d          }|%| j         j        j                            |          }n#| j         j        j                                        }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__r   rk   r   rm   c              3  4   K   | ]}|                  V  d S r<   rA   r'   r   r   r   s     r*   r?   z4HTMLFormatter._write_regular_rows.<locals>.<genexpr>  s,      CCAz!}Q'CCCCCCr,   )r-   r   is_truncated_verticallyrQ   r/   r\   _get_formattermapr   r   
tr_row_numr   r   r^   rh   rY   r   rd   r   r   )r7   r   rf   r   r   nrowsr-   index_valuesr   str_sep_row
dot_col_ixr   s    `         @r*   r   z!HTMLFormatter._write_regular_rows  s    %)H$F!"&("BDH%&&8> 	@())+66C#x06::3??#x06==??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d          }t          t          |           }| j         j        rt          j        }	|j                            |	d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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<   rA   r   s     r*   r?   z9HTMLFormatter._write_hierarchical_rows.<locals>.<genexpr>!  ,      GG:a=+GGGGGGr,   r   c              3  4   K   | ]}|                  V  d S r<   rA   r   s     r*   r?   z9HTMLFormatter._write_hierarchical_rows.<locals>.<genexpr>?  r   r,   )r-   r   r   r/   rQ   r%   r\   r   r   r   r   r   r   r   r   r   r   r6   r   r   r   rh   r   rd   r^   r   r   r   r]   )r7   r   rf   r   r   r   r.   r   
idx_valuesr   r   r   r   ins_rowinsertedr   r   rec_newr   r   dot_rowix_colr   rk   sparse_offsetr   r   r   r   s    `                          @r*   r   z&HTMLFormatter._write_hierarchical_rows  s    3$(H$F!"&("B!E

%+z22222[''uE'RR
#z*++
8 m	~H[''%u'UUF-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 "    "++U5PU+VVW 
 

: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    r9   r    rI   )r    r   )r    r&   )r    r   )r   )re   r   rf   r&   r    r!   )Fr   N)
re   r   rj   r   rf   r&   rk   r   r    r!   )r   N)re   r   rf   r&   rk   r   r    r!   )ru   r   N)
re   r   rp   r9   rf   r&   rk   r   r    r!   )r   r   FNNr   )r   r   rf   r&   r   r&   rj   r   r   r   rk   r   r   r&   r    r!   )rf   r&   r    r!   r    r   )r   r   rf   r&   r    r!   )__name__
__module____qualname____doc__r   __annotations__r8   rH   rD   propertyrN   rV   rY   r^   r`   rb   rd   rP   rs   rv   rr   r   rM   r   r   r   r   r   r   r   rA   r,   r*   r   r   !   s          L
 =A$(#"
 
 
 
 
>       	 	 	 	 / / / 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	' 	' 	' 	'   

' 
' 
' 
'+ + + +Z{ { { { { {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 rA   r   r   s     r*   r+   z;NotebookFormatter._get_formatted_values.<locals>.<dictcomp>S  s+    EEEa48&&q))EEEr,   )r   rd   rT   s   `r*   r   z'NotebookFormatter._get_formatted_valuesR  s'    EEEE53D3DEEEEr,   rI   c                4    | j                                         S r<   )r0   r   rT   s    r*   r`   z/NotebookFormatter._get_columns_formatted_valuesU  s    |""$$$r,   r!   c                   d}d}dddg}t          | j        t                    r2|                    d           | j        r|                    d           n|                    d           d	                    t          fd
|                    }t          d                    |||f                    }|                     |           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                    | z  S r<   rA   )ttemplate_selects    r*   <lambda>z/NotebookFormatter.write_style.<locals>.<lambda>p  s    11D r,   rC   )	r%   r0   r   rh   rV   rF   r   r   rP   )r7   template_firsttemplate_lastelement_propstemplate_midr   r   s         @r*   write_stylezNotebookFormatter.write_styleX  s    
 E4
 dlJ// 	F  !FGGG& $$G     !DEEE{{3'D'D'D'Dm#T#TUU$))^\=$QRRSS

8r,   c                    |                      d           |                                  t                                                       |                      d           | j        S )Nz<div>z</div>)rP   r   superrD   r1   )r7   	__class__s    r*   rD   zNotebookFormatter.rendert  sU    

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

8}r,   r   r   )r    r!   )	r   r   r   r   r   r`   r   rD   __classcell__)r  s   @r*   r   r   K  s         F F F F% % % %   8         r,   r   N)r   
__future__r   textwrapr   typingr   r   r   r   r	   r
   pandas._configr   pandas._libsr   pandasr   r   pandas.io.commonr   pandas.io.formats.formatr   r   pandas.io.formats.printingr   r   r   rA   r,   r*   <module>r     s    # " " " " "                      & % % % % %             
 $ # # # # #        4 3 3 3 3 3g g g g g g g gT. . . . . . . . . .r,   